Skip to content

Commit f824272

Browse files
committed
Merge tag 's390-6.18-4' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux
Pull s390 fix from Heiko Carstens: - Fix a bug in the __ptep_rdp() inline assembly which may lead to missing TLB flushes * tag 's390-6.18-4' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux: s390/mm: Fix __ptep_rdp() inline assembly
2 parents b8a2c32 + 31475b8 commit f824272

File tree

2 files changed

+7
-9
lines changed

2 files changed

+7
-9
lines changed

arch/s390/include/asm/pgtable.h

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1154,17 +1154,15 @@ static inline pte_t pte_mkhuge(pte_t pte)
11541154
#define IPTE_NODAT 0x400
11551155
#define IPTE_GUEST_ASCE 0x800
11561156

1157-
static __always_inline void __ptep_rdp(unsigned long addr, pte_t *ptep,
1158-
unsigned long opt, unsigned long asce,
1159-
int local)
1157+
static __always_inline void __ptep_rdp(unsigned long addr, pte_t *ptep, int local)
11601158
{
11611159
unsigned long pto;
11621160

11631161
pto = __pa(ptep) & ~(PTRS_PER_PTE * sizeof(pte_t) - 1);
1164-
asm volatile(".insn rrf,0xb98b0000,%[r1],%[r2],%[asce],%[m4]"
1162+
asm volatile(".insn rrf,0xb98b0000,%[r1],%[r2],%%r0,%[m4]"
11651163
: "+m" (*ptep)
1166-
: [r1] "a" (pto), [r2] "a" ((addr & PAGE_MASK) | opt),
1167-
[asce] "a" (asce), [m4] "i" (local));
1164+
: [r1] "a" (pto), [r2] "a" (addr & PAGE_MASK),
1165+
[m4] "i" (local));
11681166
}
11691167

11701168
static __always_inline void __ptep_ipte(unsigned long address, pte_t *ptep,
@@ -1348,7 +1346,7 @@ static inline void flush_tlb_fix_spurious_fault(struct vm_area_struct *vma,
13481346
* A local RDP can be used to do the flush.
13491347
*/
13501348
if (cpu_has_rdp() && !(pte_val(*ptep) & _PAGE_PROTECT))
1351-
__ptep_rdp(address, ptep, 0, 0, 1);
1349+
__ptep_rdp(address, ptep, 1);
13521350
}
13531351
#define flush_tlb_fix_spurious_fault flush_tlb_fix_spurious_fault
13541352

arch/s390/mm/pgtable.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -274,9 +274,9 @@ void ptep_reset_dat_prot(struct mm_struct *mm, unsigned long addr, pte_t *ptep,
274274
preempt_disable();
275275
atomic_inc(&mm->context.flush_count);
276276
if (cpumask_equal(mm_cpumask(mm), cpumask_of(smp_processor_id())))
277-
__ptep_rdp(addr, ptep, 0, 0, 1);
277+
__ptep_rdp(addr, ptep, 1);
278278
else
279-
__ptep_rdp(addr, ptep, 0, 0, 0);
279+
__ptep_rdp(addr, ptep, 0);
280280
/*
281281
* PTE is not invalidated by RDP, only _PAGE_PROTECT is cleared. That
282282
* means it is still valid and active, and must not be changed according

0 commit comments

Comments
 (0)