]> git.openfabrics.org - ~shefty/rdma-dev.git/commitdiff
isci: Fixed bug in resumption from RNC Tx/Rx suspend state.
authorJeff Skirvin <jeffrey.d.skirvin@intel.com>
Fri, 9 Mar 2012 06:41:49 +0000 (22:41 -0800)
committerDan Williams <dan.j.williams@intel.com>
Thu, 17 May 2012 21:33:36 +0000 (14:33 -0700)
The resumption from the Tx/Rx suspended state should work the same
as the Tx suspended state.

Signed-off-by: Jeff Skirvin <jeffrey.d.skirvin@intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
drivers/scsi/isci/remote_node_context.c

index 3a55ba66b8acdb39eba8ad5aee90fa7ca4aba97a..3e849752bffa225c6a482ea852ae503616ac63ac 100644 (file)
@@ -557,10 +557,16 @@ enum sci_status sci_remote_node_context_resume(struct sci_remote_node_context *s
                sci_rnc->user_callback = cb_fn;
                sci_rnc->user_cookie   = cb_p;
                return SCI_SUCCESS;
-       case SCI_RNC_TX_SUSPENDED: {
+       case SCI_RNC_TX_SUSPENDED:
+       case SCI_RNC_TX_RX_SUSPENDED: {
                struct isci_remote_device *idev = rnc_to_dev(sci_rnc);
                struct domain_device *dev = idev->domain_dev;
 
+               /* If this is an expander attached SATA device we must
+                * invalidate and repost the RNC since this is the only way
+                * to clear the TCi to NCQ tag mapping table for the RNi.
+                * All other device types we can just resume.
+                */
                sci_remote_node_context_setup_to_resume(sci_rnc, cb_fn, cb_p);
 
                if (dev_is_sata(dev) && dev->parent)
@@ -569,10 +575,6 @@ enum sci_status sci_remote_node_context_resume(struct sci_remote_node_context *s
                        sci_change_state(&sci_rnc->sm, SCI_RNC_RESUMING);
                return SCI_SUCCESS;
        }
-       case SCI_RNC_TX_RX_SUSPENDED:
-               sci_remote_node_context_setup_to_resume(sci_rnc, cb_fn, cb_p);
-               sci_change_state(&sci_rnc->sm, SCI_RNC_RESUMING);
-               return SCI_FAILURE_INVALID_STATE;
        case SCI_RNC_AWAIT_SUSPENSION:
                sci_remote_node_context_setup_to_resume(sci_rnc, cb_fn, cb_p);
                return SCI_SUCCESS;