gpt4 book ai didi

c - 原子调度

转载 作者:太空狗 更新时间:2023-10-29 15:33:20 24 4
gpt4 key购买 nike

在我自己的内核模块中,我试图在中断处理函数中初始化一个kthread

在全局范围内我有:

static struct task_struct *thread1;

irq 的函数处理程序是:

static irqreturn_t* func_irq_handler (int irq, void *dev_id)
{
printk("irq handler ... \n");
thread1 = kthread_create(thread_function,NULL,"my_thread");
if ((thread1)) {
printk(KERN_INFO "%s\n" , __FUNCTION__);
}
return IRQ_HANDLED;
}

线程函数是:

static thread_function(void)
{
unsigned long j1=jiffies+20000;
int delay = 60*HZ;
printk("%s \n",__FUNCTION__);

while (time_before(jiffies,j1)) {
schedule();
printk(KERN_INFO "after schedule\n");
}
}

request_irq 看起来像这样:

request_irq(irq,func_irq_handler,IRQF_TRIGGER_HIGH | IRQF_TRIGGER_RISING ,"test_irq",(void*)&my_miscdev);

为什么会出现这个错误:

BUG: scheduling while atomic: swapper

最佳答案

我想创建一个线程需要与线程调度程序交互,这在中断/原子上下文中是不允许的。

更好的方法是在别处创建内核线程,并将中断请求处理排队。

关于c - 原子调度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12057897/

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