From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751791AbdHaIIq (ORCPT ); Thu, 31 Aug 2017 04:08:46 -0400 Received: from mail-wm0-f52.google.com ([74.125.82.52]:38068 "EHLO mail-wm0-f52.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751025AbdHaIE5 (ORCPT ); Thu, 31 Aug 2017 04:04:57 -0400 From: Martijn Coenen To: gregkh@linuxfoundation.org, john.stultz@linaro.org, tkjos@google.com, arve@android.com, amit.pundir@linaro.org, tglx@linutronix.de Cc: peterz@infradead.org, hch@lst.de, linux-kernel@vger.kernel.org, devel@driverdev.osuosl.org, maco@google.com, malchev@google.com, ccross@android.com, Martijn Coenen Subject: [PATCH v2 10/13] ANDROID: binder: call poll_wait() unconditionally. Date: Thu, 31 Aug 2017 10:04:27 +0200 Message-Id: <20170831080430.118765-11-maco@android.com> X-Mailer: git-send-email 2.14.1.581.gf28d330327-goog In-Reply-To: <20170831080430.118765-1-maco@android.com> References: <20170831080430.118765-1-maco@android.com> 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 7da9c42583f7..68780b8e856c 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c @@ -3850,12 +3850,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, @@ -4486,12 +4480,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.1.581.gf28d330327-goog