From: Vincent Donnefort <vdonnefort@google.com>
To: rostedt@goodmis.org, mhiramat@kernel.org,
linux-trace-kernel@vger.kernel.org
Cc: mathieu.desnoyers@efficios.com, kernel-team@android.com,
linux-kernel@vger.kernel.org,
Vincent Donnefort <vdonnefort@google.com>
Subject: [PATCH 1/2] ring-buffer: Remove unused absolute timestamp mode
Date: Thu, 5 Nov 2026 20:28:13 +0000 [thread overview]
Message-ID: <20261105202814.1350312-2-vdonnefort@google.com> (raw)
In-Reply-To: <20261105202814.1350312-1-vdonnefort@google.com>
Since commit b94bc80df648 ("tracing: Use a no_filter_buffering_ref to
stop using the filter buffer") dropped the last user of
ring_buffer_set_time_stamp_abs(), there's been no one enabling absolute
timestamps on the ring buffer.
Drop the support to simplify the ring buffer code. Keep the read-only
tracefs timestamp_mode file to preserve the ABI.
Signed-off-by: Vincent Donnefort <vdonnefort@google.com>
---
Documentation/trace/ftrace.rst | 19 ++-------
include/linux/ring_buffer.h | 2 -
kernel/trace/ring_buffer.c | 77 ++++++++++------------------------
kernel/trace/trace.c | 10 +----
4 files changed, 26 insertions(+), 82 deletions(-)
diff --git a/Documentation/trace/ftrace.rst b/Documentation/trace/ftrace.rst
index 9423722848c6..88c0de3619be 100644
--- a/Documentation/trace/ftrace.rst
+++ b/Documentation/trace/ftrace.rst
@@ -712,27 +712,16 @@ of ftrace. Here is a list of some of the key files:
timestamp_mode:
- Certain tracers may change the timestamp mode used when
- logging trace events into the event buffer. Events with
- different modes can coexist within a buffer but the mode in
- effect when an event is logged determines which timestamp mode
- is used for that event. The default timestamp mode is
- 'delta'.
-
- Usual timestamp modes for tracing:
+ Shows the timestamp mode used when logging trace events into
+ the event buffer.
# cat timestamp_mode
- [delta] absolute
+ [delta]
The timestamp mode with the square brackets around it is the
one in effect.
- delta: Default timestamp mode - timestamp is a delta against
- a per-buffer timestamp.
-
- absolute: The timestamp is a full timestamp, not a delta
- against some other value. As such it takes up more
- space and is less efficient.
+ delta: Timestamp is a delta against a per-buffer timestamp.
hwlat_detector:
diff --git a/include/linux/ring_buffer.h b/include/linux/ring_buffer.h
index 649b2276b557..378d336effca 100644
--- a/include/linux/ring_buffer.h
+++ b/include/linux/ring_buffer.h
@@ -220,8 +220,6 @@ void ring_buffer_normalize_time_stamp(struct trace_buffer *buffer,
int cpu, u64 *ts);
void ring_buffer_set_clock(struct trace_buffer *buffer,
u64 (*clock)(void));
-void ring_buffer_set_time_stamp_abs(struct trace_buffer *buffer, bool abs);
-bool ring_buffer_time_stamp_abs(struct trace_buffer *buffer);
size_t ring_buffer_nr_dirty_pages(struct trace_buffer *buffer, int cpu);
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
index 1fd28a72e6ee..7852f36a0dc6 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -480,14 +480,12 @@ struct rb_event_info {
* Used for the add_timestamp
* NONE
* EXTEND - wants a time extend
- * ABSOLUTE - the buffer requests all events to have absolute time stamps
* FORCE - force a full time stamp.
*/
enum {
RB_ADD_STAMP_NONE = 0,
RB_ADD_STAMP_EXTEND = BIT(1),
- RB_ADD_STAMP_ABSOLUTE = BIT(2),
- RB_ADD_STAMP_FORCE = BIT(3)
+ RB_ADD_STAMP_FORCE = BIT(2)
};
/*
* Used for which event context the event is in.
@@ -595,7 +593,6 @@ struct trace_buffer {
u64 (*clock)(void);
struct rb_irq_work irq_work;
- bool time_stamp_abs;
unsigned long range_addr_start;
unsigned long range_addr_end;
@@ -3052,16 +3049,6 @@ void ring_buffer_set_clock(struct trace_buffer *buffer,
buffer->clock = clock;
}
-void ring_buffer_set_time_stamp_abs(struct trace_buffer *buffer, bool abs)
-{
- buffer->time_stamp_abs = abs;
-}
-
-bool ring_buffer_time_stamp_abs(struct trace_buffer *buffer)
-{
- return buffer->time_stamp_abs;
-}
-
static inline unsigned long rb_page_entries(struct buffer_page *bpage)
{
return local_read(&bpage->entries) & RB_WRITE_MASK;
@@ -4070,8 +4057,7 @@ static void rb_add_timestamp(struct ring_buffer_per_cpu *cpu_buffer,
u64 *delta,
unsigned int *length)
{
- bool abs = info->add_timestamp &
- (RB_ADD_STAMP_FORCE | RB_ADD_STAMP_ABSOLUTE);
+ bool abs = info->add_timestamp & RB_ADD_STAMP_FORCE;
if (unlikely(info->delta > (1ULL << 59))) {
/*
@@ -4752,8 +4738,7 @@ static void check_buffer(struct ring_buffer_per_cpu *cpu_buffer,
if (tail == CHECK_FULL_PAGE) {
full = true;
tail = rb_data_page_commit(dpage);
- } else if (info->add_timestamp &
- (RB_ADD_STAMP_FORCE | RB_ADD_STAMP_ABSOLUTE)) {
+ } else if (info->add_timestamp & RB_ADD_STAMP_FORCE) {
/* Ignore events with absolute time stamps */
return;
}
@@ -4818,26 +4803,22 @@ __rb_reserve_next(struct ring_buffer_per_cpu *cpu_buffer,
barrier();
info->ts = rb_time_stamp(cpu_buffer->buffer);
- if ((info->add_timestamp & RB_ADD_STAMP_ABSOLUTE)) {
- info->delta = info->ts;
+ /*
+ * If interrupting an event time update, we may need an
+ * absolute timestamp.
+ * Don't bother if this is the start of a new page (w == 0).
+ */
+ if (!w) {
+ /* Use the sub-buffer timestamp */
+ info->delta = 0;
+ } else if (unlikely(info->before != info->after)) {
+ info->add_timestamp |= RB_ADD_STAMP_FORCE | RB_ADD_STAMP_EXTEND;
+ info->length += RB_LEN_TIME_EXTEND;
} else {
- /*
- * If interrupting an event time update, we may need an
- * absolute timestamp.
- * Don't bother if this is the start of a new page (w == 0).
- */
- if (!w) {
- /* Use the sub-buffer timestamp */
- info->delta = 0;
- } else if (unlikely(info->before != info->after)) {
- info->add_timestamp |= RB_ADD_STAMP_FORCE | RB_ADD_STAMP_EXTEND;
+ info->delta = info->ts - info->after;
+ if (unlikely(test_time_stamp(info->delta))) {
+ info->add_timestamp |= RB_ADD_STAMP_EXTEND;
info->length += RB_LEN_TIME_EXTEND;
- } else {
- info->delta = info->ts - info->after;
- if (unlikely(test_time_stamp(info->delta))) {
- info->add_timestamp |= RB_ADD_STAMP_EXTEND;
- info->length += RB_LEN_TIME_EXTEND;
- }
}
}
@@ -4865,8 +4846,7 @@ __rb_reserve_next(struct ring_buffer_per_cpu *cpu_buffer,
* will be different and then next event will just be forced
* to use an absolute timestamp.
*/
- if (likely(!(info->add_timestamp &
- (RB_ADD_STAMP_FORCE | RB_ADD_STAMP_ABSOLUTE))))
+ if (likely(!(info->add_timestamp & RB_ADD_STAMP_FORCE)))
/* This did not interrupt any time update */
info->delta = info->ts - info->after;
else
@@ -4919,8 +4899,7 @@ __rb_reserve_next(struct ring_buffer_per_cpu *cpu_buffer,
* If this is the first commit on the page, then it has the same
* timestamp as the page itself.
*/
- if (unlikely(!tail && !(info->add_timestamp &
- (RB_ADD_STAMP_FORCE | RB_ADD_STAMP_ABSOLUTE))))
+ if (unlikely(!tail && !(info->add_timestamp & RB_ADD_STAMP_FORCE)))
info->delta = 0;
/* We reserved something on the buffer */
@@ -4951,7 +4930,6 @@ rb_reserve_next_event(struct trace_buffer *buffer,
struct ring_buffer_event *event;
struct rb_event_info info;
int nr_loops = 0;
- int add_ts_default;
/*
* ring buffer does cmpxchg as well as atomic64 operations
@@ -4984,17 +4962,8 @@ rb_reserve_next_event(struct trace_buffer *buffer,
info.length = rb_calculate_event_length(length);
- if (ring_buffer_time_stamp_abs(cpu_buffer->buffer)) {
- add_ts_default = RB_ADD_STAMP_ABSOLUTE;
- info.length += RB_LEN_TIME_EXTEND;
- if (info.length > rb_subbuf_max_data_size(cpu_buffer->buffer))
- goto out_fail;
- } else {
- add_ts_default = RB_ADD_STAMP_NONE;
- }
-
again:
- info.add_timestamp = add_ts_default;
+ info.add_timestamp = RB_ADD_STAMP_NONE;
info.delta = 0;
/*
@@ -5012,7 +4981,7 @@ rb_reserve_next_event(struct trace_buffer *buffer,
event = __rb_reserve_next(cpu_buffer, &info);
if (unlikely(PTR_ERR(event) == -EAGAIN)) {
- if (info.add_timestamp & (RB_ADD_STAMP_FORCE | RB_ADD_STAMP_EXTEND))
+ if (info.add_timestamp)
info.length -= RB_LEN_TIME_EXTEND;
goto again;
}
@@ -6574,10 +6543,6 @@ EXPORT_SYMBOL_GPL(ring_buffer_capacity);
*/
unsigned long ring_buffer_max_event_size(struct trace_buffer *buffer)
{
- /* If abs timestamp is requested, events have a timestamp too */
- if (ring_buffer_time_stamp_abs(buffer))
- return rb_subbuf_max_data_size(buffer) - RB_LEN_TIME_EXTEND;
-
return rb_subbuf_max_data_size(buffer);
}
EXPORT_SYMBOL_GPL(ring_buffer_max_event_size);
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index e8c4efa8107b..760c872fc452 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -4220,7 +4220,6 @@ static const char readme_msg[] =
#endif
"\n timestamp_mode\t- view the mode used to timestamp events\n"
" delta: Delta difference against a buffer-wide timestamp\n"
- " absolute: Absolute (standalone) timestamp\n"
"\n trace_marker\t\t- Writes into this file writes into the kernel buffer\n"
"\n trace_marker_raw\t\t- Writes into this file writes binary data into the kernel buffer\n"
" tracing_cpumask\t- Limit which CPUs to trace\n"
@@ -6567,14 +6566,7 @@ static int tracing_clock_open(struct inode *inode, struct file *file)
static int tracing_time_stamp_mode_show(struct seq_file *m, void *v)
{
- struct trace_array *tr = m->private;
-
- guard(mutex)(&trace_types_lock);
-
- if (ring_buffer_time_stamp_abs(tr->array_buffer.buffer))
- seq_puts(m, "delta [absolute]\n");
- else
- seq_puts(m, "[delta] absolute\n");
+ seq_puts(m, "[delta]\n");
return 0;
}
--
2.56.0.455.g6c5a503b38-goog
next prev parent reply other threads:[~2026-11-05 20:28 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-05 20:28 [PATCH 0/2] " Vincent Donnefort
2026-11-05 20:28 ` Vincent Donnefort [this message]
2026-11-05 20:28 ` [PATCH 2/2] tracing/histograms: Drop stale absolute timestamp note from docs Vincent Donnefort
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261105202814.1350312-2-vdonnefort@google.com \
--to=vdonnefort@google.com \
--cc=kernel-team@android.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mhiramat@kernel.org \
--cc=rostedt@goodmis.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®