Messages in this thread | | | From | Joel Fernandes <> | Date | Thu, 20 Oct 2016 17:32:19 -0700 | Subject | Re: [PATCH 2/6] mm: mark all calls into the vmalloc subsystem as potentially sleeping |
| |
Hi Christoph,
On Wed, Oct 19, 2016 at 9:31 AM, Christoph Hellwig <hch@lst.de> wrote: > On Wed, Oct 19, 2016 at 08:34:40AM -0700, Andy Lutomirski wrote: >> >> It would be quite awkward for a task stack to get freed from a >> sleepable context, because the obvious sleepable context is the task >> itself, and it still needs its stack. This was true even in the old >> regime when task stacks were freed from RCU context. >> >> But vfree has a magic automatic deferral mechanism. Couldn't you make >> the non-deferred case might_sleep()? > > But it's only magic from interrupt context.. > > Chris, does this patch make virtually mapped stack work for you again? > > diff --git a/mm/vmalloc.c b/mm/vmalloc.c > index f2481cb..942e02d 100644 > --- a/mm/vmalloc.c > +++ b/mm/vmalloc.c > @@ -1533,7 +1533,7 @@ void vfree(const void *addr) > > if (!addr) > return; > - if (unlikely(in_interrupt())) { > + if (in_interrupt() || in_atomic()) {
in_atomic() also checks in_interrupt() cases so only in_atomic() should suffice.
Thanks,
Joel
| |