From: Leon Romanovsky <leon@kernel.org> To: "David S . Miller" <davem@davemloft.net>, Jakub Kicinski <kuba@kernel.org> Cc: Leon Romanovsky <leonro@nvidia.com>, Alexandre Belloni <alexandre.belloni@bootlin.com>, Andrew Lunn <andrew@lunn.ch>, Aya Levin <ayal@mellanox.com>, Claudiu Manoil <claudiu.manoil@nxp.com>, drivers@pensando.io, Florian Fainelli <f.fainelli@gmail.com>, Ido Schimmel <idosch@nvidia.com>, intel-wired-lan@lists.osuosl.org, Ioana Ciornei <ioana.ciornei@nxp.com>, Jesse Brandeburg <jesse.brandeburg@intel.com>, Jiri Pirko <jiri@nvidia.com>, linux-kernel@vger.kernel.org, linux-rdma@vger.kernel.org, Michael Chan <michael.chan@broadcom.com>, netdev@vger.kernel.org, oss-drivers@corigine.com, Saeed Mahameed <saeedm@nvidia.com>, Shannon Nelson <snelson@pensando.io>, Simon Horman <simon.horman@corigine.com>, Taras Chornyi <tchornyi@marvell.com>, Tariq Toukan <tariqt@nvidia.com>, Tony Nguyen <anthony.l.nguyen@intel.com>, UNGLinuxDriver@microchip.com, Vivien Didelot <vivien.didelot@gmail.com>, Vladimir Oltean <vladimir.oltean@nxp.com> Subject: [PATCH net-next 5/6] devlink: Reshuffle resource registration logic Date: Wed, 17 Nov 2021 20:26:21 +0200 [thread overview] Message-ID: <6176a137a4ded48501e8a06fda0e305f9cfc787c.1637173517.git.leonro@nvidia.com> (raw) In-Reply-To: <cover.1637173517.git.leonro@nvidia.com> From: Leon Romanovsky <leonro@nvidia.com> The devlink->lock doesn't need to be held during whole execution of function, but only when recursive path walk and list addition are performed. So reshuffle the resource registration logic to allocate resource and configure it without lock. As part of this change, complain more louder if driver authors used already existed resource_id. It is performed outside of the locks as drivers were supposed to provide unique IDs and such error can't happen. Signed-off-by: Leon Romanovsky <leonro@nvidia.com> --- net/core/devlink.c | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/net/core/devlink.c b/net/core/devlink.c index 356057ea2e52..1dda313d6d1b 100644 --- a/net/core/devlink.c +++ b/net/core/devlink.c @@ -9833,17 +9833,9 @@ int devlink_resource_register(struct devlink *devlink, { struct devlink_resource *resource; struct list_head *resource_list; - bool top_hierarchy; int err = 0; - top_hierarchy = parent_resource_id == DEVLINK_RESOURCE_ID_PARENT_TOP; - - mutex_lock(&devlink->lock); - resource = devlink_resource_find(devlink, NULL, resource_id); - if (resource) { - err = -EINVAL; - goto out; - } + WARN_ON(devlink_resource_find(devlink, NULL, resource_id)); resource = kzalloc(sizeof(*resource), GFP_KERNEL); if (!resource) { @@ -9851,7 +9843,17 @@ int devlink_resource_register(struct devlink *devlink, goto out; } - if (top_hierarchy) { + resource->name = resource_name; + resource->size = resource_size; + resource->size_new = resource_size; + resource->id = resource_id; + resource->size_valid = true; + memcpy(&resource->size_params, size_params, + sizeof(resource->size_params)); + INIT_LIST_HEAD(&resource->resource_list); + + mutex_lock(&devlink->lock); + if (parent_resource_id == DEVLINK_RESOURCE_ID_PARENT_TOP) { resource_list = &devlink->resource_list; } else { struct devlink_resource *parent_resource; @@ -9868,14 +9870,6 @@ int devlink_resource_register(struct devlink *devlink, } } - resource->name = resource_name; - resource->size = resource_size; - resource->size_new = resource_size; - resource->id = resource_id; - resource->size_valid = true; - memcpy(&resource->size_params, size_params, - sizeof(resource->size_params)); - INIT_LIST_HEAD(&resource->resource_list); list_add_tail(&resource->list, resource_list); out: mutex_unlock(&devlink->lock); -- 2.33.1
WARNING: multiple messages have this Message-ID (diff)
From: Leon Romanovsky <leon@kernel.org> To: intel-wired-lan@osuosl.org Subject: [Intel-wired-lan] [PATCH net-next 5/6] devlink: Reshuffle resource registration logic Date: Wed, 17 Nov 2021 20:26:21 +0200 [thread overview] Message-ID: <6176a137a4ded48501e8a06fda0e305f9cfc787c.1637173517.git.leonro@nvidia.com> (raw) In-Reply-To: <cover.1637173517.git.leonro@nvidia.com> From: Leon Romanovsky <leonro@nvidia.com> The devlink->lock doesn't need to be held during whole execution of function, but only when recursive path walk and list addition are performed. So reshuffle the resource registration logic to allocate resource and configure it without lock. As part of this change, complain more louder if driver authors used already existed resource_id. It is performed outside of the locks as drivers were supposed to provide unique IDs and such error can't happen. Signed-off-by: Leon Romanovsky <leonro@nvidia.com> --- net/core/devlink.c | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/net/core/devlink.c b/net/core/devlink.c index 356057ea2e52..1dda313d6d1b 100644 --- a/net/core/devlink.c +++ b/net/core/devlink.c @@ -9833,17 +9833,9 @@ int devlink_resource_register(struct devlink *devlink, { struct devlink_resource *resource; struct list_head *resource_list; - bool top_hierarchy; int err = 0; - top_hierarchy = parent_resource_id == DEVLINK_RESOURCE_ID_PARENT_TOP; - - mutex_lock(&devlink->lock); - resource = devlink_resource_find(devlink, NULL, resource_id); - if (resource) { - err = -EINVAL; - goto out; - } + WARN_ON(devlink_resource_find(devlink, NULL, resource_id)); resource = kzalloc(sizeof(*resource), GFP_KERNEL); if (!resource) { @@ -9851,7 +9843,17 @@ int devlink_resource_register(struct devlink *devlink, goto out; } - if (top_hierarchy) { + resource->name = resource_name; + resource->size = resource_size; + resource->size_new = resource_size; + resource->id = resource_id; + resource->size_valid = true; + memcpy(&resource->size_params, size_params, + sizeof(resource->size_params)); + INIT_LIST_HEAD(&resource->resource_list); + + mutex_lock(&devlink->lock); + if (parent_resource_id == DEVLINK_RESOURCE_ID_PARENT_TOP) { resource_list = &devlink->resource_list; } else { struct devlink_resource *parent_resource; @@ -9868,14 +9870,6 @@ int devlink_resource_register(struct devlink *devlink, } } - resource->name = resource_name; - resource->size = resource_size; - resource->size_new = resource_size; - resource->id = resource_id; - resource->size_valid = true; - memcpy(&resource->size_params, size_params, - sizeof(resource->size_params)); - INIT_LIST_HEAD(&resource->resource_list); list_add_tail(&resource->list, resource_list); out: mutex_unlock(&devlink->lock); -- 2.33.1
next prev parent reply other threads:[~2021-11-17 18:26 UTC|newest] Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-11-17 18:26 [PATCH net-next 0/6] Devlink cleanups Leon Romanovsky 2021-11-17 18:26 ` [Intel-wired-lan] " Leon Romanovsky 2021-11-17 18:26 ` [PATCH net-next 1/6] devlink: Remove misleading internal_flags from health reporter dump Leon Romanovsky 2021-11-17 18:26 ` [Intel-wired-lan] " Leon Romanovsky 2021-11-17 18:26 ` [PATCH net-next 2/6] devlink: Delete useless checks of holding devlink lock Leon Romanovsky 2021-11-17 18:26 ` [Intel-wired-lan] " Leon Romanovsky 2021-11-17 18:26 ` [PATCH net-next 3/6] devlink: Simplify devlink resources unregister call Leon Romanovsky 2021-11-17 18:26 ` [Intel-wired-lan] " Leon Romanovsky 2021-11-17 18:26 ` [PATCH net-next 4/6] devlink: Clean registration of devlink port Leon Romanovsky 2021-11-17 18:26 ` [Intel-wired-lan] " Leon Romanovsky 2021-11-18 4:49 ` Jakub Kicinski 2021-11-18 4:49 ` [Intel-wired-lan] " Jakub Kicinski 2021-11-18 7:32 ` Leon Romanovsky 2021-11-18 7:32 ` [Intel-wired-lan] " Leon Romanovsky 2021-11-17 18:26 ` Leon Romanovsky [this message] 2021-11-17 18:26 ` [Intel-wired-lan] [PATCH net-next 5/6] devlink: Reshuffle resource registration logic Leon Romanovsky 2021-11-18 4:49 ` Jakub Kicinski 2021-11-18 4:49 ` [Intel-wired-lan] " Jakub Kicinski 2021-11-18 7:50 ` Leon Romanovsky 2021-11-18 7:50 ` [Intel-wired-lan] " Leon Romanovsky 2021-11-19 1:48 ` Jakub Kicinski 2021-11-19 1:48 ` [Intel-wired-lan] " Jakub Kicinski 2021-11-19 15:38 ` Leon Romanovsky 2021-11-19 15:38 ` [Intel-wired-lan] " Leon Romanovsky 2021-11-19 16:10 ` Jakub Kicinski 2021-11-19 16:10 ` [Intel-wired-lan] " Jakub Kicinski 2021-11-21 8:45 ` Leon Romanovsky 2021-11-21 8:45 ` [Intel-wired-lan] " Leon Romanovsky 2021-11-23 2:27 ` Jakub Kicinski 2021-11-23 2:27 ` [Intel-wired-lan] " Jakub Kicinski 2021-11-23 8:33 ` Leon Romanovsky 2021-11-23 8:33 ` [Intel-wired-lan] " Leon Romanovsky 2021-11-23 23:33 ` Jakub Kicinski 2021-11-23 23:33 ` [Intel-wired-lan] " Jakub Kicinski 2021-11-25 9:02 ` Leon Romanovsky 2021-11-25 9:02 ` [Intel-wired-lan] " Leon Romanovsky 2021-11-17 18:26 ` [PATCH net-next 6/6] devlink: Inline sb related functions Leon Romanovsky 2021-11-17 18:26 ` [Intel-wired-lan] " Leon Romanovsky
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=6176a137a4ded48501e8a06fda0e305f9cfc787c.1637173517.git.leonro@nvidia.com \ --to=leon@kernel.org \ --cc=UNGLinuxDriver@microchip.com \ --cc=alexandre.belloni@bootlin.com \ --cc=andrew@lunn.ch \ --cc=anthony.l.nguyen@intel.com \ --cc=ayal@mellanox.com \ --cc=claudiu.manoil@nxp.com \ --cc=davem@davemloft.net \ --cc=drivers@pensando.io \ --cc=f.fainelli@gmail.com \ --cc=idosch@nvidia.com \ --cc=intel-wired-lan@lists.osuosl.org \ --cc=ioana.ciornei@nxp.com \ --cc=jesse.brandeburg@intel.com \ --cc=jiri@nvidia.com \ --cc=kuba@kernel.org \ --cc=leonro@nvidia.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-rdma@vger.kernel.org \ --cc=michael.chan@broadcom.com \ --cc=netdev@vger.kernel.org \ --cc=oss-drivers@corigine.com \ --cc=saeedm@nvidia.com \ --cc=simon.horman@corigine.com \ --cc=snelson@pensando.io \ --cc=tariqt@nvidia.com \ --cc=tchornyi@marvell.com \ --cc=vivien.didelot@gmail.com \ --cc=vladimir.oltean@nxp.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.