Re: [PATCH] net: stmmac: Delete txtimer in suspend()

From: Jakub Kicinski
Date: Mon Feb 03 2020 - 18:04:59 EST


On Fri, 31 Jan 2020 18:01:24 -0800, Nicolin Chen wrote:
> When running v5.5 with a rootfs on NFS, memory abort may happen in
> the system resume stage:
> Unable to handle kernel paging request at virtual address dead00000000012a
> [dead00000000012a] address between user and kernel address ranges
> pc : run_timer_softirq+0x334/0x3d8
> lr : run_timer_softirq+0x244/0x3d8
> x1 : ffff800011cafe80 x0 : dead000000000122
> Call trace:
> run_timer_softirq+0x334/0x3d8
> efi_header_end+0x114/0x234
> irq_exit+0xd0/0xd8
> __handle_domain_irq+0x60/0xb0
> gic_handle_irq+0x58/0xa8
> el1_irq+0xb8/0x180
> arch_cpu_idle+0x10/0x18
> do_idle+0x1d8/0x2b0
> cpu_startup_entry+0x24/0x40
> secondary_start_kernel+0x1b4/0x208
> Code: f9000693 a9400660 f9000020 b4000040 (f9000401)
> ---[ end trace bb83ceeb4c482071 ]---
> Kernel panic - not syncing: Fatal exception in interrupt
> SMP: stopping secondary CPUs
> SMP: failed to stop secondary CPUs 2-3
> Kernel Offset: disabled
> CPU features: 0x00002,2300aa30
> Memory Limit: none
> ---[ end Kernel panic - not syncing: Fatal exception in interrupt ]---
>
> It's found that stmmac_xmit() and stmmac_resume() sometimes might
> run concurrently, possibly resulting in a race condition between
> mod_timer() and setup_timer(), being called by stmmac_xmit() and
> stmmac_resume() respectively.
>
> Since the resume() runs setup_timer() every time, it'd be safer to
> have del_timer_sync() in the suspend() as the counterpart.
>
> Signed-off-by: Nicolin Chen <nicoleotsuka@xxxxxxxxx>

Applied, and queued for stable, thank you!