aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-s390/pgtable.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-s390/pgtable.h')
-rw-r--r--include/asm-s390/pgtable.h28
1 files changed, 15 insertions, 13 deletions
diff --git a/include/asm-s390/pgtable.h b/include/asm-s390/pgtable.h
index e965309fedac..83425cdefc91 100644
--- a/include/asm-s390/pgtable.h
+++ b/include/asm-s390/pgtable.h
@@ -554,9 +554,10 @@ static inline void __ptep_ipte(unsigned long address, pte_t *ptep)
554 /* ipte in zarch mode can do the math */ 554 /* ipte in zarch mode can do the math */
555 pte_t *pto = ptep; 555 pte_t *pto = ptep;
556#endif 556#endif
557 asm volatile ("ipte %2,%3" 557 asm volatile(
558 : "=m" (*ptep) : "m" (*ptep), 558 " ipte %2,%3"
559 "a" (pto), "a" (address) ); 559 : "=m" (*ptep) : "m" (*ptep),
560 "a" (pto), "a" (address));
560 } 561 }
561 pte_val(*ptep) = _PAGE_TYPE_EMPTY; 562 pte_val(*ptep) = _PAGE_TYPE_EMPTY;
562} 563}
@@ -609,16 +610,17 @@ ptep_establish(struct vm_area_struct *vma,
609/* 610/*
610 * Test and clear referenced bit in storage key. 611 * Test and clear referenced bit in storage key.
611 */ 612 */
612#define page_test_and_clear_young(page) \ 613#define page_test_and_clear_young(page) \
613({ \ 614({ \
614 struct page *__page = (page); \ 615 struct page *__page = (page); \
615 unsigned long __physpage = __pa((__page-mem_map) << PAGE_SHIFT); \ 616 unsigned long __physpage = __pa((__page-mem_map) << PAGE_SHIFT);\
616 int __ccode; \ 617 int __ccode; \
617 asm volatile ("rrbe 0,%1\n\t" \ 618 asm volatile( \
618 "ipm %0\n\t" \ 619 " rrbe 0,%1\n" \
619 "srl %0,28\n\t" \ 620 " ipm %0\n" \
620 : "=d" (__ccode) : "a" (__physpage) : "cc" ); \ 621 " srl %0,28\n" \
621 (__ccode & 2); \ 622 : "=d" (__ccode) : "a" (__physpage) : "cc"); \
623 (__ccode & 2); \
622}) 624})
623 625
624/* 626/*