aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Piggin <npiggin@suse.de>2008-04-28 05:13:03 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2008-04-28 11:58:23 -0400
commita08cb629f546d1cecebe955392197f226e58dbe1 (patch)
tree1cbab3071f6d35a0f58abc0ad3b05641ed41df6b
parent70688e4dd1647f0ceb502bbd5964fa344c5eb411 (diff)
s390: implement pte special bit
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>
-rw-r--r--include/asm-s390/pgtable.h5
1 files changed, 4 insertions, 1 deletions
diff --git a/include/asm-s390/pgtable.h b/include/asm-s390/pgtable.h
index 76e8a7904e8a..f8347ce9c5a1 100644
--- a/include/asm-s390/pgtable.h
+++ b/include/asm-s390/pgtable.h
@@ -220,6 +220,8 @@ extern char empty_zero_page[PAGE_SIZE];
220/* Software bits in the page table entry */ 220/* Software bits in the page table entry */
221#define _PAGE_SWT 0x001 /* SW pte type bit t */ 221#define _PAGE_SWT 0x001 /* SW pte type bit t */
222#define _PAGE_SWX 0x002 /* SW pte type bit x */ 222#define _PAGE_SWX 0x002 /* SW pte type bit x */
223#define _PAGE_SPECIAL 0x004 /* SW associated with special page */
224#define __HAVE_ARCH_PTE_SPECIAL
223 225
224/* Six different types of pages. */ 226/* Six different types of pages. */
225#define _PAGE_TYPE_EMPTY 0x400 227#define _PAGE_TYPE_EMPTY 0x400
@@ -520,7 +522,7 @@ static inline int pte_file(pte_t pte)
520 522
521static inline int pte_special(pte_t pte) 523static inline int pte_special(pte_t pte)
522{ 524{
523 return 0; 525 return (pte_val(pte) & _PAGE_SPECIAL);
524} 526}
525 527
526#define __HAVE_ARCH_PTE_SAME 528#define __HAVE_ARCH_PTE_SAME
@@ -722,6 +724,7 @@ static inline pte_t pte_mkyoung(pte_t pte)
722 724
723static inline pte_t pte_mkspecial(pte_t pte) 725static inline pte_t pte_mkspecial(pte_t pte)
724{ 726{
727 pte_val(pte) |= _PAGE_SPECIAL;
725 return pte; 728 return pte;
726} 729}
727 730