]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/infiniband/ulp/srp/ib_srp.c
Merge branch 'bkl-removal' into next
[linux-2.6-omap-h63xx.git] / drivers / infiniband / ulp / srp / ib_srp.c
index 125765aa9d59dfc02b0045dc3e23df0d37f1167e..ed7c5f72cb8bc24cc02100a1e7847f88f9b9e5b7 100644 (file)
@@ -28,8 +28,6 @@
  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
- *
- * $Id: ib_srp.c 3932 2005-11-01 17:19:29Z roland $
  */
 
 #include <linux/module.h>
@@ -49,8 +47,6 @@
 #include <scsi/srp.h>
 #include <scsi/scsi_transport_srp.h>
 
-#include <rdma/ib_cache.h>
-
 #include "ib_srp.h"
 
 #define DRV_NAME       "ib_srp"
@@ -139,8 +135,9 @@ static struct srp_iu *srp_alloc_iu(struct srp_host *host, size_t size,
        if (!iu->buf)
                goto out_free_iu;
 
-       iu->dma = ib_dma_map_single(host->dev->dev, iu->buf, size, direction);
-       if (ib_dma_mapping_error(host->dev->dev, iu->dma))
+       iu->dma = ib_dma_map_single(host->srp_dev->dev, iu->buf, size,
+                                   direction);
+       if (ib_dma_mapping_error(host->srp_dev->dev, iu->dma))
                goto out_free_buf;
 
        iu->size      = size;
@@ -161,7 +158,8 @@ static void srp_free_iu(struct srp_host *host, struct srp_iu *iu)
        if (!iu)
                return;
 
-       ib_dma_unmap_single(host->dev->dev, iu->dma, iu->size, iu->direction);
+       ib_dma_unmap_single(host->srp_dev->dev, iu->dma, iu->size,
+                           iu->direction);
        kfree(iu->buf);
        kfree(iu);
 }
