public inbox for linux-arm-kernel@lists.infradead.org
 help / color / mirror / Atom feed
* [PATCH v5 0/2] ARM: Remaining PREEMPT_RT bits
@ 2026-02-26 11:17 Sebastian Andrzej Siewior
  2026-02-26 11:17 ` [PATCH v5 1/2] ARM: mm: fault: Enable interrupts before invoking __do_user_fault() Sebastian Andrzej Siewior
  2026-02-26 11:17 ` [PATCH v5 2/2] ARM: Allow to enable RT Sebastian Andrzej Siewior
  0 siblings, 2 replies; 5+ messages in thread
From: Sebastian Andrzej Siewior @ 2026-02-26 11:17 UTC (permalink / raw)
  To: linux-arm-kernel, linux-rt-devel
  Cc: Russell King, Arnd Bergmann, Linus Walleij,
	Sebastian Andrzej Siewior

this is the last batch I have to enable PREEMPT_RT on the ARM
architecture. It is just sending a signal with disabled interrupts and finally
enabling PREEMPT_RT on ARM.

Is this okay?

v4…v5: https://lore.kernel.org/all/20260116170041.1059997-1-bigeasy@linutronix.de
  - Repost.
    Russell said in aWqZDwxUtaE1yP28@shell.armlinux.org.uk that #1
    shouldn't be needed anymore because he has changes in his queue
    which should provide effectively the same changes as #1. I can't
    access it. Here is the whole set so it does not get lost.
    I would appreciate if it could hit the next merge window.

v3…v4: https://lore.kernel.org/all/20251110145555.2555055-1-bigeasy@linutronix.de
  - Dropped applied patches
  - Rebased the remaining one on top of the recent fault handler and branch
    predictor fixes.

v2…v3: https://lore.kernel.org/all/20251103101545.760243-1-bigeasy@linutronix.de
  - Collected tags.

v1…v2: https://lore.kernel.org/all/20251029155918.503060-1-bigeasy@linutronix.de
  - Allow to enable jump-labels on UP. The UP build does not involve
    stop_machine(). Reworked by Arnd.

  - Instead of forbidding HAVE_GUP_FAST with HIGHPTE enabled just
    disable HIGHPTE on PREEMPT_RT. As Arnd explained, HIGHPTE is rarely
    needed.

  - Don't let ARCH_SUPPORTS_RT depend on HAVE_POSIX_CPU_TIMERS_TASK_WORK
    which in turn depends on !KVM. Since KVM has been removed from ARM
    it is sufficient to unconditionally allow ARCH_SUPPORTS_RT. Noted
    by Arnd.

Sebastian Andrzej Siewior (1):
  ARM: Allow to enable RT

Yadi.hu (1):
  ARM: mm: fault: Enable interrupts before invoking __do_user_fault()

 arch/arm/Kconfig    | 1 +
 arch/arm/mm/fault.c | 4 ++++
 2 files changed, 5 insertions(+)

-- 
2.51.0



^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v5 1/2] ARM: mm: fault: Enable interrupts before invoking __do_user_fault()
  2026-02-26 11:17 [PATCH v5 0/2] ARM: Remaining PREEMPT_RT bits Sebastian Andrzej Siewior
