Commit 1fad9e93 authored by Jeff Skirvin's avatar Jeff Skirvin Committed by Dan Williams

isci: save the i/o tag outside the scic request structure.

The pointer to the core representation of a request is marked NULL at
completion, but we need to save the i/o tag for task management.
Signed-off-by: default avatarJeff Skirvin <jeffrey.d.skirvin@intel.com>
Signed-off-by: default avatarJacek Danecki <Jacek.Danecki@intel.com>
[revise changelog]
Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
parent ec6c9638
...@@ -463,6 +463,12 @@ int isci_request_execute( ...@@ -463,6 +463,12 @@ int isci_request_execute(
*/ */
status = SCI_SUCCESS; status = SCI_SUCCESS;
} }
else
/* Save the tag for possible task mgmt later. */
request->io_tag = scic_io_request_get_io_tag(
request->sci_request_handle);
} else } else
dev_warn(&isci_host->pdev->dev, dev_warn(&isci_host->pdev->dev,
"%s: failed request start\n", "%s: failed request start\n",
......
...@@ -544,7 +544,7 @@ void isci_task_build_tmf( ...@@ -544,7 +544,7 @@ void isci_task_build_tmf(
void (*tmf_sent_cb)(enum isci_tmf_cb_state, void (*tmf_sent_cb)(enum isci_tmf_cb_state,
struct isci_tmf *, struct isci_tmf *,
void *), void *),
void *cb_data) struct isci_request *old_request)
{ {
dev_dbg(&isci_device->isci_port->isci_host->pdev->dev, dev_dbg(&isci_device->isci_port->isci_host->pdev->dev,
"%s: isci_device = %p\n", __func__, isci_device); "%s: isci_device = %p\n", __func__, isci_device);
...@@ -555,7 +555,9 @@ void isci_task_build_tmf( ...@@ -555,7 +555,9 @@ void isci_task_build_tmf(
tmf->tmf_code = code; tmf->tmf_code = code;
tmf->timeout_timer = NULL; tmf->timeout_timer = NULL;
tmf->cb_state_func = tmf_sent_cb; tmf->cb_state_func = tmf_sent_cb;
tmf->cb_data = cb_data; tmf->cb_data = old_request;
tmf->io_tag = old_request->io_tag;
} }
static struct isci_request *isci_task_get_request_from_task( static struct isci_request *isci_task_get_request_from_task(
...@@ -1248,10 +1250,6 @@ int isci_task_abort_task(struct sas_task *task) ...@@ -1248,10 +1250,6 @@ int isci_task_abort_task(struct sas_task *task)
isci_task_build_tmf(&tmf, isci_device, isci_tmf_ssp_task_abort, isci_task_build_tmf(&tmf, isci_device, isci_tmf_ssp_task_abort,
isci_abort_task_process_cb, old_request); isci_abort_task_process_cb, old_request);
tmf.io_tag = scic_io_request_get_io_tag(
old_request->sci_request_handle
);
spin_unlock_irqrestore(&isci_host->scic_lock, flags); spin_unlock_irqrestore(&isci_host->scic_lock, flags);
#define ISCI_ABORT_TASK_TIMEOUT_MS 500 /* half second timeout. */ #define ISCI_ABORT_TASK_TIMEOUT_MS 500 /* half second timeout. */
......
...@@ -224,7 +224,7 @@ void isci_task_build_tmf( ...@@ -224,7 +224,7 @@ void isci_task_build_tmf(
void (*tmf_sent_cb)( void (*tmf_sent_cb)(
enum isci_tmf_cb_state, enum isci_tmf_cb_state,
struct isci_tmf *, void *), struct isci_tmf *, void *),
void *cb_data); struct isci_request *old_request);
int isci_task_execute_tmf( int isci_task_execute_tmf(
struct isci_host *isci_host, struct isci_host *isci_host,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment