gpt4 book ai didi

c - Linux内核4.12中wake_up_interruptible()的正确用法是什么?

转载 作者:行者123 更新时间:2023-11-30 16:11:08 32 4
gpt4 key购买 nike

我有两个函数,内核线程阻塞

Work Kernel Thread()
{
set_current_state(TASK_INTERRUPTIBLE);
wait_event_interruptible(..work.queue, condition)
__set_current_state(TASK_RUNNING);
}

ISR
{

wake_up_interruptible(..work queue..)
}

但是,当我执行时,内核提示

  WARNING: CPU: 0 PID: 565 at /usr/src/kernel/kernel/sched/core.c:6234 __might_sleep+0x78/0x9c 
do not call blocking ops when !TASK_RUNNING; state=1 set at 0x...

最佳答案

wait_event_interruptible() 宏期望当前任务状态为 TASK_RUNNING,并且当执行返回到时,任务状态将更改回 TASK_RUNNING调用者,召集者。因此,前面的调用 set_current_state(TASK_INTERRUPTIBLE); 和后面的调用 __set_current_state(TASK_RUNNING); 应删除。

在执行wait_event_interruptible()宏期间,所提供的条件将被评估一次或多次,最初处于TASK_RUNNING状态,并且随后在 TASK_INTERRUPTIBLE 状态中唤醒时。

如果在条件之前被信号中断,则wait_event_interrubtible()宏返回-ERESTARTSYS,或者在条件满足时返回0 计算结果为 true。

关于c - Linux内核4.12中wake_up_interruptible()的正确用法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58690590/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com