Loading drivers/scsi/libsas/sas_discover.c +1 −1 Original line number Diff line number Diff line Loading @@ -753,7 +753,7 @@ int sas_discover_event(struct asd_sas_port *port, enum discover_event ev) BUG_ON(ev >= DISC_NUM_EVENTS); sas_queue_event(ev, &disc->disc_event_lock, &disc->pending, &disc->disc_work[ev].work, port->ha->core.shost); &disc->disc_work[ev].work, port->ha); return 0; } Loading drivers/scsi/libsas/sas_event.c +3 −3 Original line number Diff line number Diff line Loading @@ -31,7 +31,7 @@ static void notify_ha_event(struct sas_ha_struct *sas_ha, enum ha_event event) BUG_ON(event >= HA_NUM_EVENTS); sas_queue_event(event, &sas_ha->event_lock, &sas_ha->pending, &sas_ha->ha_events[event].work, sas_ha->core.shost); &sas_ha->ha_events[event].work, sas_ha); } static void notify_port_event(struct asd_sas_phy *phy, enum port_event event) Loading @@ -41,7 +41,7 @@ static void notify_port_event(struct asd_sas_phy *phy, enum port_event event) BUG_ON(event >= PORT_NUM_EVENTS); sas_queue_event(event, &ha->event_lock, &phy->port_events_pending, &phy->port_events[event].work, ha->core.shost); &phy->port_events[event].work, ha); } static void notify_phy_event(struct asd_sas_phy *phy, enum phy_event event) Loading @@ -51,7 +51,7 @@ static void notify_phy_event(struct asd_sas_phy *phy, enum phy_event event) BUG_ON(event >= PHY_NUM_EVENTS); sas_queue_event(event, &ha->event_lock, &phy->phy_events_pending, &phy->phy_events[event].work, ha->core.shost); &phy->phy_events[event].work, ha); } int sas_init_events(struct sas_ha_struct *sas_ha) Loading drivers/scsi/libsas/sas_init.c +12 −0 Original line number Diff line number Diff line Loading @@ -87,6 +87,9 @@ int sas_register_ha(struct sas_ha_struct *sas_ha) else if (sas_ha->lldd_queue_size == -1) sas_ha->lldd_queue_size = 128; /* Sanity */ sas_ha->state = SAS_HA_REGISTERED; spin_lock_init(&sas_ha->state_lock); error = sas_register_phys(sas_ha); if (error) { printk(KERN_NOTICE "couldn't register sas phys:%d\n", error); Loading Loading @@ -127,6 +130,15 @@ int sas_register_ha(struct sas_ha_struct *sas_ha) int sas_unregister_ha(struct sas_ha_struct *sas_ha) { unsigned long flags; /* Set the state to unregistered to avoid further * events to be queued */ spin_lock_irqsave(&sas_ha->state_lock, flags); sas_ha->state = SAS_HA_UNREGISTERED; spin_unlock_irqrestore(&sas_ha->state_lock, flags); scsi_flush_work(sas_ha->core.shost); sas_unregister_ports(sas_ha); if (sas_ha->lldd_max_execute_num > 1) { Loading drivers/scsi/libsas/sas_internal.h +7 −2 Original line number Diff line number Diff line Loading @@ -80,7 +80,7 @@ void sas_hae_reset(struct work_struct *work); static inline void sas_queue_event(int event, spinlock_t *lock, unsigned long *pending, struct work_struct *work, struct Scsi_Host *shost) struct sas_ha_struct *sas_ha) { unsigned long flags; Loading @@ -91,7 +91,12 @@ static inline void sas_queue_event(int event, spinlock_t *lock, } __set_bit(event, pending); spin_unlock_irqrestore(lock, flags); scsi_queue_work(shost, work); spin_lock_irqsave(&sas_ha->state_lock, flags); if (sas_ha->state != SAS_HA_UNREGISTERED) { scsi_queue_work(sas_ha->core.shost, work); } spin_unlock_irqrestore(&sas_ha->state_lock, flags); } static inline void sas_begin_event(int event, spinlock_t *lock, Loading include/scsi/libsas.h +8 −0 Original line number Diff line number Diff line Loading @@ -323,12 +323,20 @@ struct sas_ha_event { struct sas_ha_struct *ha; }; enum sas_ha_state { SAS_HA_REGISTERED, SAS_HA_UNREGISTERED }; struct sas_ha_struct { /* private: */ spinlock_t event_lock; struct sas_ha_event ha_events[HA_NUM_EVENTS]; unsigned long pending; enum sas_ha_state state; spinlock_t state_lock; struct scsi_core core; /* public: */ Loading Loading
drivers/scsi/libsas/sas_discover.c +1 −1 Original line number Diff line number Diff line Loading @@ -753,7 +753,7 @@ int sas_discover_event(struct asd_sas_port *port, enum discover_event ev) BUG_ON(ev >= DISC_NUM_EVENTS); sas_queue_event(ev, &disc->disc_event_lock, &disc->pending, &disc->disc_work[ev].work, port->ha->core.shost); &disc->disc_work[ev].work, port->ha); return 0; } Loading
drivers/scsi/libsas/sas_event.c +3 −3 Original line number Diff line number Diff line Loading @@ -31,7 +31,7 @@ static void notify_ha_event(struct sas_ha_struct *sas_ha, enum ha_event event) BUG_ON(event >= HA_NUM_EVENTS); sas_queue_event(event, &sas_ha->event_lock, &sas_ha->pending, &sas_ha->ha_events[event].work, sas_ha->core.shost); &sas_ha->ha_events[event].work, sas_ha); } static void notify_port_event(struct asd_sas_phy *phy, enum port_event event) Loading @@ -41,7 +41,7 @@ static void notify_port_event(struct asd_sas_phy *phy, enum port_event event) BUG_ON(event >= PORT_NUM_EVENTS); sas_queue_event(event, &ha->event_lock, &phy->port_events_pending, &phy->port_events[event].work, ha->core.shost); &phy->port_events[event].work, ha); } static void notify_phy_event(struct asd_sas_phy *phy, enum phy_event event) Loading @@ -51,7 +51,7 @@ static void notify_phy_event(struct asd_sas_phy *phy, enum phy_event event) BUG_ON(event >= PHY_NUM_EVENTS); sas_queue_event(event, &ha->event_lock, &phy->phy_events_pending, &phy->phy_events[event].work, ha->core.shost); &phy->phy_events[event].work, ha); } int sas_init_events(struct sas_ha_struct *sas_ha) Loading
drivers/scsi/libsas/sas_init.c +12 −0 Original line number Diff line number Diff line Loading @@ -87,6 +87,9 @@ int sas_register_ha(struct sas_ha_struct *sas_ha) else if (sas_ha->lldd_queue_size == -1) sas_ha->lldd_queue_size = 128; /* Sanity */ sas_ha->state = SAS_HA_REGISTERED; spin_lock_init(&sas_ha->state_lock); error = sas_register_phys(sas_ha); if (error) { printk(KERN_NOTICE "couldn't register sas phys:%d\n", error); Loading Loading @@ -127,6 +130,15 @@ int sas_register_ha(struct sas_ha_struct *sas_ha) int sas_unregister_ha(struct sas_ha_struct *sas_ha) { unsigned long flags; /* Set the state to unregistered to avoid further * events to be queued */ spin_lock_irqsave(&sas_ha->state_lock, flags); sas_ha->state = SAS_HA_UNREGISTERED; spin_unlock_irqrestore(&sas_ha->state_lock, flags); scsi_flush_work(sas_ha->core.shost); sas_unregister_ports(sas_ha); if (sas_ha->lldd_max_execute_num > 1) { Loading
drivers/scsi/libsas/sas_internal.h +7 −2 Original line number Diff line number Diff line Loading @@ -80,7 +80,7 @@ void sas_hae_reset(struct work_struct *work); static inline void sas_queue_event(int event, spinlock_t *lock, unsigned long *pending, struct work_struct *work, struct Scsi_Host *shost) struct sas_ha_struct *sas_ha) { unsigned long flags; Loading @@ -91,7 +91,12 @@ static inline void sas_queue_event(int event, spinlock_t *lock, } __set_bit(event, pending); spin_unlock_irqrestore(lock, flags); scsi_queue_work(shost, work); spin_lock_irqsave(&sas_ha->state_lock, flags); if (sas_ha->state != SAS_HA_UNREGISTERED) { scsi_queue_work(sas_ha->core.shost, work); } spin_unlock_irqrestore(&sas_ha->state_lock, flags); } static inline void sas_begin_event(int event, spinlock_t *lock, Loading
include/scsi/libsas.h +8 −0 Original line number Diff line number Diff line Loading @@ -323,12 +323,20 @@ struct sas_ha_event { struct sas_ha_struct *ha; }; enum sas_ha_state { SAS_HA_REGISTERED, SAS_HA_UNREGISTERED }; struct sas_ha_struct { /* private: */ spinlock_t event_lock; struct sas_ha_event ha_events[HA_NUM_EVENTS]; unsigned long pending; enum sas_ha_state state; spinlock_t state_lock; struct scsi_core core; /* public: */ Loading