Linux驅動中delayed_workqueue使用

來源:互聯網
上載者:User

Linux驅動中delayed_workqueue使用:

在驅動中,有時不能使用中斷(這種情況很少遇到), 此時delayed_workqueue就可以發揮其巨大的功效了。也可以用其它同類的核心API實現:如timer。

delayed_workqueue的使用過程如下:

    --> 定義workqueue: struct workqueue_struct *test_workqueue;                                      // 定義在: kernel/workqueue.c

    --> 定義workqueue要做的delayed工作:struct delayed_work test_delayed_work;       // 定義在: include/linux/workqueue.h

    --> 初始化workqueue:INIT_DELAYED_WORK(test_delayed_work, test_workqueue_func);    // 定義在:include/linux/workqueue.h

    --> 建立線程queue並加以名字:test_workqueue = create_singlethread_workqueue("name_of_this_queue");

    --> 運行queue:queue_delayed_work(test_workqueue, test_delayed_work, delay_time);  // 定義在:kernel/workqueue.c, 其中delay_time是延遲多少時間來運行queue。

註: 在test_workqueu_func中一定要再次將delayed_workqueue加入queue中,即再次運行queue_delayed_work。否則,此queue只運行一次。

下面詳細講解每個函數。

#define INIT_DELAYED_WORK(_work, _func)\do {\INIT_WORK(&(_work)->work, (_func));\init_timer(&(_work)->timer);\} while (0)
#define INIT_WORK(_work, _func)\do {\(_work)->data = (atomic_long_t) WORK_DATA_INIT();\INIT_LIST_HEAD(&(_work)->entry);\PREPARE_WORK((_work), (_func));\} while (0)#endif// WORK_DATA_INIT() == 0;// PREPARE_WORK((_work), (_func)) == (_work)->func = (_func);struct delayed_work {struct work_struct work;struct timer_list timer;};

INIT_WORK的主要工作是data賦值為0;

初始化entry鏈表;

將_func傳給work的_func。

#define init_timer(timer) init_timer_key((timer), NULL, NULL)

init_timer_key((timer), NULL, NULL) --> debug_time_init [ NOP]

使用delayed workqueue最主要的是調用queue_delayed_work。

如果delay = 0,則直接調用:queue_work

        其具體實現過程:queue_work --> queue_work_on --> __queue_work --> insert_work

如果delay !=0,則調用:queue_delayed_work_on

        其具體實現過程:queue_delayed_work_on 此函數是通過timer來完成最後的延時工作。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.