38 lines
1.1 KiB
Rust
38 lines
1.1 KiB
Rust
// 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) }
|
|
}
|