Message ID | 20241007054124.832792-1-danishanwar@ti.com (mailing list archive) |
---|---|
State | Accepted |
Commit | ff8ee11e778520c5716b7f165d2c7ce14d6a068b |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net,v2] net: ti: icssg-prueth: Fix race condition for VLAN table access | expand |
On 07/10/2024 08:41, MD Danish Anwar wrote: > The VLAN table is a shared memory between the two ports/slices > in a ICSSG cluster and this may lead to race condition when the > common code paths for both ports are executed in different CPUs. > > Fix the race condition access by locking the shared memory access > > Fixes: 487f7323f39a ("net: ti: icssg-prueth: Add helper functions to configure FDB") > Signed-off-by: MD Danish Anwar <danishanwar@ti.com> Reviewed-by: Roger Quadros <rogerq@kernel.org>
Hello: This patch was applied to netdev/net.git (main) by David S. Miller <davem@davemloft.net>: On Mon, 7 Oct 2024 11:11:24 +0530 you wrote: > The VLAN table is a shared memory between the two ports/slices > in a ICSSG cluster and this may lead to race condition when the > common code paths for both ports are executed in different CPUs. > > Fix the race condition access by locking the shared memory access > > Fixes: 487f7323f39a ("net: ti: icssg-prueth: Add helper functions to configure FDB") > Signed-off-by: MD Danish Anwar <danishanwar@ti.com> > > [...] Here is the summary with links: - [net,v2] net: ti: icssg-prueth: Fix race condition for VLAN table access https://git.kernel.org/netdev/net/c/ff8ee11e7785 You are awesome, thank you!
diff --git a/drivers/net/ethernet/ti/icssg/icssg_config.c b/drivers/net/ethernet/ti/icssg/icssg_config.c index 72ace151d8e9..5d2491c2943a 100644 --- a/drivers/net/ethernet/ti/icssg/icssg_config.c +++ b/drivers/net/ethernet/ti/icssg/icssg_config.c @@ -735,6 +735,7 @@ void icssg_vtbl_modify(struct prueth_emac *emac, u8 vid, u8 port_mask, u8 fid_c1; tbl = prueth->vlan_tbl; + spin_lock(&prueth->vtbl_lock); fid_c1 = tbl[vid].fid_c1; /* FID_C1: bit0..2 port membership mask, @@ -750,6 +751,7 @@ void icssg_vtbl_modify(struct prueth_emac *emac, u8 vid, u8 port_mask, } tbl[vid].fid_c1 = fid_c1; + spin_unlock(&prueth->vtbl_lock); } EXPORT_SYMBOL_GPL(icssg_vtbl_modify); diff --git a/drivers/net/ethernet/ti/icssg/icssg_prueth.c b/drivers/net/ethernet/ti/icssg/icssg_prueth.c index 5fd9902ab181..5c20ceb164df 100644 --- a/drivers/net/ethernet/ti/icssg/icssg_prueth.c +++ b/drivers/net/ethernet/ti/icssg/icssg_prueth.c @@ -1442,6 +1442,7 @@ static int prueth_probe(struct platform_device *pdev) icss_iep_init_fw(prueth->iep1); } + spin_lock_init(&prueth->vtbl_lock); /* setup netdev interfaces */ if (eth0_node) { ret = prueth_netdev_init(prueth, eth0_node); diff --git a/drivers/net/ethernet/ti/icssg/icssg_prueth.h b/drivers/net/ethernet/ti/icssg/icssg_prueth.h index bba6da2e6bd8..8722bb4a268a 100644 --- a/drivers/net/ethernet/ti/icssg/icssg_prueth.h +++ b/drivers/net/ethernet/ti/icssg/icssg_prueth.h @@ -296,6 +296,8 @@ struct prueth { bool is_switchmode_supported; unsigned char switch_id[MAX_PHYS_ITEM_ID_LEN]; int default_vlan; + /** @vtbl_lock: Lock for vtbl in shared memory */ + spinlock_t vtbl_lock; }; struct emac_tx_ts_response {
The VLAN table is a shared memory between the two ports/slices in a ICSSG cluster and this may lead to race condition when the common code paths for both ports are executed in different CPUs. Fix the race condition access by locking the shared memory access Fixes: 487f7323f39a ("net: ti: icssg-prueth: Add helper functions to configure FDB") Signed-off-by: MD Danish Anwar <danishanwar@ti.com> --- v1 - v2: *) Fixed kdoc and checkpatch warning by moving kdoc inline for vtbl_lock as suggested by Jakub Kicinski <kuba@kernel.org> v1 https://lore.kernel.org/all/20241003105940.533921-1-danishanwar@ti.com/ drivers/net/ethernet/ti/icssg/icssg_config.c | 2 ++ drivers/net/ethernet/ti/icssg/icssg_prueth.c | 1 + drivers/net/ethernet/ti/icssg/icssg_prueth.h | 2 ++ 3 files changed, 5 insertions(+) base-commit: 9234a2549cb6ac038bec36cc7c084218e9575513