mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-15 13:22:55 +00:00
slob: fix lockup in slob_free()
Don't hold SLOB lock when freeing the page. Reduces lock hold width. See the following thread for discussion of the bug: http://marc.info/?l=linux-kernel&m=123709983214143&w=2 Reported-by: Ingo Molnar <mingo@elte.hu> Acked-by: Matt Mackall <mpm@selenic.com> Signed-off-by: Nick Piggin <npiggin@suse.de> Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
This commit is contained in:
parent
b578f3fcca
commit
6fb8f42439
@ -393,10 +393,11 @@ static void slob_free(void *block, int size)
|
||||
/* Go directly to page allocator. Do not pass slob allocator */
|
||||
if (slob_page_free(sp))
|
||||
clear_slob_page_free(sp);
|
||||
spin_unlock_irqrestore(&slob_lock, flags);
|
||||
clear_slob_page(sp);
|
||||
free_slob_page(sp);
|
||||
free_page((unsigned long)b);
|
||||
goto out;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!slob_page_free(sp)) {
|
||||
|
Loading…
Reference in New Issue
Block a user