* [bug report] net: macb: WoL support for GEM type of Ethernet controller
@ 2022-01-19 10:47 Dan Carpenter
0 siblings, 0 replies; only message in thread
From: Dan Carpenter @ 2022-01-19 10:47 UTC (permalink / raw)
To: nicolas.ferre; +Cc: kernel-janitors
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
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2022-01-19 10:47 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-01-19 10:47 [bug report] net: macb: WoL support for GEM type of Ethernet controller Dan Carpenter
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).