@@ -181,10 +179,10 @@ static int srp_init_qp(struct srp_target_port *target,
        if (!attr)
                return -ENOMEM;
 
-       ret = ib_find_cached_pkey(target->srp_host->dev->dev,
-                                 target->srp_host->port,
-                                 be16_to_cpu(target->path.pkey),
-                                 &attr->pkey_index);
+       ret = ib_find_pkey(target->srp_host->srp_dev->dev,
+                          target->srp_host->port,
+                          be16_to_cpu(target->path.pkey),
+                          &attr->pkey_index);
        if (ret)
                goto out;
 
@@ -208,7 +206,7 @@ static int srp_new_cm_id(struct srp_target_port *target)
 {
        struct ib_cm_id *new_cm_id;
 
-       new_cm_id = ib_create_cm_id(target->srp_host->dev->dev,
+       new_cm_id = ib_create_cm_id(target->srp_host->srp_dev->dev,
                                    srp_cm_handler, target);
        if (IS_ERR(new_cm_id))
                return PTR_ERR(new_cm_id);
@@ -229,8 +227,8 @@ static int srp_create_target_ib(struct srp_target_port *target)
        if (!init_attr)
                return -ENOMEM;
 
-       target->cq = ib_create_cq(target->srp_host->dev->dev, srp_completion,
-                                 NULL, target, SRP_CQ_SIZE, 0);
+       target->cq = ib_create_cq(target->srp_host->srp_dev->dev,
+                                 srp_completion, NULL, target, SRP_CQ_SIZE, 0);
        if (IS_ERR(target->cq)) {
                ret = PTR_ERR(target->cq);
                goto out;
@@ -248,7 +246,7 @@ static int srp_create_target_ib(struct srp_target_port *target)
        init_attr->send_cq             = target->cq;
        init_attr->recv_cq             = target->cq;
 
-       target->qp = ib_create_qp(target->srp_host->dev->pd, init_attr);
+       target->qp = ib_create_qp(target->srp_host->srp_dev->pd, init_attr);
        if (IS_ERR(target->qp)) {
                ret = PTR_ERR(target->qp);
                ib_destroy_cq(target->cq);
@@ -302,7 +300,7 @@ static int srp_lookup_path(struct srp_target_port *target)
        init_completion(&target->done);
 
        target->path_query_id = ib_sa_path_rec_get(&srp_sa_client,
-                                                  target->srp_host->dev->dev,
+                                                  target->srp_host->srp_dev->dev,
                                                   target->srp_host->port,
                                                   &target->path,
                                                   IB_SA_PATH_REC_SERVICE_ID    |
@@ -403,7 +401,7 @@ static int srp_send_req(struct srp_target_port *target)
                             (unsigned long long) be64_to_cpu(target->ioc_guid));
                memset(req->priv.initiator_port_id, 0, 8);
                memcpy(req->priv.initiator_port_id + 8,
-                      &target->srp_host->dev->dev->node_guid, 8);
+                      &target->srp_host->srp_dev->dev->node_guid, 8);
        }
 
        status = ib_send_cm_req(target->cm_id, &req->param);
@@ -520,7 +518,7 @@ static void srp_unmap_data(struct scsi_cmnd *scmnd,
                req->fmr = NULL;
        }
 
-       ib_dma_unmap_sg(target->srp_host->dev->dev, scsi_sglist(scmnd),
+       ib_dma_unmap_sg(target->srp_host->srp_dev->dev, scsi_sglist(scmnd),
                        scsi_sg_count(scmnd), scmnd->sc_data_direction);
 }
 
@@ -628,7 +626,7 @@ static int srp_map_fmr(struct srp_target_port *target, struct scatterlist *scat,
        int page_cnt;
        int i, j;
        int ret;
-       struct srp_device *dev = target->srp_host->dev;
+       struct srp_device *dev = target->srp_host->srp_dev;
        struct ib_device *ibdev = dev->dev;
        struct scatterlist *sg;
 
@@ -723,7 +721,7 @@ static int srp_map_data(struct scsi_cmnd *scmnd, struct srp_target_port *target,
        nents = scsi_sg_count(scmnd);
        scat  = scsi_sglist(scmnd);
 
-       dev = target->srp_host->dev;
+       dev = target->srp_host->srp_dev;
        ibdev = dev->dev;
 
        count = ib_dma_map_sg(ibdev, scat, nents, scmnd->sc_data_direction);
@@ -779,7 +777,7 @@ static int srp_map_data(struct scsi_cmnd *scmnd, struct srp_target_port *target,
                buf->table_desc.va  =
                        cpu_to_be64(req->cmd->dma + sizeof *cmd + sizeof *buf);
                buf->table_desc.key =
-                       cpu_to_be32(target->srp_host->dev->mr->rkey);
+                       cpu_to_be32(target->srp_host->srp_dev->mr->rkey);
                buf->table_desc.len =
                        cpu_to_be32(count * sizeof (struct srp_direct_buf));
 
@@ -855,7 +853,7 @@ static void srp_handle_recv(struct srp_target_port *target, struct ib_wc *wc)
 
        iu = target->rx_ring[wc->wr_id & ~SRP_OP_RECV];
 
-       dev = target->srp_host->dev->dev;
+       dev = target->srp_host->srp_dev->dev;
        ib_dma_sync_single_for_cpu(dev, iu->dma, target->max_ti_iu_len,
                                   DMA_FROM_DEVICE);
 
@@ -937,7 +935,7 @@ static int __srp_post_recv(struct srp_target_port *target)
 
        list.addr   = iu->dma;
        list.length = iu->size;
-       list.lkey   = target->srp_host->dev->mr->lkey;
+       list.lkey   = target->srp_host->srp_dev->mr->lkey;
 
        wr.next     = NULL;
        wr.sg_list  = &list;
@@ -996,7 +994,7 @@ static int __srp_post_send(struct srp_target_port *target,
 
        list.addr   = iu->dma;
        list.length = len;
-       list.lkey   = target->srp_host->dev->mr->lkey;
+       list.lkey   = target->srp_host->srp_dev->mr->lkey;
 
        wr.next       = NULL;
        wr.wr_id      = target->tx_head & SRP_SQ_SIZE;
@@ -1039,7 +1037,7 @@ static int srp_queuecommand(struct scsi_cmnd *scmnd,
        if (!iu)
                goto err;
 
-       dev = target->srp_host->dev->dev;
+       dev = target->srp_host->srp_dev->dev;
        ib_dma_sync_single_for_cpu(dev, iu->dma, srp_max_iu_len,
                                   DMA_TO_DEVICE);
 
@@ -1456,9 +1454,10 @@ static int srp_reset_host(struct scsi_cmnd *scmnd)
        return ret;
 }
 
-static ssize_t show_id_ext(struct class_device *cdev, char *buf)
+static ssize_t show_id_ext(struct device *dev, struct device_attribute *attr,
+                          char *buf)
 {
-       struct srp_target_port *target = host_to_target(class_to_shost(cdev));
+       struct srp_target_port *target = host_to_target(class_to_shost(dev));
 
        if (target->state == SRP_TARGET_DEAD ||
            target->state == SRP_TARGET_REMOVED)
@@ -1468,9 +1467,10 @@ static ssize_t show_id_ext(struct class_device *cdev, char *buf)
                       (unsigned long long) be64_to_cpu(target->id_ext));
 }
 
-static ssize_t show_ioc_guid(struct class_device *cdev, char *buf)
+static ssize_t show_ioc_guid(struct device *dev, struct device_attribute *attr,
+                            char *buf)
 {
-       struct srp_target_port *target = host_to_target(class_to_shost(cdev));
+       struct srp_target_port *target = host_to_target(class_to_shost(dev));
 
        if (target->state == SRP_TARGET_DEAD ||
            target->state == SRP_TARGET_REMOVED)
@@ -1480,9 +1480,10 @@ static ssize_t show_ioc_guid(struct class_device *cdev, char *buf)
                       (unsigned long long) be64_to_cpu(target->ioc_guid));
 }
 
-static ssize_t show_service_id(struct class_device *cdev, char *buf)
+static ssize_t show_service_id(struct device *dev,
+                              struct device_attribute *attr, char *buf)
 {
-       struct srp_target_port *target = host_to_target(class_to_shost(cdev));
+       struct srp_target_port *target = host_to_target(class_to_shost(dev));
 
        if (target->state == SRP_TARGET_DEAD ||
            target->state == SRP_TARGET_REMOVED)
@@ -1492,9 +1493,10 @@ static ssize_t show_service_id(struct class_device *cdev, char *buf)
                       (unsigned long long) be64_to_cpu(target->service_id));
 }
 
-static ssize_t show_pkey(struct class_device *cdev, char *buf)
+static ssize_t show_pkey(struct device *dev, struct device_attribute *attr,
+                        char *buf)
 {
-       struct srp_target_port *target = host_to_target(class_to_shost(cdev));
+       struct srp_target_port *target = host_to_target(class_to_shost(dev));
 
        if (target->state == SRP_TARGET_DEAD ||
            target->state == SRP_TARGET_REMOVED)
@@ -1503,9 +1505,10 @@ static ssize_t show_pkey(struct class_device *cdev, char *buf)
        return sprintf(buf, "0x%04x\n", be16_to_cpu(target->path.pkey));
 }
 
-static ssize_t show_dgid(struct class_device *cdev, char *buf)
+static ssize_t show_dgid(struct device *dev, struct device_attribute *attr,
+                        char *buf)
 {
-       struct srp_target_port *target = host_to_target(class_to_shost(cdev));
+       struct srp_target_port *target = host_to_target(class_to_shost(dev));
 
        if (target->state == SRP_TARGET_DEAD ||
            target->state == SRP_TARGET_REMOVED)
@@ -1522,9 +1525,10 @@ static ssize_t show_dgid(struct class_device *cdev, char *buf)
                       be16_to_cpu(((__be16 *) target->path.dgid.raw)[7]));
 }
 
-static ssize_t show_orig_dgid(struct class_device *cdev, char *buf)
+static ssize_t show_orig_dgid(struct device *dev,
+                             struct device_attribute *attr, char *buf)
 {
-       struct srp_target_port *target = host_to_target(class_to_shost(cdev));
+       struct srp_target_port *target = host_to_target(class_to_shost(dev));
 
        if (target->state == SRP_TARGET_DEAD ||
            target->state == SRP_TARGET_REMOVED)
@@ -1541,9 +1545,10 @@ static ssize_t show_orig_dgid(struct class_device *cdev, char *buf)
                       be16_to_cpu(target->orig_dgid[7]));
 }
 
-static ssize_t show_zero_req_lim(struct class_device *cdev, char *buf)
+static ssize_t show_zero_req_lim(struct device *dev,
+                                struct device_attribute *attr, char *buf)
 {
-       struct srp_target_port *target = host_to_target(class_to_shost(cdev));
+       struct srp_target_port *target = host_to_target(class_to_shost(dev));
 
        if (target->state == SRP_TARGET_DEAD ||
            target->state == SRP_TARGET_REMOVED)
@@ -1552,40 +1557,42 @@ static ssize_t show_zero_req_lim(struct class_device *cdev, char *buf)
        return sprintf(buf, "%d\n", target->zero_req_lim);
 }
 
-static ssize_t show_local_ib_port(struct class_device *cdev, char *buf)
+static ssize_t show_local_ib_port(struct device *dev,
+                                 struct device_attribute *attr, char *buf)
 {
-       struct srp_target_port *target = host_to_target(class_to_shost(cdev));
+       struct srp_target_port *target = host_to_target(class_to_shost(dev));
 
        return sprintf(buf, "%d\n", target->srp_host->port);
 }
 
-static ssize_t show_local_ib_device(struct class_device *cdev, char *buf)
+static ssize_t show_local_ib_device(struct device *dev,
+                                   struct device_attribute *attr, char *buf)
 {
-       struct srp_target_port *target = host_to_target(class_to_shost(cdev));
+       struct srp_target_port *target = host_to_target(class_to_shost(dev));
 
-       return sprintf(buf, "%s\n", target->srp_host->dev->dev->name);
+       return sprintf(buf, "%s\n", target->srp_host->srp_dev->dev->name);
 }
 
-static CLASS_DEVICE_ATTR(id_ext,         S_IRUGO, show_id_ext,          NULL);
-static CLASS_DEVICE_ATTR(ioc_guid,       S_IRUGO, show_ioc_guid,        NULL);
-static CLASS_DEVICE_ATTR(service_id,     S_IRUGO, show_service_id,      NULL);
-static CLASS_DEVICE_ATTR(pkey,           S_IRUGO, show_pkey,            NULL);
-static CLASS_DEVICE_ATTR(dgid,           S_IRUGO, show_dgid,            NULL);
-static CLASS_DEVICE_ATTR(orig_dgid,      S_IRUGO, show_orig_dgid,       NULL);
-static CLASS_DEVICE_ATTR(zero_req_lim,   S_IRUGO, show_zero_req_lim,    NULL);
-static CLASS_DEVICE_ATTR(local_ib_port,   S_IRUGO, show_local_ib_port,  NULL);
-static CLASS_DEVICE_ATTR(local_ib_device, S_IRUGO, show_local_ib_device, NULL);
-
-static struct class_device_attribute *srp_host_attrs[] = {
-       &class_device_attr_id_ext,
-       &class_device_attr_ioc_guid,
-       &class_device_attr_service_id,
-       &class_device_attr_pkey,
-       &class_device_attr_dgid,
-       &class_device_attr_orig_dgid,
-       &class_device_attr_zero_req_lim,
-       &class_device_attr_local_ib_port,
-       &class_device_attr_local_ib_device,
+static DEVICE_ATTR(id_ext,         S_IRUGO, show_id_ext,          NULL);
+static DEVICE_ATTR(ioc_guid,       S_IRUGO, show_ioc_guid,        NULL);
+static DEVICE_ATTR(service_id,     S_IRUGO, show_service_id,      NULL);
+static DEVICE_ATTR(pkey,           S_IRUGO, show_pkey,            NULL);
+static DEVICE_ATTR(dgid,           S_IRUGO, show_dgid,            NULL);
+static DEVICE_ATTR(orig_dgid,      S_IRUGO, show_orig_dgid,       NULL);
+static DEVICE_ATTR(zero_req_lim,    S_IRUGO, show_zero_req_lim,           NULL);
+static DEVICE_ATTR(local_ib_port,   S_IRUGO, show_local_ib_port,   NULL);
+static DEVICE_ATTR(local_ib_device, S_IRUGO, show_local_ib_device, NULL);
+
+static struct device_attribute *srp_host_attrs[] = {
+       &dev_attr_id_ext,
+       &dev_attr_ioc_guid,
+       &dev_attr_service_id,
+       &dev_attr_pkey,
+       &dev_attr_dgid,
+       &dev_attr_orig_dgid,
+       &dev_attr_zero_req_lim,
+       &dev_attr_local_ib_port,
+       &dev_attr_local_ib_device,
        NULL
 };
 
@@ -1613,7 +1620,7 @@ static int srp_add_target(struct srp_host *host, struct srp_target_port *target)
        sprintf(target->target_name, "SRP.T10:%016llX",
                 (unsigned long long) be64_to_cpu(target->id_ext));
 
-       if (scsi_add_host(target->scsi_host, host->dev->dev->dma_device))
+       if (scsi_add_host(target->scsi_host, host->srp_dev->dev->dma_device))
                return -ENODEV;
 
        memcpy(ids.port_id, &target->id_ext, 8);
@@ -1637,17 +1644,17 @@ static int srp_add_target(struct srp_host *host, struct srp_target_port *target)
        return 0;
 }
 
-static void srp_release_class_dev(struct class_device *class_dev)
+static void srp_release_dev(struct device *dev)
 {
        struct srp_host *host =
-               container_of(class_dev, struct srp_host, class_dev);
+               container_of(dev, struct srp_host, dev);
 
        complete(&host->released);
 }
 
 static struct class srp_class = {
        .name    = "infiniband_srp",
-       .release = srp_release_class_dev
+       .dev_release = srp_release_dev
 };
 
 /*
@@ -1835,11 +1842,12 @@ out:
        return ret;
 }
 
-static ssize_t srp_create_target(struct class_device *class_dev,
+static ssize_t srp_create_target(struct device *dev,
+                                struct device_attribute *attr,
                                 const char *buf, size_t count)
 {
        struct srp_host *host =
-               container_of(class_dev, struct srp_host, class_dev);
+               container_of(dev, struct srp_host, dev);
        struct Scsi_Host *target_host;
        struct srp_target_port *target;
        int ret;
@@ -1871,7 +1879,7 @@ static ssize_t srp_create_target(struct class_device *class_dev,
        if (ret)
                goto err;
 
-       ib_get_cached_gid(host->dev->dev, host->port, 0, &target->path.sgid);
+       ib_query_gid(host->srp_dev->dev, host->port, 0, &target->path.sgid);
 
        shost_printk(KERN_DEBUG, target->scsi_host, PFX
                     "new target: id_ext %016llx ioc_guid %016llx pkey %04x "
@@ -1926,27 +1934,27 @@ err:
        return ret;
 }
 
-static CLASS_DEVICE_ATTR(add_target, S_IWUSR, NULL, srp_create_target);
+static DEVICE_ATTR(add_target, S_IWUSR, NULL, srp_create_target);
 
-static ssize_t show_ibdev(struct class_device *class_dev, char *buf)
+static ssize_t show_ibdev(struct device *dev, struct device_attribute *attr,
+                         char *buf)
 {
-       struct srp_host *host =
-               container_of(class_dev, struct srp_host, class_dev);
+       struct srp_host *host = container_of(dev, struct srp_host, dev);
 
-       return sprintf(buf, "%s\n", host->dev->dev->name);
+       return sprintf(buf, "%s\n", host->srp_dev->dev->name);
 }
 
-static CLASS_DEVICE_ATTR(ibdev, S_IRUGO, show_ibdev, NULL);
+static DEVICE_ATTR(ibdev, S_IRUGO, show_ibdev, NULL);
 
-static ssize_t show_port(struct class_device *class_dev, char *buf)
+static ssize_t show_port(struct device *dev, struct device_attribute *attr,
+                        char *buf)
 {
-       struct srp_host *host =
-               container_of(class_dev, struct srp_host, class_dev);
+       struct srp_host *host = container_of(dev, struct srp_host, dev);
 
        return sprintf(buf, "%d\n", host->port);
 }
 
-static CLASS_DEVICE_ATTR(port, S_IRUGO, show_port, NULL);
+static DEVICE_ATTR(port, S_IRUGO, show_port, NULL);
 
 static struct srp_host *srp_add_port(struct srp_device *device, u8 port)
 {
@@ -1959,27 +1967,27 @@ static struct srp_host *srp_add_port(struct srp_device *device, u8 port)
        INIT_LIST_HEAD(&host->target_list);
        spin_lock_init(&host->target_lock);
        init_completion(&host->released);
-       host->dev  = device;
+       host->srp_dev = device;
        host->port = port;
 
-       host->class_dev.class = &srp_class;
-       host->class_dev.dev   = device->dev->dma_device;
-       snprintf(host->class_dev.class_id, BUS_ID_SIZE, "srp-%s-%d",
+       host->dev.class = &srp_class;
+       host->dev.parent = device->dev->dma_device;
+       snprintf(host->dev.bus_id, BUS_ID_SIZE, "srp-%s-%d",
                 device->dev->name, port);
 
-       if (class_device_register(&host->class_dev))
+       if (device_register(&host->dev))
                goto free_host;
-       if (class_device_create_file(&host->class_dev, &class_device_attr_add_target))
+       if (device_create_file(&host->dev, &dev_attr_add_target))
                goto err_class;
-       if (class_device_create_file(&host->class_dev, &class_device_attr_ibdev))
+       if (device_create_file(&host->dev, &dev_attr_ibdev))
                goto err_class;
-       if (class_device_create_file(&host->class_dev, &class_device_attr_port))
+       if (device_create_file(&host->dev, &dev_attr_port))
                goto err_class;
 
        return host;
 
 err_class:
-       class_device_unregister(&host->class_dev);
+       device_unregister(&host->dev);
 
 free_host:
        kfree(host);
@@ -2084,7 +2092,7 @@ static void srp_remove_one(struct ib_device *device)
        srp_dev = ib_get_client_data(device, &srp_client);
 
        list_for_each_entry_safe(host, tmp_host, &srp_dev->dev_list, list) {
-               class_device_unregister(&host->class_dev);
+               device_unregister(&host->dev);
                /*
                 * Wait for the sysfs entry to go away, so that no new
                 * target ports can be created.