久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

字符設(shè)備驅(qū)動之一些函數(shù)

 nt_bookworm 2012-03-22
1,、static DECLARE_WAIT_QUEUE_HEAD(button_waitq);

       DECLARE_WAIT_QUEUE_HEAD是一個宏,,定義如下:
#define DECLARE_WAIT_QUEUE_HEAD(name) \
                               wait_queue_head_t name = __WAIT_QUEUE_HEAD_INITIALIZER(name)
   
       wait_queue_head_t也是一個宏,,定義如下:
                                        typedef struct __wait_queue_head wait_queue_head_t;

                                        struct __wait_queue_head {
                                                                                spinlock_t lock;
                                                                                struct list_head task_list;
                                                                                         };
     
      __WAIT_QUEUE_HEAD_INITIALIZER(name)也是一個宏,定義如下:
                                        #define __WAIT_QUEUE_HEAD_INITIALIZER(name) { \
                                 .lock = __SPIN_LOCK_UNLOCKED(name.lock), \
                                 .task_list = { &(name).task_list, &(name).task_list } }

          所以,,static DECLARE_WAIT_QUEUE_HEAD(button_waitq);相當(dāng)于定義了一個名為button_waitq
struct __wait_queue_head類型的結(jié)構(gòu)體變量,,并初始化為:

                                         .lock = __SPIN_LOCK_UNLOCKED(name.lock),
                                 .task_list = { &(name).task_list, &(name).task_list } 

          意義:定義一個名為button_waitq的隊列頭,代表該進程,。

2,、wait_event_interruptible(button_waitq, ev_press);

#define wait_event_interruptible(wq, condition) \
({ \
int __ret = 0; \
if (!(condition)) \
__wait_event_interruptible(wq, condition, __ret); \
__ret; \
})

當(dāng)條件condition為0是調(diào)用__wait_event_interruptible(wq, condition, __ret)進行休眠;

3,、wake_up_interruptible(&button_waitq); 

#define wake_up_interruptible(x) __wake_up(x, TASK_INTERRUPTIBLE, 1, NULL)

void __wake_up(wait_queue_head_t *q, unsigned int mode,
int nr_exclusive, void *key)
{
unsigned long flags;

spin_lock_irqsave(&q->lock, flags);
__wake_up_common(q, mode, nr_exclusive, 0, key);
spin_unlock_irqrestore(&q->lock, flags);
}

喚醒button_waitq隊列頭代表的進程,。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多