我有一個使用handle_level_irq()
的IRQ。大多數情況下,ISR要求安排下半部分,但有時候,它可以確定它是虛假的,並且不希望安排下半部分(出於性能原因)。問題是,在後一種情況下,存在競爭條件。如果ISR確定它是虛假的,它將揭露中斷並準備退出(注意 - 此時ISR不受desc->lock
的保護)。但之後,中斷在第二個CPU上被觸發,第二個CPU根據handle_level_irq()
抓取desc->lock
,屏蔽IRQ,確定第一個CPU上的ISR正在進行,因此它解鎖並退出desc->lock
。第一個CPU上的原始ISR也會退出,並始終屏蔽中斷。Linux IRQ:在ISR內解除IRQ
我希望能夠不安排下半部分,除非我需要,那麼有什麼方法讓ISR在避免上述競爭條件的同時揭露自己?