@ 2026-02-26 11:17 ` Sebastian Andrzej Siewior
  2026-02-26 12:29   ` Russell King (Oracle)
  2026-02-26 11:17 ` [PATCH v5 2/2] ARM: Allow to enable RT Sebastian Andrzej Siewior
  1 sibling, 1 reply; 5+ messages in thread
From: Sebastian Andrzej Siewior @ 2026-02-26 11:17 UTC (permalink / raw)
  To: linux-arm-kernel, linux-rt-devel
  Cc: Russell King, Arnd Bergmann, Linus Walleij, Yadi.hu,
	Sebastian Andrzej Siewior

From: "Yadi.hu" <yadi.hu@windriver.com>

A page fault from userland for a kernel address originates from from
do_sect_fault() (!LPAE) or do_page_fault() and ends in __do_user_fault()
by sending a signal.

Sending a signal requires to acquire sighand_struct::siglock which is a
spinlock_t. On PREEMPT_RT spinlock_t becomes a sleeping spin lock which
requires interrupts to be enabled. Since the calling context is user
land, interrupts must have been enabled so it is fine to enable them in
this case.

Enable interrupts in do_kernel_address_page_fault() unconditional in the
user_mode case().
Enable interrupts in do_sect_fault() if they were previously enabled.

[bigeasy: Initial patch/ report by Yadi. Maintained the patch and redid
          the patch description since]

Signed-off-by: Yadi.hu <yadi.hu@windriver.com>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
---
 arch/arm/mm/fault.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/arch/arm/mm/fault.c b/arch/arm/mm/fault.c
index ed4330cc3f4e6..3f1c73269c126 100644
--- a/arch/arm/mm/fault.c
+++ b/arch/arm/mm/fault.c
@@ -270,6 +270,7 @@ do_kernel_address_page_fault(struct mm_struct *mm, unsigned long addr,
 		 * while interrupts are still disabled, then send a SIGSEGV.
 		 */
 		harden_branch_predictor();
+		local_irq_enable();
 		__do_user_fault(addr, fsr, SIGSEGV, SEGV_MAPERR, regs);
 	} else {
 		/*
@@ -592,6 +593,9 @@ do_sect_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
 	if (addr >= TASK_SIZE && user_mode(regs))
 		harden_branch_predictor();
 
+	if (interrupts_enabled(regs))
+		local_irq_enable();
+
 	do_bad_area(addr, fsr, regs);
 
 	return 0;
-- 
2.51.0



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v5 2/2] ARM: Allow to enable RT
  2026-02-26 11:17 [PATCH v5 0/2] ARM: Remaining PREEMPT_RT bits Sebastian Andrzej Siewior
  2026-02-26 11:17 ` [PATCH v5 1/2] ARM: mm: fault: Enable interrupts before invoking __do_user_fault() Sebastian Andrzej Siewior
@ 2026-02-26 11:17 ` Sebastian Andrzej Siewior
  1 sibling, 0 replies; 5+ messages in thread
From: Sebastian Andrzej Siewior @ 2026-02-26 11:17 UTC (permalink / raw)
  To: linux-arm-kernel, linux-rt-devel
  Cc: Russell King, Arnd Bergmann, Linus Walleij,
	Sebastian Andrzej Siewior

All known issues have been adressed.
Allow to select RT.

Acked-by: Linus Walleij <linus.walleij@linaro.org>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
---
 arch/arm/Kconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index ec33376f8e2ba..71fc5dd4123f3 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -42,6 +42,7 @@ config ARM
 	select ARCH_SUPPORTS_CFI
 	select ARCH_SUPPORTS_HUGETLBFS if ARM_LPAE
 	select ARCH_SUPPORTS_PER_VMA_LOCK
+	select ARCH_SUPPORTS_RT
 	select ARCH_USE_BUILTIN_BSWAP
 	select ARCH_USE_CMPXCHG_LOCKREF
 	select ARCH_USE_MEMTEST
-- 
2.51.0



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v5 1/2] ARM: mm: fault: Enable interrupts before invoking __do_user_fault()
  2026-02-26 11:17 ` [PATCH v5 1/2] ARM: mm: fault: Enable interrupts before invoking __do_user_fault() Sebastian Andrzej Siewior
@ 2026-02-26 12:29   ` Russell King (Oracle)
  2026-02-26 13:14     ` Sebastian Andrzej Siewior
  0 siblings, 1 reply; 5+ messages in thread
From: Russell King (Oracle) @ 2026-02-26 12:29 UTC (permalink / raw)
  To: Sebastian Andrzej Siewior
  Cc: linux-arm-kernel, linux-rt-devel, Arnd Bergmann, Linus Walleij,
	Yadi.hu

