s390: implement pte special bit
authorNick Piggin <npiggin@suse.de>
Mon, 28 Apr 2008 09:13:03 +0000 (02:13 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 28 Apr 2008 15:58:23 +0000 (08:58 -0700)
Convert XIP to support non-struct page backed memory, using VM_MIXEDMAP for
the user mappings.

This requires the get_xip_page API to be changed to an address based one.
Improve the API layering a little bit too, while we're here.

This is required in order to support XIP filesystems on memory that isn't
backed with struct page (but memory with struct page is still supported too).

Signed-off-by: Nick Piggin <npiggin@suse.de>
Acked-by: Carsten Otte <cotte@de.ibm.com>
Cc: Jared Hulbert <jaredeh@gmail.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
include/asm-s390/pgtable.h

index 76e8a7904e8a9c8bda3fa560b62bed1368208bfe..f8347ce9c5a124b58cfb311a68021eaf5437c7a2 100644 (file)
@@ -220,6 +220,8 @@ extern char empty_zero_page[PAGE_SIZE];
 /* Software bits in the page table entry */
 #define _PAGE_SWT      0x001           /* SW pte type bit t */
 #define _PAGE_SWX      0x002           /* SW pte type bit x */
 /* Software bits in the page table entry */
 #define _PAGE_SWT      0x001           /* SW pte type bit t */
 #define _PAGE_SWX      0x002           /* SW pte type bit x */
+#define _PAGE_SPECIAL  0x004           /* SW associated with special page */
+#define __HAVE_ARCH_PTE_SPECIAL
 
 /* Six different types of pages. */
 #define _PAGE_TYPE_EMPTY       0x400
 
 /* Six different types of pages. */
 #define _PAGE_TYPE_EMPTY       0x400
@@ -520,7 +522,7 @@ static inline int pte_file(pte_t pte)
 
 static inline int pte_special(pte_t pte)
 {
 
 static inline int pte_special(pte_t pte)
 {
-       return 0;
+       return (pte_val(pte) & _PAGE_SPECIAL);
 }
 
 #define __HAVE_ARCH_PTE_SAME
 }
 
 #define __HAVE_ARCH_PTE_SAME
@@ -722,6 +724,7 @@ static inline pte_t pte_mkyoung(pte_t pte)
 
 static inline pte_t pte_mkspecial(pte_t pte)
 {
 
 static inline pte_t pte_mkspecial(pte_t pte)
 {
+       pte_val(pte) |= _PAGE_SPECIAL;
        return pte;
 }
 
        return pte;
 }