[S390] pm: add kernel_page_present
authorHans-Joachim Picht <hans@linux.vnet.ibm.com>
Tue, 16 Jun 2009 08:30:26 +0000 (10:30 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Tue, 16 Jun 2009 08:31:11 +0000 (10:31 +0200)
Fix the following build failure caused by make allyesconfig using
CONFIG_HIBERNATION and CONFIG_DEBUG_PAGEALLOC

kernel/built-in.o: In function `saveable_page':
kernel/power/snapshot.c:897: undefined reference to `kernel_page_present'
kernel/built-in.o: In function `safe_copy_page':
kernel/power/snapshot.c:948: undefined reference to `kernel_page_present'
make: *** [.tmp_vmlinux1] Error 1

Signed-off-by: Hans-Joachim Picht <hans@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/mm/pgtable.c

index 4ca8e826bf303b4d8694f0757fe8b471ba52d099..565667207985c15e6e5ca4526dd2a36ec33b293e 100644 (file)
@@ -313,3 +313,22 @@ int s390_enable_sie(void)
        return 0;
 }
 EXPORT_SYMBOL_GPL(s390_enable_sie);
+
+#ifdef CONFIG_DEBUG_PAGEALLOC
+#ifdef CONFIG_HIBERNATION
+bool kernel_page_present(struct page *page)
+{
+       unsigned long addr;
+       int cc;
+
+       addr = page_to_phys(page);
+       asm("lra %1,0(%1)\n"
+           "ipm %0\n"
+           "srl %0,28"
+           :"=d"(cc),"+a"(addr)::"cc");
+       return cc == 0;
+}
+
+#endif /* CONFIG_HIBERNATION */
+#endif /* CONFIG_DEBUG_PAGEALLOC */
+