Lines Matching defs:shost
66 void scsi_eh_wakeup(struct Scsi_Host *shost, unsigned int busy)
68 lockdep_assert_held(shost->host_lock);
70 if (busy == shost->host_failed) {
71 trace_scsi_eh_wakeup(shost);
72 wake_up_process(shost->ehandler);
73 SCSI_LOG_ERROR_RECOVERY(5, shost_printk(KERN_INFO, shost,
80 * @shost: SCSI host to invoke error handling on.
84 void scsi_schedule_eh(struct Scsi_Host *shost)
88 spin_lock_irqsave(shost->host_lock, flags);
90 if (scsi_host_set_state(shost, SHOST_RECOVERY) == 0 ||
91 scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY) == 0) {
92 shost->host_eh_scheduled++;
93 scsi_eh_wakeup(shost, scsi_host_busy(shost));
96 spin_unlock_irqrestore(shost->host_lock, flags);
100 static int scsi_host_eh_past_deadline(struct Scsi_Host *shost)
102 if (!shost->last_reset || shost->eh_deadline == -1)
112 if (time_before(jiffies, shost->last_reset + shost->eh_deadline) &&
113 shost->eh_deadline > -1)
197 struct Scsi_Host *shost = sdev->host;
211 spin_lock_irqsave(shost->host_lock, flags);
212 if (shost->eh_deadline != -1 && !shost->last_reset)
213 shost->last_reset = jiffies;
214 spin_unlock_irqrestore(shost->host_lock, flags);
219 queue_delayed_work(shost->tmf_work_q, &scmd->abort_work, HZ / 100);
243 struct Scsi_Host *shost = scmd->device->host;
244 unsigned int busy = scsi_host_busy(shost);
247 spin_lock_irqsave(shost->host_lock, flags);
248 shost->host_failed++;
249 scsi_eh_wakeup(shost, busy);
250 spin_unlock_irqrestore(shost->host_lock, flags);
259 struct Scsi_Host *shost = scmd->device->host;
263 WARN_ON_ONCE(!shost->ehandler);
265 spin_lock_irqsave(shost->host_lock, flags);
266 if (scsi_host_set_state(shost, SHOST_RECOVERY)) {
267 ret = scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY);
270 if (shost->eh_deadline != -1 && !shost->last_reset)
271 shost->last_reset = jiffies;
274 list_add_tail(&scmd->eh_entry, &shost->eh_cmd_q);
275 spin_unlock_irqrestore(shost->host_lock, flags);
350 * @shost: scsi host being recovered.
353 static inline void scsi_eh_prt_fail_stats(struct Scsi_Host *shost,
363 shost_for_each_device(sdev, shost) {
376 shost_printk(KERN_INFO, shost,
386 SCSI_LOG_ERROR_RECOVERY(2, shost_printk(KERN_INFO, shost,
1060 struct Scsi_Host *shost = sdev->host;
1069 shost->eh_action = &done;
1092 rtn = shost->hostt->queuecommand(shost, scmd);
1112 shost->eh_action = NULL;
1209 * This has the unfortunate side effect that if a shost adapter does
1223 struct Scsi_Host *shost;
1235 shost = scmd->device->host;
1236 if (scsi_host_eh_past_deadline(shost)) {
1406 * @shost: &scsi host being recovered.
1414 static int scsi_eh_stu(struct Scsi_Host *shost,
1421 shost_for_each_device(sdev, shost) {
1422 if (scsi_host_eh_past_deadline(shost)) {
1470 * @shost: scsi host being recovered.
1480 static int scsi_eh_bus_device_reset(struct Scsi_Host *shost,
1488 shost_for_each_device(sdev, shost) {
1489 if (scsi_host_eh_past_deadline(shost)) {
1535 * @shost: scsi host being recovered.
1542 static int scsi_eh_target_reset(struct Scsi_Host *shost,
1556 if (scsi_host_eh_past_deadline(shost)) {
1561 shost_printk(KERN_INFO, shost,
1571 shost_printk(KERN_INFO, shost,
1577 shost_printk(KERN_INFO, shost,
1600 * @shost: &scsi host being recovered.
1604 static int scsi_eh_bus_reset(struct Scsi_Host *shost,
1620 for (channel = 0; channel <= shost->max_channel; channel++) {
1621 if (scsi_host_eh_past_deadline(shost)) {
1624 shost_printk(KERN_INFO, shost,
1645 shost_printk(KERN_INFO, shost,
1662 shost_printk(KERN_INFO, shost,
1672 * @shost: host to be reset.
1676 static int scsi_eh_host_reset(struct Scsi_Host *shost,
1689 shost_printk(KERN_INFO, shost,
1702 shost_printk(KERN_INFO, shost,
2012 * @shost: Host we are restarting.
2018 static void scsi_restart_operations(struct Scsi_Host *shost)
2028 shost_for_each_device(sdev, shost) {
2041 shost_printk(KERN_INFO, shost, "waking up host to restart\n"));
2043 spin_lock_irqsave(shost->host_lock, flags);
2044 if (scsi_host_set_state(shost, SHOST_RUNNING))
2045 if (scsi_host_set_state(shost, SHOST_CANCEL))
2046 BUG_ON(scsi_host_set_state(shost, SHOST_DEL));
2047 spin_unlock_irqrestore(shost->host_lock, flags);
2049 wake_up(&shost->host_wait);
2057 scsi_run_host_queues(shost);
2067 spin_lock_irqsave(shost->host_lock, flags);
2068 if (shost->host_eh_scheduled)
2069 if (scsi_host_set_state(shost, SHOST_RECOVERY))
2070 WARN_ON(scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY));
2071 spin_unlock_irqrestore(shost->host_lock, flags);
2076 * @shost: host to be recovered.
2080 void scsi_eh_ready_devs(struct Scsi_Host *shost,
2084 if (!scsi_eh_stu(shost, work_q, done_q))
2085 if (!scsi_eh_bus_device_reset(shost, work_q, done_q))
2086 if (!scsi_eh_target_reset(shost, work_q, done_q))
2087 if (!scsi_eh_bus_reset(shost, work_q, done_q))
2088 if (!scsi_eh_host_reset(shost, work_q, done_q))
2131 * @shost: Host to unjam.
2152 static void scsi_unjam_host(struct Scsi_Host *shost)
2158 spin_lock_irqsave(shost->host_lock, flags);
2159 list_splice_init(&shost->eh_cmd_q, &eh_work_q);
2160 spin_unlock_irqrestore(shost->host_lock, flags);
2162 SCSI_LOG_ERROR_RECOVERY(1, scsi_eh_prt_fail_stats(shost, &eh_work_q));
2165 scsi_eh_ready_devs(shost, &eh_work_q, &eh_done_q);
2167 spin_lock_irqsave(shost->host_lock, flags);
2168 if (shost->eh_deadline != -1)
2169 shost->last_reset = 0;
2170 spin_unlock_irqrestore(shost->host_lock, flags);
2184 struct Scsi_Host *shost = data;
2203 if ((shost->host_failed == 0 && shost->host_eh_scheduled == 0) ||
2204 shost->host_failed != scsi_host_busy(shost)) {
2206 shost_printk(KERN_INFO, shost,
2208 shost->host_no));
2215 shost_printk(KERN_INFO, shost,
2217 shost->host_no, shost->host_eh_scheduled,
2218 shost->host_failed,
2219 scsi_host_busy(shost)));
2226 if (!shost->eh_noresume && scsi_autopm_get_host(shost) != 0) {
2228 shost_printk(KERN_ERR, shost,
2230 shost->host_no));
2234 if (shost->transportt->eh_strategy_handler)
2235 shost->transportt->eh_strategy_handler(shost);
2237 scsi_unjam_host(shost);
2240 shost->host_failed = 0;
2249 scsi_restart_operations(shost);
2250 if (!shost->eh_noresume)
2251 scsi_autopm_put_host(shost);
2256 shost_printk(KERN_INFO, shost,
2258 shost->host_no));
2259 shost->ehandler = NULL;
2269 * Arguments: shost - Host in question
2284 void scsi_report_bus_reset(struct Scsi_Host *shost, int channel)
2288 __shost_for_each_device(sdev, shost) {
2301 * Arguments: shost - Host in question
2317 void scsi_report_device_reset(struct Scsi_Host *shost, int channel, int target)
2321 __shost_for_each_device(sdev, shost) {
2343 struct Scsi_Host *shost = dev->host;
2356 if (scsi_autopm_get_host(shost) < 0)
2361 shost->hostt->cmd_size, GFP_KERNEL);
2379 spin_lock_irqsave(shost->host_lock, flags);
2380 shost->tmf_in_progress = 1;
2381 spin_unlock_irqrestore(shost->host_lock, flags);
2414 spin_lock_irqsave(shost->host_lock, flags);
2415 shost->tmf_in_progress = 0;
2416 spin_unlock_irqrestore(shost->host_lock, flags);
2423 shost_printk(KERN_INFO, shost,
2426 wake_up(&shost->host_wait);
2427 scsi_run_host_queues(shost);
2432 scsi_autopm_put_host(shost);