From: Valentin Schneider <valentin.schneider@arm.com>
To: linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, rcu@vger.kernel.org,
linux-rt-users@vger.kernel.org
Cc: Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will@kernel.org>, Ingo Molnar <mingo@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Thomas Gleixner <tglx@linutronix.de>,
Steven Rostedt <rostedt@goodmis.org>,
Daniel Bristot de Oliveira <bristot@redhat.com>,
Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
"Paul E. McKenney" <paulmck@kernel.org>,
Frederic Weisbecker <frederic@kernel.org>,
Josh Triplett <josh@joshtriplett.org>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
Davidlohr Bueso <dave@stgolabs.net>,
Lai Jiangshan <jiangshanlai@gmail.com>,
Joel Fernandes <joel@joelfernandes.org>,
Anshuman Khandual <anshuman.khandual@arm.com>,
Vincenzo Frascino <vincenzo.frascino@arm.com>,
Steven Price <steven.price@arm.com>,
Ard Biesheuvel <ardb@kernel.org>
Subject: [PATCH v2 4/4] arm64: mm: Make arch_faults_on_old_pte() check for migratability
Date: Sat, 7 Aug 2021 01:58:07 +0100 [thread overview]
Message-ID: <20210807005807.1083943-5-valentin.schneider@arm.com> (raw)
In-Reply-To: <20210807005807.1083943-1-valentin.schneider@arm.com>
Running v5.13-rt1 on my arm64 Juno board triggers:
[ 30.430643] WARNING: CPU: 4 PID: 1 at arch/arm64/include/asm/pgtable.h:985 do_set_pte (./arch/arm64/include/asm/pgtable.h:985 ./arch/arm64/include/asm/pgtable.h:997 mm/memory.c:3830)
[ 30.430669] Modules linked in:
[ 30.430679] CPU: 4 PID: 1 Comm: init Tainted: G W 5.13.0-rt1-00002-gcb994ad7c570 #35
[ 30.430690] Hardware name: ARM Juno development board (r0) (DT)
[ 30.430695] pstate: 80000005 (Nzcv daif -PAN -UAO -TCO BTYPE=--)
[ 30.430874] Call trace:
[ 30.430878] do_set_pte (./arch/arm64/include/asm/pgtable.h:985 ./arch/arm64/include/asm/pgtable.h:997 mm/memory.c:3830)
[ 30.430886] filemap_map_pages (mm/filemap.c:3222)
[ 30.430895] __handle_mm_fault (mm/memory.c:4006 mm/memory.c:4020 mm/memory.c:4153 mm/memory.c:4412 mm/memory.c:4547)
[ 30.430904] handle_mm_fault (mm/memory.c:4645)
[ 30.430912] do_page_fault (arch/arm64/mm/fault.c:507 arch/arm64/mm/fault.c:607)
[ 30.430925] do_translation_fault (arch/arm64/mm/fault.c:692)
[ 30.430936] do_mem_abort (arch/arm64/mm/fault.c:821)
[ 30.430946] el0_ia (arch/arm64/kernel/entry-common.c:324)
[ 30.430959] el0_sync_handler (arch/arm64/kernel/entry-common.c:431)
[ 30.430967] el0_sync (arch/arm64/kernel/entry.S:744)
[ 30.430977] irq event stamp: 1228384
[ 30.430981] hardirqs last enabled at (1228383): lock_page_memcg (mm/memcontrol.c:2005 (discriminator 1))
[ 30.430993] hardirqs last disabled at (1228384): el1_dbg (arch/arm64/kernel/entry-common.c:144 arch/arm64/kernel/entry-common.c:234)
[ 30.431007] softirqs last enabled at (1228260): __local_bh_enable_ip (./arch/arm64/include/asm/irqflags.h:85 kernel/softirq.c:262)
[ 30.431022] softirqs last disabled at (1228232): fpsimd_restore_current_state (./include/linux/bottom_half.h:19 arch/arm64/kernel/fpsimd.c:183 arch/arm64/kernel/fpsimd.c:1182)
CONFIG_PREEMPT_RT turns the PTE lock into a sleepable spinlock. Since
acquiring such a lock also disables migration, any per-CPU access done
under the lock remains safe even if preemptible.
This affects:
filemap_map_pages()
`\
do_set_pte()
`\
arch_wants_old_prefaulted_pte()
which checks preemptible() to figure out if the output of
cpu_has_hw_af() (IOW the underlying CPU) will remain stable for the
subsequent operations. Make it use is_pcpu_safe() instead.
Signed-off-by: Valentin Schneider <valentin.schneider@arm.com>
---
arch/arm64/include/asm/pgtable.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h
index f09bf5c02891..767a064bedde 100644
--- a/arch/arm64/include/asm/pgtable.h
+++ b/arch/arm64/include/asm/pgtable.h
@@ -995,7 +995,7 @@ static inline void update_mmu_cache(struct vm_area_struct *vma,
*/
static inline bool arch_faults_on_old_pte(void)
{
- WARN_ON(preemptible());
+ WARN_ON(!is_pcpu_safe());
return !cpu_has_hw_af();
}
--
2.25.1
prev parent reply other threads:[~2021-08-07 0:58 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-07 0:58 [PATCH v2 0/4] rcu, arm64: PREEMPT_RT fixlets Valentin Schneider
2021-08-07 0:58 ` [PATCH v2 1/4] rcutorture: Don't disable softirqs with preemption disabled when PREEMPT_RT Valentin Schneider
2021-08-07 0:58 ` [PATCH v2 2/4] sched: Introduce is_pcpu_safe() Valentin Schneider
2021-08-07 1:42 ` Mike Galbraith
2021-08-08 16:15 ` Valentin Schneider
2021-08-10 12:49 ` Boqun Feng
2021-08-10 13:04 ` Valentin Schneider
2021-08-10 2:42 ` Boqun Feng
2021-08-10 9:26 ` Valentin Schneider
2021-08-07 0:58 ` [PATCH v2 3/4] rcu/nocb: Protect NOCB state via local_lock() under PREEMPT_RT Valentin Schneider
2021-08-07 0:58 ` Valentin Schneider [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210807005807.1083943-5-valentin.schneider@arm.com \
--to=valentin.schneider@arm.com \
--cc=anshuman.khandual@arm.com \
--cc=ardb@kernel.org \
--cc=bigeasy@linutronix.de \
--cc=bristot@redhat.com \
--cc=catalin.marinas@arm.com \
--cc=dave@stgolabs.net \
--cc=frederic@kernel.org \
--cc=jiangshanlai@gmail.com \
--cc=joel@joelfernandes.org \
--cc=josh@joshtriplett.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rt-users@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mingo@kernel.org \
--cc=paulmck@kernel.org \
--cc=peterz@infradead.org \
--cc=rcu@vger.kernel.org \
--cc=rostedt@goodmis.org \
--cc=steven.price@arm.com \
--cc=tglx@linutronix.de \
--cc=vincenzo.frascino@arm.com \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).