wait_event_timeout在条件设置的超时时退出

时间:2014-04-24 07:47:17

标签: multithreading linux-kernel multiprocessing

我的linux内核模块中有这段代码:

spin_lock_irqsave(&ofn_lock, ofn_flag);
<several instructions>
ack_type = 1;
wake_up = 1;
spin_unlock_irqrestore(&ofn_lock, ofn_flag);
if (wake_up)
  wake_up(&wait_q);

睡眠者这样做:

#define TIMEOUT                 250

wait_event_timeout(wait_q, ack_type != 0, msecs_to_jiffies(TIMEOUT));
if (ack_type == 1) 
    retValue = OK;
else  
    retValue = TIMEOUT;

此代码在具有4个内核的ARM SMP上运行。

大多数情况下代码都能正常工作,但是有时等待会在超时时退出,即使所有时间ack_type都设置为1(我在waker中打印了一个打印该值的打印,并且&#39 ; s 1,我也在卧铺中打印,有时值为0)。

我的感觉是问题与缺乏内存障碍有关(我知道自旋锁和wake_up以及wait_event都使用内存屏障,因此我认为我不需要明确使用记忆障碍),但我不确定这是否真的是问题。

有人知道这里可能出现什么问题吗?

0 个答案:

没有答案