mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-10 07:00:48 +00:00
tg3: tg3_reset_task() needs to use rtnl_lock to synchronize
Currently tg3_reset_task() uses only tp->lock for synchronizing with code paths like tg3_open() etc. But since tp->lock is released before doing synchronize_irq(), rtnl_lock should be taken in tg3_reset_task() to synchronize it with other code paths. Reported-by: Peter Hurley <peter@hurleysoftware.com> Tested-by: Peter Hurley <peter@hurleysoftware.com> Signed-off-by: Prashant Sreedharan <prashant@broadcom.com> Signed-off-by: Michael Chan <mchan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
4fd190a938
commit
db84bf43ef
@ -11103,11 +11103,13 @@ static void tg3_reset_task(struct work_struct *work)
|
||||
struct tg3 *tp = container_of(work, struct tg3, reset_task);
|
||||
int err;
|
||||
|
||||
rtnl_lock();
|
||||
tg3_full_lock(tp, 0);
|
||||
|
||||
if (!netif_running(tp->dev)) {
|
||||
tg3_flag_clear(tp, RESET_TASK_PENDING);
|
||||
tg3_full_unlock(tp);
|
||||
rtnl_unlock();
|
||||
return;
|
||||
}
|
||||
|
||||
@ -11140,6 +11142,7 @@ out:
|
||||
tg3_phy_start(tp);
|
||||
|
||||
tg3_flag_clear(tp, RESET_TASK_PENDING);
|
||||
rtnl_unlock();
|
||||
}
|
||||
|
||||
static int tg3_request_irq(struct tg3 *tp, int irq_num)
|
||||
|
Loading…
x
Reference in New Issue
Block a user