diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-19 11:57:05 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-19 11:57:05 -0700 |
commit | 26790656d7dc34206f78eeca0f4be5caede788ce (patch) | |
tree | 3c14682145c1a68223e2bc0d8fb35c145943756d /arch/x86/mm | |
parent | f768f9d3757be475a20cb5f9d63bda45934150b1 (diff) | |
parent | 9a24d04a3c26c223f22493492c5c9085b8773d4a (diff) | |
download | linux-26790656d7dc34206f78eeca0f4be5caede788ce.tar.gz linux-26790656d7dc34206f78eeca0f4be5caede788ce.tar.bz2 linux-26790656d7dc34206f78eeca0f4be5caede788ce.zip |
Merge ssh://master.kernel.org/pub/scm/linux/kernel/git/tglx/linux-2.6-x86
* ssh://master.kernel.org/pub/scm/linux/kernel/git/tglx/linux-2.6-x86:
x86: fix global_flush_tlb() bug
Diffstat (limited to 'arch/x86/mm')
-rw-r--r-- | arch/x86/mm/pageattr_64.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/arch/x86/mm/pageattr_64.c b/arch/x86/mm/pageattr_64.c index 8a4f65bf956e..c7b7dfe1d405 100644 --- a/arch/x86/mm/pageattr_64.c +++ b/arch/x86/mm/pageattr_64.c @@ -230,9 +230,14 @@ void global_flush_tlb(void) struct page *pg, *next; struct list_head l; - down_read(&init_mm.mmap_sem); + /* + * Write-protect the semaphore, to exclude two contexts + * doing a list_replace_init() call in parallel and to + * exclude new additions to the deferred_pages list: + */ + down_write(&init_mm.mmap_sem); list_replace_init(&deferred_pages, &l); - up_read(&init_mm.mmap_sem); + up_write(&init_mm.mmap_sem); flush_map(&l); |