netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jacob Keller <jacob.e.keller@intel.com>
To: Jiri Pirko <jiri@resnulli.us>, <netdev@vger.kernel.org>
Cc: <davem@davemloft.net>, <kuba@kernel.org>, <pabeni@redhat.com>,
	<edumazet@google.com>, <michael.chan@broadcom.com>,
	<yisen.zhuang@huawei.com>, <salil.mehta@huawei.com>,
	<jesse.brandeburg@intel.com>, <anthony.l.nguyen@intel.com>,
	<tariqt@nvidia.com>, <saeedm@nvidia.com>, <leon@kernel.org>,
	<idosch@nvidia.com>, <petrm@nvidia.com>, <gal@nvidia.com>,
	<mailhol.vincent@wanadoo.fr>
Subject: Re: [patch net-next 1/3] devlink: move devlink reload notifications back in between _down() and _up() calls
Date: Fri, 27 Jan 2023 16:08:13 -0800	[thread overview]
Message-ID: <86152a35-6d56-ebeb-e436-97426ef08e32@intel.com> (raw)
In-Reply-To: <20230127155042.1846608-2-jiri@resnulli.us>



On 1/27/2023 7:50 AM, Jiri Pirko wrote:
> From: Jiri Pirko <jiri@nvidia.com>
> 
> This effectively reverts commit 05a7f4a8dff1 ("devlink: Break parameter
> notification sequence to be before/after unload/load driver").
> 
> Cited commit resolved a problem in mlx5 params implementation,
> when param notification code accessed memory previously freed
> during reload.
> 
> Now, when the params can be registered and unregistered when devlink
> instance is registered, mlx5 code unregisters the problematic param
> during devlink reload. The fix is therefore no longer needed.
> 
> Current behavior is a it problematic, as it sends DEL notifications even
> in potential case when reload_down() call fails which might confuse
> userspace notifications listener.
> 
> So move the reload notifications back where they were originally in
> between reload_down() and reload_up() calls.
> 
> Signed-off-by: Jiri Pirko <jiri@nvidia.com>
> ---

Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>

>  net/devlink/leftover.c | 37 ++++++++++++++++---------------------
>  1 file changed, 16 insertions(+), 21 deletions(-)
> 
> diff --git a/net/devlink/leftover.c b/net/devlink/leftover.c
> index bd4c5d2dd612..24e20861a28b 100644
> --- a/net/devlink/leftover.c
> +++ b/net/devlink/leftover.c
> @@ -4235,12 +4235,11 @@ static void devlink_param_notify(struct devlink *devlink,
>  				 struct devlink_param_item *param_item,
>  				 enum devlink_command cmd);
>  
> -static void devlink_ns_change_notify(struct devlink *devlink,
> -				     struct net *dest_net, struct net *curr_net,
> -				     bool new)
> +static void devlink_reload_netns_change(struct devlink *devlink,
> +					struct net *curr_net,
> +					struct net *dest_net)
>  {
>  	struct devlink_param_item *param_item;
> -	enum devlink_command cmd;
>  
>  	/* Userspace needs to be notified about devlink objects
>  	 * removed from original and entering new network namespace.
> @@ -4248,18 +4247,19 @@ static void devlink_ns_change_notify(struct devlink *devlink,
>  	 * reload process so the notifications are generated separatelly.
>  	 */
>  
> -	if (!dest_net || net_eq(dest_net, curr_net))
> -		return;
> +	list_for_each_entry(param_item, &devlink->param_list, list)
> +		devlink_param_notify(devlink, 0, param_item,
> +				     DEVLINK_CMD_PARAM_DEL);
> +	devlink_notify(devlink, DEVLINK_CMD_DEL);
>  
> -	if (new)
> -		devlink_notify(devlink, DEVLINK_CMD_NEW);
> +	move_netdevice_notifier_net(curr_net, dest_net,
> +				    &devlink->netdevice_nb);
> +	write_pnet(&devlink->_net, dest_net);
>  
> -	cmd = new ? DEVLINK_CMD_PARAM_NEW : DEVLINK_CMD_PARAM_DEL;
> +	devlink_notify(devlink, DEVLINK_CMD_NEW);
>  	list_for_each_entry(param_item, &devlink->param_list, list)
> -		devlink_param_notify(devlink, 0, param_item, cmd);
> -
> -	if (!new)
> -		devlink_notify(devlink, DEVLINK_CMD_DEL);
> +		devlink_param_notify(devlink, 0, param_item,
> +				     DEVLINK_CMD_PARAM_NEW);
>  }
>  
>  static void devlink_reload_failed_set(struct devlink *devlink,
> @@ -4341,24 +4341,19 @@ int devlink_reload(struct devlink *devlink, struct net *dest_net,
>  	memcpy(remote_reload_stats, devlink->stats.remote_reload_stats,
>  	       sizeof(remote_reload_stats));
>  
> -	curr_net = devlink_net(devlink);
> -	devlink_ns_change_notify(devlink, dest_net, curr_net, false);
>  	err = devlink->ops->reload_down(devlink, !!dest_net, action, limit, extack);
>  	if (err)
>  		return err;
>  
> -	if (dest_net && !net_eq(dest_net, curr_net)) {
> -		move_netdevice_notifier_net(curr_net, dest_net,
> -					    &devlink->netdevice_nb);
> -		write_pnet(&devlink->_net, dest_net);
> -	}
> +	curr_net = devlink_net(devlink);
> +	if (dest_net && !net_eq(dest_net, curr_net))
> +		devlink_reload_netns_change(devlink, curr_net, dest_net);
>  
>  	err = devlink->ops->reload_up(devlink, action, limit, actions_performed, extack);
>  	devlink_reload_failed_set(devlink, !!err);
>  	if (err)
>  		return err;
>  
> -	devlink_ns_change_notify(devlink, dest_net, curr_net, true);
>  	WARN_ON(!(*actions_performed & BIT(action)));
>  	/* Catch driver on updating the remote action within devlink reload */
>  	WARN_ON(memcmp(remote_reload_stats, devlink->stats.remote_reload_stats,

  reply	other threads:[~2023-01-28  0:09 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-27 15:50 [patch net-next 0/3] devlink: fix reload notifications and remove features Jiri Pirko
2023-01-27 15:50 ` [patch net-next 1/3] devlink: move devlink reload notifications back in between _down() and _up() calls Jiri Pirko
2023-01-28  0:08   ` Jacob Keller [this message]
2023-01-27 15:50 ` [patch net-next 2/3] devlink: send objects notifications during devlink reload Jiri Pirko
2023-01-28  0:08   ` Jacob Keller
2023-01-27 15:50 ` [patch net-next 3/3] devlink: remove devlink features Jiri Pirko
2023-01-28  0:08   ` Jacob Keller
2023-01-28  5:58 ` [patch net-next 0/3] devlink: fix reload notifications and remove features Jakub Kicinski
2023-01-30  8:50 ` patchwork-bot+netdevbpf
2023-01-30 10:50   ` Jiri Pirko
2023-01-30 20:37     ` Jakub Kicinski

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=86152a35-6d56-ebeb-e436-97426ef08e32@intel.com \
    --to=jacob.e.keller@intel.com \
    --cc=anthony.l.nguyen@intel.com \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=gal@nvidia.com \
    --cc=idosch@nvidia.com \
    --cc=jesse.brandeburg@intel.com \
    --cc=jiri@resnulli.us \
    --cc=kuba@kernel.org \
    --cc=leon@kernel.org \
    --cc=mailhol.vincent@wanadoo.fr \
    --cc=michael.chan@broadcom.com \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=petrm@nvidia.com \
    --cc=saeedm@nvidia.com \
    --cc=salil.mehta@huawei.com \
    --cc=tariqt@nvidia.com \
    --cc=yisen.zhuang@huawei.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: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).