]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
arm64: mm: Make arch_faults_on_old_pte() check for migratability
authorValentin Schneider <valentin.schneider@arm.com>
Thu, 5 May 2022 16:32:07 +0000 (18:32 +0200)
committerCatalin Marinas <catalin.marinas@arm.com>
Mon, 16 May 2022 18:15:18 +0000 (19:15 +0100)
arch_faults_on_old_pte() relies on the calling context being
non-preemptible. CONFIG_PREEMPT_RT turns the PTE lock into a sleepable
spinlock, which doesn't disable preemption once acquired, triggering the
warning in arch_faults_on_old_pte().

It does however disable migration, ensuring the task remains on the same
CPU during the entirety of the critical section, making the read of
cpu_has_hw_af() safe and stable.

Make arch_faults_on_old_pte() check cant_migrate() instead of preemptible().

Cc: Valentin Schneider <vschneid@redhat.com>
Suggested-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Valentin Schneider <valentin.schneider@arm.com>
Link: https://lore.kernel.org/r/20220127192437.1192957-1-valentin.schneider@arm.com
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Link: https://lore.kernel.org/r/20220505163207.85751-4-bigeasy@linutronix.de
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
arch/arm64/include/asm/pgtable.h

index 94e147e5456ca9998ede2aa20d580c2f4431b9fa..9c0a9bfd6b07abf358e28453b1876ef451d6ff8c 100644 (file)
@@ -1001,7 +1001,8 @@ static inline void update_mmu_cache(struct vm_area_struct *vma,
  */
 static inline bool arch_faults_on_old_pte(void)
 {
-       WARN_ON(preemptible());
+       /* The register read below requires a stable CPU to make any sense */
+       cant_migrate();
 
        return !cpu_has_hw_af();
 }