Skip to contentSkip to conversation

ANDROID: binder: call poll_wait() unconditionally.

PATCH In review Martijn Coenen 2 participants 3 messages Oct 9, 2017 Android drivers

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 ANDROID: binder: call poll_wait() unconditionally.

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.

---
 drivers/android/binder.c | 11 +----------
 1 file changed, 1 insertion(+), 10 deletions(-)
drivers/android/binder.c +1 -10
index d055b3f2a207..99f77fec1aaa 100644
@@ -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;
Signature · 1 line
2.14.2.920.gcf0c67979c-goog
maintainer
#1 lore raw
Quoted 9 lines · Martijn Coenen

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.

---
 drivers/android/binder.c | 11 +----------
 1 file changed, 1 insertion(+), 10 deletions(-)

Does this need to get into 4.14-final, or is 4.15-rc1 ok? I'm a bit lost as to which patches I applied to what tree...

thanks,

greg "drowning in trees" k-h

#2 lore raw
Quoted 2 lines · Greg KH

Does this need to get into 4.14-final, or is 4.15-rc1 ok? I'm a bit lost as to which patches I applied to what tree...

This fixes a race that is somewhat hard to hit, I've only ever seen it with test code that creates the right conditions. But when it does hit it's pretty bad (process blocks forever), so 4.14 would be my preference. I just looked at v4.14-rc4 and it applied cleanly.

Quoted 4 lines

thanks,

greg "drowning in trees" k-h