diff options
author | Kashyap, Desai <kashyap.desai@lsi.com> | 2009-05-29 07:17:26 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@HansenPartnership.com> | 2009-06-09 18:41:36 -0400 |
commit | 3eb0822c6740c5564c37a2fe56449cdb4f3d800c (patch) | |
tree | 10c2a016020e4363b4db164b09f48530fbcaa517 /drivers/message/fusion/mptbase.c | |
parent | ea2a788de4ce5ebab09276e25443f55592af2335 (diff) |
[SCSI] mpt fusion: Firmware event implementation using seperate WorkQueue
Now Firmware events are handled by firmware event queue.
Previously it was handled in interrupt context/WorkQueue of Linux.
Firmware Event handling is restructured and optimized.
Signed-off-by: Kashyap Desai <kadesai@lsi.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers/message/fusion/mptbase.c')
-rw-r--r-- | drivers/message/fusion/mptbase.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c index ae203eca831f..d67b26378a52 100644 --- a/drivers/message/fusion/mptbase.c +++ b/drivers/message/fusion/mptbase.c | |||
@@ -1931,6 +1931,11 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id) | |||
1931 | */ | 1931 | */ |
1932 | mpt_detect_bound_ports(ioc, pdev); | 1932 | mpt_detect_bound_ports(ioc, pdev); |
1933 | 1933 | ||
1934 | INIT_LIST_HEAD(&ioc->fw_event_list); | ||
1935 | spin_lock_init(&ioc->fw_event_lock); | ||
1936 | snprintf(ioc->fw_event_q_name, 20, "mpt/%d", ioc->id); | ||
1937 | ioc->fw_event_q = create_singlethread_workqueue(ioc->fw_event_q_name); | ||
1938 | |||
1934 | if ((r = mpt_do_ioc_recovery(ioc, MPT_HOSTEVENT_IOC_BRINGUP, | 1939 | if ((r = mpt_do_ioc_recovery(ioc, MPT_HOSTEVENT_IOC_BRINGUP, |
1935 | CAN_SLEEP)) != 0){ | 1940 | CAN_SLEEP)) != 0){ |
1936 | printk(MYIOC_s_ERR_FMT "didn't initialize properly! (%d)\n", | 1941 | printk(MYIOC_s_ERR_FMT "didn't initialize properly! (%d)\n", |
@@ -2010,6 +2015,11 @@ mpt_detach(struct pci_dev *pdev) | |||
2010 | cancel_delayed_work(&ioc->fault_reset_work); | 2015 | cancel_delayed_work(&ioc->fault_reset_work); |
2011 | destroy_workqueue(wq); | 2016 | destroy_workqueue(wq); |
2012 | 2017 | ||
2018 | spin_lock_irqsave(&ioc->fw_event_lock, flags); | ||
2019 | wq = ioc->fw_event_q; | ||
2020 | ioc->fw_event_q = NULL; | ||
2021 | spin_unlock_irqrestore(&ioc->fw_event_lock, flags); | ||
2022 | destroy_workqueue(wq); | ||
2013 | 2023 | ||
2014 | sprintf(pname, MPT_PROCFS_MPTBASEDIR "/%s/summary", ioc->name); | 2024 | sprintf(pname, MPT_PROCFS_MPTBASEDIR "/%s/summary", ioc->name); |
2015 | remove_proc_entry(pname, NULL); | 2025 | remove_proc_entry(pname, NULL); |