Skip to content

Commit 1c40107

Browse files
kuba-moodavem330
authored andcommitted
netdevsim: move details of vf config to dev
Since "eswitch" configuration was added bus.c contains a lot of device details which really belong to dev.c. Restructure the code while moving it. Signed-off-by: Jakub Kicinski <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 5e388f3 commit 1c40107

File tree

3 files changed

+63
-73
lines changed

3 files changed

+63
-73
lines changed

drivers/net/netdevsim/bus.c

Lines changed: 4 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
#include <linux/kernel.h>
99
#include <linux/list.h>
1010
#include <linux/mutex.h>
11-
#include <linux/rtnetlink.h>
1211
#include <linux/slab.h>
1312
#include <linux/sysfs.h>
1413

@@ -24,50 +23,11 @@ static struct nsim_bus_dev *to_nsim_bus_dev(struct device *dev)
2423
return container_of(dev, struct nsim_bus_dev, dev);
2524
}
2625

27-
static void
28-
nsim_bus_dev_set_vfs(struct nsim_bus_dev *nsim_bus_dev, unsigned int num_vfs)
29-
{
30-
rtnl_lock();
31-
nsim_bus_dev->num_vfs = num_vfs;
32-
rtnl_unlock();
33-
}
34-
35-
static int nsim_bus_dev_vfs_enable(struct nsim_bus_dev *nsim_bus_dev,
36-
unsigned int num_vfs)
37-
{
38-
struct nsim_dev *nsim_dev;
39-
int err = 0;
40-
41-
if (nsim_bus_dev->max_vfs < num_vfs)
42-
return -ENOMEM;
43-
nsim_bus_dev_set_vfs(nsim_bus_dev, num_vfs);
44-
45-
nsim_dev = dev_get_drvdata(&nsim_bus_dev->dev);
46-
if (nsim_esw_mode_is_switchdev(nsim_dev)) {
47-
err = nsim_esw_switchdev_enable(nsim_dev, NULL);
48-
if (err)
49-
nsim_bus_dev_set_vfs(nsim_bus_dev, 0);
50-
}
51-
52-
return err;
53-
}
54-
55-
void nsim_bus_dev_vfs_disable(struct nsim_bus_dev *nsim_bus_dev)
56-
{
57-
struct nsim_dev *nsim_dev;
58-
59-
nsim_bus_dev_set_vfs(nsim_bus_dev, 0);
60-
nsim_dev = dev_get_drvdata(&nsim_bus_dev->dev);
61-
if (nsim_esw_mode_is_switchdev(nsim_dev))
62-
nsim_esw_legacy_enable(nsim_dev, NULL);
63-
}
64-
6526
static ssize_t
6627
nsim_bus_dev_numvfs_store(struct device *dev, struct device_attribute *attr,
6728
const char *buf, size_t count)
6829
{
6930
struct nsim_bus_dev *nsim_bus_dev = to_nsim_bus_dev(dev);
70-
struct nsim_dev *nsim_dev = dev_get_drvdata(dev);
7131
unsigned int num_vfs;
7232
int ret;
7333

@@ -76,33 +36,12 @@ nsim_bus_dev_numvfs_store(struct device *dev, struct device_attribute *attr,
7636
return ret;
7737

7838
device_lock(dev);
79-
if (!nsim_dev) {
80-
ret = -ENOENT;
81-
goto exit_unlock;
82-
}
83-
84-
mutex_lock(&nsim_dev->vfs_lock);
85-
if (nsim_bus_dev->num_vfs == num_vfs)
86-
goto exit_good;
87-
if (nsim_bus_dev->num_vfs && num_vfs) {
88-
ret = -EBUSY;
89-
goto exit_unlock;
90-
}
91-
92-
if (num_vfs) {
93-
ret = nsim_bus_dev_vfs_enable(nsim_bus_dev, num_vfs);
94-
if (ret)
95-
goto exit_unlock;
96-
} else {
97-
nsim_bus_dev_vfs_disable(nsim_bus_dev);
98-
}
99-
exit_good:
100-
ret = count;
101-
exit_unlock:
102-
mutex_unlock(&nsim_dev->vfs_lock);
39+
ret = -ENOENT;
40+
if (dev_get_drvdata(dev))
41+
ret = nsim_drv_configure_vfs(nsim_bus_dev, num_vfs);
10342
device_unlock(dev);
10443

105-
return ret;
44+
return ret ? ret : count;
10645
}
10746

10847
static ssize_t

drivers/net/netdevsim/dev.c

Lines changed: 57 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,14 @@ unsigned int nsim_dev_get_vfs(struct nsim_dev *nsim_dev)
6464
return nsim_dev->nsim_bus_dev->num_vfs;
6565
}
6666

67+
static void
68+
nsim_bus_dev_set_vfs(struct nsim_bus_dev *nsim_bus_dev, unsigned int num_vfs)
69+
{
70+
rtnl_lock();
71+
nsim_bus_dev->num_vfs = num_vfs;
72+
rtnl_unlock();
73+
}
74+
6775
#define NSIM_DEV_DUMMY_REGION_SIZE (1024 * 32)
6876

6977
static int
@@ -496,7 +504,9 @@ static void nsim_dev_dummy_region_exit(struct nsim_dev *nsim_dev)
496504
}
497505

