isci: remove sci_device_handle
authorDan Williams <dan.j.williams@intel.com>
Fri, 4 Mar 2011 19:51:43 +0000 (11:51 -0800)
committerDan Williams <dan.j.williams@intel.com>
Sun, 3 Jul 2011 10:55:29 +0000 (03:55 -0700)
It belies the fact that isci_remote_device and scic_sds_remote_device
are one in same object with the same lifetime rules.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
drivers/scsi/isci/remote_device.c
drivers/scsi/isci/remote_device.h
drivers/scsi/isci/request.c
drivers/scsi/isci/sata.c
drivers/scsi/isci/task.c

index e684a053189ef7b90a91d7528ed359a5f92c4eca..0eb5c7330face66193ffc53956517362291a2638 100644 (file)
@@ -92,7 +92,7 @@ static void isci_remote_device_deconstruct(
        /* Remove all related references to this device and free
         * the cache object.
         */
-       scic_remote_device_destruct(isci_device->sci_device_handle);
+       scic_remote_device_destruct(to_sci_dev(isci_device));
        isci_device->domain_dev->lldd_dev = NULL;
        list_del(&isci_device->node);
        kmem_cache_free(isci_kmem_cache, isci_device);
@@ -117,7 +117,7 @@ static enum sci_status isci_remote_device_construct(
 
        /* let the core do it's common constuction. */
        scic_remote_device_construct(port->sci_port_handle,
-                                    isci_device->sci_device_handle);
+                                    to_sci_dev(isci_device));
 
        /* let the core do it's device specific constuction. */
        if (isci_device->domain_dev->parent &&
@@ -183,15 +183,11 @@ static enum sci_status isci_remote_device_construct(
                        "%s: parent->dev_type = EDGE_DEV\n",
                        __func__);
 
-               status = scic_remote_device_ea_construct(
-                       isci_device->sci_device_handle,
-                       (struct smp_response_discover *)&discover_response
-                       );
+               status = scic_remote_device_ea_construct(to_sci_dev(isci_device),
+                               (struct smp_response_discover *)&discover_response);
 
        } else
-               status = scic_remote_device_da_construct(
-                       isci_device->sci_device_handle
-                       );
+               status = scic_remote_device_da_construct(to_sci_dev(isci_device));
 
 
        if (status != SCI_SUCCESS) {
@@ -204,18 +200,13 @@ static enum sci_status isci_remote_device_construct(
                return status;
        }
 
-       sci_object_set_association(
-               isci_device->sci_device_handle,
-               isci_device
-               );
+       sci_object_set_association(to_sci_dev(isci_device), isci_device);
 
        BUG_ON(port->isci_host == NULL);
 
        /* start the device. */
-       status = scic_remote_device_start(
-               isci_device->sci_device_handle,
-               ISCI_REMOTE_DEVICE_START_TIMEOUT
-               );
+       status = scic_remote_device_start(to_sci_dev(isci_device),
+                                         ISCI_REMOTE_DEVICE_START_TIMEOUT);
 
        if (status != SCI_SUCCESS) {
                dev_warn(&port->isci_host->pdev->dev,
@@ -266,7 +257,6 @@ static struct isci_remote_device *
 isci_remote_device_alloc(struct isci_host *isci_host, struct isci_port *port)
 {
        struct isci_remote_device *isci_device;
-       struct scic_sds_remote_device *sci_dev;
 
        isci_device = kmem_cache_zalloc(isci_kmem_cache, GFP_KERNEL);
 
@@ -275,8 +265,6 @@ isci_remote_device_alloc(struct isci_host *isci_host, struct isci_port *port)
                return NULL;
        }
 
-       sci_dev = (struct scic_sds_remote_device *) &isci_device[1];
-       isci_device->sci_device_handle = sci_dev;
        INIT_LIST_HEAD(&isci_device->reqs_in_process);
        INIT_LIST_HEAD(&isci_device->node);
        isci_device->host_quiesce          = false;
@@ -441,10 +429,7 @@ enum sci_status isci_remote_device_stop(
 
        spin_lock_irqsave(&isci_device->isci_port->isci_host->scic_lock, flags);
 
-       status = scic_remote_device_stop(
-               isci_device->sci_device_handle,
-               50
-               );
+       status = scic_remote_device_stop(to_sci_dev(isci_device), 50);
 
        spin_unlock_irqrestore(&isci_device->isci_port->isci_host->scic_lock, flags);
 
index 48e37cfef6fb244bea97646af5990e98d7162ef5..cd43c15f009dfcbde15c2ee89e5a1fa41d835d65 100644 (file)
@@ -60,7 +60,6 @@ struct isci_host;
 struct scic_sds_remote_device;
 
 struct isci_remote_device {
-       struct scic_sds_remote_device *sci_device_handle;
        enum isci_status status;
        struct isci_port *isci_port;
        struct domain_device *domain_dev;
@@ -73,6 +72,12 @@ struct isci_remote_device {
        bool host_quiesce;
 };
 
+static inline struct scic_sds_remote_device *to_sci_dev(struct isci_remote_device *idev)
+{
+       /* core data is an opaque buffer at the end of the idev */
+       return (struct scic_sds_remote_device *) &idev[1];
+}
+
 #define to_isci_remote_device(p)       \
        container_of(p, struct isci_remote_device, sci_remote_device);
 
index 81a77335fdb366da6c55f8ff9877bf88d3b3dfd9..6b0863e73f224aaec1342eb9f26e5a92db80e045 100644 (file)
@@ -179,8 +179,7 @@ static enum sci_status isci_io_request_build(
        struct smp_discover_response_protocols dev_protocols;
        enum sci_status status = SCI_SUCCESS;
        struct sas_task *task = isci_request_access_task(request);
-       struct scic_sds_remote_device *sci_device =
-               isci_device->sci_device_handle;
+       struct scic_sds_remote_device *sci_device = to_sci_dev(isci_device);
 
        dev_dbg(&isci_host->pdev->dev,
                "%s: isci_device = 0x%p; request = %p, "
@@ -408,7 +407,7 @@ int isci_request_execute(
        unsigned long flags;
 
        isci_device = isci_dev_from_domain_dev(task->dev);
-       sci_device = isci_device->sci_device_handle;
+       sci_device = to_sci_dev(isci_device);
 
        /* do common allocation and init of request object. */
        ret = isci_request_alloc_io(
@@ -1177,7 +1176,7 @@ void isci_request_io_request_complete(
        /* complete the io request to the core. */
        scic_controller_complete_io(
                isci_host->core_controller,
-               isci_device->sci_device_handle,
+               to_sci_dev(isci_device),
                request->sci_request_handle
                );
        /* NULL the request handle so it cannot be completed or
index 6fbf15944b21e95a965dc941da88dc70081a53ee..7a1b58600ca0f03f2358757c81a9118c796074cd 100644 (file)
@@ -348,7 +348,7 @@ int isci_task_send_lu_reset_sata(
        spin_lock_irqsave(&isci_host->scic_lock, flags);
 
        /* Resume the device. */
-       scic_sds_remote_device_resume(isci_device->sci_device_handle);
+       scic_sds_remote_device_resume(to_sci_dev(isci_device));
 
        spin_unlock_irqrestore(&isci_host->scic_lock, flags);
 
index 232125eab523c223962648cf83ec8c19eef77885..c637bbc215c6b93594645e491d4d5250fa2f818a 100644 (file)
@@ -285,7 +285,7 @@ static enum sci_status isci_task_request_build(
                "%s: isci_tmf = %p\n", __func__, isci_tmf);
 
        isci_device = isci_tmf->device;
-       sci_device = isci_device->sci_device_handle;
+       sci_device = to_sci_dev(isci_device);
 
        /* do common allocation and init of request object. */
        status = isci_request_alloc_tmf(
@@ -395,7 +395,7 @@ static void isci_tmf_timeout_cb(void *tmf_request_arg)
                /* Terminate the TMF transmit request. */
                status = scic_controller_terminate_request(
                        request->isci_host->core_controller,
-                       request->isci_device->sci_device_handle,
+                       to_sci_dev(request->isci_device),
                        request->sci_request_handle
                        );
 
@@ -456,7 +456,7 @@ int isci_task_execute_tmf(
                        "%s: isci_device = %p\n",
                        __func__, isci_device);
 
-       sci_device = isci_device->sci_device_handle;
+       sci_device = to_sci_dev(isci_device);
 
        /* Assign the pointer to the TMF's completion kernel wait structure. */
        tmf->complete = &completion;
@@ -728,7 +728,7 @@ static void isci_terminate_request_core(
                was_terminated = true;
                status = scic_controller_terminate_request(
                        isci_host->core_controller,
-                       isci_device->sci_device_handle,
+                       to_sci_dev(isci_device),
                        isci_request->sci_request_handle
                        );
        }
@@ -1469,7 +1469,7 @@ void isci_task_request_complete(
 
        scic_controller_complete_task(
                isci_host->core_controller,
-               isci_device->sci_device_handle,
+               to_sci_dev(isci_device),
                request->sci_request_handle
                );
        /* NULL the request handle to make sure it cannot be terminated
@@ -1612,7 +1612,7 @@ int isci_bus_reset_handler(struct scsi_cmnd *cmd)
        if (isci_host != NULL)
                spin_lock_irqsave(&isci_host->scic_lock, flags);
 
-       status = scic_remote_device_reset(isci_dev->sci_device_handle);
+       status = scic_remote_device_reset(to_sci_dev(isci_dev));
        if (status != SCI_SUCCESS) {
 
                if (isci_host != NULL)
@@ -1654,8 +1654,7 @@ int isci_bus_reset_handler(struct scsi_cmnd *cmd)
 
        if (isci_host != NULL)
                spin_lock_irqsave(&isci_host->scic_lock, flags);
-       status
-               = scic_remote_device_reset_complete(isci_dev->sci_device_handle);
+       status = scic_remote_device_reset_complete(to_sci_dev(isci_dev));
 
        if (isci_host != NULL)
                spin_unlock_irqrestore(&isci_host->scic_lock, flags);