linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH -next v7 0/7] arm64: entry: Convert to generic irq entry
@ 2025-07-29  1:54 Jinjie Ruan
  2025-07-29  1:54 ` [PATCH -next v7 1/7] arm64: ptrace: Replace interrupts_enabled() with regs_irqs_disabled() Jinjie Ruan
                   ` (8 more replies)
  0 siblings, 9 replies; 33+ messages in thread
From: Jinjie Ruan @ 2025-07-29  1:54 UTC (permalink / raw)
  To: catalin.marinas, will, oleg, sstabellini, mark.rutland, puranjay,
	broonie, mbenes, ryan.roberts, akpm, chenl311, ada.coupriediaz,
	anshuman.khandual, kristina.martsenko, liaochang1, ardb, leitao,
	linux-arm-kernel, linux-kernel, xen-devel
  Cc: ruanjinjie

Currently, x86, Riscv, Loongarch use the generic entry. Also convert
arm64 to use the generic entry infrastructure from kernel/entry/*.
The generic entry makes maintainers' work easier and codes more elegant,
which will make PREEMPT_DYNAMIC and PREEMPT_LAZY use the generic entry
common code and remove a lot of duplicate code.

Since commit a70e9f647f50 ("entry: Split generic entry into generic
exception and syscall entry") split the generic entry into generic irq
entry and generic syscall entry, it is time to convert arm64 to use
the generic irq entry. And ARM64 will be completely converted to generic
entry in the upcoming patch series.

The main convert steps are as follows:
- Split generic entry into generic irq entry and generic syscall to
  make the single patch more concentrated in switching to one thing.
- Make arm64 easier to use irqentry_enter/exit().
- Make arm64 closer to the PREEMPT_DYNAMIC code of generic entry.
- Switch to generic irq entry.

It was tested ok with following test cases on QEMU virt platform:
 - Perf tests.
 - Different `dynamic preempt` mode switch.
 - Pseudo NMI tests.
 - Stress-ng CPU stress test.
 - MTE test case in Documentation/arch/arm64/memory-tagging-extension.rst
   and all test cases in tools/testing/selftests/arm64/mte/*.

The test QEMU configuration is as follows:

	qemu-system-aarch64 \
		-M virt,gic-version=3,virtualization=on,mte=on \
		-cpu max,pauth-impdef=on \
		-kernel Image \
		-smp 8,sockets=1,cores=4,threads=2 \
		-m 512m \
		-nographic \
		-no-reboot \
		-device virtio-rng-pci \
		-append "root=/dev/vda rw console=ttyAMA0 kgdboc=ttyAMA0,115200 \
			earlycon preempt=voluntary irqchip.gicv3_pseudo_nmi=1" \
		-drive if=none,file=images/rootfs.ext4,format=raw,id=hd0 \
		-device virtio-blk-device,drive=hd0 \

Changes in v7:
- Rebased on v6.16-rc7 and remove the merged first patch.
- Update the commit message.

Changes in v6:
- Rebased on 6.14 rc2 next.
- Put the syscall bits aside and split it out.
- Have the split patch before the arm64 changes.
- Merge some tightly coupled patches.
- Adjust the order of some patches to make them more reasonable.
- Define regs_irqs_disabled() by inline function.
- Define interrupts_enabled() in terms of regs_irqs_disabled().
- Delete the fast_interrupts_enabled() macro.
- irqentry_state_t -> arm64_irqentry_state_t.
- Remove arch_exit_to_user_mode_prepare() and pull local_daif_mask() later
  in the arm64 exit sequence
- Update the commit message.

Changes in v5:
- Not change arm32 and keep inerrupts_enabled() macro for gicv3 driver.
- Move irqentry_state definition into arch/arm64/kernel/entry-common.c.
- Avoid removing the __enter_from_*() and __exit_to_*() wrappers.
- Update "irqentry_state_t ret/irq_state" to "state"
  to keep it consistently.
- Use generic irq entry header for PREEMPT_DYNAMIC after split
  the generic entry.
- Also refactor the ARM64 syscall code.
- Introduce arch_ptrace_report_syscall_entry/exit(), instead of
  arch_pre/post_report_syscall_entry/exit() to simplify code.
- Make the syscall patches clear separation.
- Update the commit message.

Changes in v4:
- Rework/cleanup split into a few patches as Mark suggested.
- Replace interrupts_enabled() macro with regs_irqs_disabled(), instead
  of left it here.
- Remove rcu and lockdep state in pt_regs by using temporary
  irqentry_state_t as Mark suggested.
- Remove some unnecessary intermediate functions to make it clear.
- Rework preempt irq and PREEMPT_DYNAMIC code
  to make the switch more clear.
- arch_prepare_*_entry/exit() -> arch_pre_*_entry/exit().
- Expand the arch functions comment.
- Make arch functions closer to its caller.
- Declare saved_reg in for block.
- Remove arch_exit_to_kernel_mode_prepare(), arch_enter_from_kernel_mode().
- Adjust "Add few arch functions to use generic entry" patch to be
  the penultimate.
- Update the commit message.
- Add suggested-by.

Changes in v3:
- Test the MTE test cases.
- Handle forget_syscall() in arch_post_report_syscall_entry()
- Make the arch funcs not use __weak as Thomas suggested, so move
  the arch funcs to entry-common.h, and make arch_forget_syscall() folded
  in arch_post_report_syscall_entry() as suggested.
- Move report_single_step() to thread_info.h for arm64
- Change __always_inline() to inline, add inline for the other arch funcs.
- Remove unused signal.h for entry-common.h.
- Add Suggested-by.
- Update the commit message.

Changes in v2:
- Add tested-by.
- Fix a bug that not call arch_post_report_syscall_entry() in
  syscall_trace_enter() if ptrace_report_syscall_entry() return not zero.
- Refactor report_syscall().
- Add comment for arch_prepare_report_syscall_exit().
- Adjust entry-common.h header file inclusion to alphabetical order.
- Update the commit message.

Jinjie Ruan (7):
  arm64: ptrace: Replace interrupts_enabled() with regs_irqs_disabled()
  arm64: entry: Refactor the entry and exit for exceptions from EL1
  arm64: entry: Rework arm64_preempt_schedule_irq()
  arm64: entry: Use preempt_count() and need_resched() helper
  arm64: entry: Refactor preempt_schedule_irq() check code
  arm64: entry: Move arm64_preempt_schedule_irq() into
    __exit_to_kernel_mode()
  arm64: entry: Switch to generic IRQ entry

 arch/arm64/Kconfig                    |   1 +
 arch/arm64/include/asm/daifflags.h    |   2 +-
 arch/arm64/include/asm/entry-common.h |  56 ++++
 arch/arm64/include/asm/preempt.h      |   2 -
 arch/arm64/include/asm/ptrace.h       |  13 +-
 arch/arm64/include/asm/xen/events.h   |   2 +-
 arch/arm64/kernel/acpi.c              |   2 +-
 arch/arm64/kernel/debug-monitors.c    |   2 +-
 arch/arm64/kernel/entry-common.c      | 411 +++++++++-----------------
 arch/arm64/kernel/sdei.c              |   2 +-
 arch/arm64/kernel/signal.c            |   3 +-
 kernel/entry/common.c                 |  16 +-
 12 files changed, 217 insertions(+), 295 deletions(-)
 create mode 100644 arch/arm64/include/asm/entry-common.h

-- 
2.34.1



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

end of thread, other threads:[~2025-08-14 10:54 UTC | newest]

Thread overview: 33+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-29  1:54 [PATCH -next v7 0/7] arm64: entry: Convert to generic irq entry Jinjie Ruan
2025-07-29  1:54 ` [PATCH -next v7 1/7] arm64: ptrace: Replace interrupts_enabled() with regs_irqs_disabled() Jinjie Ruan
2025-08-05 15:05   ` Ada Couprie Diaz
2025-08-06  2:31     ` Jinjie Ruan
2025-07-29  1:54 ` [PATCH -next v7 2/7] arm64: entry: Refactor the entry and exit for exceptions from EL1 Jinjie Ruan
2025-08-05 15:06   ` Ada Couprie Diaz
2025-08-06  2:49     ` Jinjie Ruan
2025-08-11 16:01       ` Ada Couprie Diaz
2025-08-12 11:01   ` Mark Rutland
2025-07-29  1:54 ` [PATCH -next v7 3/7] arm64: entry: Rework arm64_preempt_schedule_irq() Jinjie Ruan
2025-08-05 15:06   ` Ada Couprie Diaz
2025-07-29  1:54 ` [PATCH -next v7 4/7] arm64: entry: Use preempt_count() and need_resched() helper Jinjie Ruan
2025-08-05 15:06   ` Ada Couprie Diaz
2025-07-29  1:54 ` [PATCH -next v7 5/7] arm64: entry: Refactor preempt_schedule_irq() check code Jinjie Ruan
2025-08-05 15:06   ` Ada Couprie Diaz
2025-08-06  6:26     ` Jinjie Ruan
2025-08-06  6:39     ` Jinjie Ruan
2025-08-11 16:02       ` Ada Couprie Diaz
2025-08-11 16:02   ` Ada Couprie Diaz
2025-08-14  8:49     ` Jinjie Ruan
2025-08-12 11:13   ` Mark Rutland
2025-08-14  9:31     ` Jinjie Ruan
2025-07-29  1:54 ` [PATCH -next v7 6/7] arm64: entry: Move arm64_preempt_schedule_irq() into __exit_to_kernel_mode() Jinjie Ruan
2025-08-05 15:07   ` Ada Couprie Diaz
2025-07-29  1:54 ` [PATCH -next v7 7/7] arm64: entry: Switch to generic IRQ entry Jinjie Ruan
2025-08-05 15:07   ` Ada Couprie Diaz
2025-08-06  6:59     ` Jinjie Ruan
2025-08-05 15:08 ` [PATCH -next v7 0/7] arm64: entry: Convert to generic irq entry Ada Couprie Diaz
2025-08-06  8:11   ` Jinjie Ruan
2025-08-11 16:03     ` Ada Couprie Diaz
2025-08-14  9:37       ` Jinjie Ruan
2025-08-12 11:19 ` Mark Rutland
2025-08-14  9:39   ` Jinjie Ruan

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).