Sat, Mar 24, 2018 at 04:05:38PM CET, d...@cumulusnetworks.com wrote: >On 3/24/18 1:26 AM, Jiri Pirko wrote: >> Fri, Mar 23, 2018 at 04:13:14PM CET, d...@cumulusnetworks.com wrote: >>> On 3/23/18 9:05 AM, Jiri Pirko wrote: >>>> Fri, Mar 23, 2018 at 04:03:40PM CET, d...@cumulusnetworks.com wrote: >>>>> On 3/23/18 9:01 AM, Jiri Pirko wrote: >>>>>> Fri, Mar 23, 2018 at 03:31:02PM CET, d...@cumulusnetworks.com wrote: >>>>>>> On 3/23/18 12:50 AM, Jiri Pirko wrote: >>>>>>>>> +void nsim_devlink_setup(struct netdevsim *ns) >>>>>>>>> +{ >>>>>>>>> + struct net *net = dev_net(ns->netdev); >>>>>>>>> + bool *reg_devlink = net_generic(net, nsim_devlink_id); >>>>>>>>> + struct devlink *devlink; >>>>>>>>> + int err = -ENOMEM; >>>>>>>>> + >>>>>>>>> + /* only one device per namespace controls devlink */ >>>>>>>>> + if (!*reg_devlink) { >>>>>>>>> + ns->devlink = NULL; >>>>>>>>> + return; >>>>>>>>> + } >>>>>>>>> + >>>>>>>>> + devlink = devlink_alloc(&nsim_devlink_ops, 0); >>>>>>>>> + if (!devlink) >>>>>>>>> + return; >>>>>>>>> + >>>>>>>>> + devlink_net_set(devlink, net); >>>>>>>>> + err = devlink_register(devlink, &ns->dev); >>>>>>>> >>>>>>>> This reg_devlink construct looks odd. Why don't you leave the devlink >>>>>>>> instance in init_ns? >>>>>>> >>>>>>> It is a per-network namespace resource controller. Since struct devlink >>>>>> >>>>>> Wait a second. What do you mean by "per-network namespace"? Devlink >>>>>> instance is always associated with one physical device. Like an ASIC. >>>>>> >>>>>> >>>>>>> has a net entry, the simplest design is to put it into the namespace of >>>>>>> the controller. Without it, controlling resource sizes in namespace >>>>>>> 'foobar' has to be done from init_net, which is just wrong. >>>>> >>>>> you need to look at how netdevsim creates a device per netdevice. >>>> >>>> That means one devlink instance for each netdevsim device, doesn't it? >>>> >>> >>> yes. >> >> Still not sure how to handle namespaces in devlink. Originally, I >> thought it would be okay to leave all devlink instances in init_ns. >> Because what happens if you move netdev to another namespace? Should the >> devlink move as well? What if you have multiple ports, each in different >> namespace. Can user move devlink instance to another namespace? Etc. >> > >The devlink instance is associated with a 'struct device' and those do >not change namespaces AFAIK.
Yeah. But you put devlink instance into namespace according to struct net_device. That is mismatch.