Commit 46d08f55 authored by Edwin Peer's avatar Edwin Peer Committed by David S. Miller
Browse files

bnxt_en: extend RTNL to VF check in devlink driver_reinit



The fixes the race condition between configuring SR-IOV and devlink
reload.  The SR-IOV configure logic already takes the RTNL lock,
setting sriov_cfg under the lock while changes are underway. Extend
the lock scope in devlink driver_reinit to cover the VF check and
don't run concurrently with SR-IOV configure.

Reported-by: default avatarLeon Romanovsky <leon@kernel.org>
Fixes: 228ea8c1 ("bnxt_en: implement devlink dev reload driver_reinit")
Cc: Leon Romanovsky <leon@kernel.org>
Reviewed-by: default avatarSomnath Kotur <somnath.kotur@broadcom.com>
Reviewed-by: default avatarPavan Chebbi <pavan.chebbi@broadcom.com>
Reviewed-by: default avatarAndy Gospodarek <gospo@broadcom.com>
Signed-off-by: default avatarEdwin Peer <edwin.peer@broadcom.com>
Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e97b21e9
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -441,12 +441,13 @@ static int bnxt_dl_reload_down(struct devlink *dl, bool netns_change,

	switch (action) {
	case DEVLINK_RELOAD_ACTION_DRIVER_REINIT: {
		if (BNXT_PF(bp) && bp->pf.active_vfs) {
		rtnl_lock();
		if (BNXT_PF(bp) && (bp->pf.active_vfs || bp->sriov_cfg)) {
			NL_SET_ERR_MSG_MOD(extack,
					   "reload is unsupported when VFs are allocated");
					   "reload is unsupported while VFs are allocated or being configured");
			rtnl_unlock();
			return -EOPNOTSUPP;
		}
		rtnl_lock();
		if (bp->dev->reg_state == NETREG_UNREGISTERED) {
			rtnl_unlock();
			return -ENODEV;