mirror of
https://github.com/torvalds/linux.git
synced 2024-11-01 17:51:43 +00:00
jme: Protect vlgrp structure by pause RX actions.
Temporary stop the RX IRQ, and disable (sync) tasklet or napi. And restore it after finished the vlgrp pointer assignment. Signed-off-by: Guo-Fu Tseng <cooldavid@cooldavid.org> Cc: stable@kernel.org Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
17da69b8bf
commit
bf5e5360fd
@ -2083,12 +2083,45 @@ jme_tx_timeout(struct net_device *netdev)
|
|||||||
jme_reset_link(jme);
|
jme_reset_link(jme);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void jme_pause_rx(struct jme_adapter *jme)
|
||||||
|
{
|
||||||
|
atomic_dec(&jme->link_changing);
|
||||||
|
|
||||||
|
jme_set_rx_pcc(jme, PCC_OFF);
|
||||||
|
if (test_bit(JME_FLAG_POLL, &jme->flags)) {
|
||||||
|
JME_NAPI_DISABLE(jme);
|
||||||
|
} else {
|
||||||
|
tasklet_disable(&jme->rxclean_task);
|
||||||
|
tasklet_disable(&jme->rxempty_task);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void jme_resume_rx(struct jme_adapter *jme)
|
||||||
|
{
|
||||||
|
struct dynpcc_info *dpi = &(jme->dpi);
|
||||||
|
|
||||||
|
if (test_bit(JME_FLAG_POLL, &jme->flags)) {
|
||||||
|
JME_NAPI_ENABLE(jme);
|
||||||
|
} else {
|
||||||
|
tasklet_hi_enable(&jme->rxclean_task);
|
||||||
|
tasklet_hi_enable(&jme->rxempty_task);
|
||||||
|
}
|
||||||
|
dpi->cur = PCC_P1;
|
||||||
|
dpi->attempt = PCC_P1;
|
||||||
|
dpi->cnt = 0;
|
||||||
|
jme_set_rx_pcc(jme, PCC_P1);
|
||||||
|
|
||||||
|
atomic_inc(&jme->link_changing);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
jme_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp)
|
jme_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp)
|
||||||
{
|
{
|
||||||
struct jme_adapter *jme = netdev_priv(netdev);
|
struct jme_adapter *jme = netdev_priv(netdev);
|
||||||
|
|
||||||
|
jme_pause_rx(jme);
|
||||||
jme->vlgrp = grp;
|
jme->vlgrp = grp;
|
||||||
|
jme_resume_rx(jme);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Loading…
Reference in New Issue
Block a user