INIT_WORK的暂时理解

来源:互联网 发布:网络通信的工作原理 编辑:程序博客网 时间:2024/05/17 01:01

/**
 * _scsih_fw_event_add - insert and queue up fw_event
 * @ioc: per adapter object
 * @fw_event: object describing the event
 * Context: This function will acquire ioc->fw_event_lock.
 *
 * This adds the firmware event object into link list, then queues it up to
 * be processed from user context.
 *
 * Return nothing.
 */
static void
_scsih_fw_event_add(struct MPT2SAS_ADAPTER *ioc, struct fw_event_work *fw_event)
{
 unsigned long flags;

 if (ioc->firmware_event_thread == NULL)
  return;

 spin_lock_irqsave(&ioc->fw_event_lock, flags);
 INIT_LIST_HEAD(&fw_event->list);
 list_add_tail(&fw_event->list, &ioc->fw_event_list);
#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,19))
 INIT_WORK(&fw_event->work, _firmware_event_work);
#else
 INIT_WORK(&fw_event->work, _firmware_event_work, (void *)fw_event);
#endif
 queue_work(ioc->firmware_event_thread, &fw_event->work);
 spin_unlock_irqrestore(&ioc->fw_event_lock, flags);
}

 

这里写下对这个函数的理解

首先:

1。INIT_LIST_HEAD(&fw_event->list)

初始化firmware事件链表

2。list_add_tail()

把这个firmware事件添加到firmware时间链表尾巴上

3。INIT_WORK

给该firmware事件初始化工作函数

4。queue_work

把该firmware工作排在firmware事件线程队列中

原创粉丝点击