[GIT PULL] ring-buffer: Fix for 6.12

Steven Rostedt posted 1 patch 1 year, 2 months ago
kernel/trace/ring_buffer.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
[GIT PULL] ring-buffer: Fix for 6.12
Posted by Steven Rostedt 1 year, 2 months ago


Linus,

ring-buffer: Fix for 6.12

- Do not have boot-mapped buffers use CPU hotplug callbacks

  When a ring buffer is mapped to memory assigned at boot, it
  also splits it up evenly between the possible CPUs. But the
  allocation code still attached a CPU notifier callback to this
  ring buffer. When a CPU is added, the callback will happen and
  another per-cpu buffer is created for the ring buffer. But for
  boot mapped buffers, there is no room to add another one (as
  they were all created already). The result of calling the CPU
  hotplug notifier on a boot mapped ring buffer is unpredictable
  and could lead to a system crash. If the ring buffer is boot mapped
  simply do not attach the CPU notifier to it.


Please pull the latest trace-ringbuffer-v6.12-rc2 tree, which can be found at:


  git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace.git
trace-ringbuffer-v6.12-rc2

Tag SHA1: 55a5da35c9d43dd15b85d53eeac414b92d70518d
Head SHA1: 912da2c384d510ce40c5af9c3adc316afa4ec547


Steven Rostedt (1):
      ring-buffer: Do not have boot mapped buffers hook to CPU hotplug

----
 kernel/trace/ring_buffer.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)
---------------------------
commit 912da2c384d510ce40c5af9c3adc316afa4ec547
Author: Steven Rostedt <rostedt@goodmis.org>
Date:   Tue Oct 8 14:32:42 2024 -0400

    ring-buffer: Do not have boot mapped buffers hook to CPU hotplug
    
    The boot mapped ring buffer has its buffer mapped at a fixed location
    found at boot up. It is not dynamic. It cannot grow or be expanded when
    new CPUs come online.
    
    Do not hook fixed memory mapped ring buffers to the CPU hotplug callback,
    otherwise it can cause a crash when it tries to add the buffer to the
    memory that is already fully occupied.
    
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Link: https://lore.kernel.org/20241008143242.25e20801@gandalf.local.home
    Fixes: be68d63a139bd ("ring-buffer: Add ring_buffer_alloc_range()")
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>

diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
index 77dc0b25140e..fb04445f92c3 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -2337,9 +2337,12 @@ static struct trace_buffer *alloc_buffer(unsigned long size, unsigned flags,
 	if (!buffer->buffers[cpu])
 		goto fail_free_buffers;
 
-	ret = cpuhp_state_add_instance(CPUHP_TRACE_RB_PREPARE, &buffer->node);
-	if (ret < 0)
-		goto fail_free_buffers;
+	/* If already mapped, do not hook to CPU hotplug */
+	if (!start) {
+		ret = cpuhp_state_add_instance(CPUHP_TRACE_RB_PREPARE, &buffer->node);
+		if (ret < 0)
+			goto fail_free_buffers;
+	}
 
 	mutex_init(&buffer->mutex);
Re: [GIT PULL] ring-buffer: Fix for 6.12
Posted by pr-tracker-bot@kernel.org 1 year, 2 months ago
The pull request you sent on Thu, 10 Oct 2024 11:26:36 -0400:

> git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace.git trace-ringbuffer-v6.12-rc2

has been merged into torvalds/linux.git:
https://git.kernel.org/torvalds/c/0edab8d1324dfeee52aad763236c9015e413c4c2

Thank you!

-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/prtracker.html