ANDROID: vendor_hook: fix issue vip thread do not sleep while no vip work
to make sure trace_android_vh_binder_has_special_work_ilocked will be called
in any case in android native logic
(here just fix is:
binder_thread_read (non_block case) ->
| binder_wait_for_work ->
| if(binder_has_work_ilocked(...)) ->
| fase: schedule true: break ->
),
if binder_has_work_ilocked do not deal with trace_android_vh_binder_has_special_work_ilocked
vip thread maybe return true because proc->todo list is not empty but it has not vip work
(special work with special binder_transaction:flag)
fix it by: move trace_android_vh_binder_has_special_work_ilocked for binder_has_work
to binder_has_work_ilocked
Fixs: 24bb8fc82e60("ANDROID: vendor_hooks: add hooks in driver/android/binder.c")
| https://android-review.googlesource.com/c/kernel/common/+/2897624
Bug: 318782978
Change-Id: I8ced722c71c82942e626f04dce950e8df580ae95
Signed-off-by: songfeng <songfeng@oppo.com>
This commit is contained in:
parent
8f2f0a3b12
commit
71ad82fd45
1 changed files with 6 additions and 2 deletions
|
|
@ -544,14 +544,19 @@ static bool binder_has_work_ilocked(struct binder_thread *thread,
|
|||
bool do_proc_work)
|
||||
{
|
||||
int ret = 0;
|
||||
bool has_work = false;
|
||||
|
||||
trace_android_vh_binder_has_work_ilocked(thread, do_proc_work, &ret);
|
||||
if (ret)
|
||||
return true;
|
||||
return thread->process_todo ||
|
||||
has_work =
|
||||
thread->process_todo ||
|
||||
thread->looper_need_return ||
|
||||
(do_proc_work &&
|
||||
!binder_worklist_empty_ilocked(&thread->proc->todo));
|
||||
trace_android_vh_binder_has_special_work_ilocked(thread, do_proc_work, &has_work);
|
||||
|
||||
return has_work;
|
||||
}
|
||||
|
||||
static bool binder_has_work(struct binder_thread *thread, bool do_proc_work)
|
||||
|
|
@ -560,7 +565,6 @@ static bool binder_has_work(struct binder_thread *thread, bool do_proc_work)
|
|||
|
||||
binder_inner_proc_lock(thread->proc);
|
||||
has_work = binder_has_work_ilocked(thread, do_proc_work);
|
||||
trace_android_vh_binder_has_special_work_ilocked(thread, do_proc_work, &has_work);
|
||||
binder_inner_proc_unlock(thread->proc);
|
||||
|
||||
return has_work;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue