[PATCH v3 0/4] ARM: vfp: Switch to C API to en/disable softirqs

Ard Biesheuvel ardb at kernel.org
Thu Mar 16 01:20:03 PDT 2023


As it turns out, enabling or disabling softirqs from asm code is more
tricky than it looks. Simply bumping the associated bit in preempt_count
does the trick for uninstrumented kernels, but with lockdep or preempt
debug enabled, we really need to call the C versions, as replicating
their behavior in asm fully is intractible.

So let's rework the existing code a little bit so we can interpose a
little C helper 'vfp_entry()' that disables softirqs before calling the
existing vfpstate handling code in asm. Re-enabling softirqs from asm
code is more straight-forward, as we can simply perform a tail call via
a C routine that is guaranteed to be callable as a function.

However, since calling these APIs from asm code is still not ideal,
let's reimplement the whole thing in C (patch #4)


Changes since v2:
- add Rbs and Tbs from Linus and Guenter (thanks!)
- correct reference to local_bh_enable() vs __local_bh_enable_ip() in
  commit log of patch #3
- add patch that reworks the asm VFP exception handling entirely so the
  bulk of it is implemented in C. This could be taken into v6.4, while
  the  preceding patches are fixes for v6.3-rc

Cc: Frederic Weisbecker <frederic at kernel.org>
Cc: Guenter Roeck <linux at roeck-us.net>
Cc: Peter Zijlstra <peterz at infradead.org>
Cc: Linus Walleij <linus.walleij at linaro.org>
Cc: Arnd Bergmann <arnd at arndb.de>
Link: https://lore.kernel.org/all/ZBBYCSZUJOWBg1s8@localhost.localdomain/

Ard Biesheuvel (4):
  ARM: vfp: Pass thread_info pointer to vfp_support_entry
  ARM: vfp: Pass successful return address via register R3
  ARM: vfp: Fix broken softirq handling with instrumentation enabled
  ARM: vfp: Reimplement VFP exception entry in C code

 arch/arm/include/asm/assembler.h |  13 --
 arch/arm/kernel/entry-armv.S     |  12 ++
 arch/arm/vfp/Makefile            |   2 +-
 arch/arm/vfp/entry.S             |  39 ----
 arch/arm/vfp/vfp.h               |   1 +
 arch/arm/vfp/vfphw.S             | 198 ++------------------
 arch/arm/vfp/vfpmodule.c         | 125 +++++++++++-
 7 files changed, 142 insertions(+), 248 deletions(-)
 delete mode 100644 arch/arm/vfp/entry.S

-- 
2.39.2




More information about the linux-arm-kernel mailing list