11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  include/asm-s390/page.h
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  S390 version
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *    Copyright (C) 1999,2000 IBM Deutschland Entwicklung GmbH, IBM Corporation
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *    Author(s): Hartmut Penner (hp@de.ibm.com)
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef _S390_PAGE_H
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _S390_PAGE_H
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1252480ee5206a3fe3a61b5529ce063202c60b8b27Sam Ravnborg#include <linux/const.h>
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/types.h>
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* PAGE_SHIFT determines the page size */
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PAGE_SHIFT      12
1752480ee5206a3fe3a61b5529ce063202c60b8b27Sam Ravnborg#define PAGE_SIZE	(_AC(1,UL) << PAGE_SHIFT)
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PAGE_MASK       (~(PAGE_SIZE-1))
190b642ede47969d4180b0922d982777fe64379228Peter Oberparleiter#define PAGE_DEFAULT_ACC	0
200b642ede47969d4180b0922d982777fe64379228Peter Oberparleiter#define PAGE_DEFAULT_KEY	(PAGE_DEFAULT_ACC << 4)
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2253492b1de46a7576170e865062ffcfc93bb5650bGerald Schaefer#define HPAGE_SHIFT	20
2353492b1de46a7576170e865062ffcfc93bb5650bGerald Schaefer#define HPAGE_SIZE	(1UL << HPAGE_SHIFT)
2453492b1de46a7576170e865062ffcfc93bb5650bGerald Schaefer#define HPAGE_MASK	(~(HPAGE_SIZE - 1))
2553492b1de46a7576170e865062ffcfc93bb5650bGerald Schaefer#define HUGETLB_PAGE_ORDER	(HPAGE_SHIFT - PAGE_SHIFT)
2653492b1de46a7576170e865062ffcfc93bb5650bGerald Schaefer
2753492b1de46a7576170e865062ffcfc93bb5650bGerald Schaefer#define ARCH_HAS_SETCLEAR_HUGE_PTE
2853492b1de46a7576170e865062ffcfc93bb5650bGerald Schaefer#define ARCH_HAS_HUGE_PTE_TYPE
2953492b1de46a7576170e865062ffcfc93bb5650bGerald Schaefer#define ARCH_HAS_PREPARE_HUGEPAGE
3053492b1de46a7576170e865062ffcfc93bb5650bGerald Schaefer#define ARCH_HAS_HUGEPAGE_CLEAR_FLUSH
3153492b1de46a7576170e865062ffcfc93bb5650bGerald Schaefer
32274f5946dcb7c970455067be9e13a22174787592David Woodhouse#include <asm/setup.h>
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef __ASSEMBLY__
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline void clear_page(void *page)
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
3753492b1de46a7576170e865062ffcfc93bb5650bGerald Schaefer	if (MACHINE_HAS_PFMF) {
3853492b1de46a7576170e865062ffcfc93bb5650bGerald Schaefer		asm volatile(
3953492b1de46a7576170e865062ffcfc93bb5650bGerald Schaefer			"	.insn	rre,0xb9af0000,%0,%1"
4053492b1de46a7576170e865062ffcfc93bb5650bGerald Schaefer			: : "d" (0x10000), "a" (page) : "memory", "cc");
4153492b1de46a7576170e865062ffcfc93bb5650bGerald Schaefer	} else {
4253492b1de46a7576170e865062ffcfc93bb5650bGerald Schaefer		register unsigned long reg1 asm ("1") = 0;
4353492b1de46a7576170e865062ffcfc93bb5650bGerald Schaefer		register void *reg2 asm ("2") = page;
4453492b1de46a7576170e865062ffcfc93bb5650bGerald Schaefer		register unsigned long reg3 asm ("3") = 4096;
4553492b1de46a7576170e865062ffcfc93bb5650bGerald Schaefer		asm volatile(
4653492b1de46a7576170e865062ffcfc93bb5650bGerald Schaefer			"	mvcl	2,0"
4753492b1de46a7576170e865062ffcfc93bb5650bGerald Schaefer			: "+d" (reg2), "+d" (reg3) : "d" (reg1)
4853492b1de46a7576170e865062ffcfc93bb5650bGerald Schaefer			: "memory", "cc");
4953492b1de46a7576170e865062ffcfc93bb5650bGerald Schaefer	}
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline void copy_page(void *to, void *from)
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
5494c12cc7d196bab34aaa98d38521549fa1e5ef76Martin Schwidefsky	if (MACHINE_HAS_MVPG) {
5594c12cc7d196bab34aaa98d38521549fa1e5ef76Martin Schwidefsky		register unsigned long reg0 asm ("0") = 0;
5694c12cc7d196bab34aaa98d38521549fa1e5ef76Martin Schwidefsky		asm volatile(
5794c12cc7d196bab34aaa98d38521549fa1e5ef76Martin Schwidefsky			"	mvpg	%0,%1"
5894c12cc7d196bab34aaa98d38521549fa1e5ef76Martin Schwidefsky			: : "a" (to), "a" (from), "d" (reg0)
5994c12cc7d196bab34aaa98d38521549fa1e5ef76Martin Schwidefsky			: "memory", "cc");
6094c12cc7d196bab34aaa98d38521549fa1e5ef76Martin Schwidefsky	} else
6194c12cc7d196bab34aaa98d38521549fa1e5ef76Martin Schwidefsky		asm volatile(
6294c12cc7d196bab34aaa98d38521549fa1e5ef76Martin Schwidefsky			"	mvc	0(256,%0),0(%1)\n"
6394c12cc7d196bab34aaa98d38521549fa1e5ef76Martin Schwidefsky			"	mvc	256(256,%0),256(%1)\n"
6494c12cc7d196bab34aaa98d38521549fa1e5ef76Martin Schwidefsky			"	mvc	512(256,%0),512(%1)\n"
6594c12cc7d196bab34aaa98d38521549fa1e5ef76Martin Schwidefsky			"	mvc	768(256,%0),768(%1)\n"
6694c12cc7d196bab34aaa98d38521549fa1e5ef76Martin Schwidefsky			"	mvc	1024(256,%0),1024(%1)\n"
6794c12cc7d196bab34aaa98d38521549fa1e5ef76Martin Schwidefsky			"	mvc	1280(256,%0),1280(%1)\n"
6894c12cc7d196bab34aaa98d38521549fa1e5ef76Martin Schwidefsky			"	mvc	1536(256,%0),1536(%1)\n"
6994c12cc7d196bab34aaa98d38521549fa1e5ef76Martin Schwidefsky			"	mvc	1792(256,%0),1792(%1)\n"
7094c12cc7d196bab34aaa98d38521549fa1e5ef76Martin Schwidefsky			"	mvc	2048(256,%0),2048(%1)\n"
7194c12cc7d196bab34aaa98d38521549fa1e5ef76Martin Schwidefsky			"	mvc	2304(256,%0),2304(%1)\n"
7294c12cc7d196bab34aaa98d38521549fa1e5ef76Martin Schwidefsky			"	mvc	2560(256,%0),2560(%1)\n"
7394c12cc7d196bab34aaa98d38521549fa1e5ef76Martin Schwidefsky			"	mvc	2816(256,%0),2816(%1)\n"
7494c12cc7d196bab34aaa98d38521549fa1e5ef76Martin Schwidefsky			"	mvc	3072(256,%0),3072(%1)\n"
7594c12cc7d196bab34aaa98d38521549fa1e5ef76Martin Schwidefsky			"	mvc	3328(256,%0),3328(%1)\n"
7694c12cc7d196bab34aaa98d38521549fa1e5ef76Martin Schwidefsky			"	mvc	3584(256,%0),3584(%1)\n"
7794c12cc7d196bab34aaa98d38521549fa1e5ef76Martin Schwidefsky			"	mvc	3840(256,%0),3840(%1)\n"
7894c12cc7d196bab34aaa98d38521549fa1e5ef76Martin Schwidefsky			: : "a" (to), "a" (from) : "memory");
791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define clear_user_page(page, vaddr, pg)	clear_page(page)
821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define copy_user_page(to, from, vaddr, pg)	copy_page(to, from)
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
84769848c03895b63e5662eb7e4ec8c4866f7d0183Mel Gorman#define __alloc_zeroed_user_highpage(movableflags, vma, vaddr) \
85769848c03895b63e5662eb7e4ec8c4866f7d0183Mel Gorman	alloc_page_vma(GFP_HIGHUSER | __GFP_ZERO | movableflags, vma, vaddr)
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * These are used to make use of C type-checking..
901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct { unsigned long pgprot; } pgprot_t;
93b2fa47e6bf5148aa6dbf22ec79f18141b421eebaMartin Schwidefskytypedef struct { unsigned long pgste; } pgste_t;
941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct { unsigned long pte; } pte_t;
951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct { unsigned long pmd; } pmd_t;
96190a1d722a59725706daf832bc8a511ed62f249dMartin Schwidefskytypedef struct { unsigned long pud; } pud_t;
971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct { unsigned long pgd; } pgd_t;
98146e4b3c8b92071b18f0b2e6f47165bad4f9e825Martin Schwidefskytypedef pte_t *pgtable_t;
991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
100146e4b3c8b92071b18f0b2e6f47165bad4f9e825Martin Schwidefsky#define pgprot_val(x)	((x).pgprot)
101b2fa47e6bf5148aa6dbf22ec79f18141b421eebaMartin Schwidefsky#define pgste_val(x)	((x).pgste)
102146e4b3c8b92071b18f0b2e6f47165bad4f9e825Martin Schwidefsky#define pte_val(x)	((x).pte)
103146e4b3c8b92071b18f0b2e6f47165bad4f9e825Martin Schwidefsky#define pmd_val(x)	((x).pmd)
104190a1d722a59725706daf832bc8a511ed62f249dMartin Schwidefsky#define pud_val(x)	((x).pud)
1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define pgd_val(x)      ((x).pgd)
1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
107b2fa47e6bf5148aa6dbf22ec79f18141b421eebaMartin Schwidefsky#define __pgste(x)	((pgste_t) { (x) } )
1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define __pte(x)        ((pte_t) { (x) } )
1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define __pmd(x)        ((pmd_t) { (x) } )
110b2fa47e6bf5148aa6dbf22ec79f18141b421eebaMartin Schwidefsky#define __pud(x)	((pud_t) { (x) } )
1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define __pgd(x)        ((pgd_t) { (x) } )
1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define __pgprot(x)     ((pgprot_t) { (x) } )
1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1142d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefskystatic inline void page_set_storage_key(unsigned long addr,
1152d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky					unsigned char skey, int mapped)
1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
117e2b8d7af0e3a9234de06606f9151f28cf847a8d6Martin Schwidefsky	if (!mapped)
118e2b8d7af0e3a9234de06606f9151f28cf847a8d6Martin Schwidefsky		asm volatile(".insn rrf,0xb22b0000,%0,%1,8,0"
119e2b8d7af0e3a9234de06606f9151f28cf847a8d6Martin Schwidefsky			     : : "d" (skey), "a" (addr));
120e2b8d7af0e3a9234de06606f9151f28cf847a8d6Martin Schwidefsky	else
121e2b8d7af0e3a9234de06606f9151f28cf847a8d6Martin Schwidefsky		asm volatile("sske %0,%1" : : "d" (skey), "a" (addr));
1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1242d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefskystatic inline unsigned char page_get_storage_key(unsigned long addr)
1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
1262d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky	unsigned char skey;
1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1282d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky	asm volatile("iske %0,%1" : "=d" (skey) : "a" (addr));
1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	return skey;
1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1322d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefskystatic inline int page_reset_referenced(unsigned long addr)
1332d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky{
1342d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky	unsigned int ipm;
1352d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky
1362d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky	asm volatile(
1372d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky		"	rrbe	0,%1\n"
1382d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky		"	ipm	%0\n"
1392d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky		: "=d" (ipm) : "a" (addr) : "cc");
1402d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky	return !!(ipm & 0x20000000);
1412d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky}
1422d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky
1432d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky/* Bits int the storage key */
1442d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky#define _PAGE_CHANGED		0x02	/* HW changed bit		*/
1452d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky#define _PAGE_REFERENCED	0x04	/* HW referenced bit		*/
1462d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky#define _PAGE_FP_BIT		0x08	/* HW fetch protection bit	*/
1472d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky#define _PAGE_ACC_BITS		0xf0	/* HW access control bits	*/
1482d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky
1492d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky/*
1502d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky * Test and clear dirty bit in storage key.
1512d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky * We can't clear the changed bit atomically. This is a potential
1522d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky * race against modification of the referenced bit. This function
1532d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky * should therefore only be called if it is not mapped in any
1542d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky * address space.
1552d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky */
1562d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky#define __HAVE_ARCH_PAGE_TEST_AND_CLEAR_DIRTY
1572d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefskystatic inline int page_test_and_clear_dirty(unsigned long pfn, int mapped)
1582d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky{
1592d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky	unsigned char skey;
1602d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky
1612d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky	skey = page_get_storage_key(pfn << PAGE_SHIFT);
1622d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky	if (!(skey & _PAGE_CHANGED))
1632d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky		return 0;
1642d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky	page_set_storage_key(pfn << PAGE_SHIFT, skey & ~_PAGE_CHANGED, mapped);
1652d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky	return 1;
1662d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky}
1672d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky
1682d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky/*
1692d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky * Test and clear referenced bit in storage key.
1702d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky */
1712d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky#define __HAVE_ARCH_PAGE_TEST_AND_CLEAR_YOUNG
1722d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefskystatic inline int page_test_and_clear_young(unsigned long pfn)
1732d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky{
1742d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky	return page_reset_referenced(pfn << PAGE_SHIFT);
1752d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky}
1762d42552d1c1659b014851cf449ad2fe458509128Martin Schwidefsky
17745e576b1c3d0020607b8666c0247164e92c7d719Martin Schwidefskystruct page;
17845e576b1c3d0020607b8666c0247164e92c7d719Martin Schwidefskyvoid arch_free_page(struct page *page, int order);
17945e576b1c3d0020607b8666c0247164e92c7d719Martin Schwidefskyvoid arch_alloc_page(struct page *page, int order);
180638ad34a8811119b32247b7722288ef8b90907d1Martin Schwidefskyvoid arch_set_page_states(int make_stable);
18145e576b1c3d0020607b8666c0247164e92c7d719Martin Schwidefsky
182ec6743bb06510c7b629603ce35713d6ae9273579Hendrik Bruecknerstatic inline int devmem_is_allowed(unsigned long pfn)
183ec6743bb06510c7b629603ce35713d6ae9273579Hendrik Brueckner{
184ec6743bb06510c7b629603ce35713d6ae9273579Hendrik Brueckner	return 0;
185ec6743bb06510c7b629603ce35713d6ae9273579Hendrik Brueckner}
186ec6743bb06510c7b629603ce35713d6ae9273579Hendrik Brueckner
18745e576b1c3d0020607b8666c0247164e92c7d719Martin Schwidefsky#define HAVE_ARCH_FREE_PAGE
18845e576b1c3d0020607b8666c0247164e92c7d719Martin Schwidefsky#define HAVE_ARCH_ALLOC_PAGE
18945e576b1c3d0020607b8666c0247164e92c7d719Martin Schwidefsky
1901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* !__ASSEMBLY__ */
1911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define __PAGE_OFFSET           0x0UL
1931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PAGE_OFFSET             0x0UL
1941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define __pa(x)                 (unsigned long)(x)
1951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define __va(x)                 (void *)(unsigned long)(x)
1961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define virt_to_page(kaddr)	pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
1970b2b6e1ddce4696cb7afcbb15a654fe95428a498Heiko Carstens#define page_to_phys(page)	(page_to_pfn(page) << PAGE_SHIFT)
1981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define virt_addr_valid(kaddr)	pfn_valid(__pa(kaddr) >> PAGE_SHIFT)
1991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
200146e4b3c8b92071b18f0b2e6f47165bad4f9e825Martin Schwidefsky#define VM_DATA_DEFAULT_FLAGS	(VM_READ | VM_WRITE | \
2011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				 VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
2021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
203aed630434c4fc0bca8ed62f6730d44ba00bdf595KAMEZAWA Hiroyuki#include <asm-generic/memory_model.h>
2045b17e1cd8928ae65932758ce6478ac6d3e9a86b2Arnd Bergmann#include <asm-generic/getorder.h>
205fd4fd5aac1282825195c6816ed40a2a6d42db5bfStephen Rothwell
206b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky#define __HAVE_ARCH_GATE_AREA 1
207b020632e40c3ed5e8c0c066d022672907e8401cfMartin Schwidefsky
2081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* _S390_PAGE_H */
209