【发布时间】:2018-06-03 16:02:10
【问题描述】:
我认为答案是否定的,但很抱歉我是内核新手,我想知道原因。
我检查了内核代码,发现当线程的irq要被释放时,它会调用kthread_stop(action->thread);
是不是有点冒险?在linux驱动中,我们通常在不应该停止的下半部分进行硬件操作。
是我误解了kthread_stop的行为,还是停止了irq线程就好了?
【问题讨论】:
我认为答案是否定的,但很抱歉我是内核新手,我想知道原因。
我检查了内核代码,发现当线程的irq要被释放时,它会调用kthread_stop(action->thread);
是不是有点冒险?在linux驱动中,我们通常在不应该停止的下半部分进行硬件操作。
是我误解了kthread_stop的行为,还是停止了irq线程就好了?
【问题讨论】:
我会自己回答这个问题。在它停止 action->thread 之前,它会调用 synchronize_irq(irq);这将一直等到没有 hardirq 处理程序正在运行并且没有线程处理程序处于活动状态。
【讨论】: