Hello Nicolas Ferre, The patch 558e35ccfe95: "net: macb: WoL support for GEM type of Ethernet controller" from Jul 20, 2020, leads to the following Smatch static checker warning: ./include/linux/interrupt.h:215 devm_request_irq() warn: sleeping in atomic context The call tree is: macb_suspend() <- disables preempt macb_resume() <- disables preempt -> devm_request_irq() drivers/net/ethernet/cadence/macb_main.c 4922 static int __maybe_unused macb_resume(struct device *dev) 4923 { 4924 struct net_device *netdev = dev_get_drvdata(dev); 4925 struct macb *bp = netdev_priv(netdev); 4926 struct macb_queue *queue; 4927 unsigned long flags; 4928 unsigned int q; 4929 int err; 4930 4931 if (!netif_running(netdev)) 4932 return 0; 4933 4934 if (!device_may_wakeup(dev)) 4935 pm_runtime_force_resume(dev); 4936 4937 if (bp->wol & MACB_WOL_ENABLED) { 4938 spin_lock_irqsave(&bp->lock, flags); Holding a spinlock 4939 /* Disable WoL */ 4940 if (macb_is_gem(bp)) { 4941 queue_writel(bp->queues, IDR, GEM_BIT(WOL)); 4942 gem_writel(bp, WOL, 0); 4943 } else { 4944 queue_writel(bp->queues, IDR, MACB_BIT(WOL)); 4945 macb_writel(bp, WOL, 0); 4946 } 4947 /* Clear ISR on queue 0 */ 4948 queue_readl(bp->queues, ISR); 4949 if (bp->caps & MACB_CAPS_ISR_CLEAR_ON_WRITE) 4950 queue_writel(bp->queues, ISR, -1); 4951 /* Replace interrupt handler on queue 0 */ 4952 devm_free_irq(dev, bp->queues[0].irq, bp->queues); 4953 err = devm_request_irq(dev, bp->queues[0].irq, macb_interrupt, devm_request_irq() has a GFP_KERNEL allocation in it. The suspend and resume function have this same bug. 4954 IRQF_SHARED, netdev->name, bp->queues); 4955 if (err) { 4956 dev_err(dev, 4957 "Unable to request IRQ %d (error %d)\n", 4958 bp->queues[0].irq, err); 4959 spin_unlock_irqrestore(&bp->lock, flags); 4960 return err; 4961 } 4962 spin_unlock_irqrestore(&bp->lock, flags); 4963 4964 disable_irq_wake(bp->queues[0].irq); 4965 regards, dan carpenter