Lines Matching refs:ha

13 bool sas_queue_work(struct sas_ha_struct *ha, struct sas_work *sw)  in sas_queue_work()  argument
15 if (!test_bit(SAS_HA_REGISTERED, &ha->state)) in sas_queue_work()
18 if (test_bit(SAS_HA_DRAINING, &ha->state)) { in sas_queue_work()
21 list_add_tail(&sw->drain_node, &ha->defer_q); in sas_queue_work()
25 return queue_work(ha->event_q, &sw->work); in sas_queue_work()
29 struct sas_ha_struct *ha) in sas_queue_event() argument
34 spin_lock_irqsave(&ha->lock, flags); in sas_queue_event()
35 rc = sas_queue_work(ha, work); in sas_queue_event()
36 spin_unlock_irqrestore(&ha->lock, flags); in sas_queue_event()
41 void sas_queue_deferred_work(struct sas_ha_struct *ha) in sas_queue_deferred_work() argument
45 spin_lock_irq(&ha->lock); in sas_queue_deferred_work()
46 list_for_each_entry_safe(sw, _sw, &ha->defer_q, drain_node) { in sas_queue_deferred_work()
49 if (!sas_queue_work(ha, sw)) { in sas_queue_deferred_work()
50 pm_runtime_put(ha->dev); in sas_queue_deferred_work()
54 spin_unlock_irq(&ha->lock); in sas_queue_deferred_work()
57 void __sas_drain_work(struct sas_ha_struct *ha) in __sas_drain_work() argument
59 set_bit(SAS_HA_DRAINING, &ha->state); in __sas_drain_work()
61 spin_lock_irq(&ha->lock); in __sas_drain_work()
62 spin_unlock_irq(&ha->lock); in __sas_drain_work()
64 drain_workqueue(ha->event_q); in __sas_drain_work()
65 drain_workqueue(ha->disco_q); in __sas_drain_work()
67 clear_bit(SAS_HA_DRAINING, &ha->state); in __sas_drain_work()
68 sas_queue_deferred_work(ha); in __sas_drain_work()
71 int sas_drain_work(struct sas_ha_struct *ha) in sas_drain_work() argument
75 err = mutex_lock_interruptible(&ha->drain_mutex); in sas_drain_work()
78 if (test_bit(SAS_HA_REGISTERED, &ha->state)) in sas_drain_work()
79 __sas_drain_work(ha); in sas_drain_work()
80 mutex_unlock(&ha->drain_mutex); in sas_drain_work()
86 void sas_disable_revalidation(struct sas_ha_struct *ha) in sas_disable_revalidation() argument
88 mutex_lock(&ha->disco_mutex); in sas_disable_revalidation()
89 set_bit(SAS_HA_ATA_EH_ACTIVE, &ha->state); in sas_disable_revalidation()
90 mutex_unlock(&ha->disco_mutex); in sas_disable_revalidation()
93 void sas_enable_revalidation(struct sas_ha_struct *ha) in sas_enable_revalidation() argument
97 mutex_lock(&ha->disco_mutex); in sas_enable_revalidation()
98 clear_bit(SAS_HA_ATA_EH_ACTIVE, &ha->state); in sas_enable_revalidation()
99 for (i = 0; i < ha->num_phys; i++) { in sas_enable_revalidation()
100 struct asd_sas_port *port = ha->sas_port[i]; in sas_enable_revalidation()
120 mutex_unlock(&ha->disco_mutex); in sas_enable_revalidation()
128 struct sas_ha_struct *ha = phy->ha; in sas_port_event_worker() local
131 pm_runtime_put(ha->dev); in sas_port_event_worker()
139 struct sas_ha_struct *ha = phy->ha; in sas_phy_event_worker() local
142 pm_runtime_put(ha->dev); in sas_phy_event_worker()
149 struct sas_ha_struct *ha = phy->ha; in sas_defer_event() local
153 spin_lock_irqsave(&ha->lock, flags); in sas_defer_event()
154 if (test_bit(SAS_HA_RESUMING, &ha->state) && !phy->suspended) { in sas_defer_event()
157 list_add_tail(&sw->drain_node, &ha->defer_q); in sas_defer_event()
160 spin_unlock_irqrestore(&ha->lock, flags); in sas_defer_event()
167 struct sas_ha_struct *ha = phy->ha; in sas_notify_port_event() local
177 pm_runtime_get_noresume(ha->dev); in sas_notify_port_event()
184 if (!sas_queue_event(event, &ev->work, ha)) { in sas_notify_port_event()
185 pm_runtime_put(ha->dev); in sas_notify_port_event()
194 struct sas_ha_struct *ha = phy->ha; in sas_notify_phy_event() local
204 pm_runtime_get_noresume(ha->dev); in sas_notify_phy_event()
211 if (!sas_queue_event(event, &ev->work, ha)) { in sas_notify_phy_event()
212 pm_runtime_put(ha->dev); in sas_notify_phy_event()