lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Sat, 20 Dec 2014 17:55:29 +1100 From: Herbert Xu <herbert@...dor.apana.org.au> To: David Miller <davem@...emloft.net> Cc: eric.dumazet@...il.com, david.vrabel@...rix.com, netdev@...r.kernel.org, xen-devel@...ts.xenproject.org, konrad.wilk@...cle.com, boris.ostrovsky@...cle.com, edumazet@...gle.com Subject: Re: net: Detect drivers that reschedule NAPI and exhaust budget On Fri, Dec 19, 2014 at 09:40:00PM -0500, David Miller wrote: > From: Eric Dumazet <eric.dumazet@...il.com> > Date: Fri, 19 Dec 2014 17:34:48 -0800 > > >> @@ -4620,7 +4620,11 @@ static void net_rx_action(struct softirq_action *h) > >> */ > >> napi_gro_flush(n, HZ >= 1000); > >> } > >> - list_add_tail(&n->poll_list, &repoll); > >> + /* Some drivers may have called napi_schedule > >> + * prior to exhausting their budget. > >> + */ > >> + if (!WARN_ON_ONCE(!list_empty(&n->poll_list))) > >> + list_add_tail(&n->poll_list, &repoll); > >> } > >> } > >> > > > > I do not think stack trace will point to the buggy driver ? > > > > IMO it would be better to print a single line with the netdev name ? > > Right, we are already back from the poll routine and will just end > up seeing the call trace leading to the software interrupt. Good point Eric. -- >8 -- The commit d75b1ade567ffab085e8adbbdacf0092d10cd09c (net: less interrupt masking in NAPI) required drivers to leave poll_list empty if the entire budget is consumed. We have already had two broken drivers so let's add a check for this. Signed-off-by: Herbert Xu <herbert@...dor.apana.org.au> diff --git a/net/core/dev.c b/net/core/dev.c index f411c28..47fdc5c 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -4620,7 +4620,13 @@ static void net_rx_action(struct softirq_action *h) */ napi_gro_flush(n, HZ >= 1000); } - list_add_tail(&n->poll_list, &repoll); + /* Some drivers may have called napi_schedule + * prior to exhausting their budget. + */ + if (unlikely(!list_empty(&n->poll_list))) + pr_warn("%s: Budget exhausted after napi rescheduled\n", n->dev ? n->dev->name : "backlog"); + else + list_add_tail(&n->poll_list, &repoll); } } Thanks, -- Email: Herbert Xu <herbert@...dor.apana.org.au> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists