summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorMohamad Alsadhan <mo@sdhn.cc>2026-03-17 17:49:45 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2026-04-01 12:18:22 +0200
commitcaf3719f335dac62e5626baadb66836907176337 (patch)
treeb54411921099598910c0188f1e7d4587422595aa /drivers
parent2335167a614eceb506453dc27cc99a186b6eca76 (diff)
rust_binder: add `transaction_received` tracepoint
Add Rust Binder `transaction_received` tracepoint decalaration and wire in the corresponding trace call when a transaction work item is accepted for execution. Signed-off-by: Mohamad Alsadhan <mo@sdhn.cc> Link: https://patch.msgid.link/20260317-rust-binder-trace-v3-4-6fae4fbcf637@sdhn.cc Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/android/binder/rust_binder_events.h12
-rw-r--r--drivers/android/binder/trace.rs7
-rw-r--r--drivers/android/binder/transaction.rs2
3 files changed, 21 insertions, 0 deletions
diff --git a/drivers/android/binder/rust_binder_events.h b/drivers/android/binder/rust_binder_events.h
index 62b587c7c494..8a0b72bf0255 100644
--- a/drivers/android/binder/rust_binder_events.h
+++ b/drivers/android/binder/rust_binder_events.h
@@ -99,6 +99,18 @@ TRACE_EVENT(binder_transaction,
__entry->reply, __entry->flags, __entry->code)
);
+TRACE_EVENT(binder_transaction_received,
+ TP_PROTO(rust_binder_transaction t),
+ TP_ARGS(t),
+ TP_STRUCT__entry(
+ __field(int, debug_id)
+ ),
+ TP_fast_assign(
+ __entry->debug_id = rust_binder_transaction_debug_id(t);
+ ),
+ TP_printk("transaction=%d", __entry->debug_id)
+);
+
#endif /* _RUST_BINDER_TRACE_H */
/* This part must be outside protection */
diff --git a/drivers/android/binder/trace.rs b/drivers/android/binder/trace.rs
index 1f62b2276740..d96afdb79c65 100644
--- a/drivers/android/binder/trace.rs
+++ b/drivers/android/binder/trace.rs
@@ -17,6 +17,7 @@ declare_trace! {
unsafe fn binder_write_done(ret: c_int);
unsafe fn binder_wait_for_work(proc_work: bool, transaction_stack: bool, thread_todo: bool);
unsafe fn binder_transaction(reply: bool, t: rust_binder_transaction, thread: *mut task_struct);
+ unsafe fn binder_transaction_received(t: rust_binder_transaction);
}
#[inline]
@@ -70,3 +71,9 @@ pub(crate) fn trace_transaction(reply: bool, t: &Transaction, thread: Option<&Ta
// valid or null.
unsafe { binder_transaction(reply, raw_transaction(t), thread) }
}
+
+#[inline]
+pub(crate) fn trace_transaction_received(t: &Transaction) {
+ // SAFETY: The raw transaction is valid for the duration of this call.
+ unsafe { binder_transaction_received(raw_transaction(t)) }
+}
diff --git a/drivers/android/binder/transaction.rs b/drivers/android/binder/transaction.rs
index 5dff3d655c4d..47d5e4d88b07 100644
--- a/drivers/android/binder/transaction.rs
+++ b/drivers/android/binder/transaction.rs
@@ -451,6 +451,8 @@ impl DeliverToRead for Transaction {
self.drop_outstanding_txn();
+ crate::trace::trace_transaction_received(&self);
+
// When this is not a reply and not a oneway transaction, update `current_transaction`. If
// it's a reply, `current_transaction` has already been updated appropriately.
if self.target_node.is_some() && tr_sec.transaction_data.flags & TF_ONE_WAY == 0 {