Lines Matching defs:shost
64 void scsi_eh_wakeup(struct Scsi_Host *shost, unsigned int busy)
66 lockdep_assert_held(shost->host_lock);
68 if (busy == shost->host_failed) {
69 trace_scsi_eh_wakeup(shost);
70 wake_up_process(shost->ehandler);
71 SCSI_LOG_ERROR_RECOVERY(5, shost_printk(KERN_INFO, shost,
78 * @shost: SCSI host to invoke error handling on.
82 void scsi_schedule_eh(struct Scsi_Host *shost)
86 spin_lock_irqsave(shost->host_lock, flags);
88 if (scsi_host_set_state(shost, SHOST_RECOVERY) == 0 ||
89 scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY) == 0) {
90 shost->host_eh_scheduled++;
91 scsi_eh_wakeup(shost, scsi_host_busy(shost));
94 spin_unlock_irqrestore(shost->host_lock, flags);
98 static int scsi_host_eh_past_deadline(struct Scsi_Host *shost)
100 if (!shost->last_reset || shost->eh_deadline == -1)
110 if (time_before(jiffies, shost->last_reset + shost->eh_deadline) &&
111 shost->eh_deadline > -1)
152 struct Scsi_Host *shost = sdev->host;
156 if (scsi_host_eh_past_deadline(shost)) {
166 rtn = scsi_try_to_abort_cmd(shost->hostt, scmd);
176 if (scsi_host_eh_past_deadline(shost)) {
184 spin_lock_irqsave(shost->host_lock, flags);
191 if (list_empty(&shost->eh_abort_list) &&
192 list_empty(&shost->eh_cmd_q))
193 if (shost->eh_deadline != -1)
194 shost->last_reset = 0;
196 spin_unlock_irqrestore(shost->host_lock, flags);
214 spin_lock_irqsave(shost->host_lock, flags);
216 spin_unlock_irqrestore(shost->host_lock, flags);
231 struct Scsi_Host *shost = sdev->host;
234 if (!shost->hostt->eh_abort_handler) {
250 spin_lock_irqsave(shost->host_lock, flags);
251 if (shost->eh_deadline != -1 && !shost->last_reset)
252 shost->last_reset = jiffies;
254 list_add_tail(&scmd->eh_entry, &shost->eh_abort_list);
255 spin_unlock_irqrestore(shost->host_lock, flags);
260 queue_delayed_work(shost->tmf_work_q, &scmd->abort_work, HZ / 100);
284 struct Scsi_Host *shost = scmd->device->host;
285 unsigned int busy = scsi_host_busy(shost);
288 spin_lock_irqsave(shost->host_lock, flags);
289 shost->host_failed++;
290 scsi_eh_wakeup(shost, busy);
291 spin_unlock_irqrestore(shost->host_lock, flags);
300 struct Scsi_Host *shost = scmd->device->host;
304 WARN_ON_ONCE(!shost->ehandler);
306 spin_lock_irqsave(shost->host_lock, flags);
307 if (scsi_host_set_state(shost, SHOST_RECOVERY)) {
308 ret = scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY);
311 if (shost->eh_deadline != -1 && !shost->last_reset)
312 shost->last_reset = jiffies;
315 list_add_tail(&scmd->eh_entry, &shost->eh_cmd_q);
316 spin_unlock_irqrestore(shost->host_lock, flags);
398 * @shost: scsi host being recovered.
401 static inline void scsi_eh_prt_fail_stats(struct Scsi_Host *shost,
411 shost_for_each_device(sdev, shost) {
424 shost_printk(KERN_INFO, shost,
434 SCSI_LOG_ERROR_RECOVERY(2, shost_printk(KERN_INFO, shost,
1143 struct Scsi_Host *shost = sdev->host;
1152 shost->eh_action = &done;
1175 rtn = shost->hostt->queuecommand(shost, scmd);
1196 shost->eh_action = NULL;
1293 * This has the unfortunate side effect that if a shost adapter does
1307 struct Scsi_Host *shost;
1319 shost = scmd->device->host;
1320 if (scsi_host_eh_past_deadline(shost)) {
1491 * @shost: &scsi host being recovered.
1499 static int scsi_eh_stu(struct Scsi_Host *shost,
1506 shost_for_each_device(sdev, shost) {
1507 if (scsi_host_eh_past_deadline(shost)) {
1555 * @shost: scsi host being recovered.
1565 static int scsi_eh_bus_device_reset(struct Scsi_Host *shost,
1573 shost_for_each_device(sdev, shost) {
1574 if (scsi_host_eh_past_deadline(shost)) {
1620 * @shost: scsi host being recovered.
1627 static int scsi_eh_target_reset(struct Scsi_Host *shost,
1641 if (scsi_host_eh_past_deadline(shost)) {
1646 shost_printk(KERN_INFO, shost,
1656 shost_printk(KERN_INFO, shost,
1662 shost_printk(KERN_INFO, shost,
1685 * @shost: &scsi host being recovered.
1689 static int scsi_eh_bus_reset(struct Scsi_Host *shost,
1705 for (channel = 0; channel <= shost->max_channel; channel++) {
1706 if (scsi_host_eh_past_deadline(shost)) {
1709 shost_printk(KERN_INFO, shost,
1730 shost_printk(KERN_INFO, shost,
1747 shost_printk(KERN_INFO, shost,
1757 * @shost: host to be reset.
1761 static int scsi_eh_host_reset(struct Scsi_Host *shost,
1774 shost_printk(KERN_INFO, shost,
1787 shost_printk(KERN_INFO, shost,
2109 * @shost: Host we are restarting.
2115 static void scsi_restart_operations(struct Scsi_Host *shost)
2125 shost_for_each_device(sdev, shost) {
2138 shost_printk(KERN_INFO, shost, "waking up host to restart\n"));
2140 spin_lock_irqsave(shost->host_lock, flags);
2141 if (scsi_host_set_state(shost, SHOST_RUNNING))
2142 if (scsi_host_set_state(shost, SHOST_CANCEL))
2143 BUG_ON(scsi_host_set_state(shost, SHOST_DEL));
2144 spin_unlock_irqrestore(shost->host_lock, flags);
2146 wake_up(&shost->host_wait);
2154 scsi_run_host_queues(shost);
2164 spin_lock_irqsave(shost->host_lock, flags);
2165 if (shost->host_eh_scheduled)
2166 if (scsi_host_set_state(shost, SHOST_RECOVERY))
2167 WARN_ON(scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY));
2168 spin_unlock_irqrestore(shost->host_lock, flags);
2173 * @shost: host to be recovered.
2177 void scsi_eh_ready_devs(struct Scsi_Host *shost,
2181 if (!scsi_eh_stu(shost, work_q, done_q))
2182 if (!scsi_eh_bus_device_reset(shost, work_q, done_q))
2183 if (!scsi_eh_target_reset(shost, work_q, done_q))
2184 if (!scsi_eh_bus_reset(shost, work_q, done_q))
2185 if (!scsi_eh_host_reset(shost, work_q, done_q))
2233 * @shost: Host to unjam.
2254 static void scsi_unjam_host(struct Scsi_Host *shost)
2260 spin_lock_irqsave(shost->host_lock, flags);
2261 list_splice_init(&shost->eh_cmd_q, &eh_work_q);
2262 spin_unlock_irqrestore(shost->host_lock, flags);
2264 SCSI_LOG_ERROR_RECOVERY(1, scsi_eh_prt_fail_stats(shost, &eh_work_q));
2267 scsi_eh_ready_devs(shost, &eh_work_q, &eh_done_q);
2269 spin_lock_irqsave(shost->host_lock, flags);
2270 if (shost->eh_deadline != -1)
2271 shost->last_reset = 0;
2272 spin_unlock_irqrestore(shost->host_lock, flags);
2286 struct Scsi_Host *shost = data;
2305 if ((shost->host_failed == 0 && shost->host_eh_scheduled == 0) ||
2306 shost->host_failed != scsi_host_busy(shost)) {
2308 shost_printk(KERN_INFO, shost,
2310 shost->host_no));
2317 shost_printk(KERN_INFO, shost,
2319 shost->host_no, shost->host_eh_scheduled,
2320 shost->host_failed,
2321 scsi_host_busy(shost)));
2328 if (!shost->eh_noresume && scsi_autopm_get_host(shost) != 0) {
2330 shost_printk(KERN_ERR, shost,
2332 shost->host_no));
2336 if (shost->transportt->eh_strategy_handler)
2337 shost->transportt->eh_strategy_handler(shost);
2339 scsi_unjam_host(shost);
2342 shost->host_failed = 0;
2351 scsi_restart_operations(shost);
2352 if (!shost->eh_noresume)
2353 scsi_autopm_put_host(shost);
2358 shost_printk(KERN_INFO, shost,
2360 shost->host_no));
2361 shost->ehandler = NULL;
2371 * Arguments: shost - Host in question
2386 void scsi_report_bus_reset(struct Scsi_Host *shost, int channel)
2390 __shost_for_each_device(sdev, shost) {
2403 * Arguments: shost - Host in question
2419 void scsi_report_device_reset(struct Scsi_Host *shost, int channel, int target)
2423 __shost_for_each_device(sdev, shost) {
2440 struct Scsi_Host *shost = dev->host;
2453 if (scsi_autopm_get_host(shost) < 0)
2458 shost->hostt->cmd_size, GFP_KERNEL);
2474 spin_lock_irqsave(shost->host_lock, flags);
2475 shost->tmf_in_progress = 1;
2476 spin_unlock_irqrestore(shost->host_lock, flags);
2509 spin_lock_irqsave(shost->host_lock, flags);
2510 shost->tmf_in_progress = 0;
2511 spin_unlock_irqrestore(shost->host_lock, flags);
2518 shost_printk(KERN_INFO, shost,
2521 wake_up(&shost->host_wait);
2522 scsi_run_host_queues(shost);
2527 scsi_autopm_put_host(shost);