Patch "net: stmmac: Use readl_poll_timeout_atomic() in atomic state" has been added to the 5.17-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    net: stmmac: Use readl_poll_timeout_atomic() in atomic state

to the 5.17-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     net-stmmac-use-readl_poll_timeout_atomic-in-atomic-s.patch
and it can be found in the queue-5.17 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 2d4339e8d4c5e9c85058d811ed6b092b2a966f90
Author: Kevin Hao <haokexin@xxxxxxxxx>
Date:   Tue Apr 19 16:42:26 2022 +0800

    net: stmmac: Use readl_poll_timeout_atomic() in atomic state
    
    [ Upstream commit 234901de2bc6847eaa0aeb4aba62c31ffb8d3ad6 ]
    
    The init_systime() may be invoked in atomic state. We have observed the
    following call trace when running "phc_ctl /dev/ptp0 set" on a Intel
    Agilex board.
      BUG: sleeping function called from invalid context at drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c:74
      in_atomic(): 1, irqs_disabled(): 128, non_block: 0, pid: 381, name: phc_ctl
      preempt_count: 1, expected: 0
      RCU nest depth: 0, expected: 0
      Preemption disabled at:
      [<ffff80000892ef78>] stmmac_set_time+0x34/0x8c
      CPU: 2 PID: 381 Comm: phc_ctl Not tainted 5.18.0-rc2-next-20220414-yocto-standard+ #567
      Hardware name: SoCFPGA Agilex SoCDK (DT)
      Call trace:
       dump_backtrace.part.0+0xc4/0xd0
       show_stack+0x24/0x40
       dump_stack_lvl+0x7c/0xa0
       dump_stack+0x18/0x34
       __might_resched+0x154/0x1c0
       __might_sleep+0x58/0x90
       init_systime+0x78/0x120
       stmmac_set_time+0x64/0x8c
       ptp_clock_settime+0x60/0x9c
       pc_clock_settime+0x6c/0xc0
       __arm64_sys_clock_settime+0x88/0xf0
       invoke_syscall+0x5c/0x130
       el0_svc_common.constprop.0+0x4c/0x100
       do_el0_svc+0x7c/0xa0
       el0_svc+0x58/0xcc
       el0t_64_sync_handler+0xa4/0x130
       el0t_64_sync+0x18c/0x190
    
    So we should use readl_poll_timeout_atomic() here instead of
    readl_poll_timeout().
    
    Also adjust the delay time to 10us to fix a "__bad_udelay" build error
    reported by "kernel test robot <lkp@xxxxxxxxx>". I have tested this on
    Intel Agilex and NXP S32G boards, there is no delay needed at all.
    So the 10us delay should be long enough for most cases.
    
    Fixes: ff8ed737860e ("net: stmmac: use readl_poll_timeout() function in init_systime()")
    Signed-off-by: Kevin Hao <haokexin@xxxxxxxxx>
    Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c
index a7ec9f4d46ce..d68ef72dcdde 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c
@@ -71,9 +71,9 @@ static int init_systime(void __iomem *ioaddr, u32 sec, u32 nsec)
 	writel(value, ioaddr + PTP_TCR);
 
 	/* wait for present system time initialize to complete */
-	return readl_poll_timeout(ioaddr + PTP_TCR, value,
+	return readl_poll_timeout_atomic(ioaddr + PTP_TCR, value,
 				 !(value & PTP_TCR_TSINIT),
-				 10000, 100000);
+				 10, 100000);
 }
 
 static int config_addend(void __iomem *ioaddr, u32 addend)



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux