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