[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <YRKC8NKClMyaQOmt@unreal>
Date: Tue, 10 Aug 2021 16:45:20 +0300
From: Leon Romanovsky <leon@...nel.org>
To: Prabhakar Kushwaha <prabhakar.pkin@...il.com>
Cc: "David S . Miller" <davem@...emloft.net>,
Jakub Kicinski <kuba@...nel.org>,
Alexandre Belloni <alexandre.belloni@...tlin.com>,
Andrew Lunn <andrew@...n.ch>, Ariel Elior <aelior@...vell.com>,
Bin Luo <luobin9@...wei.com>,
Claudiu Manoil <claudiu.manoil@....com>,
Coiby Xu <coiby.xu@...il.com>,
Derek Chickles <dchickles@...vell.com>, drivers@...sando.io,
Felix Manlunas <fmanlunas@...vell.com>,
Florian Fainelli <f.fainelli@...il.com>,
Geetha sowjanya <gakula@...vell.com>,
Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
GR-everest-linux-l2@...vell.com, GR-Linux-NIC-Dev@...vell.com,
hariprasad <hkelam@...vell.com>,
Ido Schimmel <idosch@...dia.com>,
intel-wired-lan@...ts.osuosl.org,
Ioana Ciornei <ioana.ciornei@....com>,
Jerin Jacob <jerinj@...vell.com>,
Jesse Brandeburg <jesse.brandeburg@...el.com>,
Jiri Pirko <jiri@...dia.com>,
Linu Cherian <lcherian@...vell.com>,
Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
linux-omap@...r.kernel.org, linux-staging@...ts.linux.dev,
Manish Chopra <manishc@...vell.com>,
Michael Chan <michael.chan@...adcom.com>,
netdev@...r.kernel.org, oss-drivers@...igine.com,
Richard Cochran <richardcochran@...il.com>,
Saeed Mahameed <saeedm@...dia.com>,
Salil Mehta <salil.mehta@...wei.com>,
Satanand Burla <sburla@...vell.com>,
Shannon Nelson <snelson@...sando.io>,
Simon Horman <simon.horman@...igine.com>,
Subbaraya Sundeep <sbhatta@...vell.com>,
Sunil Goutham <sgoutham@...vell.com>,
Taras Chornyi <tchornyi@...vell.com>,
Tariq Toukan <tariqt@...dia.com>,
Tony Nguyen <anthony.l.nguyen@...el.com>,
UNGLinuxDriver@...rochip.com, Vadym Kochan <vkochan@...vell.com>,
Vivien Didelot <vivien.didelot@...il.com>,
Vladimir Oltean <vladimir.oltean@....com>,
Yisen Zhuang <yisen.zhuang@...wei.com>,
Prabhakar Kushwaha <pkushwaha@...vell.com>,
Shai Malin <malin1024@...il.com>,
Shai Malin <smalin@...vell.com>, rtoshniwal@...vell.com,
Omkar Kulkarni <okulkarni@...vell.com>
Subject: Re: [PATCH net-next] devlink: Set device as early as possible
On Tue, Aug 10, 2021 at 06:08:51PM +0530, Prabhakar Kushwaha wrote:
> Hi Leon,
<...>
> > struct devlink *devlink_alloc_ns(const struct devlink_ops *ops,
> > - size_t priv_size, struct net *net)
> > + size_t priv_size, struct net *net,
> > + struct device *dev)
> > {
> > struct devlink *devlink;
> >
> > - if (WARN_ON(!ops))
> > - return NULL;
> > -
> > + WARN_ON(!ops || !dev);
> > if (!devlink_reload_actions_valid(ops))
> > return NULL;
> >
> > devlink = kzalloc(sizeof(*devlink) + priv_size, GFP_KERNEL);
> > if (!devlink)
> > return NULL;
> > +
> > + devlink->dev = dev;
> > devlink->ops = ops;
> > xa_init_flags(&devlink->snapshot_ids, XA_FLAGS_ALLOC);
> > write_pnet(&devlink->_net, net);
> > @@ -8810,12 +8812,9 @@ EXPORT_SYMBOL_GPL(devlink_alloc_ns);
> > * devlink_register - Register devlink instance
> > *
> > * @devlink: devlink
> > - * @dev: parent device
> > */
>
> This patch is converting devlink_alloc() to devlink_alloc_register().
>
> There are 2 APIs: devlink_alloc() and devlink_register().
> Both APIs can be used in a scenario,
> Where devlink_alloc() can be done by code written around
> one struct dev and used by another struct dev.
> or
> This scenario is not even a valid scenario?
devlink_alloc() is used to allocated netdev structures for newly
initialized device, it is not possible to share same devlink instance
between different devices.
>
> > -int devlink_register(struct devlink *devlink, struct device *dev)
> > +int devlink_register(struct devlink *devlink)
> > {
> > - WARN_ON(devlink->dev);
> > - devlink->dev = dev;
> > mutex_lock(&devlink_mutex);
> > list_add_tail(&devlink->list, &devlink_list);
> > devlink_notify(devlink, DEVLINK_CMD_NEW);
>
> Considering device registration has been moved to devlink_alloc().
> Can the remaining code of devlink_register() be also moved in devlink_alloc()?
The line "list_add_tail(&devlink->list, &devlink_list);" makes the
devlink instance visible to the devlink netlink users. We need to be
sure that it is happening when the device is already initialized, while
devlink_alloc() is performed usually as first line in .probe() routine.
This means that we can't combine alloc an register and
devlink_alloc_register() can't be valid scenario.
Thanks
>
> --pk
Powered by blists - more mailing lists