mpt fusion: [2.6.30-rc6] Firmware event implementation using seperate WorkQueue
Subsystems (2)
PATCH 13/24 mpt fusion: [2.6.30-rc6] Firmware event implementation using seperate WorkQueue
1) 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 <[email protected]>
---
drivers/message/fusion/mptbase.c +10 -0
@@ -1931,6 +1931,11 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id)*/ mpt_detect_bound_ports (ioc, pdev); +INIT_LIST_HEAD (&ioc->fw_event_list); +spin_lock_init (&ioc->fw_event_lock); +snprintf (ioc->fw_event_q_name,20 ,"mpt/%d" , ioc->id); + ioc->fw_event_q =create_singlethread_workqueue (ioc->fw_event_q_name); +if ((r =mpt_do_ioc_recovery (ioc,MPT_HOSTEVENT_IOC_BRINGUP ,CAN_SLEEP )) !=0 ){ printk(MYIOC_s_ERR_FMT "didn't initialize properly! (%d)\n",
@@ -2010,6 +2015,11 @@ mpt_detach(struct pci_dev *pdev)cancel_delayed_work (&ioc->fault_reset_work);destroy_workqueue (wq); +spin_lock_irqsave (&ioc->fw_event_lock, flags); + wq = ioc->fw_event_q; + ioc->fw_event_q =NULL ; +spin_unlock_irqrestore (&ioc->fw_event_lock, flags); +destroy_workqueue (wq);sprintf (pname,MPT_PROCFS_MPTBASEDIR "/%s/summary" , ioc->name);remove_proc_entry (pname,NULL );
drivers/message/fusion/mptbase.h +9 -0
@@ -694,9 +694,18 @@ typedef struct _MPT_ADAPTERstruct net_device *netdev;struct list_head sas_topology;struct mutex sas_topology_mutex; + +struct workqueue_struct *fw_event_q; +struct list_head fw_event_list; +spinlock_t fw_event_lock; +u8 fw_events_off;/* if '1', then ignore events */ +char fw_event_q_name[20 ]; +struct mutex sas_discovery_mutex;u8 sas_discovery_runtime;u8 sas_discovery_ignore_events; +struct list_head sas_device_info_list; +struct mutex sas_device_info_mutex;u8 sas_discovery_quiesce_io;int sas_index;/* index refrencing */ MPT_MGMT sas_mgmt;
drivers/message/fusion/mptsas.c +933 -418
1,678 lines not on this page · raw message
drivers/message/fusion/mptsas.h +29 -4
@@ -61,12 +61,30 @@ enum mptsas_hotplug_action {MPTSAS_DEL_DEVICE ,MPTSAS_ADD_RAID ,MPTSAS_DEL_RAID , +MPTSAS_ADD_PHYSDISK , +MPTSAS_ADD_PHYSDISK_REPROBE , +MPTSAS_DEL_PHYSDISK , +MPTSAS_DEL_PHYSDISK_REPROBE ,MPTSAS_ADD_INACTIVE_VOLUME , MPTSAS_IGNORE_EVENT, }; +struct sas_mapping { +u8 id; +u8 channel; +}; + +struct sas_device_info { +struct list_head list; +struct sas_mapping os;/* operating system mapping*/ +struct sas_mapping fw;/* firmware mapping */ +u64 sas_address; +u32 device_info;/* specific bits for devices */ +u16 slot;/* enclosure slot id */ +u64 enclosure_logical_id;/*enclosure address */ +}; +struct mptsas_hotplug_event { -struct work_struct work;MPT_ADAPTER *ioc;enum mptsas_hotplug_action event_type;u64 sas_address;
@@ -74,11 +92,18 @@ struct mptsas_hotplug_event {u8 id;u32 device_info;u16 handle; -u16 parent_handle;u8 phy_id; -u8 phys_disk_num_valid;/* hrc (hidden raid component) */ u8 phys_disk_num;/* hrc - unique index*/ -u8 hidden_raid_component;/* hrc - don't expose*/ +struct scsi_device *sdev; +}; + +struct fw_event_work { +struct list_head list; +struct delayed_work work; +MPT_ADAPTER *ioc; +u32 event; +u8 retries; +u8 event_data[1 ]; };struct mptsas_discovery_event {
James Bottomley
maintainerQuoted 18 lines · Desai
drivers/message/fusion/mptsas.h +8
-0@@ -61,12 +61,30 @@ enum mptsas_hotplug_action {MPTSAS_DEL_DEVICE ,MPTSAS_ADD_RAID ,MPTSAS_DEL_RAID , +MPTSAS_ADD_PHYSDISK , +MPTSAS_ADD_PHYSDISK_REPROBE , +MPTSAS_DEL_PHYSDISK , +MPTSAS_DEL_PHYSDISK_REPROBE ,MPTSAS_ADD_INACTIVE_VOLUME , MPTSAS_IGNORE_EVENT, }; +struct sas_mapping { +u8 id; +u8 channel; +};
drivers/message/fusion/mptsas.h enum mptsas_hotplug_action { · line 85
Quoted 10 lines
drivers/message/fusion/mptsas.h +10
-0+ +struct sas_device_info { +struct list_head list; +struct sas_mapping os;/* operating system mapping*/ +struct sas_mapping fw;/* firmware mapping */ +u64 sas_address; +u32 device_info;/* specific bits for devices */ +u16 slot;/* enclosure slot id */ +u64 enclosure_logical_id;/*enclosure address */ +};
sas_device_info and sas_mapping aren't very good names for structures in a file you include along with the generic scsi_transport_sas.h header, which has a lot of sas_ prefix structures and functions in it ... it's setting us up for a namespace clash. Why aren't these mptsas_ prefixes like everything else in this file?
James