Re: [PATCH v2 6/6] rust_binder: update Process::node_refs to use SpinLock

From: Matthew Maurer

Date: Thu Jun 11 2026 - 19:37:33 EST


On Tue, Jun 9, 2026 at 2:45 AM Alice Ryhl <aliceryhl@xxxxxxxxxx> wrote:
>
> Unfortunately the current use of a mutex for this lock leads to priority
> inversion. Traces have been observed where a process is trying to obtain
> this mutex for 22ms, but it's unable to do so because the thread holding
> the lock is scheduled out. Since this occurred on a UI thread, that is
> an extremely long delay.
>
> Code paths that might sleep under this lock have already been updated in
> patches leading up to this one.
>
> Signed-off-by: Alice Ryhl <aliceryhl@xxxxxxxxxx>
> ---
> drivers/android/binder/process.rs | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/android/binder/process.rs b/drivers/android/binder/process.rs
> index 268d78f8cfb3..82c34a93660e 100644
> --- a/drivers/android/binder/process.rs
> +++ b/drivers/android/binder/process.rs
> @@ -30,7 +30,7 @@
> sync::{
> aref::ARef,
> lock::{spinlock::SpinLockBackend, Guard},
> - Arc, ArcBorrow, CondVar, CondVarTimeoutResult, Mutex, SpinLock, UniqueArc,
> + Arc, ArcBorrow, CondVar, CondVarTimeoutResult, SpinLock, UniqueArc,
> },
> task::Task,
> uaccess::{UserSlice, UserSliceReader},
> @@ -455,7 +455,7 @@ pub(crate) struct Process {
> // Node references are in a different lock to avoid recursive acquisition when
> // incrementing/decrementing a node in another process.
> #[pin]
> - node_refs: Mutex<ProcessNodeRefs>,
> + node_refs: SpinLock<ProcessNodeRefs>,
>
> // Work node for deferred work item.
> #[pin]
> @@ -510,7 +510,7 @@ fn new(ctx: Arc<Context>, cred: ARef<Credential>) -> Result<Arc<Self>> {
> cred,
> inner <- kernel::new_spinlock!(ProcessInner::new(), "Process::inner"),
> pages <- ShrinkablePageRange::new(&super::BINDER_SHRINKER),
> - node_refs <- kernel::new_mutex!(ProcessNodeRefs::new(), "Process::node_refs"),
> + node_refs <- kernel::new_spinlock!(ProcessNodeRefs::new(), "Process::node_refs"),
> freeze_wait <- kernel::new_condvar!("Process::freeze_wait"),
> task: current.group_leader().into(),
> defer_work <- kernel::new_work!("Process::defer_work"),
>
> --
> 2.54.0.1064.gd145956f57-goog
>
>

Reviewed-by: Matthew Maurer <mmaurer@xxxxxxxxxx>