tracing: Enforce the persistent ring buffer to be page aligned
authorSteven Rostedt <rostedt@goodmis.org>
Wed, 2 Apr 2025 14:49:04 +0000 (10:49 -0400)
committerSteven Rostedt (Google) <rostedt@goodmis.org>
Wed, 2 Apr 2025 15:02:26 +0000 (11:02 -0400)
Enforce that the address and the size of the memory used by the persistent
ring buffer is page aligned. Also update the documentation to reflect this
requirement.

Link: https://lore.kernel.org/all/CAHk-=whUOfVucfJRt7E0AH+GV41ELmS4wJqxHDnui6Giddfkzw@mail.gmail.com/
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Vincent Donnefort <vdonnefort@google.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Mike Rapoport <rppt@kernel.org>
Cc: Jann Horn <jannh@google.com>
Link: https://lore.kernel.org/20250402144953.412882844@goodmis.org
Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
Documentation/admin-guide/kernel-parameters.txt
Documentation/trace/debugging.rst
kernel/trace/trace.c

index fb8752b..7186164 100644 (file)
                        This is just one of many ways that can clear memory. Make sure your system
                        keeps the content of memory across reboots before relying on this option.
 
+                       NB: Both the mapped address and size must be page aligned for the architecture.
+
                        See also Documentation/trace/debugging.rst
 
 
index 54fb162..d54bc50 100644 (file)
@@ -136,6 +136,8 @@ kernel, so only the same kernel is guaranteed to work if the mapping is
 preserved. Switching to a different kernel version may find a different
 layout and mark the buffer as invalid.
 
+NB: Both the mapped address and size must be page aligned for the architecture.
+
 Using trace_printk() in the boot instance
 -----------------------------------------
 By default, the content of trace_printk() goes into the top level tracing
index 14c38fc..9612998 100644 (file)
@@ -10774,6 +10774,16 @@ __init static void enable_instances(void)
                }
 
                if (start) {
+                       /* Start and size must be page aligned */
+                       if (start & ~PAGE_MASK) {
+                               pr_warn("Tracing: mapping start addr %pa is not page aligned\n", &start);
+                               continue;
+                       }
+                       if (size & ~PAGE_MASK) {
+                               pr_warn("Tracing: mapping size %pa is not page aligned\n", &size);
+                               continue;
+                       }
+
                        addr = map_pages(start, size);
                        if (addr) {
                                pr_info("Tracing: mapped boot instance %s at physical memory %pa of size 0x%lx\n",