xref: /linux/drivers/scsi/isci/remote_device.c (revision cc9203bf381a465cd115762b9cf7c9a313c874bc)
1 /*
2  * This file is provided under a dual BSD/GPLv2 license.  When using or
3  * redistributing this file, you may do so under either license.
4  *
5  * GPL LICENSE SUMMARY
6  *
7  * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of version 2 of the GNU General Public License as
11  * published by the Free Software Foundation.
12  *
13  * This program is distributed in the hope that it will be useful, but
14  * WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
21  * The full GNU General Public License is included in this distribution
22  * in the file called LICENSE.GPL.
23  *
24  * BSD LICENSE
25  *
26  * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
27  * All rights reserved.
28  *
29  * Redistribution and use in source and binary forms, with or without
30  * modification, are permitted provided that the following conditions
31  * are met:
32  *
33  *   * Redistributions of source code must retain the above copyright
34  *     notice, this list of conditions and the following disclaimer.
35  *   * Redistributions in binary form must reproduce the above copyright
36  *     notice, this list of conditions and the following disclaimer in
37  *     the documentation and/or other materials provided with the
38  *     distribution.
39  *   * Neither the name of Intel Corporation nor the names of its
40  *     contributors may be used to endorse or promote products derived
41  *     from this software without specific prior written permission.
42  *
43  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
44  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
45  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
46  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
47  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
48  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
49  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
50  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
51  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
52  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
53  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
54  */
55 #include <scsi/sas.h>
56 #include "isci.h"
57 #include "port.h"
58 #include "remote_device.h"
59 #include "request.h"
60 #include "scic_io_request.h"
61 #include "scic_phy.h"
62 #include "scic_port.h"
63 #include "scic_sds_phy.h"
64 #include "scic_sds_port.h"
65 #include "remote_node_context.h"
66 #include "scic_sds_request.h"
67 #include "sci_util.h"
68 #include "scu_event_codes.h"
69 #include "task.h"
70 
71 /**
72  * isci_remote_device_change_state() - This function gets the status of the
73  *    remote_device object.
74  * @isci_device: This parameter points to the isci_remote_device object
75  *
76  * status of the object as a isci_status enum.
77  */
78 void isci_remote_device_change_state(
79 	struct isci_remote_device *isci_device,
80 	enum isci_status status)
81 {
82 	unsigned long flags;
83 
84 	spin_lock_irqsave(&isci_device->state_lock, flags);
85 	isci_device->status = status;
86 	spin_unlock_irqrestore(&isci_device->state_lock, flags);
87 }
88 
89 /**
90  * isci_remote_device_not_ready() - This function is called by the scic when
91  *    the remote device is not ready. We mark the isci device as ready (not
92  *    "ready_for_io") and signal the waiting proccess.
93  * @isci_host: This parameter specifies the isci host object.
94  * @isci_device: This parameter specifies the remote device
95  *
96  */
97 static void isci_remote_device_not_ready(struct isci_host *ihost,
98 				  struct isci_remote_device *idev, u32 reason)
99 {
100 	dev_dbg(&ihost->pdev->dev,
101 		"%s: isci_device = %p\n", __func__, idev);
102 
103 	if (reason == SCIC_REMOTE_DEVICE_NOT_READY_STOP_REQUESTED)
104 		isci_remote_device_change_state(idev, isci_stopping);
105 	else
106 		/* device ready is actually a "not ready for io" state. */
107 		isci_remote_device_change_state(idev, isci_ready);
108 }
109 
110 /**
111  * isci_remote_device_ready() - This function is called by the scic when the
112  *    remote device is ready. We mark the isci device as ready and signal the
113  *    waiting proccess.
114  * @ihost: our valid isci_host
115  * @idev: remote device
116  *
117  */
118 static void isci_remote_device_ready(struct isci_host *ihost, struct isci_remote_device *idev)
119 {
120 	dev_dbg(&ihost->pdev->dev,
121 		"%s: idev = %p\n", __func__, idev);
122 
123 	isci_remote_device_change_state(idev, isci_ready_for_io);
124 	if (test_and_clear_bit(IDEV_START_PENDING, &idev->flags))
125 		wake_up(&ihost->eventq);
126 }
127 
128 /* called once the remote node context is ready to be freed.
129  * The remote device can now report that its stop operation is complete. none
130  */
131 static void rnc_destruct_done(void *_dev)
132 {
133 	struct scic_sds_remote_device *sci_dev = _dev;
134 
135 	BUG_ON(sci_dev->started_request_count != 0);
136 	sci_base_state_machine_change_state(&sci_dev->state_machine,
137 					    SCI_BASE_REMOTE_DEVICE_STATE_STOPPED);
138 }
139 
140 static enum sci_status scic_sds_remote_device_terminate_requests(struct scic_sds_remote_device *sci_dev)
141 {
142 	struct scic_sds_controller *scic = sci_dev->owning_port->owning_controller;
143 	u32 i, request_count = sci_dev->started_request_count;
144 	enum sci_status status  = SCI_SUCCESS;
145 
146 	for (i = 0; i < SCI_MAX_IO_REQUESTS && i < request_count; i++) {
147 		struct scic_sds_request *sci_req;
148 		enum sci_status s;
149 
150 		sci_req = scic->io_request_table[i];
151 		if (!sci_req || sci_req->target_device != sci_dev)
152 			continue;
153 		s = scic_controller_terminate_request(scic, sci_dev, sci_req);
154 		if (s != SCI_SUCCESS)
155 			status = s;
156 	}
157 
158 	return status;
159 }
160 
161 enum sci_status scic_remote_device_stop(struct scic_sds_remote_device *sci_dev,
162 					u32 timeout)
163 {
164 	struct sci_base_state_machine *sm = &sci_dev->state_machine;
165 	enum scic_sds_remote_device_states state = sm->current_state_id;
166 
167 	switch (state) {
168 	case SCI_BASE_REMOTE_DEVICE_STATE_INITIAL:
169 	case SCI_BASE_REMOTE_DEVICE_STATE_FAILED:
170 	case SCI_BASE_REMOTE_DEVICE_STATE_FINAL:
171 	default:
172 		dev_warn(scirdev_to_dev(sci_dev), "%s: in wrong state: %d\n",
173 			 __func__, state);
174 		return SCI_FAILURE_INVALID_STATE;
175 	case SCI_BASE_REMOTE_DEVICE_STATE_STOPPED:
176 		return SCI_SUCCESS;
177 	case SCI_BASE_REMOTE_DEVICE_STATE_STARTING:
178 		/* device not started so there had better be no requests */
179 		BUG_ON(sci_dev->started_request_count != 0);
180 		scic_sds_remote_node_context_destruct(&sci_dev->rnc,
181 						      rnc_destruct_done, sci_dev);
182 		/* Transition to the stopping state and wait for the
183 		 * remote node to complete being posted and invalidated.
184 		 */
185 		sci_base_state_machine_change_state(sm, SCI_BASE_REMOTE_DEVICE_STATE_STOPPING);
186 		return SCI_SUCCESS;
187 	case SCI_BASE_REMOTE_DEVICE_STATE_READY:
188 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_IDLE:
189 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_CMD:
190 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ:
191 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ_ERROR:
192 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_AWAIT_RESET:
193 	case SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_IDLE:
194 	case SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_CMD:
195 		sci_base_state_machine_change_state(sm, SCI_BASE_REMOTE_DEVICE_STATE_STOPPING);
196 		if (sci_dev->started_request_count == 0) {
197 			scic_sds_remote_node_context_destruct(&sci_dev->rnc,
198 							      rnc_destruct_done, sci_dev);
199 			return SCI_SUCCESS;
200 		} else
201 			return scic_sds_remote_device_terminate_requests(sci_dev);
202 		break;
203 	case SCI_BASE_REMOTE_DEVICE_STATE_STOPPING:
204 		/* All requests should have been terminated, but if there is an
205 		 * attempt to stop a device already in the stopping state, then
206 		 * try again to terminate.
207 		 */
208 		return scic_sds_remote_device_terminate_requests(sci_dev);
209 	case SCI_BASE_REMOTE_DEVICE_STATE_RESETTING:
210 		sci_base_state_machine_change_state(sm, SCI_BASE_REMOTE_DEVICE_STATE_STOPPING);
211 		return SCI_SUCCESS;
212 	}
213 }
214 
215 enum sci_status scic_remote_device_reset(struct scic_sds_remote_device *sci_dev)
216 {
217 	struct sci_base_state_machine *sm = &sci_dev->state_machine;
218 	enum scic_sds_remote_device_states state = sm->current_state_id;
219 
220 	switch (state) {
221 	case SCI_BASE_REMOTE_DEVICE_STATE_INITIAL:
222 	case SCI_BASE_REMOTE_DEVICE_STATE_STOPPED:
223 	case SCI_BASE_REMOTE_DEVICE_STATE_STARTING:
224 	case SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_IDLE:
225 	case SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_CMD:
226 	case SCI_BASE_REMOTE_DEVICE_STATE_STOPPING:
227 	case SCI_BASE_REMOTE_DEVICE_STATE_FAILED:
228 	case SCI_BASE_REMOTE_DEVICE_STATE_RESETTING:
229 	case SCI_BASE_REMOTE_DEVICE_STATE_FINAL:
230 	default:
231 		dev_warn(scirdev_to_dev(sci_dev), "%s: in wrong state: %d\n",
232 			 __func__, state);
233 		return SCI_FAILURE_INVALID_STATE;
234 	case SCI_BASE_REMOTE_DEVICE_STATE_READY:
235 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_IDLE:
236 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_CMD:
237 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ:
238 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ_ERROR:
239 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_AWAIT_RESET:
240 		sci_base_state_machine_change_state(sm, SCI_BASE_REMOTE_DEVICE_STATE_RESETTING);
241 		return SCI_SUCCESS;
242 	}
243 }
244 
245 enum sci_status scic_remote_device_reset_complete(struct scic_sds_remote_device *sci_dev)
246 {
247 	struct sci_base_state_machine *sm = &sci_dev->state_machine;
248 	enum scic_sds_remote_device_states state = sm->current_state_id;
249 
250 	if (state != SCI_BASE_REMOTE_DEVICE_STATE_RESETTING) {
251 		dev_warn(scirdev_to_dev(sci_dev), "%s: in wrong state: %d\n",
252 			 __func__, state);
253 		return SCI_FAILURE_INVALID_STATE;
254 	}
255 
256 	sci_base_state_machine_change_state(sm, SCI_BASE_REMOTE_DEVICE_STATE_READY);
257 	return SCI_SUCCESS;
258 }
259 
260 enum sci_status scic_sds_remote_device_suspend(struct scic_sds_remote_device *sci_dev,
261 					       u32 suspend_type)
262 {
263 	struct sci_base_state_machine *sm = &sci_dev->state_machine;
264 	enum scic_sds_remote_device_states state = sm->current_state_id;
265 
266 	if (state != SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_CMD) {
267 		dev_warn(scirdev_to_dev(sci_dev), "%s: in wrong state: %d\n",
268 			 __func__, state);
269 		return SCI_FAILURE_INVALID_STATE;
270 	}
271 
272 	return scic_sds_remote_node_context_suspend(&sci_dev->rnc,
273 						    suspend_type, NULL, NULL);
274 }
275 
276 enum sci_status scic_sds_remote_device_frame_handler(struct scic_sds_remote_device *sci_dev,
277 						     u32 frame_index)
278 {
279 	struct sci_base_state_machine *sm = &sci_dev->state_machine;
280 	enum scic_sds_remote_device_states state = sm->current_state_id;
281 	struct scic_sds_controller *scic = sci_dev->owning_port->owning_controller;
282 	enum sci_status status;
283 
284 	switch (state) {
285 	case SCI_BASE_REMOTE_DEVICE_STATE_INITIAL:
286 	case SCI_BASE_REMOTE_DEVICE_STATE_STOPPED:
287 	case SCI_BASE_REMOTE_DEVICE_STATE_STARTING:
288 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_IDLE:
289 	case SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_IDLE:
290 	case SCI_BASE_REMOTE_DEVICE_STATE_FINAL:
291 	default:
292 		dev_warn(scirdev_to_dev(sci_dev), "%s: in wrong state: %d\n",
293 			 __func__, state);
294 		/* Return the frame back to the controller */
295 		scic_sds_controller_release_frame(scic, frame_index);
296 		return SCI_FAILURE_INVALID_STATE;
297 	case SCI_BASE_REMOTE_DEVICE_STATE_READY:
298 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ_ERROR:
299 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_AWAIT_RESET:
300 	case SCI_BASE_REMOTE_DEVICE_STATE_STOPPING:
301 	case SCI_BASE_REMOTE_DEVICE_STATE_FAILED:
302 	case SCI_BASE_REMOTE_DEVICE_STATE_RESETTING: {
303 		struct scic_sds_request *sci_req;
304 		struct ssp_frame_hdr hdr;
305 		void *frame_header;
306 		ssize_t word_cnt;
307 
308 		status = scic_sds_unsolicited_frame_control_get_header(&scic->uf_control,
309 								       frame_index,
310 								       &frame_header);
311 		if (status != SCI_SUCCESS)
312 			return status;
313 
314 		word_cnt = sizeof(hdr) / sizeof(u32);
315 		sci_swab32_cpy(&hdr, frame_header, word_cnt);
316 
317 		sci_req = scic_request_by_tag(scic, be16_to_cpu(hdr.tag));
318 		if (sci_req && sci_req->target_device == sci_dev) {
319 			/* The IO request is now in charge of releasing the frame */
320 			status = sci_req->state_handlers->frame_handler(sci_req,
321 									frame_index);
322 		} else {
323 			/* We could not map this tag to a valid IO
324 			 * request Just toss the frame and continue
325 			 */
326 			scic_sds_controller_release_frame(scic, frame_index);
327 		}
328 		break;
329 	}
330 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ: {
331 		struct dev_to_host_fis *hdr;
332 
333 		status = scic_sds_unsolicited_frame_control_get_header(&scic->uf_control,
334 								       frame_index,
335 								       (void **)&hdr);
336 		if (status != SCI_SUCCESS)
337 			return status;
338 
339 		if (hdr->fis_type == FIS_SETDEVBITS &&
340 		    (hdr->status & ATA_ERR)) {
341 			sci_dev->not_ready_reason = SCIC_REMOTE_DEVICE_NOT_READY_SATA_SDB_ERROR_FIS_RECEIVED;
342 
343 			/* TODO Check sactive and complete associated IO if any. */
344 			sci_base_state_machine_change_state(sm, SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ_ERROR);
345 		} else if (hdr->fis_type == FIS_REGD2H &&
346 			   (hdr->status & ATA_ERR)) {
347 			/*
348 			 * Some devices return D2H FIS when an NCQ error is detected.
349 			 * Treat this like an SDB error FIS ready reason.
350 			 */
351 			sci_dev->not_ready_reason = SCIC_REMOTE_DEVICE_NOT_READY_SATA_SDB_ERROR_FIS_RECEIVED;
352 			sci_base_state_machine_change_state(&sci_dev->state_machine,
353 							    SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ_ERROR);
354 		} else
355 			status = SCI_FAILURE;
356 
357 		scic_sds_controller_release_frame(scic, frame_index);
358 		break;
359 	}
360 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_CMD:
361 	case SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_CMD:
362 		/* The device does not process any UF received from the hardware while
363 		 * in this state.  All unsolicited frames are forwarded to the io request
364 		 * object.
365 		 */
366 		status = scic_sds_io_request_frame_handler(sci_dev->working_request, frame_index);
367 		break;
368 	}
369 
370 	return status;
371 }
372 
373 static bool is_remote_device_ready(struct scic_sds_remote_device *sci_dev)
374 {
375 
376 	struct sci_base_state_machine *sm = &sci_dev->state_machine;
377 	enum scic_sds_remote_device_states state = sm->current_state_id;
378 
379 	switch (state) {
380 	case SCI_BASE_REMOTE_DEVICE_STATE_READY:
381 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_IDLE:
382 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_CMD:
383 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ:
384 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ_ERROR:
385 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_AWAIT_RESET:
386 	case SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_IDLE:
387 	case SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_CMD:
388 		return true;
389 	default:
390 		return false;
391 	}
392 }
393 
394 enum sci_status scic_sds_remote_device_event_handler(struct scic_sds_remote_device *sci_dev,
395 						     u32 event_code)
396 {
397 	struct sci_base_state_machine *sm = &sci_dev->state_machine;
398 	enum scic_sds_remote_device_states state = sm->current_state_id;
399 	enum sci_status status;
400 
401 	switch (scu_get_event_type(event_code)) {
402 	case SCU_EVENT_TYPE_RNC_OPS_MISC:
403 	case SCU_EVENT_TYPE_RNC_SUSPEND_TX:
404 	case SCU_EVENT_TYPE_RNC_SUSPEND_TX_RX:
405 		status = scic_sds_remote_node_context_event_handler(&sci_dev->rnc, event_code);
406 		break;
407 	case SCU_EVENT_TYPE_PTX_SCHEDULE_EVENT:
408 		if (scu_get_event_code(event_code) == SCU_EVENT_IT_NEXUS_TIMEOUT) {
409 			status = SCI_SUCCESS;
410 
411 			/* Suspend the associated RNC */
412 			scic_sds_remote_node_context_suspend(&sci_dev->rnc,
413 							      SCI_SOFTWARE_SUSPENSION,
414 							      NULL, NULL);
415 
416 			dev_dbg(scirdev_to_dev(sci_dev),
417 				"%s: device: %p event code: %x: %s\n",
418 				__func__, sci_dev, event_code,
419 				is_remote_device_ready(sci_dev)
420 				? "I_T_Nexus_Timeout event"
421 				: "I_T_Nexus_Timeout event in wrong state");
422 
423 			break;
424 		}
425 	/* Else, fall through and treat as unhandled... */
426 	default:
427 		dev_dbg(scirdev_to_dev(sci_dev),
428 			"%s: device: %p event code: %x: %s\n",
429 			__func__, sci_dev, event_code,
430 			is_remote_device_ready(sci_dev)
431 			? "unexpected event"
432 			: "unexpected event in wrong state");
433 		status = SCI_FAILURE_INVALID_STATE;
434 		break;
435 	}
436 
437 	if (status != SCI_SUCCESS)
438 		return status;
439 
440 	if (state == SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_IDLE) {
441 
442 		/* We pick up suspension events to handle specifically to this
443 		 * state. We resume the RNC right away.
444 		 */
445 		if (scu_get_event_type(event_code) == SCU_EVENT_TYPE_RNC_SUSPEND_TX ||
446 		    scu_get_event_type(event_code) == SCU_EVENT_TYPE_RNC_SUSPEND_TX_RX)
447 			status = scic_sds_remote_node_context_resume(&sci_dev->rnc, NULL, NULL);
448 	}
449 
450 	return status;
451 }
452 
453 static void scic_sds_remote_device_start_request(struct scic_sds_remote_device *sci_dev,
454 						 struct scic_sds_request *sci_req,
455 						 enum sci_status status)
456 {
457 	struct scic_sds_port *sci_port = sci_dev->owning_port;
458 
459 	/* cleanup requests that failed after starting on the port */
460 	if (status != SCI_SUCCESS)
461 		scic_sds_port_complete_io(sci_port, sci_dev, sci_req);
462 	else
463 		scic_sds_remote_device_increment_request_count(sci_dev);
464 }
465 
466 enum sci_status scic_sds_remote_device_start_io(struct scic_sds_controller *scic,
467 						struct scic_sds_remote_device *sci_dev,
468 						struct scic_sds_request *sci_req)
469 {
470 	struct sci_base_state_machine *sm = &sci_dev->state_machine;
471 	enum scic_sds_remote_device_states state = sm->current_state_id;
472 	struct scic_sds_port *sci_port = sci_dev->owning_port;
473 	struct isci_request *ireq = sci_req_to_ireq(sci_req);
474 	enum sci_status status;
475 
476 	switch (state) {
477 	case SCI_BASE_REMOTE_DEVICE_STATE_INITIAL:
478 	case SCI_BASE_REMOTE_DEVICE_STATE_STOPPED:
479 	case SCI_BASE_REMOTE_DEVICE_STATE_STARTING:
480 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ_ERROR:
481 	case SCI_BASE_REMOTE_DEVICE_STATE_STOPPING:
482 	case SCI_BASE_REMOTE_DEVICE_STATE_FAILED:
483 	case SCI_BASE_REMOTE_DEVICE_STATE_RESETTING:
484 	case SCI_BASE_REMOTE_DEVICE_STATE_FINAL:
485 	default:
486 		dev_warn(scirdev_to_dev(sci_dev), "%s: in wrong state: %d\n",
487 			 __func__, state);
488 		return SCI_FAILURE_INVALID_STATE;
489 	case SCI_BASE_REMOTE_DEVICE_STATE_READY:
490 		/* attempt to start an io request for this device object. The remote
491 		 * device object will issue the start request for the io and if
492 		 * successful it will start the request for the port object then
493 		 * increment its own request count.
494 		 */
495 		status = scic_sds_port_start_io(sci_port, sci_dev, sci_req);
496 		if (status != SCI_SUCCESS)
497 			return status;
498 
499 		status = scic_sds_remote_node_context_start_io(&sci_dev->rnc, sci_req);
500 		if (status != SCI_SUCCESS)
501 			break;
502 
503 		status = scic_sds_request_start(sci_req);
504 		break;
505 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_IDLE: {
506 		/* handle the start io operation for a sata device that is in
507 		 * the command idle state. - Evalute the type of IO request to
508 		 * be started - If its an NCQ request change to NCQ substate -
509 		 * If its any other command change to the CMD substate
510 		 *
511 		 * If this is a softreset we may want to have a different
512 		 * substate.
513 		 */
514 		enum scic_sds_remote_device_states new_state;
515 		struct sas_task *task = isci_request_access_task(ireq);
516 
517 		status = scic_sds_port_start_io(sci_port, sci_dev, sci_req);
518 		if (status != SCI_SUCCESS)
519 			return status;
520 
521 		status = scic_sds_remote_node_context_start_io(&sci_dev->rnc, sci_req);
522 		if (status != SCI_SUCCESS)
523 			break;
524 
525 		status = sci_req->state_handlers->start_handler(sci_req);
526 		if (status != SCI_SUCCESS)
527 			break;
528 
529 		if (task->ata_task.use_ncq)
530 			new_state = SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ;
531 		else {
532 			sci_dev->working_request = sci_req;
533 			new_state = SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_CMD;
534 		}
535 		sci_base_state_machine_change_state(sm, new_state);
536 		break;
537 	}
538 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ: {
539 		struct sas_task *task = isci_request_access_task(ireq);
540 
541 		if (task->ata_task.use_ncq) {
542 			status = scic_sds_port_start_io(sci_port, sci_dev, sci_req);
543 			if (status != SCI_SUCCESS)
544 				return status;
545 
546 			status = scic_sds_remote_node_context_start_io(&sci_dev->rnc, sci_req);
547 			if (status != SCI_SUCCESS)
548 				break;
549 
550 			status = sci_req->state_handlers->start_handler(sci_req);
551 		} else
552 			return SCI_FAILURE_INVALID_STATE;
553 		break;
554 	}
555 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_AWAIT_RESET:
556 		return SCI_FAILURE_REMOTE_DEVICE_RESET_REQUIRED;
557 	case SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_IDLE:
558 		status = scic_sds_port_start_io(sci_port, sci_dev, sci_req);
559 		if (status != SCI_SUCCESS)
560 			return status;
561 
562 		status = scic_sds_remote_node_context_start_io(&sci_dev->rnc, sci_req);
563 		if (status != SCI_SUCCESS)
564 			break;
565 
566 		status = scic_sds_request_start(sci_req);
567 		if (status != SCI_SUCCESS)
568 			break;
569 
570 		sci_dev->working_request = sci_req;
571 		sci_base_state_machine_change_state(&sci_dev->state_machine,
572 						    SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_CMD);
573 		break;
574 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_CMD:
575 	case SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_CMD:
576 		/* device is already handling a command it can not accept new commands
577 		 * until this one is complete.
578 		 */
579 		return SCI_FAILURE_INVALID_STATE;
580 	}
581 
582 	scic_sds_remote_device_start_request(sci_dev, sci_req, status);
583 	return status;
584 }
585 
586 static enum sci_status common_complete_io(struct scic_sds_port *sci_port,
587 					  struct scic_sds_remote_device *sci_dev,
588 					  struct scic_sds_request *sci_req)
589 {
590 	enum sci_status status;
591 
592 	status = scic_sds_request_complete(sci_req);
593 	if (status != SCI_SUCCESS)
594 		return status;
595 
596 	status = scic_sds_port_complete_io(sci_port, sci_dev, sci_req);
597 	if (status != SCI_SUCCESS)
598 		return status;
599 
600 	scic_sds_remote_device_decrement_request_count(sci_dev);
601 	return status;
602 }
603 
604 enum sci_status scic_sds_remote_device_complete_io(struct scic_sds_controller *scic,
605 						   struct scic_sds_remote_device *sci_dev,
606 						   struct scic_sds_request *sci_req)
607 {
608 	struct sci_base_state_machine *sm = &sci_dev->state_machine;
609 	enum scic_sds_remote_device_states state = sm->current_state_id;
610 	struct scic_sds_port *sci_port = sci_dev->owning_port;
611 	enum sci_status status;
612 
613 	switch (state) {
614 	case SCI_BASE_REMOTE_DEVICE_STATE_INITIAL:
615 	case SCI_BASE_REMOTE_DEVICE_STATE_STOPPED:
616 	case SCI_BASE_REMOTE_DEVICE_STATE_STARTING:
617 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_IDLE:
618 	case SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_IDLE:
619 	case SCI_BASE_REMOTE_DEVICE_STATE_FAILED:
620 	case SCI_BASE_REMOTE_DEVICE_STATE_FINAL:
621 	default:
622 		dev_warn(scirdev_to_dev(sci_dev), "%s: in wrong state: %d\n",
623 			 __func__, state);
624 		return SCI_FAILURE_INVALID_STATE;
625 	case SCI_BASE_REMOTE_DEVICE_STATE_READY:
626 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_AWAIT_RESET:
627 	case SCI_BASE_REMOTE_DEVICE_STATE_RESETTING:
628 		status = common_complete_io(sci_port, sci_dev, sci_req);
629 		break;
630 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_CMD:
631 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ:
632 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ_ERROR:
633 		status = common_complete_io(sci_port, sci_dev, sci_req);
634 		if (status != SCI_SUCCESS)
635 			break;
636 
637 		if (sci_req->sci_status == SCI_FAILURE_REMOTE_DEVICE_RESET_REQUIRED) {
638 			/* This request causes hardware error, device needs to be Lun Reset.
639 			 * So here we force the state machine to IDLE state so the rest IOs
640 			 * can reach RNC state handler, these IOs will be completed by RNC with
641 			 * status of "DEVICE_RESET_REQUIRED", instead of "INVALID STATE".
642 			 */
643 			sci_base_state_machine_change_state(sm, SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_AWAIT_RESET);
644 		} else if (scic_sds_remote_device_get_request_count(sci_dev) == 0)
645 			sci_base_state_machine_change_state(sm, SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_IDLE);
646 		break;
647 	case SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_CMD:
648 		status = common_complete_io(sci_port, sci_dev, sci_req);
649 		if (status != SCI_SUCCESS)
650 			break;
651 		sci_base_state_machine_change_state(sm, SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_IDLE);
652 		break;
653 	case SCI_BASE_REMOTE_DEVICE_STATE_STOPPING:
654 		status = common_complete_io(sci_port, sci_dev, sci_req);
655 		if (status != SCI_SUCCESS)
656 			break;
657 
658 		if (scic_sds_remote_device_get_request_count(sci_dev) == 0)
659 			scic_sds_remote_node_context_destruct(&sci_dev->rnc,
660 							      rnc_destruct_done,
661 							      sci_dev);
662 		break;
663 	}
664 
665 	if (status != SCI_SUCCESS)
666 		dev_err(scirdev_to_dev(sci_dev),
667 			"%s: Port:0x%p Device:0x%p Request:0x%p Status:0x%x "
668 			"could not complete\n", __func__, sci_port,
669 			sci_dev, sci_req, status);
670 
671 	return status;
672 }
673 
674 static void scic_sds_remote_device_continue_request(void *dev)
675 {
676 	struct scic_sds_remote_device *sci_dev = dev;
677 
678 	/* we need to check if this request is still valid to continue. */
679 	if (sci_dev->working_request)
680 		scic_controller_continue_io(sci_dev->working_request);
681 }
682 
683 enum sci_status scic_sds_remote_device_start_task(struct scic_sds_controller *scic,
684 						  struct scic_sds_remote_device *sci_dev,
685 						  struct scic_sds_request *sci_req)
686 {
687 	struct sci_base_state_machine *sm = &sci_dev->state_machine;
688 	enum scic_sds_remote_device_states state = sm->current_state_id;
689 	struct scic_sds_port *sci_port = sci_dev->owning_port;
690 	enum sci_status status;
691 
692 	switch (state) {
693 	case SCI_BASE_REMOTE_DEVICE_STATE_INITIAL:
694 	case SCI_BASE_REMOTE_DEVICE_STATE_STOPPED:
695 	case SCI_BASE_REMOTE_DEVICE_STATE_STARTING:
696 	case SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_IDLE:
697 	case SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_CMD:
698 	case SCI_BASE_REMOTE_DEVICE_STATE_STOPPING:
699 	case SCI_BASE_REMOTE_DEVICE_STATE_FAILED:
700 	case SCI_BASE_REMOTE_DEVICE_STATE_RESETTING:
701 	case SCI_BASE_REMOTE_DEVICE_STATE_FINAL:
702 	default:
703 		dev_warn(scirdev_to_dev(sci_dev), "%s: in wrong state: %d\n",
704 			 __func__, state);
705 		return SCI_FAILURE_INVALID_STATE;
706 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_IDLE:
707 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_CMD:
708 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ:
709 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ_ERROR:
710 	case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_AWAIT_RESET:
711 		status = scic_sds_port_start_io(sci_port, sci_dev, sci_req);
712 		if (status != SCI_SUCCESS)
713 			return status;
714 
715 		status = scic_sds_remote_node_context_start_task(&sci_dev->rnc, sci_req);
716 		if (status != SCI_SUCCESS)
717 			goto out;
718 
719 		status = sci_req->state_handlers->start_handler(sci_req);
720 		if (status != SCI_SUCCESS)
721 			goto out;
722 
723 		/* Note: If the remote device state is not IDLE this will
724 		 * replace the request that probably resulted in the task
725 		 * management request.
726 		 */
727 		sci_dev->working_request = sci_req;
728 		sci_base_state_machine_change_state(sm, SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_CMD);
729 
730 		/* The remote node context must cleanup the TCi to NCQ mapping
731 		 * table.  The only way to do this correctly is to either write
732 		 * to the TLCR register or to invalidate and repost the RNC. In
733 		 * either case the remote node context state machine will take
734 		 * the correct action when the remote node context is suspended
735 		 * and later resumed.
736 		 */
737 		scic_sds_remote_node_context_suspend(&sci_dev->rnc,
738 				SCI_SOFTWARE_SUSPENSION, NULL, NULL);
739 		scic_sds_remote_node_context_resume(&sci_dev->rnc,
740 				scic_sds_remote_device_continue_request,
741 						    sci_dev);
742 
743 	out:
744 		scic_sds_remote_device_start_request(sci_dev, sci_req, status);
745 		/* We need to let the controller start request handler know that
746 		 * it can't post TC yet. We will provide a callback function to
747 		 * post TC when RNC gets resumed.
748 		 */
749 		return SCI_FAILURE_RESET_DEVICE_PARTIAL_SUCCESS;
750 	case SCI_BASE_REMOTE_DEVICE_STATE_READY:
751 		status = scic_sds_port_start_io(sci_port, sci_dev, sci_req);
752 		if (status != SCI_SUCCESS)
753 			return status;
754 
755 		status = scic_sds_remote_node_context_start_task(&sci_dev->rnc, sci_req);
756 		if (status != SCI_SUCCESS)
757 			break;
758 
759 		status = scic_sds_request_start(sci_req);
760 		break;
761 	}
762 	scic_sds_remote_device_start_request(sci_dev, sci_req, status);
763 
764 	return status;
765 }
766 
767 /**
768  *
769  * @sci_dev:
770  * @request:
771  *
772  * This method takes the request and bulids an appropriate SCU context for the
773  * request and then requests the controller to post the request. none
774  */
775 void scic_sds_remote_device_post_request(
776 	struct scic_sds_remote_device *sci_dev,
777 	u32 request)
778 {
779 	u32 context;
780 
781 	context = scic_sds_remote_device_build_command_context(sci_dev, request);
782 
783 	scic_sds_controller_post_request(
784 		scic_sds_remote_device_get_controller(sci_dev),
785 		context
786 		);
787 }
788 
789 /* called once the remote node context has transisitioned to a
790  * ready state.  This is the indication that the remote device object can also
791  * transition to ready.
792  */
793 static void remote_device_resume_done(void *_dev)
794 {
795 	struct scic_sds_remote_device *sci_dev = _dev;
796 
797 	if (is_remote_device_ready(sci_dev))
798 		return;
799 
800 	/* go 'ready' if we are not already in a ready state */
801 	sci_base_state_machine_change_state(&sci_dev->state_machine,
802 					    SCI_BASE_REMOTE_DEVICE_STATE_READY);
803 }
804 
805 static void scic_sds_stp_remote_device_ready_idle_substate_resume_complete_handler(void *_dev)
806 {
807 	struct scic_sds_remote_device *sci_dev = _dev;
808 	struct isci_remote_device *idev = sci_dev_to_idev(sci_dev);
809 	struct scic_sds_controller *scic = sci_dev->owning_port->owning_controller;
810 
811 	/* For NCQ operation we do not issue a isci_remote_device_not_ready().
812 	 * As a result, avoid sending the ready notification.
813 	 */
814 	if (sci_dev->state_machine.previous_state_id != SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ)
815 		isci_remote_device_ready(scic_to_ihost(scic), idev);
816 }
817 
818 static void scic_sds_remote_device_initial_state_enter(void *object)
819 {
820 	struct scic_sds_remote_device *sci_dev = object;
821 
822 	/* Initial state is a transitional state to the stopped state */
823 	sci_base_state_machine_change_state(&sci_dev->state_machine,
824 					    SCI_BASE_REMOTE_DEVICE_STATE_STOPPED);
825 }
826 
827 /**
828  * scic_remote_device_destruct() - free remote node context and destruct
829  * @remote_device: This parameter specifies the remote device to be destructed.
830  *
831  * Remote device objects are a limited resource.  As such, they must be
832  * protected.  Thus calls to construct and destruct are mutually exclusive and
833  * non-reentrant. The return value shall indicate if the device was
834  * successfully destructed or if some failure occurred. enum sci_status This value
835  * is returned if the device is successfully destructed.
836  * SCI_FAILURE_INVALID_REMOTE_DEVICE This value is returned if the supplied
837  * device isn't valid (e.g. it's already been destoryed, the handle isn't
838  * valid, etc.).
839  */
840 static enum sci_status scic_remote_device_destruct(struct scic_sds_remote_device *sci_dev)
841 {
842 	struct sci_base_state_machine *sm = &sci_dev->state_machine;
843 	enum scic_sds_remote_device_states state = sm->current_state_id;
844 	struct scic_sds_controller *scic;
845 
846 	if (state != SCI_BASE_REMOTE_DEVICE_STATE_STOPPED) {
847 		dev_warn(scirdev_to_dev(sci_dev), "%s: in wrong state: %d\n",
848 			 __func__, state);
849 		return SCI_FAILURE_INVALID_STATE;
850 	}
851 
852 	scic = sci_dev->owning_port->owning_controller;
853 	scic_sds_controller_free_remote_node_context(scic, sci_dev,
854 						     sci_dev->rnc.remote_node_index);
855 	sci_dev->rnc.remote_node_index = SCIC_SDS_REMOTE_NODE_CONTEXT_INVALID_INDEX;
856 	sci_base_state_machine_change_state(sm, SCI_BASE_REMOTE_DEVICE_STATE_FINAL);
857 
858 	return SCI_SUCCESS;
859 }
860 
861 /**
862  * isci_remote_device_deconstruct() - This function frees an isci_remote_device.
863  * @ihost: This parameter specifies the isci host object.
864  * @idev: This parameter specifies the remote device to be freed.
865  *
866  */
867 static void isci_remote_device_deconstruct(struct isci_host *ihost, struct isci_remote_device *idev)
868 {
869 	dev_dbg(&ihost->pdev->dev,
870 		"%s: isci_device = %p\n", __func__, idev);
871 
872 	/* There should not be any outstanding io's. All paths to
873 	 * here should go through isci_remote_device_nuke_requests.
874 	 * If we hit this condition, we will need a way to complete
875 	 * io requests in process */
876 	while (!list_empty(&idev->reqs_in_process)) {
877 
878 		dev_err(&ihost->pdev->dev,
879 			"%s: ** request list not empty! **\n", __func__);
880 		BUG();
881 	}
882 
883 	scic_remote_device_destruct(&idev->sci);
884 	idev->domain_dev->lldd_dev = NULL;
885 	idev->domain_dev = NULL;
886 	idev->isci_port = NULL;
887 	list_del_init(&idev->node);
888 
889 	clear_bit(IDEV_START_PENDING, &idev->flags);
890 	clear_bit(IDEV_STOP_PENDING, &idev->flags);
891 	clear_bit(IDEV_EH, &idev->flags);
892 	wake_up(&ihost->eventq);
893 }
894 
895 /**
896  * isci_remote_device_stop_complete() - This function is called by the scic
897  *    when the remote device stop has completed. We mark the isci device as not
898  *    ready and remove the isci remote device.
899  * @ihost: This parameter specifies the isci host object.
900  * @idev: This parameter specifies the remote device.
901  * @status: This parameter specifies status of the completion.
902  *
903  */
904 static void isci_remote_device_stop_complete(struct isci_host *ihost,
905 					     struct isci_remote_device *idev)
906 {
907 	dev_dbg(&ihost->pdev->dev, "%s: complete idev = %p\n", __func__, idev);
908 
909 	isci_remote_device_change_state(idev, isci_stopped);
910 
911 	/* after stop, we can tear down resources. */
912 	isci_remote_device_deconstruct(ihost, idev);
913 }
914 
915 static void scic_sds_remote_device_stopped_state_enter(void *object)
916 {
917 	struct scic_sds_remote_device *sci_dev = object;
918 	struct scic_sds_controller *scic = sci_dev->owning_port->owning_controller;
919 	struct isci_remote_device *idev = sci_dev_to_idev(sci_dev);
920 	u32 prev_state;
921 
922 	/* If we are entering from the stopping state let the SCI User know that
923 	 * the stop operation has completed.
924 	 */
925 	prev_state = sci_dev->state_machine.previous_state_id;
926 	if (prev_state == SCI_BASE_REMOTE_DEVICE_STATE_STOPPING)
927 		isci_remote_device_stop_complete(scic_to_ihost(scic), idev);
928 
929 	scic_sds_controller_remote_device_stopped(scic, sci_dev);
930 }
931 
932 static void scic_sds_remote_device_starting_state_enter(void *object)
933 {
934 	struct scic_sds_remote_device *sci_dev = object;
935 	struct scic_sds_controller *scic = scic_sds_remote_device_get_controller(sci_dev);
936 	struct isci_host *ihost = scic_to_ihost(scic);
937 	struct isci_remote_device *idev = sci_dev_to_idev(sci_dev);
938 
939 	isci_remote_device_not_ready(ihost, idev,
940 				     SCIC_REMOTE_DEVICE_NOT_READY_START_REQUESTED);
941 }
942 
943 static void scic_sds_remote_device_ready_state_enter(void *object)
944 {
945 	struct scic_sds_remote_device *sci_dev = object;
946 	struct scic_sds_controller *scic = sci_dev->owning_port->owning_controller;
947 	struct isci_remote_device *idev = sci_dev_to_idev(sci_dev);
948 	struct domain_device *dev = idev->domain_dev;
949 
950 	scic->remote_device_sequence[sci_dev->rnc.remote_node_index]++;
951 
952 	if (dev->dev_type == SATA_DEV || (dev->tproto & SAS_PROTOCOL_SATA)) {
953 		sci_base_state_machine_change_state(&sci_dev->state_machine,
954 						    SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_IDLE);
955 	} else if (dev_is_expander(dev)) {
956 		sci_base_state_machine_change_state(&sci_dev->state_machine,
957 						    SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_IDLE);
958 	} else
959 		isci_remote_device_ready(scic_to_ihost(scic), idev);
960 }
961 
962 static void scic_sds_remote_device_ready_state_exit(void *object)
963 {
964 	struct scic_sds_remote_device *sci_dev = object;
965 	struct domain_device *dev = sci_dev_to_domain(sci_dev);
966 
967 	if (dev->dev_type == SAS_END_DEV) {
968 		struct scic_sds_controller *scic = sci_dev->owning_port->owning_controller;
969 		struct isci_remote_device *idev = sci_dev_to_idev(sci_dev);
970 
971 		isci_remote_device_not_ready(scic_to_ihost(scic), idev,
972 					     SCIC_REMOTE_DEVICE_NOT_READY_STOP_REQUESTED);
973 	}
974 }
975 
976 static void scic_sds_remote_device_resetting_state_enter(void *object)
977 {
978 	struct scic_sds_remote_device *sci_dev = object;
979 
980 	scic_sds_remote_node_context_suspend(
981 		&sci_dev->rnc, SCI_SOFTWARE_SUSPENSION, NULL, NULL);
982 }
983 
984 static void scic_sds_remote_device_resetting_state_exit(void *object)
985 {
986 	struct scic_sds_remote_device *sci_dev = object;
987 
988 	scic_sds_remote_node_context_resume(&sci_dev->rnc, NULL, NULL);
989 }
990 
991 static void scic_sds_stp_remote_device_ready_idle_substate_enter(void *object)
992 {
993 	struct scic_sds_remote_device *sci_dev = object;
994 
995 	sci_dev->working_request = NULL;
996 	if (scic_sds_remote_node_context_is_ready(&sci_dev->rnc)) {
997 		/*
998 		 * Since the RNC is ready, it's alright to finish completion
999 		 * processing (e.g. signal the remote device is ready). */
1000 		scic_sds_stp_remote_device_ready_idle_substate_resume_complete_handler(sci_dev);
1001 	} else {
1002 		scic_sds_remote_node_context_resume(&sci_dev->rnc,
1003 			scic_sds_stp_remote_device_ready_idle_substate_resume_complete_handler,
1004 			sci_dev);
1005 	}
1006 }
1007 
1008 static void scic_sds_stp_remote_device_ready_cmd_substate_enter(void *object)
1009 {
1010 	struct scic_sds_remote_device *sci_dev = object;
1011 	struct scic_sds_controller *scic = scic_sds_remote_device_get_controller(sci_dev);
1012 
1013 	BUG_ON(sci_dev->working_request == NULL);
1014 
1015 	isci_remote_device_not_ready(scic_to_ihost(scic), sci_dev_to_idev(sci_dev),
1016 				     SCIC_REMOTE_DEVICE_NOT_READY_SATA_REQUEST_STARTED);
1017 }
1018 
1019 static void scic_sds_stp_remote_device_ready_ncq_error_substate_enter(void *object)
1020 {
1021 	struct scic_sds_remote_device *sci_dev = object;
1022 	struct scic_sds_controller *scic = scic_sds_remote_device_get_controller(sci_dev);
1023 	struct isci_remote_device *idev = sci_dev_to_idev(sci_dev);
1024 
1025 	if (sci_dev->not_ready_reason == SCIC_REMOTE_DEVICE_NOT_READY_SATA_SDB_ERROR_FIS_RECEIVED)
1026 		isci_remote_device_not_ready(scic_to_ihost(scic), idev,
1027 					     sci_dev->not_ready_reason);
1028 }
1029 
1030 static void scic_sds_smp_remote_device_ready_idle_substate_enter(void *object)
1031 {
1032 	struct scic_sds_remote_device *sci_dev = object;
1033 	struct scic_sds_controller *scic = scic_sds_remote_device_get_controller(sci_dev);
1034 
1035 	isci_remote_device_ready(scic_to_ihost(scic), sci_dev_to_idev(sci_dev));
1036 }
1037 
1038 static void scic_sds_smp_remote_device_ready_cmd_substate_enter(void *object)
1039 {
1040 	struct scic_sds_remote_device *sci_dev = object;
1041 	struct scic_sds_controller *scic = scic_sds_remote_device_get_controller(sci_dev);
1042 
1043 	BUG_ON(sci_dev->working_request == NULL);
1044 
1045 	isci_remote_device_not_ready(scic_to_ihost(scic), sci_dev_to_idev(sci_dev),
1046 				     SCIC_REMOTE_DEVICE_NOT_READY_SMP_REQUEST_STARTED);
1047 }
1048 
1049 static void scic_sds_smp_remote_device_ready_cmd_substate_exit(void *object)
1050 {
1051 	struct scic_sds_remote_device *sci_dev = object;
1052 
1053 	sci_dev->working_request = NULL;
1054 }
1055 
1056 static const struct sci_base_state scic_sds_remote_device_state_table[] = {
1057 	[SCI_BASE_REMOTE_DEVICE_STATE_INITIAL] = {
1058 		.enter_state = scic_sds_remote_device_initial_state_enter,
1059 	},
1060 	[SCI_BASE_REMOTE_DEVICE_STATE_STOPPED] = {
1061 		.enter_state = scic_sds_remote_device_stopped_state_enter,
1062 	},
1063 	[SCI_BASE_REMOTE_DEVICE_STATE_STARTING] = {
1064 		.enter_state = scic_sds_remote_device_starting_state_enter,
1065 	},
1066 	[SCI_BASE_REMOTE_DEVICE_STATE_READY] = {
1067 		.enter_state = scic_sds_remote_device_ready_state_enter,
1068 		.exit_state  = scic_sds_remote_device_ready_state_exit
1069 	},
1070 	[SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_IDLE] = {
1071 		.enter_state = scic_sds_stp_remote_device_ready_idle_substate_enter,
1072 	},
1073 	[SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_CMD] = {
1074 		.enter_state = scic_sds_stp_remote_device_ready_cmd_substate_enter,
1075 	},
1076 	[SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ] = { },
1077 	[SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ_ERROR] = {
1078 		.enter_state = scic_sds_stp_remote_device_ready_ncq_error_substate_enter,
1079 	},
1080 	[SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_AWAIT_RESET] = { },
1081 	[SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_IDLE] = {
1082 		.enter_state = scic_sds_smp_remote_device_ready_idle_substate_enter,
1083 	},
1084 	[SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_CMD] = {
1085 		.enter_state = scic_sds_smp_remote_device_ready_cmd_substate_enter,
1086 		.exit_state  = scic_sds_smp_remote_device_ready_cmd_substate_exit,
1087 	},
1088 	[SCI_BASE_REMOTE_DEVICE_STATE_STOPPING] = { },
1089 	[SCI_BASE_REMOTE_DEVICE_STATE_FAILED] = { },
1090 	[SCI_BASE_REMOTE_DEVICE_STATE_RESETTING] = {
1091 		.enter_state = scic_sds_remote_device_resetting_state_enter,
1092 		.exit_state  = scic_sds_remote_device_resetting_state_exit
1093 	},
1094 	[SCI_BASE_REMOTE_DEVICE_STATE_FINAL] = { },
1095 };
1096 
1097 /**
1098  * scic_remote_device_construct() - common construction
1099  * @sci_port: SAS/SATA port through which this device is accessed.
1100  * @sci_dev: remote device to construct
1101  *
1102  * This routine just performs benign initialization and does not
1103  * allocate the remote_node_context which is left to
1104  * scic_remote_device_[de]a_construct().  scic_remote_device_destruct()
1105  * frees the remote_node_context(s) for the device.
1106  */
1107 static void scic_remote_device_construct(struct scic_sds_port *sci_port,
1108 				  struct scic_sds_remote_device *sci_dev)
1109 {
1110 	sci_dev->owning_port = sci_port;
1111 	sci_dev->started_request_count = 0;
1112 
1113 	sci_base_state_machine_construct(
1114 		&sci_dev->state_machine,
1115 		sci_dev,
1116 		scic_sds_remote_device_state_table,
1117 		SCI_BASE_REMOTE_DEVICE_STATE_INITIAL
1118 		);
1119 
1120 	sci_base_state_machine_start(
1121 		&sci_dev->state_machine
1122 		);
1123 
1124 	scic_sds_remote_node_context_construct(&sci_dev->rnc,
1125 					       SCIC_SDS_REMOTE_NODE_CONTEXT_INVALID_INDEX);
1126 }
1127 
1128 /**
1129  * scic_remote_device_da_construct() - construct direct attached device.
1130  *
1131  * The information (e.g. IAF, Signature FIS, etc.) necessary to build
1132  * the device is known to the SCI Core since it is contained in the
1133  * scic_phy object.  Remote node context(s) is/are a global resource
1134  * allocated by this routine, freed by scic_remote_device_destruct().
1135  *
1136  * Returns:
1137  * SCI_FAILURE_DEVICE_EXISTS - device has already been constructed.
1138  * SCI_FAILURE_UNSUPPORTED_PROTOCOL - e.g. sas device attached to
1139  * sata-only controller instance.
1140  * SCI_FAILURE_INSUFFICIENT_RESOURCES - remote node contexts exhausted.
1141  */
1142 static enum sci_status scic_remote_device_da_construct(struct scic_sds_port *sci_port,
1143 						       struct scic_sds_remote_device *sci_dev)
1144 {
1145 	enum sci_status status;
1146 	struct domain_device *dev = sci_dev_to_domain(sci_dev);
1147 
1148 	scic_remote_device_construct(sci_port, sci_dev);
1149 
1150 	/*
1151 	 * This information is request to determine how many remote node context
1152 	 * entries will be needed to store the remote node.
1153 	 */
1154 	sci_dev->is_direct_attached = true;
1155 	status = scic_sds_controller_allocate_remote_node_context(sci_port->owning_controller,
1156 								  sci_dev,
1157 								  &sci_dev->rnc.remote_node_index);
1158 
1159 	if (status != SCI_SUCCESS)
1160 		return status;
1161 
1162 	if (dev->dev_type == SAS_END_DEV || dev->dev_type == SATA_DEV ||
1163 	    (dev->tproto & SAS_PROTOCOL_STP) || dev_is_expander(dev))
1164 		/* pass */;
1165 	else
1166 		return SCI_FAILURE_UNSUPPORTED_PROTOCOL;
1167 
1168 	sci_dev->connection_rate = scic_sds_port_get_max_allowed_speed(sci_port);
1169 
1170 	/* / @todo Should I assign the port width by reading all of the phys on the port? */
1171 	sci_dev->device_port_width = 1;
1172 
1173 	return SCI_SUCCESS;
1174 }
1175 
1176 /**
1177  * scic_remote_device_ea_construct() - construct expander attached device
1178  *
1179  * Remote node context(s) is/are a global resource allocated by this
1180  * routine, freed by scic_remote_device_destruct().
1181  *
1182  * Returns:
1183  * SCI_FAILURE_DEVICE_EXISTS - device has already been constructed.
1184  * SCI_FAILURE_UNSUPPORTED_PROTOCOL - e.g. sas device attached to
1185  * sata-only controller instance.
1186  * SCI_FAILURE_INSUFFICIENT_RESOURCES - remote node contexts exhausted.
1187  */
1188 static enum sci_status scic_remote_device_ea_construct(struct scic_sds_port *sci_port,
1189 						       struct scic_sds_remote_device *sci_dev)
1190 {
1191 	struct domain_device *dev = sci_dev_to_domain(sci_dev);
1192 	enum sci_status status;
1193 
1194 	scic_remote_device_construct(sci_port, sci_dev);
1195 
1196 	status = scic_sds_controller_allocate_remote_node_context(sci_port->owning_controller,
1197 								  sci_dev,
1198 								  &sci_dev->rnc.remote_node_index);
1199 	if (status != SCI_SUCCESS)
1200 		return status;
1201 
1202 	if (dev->dev_type == SAS_END_DEV || dev->dev_type == SATA_DEV ||
1203 	    (dev->tproto & SAS_PROTOCOL_STP) || dev_is_expander(dev))
1204 		/* pass */;
1205 	else
1206 		return SCI_FAILURE_UNSUPPORTED_PROTOCOL;
1207 
1208 	/*
1209 	 * For SAS-2 the physical link rate is actually a logical link
1210 	 * rate that incorporates multiplexing.  The SCU doesn't
1211 	 * incorporate multiplexing and for the purposes of the
1212 	 * connection the logical link rate is that same as the
1213 	 * physical.  Furthermore, the SAS-2 and SAS-1.1 fields overlay
1214 	 * one another, so this code works for both situations. */
1215 	sci_dev->connection_rate = min_t(u16, scic_sds_port_get_max_allowed_speed(sci_port),
1216 					 dev->linkrate);
1217 
1218 	/* / @todo Should I assign the port width by reading all of the phys on the port? */
1219 	sci_dev->device_port_width = 1;
1220 
1221 	return SCI_SUCCESS;
1222 }
1223 
1224 /**
1225  * scic_remote_device_start() - This method will start the supplied remote
1226  *    device.  This method enables normal IO requests to flow through to the
1227  *    remote device.
1228  * @remote_device: This parameter specifies the device to be started.
1229  * @timeout: This parameter specifies the number of milliseconds in which the
1230  *    start operation should complete.
1231  *
1232  * An indication of whether the device was successfully started. SCI_SUCCESS
1233  * This value is returned if the device was successfully started.
1234  * SCI_FAILURE_INVALID_PHY This value is returned if the user attempts to start
1235  * the device when there have been no phys added to it.
1236  */
1237 static enum sci_status scic_remote_device_start(struct scic_sds_remote_device *sci_dev,
1238 						u32 timeout)
1239 {
1240 	struct sci_base_state_machine *sm = &sci_dev->state_machine;
1241 	enum scic_sds_remote_device_states state = sm->current_state_id;
1242 	enum sci_status status;
1243 
1244 	if (state != SCI_BASE_REMOTE_DEVICE_STATE_STOPPED) {
1245 		dev_warn(scirdev_to_dev(sci_dev), "%s: in wrong state: %d\n",
1246 			 __func__, state);
1247 		return SCI_FAILURE_INVALID_STATE;
1248 	}
1249 
1250 	status = scic_sds_remote_node_context_resume(&sci_dev->rnc,
1251 						     remote_device_resume_done,
1252 						     sci_dev);
1253 	if (status != SCI_SUCCESS)
1254 		return status;
1255 
1256 	sci_base_state_machine_change_state(sm, SCI_BASE_REMOTE_DEVICE_STATE_STARTING);
1257 
1258 	return SCI_SUCCESS;
1259 }
1260 
1261 static enum sci_status isci_remote_device_construct(struct isci_port *iport,
1262 						    struct isci_remote_device *idev)
1263 {
1264 	struct scic_sds_port *sci_port = &iport->sci;
1265 	struct isci_host *ihost = iport->isci_host;
1266 	struct domain_device *dev = idev->domain_dev;
1267 	enum sci_status status;
1268 
1269 	if (dev->parent && dev_is_expander(dev->parent))
1270 		status = scic_remote_device_ea_construct(sci_port, &idev->sci);
1271 	else
1272 		status = scic_remote_device_da_construct(sci_port, &idev->sci);
1273 
1274 	if (status != SCI_SUCCESS) {
1275 		dev_dbg(&ihost->pdev->dev, "%s: construct failed: %d\n",
1276 			__func__, status);
1277 
1278 		return status;
1279 	}
1280 
1281 	/* start the device. */
1282 	status = scic_remote_device_start(&idev->sci, ISCI_REMOTE_DEVICE_START_TIMEOUT);
1283 
1284 	if (status != SCI_SUCCESS)
1285 		dev_warn(&ihost->pdev->dev, "remote device start failed: %d\n",
1286 			 status);
1287 
1288 	return status;
1289 }
1290 
1291 void isci_remote_device_nuke_requests(struct isci_host *ihost, struct isci_remote_device *idev)
1292 {
1293 	DECLARE_COMPLETION_ONSTACK(aborted_task_completion);
1294 
1295 	dev_dbg(&ihost->pdev->dev,
1296 		"%s: idev = %p\n", __func__, idev);
1297 
1298 	/* Cleanup all requests pending for this device. */
1299 	isci_terminate_pending_requests(ihost, idev, terminating);
1300 
1301 	dev_dbg(&ihost->pdev->dev,
1302 		"%s: idev = %p, done\n", __func__, idev);
1303 }
1304 
1305 /**
1306  * This function builds the isci_remote_device when a libsas dev_found message
1307  *    is received.
1308  * @isci_host: This parameter specifies the isci host object.
1309  * @port: This parameter specifies the isci_port conected to this device.
1310  *
1311  * pointer to new isci_remote_device.
1312  */
1313 static struct isci_remote_device *
1314 isci_remote_device_alloc(struct isci_host *ihost, struct isci_port *iport)
1315 {
1316 	struct isci_remote_device *idev;
1317 	int i;
1318 
1319 	for (i = 0; i < SCI_MAX_REMOTE_DEVICES; i++) {
1320 		idev = &ihost->devices[i];
1321 		if (!test_and_set_bit(IDEV_ALLOCATED, &idev->flags))
1322 			break;
1323 	}
1324 
1325 	if (i >= SCI_MAX_REMOTE_DEVICES) {
1326 		dev_warn(&ihost->pdev->dev, "%s: failed\n", __func__);
1327 		return NULL;
1328 	}
1329 
1330 	if (WARN_ONCE(!list_empty(&idev->reqs_in_process), "found requests in process\n"))
1331 		return NULL;
1332 
1333 	if (WARN_ONCE(!list_empty(&idev->node), "found non-idle remote device\n"))
1334 		return NULL;
1335 
1336 	isci_remote_device_change_state(idev, isci_freed);
1337 
1338 	return idev;
1339 }
1340 
1341 /**
1342  * isci_remote_device_stop() - This function is called internally to stop the
1343  *    remote device.
1344  * @isci_host: This parameter specifies the isci host object.
1345  * @isci_device: This parameter specifies the remote device.
1346  *
1347  * The status of the scic request to stop.
1348  */
1349 enum sci_status isci_remote_device_stop(struct isci_host *ihost, struct isci_remote_device *idev)
1350 {
1351 	enum sci_status status;
1352 	unsigned long flags;
1353 
1354 	dev_dbg(&ihost->pdev->dev,
1355 		"%s: isci_device = %p\n", __func__, idev);
1356 
1357 	isci_remote_device_change_state(idev, isci_stopping);
1358 
1359 	/* Kill all outstanding requests. */
1360 	isci_remote_device_nuke_requests(ihost, idev);
1361 
1362 	set_bit(IDEV_STOP_PENDING, &idev->flags);
1363 
1364 	spin_lock_irqsave(&ihost->scic_lock, flags);
1365 	status = scic_remote_device_stop(&idev->sci, 50);
1366 	spin_unlock_irqrestore(&ihost->scic_lock, flags);
1367 
1368 	/* Wait for the stop complete callback. */
1369 	if (status == SCI_SUCCESS) {
1370 		wait_for_device_stop(ihost, idev);
1371 		clear_bit(IDEV_ALLOCATED, &idev->flags);
1372 	}
1373 
1374 	dev_dbg(&ihost->pdev->dev,
1375 		"%s: idev = %p - after completion wait\n",
1376 		__func__, idev);
1377 
1378 	return status;
1379 }
1380 
1381 /**
1382  * isci_remote_device_gone() - This function is called by libsas when a domain
1383  *    device is removed.
1384  * @domain_device: This parameter specifies the libsas domain device.
1385  *
1386  */
1387 void isci_remote_device_gone(struct domain_device *dev)
1388 {
1389 	struct isci_host *ihost = dev_to_ihost(dev);
1390 	struct isci_remote_device *idev = dev->lldd_dev;
1391 
1392 	dev_dbg(&ihost->pdev->dev,
1393 		"%s: domain_device = %p, isci_device = %p, isci_port = %p\n",
1394 		__func__, dev, idev, idev->isci_port);
1395 
1396 	isci_remote_device_stop(ihost, idev);
1397 }
1398 
1399 
1400 /**
1401  * isci_remote_device_found() - This function is called by libsas when a remote
1402  *    device is discovered. A remote device object is created and started. the
1403  *    function then sleeps until the sci core device started message is
1404  *    received.
1405  * @domain_device: This parameter specifies the libsas domain device.
1406  *
1407  * status, zero indicates success.
1408  */
1409 int isci_remote_device_found(struct domain_device *domain_dev)
1410 {
1411 	struct isci_host *isci_host = dev_to_ihost(domain_dev);
1412 	struct isci_port *isci_port;
1413 	struct isci_phy *isci_phy;
1414 	struct asd_sas_port *sas_port;
1415 	struct asd_sas_phy *sas_phy;
1416 	struct isci_remote_device *isci_device;
1417 	enum sci_status status;
1418 
1419 	dev_dbg(&isci_host->pdev->dev,
1420 		"%s: domain_device = %p\n", __func__, domain_dev);
1421 
1422 	wait_for_start(isci_host);
1423 
1424 	sas_port = domain_dev->port;
1425 	sas_phy = list_first_entry(&sas_port->phy_list, struct asd_sas_phy,
1426 				   port_phy_el);
1427 	isci_phy = to_isci_phy(sas_phy);
1428 	isci_port = isci_phy->isci_port;
1429 
1430 	/* we are being called for a device on this port,
1431 	 * so it has to come up eventually
1432 	 */
1433 	wait_for_completion(&isci_port->start_complete);
1434 
1435 	if ((isci_stopping == isci_port_get_state(isci_port)) ||
1436 	    (isci_stopped == isci_port_get_state(isci_port)))
1437 		return -ENODEV;
1438 
1439 	isci_device = isci_remote_device_alloc(isci_host, isci_port);
1440 	if (!isci_device)
1441 		return -ENODEV;
1442 
1443 	INIT_LIST_HEAD(&isci_device->node);
1444 	domain_dev->lldd_dev = isci_device;
1445 	isci_device->domain_dev = domain_dev;
1446 	isci_device->isci_port = isci_port;
1447 	isci_remote_device_change_state(isci_device, isci_starting);
1448 
1449 
1450 	spin_lock_irq(&isci_host->scic_lock);
1451 	list_add_tail(&isci_device->node, &isci_port->remote_dev_list);
1452 
1453 	set_bit(IDEV_START_PENDING, &isci_device->flags);
1454 	status = isci_remote_device_construct(isci_port, isci_device);
1455 	spin_unlock_irq(&isci_host->scic_lock);
1456 
1457 	dev_dbg(&isci_host->pdev->dev,
1458 		"%s: isci_device = %p\n",
1459 		__func__, isci_device);
1460 
1461 	if (status != SCI_SUCCESS) {
1462 
1463 		spin_lock_irq(&isci_host->scic_lock);
1464 		isci_remote_device_deconstruct(
1465 			isci_host,
1466 			isci_device
1467 			);
1468 		spin_unlock_irq(&isci_host->scic_lock);
1469 		return -ENODEV;
1470 	}
1471 
1472 	/* wait for the device ready callback. */
1473 	wait_for_device_start(isci_host, isci_device);
1474 
1475 	return 0;
1476 }
1477 /**
1478  * isci_device_is_reset_pending() - This function will check if there is any
1479  *    pending reset condition on the device.
1480  * @request: This parameter is the isci_device object.
1481  *
1482  * true if there is a reset pending for the device.
1483  */
1484 bool isci_device_is_reset_pending(
1485 	struct isci_host *isci_host,
1486 	struct isci_remote_device *isci_device)
1487 {
1488 	struct isci_request *isci_request;
1489 	struct isci_request *tmp_req;
1490 	bool reset_is_pending = false;
1491 	unsigned long flags;
1492 
1493 	dev_dbg(&isci_host->pdev->dev,
1494 		"%s: isci_device = %p\n", __func__, isci_device);
1495 
1496 	spin_lock_irqsave(&isci_host->scic_lock, flags);
1497 
1498 	/* Check for reset on all pending requests. */
1499 	list_for_each_entry_safe(isci_request, tmp_req,
1500 				 &isci_device->reqs_in_process, dev_node) {
1501 		dev_dbg(&isci_host->pdev->dev,
1502 			"%s: isci_device = %p request = %p\n",
1503 			__func__, isci_device, isci_request);
1504 
1505 		if (isci_request->ttype == io_task) {
1506 			struct sas_task *task = isci_request_access_task(
1507 				isci_request);
1508 
1509 			spin_lock(&task->task_state_lock);
1510 			if (task->task_state_flags & SAS_TASK_NEED_DEV_RESET)
1511 				reset_is_pending = true;
1512 			spin_unlock(&task->task_state_lock);
1513 		}
1514 	}
1515 
1516 	spin_unlock_irqrestore(&isci_host->scic_lock, flags);
1517 
1518 	dev_dbg(&isci_host->pdev->dev,
1519 		"%s: isci_device = %p reset_is_pending = %d\n",
1520 		__func__, isci_device, reset_is_pending);
1521 
1522 	return reset_is_pending;
1523 }
1524 
1525 /**
1526  * isci_device_clear_reset_pending() - This function will clear if any pending
1527  *    reset condition flags on the device.
1528  * @request: This parameter is the isci_device object.
1529  *
1530  * true if there is a reset pending for the device.
1531  */
1532 void isci_device_clear_reset_pending(struct isci_host *ihost, struct isci_remote_device *idev)
1533 {
1534 	struct isci_request *isci_request;
1535 	struct isci_request *tmp_req;
1536 	unsigned long flags = 0;
1537 
1538 	dev_dbg(&ihost->pdev->dev, "%s: idev=%p, ihost=%p\n",
1539 		 __func__, idev, ihost);
1540 
1541 	spin_lock_irqsave(&ihost->scic_lock, flags);
1542 
1543 	/* Clear reset pending on all pending requests. */
1544 	list_for_each_entry_safe(isci_request, tmp_req,
1545 				 &idev->reqs_in_process, dev_node) {
1546 		dev_dbg(&ihost->pdev->dev, "%s: idev = %p request = %p\n",
1547 			 __func__, idev, isci_request);
1548 
1549 		if (isci_request->ttype == io_task) {
1550 
1551 			unsigned long flags2;
1552 			struct sas_task *task = isci_request_access_task(
1553 				isci_request);
1554 
1555 			spin_lock_irqsave(&task->task_state_lock, flags2);
1556 			task->task_state_flags &= ~SAS_TASK_NEED_DEV_RESET;
1557 			spin_unlock_irqrestore(&task->task_state_lock, flags2);
1558 		}
1559 	}
1560 	spin_unlock_irqrestore(&ihost->scic_lock, flags);
1561 }
1562