@
liyafe1997 #2 也有道理,不应该是安卓层的问题。另外看你的描述说不是稳定复现,且闲置会暗屏说明至少调节背光的驱动和 timer 还是 ok 的,也就是说部分 kworkers 是没问题的,但涉及到进程相关的操作就会导致(可能的)死锁出现。
几个特点:1. 不稳定复现; 2. 进程的操作会导致 hang 住(像是死锁); 3. 内核没有 panic ,部分 kworkers 在正常工作; 4. 触发的条件式 CPU 核心的开关
linux 内核代码太多了,特别也不知你是什么版本,很难定位到具体涉及到哪几行逻辑。。。只能提供一些思路:
根据我手头上这份一加 9p 骁龙 888 5.4 版本的查阅了一下,启动一个进程,也就是 do_fork->copy_process 的时候,第一次绑定 cpu 会默认绑定到 cpu0 上,然后在 wake_up_new_task 里面,会再找一个新的 cpu 调度,会不会是这里或者类似的地方出现了问题,比如你关的核心又被调度了,而恰好没有做好处理,导致了死锁什么的?可以在这些地方试着 printk 一下,毕竟你的 dmesg 还是可以吐日志的。
或者 diff 一下你 rebase 之前之后的仓库,如果太多的话,着重看看 kernel/sched/core.c, kernel/fork.c 等相关文件,看看做了什么改动?没 panic 就说明不是太糟糕的问题。