On Tue, Jan 29, 2019 at 5:01 PM Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> wrote: > > > > > - * Context: Any context except NMI. > > + * Context: Either preemptible task context or not-NMI interrupt. > > Whereabouts in the vfree() path can the kernel sleep? Note that it's not necessarily about *sleeping*. One thing that vfree() really fundamentally should do is to flush TLB's. And you must not do a cross-TLB flush with interrupts disabled. NOTE! Right now, I think we do lazy TLB flushing, so the flush actually is delayed until the vmalloc() when the address rolls around in the vmalloc address space. But there really are very real and obvious reasons why we might want to do it at vfree time. So I'd honestly be a whole lot happier with vmalloc/vfree being process context only. Or at least with with interrupts enabled (so swirq/BH context would be fine, but an actual interrupt not so). Again, this is not about sleeping. But the end result is almost the same: we really should strive to not do vfree() in interrupt context. Linus