On Thu, Feb 26, 2026 at 12:17:41PM +0100, Sebastian Andrzej Siewior wrote:
> From: "Yadi.hu" <yadi.hu@windriver.com>
> 
> A page fault from userland for a kernel address originates from from
> do_sect_fault() (!LPAE) or do_page_fault() and ends in __do_user_fault()
> by sending a signal.
> 
> Sending a signal requires to acquire sighand_struct::siglock which is a
> spinlock_t. On PREEMPT_RT spinlock_t becomes a sleeping spin lock which
> requires interrupts to be enabled. Since the calling context is user
> land, interrupts must have been enabled so it is fine to enable them in
> this case.
> 
> Enable interrupts in do_kernel_address_page_fault() unconditional in the
> user_mode case().
> Enable interrupts in do_sect_fault() if they were previously enabled.
> 
> [bigeasy: Initial patch/ report by Yadi. Maintained the patch and redid
>           the patch description since]
> 
> Signed-off-by: Yadi.hu <yadi.hu@windriver.com>
> Acked-by: Linus Walleij <linus.walleij@linaro.org>
> Reviewed-by: Arnd Bergmann <arnd@arndb.de>
> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>

Sorry, I've been swamped with stmmac for ages, which has become a
millstone.

I need to push out these patches:

ARM: provide individual is_translation_fault() and is_permission_fault()
ARM: move FSR fault status definitions before fsr_fs()
ARM: use BIT() and GENMASK() for fault status register fields
ARM: move is_permission_fault() and is_translation_fault() to fault.h
ARM: move vmalloc() lazy-page table population
ARM: ensure interrupts are enabled in __do_user_fault()

which will address some of your issues, and clean up the fault handling
code. These patches all date from 5th December. :/

-- 
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v5 1/2] ARM: mm: fault: Enable interrupts before invoking __do_user_fault()
  2026-02-26 12:29   ` Russell King (Oracle)
@ 2026-02-26 13:14     ` Sebastian Andrzej Siewior
  0 siblings, 0 replies; 5+ messages in thread
From: Sebastian Andrzej Siewior @ 2026-02-26 13:14 UTC (permalink / raw)
  To: Russell King (Oracle)
  Cc: linux-arm-kernel, linux-rt-devel, Arnd Bergmann, Linus Walleij,
	Yadi.hu

On 2026-02-26 12:29:45 [+0000], Russell King (Oracle) wrote:
> Sorry, I've been swamped with stmmac for ages, which has become a
> millstone.
> 
> I need to push out these patches:
> 
> ARM: provide individual is_translation_fault() and is_permission_fault()
> ARM: move FSR fault status definitions before fsr_fs()
> ARM: use BIT() and GENMASK() for fault status register fields
> ARM: move is_permission_fault() and is_translation_fault() to fault.h
> ARM: move vmalloc() lazy-page table population
> ARM: ensure interrupts are enabled in __do_user_fault()
> 
> which will address some of your issues, and clean up the fault handling
> code. These patches all date from 5th December. :/

Okay. Thank you. Please let me know once you pushed them where I can
reach them. Then maybe we can reduce this to just 2/2 ;)

Sebastian


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2026-02-26 13:15 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-26 11:17 [PATCH v5 0/2] ARM: Remaining PREEMPT_RT bits Sebastian Andrzej Siewior
2026-02-26 11:17 ` [PATCH v5 1/2] ARM: mm: fault: Enable interrupts before invoking __do_user_fault() Sebastian Andrzej Siewior
2026-02-26 12:29   ` Russell King (Oracle)
2026-02-26 13:14     ` Sebastian Andrzej Siewior
2026-02-26 11:17 ` [PATCH v5 2/2] ARM: Allow to enable RT Sebastian Andrzej Siewior

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox