X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Fasm-s390%2Fpage.h;h=614e2a93c7031704020e934a84ef724ae1e0b3d6;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=6bed8d919d7b49e74e68d86c3ce7842e49ab0fbc;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/include/asm-s390/page.h b/include/asm-s390/page.h index 6bed8d919..614e2a93c 100644 --- a/include/asm-s390/page.h +++ b/include/asm-s390/page.h @@ -106,6 +106,9 @@ static inline void copy_page(void *to, void *from) #define clear_user_page(page, vaddr, pg) clear_page(page) #define copy_user_page(to, from, vaddr, pg) copy_page(to, from) +#define alloc_zeroed_user_highpage(vma, vaddr) alloc_page_vma(GFP_HIGHUSER | __GFP_ZERO, vma, vaddr) +#define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE + /* Pure 2^n version of get_order */ extern __inline__ int get_order(unsigned long size) { @@ -162,6 +165,25 @@ typedef struct { unsigned long pgd; } pgd_t; #define __pgd(x) ((pgd_t) { (x) } ) #define __pgprot(x) ((pgprot_t) { (x) } ) +/* default storage key used for all pages */ +extern unsigned int default_storage_key; + +static inline void +page_set_storage_key(unsigned long addr, unsigned int skey) +{ + asm volatile ( "sske %0,%1" : : "d" (skey), "a" (addr) ); +} + +static inline unsigned int +page_get_storage_key(unsigned long addr) +{ + unsigned int skey; + + asm volatile ( "iske %0,%1" : "=d" (skey) : "a" (addr), "0" (0) ); + + return skey; +} + #endif /* !__ASSEMBLY__ */ /* to align the pointer to the (next) page boundary */