parisc: Add support for CONFIG_SYSCTL_ARCH_UNALIGN_NO_WARN

Allow users to disable kernel warnings for unaligned memory
accesses from kernel via the /proc/sys/kernel/ignore-unaligned-usertrap
procfs entry.
That way users can disable those warnings in case they happen too
often.

Signed-off-by: Helge Deller <deller@gmx.de>
This commit is contained in:
Helge Deller 2024-07-21 23:36:36 +02:00
parent 2fd4e52e44
commit cbade82334
3 changed files with 4 additions and 1 deletions

View File

@ -454,7 +454,7 @@ ignore-unaligned-usertrap
On architectures where unaligned accesses cause traps, and where this On architectures where unaligned accesses cause traps, and where this
feature is supported (``CONFIG_SYSCTL_ARCH_UNALIGN_NO_WARN``; feature is supported (``CONFIG_SYSCTL_ARCH_UNALIGN_NO_WARN``;
currently, ``arc`` and ``loongarch``), controls whether all currently, ``arc``, ``parisc`` and ``loongarch``), controls whether all
unaligned traps are logged. unaligned traps are logged.
= ============================================================= = =============================================================

View File

@ -45,6 +45,7 @@ config PARISC
select GENERIC_CPU_DEVICES if !SMP select GENERIC_CPU_DEVICES if !SMP
select GENERIC_LIB_DEVMEM_IS_ALLOWED select GENERIC_LIB_DEVMEM_IS_ALLOWED
select SYSCTL_ARCH_UNALIGN_ALLOW select SYSCTL_ARCH_UNALIGN_ALLOW
select SYSCTL_ARCH_UNALIGN_NO_WARN
select SYSCTL_EXCEPTION_TRACE select SYSCTL_EXCEPTION_TRACE
select HAVE_MOD_ARCH_SPECIFIC select HAVE_MOD_ARCH_SPECIFIC
select MODULES_USE_ELF_RELA select MODULES_USE_ELF_RELA

View File

@ -104,6 +104,7 @@
#define ERR_NOTHANDLED -1 #define ERR_NOTHANDLED -1
int unaligned_enabled __read_mostly = 1; int unaligned_enabled __read_mostly = 1;
int no_unaligned_warning __read_mostly;
static int emulate_ldh(struct pt_regs *regs, int toreg) static int emulate_ldh(struct pt_regs *regs, int toreg)
{ {
@ -399,6 +400,7 @@ void handle_unaligned(struct pt_regs *regs)
} else { } else {
static DEFINE_RATELIMIT_STATE(kernel_ratelimit, 5 * HZ, 5); static DEFINE_RATELIMIT_STATE(kernel_ratelimit, 5 * HZ, 5);
if (!(current->thread.flags & PARISC_UAC_NOPRINT) && if (!(current->thread.flags & PARISC_UAC_NOPRINT) &&
!no_unaligned_warning &&
__ratelimit(&kernel_ratelimit)) __ratelimit(&kernel_ratelimit))
pr_warn("Kernel: unaligned access to " RFMT " in %pS " pr_warn("Kernel: unaligned access to " RFMT " in %pS "
"(iir " RFMT ")\n", "(iir " RFMT ")\n",