• Todd Kjos's avatar
    binder: refactor queue management in binder_thread_read · 26b47d8a
    Todd Kjos authored
    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.
    Signed-off-by: default avatarTodd Kjos <tkjos@google.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    26b47d8a
binder.c 107 KB