mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-18 03:06:43 +00:00
net: ti: icssg-prueth: Fix race condition for VLAN table access
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> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
08c8acc9d8
commit
ff8ee11e77
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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 {
|
||||
|
Loading…
x
Reference in New Issue
Block a user