* [PATCH v8 00/22] RV: Linear temporal logic monitors for RT application
@ 2025-05-12 10:50 Nam Cao
2025-05-12 10:51 ` [PATCH v8 17/22] arm64: mm: Add page fault trace points Nam Cao
` (2 more replies)
0 siblings, 3 replies; 11+ messages in thread
From: Nam Cao @ 2025-05-12 10:50 UTC (permalink / raw)
To: Steven Rostedt, Gabriele Monaco, linux-trace-kernel, linux-kernel
Cc: john.ogness, Nam Cao, Petr Mladek, Sergey Senozhatsky,
Ingo Molnar, Thomas Gleixner, Borislav Petkov, Dave Hansen, x86,
H . Peter Anvin, Andy Lutomirski, Peter Zijlstra, Catalin Marinas,
linux-arm-kernel, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Alexandre Ghiti, linux-riscv
Real-time applications may have design flaws causing them to have
unexpected latency. For example, the applications may raise page faults, or
may be blocked trying to take a mutex without priority inheritance.
However, while attempting to implement DA monitors for these real-time
rules, deterministic automaton is found to be inappropriate as the
specification language. The automaton is complicated, hard to understand,
and error-prone.
For these cases, linear temporal logic is found to be more suitable. The
LTL is more concise and intuitive.
This series adds support for LTL RV monitor, and use it to implement two
monitors for reporting problems with real-time tasks.
Patch 1-12 cleanup and prepare the RV code for the integration of LTL
monitors.
Patch 13 adds support for LTL monitors.
Patch 14 adds the container monitor "rtapp". This encapsulates the
sub-monitors for real-time.
Patch 15-18 prepares the pagefault tracepoints, so that patch 19 can add
the monitor which watches real-time tasks doing page faults.
Patch 20 adds the "sleep" monitor: it detects potential undesirable latency
with real-time threads.
Patch 21 adds documentation on the new monitors.
Patch 22 allows the number of per-task monitors to be configurable, so that
the two new monitors can be enabled simultaneously.
v7->v8 https://lore.kernel.org/lkml/cover.1746776116.git.namcao@linutronix.de/
- Fix some pylint warnings
- Fix some bugs with some currently-unused operators in the ltl2ba.py
script
- sleep monitor: Allow all FUTEX_WAIT_* as valid sleep reason
v6->v7 https://lore.kernel.org/lkml/cover.1745999587.git.namcao@linutronix.de/
- Add missing parameter description for vpanic()
- Remove the now-redundant CFLAGS_fault.o for x86
- Change #if to #ifdef to resolve a build warning
- rtapp/sleep monitor:
+ Handle the case where an RT task "aborts" the sleep by setting state
to TASK_RUNNING. This case previously caused a false positive. Fix it
by adding "ABORT_SLEEP" as an RT-safe wake.
+ Also allow CLOCK_TAI for real-time tasks.
v5->v6 https://lore.kernel.org/lkml/cover.1745926331.git.namcao@linutronix.de
- sleep monitor: Drop the block_on_rt_mutex tracepoints. The contention
tracepoints are sufficient.
v4->v5 https://lore.kernel.org/lkml/cover.1745390829.git.namcao@linutronix.de
- sleep monitor: Fix a false positive due to a race with waking and
scheduling.
- sleep monitor: Add block_on_rt_mutex tracepoints and use them for
BLOCK_ON_RT_MUTEX, instead of trace_sched_pi_setprio
- sleep monitor: tighten the rule on nanosleep: only clock_nanosleep()
with TIMER_ABSTIME and CLOCK_MONOTONIC is allowed
- add comments explaining why it is correct to treat PI-boosted tasks as
real-time tasks.
It should be noted that due to the changes in v5, 'perf' does not work
as well as before, because sometimes the errors happen out of the
real-time tasks' contexts. Fixing this is left for future work.
stress-ng is also far noisier in v5, because the rule on nanosleep is
tightened.
v3->v4 https://lore.kernel.org/lkml/cover.1744785335.git.namcao@linutronix.de
- support deadline tasks
- rtapp_sleep: use sched_pi_setprio tracepoint instead of contention
tracepoints for BLOCK_ON_RT_MUTEX, so that proxy lock is covered.
- fix the scripts generating an "slightly" incorrect verification automaton
- makes rtapp monitor depends on RV_PER_TASK_MONITORS >= 2
- make the event tracepoint output a bit more readable
- some documentation's format fixes
v2->v3 https://lore.kernel.org/lkml/cover.1744355018.git.namcao@linutronix.de/
- fix a problem with sleep monitor's specification (around
KTHREAD_SHOULD_STOP)
- merge the patches that move the dot2k/rvgen scripts around
- pull panic/printk changes into separate patches
- fixup some build errors
- fixup monitor's init function return code
- fix some flake8 warnings with the scripts
- add some references to LTL documentation
- fixup some mistakes with rtapp documentation
- fixup capitalization mistake with monitor_synthesis.rst
- remove the now-redundant macro RV_PER_TASK_MONITORS
v1->v2 https://lore.kernel.org/lkml/cover.1741708239.git.namcao@linutronix.de/
- Integrate the LTL scripts into the existing dot2k tool, taking
advantage of the existing monitor generation scripts.
- Switch the struct ltl_monitor to use bitmap instead of an array, to
optimize memory usage.
- Correct the generated code to be non-deterministic state machine,
instead of deterministic state machine
- Put common code for all LTL monitors into a single file
(include/rv/ltl_monitor.h), reducing code duplication
- Change the LTL monitors to make user of container. Add a bug fix to
container while at it.
- Make the number of per-task monitor configurable
Cc: Petr Mladek <pmladek@suse.com>
Cc: John Ogness <john.ogness@linutronix.de>
Cc: Sergey Senozhatsky <senozhatsky@chromium.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: x86@kernel.org
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: linux-arm-kernel@lists.infradead.org
Cc: Paul Walmsley <paul.walmsley@sifive.com>
Cc: Palmer Dabbelt <palmer@dabbelt.com>
Cc: Albert Ou <aou@eecs.berkeley.edu>
Cc: Alexandre Ghiti <alex@ghiti.fr>
Cc: linux-riscv@lists.infradead.org
Nam Cao (22):
rv: Add #undef TRACE_INCLUDE_FILE
printk: Make vprintk_deferred() public
panic: Add vpanic()
rv: Let the reactors take care of buffers
verification/dot2k: Make a separate dot2k_templates/Kconfig_container
verification/dot2k: Remove __buff_to_string()
verification/dot2k: Replace is_container() hack with subparsers
rv: rename CONFIG_DA_MON_EVENTS to CONFIG_RV_MON_EVENTS
verification/dot2k: Prepare the frontend for LTL inclusion
Documentation/rv: Prepare monitor synthesis document for LTL inclusion
verification/rvgen: Restructure the templates files
verification/rvgen: Restructure the classes to prepare for LTL
inclusion
rv: Add support for LTL monitors
rv: Add rtapp container monitor
x86/tracing: Remove redundant trace_pagefault_key
x86/tracing: Move page fault trace points to generic
arm64: mm: Add page fault trace points
riscv: mm: Add page fault trace points
rv: Add rtapp_pagefault monitor
rv: Add rtapp_sleep monitor
rv: Add documentation for rtapp monitor
rv: Allow to configure the number of per-task monitor
.../trace/rv/da_monitor_synthesis.rst | 147 -----
Documentation/trace/rv/index.rst | 4 +-
.../trace/rv/linear_temporal_logic.rst | 122 ++++
Documentation/trace/rv/monitor_rtapp.rst | 116 ++++
Documentation/trace/rv/monitor_synthesis.rst | 256 +++++++++
arch/arm64/mm/fault.c | 8 +
arch/riscv/mm/fault.c | 8 +
arch/x86/include/asm/trace/common.h | 12 -
arch/x86/include/asm/trace/irq_vectors.h | 1 -
arch/x86/kernel/Makefile | 1 -
arch/x86/kernel/tracepoint.c | 21 -
arch/x86/mm/Makefile | 2 -
arch/x86/mm/fault.c | 5 +-
include/linux/panic.h | 3 +
include/linux/printk.h | 5 +
include/linux/rv.h | 74 ++-
include/linux/sched.h | 8 +-
include/rv/da_monitor.h | 45 +-
include/rv/ltl_monitor.h | 184 ++++++
.../trace/events}/exceptions.h | 27 +-
kernel/fork.c | 5 +-
kernel/panic.c | 18 +-
kernel/printk/internal.h | 1 -
kernel/trace/rv/Kconfig | 27 +-
kernel/trace/rv/Makefile | 3 +
kernel/trace/rv/monitors/pagefault/Kconfig | 11 +
.../trace/rv/monitors/pagefault/pagefault.c | 87 +++
.../trace/rv/monitors/pagefault/pagefault.h | 57 ++
.../rv/monitors/pagefault/pagefault_trace.h | 14 +
kernel/trace/rv/monitors/rtapp/Kconfig | 7 +
kernel/trace/rv/monitors/rtapp/rtapp.c | 33 ++
kernel/trace/rv/monitors/rtapp/rtapp.h | 3 +
kernel/trace/rv/monitors/sleep/Kconfig | 13 +
kernel/trace/rv/monitors/sleep/sleep.c | 236 ++++++++
kernel/trace/rv/monitors/sleep/sleep.h | 250 ++++++++
kernel/trace/rv/monitors/sleep/sleep_trace.h | 14 +
kernel/trace/rv/reactor_panic.c | 8 +-
kernel/trace/rv/reactor_printk.c | 8 +-
kernel/trace/rv/rv.c | 10 +-
kernel/trace/rv/rv_reactors.c | 2 +-
kernel/trace/rv/rv_trace.h | 52 +-
tools/verification/dot2/Makefile | 26 -
tools/verification/dot2/dot2k | 53 --
tools/verification/models/rtapp/pagefault.ltl | 1 +
tools/verification/models/rtapp/sleep.ltl | 22 +
tools/verification/rvgen/.gitignore | 3 +
tools/verification/rvgen/Makefile | 27 +
tools/verification/rvgen/__main__.py | 67 +++
tools/verification/{dot2 => rvgen}/dot2c | 2 +-
.../{dot2 => rvgen/rvgen}/automata.py | 0
tools/verification/rvgen/rvgen/container.py | 22 +
.../{dot2 => rvgen/rvgen}/dot2c.py | 2 +-
tools/verification/rvgen/rvgen/dot2k.py | 129 +++++
.../dot2k.py => rvgen/rvgen/generator.py} | 249 ++------
tools/verification/rvgen/rvgen/ltl2ba.py | 540 ++++++++++++++++++
tools/verification/rvgen/rvgen/ltl2k.py | 245 ++++++++
.../rvgen/templates}/Kconfig | 0
.../rvgen/rvgen/templates/container/Kconfig | 5 +
.../rvgen/templates/container/main.c} | 0
.../rvgen/templates/container/main.h} | 0
.../rvgen/templates/dot2k}/main.c | 0
.../rvgen/templates/dot2k}/trace.h | 0
.../rvgen/rvgen/templates/ltl2k/main.c | 102 ++++
.../rvgen/rvgen/templates/ltl2k/trace.h | 14 +
64 files changed, 2865 insertions(+), 552 deletions(-)
delete mode 100644 Documentation/trace/rv/da_monitor_synthesis.rst
create mode 100644 Documentation/trace/rv/linear_temporal_logic.rst
create mode 100644 Documentation/trace/rv/monitor_rtapp.rst
create mode 100644 Documentation/trace/rv/monitor_synthesis.rst
delete mode 100644 arch/x86/include/asm/trace/common.h
delete mode 100644 arch/x86/kernel/tracepoint.c
create mode 100644 include/rv/ltl_monitor.h
rename {arch/x86/include/asm/trace => include/trace/events}/exceptions.h (55%)
create mode 100644 kernel/trace/rv/monitors/pagefault/Kconfig
create mode 100644 kernel/trace/rv/monitors/pagefault/pagefault.c
create mode 100644 kernel/trace/rv/monitors/pagefault/pagefault.h
create mode 100644 kernel/trace/rv/monitors/pagefault/pagefault_trace.h
create mode 100644 kernel/trace/rv/monitors/rtapp/Kconfig
create mode 100644 kernel/trace/rv/monitors/rtapp/rtapp.c
create mode 100644 kernel/trace/rv/monitors/rtapp/rtapp.h
create mode 100644 kernel/trace/rv/monitors/sleep/Kconfig
create mode 100644 kernel/trace/rv/monitors/sleep/sleep.c
create mode 100644 kernel/trace/rv/monitors/sleep/sleep.h
create mode 100644 kernel/trace/rv/monitors/sleep/sleep_trace.h
delete mode 100644 tools/verification/dot2/Makefile
delete mode 100644 tools/verification/dot2/dot2k
create mode 100644 tools/verification/models/rtapp/pagefault.ltl
create mode 100644 tools/verification/models/rtapp/sleep.ltl
create mode 100644 tools/verification/rvgen/.gitignore
create mode 100644 tools/verification/rvgen/Makefile
create mode 100644 tools/verification/rvgen/__main__.py
rename tools/verification/{dot2 => rvgen}/dot2c (97%)
rename tools/verification/{dot2 => rvgen/rvgen}/automata.py (100%)
create mode 100644 tools/verification/rvgen/rvgen/container.py
rename tools/verification/{dot2 => rvgen/rvgen}/dot2c.py (99%)
create mode 100644 tools/verification/rvgen/rvgen/dot2k.py
rename tools/verification/{dot2/dot2k.py => rvgen/rvgen/generator.py} (52%)
create mode 100644 tools/verification/rvgen/rvgen/ltl2ba.py
create mode 100644 tools/verification/rvgen/rvgen/ltl2k.py
rename tools/verification/{dot2/dot2k_templates => rvgen/rvgen/templates}/Kconfig (100%)
create mode 100644 tools/verification/rvgen/rvgen/templates/container/Kconfig
rename tools/verification/{dot2/dot2k_templates/main_container.c => rvgen/rvgen/templates/container/main.c} (100%)
rename tools/verification/{dot2/dot2k_templates/main_container.h => rvgen/rvgen/templates/container/main.h} (100%)
rename tools/verification/{dot2/dot2k_templates => rvgen/rvgen/templates/dot2k}/main.c (100%)
rename tools/verification/{dot2/dot2k_templates => rvgen/rvgen/templates/dot2k}/trace.h (100%)
create mode 100644 tools/verification/rvgen/rvgen/templates/ltl2k/main.c
create mode 100644 tools/verification/rvgen/rvgen/templates/ltl2k/trace.h
--
2.39.5
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v8 17/22] arm64: mm: Add page fault trace points
2025-05-12 10:50 [PATCH v8 00/22] RV: Linear temporal logic monitors for RT application Nam Cao
@ 2025-05-12 10:51 ` Nam Cao
2025-05-19 14:49 ` Catalin Marinas
2025-05-16 8:21 ` [PATCH v8 00/22] RV: Linear temporal logic monitors for RT application Ingo Molnar
2025-08-10 21:12 ` patchwork-bot+linux-riscv
2 siblings, 1 reply; 11+ messages in thread
From: Nam Cao @ 2025-05-12 10:51 UTC (permalink / raw)
To: Steven Rostedt, Gabriele Monaco, linux-trace-kernel, linux-kernel
Cc: john.ogness, Nam Cao, Catalin Marinas, Will Deacon,
linux-arm-kernel
Add page fault trace points, which are useful to implement RV monitor which
watches page faults.
Signed-off-by: Nam Cao <namcao@linutronix.de>
---
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will@kernel.org>
Cc: linux-arm-kernel@lists.infradead.org
---
arch/arm64/mm/fault.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c
index ec0a337891dd..55094030e377 100644
--- a/arch/arm64/mm/fault.c
+++ b/arch/arm64/mm/fault.c
@@ -44,6 +44,9 @@
#include <asm/tlbflush.h>
#include <asm/traps.h>
+#define CREATE_TRACE_POINTS
+#include <trace/events/exceptions.h>
+
struct fault_info {
int (*fn)(unsigned long far, unsigned long esr,
struct pt_regs *regs);
@@ -559,6 +562,11 @@ static int __kprobes do_page_fault(unsigned long far, unsigned long esr,
if (kprobe_page_fault(regs, esr))
return 0;
+ if (user_mode(regs))
+ trace_page_fault_user(addr, regs, esr);
+ else
+ trace_page_fault_kernel(addr, regs, esr);
+
/*
* If we're in an interrupt or have no user context, we must not take
* the fault.
--
2.39.5
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH v8 00/22] RV: Linear temporal logic monitors for RT application
2025-05-12 10:50 [PATCH v8 00/22] RV: Linear temporal logic monitors for RT application Nam Cao
2025-05-12 10:51 ` [PATCH v8 17/22] arm64: mm: Add page fault trace points Nam Cao
@ 2025-05-16 8:21 ` Ingo Molnar
2025-05-16 8:55 ` Nam Cao
2025-08-10 21:12 ` patchwork-bot+linux-riscv
2 siblings, 1 reply; 11+ messages in thread
From: Ingo Molnar @ 2025-05-16 8:21 UTC (permalink / raw)
To: Nam Cao
Cc: Steven Rostedt, Gabriele Monaco, linux-trace-kernel, linux-kernel,
john.ogness, Petr Mladek, Sergey Senozhatsky, Ingo Molnar,
Thomas Gleixner, Borislav Petkov, Dave Hansen, x86,
H . Peter Anvin, Andy Lutomirski, Peter Zijlstra, Catalin Marinas,
linux-arm-kernel, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Alexandre Ghiti, linux-riscv
* Nam Cao <namcao@linutronix.de> wrote:
> Nam Cao (22):
> x86/tracing: Remove redundant trace_pagefault_key
> x86/tracing: Move page fault trace points to generic
Does the renaming of the tracepoint class from 'x86_exceptions' to
'exceptions' have any negative effects on tooling?
Thanks,
Ingo
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v8 00/22] RV: Linear temporal logic monitors for RT application
2025-05-16 8:21 ` [PATCH v8 00/22] RV: Linear temporal logic monitors for RT application Ingo Molnar
@ 2025-05-16 8:55 ` Nam Cao
2025-05-16 9:07 ` Nam Cao
2025-05-16 9:12 ` Ingo Molnar
0 siblings, 2 replies; 11+ messages in thread
From: Nam Cao @ 2025-05-16 8:55 UTC (permalink / raw)
To: Ingo Molnar
Cc: Steven Rostedt, Gabriele Monaco, linux-trace-kernel, linux-kernel,
john.ogness, Petr Mladek, Sergey Senozhatsky, Ingo Molnar,
Thomas Gleixner, Borislav Petkov, Dave Hansen, x86,
H . Peter Anvin, Andy Lutomirski, Peter Zijlstra, Catalin Marinas,
linux-arm-kernel, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Alexandre Ghiti, linux-riscv
On Fri, May 16, 2025 at 10:21:36AM +0200, Ingo Molnar wrote:
>
> * Nam Cao <namcao@linutronix.de> wrote:
>
> > Nam Cao (22):
> > x86/tracing: Remove redundant trace_pagefault_key
> > x86/tracing: Move page fault trace points to generic
>
> Does the renaming of the tracepoint class from 'x86_exceptions' to
> 'exceptions' have any negative effects on tooling?
No, tracepoint class name doesn't affect userspace. The tracepoints' names
seen from userspace are the same after the patches:
exceptions:page_fault_kernel
exceptions:page_fault_user
Best regards,
Nam
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v8 00/22] RV: Linear temporal logic monitors for RT application
2025-05-16 8:55 ` Nam Cao
@ 2025-05-16 9:07 ` Nam Cao
2025-05-16 9:12 ` Ingo Molnar
1 sibling, 0 replies; 11+ messages in thread
From: Nam Cao @ 2025-05-16 9:07 UTC (permalink / raw)
To: Ingo Molnar
Cc: Steven Rostedt, Gabriele Monaco, linux-trace-kernel, linux-kernel,
john.ogness, Petr Mladek, Sergey Senozhatsky, Ingo Molnar,
Thomas Gleixner, Borislav Petkov, Dave Hansen, x86,
H . Peter Anvin, Andy Lutomirski, Peter Zijlstra, Catalin Marinas,
linux-arm-kernel, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Alexandre Ghiti, linux-riscv
On Fri, May 16, 2025 at 10:56:04AM +0200, Nam Cao wrote:
> On Fri, May 16, 2025 at 10:21:36AM +0200, Ingo Molnar wrote:
> >
> > * Nam Cao <namcao@linutronix.de> wrote:
> >
> > > Nam Cao (22):
> > > x86/tracing: Remove redundant trace_pagefault_key
> > > x86/tracing: Move page fault trace points to generic
> >
> > Does the renaming of the tracepoint class from 'x86_exceptions' to
> > 'exceptions' have any negative effects on tooling?
>
> No, tracepoint class name doesn't affect userspace. The tracepoints' names
> seen from userspace are the same after the patches:
> exceptions:page_fault_kernel
> exceptions:page_fault_user
Just in case of confusion, the "exceptions:" name is from the TRACE_SYSTEM
macro, not the class name.
Best regards,
Nam
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v8 00/22] RV: Linear temporal logic monitors for RT application
2025-05-16 8:55 ` Nam Cao
2025-05-16 9:07 ` Nam Cao
@ 2025-05-16 9:12 ` Ingo Molnar
1 sibling, 0 replies; 11+ messages in thread
From: Ingo Molnar @ 2025-05-16 9:12 UTC (permalink / raw)
To: Nam Cao
Cc: Steven Rostedt, Gabriele Monaco, linux-trace-kernel, linux-kernel,
john.ogness, Petr Mladek, Sergey Senozhatsky, Ingo Molnar,
Thomas Gleixner, Borislav Petkov, Dave Hansen, x86,
H . Peter Anvin, Andy Lutomirski, Peter Zijlstra, Catalin Marinas,
linux-arm-kernel, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Alexandre Ghiti, linux-riscv
* Nam Cao <namcao@linutronix.de> wrote:
> On Fri, May 16, 2025 at 10:21:36AM +0200, Ingo Molnar wrote:
> >
> > * Nam Cao <namcao@linutronix.de> wrote:
> >
> > > Nam Cao (22):
> > > x86/tracing: Remove redundant trace_pagefault_key
> > > x86/tracing: Move page fault trace points to generic
> >
> > Does the renaming of the tracepoint class from 'x86_exceptions' to
> > 'exceptions' have any negative effects on tooling?
>
> No, tracepoint class name doesn't affect userspace. The tracepoints' names
> seen from userspace are the same after the patches:
> exceptions:page_fault_kernel
> exceptions:page_fault_user
Perfect, thank you!
Since there's been no new review feedback about these two patches since
-v5, I've applied them to tip:x86/debug, with a v6.15-rc6 base, because
IMO they make sense independently of your series as well.
Thanks,
Ingo
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v8 17/22] arm64: mm: Add page fault trace points
2025-05-12 10:51 ` [PATCH v8 17/22] arm64: mm: Add page fault trace points Nam Cao
@ 2025-05-19 14:49 ` Catalin Marinas
2025-05-20 12:25 ` Nam Cao
0 siblings, 1 reply; 11+ messages in thread
From: Catalin Marinas @ 2025-05-19 14:49 UTC (permalink / raw)
To: Nam Cao
Cc: Steven Rostedt, Gabriele Monaco, linux-trace-kernel, linux-kernel,
john.ogness, Will Deacon, linux-arm-kernel
On Mon, May 12, 2025 at 12:51:00PM +0200, Nam Cao wrote:
> diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c
> index ec0a337891dd..55094030e377 100644
> --- a/arch/arm64/mm/fault.c
> +++ b/arch/arm64/mm/fault.c
> @@ -44,6 +44,9 @@
> #include <asm/tlbflush.h>
> #include <asm/traps.h>
>
> +#define CREATE_TRACE_POINTS
> +#include <trace/events/exceptions.h>
> +
> struct fault_info {
> int (*fn)(unsigned long far, unsigned long esr,
> struct pt_regs *regs);
> @@ -559,6 +562,11 @@ static int __kprobes do_page_fault(unsigned long far, unsigned long esr,
> if (kprobe_page_fault(regs, esr))
> return 0;
>
> + if (user_mode(regs))
> + trace_page_fault_user(addr, regs, esr);
> + else
> + trace_page_fault_kernel(addr, regs, esr);
What are the semantics for these tracepoints? When are they supposed to
be called? In the RV context context I guess you only care about the
benign, recoverable faults that would affect timing. These tracepoints
were generalised from the x86 code but I don't know enough about it to
tell when they would be invoked.
For arm64, we also have the do_translation_fault() path for example that
may or may not need to log such trace events.
--
Catalin
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v8 17/22] arm64: mm: Add page fault trace points
2025-05-19 14:49 ` Catalin Marinas
@ 2025-05-20 12:25 ` Nam Cao
2025-05-20 14:15 ` Catalin Marinas
0 siblings, 1 reply; 11+ messages in thread
From: Nam Cao @ 2025-05-20 12:25 UTC (permalink / raw)
To: Catalin Marinas
Cc: Steven Rostedt, Gabriele Monaco, linux-trace-kernel, linux-kernel,
john.ogness, Will Deacon, linux-arm-kernel
On Mon, May 19, 2025 at 03:49:29PM +0100, Catalin Marinas wrote:
> On Mon, May 12, 2025 at 12:51:00PM +0200, Nam Cao wrote:
> > diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c
> > index ec0a337891dd..55094030e377 100644
> > --- a/arch/arm64/mm/fault.c
> > +++ b/arch/arm64/mm/fault.c
> > @@ -44,6 +44,9 @@
> > #include <asm/tlbflush.h>
> > #include <asm/traps.h>
> >
> > +#define CREATE_TRACE_POINTS
> > +#include <trace/events/exceptions.h>
> > +
> > struct fault_info {
> > int (*fn)(unsigned long far, unsigned long esr,
> > struct pt_regs *regs);
> > @@ -559,6 +562,11 @@ static int __kprobes do_page_fault(unsigned long far, unsigned long esr,
> > if (kprobe_page_fault(regs, esr))
> > return 0;
> >
> > + if (user_mode(regs))
> > + trace_page_fault_user(addr, regs, esr);
> > + else
> > + trace_page_fault_kernel(addr, regs, esr);
>
> What are the semantics for these tracepoints? When are they supposed to
> be called? In the RV context context I guess you only care about the
> benign, recoverable faults that would affect timing. These tracepoints
> were generalised from the x86 code but I don't know enough about it to
> tell when they would be invoked.
>
> For arm64, we also have the do_translation_fault() path for example that
> may or may not need to log such trace events.
These tracepoints are invoked for x86 page fault exceptions. Are arm64's
translation faults considered equivalent to x86 page faults?
Best regards,
Nam
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v8 17/22] arm64: mm: Add page fault trace points
2025-05-20 12:25 ` Nam Cao
@ 2025-05-20 14:15 ` Catalin Marinas
2025-05-21 9:03 ` Nam Cao
0 siblings, 1 reply; 11+ messages in thread
From: Catalin Marinas @ 2025-05-20 14:15 UTC (permalink / raw)
To: Nam Cao
Cc: Steven Rostedt, Gabriele Monaco, linux-trace-kernel, linux-kernel,
john.ogness, Will Deacon, linux-arm-kernel
On Tue, May 20, 2025 at 02:25:48PM +0200, Nam Cao wrote:
> On Mon, May 19, 2025 at 03:49:29PM +0100, Catalin Marinas wrote:
> > On Mon, May 12, 2025 at 12:51:00PM +0200, Nam Cao wrote:
> > > diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c
> > > index ec0a337891dd..55094030e377 100644
> > > --- a/arch/arm64/mm/fault.c
> > > +++ b/arch/arm64/mm/fault.c
> > > @@ -44,6 +44,9 @@
> > > #include <asm/tlbflush.h>
> > > #include <asm/traps.h>
> > >
> > > +#define CREATE_TRACE_POINTS
> > > +#include <trace/events/exceptions.h>
> > > +
> > > struct fault_info {
> > > int (*fn)(unsigned long far, unsigned long esr,
> > > struct pt_regs *regs);
> > > @@ -559,6 +562,11 @@ static int __kprobes do_page_fault(unsigned long far, unsigned long esr,
> > > if (kprobe_page_fault(regs, esr))
> > > return 0;
> > >
> > > + if (user_mode(regs))
> > > + trace_page_fault_user(addr, regs, esr);
> > > + else
> > > + trace_page_fault_kernel(addr, regs, esr);
> >
> > What are the semantics for these tracepoints? When are they supposed to
> > be called? In the RV context context I guess you only care about the
> > benign, recoverable faults that would affect timing. These tracepoints
> > were generalised from the x86 code but I don't know enough about it to
> > tell when they would be invoked.
> >
> > For arm64, we also have the do_translation_fault() path for example that
> > may or may not need to log such trace events.
>
> These tracepoints are invoked for x86 page fault exceptions. Are arm64's
> translation faults considered equivalent to x86 page faults?
Probably. We route permission or access flag faults via do_page_fault()
directly while missing page table entries via do_translation_fault().
The latter end up in do_page_fault() only if the faulting address is in
the user address range.
My point was that we may not always invoke the trace callbacks if, for
example, the user tries to access the kernel space (and results in a
SIGSEGV). While that's fine for RV, I wanted to know what is expected of
these trace points in general. Do we need to log such SIGSEGV-generating
events? We do log them if there's a permission fault.
--
Catalin
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v8 17/22] arm64: mm: Add page fault trace points
2025-05-20 14:15 ` Catalin Marinas
@ 2025-05-21 9:03 ` Nam Cao
0 siblings, 0 replies; 11+ messages in thread
From: Nam Cao @ 2025-05-21 9:03 UTC (permalink / raw)
To: Catalin Marinas, Mathieu Desnoyers
Cc: Steven Rostedt, Gabriele Monaco, linux-trace-kernel, linux-kernel,
john.ogness, Will Deacon, linux-arm-kernel
On Tue, May 20, 2025 at 03:15:01PM +0100, Catalin Marinas wrote:
> On Tue, May 20, 2025 at 02:25:48PM +0200, Nam Cao wrote:
> > On Mon, May 19, 2025 at 03:49:29PM +0100, Catalin Marinas wrote:
> > > On Mon, May 12, 2025 at 12:51:00PM +0200, Nam Cao wrote:
> > > > diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c
> > > > index ec0a337891dd..55094030e377 100644
> > > > --- a/arch/arm64/mm/fault.c
> > > > +++ b/arch/arm64/mm/fault.c
> > > > @@ -44,6 +44,9 @@
> > > > #include <asm/tlbflush.h>
> > > > #include <asm/traps.h>
> > > >
> > > > +#define CREATE_TRACE_POINTS
> > > > +#include <trace/events/exceptions.h>
> > > > +
> > > > struct fault_info {
> > > > int (*fn)(unsigned long far, unsigned long esr,
> > > > struct pt_regs *regs);
> > > > @@ -559,6 +562,11 @@ static int __kprobes do_page_fault(unsigned long far, unsigned long esr,
> > > > if (kprobe_page_fault(regs, esr))
> > > > return 0;
> > > >
> > > > + if (user_mode(regs))
> > > > + trace_page_fault_user(addr, regs, esr);
> > > > + else
> > > > + trace_page_fault_kernel(addr, regs, esr);
> > >
> > > What are the semantics for these tracepoints? When are they supposed to
> > > be called? In the RV context context I guess you only care about the
> > > benign, recoverable faults that would affect timing. These tracepoints
> > > were generalised from the x86 code but I don't know enough about it to
> > > tell when they would be invoked.
> > >
> > > For arm64, we also have the do_translation_fault() path for example that
> > > may or may not need to log such trace events.
> >
> > These tracepoints are invoked for x86 page fault exceptions. Are arm64's
> > translation faults considered equivalent to x86 page faults?
>
> Probably. We route permission or access flag faults via do_page_fault()
> directly while missing page table entries via do_translation_fault().
> The latter end up in do_page_fault() only if the faulting address is in
> the user address range.
>
> My point was that we may not always invoke the trace callbacks if, for
> example, the user tries to access the kernel space (and results in a
> SIGSEGV). While that's fine for RV, I wanted to know what is expected of
> these trace points in general. Do we need to log such SIGSEGV-generating
> events? We do log them if there's a permission fault.
I'm not sure. Digging into history, these tracepoints were added for LTTng.
So maybe LTTng's developer could answer this.
Added to the conversation: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Can you please give some insight to the above question?
Best regards,
Nam
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v8 00/22] RV: Linear temporal logic monitors for RT application
2025-05-12 10:50 [PATCH v8 00/22] RV: Linear temporal logic monitors for RT application Nam Cao
2025-05-12 10:51 ` [PATCH v8 17/22] arm64: mm: Add page fault trace points Nam Cao
2025-05-16 8:21 ` [PATCH v8 00/22] RV: Linear temporal logic monitors for RT application Ingo Molnar
@ 2025-08-10 21:12 ` patchwork-bot+linux-riscv
2 siblings, 0 replies; 11+ messages in thread
From: patchwork-bot+linux-riscv @ 2025-08-10 21:12 UTC (permalink / raw)
To: Nam Cao
Cc: linux-riscv, rostedt, gmonaco, linux-trace-kernel, linux-kernel,
john.ogness, pmladek, senozhatsky, mingo, tglx, bp, dave.hansen,
x86, hpa, luto, peterz, catalin.marinas, linux-arm-kernel,
paul.walmsley, palmer, aou, alex
Hello:
This patch was applied to riscv/linux.git (fixes)
by Steven Rostedt (Google) <rostedt@goodmis.org>:
On Mon, 12 May 2025 12:50:43 +0200 you wrote:
> Real-time applications may have design flaws causing them to have
> unexpected latency. For example, the applications may raise page faults, or
> may be blocked trying to take a mutex without priority inheritance.
>
> However, while attempting to implement DA monitors for these real-time
> rules, deterministic automaton is found to be inappropriate as the
> specification language. The automaton is complicated, hard to understand,
> and error-prone.
>
> [...]
Here is the summary with links:
- [v8,18/22] riscv: mm: Add page fault trace points
https://git.kernel.org/riscv/c/a37c71ca412d
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2025-08-10 21:41 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-12 10:50 [PATCH v8 00/22] RV: Linear temporal logic monitors for RT application Nam Cao
2025-05-12 10:51 ` [PATCH v8 17/22] arm64: mm: Add page fault trace points Nam Cao
2025-05-19 14:49 ` Catalin Marinas
2025-05-20 12:25 ` Nam Cao
2025-05-20 14:15 ` Catalin Marinas
2025-05-21 9:03 ` Nam Cao
2025-05-16 8:21 ` [PATCH v8 00/22] RV: Linear temporal logic monitors for RT application Ingo Molnar
2025-05-16 8:55 ` Nam Cao
2025-05-16 9:07 ` Nam Cao
2025-05-16 9:12 ` Ingo Molnar
2025-08-10 21:12 ` patchwork-bot+linux-riscv
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).