Thread (24 messages) 24 messages, 8 authors, 2016-11-08

Re: [PATCH 2/6] mm: mark all calls into the vmalloc subsystem as potentially sleeping

From: Christoph Hellwig <hch@lst.de>
Date: 2016-10-19 16:31:18
Also in: linux-mm, lkml
Subsystem: memory management, the rest, vmalloc · Maintainers: Andrew Morton, Linus Torvalds, Uladzislau Rezki

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()) {
 		struct vfree_deferred *p = this_cpu_ptr(&vfree_deferred);
 		if (llist_add((struct llist_node *)addr, &p->list))
 			schedule_work(&p->wq);
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help