From nobody Tue Dec 16 20:32:28 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6A8B23D0AE; Tue, 19 Dec 2023 22:37:03 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id BDD11C433C8; Tue, 19 Dec 2023 22:37:01 +0000 (UTC) Date: Tue, 19 Dec 2023 17:38:00 -0500 From: Steven Rostedt To: linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton , Tzvetomir Stoyanov , Vincent Donnefort , Kent Overstreet Subject: [PATCH v5 16/15] ring-buffer: Use subbuf_order for buffer page masking Message-ID: <20231219173800.66eefb7a@gandalf.local.home> In-Reply-To: <20231219185414.474197117@goodmis.org> References: <20231219185414.474197117@goodmis.org> X-Mailer: Claws Mail 3.19.1 (GTK+ 2.24.33; x86_64-pc-linux-gnu) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Steven Rostedt (Google)" The comparisons to PAGE_SIZE were all converted to use the buffer->subbuf_order, but the use of PAGE_MASK was missed. Convert all the PAGE_MASK usages over to: (PAGE_SIZE << cpu_buffer->buffer->subbuf_order) - 1 Fixes: TBD ("ring-buffer: Page size per ring buffer") Signed-off-by: Steven Rostedt (Google) --- kernel/trace/ring_buffer.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index 7ee6779bf292..173d2595ce2d 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c @@ -2269,11 +2269,13 @@ rb_commit_index(struct ring_buffer_per_cpu *cpu_buf= fer) } =20 static __always_inline unsigned -rb_event_index(struct ring_buffer_event *event) +rb_event_index(struct ring_buffer_per_cpu *cpu_buffer, struct ring_buffer_= event *event) { unsigned long addr =3D (unsigned long)event; =20 - return (addr & ~PAGE_MASK) - BUF_PAGE_HDR_SIZE; + addr &=3D (PAGE_SIZE << cpu_buffer->buffer->subbuf_order) - 1; + + return addr - BUF_PAGE_HDR_SIZE; } =20 static void rb_inc_iter(struct ring_buffer_iter *iter) @@ -2646,7 +2648,8 @@ rb_move_tail(struct ring_buffer_per_cpu *cpu_buffer, =20 /* Slow path */ static struct ring_buffer_event * -rb_add_time_stamp(struct ring_buffer_event *event, u64 delta, bool abs) +rb_add_time_stamp(struct ring_buffer_per_cpu *cpu_buffer, + struct ring_buffer_event *event, u64 delta, bool abs) { if (abs) event->type_len =3D RINGBUF_TYPE_TIME_STAMP; @@ -2654,7 +2657,7 @@ rb_add_time_stamp(struct ring_buffer_event *event, u6= 4 delta, bool abs) event->type_len =3D RINGBUF_TYPE_TIME_EXTEND; =20 /* Not the first event on the page, or not delta? */ - if (abs || rb_event_index(event)) { + if (abs || rb_event_index(cpu_buffer, event)) { event->time_delta =3D delta & TS_MASK; event->array[0] =3D delta >> TS_SHIFT; } else { @@ -2728,7 +2731,7 @@ static void rb_add_timestamp(struct ring_buffer_per_c= pu *cpu_buffer, if (!abs) info->delta =3D 0; } - *event =3D rb_add_time_stamp(*event, info->delta, abs); + *event =3D rb_add_time_stamp(cpu_buffer, *event, info->delta, abs); *length -=3D RB_LEN_TIME_EXTEND; *delta =3D 0; } @@ -2812,10 +2815,10 @@ rb_try_to_discard(struct ring_buffer_per_cpu *cpu_b= uffer, struct buffer_page *bpage; unsigned long addr; =20 - new_index =3D rb_event_index(event); + new_index =3D rb_event_index(cpu_buffer, event); old_index =3D new_index + rb_event_ts_length(event); addr =3D (unsigned long)event; - addr &=3D PAGE_MASK; + addr &=3D ~((PAGE_SIZE << cpu_buffer->buffer->subbuf_order) - 1); =20 bpage =3D READ_ONCE(cpu_buffer->tail_page); =20 @@ -3726,7 +3729,7 @@ rb_decrement_entry(struct ring_buffer_per_cpu *cpu_bu= ffer, struct buffer_page *bpage =3D cpu_buffer->commit_page; struct buffer_page *start; =20 - addr &=3D PAGE_MASK; + addr &=3D ~((PAGE_SIZE << cpu_buffer->buffer->subbuf_order) - 1); =20 /* Do the likely case first */ if (likely(bpage->page =3D=3D (void *)addr)) { --=20 2.42.0