| 12345678910111213141516171819202122232425262728293031323334353637 |
- // SPDX-License-Identifier: GPL-2.0
- // Copyright (C) 2025 Google LLC.
- use crate::transaction::Transaction;
- use kernel::bindings::{rust_binder_transaction, task_struct};
- use kernel::ffi::{c_uint, c_ulong};
- use kernel::task::Task;
- use kernel::tracepoint::declare_trace;
- declare_trace! {
- unsafe fn rust_binder_ioctl(cmd: c_uint, arg: c_ulong);
- unsafe fn rust_binder_transaction(reply: bool, t: rust_binder_transaction, thread: *mut task_struct);
- }
- #[inline]
- fn raw_transaction(t: &Transaction) -> rust_binder_transaction {
- t as *const Transaction as rust_binder_transaction
- }
- #[inline]
- pub(crate) fn trace_ioctl(cmd: u32, arg: usize) {
- // SAFETY: Always safe to call.
- unsafe { rust_binder_ioctl(cmd, arg as c_ulong) }
- }
- #[inline]
- pub(crate) fn trace_transaction(reply: bool, t: &Transaction, thread: Option<&Task>) {
- let thread = match thread {
- Some(thread) => thread.as_ptr(),
- None => core::ptr::null_mut(),
- };
- // SAFETY: The raw transaction is valid for the duration of this call. The thread pointer is
- // valid or null.
- unsafe { rust_binder_transaction(reply, raw_transaction(t), thread) }
- }
|