summaryrefslogtreecommitdiffstats
path: root/arch/s390/include
diff options
context:
space:
mode:
authorCarsten Otte <cotte@de.ibm.com>2011-10-30 15:17:02 +0100
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2011-10-30 15:16:45 +0100
commit499069e1a421e2a85e76846c3237f00f1a5cb435 (patch)
tree01cf74636909b06b5a986f97a90bf0af5040212d /arch/s390/include
parentcc772456ac9b460693492b3a3d89e8c81eda5874 (diff)
downloadlinux-stable-499069e1a421e2a85e76846c3237f00f1a5cb435.tar.gz
linux-stable-499069e1a421e2a85e76846c3237f00f1a5cb435.tar.bz2
linux-stable-499069e1a421e2a85e76846c3237f00f1a5cb435.zip
[S390] take mmap_sem when walking guest page table
gmap_fault needs to walk the guest page table. However, parts of that may change if some other thread does munmap. In that case gmap_unmap_notifier will also unmap the corresponding parts from the guest page table. We need to take mmap_sem in order to serialize these operations. do_exception now calls __gmap_fault with mmap_sem held which does not get exported to modules. The exported function, which is called from KVM, now takes mmap_sem. Reported-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Carsten Otte <cotte@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390/include')
-rw-r--r--arch/s390/include/asm/pgtable.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h
index c0cb794bb365..bc5f520f6f87 100644
--- a/arch/s390/include/asm/pgtable.h
+++ b/arch/s390/include/asm/pgtable.h
@@ -696,6 +696,7 @@ void gmap_disable(struct gmap *gmap);
int gmap_map_segment(struct gmap *gmap, unsigned long from,
unsigned long to, unsigned long length);
int gmap_unmap_segment(struct gmap *gmap, unsigned long to, unsigned long len);
+unsigned long __gmap_fault(unsigned long address, struct gmap *);
unsigned long gmap_fault(unsigned long address, struct gmap *);
/*