FROMLIST: binder: refactor queue management in binder_thread_read
authorTodd Kjos <tkjos@google.com>
Wed, 24 May 2017 17:51:01 +0000 (10:51 -0700)
committerDanny Wood <danwood76@gmail.com>
Tue, 26 Feb 2019 11:36:31 +0000 (11:36 +0000)
commit9342b49f32450a277aa3d0b119e21cbada8da076
tree17ad87a639a5075cf3a3afe77468d03df60e5b10
parentdfc99565004648300b2b05fab4497c8d7eac8d67
FROMLIST: binder: refactor queue management in binder_thread_read

(from https://patchwork.kernel.org/patch/9817757/)

In binder_thread_read, the BINDER_WORK_NODE command is used
to communicate the references on the node to userspace. It
can take a couple of iterations in the loop to construct
the list of commands for user space. When locking is added,
the lock would need to be release on each iteration which
means the state could change. The work item is not dequeued
during this process which prevents a simpler queue management
that can just dequeue up front and handle the work item.

Fixed by changing the BINDER_WORK_NODE algorithm in
binder_thread_read to determine which commands to send
to userspace atomically in 1 pass so it stays consistent
with the kernel view.

The work item is now dequeued immediately since only
1 pass is needed.

Change-Id: I9b4109997b2d53ba661867b14d7336cd076be06d
Signed-off-by: Todd Kjos <tkjos@google.com>
drivers/android/binder.c