[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <1009da147a0254f01779a47610de8df83d18cefe.1637160341.git.leonro@nvidia.com>
Date: Wed, 17 Nov 2021 16:49:09 +0200
From: Leon Romanovsky <leon@...nel.org>
To: "David S . Miller" <davem@...emloft.net>,
Jakub Kicinski <kuba@...nel.org>
Cc: Leon Romanovsky <leonro@...dia.com>,
Danielle Ratson <danieller@...dia.com>,
Jiri Pirko <jiri@...dia.com>, linux-kernel@...r.kernel.org,
netdev@...r.kernel.org, Amit Cohen <amcohen@...dia.com>
Subject: [PATCH net v1] devlink: Don't throw an error if flash notification sent before devlink visible
From: Leon Romanovsky <leonro@...dia.com>
The mlxsw driver calls to various devlink flash routines even before
users can get any access to the devlink instance itself. For example,
mlxsw_core_fw_rev_validate() one of such functions.
__mlxsw_core_bus_device_register
-> mlxsw_core_fw_rev_validate
-> mlxsw_core_fw_flash
-> mlxfw_firmware_flash
-> mlxfw_status_notify
-> devlink_flash_update_status_notify
-> __devlink_flash_update_notify
-> WARN_ON(...)
It causes to the WARN_ON to trigger warning about devlink not registered.
Fixes: cf530217408e ("devlink: Notify users when objects are accessible")
Reported-by: Danielle Ratson <danieller@...dia.com>
Tested-by: Danielle Ratson <danieller@...dia.com>
Signed-off-by: Leon Romanovsky <leonro@...dia.com>
---
v1:
* Used Jakub's suggestion to silently drop flash notifications if
devlink is not visible yet.
* Used right person for Reported and Tested tags.
v0: https://lore.kernel.org/all/1d750b6f4991c16995c4d0927b709eb23647ff85.1636999616.git.leonro@nvidia.com
---
net/core/devlink.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/net/core/devlink.c b/net/core/devlink.c
index 5ba4f9434acd..5ad72dbfcd07 100644
--- a/net/core/devlink.c
+++ b/net/core/devlink.c
@@ -4229,7 +4229,9 @@ static void __devlink_flash_update_notify(struct devlink *devlink,
WARN_ON(cmd != DEVLINK_CMD_FLASH_UPDATE &&
cmd != DEVLINK_CMD_FLASH_UPDATE_END &&
cmd != DEVLINK_CMD_FLASH_UPDATE_STATUS);
- WARN_ON(!xa_get_mark(&devlinks, devlink->index, DEVLINK_REGISTERED));
+
+ if (!xa_get_mark(&devlinks, devlink->index, DEVLINK_REGISTERED))
+ return;
msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
if (!msg)
--
2.33.1
Powered by blists - more mailing lists