Quellcode durchsuchen

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
Linus Torvalds vor 17 Jahren
Ursprung
Commit
26790656d7
1 geänderte Dateien mit 7 neuen und 2 gelöschten Zeilen
  1. 7 2
      arch/x86/mm/pageattr_64.c

+ 7 - 2
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);