On Fri, May 19, 2017 at 10:22 AM, Akshay Narayan <aksh...@mit.edu> wrote: > netlink_broadcast_filtered() calls yield() when a slow listener causes > the buffer to fill. yield() is the wrong choice here, as pointed out by > Commit 8e3fabfde4 (sched: Update yield() docs); in some cases, its use causes > "BUG: scheduling while atomic" and, when fewer cores are available, > kernel hangs:
I don't want to defend the use of yield() but it looks like there is other problem. > > (note: "ccp" is a kernel module which multicasts netlink messages upon > certain TCP events) Does this module call netlink_broadcast() with __GFP_DIRECT_RECLAIM in IRQ context? If so you should adjust the gfp flags.