From e0fce87ac342cc89c2286044a02ba5cb723055b6 Mon Sep 17 00:00:00 2001 From: Riley Andrews <riandrews@google.com> Date: Tue, 1 Sep 2015 12:42:07 -0700 Subject: [PATCH] android: binder: Use wake up hint for synchronous transactions. Use wake_up_interruptible_sync() to hint to the scheduler binder transactions are synchronous wakeups. Disable premption while waking to avoid ping-ponging on the binder lock. Change-Id: Ic406a232d0873662f80148e37acefe5243d912a0 --- drivers/staging/android/binder.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/staging/android/binder.c b/drivers/staging/android/binder.c index 0872499406cf..d3243164ea63 100644 --- a/drivers/staging/android/binder.c +++ b/drivers/staging/android/binder.c @@ -1687,8 +1687,16 @@ static void binder_transaction(struct binder_proc *proc, list_add_tail(&t->work.entry, target_list); tcomplete->type = BINDER_WORK_TRANSACTION_COMPLETE; list_add_tail(&tcomplete->entry, &thread->todo); - if (target_wait) - wake_up_interruptible(target_wait); + if (target_wait) { + if (reply || !(t->flags & TF_ONE_WAY)) { + preempt_disable(); + wake_up_interruptible_sync(target_wait); + sched_preempt_enable_no_resched(); + } + else { + wake_up_interruptible(target_wait); + } + } return; err_get_unused_fd_failed: -- GitLab