[openib-general] [PATCH][3/5] ib_get_dma_mr(): use in MAD layer

Roland Dreier
Wed Oct 20 16:04:45 PDT 2004


Index: infiniband/core/mad_ib.c
===================================================================
--- infiniband/core/mad_ib.c    (revision 915)
+++ infiniband/core/mad_ib.c    (working copy)
@@ -59,7 +59,7 @@
                                             mad, IB_MAD_PACKET_SIZE,
                                             PCI_DMA_TODEVICE);
        gather_list.length  = IB_MAD_PACKET_SIZE;
-       gather_list.lkey    = priv->lkey;
+       gather_list.lkey    = priv->mr->lkey;
 
        send_param.next               = NULL;
        send_param.opcode             = IB_WR_SEND;
@@ -303,7 +303,7 @@
                                              buf, IB_MAD_BUFFER_SIZE,
                                              PCI_DMA_FROMDEVICE);
        scatter_list.length  = IB_MAD_BUFFER_SIZE;
-       scatter_list.lkey    = priv->lkey;
+       scatter_list.lkey    = priv->mr->lkey;
 
        receive_param.next                = NULL;
        receive_param.sg_list             = &scatter_list;
Index: infiniband/core/mad_main.c
===================================================================
--- infiniband/core/mad_main.c  (revision 915)
+++ infiniband/core/mad_main.c  (working copy)
@@ -42,31 +42,6 @@
 
 kmem_cache_t *mad_cache;
 
-static inline int ib_mad_register_memory(struct ib_pd  *pd,
-                                         struct ib_mr **mr,
-                                         u32           *lkey)
-{
-        u64                iova = 0;
-        struct ib_phys_buf buffer_list = {
-               .addr = 0,
-               .size = (unsigned long) high_memory - PAGE_OFFSET
-       };
-
-        *mr = ib_reg_phys_mr(pd, &buffer_list, 1, /* list_len */
-                            IB_ACCESS_LOCAL_WRITE, &iova);
-        if (IS_ERR(*mr)) {
-                printk(KERN_WARNING "ib_reg_phys_mr failed "
-                      "size 0x%016llx, iova 0x%016llx "
-                      "(return code %ld)\n",
-                      (unsigned long long) buffer_list.size,
-                      (unsigned long long) iova, PTR_ERR(*mr));
-               return PTR_ERR(*mr);
-       }
-
-       *lkey = (*mr)->lkey;
-        return 0;
-}
-
 static int ib_mad_qp_create(struct ib_device *device,
                             tTS_IB_PORT       port,
                             u32               qpn)
@@ -197,8 +172,9 @@
 
        INIT_WORK(&priv->cq_work, ib_mad_drain_cq, device);
 
-       if (ib_mad_register_memory(priv->pd, &priv->mr, &priv->lkey)) {
-               printk(KERN_WARNING "Failed to allocate MAD MR for %s\n",
+       priv->mr = ib_get_dma_mr(priv->pd, IB_ACCESS_LOCAL_WRITE);
+       if (IS_ERR(priv->mr)) {
+               printk(KERN_WARNING "Failed to create DMA MR for %s\n",
                       device->name);
                goto error_free_cq;
        }
Index: infiniband/core/mad_priv.h
===================================================================
--- infiniband/core/mad_priv.h  (revision 915)
+++ infiniband/core/mad_priv.h  (working copy)
@@ -59,7 +59,6 @@
        struct ib_pd           *pd;
        struct ib_cq           *cq;
        struct ib_mr           *mr;
-       u32                     lkey;
        struct ib_qp           *qp[IB_MAD_MAX_PORTS_PER_DEVICE + 1][2];
 
        struct ib_mad_buf       send_buf   [IB_MAD_MAX_PORTS_PER_DEVICE + 1][2][IB_MAD_SENDS_PER_QP];



More information about the openib-general mailing list