arm64: mm: Make arch_faults_on_old_pte() check for migratability
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>
This commit is contained in:
parent
b4d6bb38f9
commit
c733812dd7
@ -1001,7 +1001,8 @@ static inline void update_mmu_cache(struct vm_area_struct *vma,
|
|||||||
*/
|
*/
|
||||||
static inline bool arch_faults_on_old_pte(void)
|
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();
|
return !cpu_has_hw_af();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user