498506
static void __nsim_dev_port_del(struct nsim_dev_port *nsim_dev_port);
499-
int nsim_esw_legacy_enable(struct nsim_dev *nsim_dev, struct netlink_ext_ack *extack)
507+
508+
static int nsim_esw_legacy_enable(struct nsim_dev *nsim_dev,
509+
struct netlink_ext_ack *extack)
500510
{
501511
struct devlink *devlink = priv_to_devlink(nsim_dev);
502512
struct nsim_dev_port *nsim_dev_port, *tmp;
@@ -511,7 +521,8 @@ int nsim_esw_legacy_enable(struct nsim_dev *nsim_dev, struct netlink_ext_ack *ex
511521
return 0;
512522
}
513523

514-
int nsim_esw_switchdev_enable(struct nsim_dev *nsim_dev, struct netlink_ext_ack *extack)
524+
static int nsim_esw_switchdev_enable(struct nsim_dev *nsim_dev,
525+
struct netlink_ext_ack *extack)
515526
{
516527
struct nsim_bus_dev *nsim_bus_dev = nsim_dev->nsim_bus_dev;
517528
int i, err;
@@ -1565,8 +1576,11 @@ static void nsim_dev_reload_destroy(struct nsim_dev *nsim_dev)
15651576
debugfs_remove(nsim_dev->take_snapshot);
15661577

15671578
mutex_lock(&nsim_dev->vfs_lock);
1568-
if (nsim_dev_get_vfs(nsim_dev))
1569-
nsim_bus_dev_vfs_disable(nsim_dev->nsim_bus_dev);
1579+
if (nsim_dev_get_vfs(nsim_dev)) {
1580+
nsim_bus_dev_set_vfs(nsim_dev->nsim_bus_dev, 0);
1581+
if (nsim_esw_mode_is_switchdev(nsim_dev))
1582+
nsim_esw_legacy_enable(nsim_dev, NULL);
1583+
}
15701584
mutex_unlock(&nsim_dev->vfs_lock);
15711585

15721586
nsim_dev_port_del_all(nsim_dev);
@@ -1641,6 +1655,45 @@ int nsim_dev_port_del(struct nsim_bus_dev *nsim_bus_dev, enum nsim_dev_port_type
16411655
return err;
16421656
}
16431657

1658+
int nsim_drv_configure_vfs(struct nsim_bus_dev *nsim_bus_dev,
1659+
unsigned int num_vfs)
1660+
{
1661+
struct nsim_dev *nsim_dev = dev_get_drvdata(&nsim_bus_dev->dev);
1662+
int ret;
1663+
1664+
mutex_lock(&nsim_dev->vfs_lock);
1665+
if (nsim_bus_dev->num_vfs == num_vfs) {
1666+
ret = 0;
1667+
goto exit_unlock;
1668+
}
1669+
if (nsim_bus_dev->num_vfs && num_vfs) {
1670+
ret = -EBUSY;
1671+
goto exit_unlock;
1672+
}
1673+
if (nsim_bus_dev->max_vfs < num_vfs) {
1674+
ret = -ENOMEM;
1675+
goto exit_unlock;
1676+
}
1677+
1678+
nsim_bus_dev_set_vfs(nsim_bus_dev, num_vfs);
1679+
if (nsim_esw_mode_is_switchdev(nsim_dev)) {
1680+
if (num_vfs) {
1681+
ret = nsim_esw_switchdev_enable(nsim_dev, NULL);
1682+
if (ret) {
1683+
nsim_bus_dev_set_vfs(nsim_bus_dev, 0);
1684+
goto exit_unlock;
1685+
}
1686+
} else {
1687+
nsim_esw_legacy_enable(nsim_dev, NULL);
1688+
}
1689+
}
1690+
1691+
exit_unlock:
1692+
mutex_unlock(&nsim_dev->vfs_lock);
1693+
1694+
return ret;
1695+
}
1696+
16441697
int nsim_dev_init(void)
16451698
{
16461699
nsim_dev_ddir = debugfs_create_dir(DRV_NAME, NULL);

drivers/net/netdevsim/netdevsim.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -281,9 +281,6 @@ struct nsim_dev {
281281
u16 esw_mode;
282282
};
283283

284-
int nsim_esw_legacy_enable(struct nsim_dev *nsim_dev, struct netlink_ext_ack *extack);
285-
int nsim_esw_switchdev_enable(struct nsim_dev *nsim_dev, struct netlink_ext_ack *extack);
286-
287284
static inline bool nsim_esw_mode_is_legacy(struct nsim_dev *nsim_dev)
288285
{
289286
return nsim_dev->esw_mode == DEVLINK_ESWITCH_MODE_LEGACY;
@@ -309,6 +306,8 @@ int nsim_dev_port_add(struct nsim_bus_dev *nsim_bus_dev,
309306
int nsim_dev_port_del(struct nsim_bus_dev *nsim_bus_dev,
310307
enum nsim_dev_port_type type,
311308
unsigned int port_index);
309+
int nsim_drv_configure_vfs(struct nsim_bus_dev *nsim_bus_dev,
310+
unsigned int num_vfs);
312311

313312
unsigned int nsim_dev_get_vfs(struct nsim_dev *nsim_dev);
314313

@@ -324,7 +323,6 @@ ssize_t nsim_bus_dev_max_vfs_read(struct file *file,
324323
ssize_t nsim_bus_dev_max_vfs_write(struct file *file,
325324
const char __user *data,
326325
size_t count, loff_t *ppos);
327-
void nsim_bus_dev_vfs_disable(struct nsim_bus_dev *nsim_bus_dev);
328326

329327
static inline bool nsim_dev_port_is_pf(struct nsim_dev_port *nsim_dev_port)
330328
{

0 commit comments

Comments
 (0)