Loading arch/s390/include/asm/pgtable.h +12 −32 Original line number Diff line number Diff line Loading @@ -1235,53 +1235,33 @@ static inline void __pmdp_csp(pmd_t *pmdp) pmd_val(*pmdp) | _SEGMENT_ENTRY_INVALID); } static inline void __pmdp_idte(unsigned long address, pmd_t *pmdp) { unsigned long sto; sto = (unsigned long) pmdp - pmd_index(address) * sizeof(pmd_t); asm volatile( " .insn rrf,0xb98e0000,%2,%3,0,0" : "=m" (*pmdp) : "m" (*pmdp), "a" (sto), "a" ((address & HPAGE_MASK)) : "cc" ); } static inline void __pudp_idte(unsigned long address, pud_t *pudp) { unsigned long r3o; r3o = (unsigned long) pudp - pud_index(address) * sizeof(pud_t); r3o |= _ASCE_TYPE_REGION3; asm volatile( " .insn rrf,0xb98e0000,%2,%3,0,0" : "=m" (*pudp) : "m" (*pudp), "a" (r3o), "a" ((address & PUD_MASK)) : "cc"); } #define IDTE_GLOBAL 0 #define IDTE_LOCAL 1 static inline void __pmdp_idte_local(unsigned long address, pmd_t *pmdp) static inline void __pmdp_idte(unsigned long address, pmd_t *pmdp, int local) { unsigned long sto; sto = (unsigned long) pmdp - pmd_index(address) * sizeof(pmd_t); asm volatile( " .insn rrf,0xb98e0000,%2,%3,0,1" : "=m" (*pmdp) : "m" (*pmdp), "a" (sto), "a" ((address & HPAGE_MASK)) " .insn rrf,0xb98e0000,%[r1],%[r2],0,%[m4]" : "+m" (*pmdp) : [r1] "a" (sto), [r2] "a" ((address & HPAGE_MASK)), [m4] "i" (local) : "cc" ); } static inline void __pudp_idte_local(unsigned long address, pud_t *pudp) static inline void __pudp_idte(unsigned long address, pud_t *pudp, int local) { unsigned long r3o; r3o = (unsigned long) pudp - pud_index(address) * sizeof(pud_t); r3o |= _ASCE_TYPE_REGION3; asm volatile( " .insn rrf,0xb98e0000,%2,%3,0,1" : "=m" (*pudp) : "m" (*pudp), "a" (r3o), "a" ((address & PUD_MASK)) " .insn rrf,0xb98e0000,%[r1],%[r2],0,%[m4]" : "+m" (*pudp) : [r1] "a" (r3o), [r2] "a" ((address & PUD_MASK)), [m4] "i" (local) : "cc"); } Loading arch/s390/mm/pgtable.c +5 −5 Original line number Diff line number Diff line Loading @@ -301,9 +301,9 @@ static inline pmd_t pmdp_flush_direct(struct mm_struct *mm, atomic_inc(&mm->context.flush_count); if (MACHINE_HAS_TLB_LC && cpumask_equal(mm_cpumask(mm), cpumask_of(smp_processor_id()))) __pmdp_idte_local(addr, pmdp); __pmdp_idte(addr, pmdp, IDTE_LOCAL); else __pmdp_idte(addr, pmdp); __pmdp_idte(addr, pmdp, IDTE_GLOBAL); atomic_dec(&mm->context.flush_count); return old; } Loading @@ -322,7 +322,7 @@ static inline pmd_t pmdp_flush_lazy(struct mm_struct *mm, pmd_val(*pmdp) |= _SEGMENT_ENTRY_INVALID; mm->context.flush_mm = 1; } else if (MACHINE_HAS_IDTE) __pmdp_idte(addr, pmdp); __pmdp_idte(addr, pmdp, IDTE_GLOBAL); else __pmdp_csp(pmdp); atomic_dec(&mm->context.flush_count); Loading Loading @@ -374,9 +374,9 @@ static inline pud_t pudp_flush_direct(struct mm_struct *mm, atomic_inc(&mm->context.flush_count); if (MACHINE_HAS_TLB_LC && cpumask_equal(mm_cpumask(mm), cpumask_of(smp_processor_id()))) __pudp_idte_local(addr, pudp); __pudp_idte(addr, pudp, IDTE_LOCAL); else __pudp_idte(addr, pudp); __pudp_idte(addr, pudp, IDTE_GLOBAL); atomic_dec(&mm->context.flush_count); return old; } Loading Loading
arch/s390/include/asm/pgtable.h +12 −32 Original line number Diff line number Diff line Loading @@ -1235,53 +1235,33 @@ static inline void __pmdp_csp(pmd_t *pmdp) pmd_val(*pmdp) | _SEGMENT_ENTRY_INVALID); } static inline void __pmdp_idte(unsigned long address, pmd_t *pmdp) { unsigned long sto; sto = (unsigned long) pmdp - pmd_index(address) * sizeof(pmd_t); asm volatile( " .insn rrf,0xb98e0000,%2,%3,0,0" : "=m" (*pmdp) : "m" (*pmdp), "a" (sto), "a" ((address & HPAGE_MASK)) : "cc" ); } static inline void __pudp_idte(unsigned long address, pud_t *pudp) { unsigned long r3o; r3o = (unsigned long) pudp - pud_index(address) * sizeof(pud_t); r3o |= _ASCE_TYPE_REGION3; asm volatile( " .insn rrf,0xb98e0000,%2,%3,0,0" : "=m" (*pudp) : "m" (*pudp), "a" (r3o), "a" ((address & PUD_MASK)) : "cc"); } #define IDTE_GLOBAL 0 #define IDTE_LOCAL 1 static inline void __pmdp_idte_local(unsigned long address, pmd_t *pmdp) static inline void __pmdp_idte(unsigned long address, pmd_t *pmdp, int local) { unsigned long sto; sto = (unsigned long) pmdp - pmd_index(address) * sizeof(pmd_t); asm volatile( " .insn rrf,0xb98e0000,%2,%3,0,1" : "=m" (*pmdp) : "m" (*pmdp), "a" (sto), "a" ((address & HPAGE_MASK)) " .insn rrf,0xb98e0000,%[r1],%[r2],0,%[m4]" : "+m" (*pmdp) : [r1] "a" (sto), [r2] "a" ((address & HPAGE_MASK)), [m4] "i" (local) : "cc" ); } static inline void __pudp_idte_local(unsigned long address, pud_t *pudp) static inline void __pudp_idte(unsigned long address, pud_t *pudp, int local) { unsigned long r3o; r3o = (unsigned long) pudp - pud_index(address) * sizeof(pud_t); r3o |= _ASCE_TYPE_REGION3; asm volatile( " .insn rrf,0xb98e0000,%2,%3,0,1" : "=m" (*pudp) : "m" (*pudp), "a" (r3o), "a" ((address & PUD_MASK)) " .insn rrf,0xb98e0000,%[r1],%[r2],0,%[m4]" : "+m" (*pudp) : [r1] "a" (r3o), [r2] "a" ((address & PUD_MASK)), [m4] "i" (local) : "cc"); } Loading
arch/s390/mm/pgtable.c +5 −5 Original line number Diff line number Diff line Loading @@ -301,9 +301,9 @@ static inline pmd_t pmdp_flush_direct(struct mm_struct *mm, atomic_inc(&mm->context.flush_count); if (MACHINE_HAS_TLB_LC && cpumask_equal(mm_cpumask(mm), cpumask_of(smp_processor_id()))) __pmdp_idte_local(addr, pmdp); __pmdp_idte(addr, pmdp, IDTE_LOCAL); else __pmdp_idte(addr, pmdp); __pmdp_idte(addr, pmdp, IDTE_GLOBAL); atomic_dec(&mm->context.flush_count); return old; } Loading @@ -322,7 +322,7 @@ static inline pmd_t pmdp_flush_lazy(struct mm_struct *mm, pmd_val(*pmdp) |= _SEGMENT_ENTRY_INVALID; mm->context.flush_mm = 1; } else if (MACHINE_HAS_IDTE) __pmdp_idte(addr, pmdp); __pmdp_idte(addr, pmdp, IDTE_GLOBAL); else __pmdp_csp(pmdp); atomic_dec(&mm->context.flush_count); Loading Loading @@ -374,9 +374,9 @@ static inline pud_t pudp_flush_direct(struct mm_struct *mm, atomic_inc(&mm->context.flush_count); if (MACHINE_HAS_TLB_LC && cpumask_equal(mm_cpumask(mm), cpumask_of(smp_processor_id()))) __pudp_idte_local(addr, pudp); __pudp_idte(addr, pudp, IDTE_LOCAL); else __pudp_idte(addr, pudp); __pudp_idte(addr, pudp, IDTE_GLOBAL); atomic_dec(&mm->context.flush_count); return old; } Loading