Commit 7a1b0b1a authored by Jakub Kicinski's avatar Jakub Kicinski Committed by David S. Miller

bnxt: use the devlink instance lock to protect sriov

In prep for .eswitch_mode_set being called with the devlink instance
lock held use that lock explicitly instead of creating a local mutex
just for the sriov reconfig.
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e7dc00f3
...@@ -13470,7 +13470,6 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -13470,7 +13470,6 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
#ifdef CONFIG_BNXT_SRIOV #ifdef CONFIG_BNXT_SRIOV
init_waitqueue_head(&bp->sriov_cfg_wait); init_waitqueue_head(&bp->sriov_cfg_wait);
mutex_init(&bp->sriov_lock);
#endif #endif
if (BNXT_SUPPORTS_TPA(bp)) { if (BNXT_SUPPORTS_TPA(bp)) {
bp->gro_func = bnxt_gro_func_5730x; bp->gro_func = bnxt_gro_func_5730x;
......
...@@ -2072,12 +2072,6 @@ struct bnxt { ...@@ -2072,12 +2072,6 @@ struct bnxt {
wait_queue_head_t sriov_cfg_wait; wait_queue_head_t sriov_cfg_wait;
bool sriov_cfg; bool sriov_cfg;
#define BNXT_SRIOV_CFG_WAIT_TMO msecs_to_jiffies(10000) #define BNXT_SRIOV_CFG_WAIT_TMO msecs_to_jiffies(10000)
/* lock to protect VF-rep creation/cleanup via
* multiple paths such as ->sriov_configure() and
* devlink ->eswitch_mode_set()
*/
struct mutex sriov_lock;
#endif #endif
#if BITS_PER_LONG == 32 #if BITS_PER_LONG == 32
......
...@@ -846,7 +846,7 @@ void bnxt_sriov_disable(struct bnxt *bp) ...@@ -846,7 +846,7 @@ void bnxt_sriov_disable(struct bnxt *bp)
return; return;
/* synchronize VF and VF-rep create and destroy */ /* synchronize VF and VF-rep create and destroy */
mutex_lock(&bp->sriov_lock); devl_lock(bp->dl);
bnxt_vf_reps_destroy(bp); bnxt_vf_reps_destroy(bp);
if (pci_vfs_assigned(bp->pdev)) { if (pci_vfs_assigned(bp->pdev)) {
...@@ -859,7 +859,7 @@ void bnxt_sriov_disable(struct bnxt *bp) ...@@ -859,7 +859,7 @@ void bnxt_sriov_disable(struct bnxt *bp)
/* Free the HW resources reserved for various VF's */ /* Free the HW resources reserved for various VF's */
bnxt_hwrm_func_vf_resource_free(bp, num_vfs); bnxt_hwrm_func_vf_resource_free(bp, num_vfs);
} }
mutex_unlock(&bp->sriov_lock); devl_unlock(bp->dl);
bnxt_free_vf_resources(bp); bnxt_free_vf_resources(bp);
......
...@@ -561,7 +561,7 @@ int bnxt_dl_eswitch_mode_set(struct devlink *devlink, u16 mode, ...@@ -561,7 +561,7 @@ int bnxt_dl_eswitch_mode_set(struct devlink *devlink, u16 mode,
struct bnxt *bp = bnxt_get_bp_from_dl(devlink); struct bnxt *bp = bnxt_get_bp_from_dl(devlink);
int rc = 0; int rc = 0;
mutex_lock(&bp->sriov_lock); devl_lock(devlink);
if (bp->eswitch_mode == mode) { if (bp->eswitch_mode == mode) {
netdev_info(bp->dev, "already in %s eswitch mode\n", netdev_info(bp->dev, "already in %s eswitch mode\n",
mode == DEVLINK_ESWITCH_MODE_LEGACY ? mode == DEVLINK_ESWITCH_MODE_LEGACY ?
...@@ -595,7 +595,7 @@ int bnxt_dl_eswitch_mode_set(struct devlink *devlink, u16 mode, ...@@ -595,7 +595,7 @@ int bnxt_dl_eswitch_mode_set(struct devlink *devlink, u16 mode,
goto done; goto done;
} }
done: done:
mutex_unlock(&bp->sriov_lock); devl_unlock(devlink);
return rc; return rc;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment