Re: [PATCH v2 1/7] rust_binder: Add dynamic debug logging mask

From: Gary Guo

Date: Fri Jul 10 2026 - 16:32:05 EST


On Fri Jul 10, 2026 at 8:47 PM BST, Carlos Llamas wrote:
> On Fri, Jul 10, 2026 at 02:32:52PM +0000, Jahnavi MN via B4 Relay wrote:
>> From: Jahnavi MN <jahnavimn@xxxxxxxxxx>
>>
>> Implement a dynamic debug logging mask (`debug_mask`) for the
>> `rust_binder` module to allow dynamic runtime configuration of log
>> levels. This enables parity with the legacy C driver's debug mask.
>>
>> Since the Rust `module!` macro in the current kernel build does not yet
>> support declaring module parameters directly in Rust, we define the
>> `debug_mask` variable in a C companion file to expose it to the kernel
>> runtime and import it using FFI with volatile reads.
>>
>> To verify the setup, instrument process lifecycle events (open, flush,
>> and release) in `process.rs` under the new `BINDER_DEBUG_OPEN_CLOSE`
>> logging mask. These entry-point events are chosen for initial validation
>> because they represent the start of the Binder lifecycle and occur
>> at low frequency, allowing simple runtime verification of the dynamic
>> toggle without log noise.
>>
>> Signed-off-by: Jahnavi MN <jahnavimn@xxxxxxxxxx>
>> ---
>> drivers/android/binder/debug.rs | 80 ++++++++++++++++++++++++++++++
>> drivers/android/binder/process.rs | 7 ++-
>> drivers/android/binder/rust_binder_main.rs | 2 +
>> drivers/android/binder/rust_binderfs.c | 3 ++
>> rust/kernel/task.rs | 7 +++
>> 5 files changed, 98 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/android/binder/debug.rs b/drivers/android/binder/debug.rs
>> new file mode 100644
>> index 000000000000..da48bce3df54
>> --- /dev/null
>> +++ b/drivers/android/binder/debug.rs
>> @@ -0,0 +1,80 @@
>> +// SPDX-License-Identifier: GPL-2.0
>> +// Copyright (C) 2026 Google LLC.
>> +
>> +//! Binder debugging helpers.
>> +
>> +#![allow(dead_code)]
>> +
>> +kernel::impl_flags!(
>> + /// Represents multiple debug mask flags.
>> + #[derive(Debug, Clone, Default, Copy, PartialEq, Eq)]
>> + pub struct DebugMasks(u32);
>
> Where is this being used? I can't find it on subsequent patches.
> Maybe leftover from previous implementation?

impl_flags macro requires a type for a single flag and a type for flag masks.

>
>> +
>> + /// Represents a single debug mask category.
>> + #[derive(Debug, Clone, Copy, PartialEq, Eq)]
>> + pub enum DebugMask {
>> + UserError = 1 << 0,
>> + FailedTransaction = 1 << 1,
>> + DeadTransaction = 1 << 2,
>> + OpenClose = 1 << 3,
>> + DeadBinder = 1 << 4,
>> + DeathNotification = 1 << 5,
>> + ReadWrite = 1 << 6,
>> + UserRefs = 1 << 7,
>> + Threads = 1 << 8,
>> + Transaction = 1 << 9,
>> + TransactionComplete = 1 << 10,
>> + FreeBuffer = 1 << 11,
>> + InternalRefs = 1 << 12,
>> + PriorityCap = 1 << 13,
>> + Spinlocks = 1 << 14,
>> + }
>> +);
>> diff --git a/drivers/android/binder/rust_binder_main.rs b/drivers/android/binder/rust_binder_main.rs
>> index df47aba05133..995e6131bb77 100644
>> --- a/drivers/android/binder/rust_binder_main.rs
>> +++ b/drivers/android/binder/rust_binder_main.rs
>> @@ -31,6 +31,8 @@
>> mod context;
>> mod deferred_close;
>> mod defs;
>> +#[macro_use]
>> +mod debug;
>> mod error;
>> mod netlink;
>> mod node;
>> diff --git a/drivers/android/binder/rust_binderfs.c b/drivers/android/binder/rust_binderfs.c
>> index ade1c4d92499..fa8b38465550 100644
>> --- a/drivers/android/binder/rust_binderfs.c
>> +++ b/drivers/android/binder/rust_binderfs.c
>> @@ -51,6 +51,9 @@ DEFINE_SHOW_ATTRIBUTE(rust_binder_proc);
>> char *rust_binder_devices_param = CONFIG_ANDROID_BINDER_DEVICES;
>> module_param_named(rust_devices, rust_binder_devices_param, charp, 0444);
>>
>> +u32 rust_binder_debug_mask = 7;
>
> hmm, I'm not sure about this magic number. Do you think we can
> initialize on the rust end at init()? Or at least a comment about what
> flags we are setting as default here?

It doesn't even need that, just a

static rust_binder_debug_mask: Atomic<u32> = Atomic::new((FLAG_A as u32) | (FLAG_B as u32) | ...);

and a `extern u32` on C side should do.

would do. Unfortunately this has to be integer bit-or with casts (and cannot use
DebugMasks due to lack of const trait impl).

Best,
Gary