aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390
diff options
context:
space:
mode:
authorChristian Borntraeger <borntraeger@de.ibm.com>2008-01-26 14:11:16 +0100
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2008-01-26 14:11:23 +0100
commita2fd64d6aaf498756f700eb1d07818efee046733 (patch)
treef89c7119bcb00826a7ed99b14d2bbe7d2edcc043 /arch/s390
parentd09293aee9fd0f9f291fa3a0e4ca5012f514d083 (diff)
downloadkernel_goldelico_gta04-a2fd64d6aaf498756f700eb1d07818efee046733.zip
kernel_goldelico_gta04-a2fd64d6aaf498756f700eb1d07818efee046733.tar.gz
kernel_goldelico_gta04-a2fd64d6aaf498756f700eb1d07818efee046733.tar.bz2
[S390] vmemmap: allocate struct pages before 1:1 mapping
We have seen an oops in an OOM situation, where show_mem tried to access the struct page of a dcss segment. The vmemmap code has already created the 1:1 mapping but failed allocating the struct pages. In the OOM case, show_mem now walks the memory. It uses pfn_valid to detect if it may access the struct page. In the case described above, the mapping was established and pfn_valid returned true. As the struct pages were not allocated, the kernel oopsed. We have to ensure that we have created the struct pages, before we add a mapping pointing to the pages. Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390')
-rw-r--r--arch/s390/mm/vmem.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/s390/mm/vmem.c b/arch/s390/mm/vmem.c
index 1fc9989..79d13a1 100644
--- a/arch/s390/mm/vmem.c
+++ b/arch/s390/mm/vmem.c
@@ -236,10 +236,10 @@ static int vmem_add_mem(unsigned long start, unsigned long size)
{
int ret;
- ret = vmem_add_range(start, size);
+ ret = vmem_add_mem_map(start, size);
if (ret)
return ret;
- return vmem_add_mem_map(start, size);
+ return vmem_add_range(start, size);
}
/*