net: dsa: Do not reschedule polling if driver removed
Subsystems (3)
PATCH 5/6 net: dsa: Do not reschedule polling if driver removed
Do not reschedule the delayed work used for polling when the driver is removed, by testing the 'poll_link_needed' flag.
Avoids this crash:
dsa dsa ethmv2 (unregistering): Link is Down device eth1 left promiscuous mode
Unable to handle kernel paging request at virtual address bacc5cf6 ... (run_timer_softirq) from [<c003e810>] (__do_softirq+0xcc/0x320) (__do_softirq) from [<c003ed40>] (irq_exit+0xac/0x10c) (irq_exit) from [<c007ec20>] (__handle_domain_irq+0x50/0xa8)
Signed-off-by Frode Isaksen <[email protected]>
Signed-off-by Neil Armstrong <[email protected]>
--- net/dsa/dsa.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
net/dsa/dsa.c +3 -1
@@ -526,7 +526,8 @@ static void dsa_link_poll_work(struct work_struct *ugly) ds->drv->poll_link (ds); } -schedule_delayed_work (&dst->link_poll_work,round_jiffies_relative (HZ )); +if (dst->link_poll_needed) +schedule_delayed_work (&dst->link_poll_work,round_jiffies_relative (HZ )); }/* platform driver init and cleanup *****************************************/
@@ -949,6 +950,7 @@ static void dsa_remove_dst(struct dsa_switch_tree *dst)int i;if (dst->link_poll_needed) { + dst->link_poll_needed =0 ;cancel_delayed_work_sync (&dst->link_poll_work);flush_delayed_work (&dst->link_poll_work); }
Signature · 1 line
1.9.1