/**
* _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事件线程队列中