From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754194AbdJIM1R (ORCPT ); Mon, 9 Oct 2017 08:27:17 -0400 Received: from mail-wm0-f42.google.com ([74.125.82.42]:48902 "EHLO mail-wm0-f42.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751598AbdJIM1O (ORCPT ); Mon, 9 Oct 2017 08:27:14 -0400 X-Google-Smtp-Source: AOwi7QB8vgCfwHQImJOk/woCVcL63jW77v/sjsGK1azLV4j0Jlj8AbtwUTZRCIrJjlMO8B+ZmifJbw== From: Martijn Coenen To: gregkh@linuxfoundation.org, john.stultz@linaro.org, tkjos@google.com, arve@android.com Cc: linux-kernel@vger.kernel.org, devel@driverdev.osuosl.org, maco@google.com, malchev@google.com, Martijn Coenen Subject: [PATCH] ANDROID: binder: call poll_wait() unconditionally. Date: Mon, 9 Oct 2017 14:26:56 +0200 Message-Id: <20171009122656.53189-1-maco@android.com> X-Mailer: git-send-email 2.14.2.920.gcf0c67979c-goog Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Because we're not guaranteed that subsequent calls to poll() will have a poll_table_struct parameter with _qproc set. When _qproc is not set, poll_wait() is a noop, and we won't be woken up correctly. Signed-off-by: Martijn Coenen --- drivers/android/binder.c | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/drivers/android/binder.c b/drivers/android/binder.c index d055b3f2a207..99f77fec1aaa 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c @@ -3623,12 +3623,6 @@ static void binder_stat_br(struct binder_proc *proc, } } -static int binder_has_thread_work(struct binder_thread *thread) -{ - return !binder_worklist_empty(thread->proc, &thread->todo) || - thread->looper_need_return; -} - static int binder_put_node_cmd(struct binder_proc *proc, struct binder_thread *thread, void __user **ptrp, @@ -4258,12 +4252,9 @@ static unsigned int binder_poll(struct file *filp, binder_inner_proc_unlock(thread->proc); - if (binder_has_work(thread, wait_for_proc_work)) - return POLLIN; - poll_wait(filp, &thread->wait, wait); - if (binder_has_thread_work(thread)) + if (binder_has_work(thread, wait_for_proc_work)) return POLLIN; return 0; -- 2.14.2.920.gcf0c67979c-goog