Whamcloud - gitweb
LU-6850 lnet: remove references to ib_reg_phys_mr() 88/15788/14
authorAmir Shehata <amir.shehata@intel.com>
Wed, 29 Jul 2015 14:53:47 +0000 (07:53 -0700)
committerOleg Drokin <oleg.drokin@intel.com>
Tue, 6 Oct 2015 01:56:06 +0000 (01:56 +0000)
Removed references to ib_reg_phys_mr() and PMR which were added
to deal with some Chelsio specific scenario, but are no longer needed.

Signed-off-by: Amir Shehata <amir.shehata@intel.com>
Change-Id: I07fc8e66e5bb0ade286761612b9b878fae34c183
Reviewed-on: http://review.whamcloud.com/15788
Tested-by: Jenkins
Reviewed-by: James Simmons <uja.ornl@yahoo.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Frank Zago <fzago@cray.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lnet/klnds/o2iblnd/o2iblnd.c
lnet/klnds/o2iblnd/o2iblnd.h
lnet/klnds/o2iblnd/o2iblnd_cb.c
lnet/klnds/o2iblnd/o2iblnd_modparams.c

index 2a21e65..00b3e52 100644 (file)
@@ -1398,56 +1398,15 @@ kiblnd_map_tx_pool(kib_tx_pool_t *tpo)
 }
 
 struct ib_mr *
-kiblnd_find_dma_mr(kib_hca_dev_t *hdev, __u64 addr, __u64 size)
-{
-        __u64   index;
-
-        LASSERT (hdev->ibh_mrs[0] != NULL);
-
-        if (hdev->ibh_nmrs == 1)
-                return hdev->ibh_mrs[0];
-
-        index = addr >> hdev->ibh_mr_shift;
-
-        if (index <  hdev->ibh_nmrs &&
-            index == ((addr + size - 1) >> hdev->ibh_mr_shift))
-                return hdev->ibh_mrs[index];
-
-        return NULL;
-}
-
-struct ib_mr *
 kiblnd_find_rd_dma_mr(kib_hca_dev_t *hdev, kib_rdma_desc_t *rd)
 {
-        struct ib_mr *prev_mr;
-        struct ib_mr *mr;
-        int           i;
+       LASSERT(hdev->ibh_mrs != NULL);
 
-        LASSERT (hdev->ibh_mrs[0] != NULL);
-
-        if (*kiblnd_tunables.kib_map_on_demand > 0 &&
-            *kiblnd_tunables.kib_map_on_demand <= rd->rd_nfrags)
-                return NULL;
-
-        if (hdev->ibh_nmrs == 1)
-                return hdev->ibh_mrs[0];
-
-        for (i = 0, mr = prev_mr = NULL;
-             i < rd->rd_nfrags; i++) {
-                mr = kiblnd_find_dma_mr(hdev,
-                                        rd->rd_frags[i].rf_addr,
-                                        rd->rd_frags[i].rf_nob);
-                if (prev_mr == NULL)
-                        prev_mr = mr;
-
-                if (mr == NULL || prev_mr != mr) {
-                        /* Can't covered by one single MR */
-                        mr = NULL;
-                        break;
-                }
-        }
+       if (*kiblnd_tunables.kib_map_on_demand > 0 &&
+           *kiblnd_tunables.kib_map_on_demand <= rd->rd_nfrags)
+               return NULL;
 
-        return mr;
+       return hdev->ibh_mrs;
 }
 
 static void
@@ -1913,145 +1872,6 @@ again:
        goto again;
 }
 
-void
-kiblnd_pmr_pool_unmap(kib_phys_mr_t *pmr)
-{
-        kib_pmr_pool_t      *ppo = pmr->pmr_pool;
-        struct ib_mr        *mr  = pmr->pmr_mr;
-
-        pmr->pmr_mr = NULL;
-        kiblnd_pool_free_node(&ppo->ppo_pool, &pmr->pmr_list);
-        if (mr != NULL)
-                ib_dereg_mr(mr);
-}
-
-int
-kiblnd_pmr_pool_map(kib_pmr_poolset_t *pps, kib_hca_dev_t *hdev,
-                    kib_rdma_desc_t *rd, __u64 *iova, kib_phys_mr_t **pp_pmr)
-{
-       kib_phys_mr_t    *pmr;
-       struct list_head *node;
-       int               rc;
-       int               i;
-
-       node = kiblnd_pool_alloc_node(&pps->pps_poolset);
-       if (node == NULL) {
-               CERROR("Failed to allocate PMR descriptor\n");
-               return -ENOMEM;
-       }
-
-       pmr = container_of(node, kib_phys_mr_t, pmr_list);
-       if (pmr->pmr_pool->ppo_hdev != hdev) {
-               kiblnd_pool_free_node(&pmr->pmr_pool->ppo_pool, node);
-               return -EAGAIN;
-       }
-
-        for (i = 0; i < rd->rd_nfrags; i ++) {
-                pmr->pmr_ipb[i].addr = rd->rd_frags[i].rf_addr;
-                pmr->pmr_ipb[i].size = rd->rd_frags[i].rf_nob;
-        }
-
-        pmr->pmr_mr = ib_reg_phys_mr(hdev->ibh_pd,
-                                     pmr->pmr_ipb, rd->rd_nfrags,
-                                     IB_ACCESS_LOCAL_WRITE |
-                                     IB_ACCESS_REMOTE_WRITE,
-                                     iova);
-        if (!IS_ERR(pmr->pmr_mr)) {
-                pmr->pmr_iova = *iova;
-                *pp_pmr = pmr;
-                return 0;
-        }
-
-       rc = PTR_ERR(pmr->pmr_mr);
-       CERROR("Failed ib_reg_phys_mr: %d\n", rc);
-
-       pmr->pmr_mr = NULL;
-       kiblnd_pool_free_node(&pmr->pmr_pool->ppo_pool, node);
-
-       return rc;
-}
-
-static void
-kiblnd_destroy_pmr_pool(kib_pool_t *pool)
-{
-        kib_pmr_pool_t *ppo = container_of(pool, kib_pmr_pool_t, ppo_pool);
-        kib_phys_mr_t  *pmr;
-
-        LASSERT (pool->po_allocated == 0);
-
-       while (!list_empty(&pool->po_free_list)) {
-               pmr = list_entry(pool->po_free_list.next,
-                                     kib_phys_mr_t, pmr_list);
-
-                LASSERT (pmr->pmr_mr == NULL);
-               list_del(&pmr->pmr_list);
-
-                if (pmr->pmr_ipb != NULL) {
-                        LIBCFS_FREE(pmr->pmr_ipb,
-                                    IBLND_MAX_RDMA_FRAGS *
-                                    sizeof(struct ib_phys_buf));
-                }
-
-                LIBCFS_FREE(pmr, sizeof(kib_phys_mr_t));
-        }
-
-        kiblnd_fini_pool(pool);
-        if (ppo->ppo_hdev != NULL)
-                kiblnd_hdev_decref(ppo->ppo_hdev);
-
-        LIBCFS_FREE(ppo, sizeof(kib_pmr_pool_t));
-}
-
-static inline int kiblnd_pmr_pool_size(int ncpts)
-{
-       int size = *kiblnd_tunables.kib_pmr_pool_size / ncpts;
-
-       return max(IBLND_PMR_POOL, size);
-}
-
-static int
-kiblnd_create_pmr_pool(kib_poolset_t *ps, int size, kib_pool_t **pp_po)
-{
-       struct kib_pmr_pool     *ppo;
-       struct kib_pool         *pool;
-       kib_phys_mr_t           *pmr;
-       int                     i;
-
-       LIBCFS_CPT_ALLOC(ppo, lnet_cpt_table(),
-                        ps->ps_cpt, sizeof(kib_pmr_pool_t));
-        if (ppo == NULL) {
-                CERROR("Failed to allocate PMR pool\n");
-                return -ENOMEM;
-        }
-
-        pool = &ppo->ppo_pool;
-        kiblnd_init_pool(ps, pool, size);
-
-        for (i = 0; i < size; i++) {
-               LIBCFS_CPT_ALLOC(pmr, lnet_cpt_table(),
-                                ps->ps_cpt, sizeof(kib_phys_mr_t));
-               if (pmr == NULL)
-                       break;
-
-               pmr->pmr_pool = ppo;
-               LIBCFS_CPT_ALLOC(pmr->pmr_ipb, lnet_cpt_table(), ps->ps_cpt,
-                                IBLND_MAX_RDMA_FRAGS * sizeof(*pmr->pmr_ipb));
-                if (pmr->pmr_ipb == NULL)
-                        break;
-
-               list_add(&pmr->pmr_list, &pool->po_free_list);
-        }
-
-        if (i < size) {
-                ps->ps_pool_destroy(pool);
-                return -ENOMEM;
-        }
-
-        ppo->ppo_hdev = kiblnd_current_hdev(ps->ps_net->ibn_dev);
-        *pp_po = pool;
-        return 0;
-}
-
 static void
 kiblnd_destroy_tx_pool(kib_pool_t *pool)
 {
@@ -2210,7 +2030,6 @@ kiblnd_net_fini_pools(kib_net_t *net)
        cfs_cpt_for_each(i, lnet_cpt_table()) {
                kib_tx_poolset_t        *tps;
                kib_fmr_poolset_t       *fps;
-               kib_pmr_poolset_t       *pps;
 
                if (net->ibn_tx_ps != NULL) {
                        tps = net->ibn_tx_ps[i];
@@ -2221,11 +2040,6 @@ kiblnd_net_fini_pools(kib_net_t *net)
                        fps = net->ibn_fmr_ps[i];
                        kiblnd_fini_fmr_poolset(fps);
                }
-
-               if (net->ibn_pmr_ps != NULL) {
-                       pps = net->ibn_pmr_ps[i];
-                       kiblnd_fini_poolset(&pps->pps_poolset);
-               }
        }
 
        if (net->ibn_tx_ps != NULL) {
@@ -2237,11 +2051,6 @@ kiblnd_net_fini_pools(kib_net_t *net)
                cfs_percpt_free(net->ibn_fmr_ps);
                net->ibn_fmr_ps = NULL;
        }
-
-       if (net->ibn_pmr_ps != NULL) {
-               cfs_percpt_free(net->ibn_pmr_ps);
-               net->ibn_pmr_ps = NULL;
-       }
 }
 
 static int
@@ -2253,8 +2062,7 @@ kiblnd_net_init_pools(kib_net_t *net, __u32 *cpts, int ncpts)
        int             i;
 
        read_lock_irqsave(&kiblnd_data.kib_global_lock, flags);
-       if (*kiblnd_tunables.kib_map_on_demand == 0 &&
-           net->ibn_dev->ibd_hdev->ibh_nmrs == 1) {
+       if (*kiblnd_tunables.kib_map_on_demand == 0) {
                read_unlock_irqrestore(&kiblnd_data.kib_global_lock,
                                           flags);
                goto create_tx_pool;
@@ -2271,12 +2079,12 @@ kiblnd_net_init_pools(kib_net_t *net, __u32 *cpts, int ncpts)
                goto failed;
        }
 
-       /* TX pool must be created later than FMR/PMR, see LU-2268
+       /* TX pool must be created later than FMR, see LU-2268
         * for details */
        LASSERT(net->ibn_tx_ps == NULL);
 
        /* premapping can fail if ibd_nmr > 1, so we always create
-        * FMR/PMR pool and map-on-demand if premapping failed */
+        * FMR pool and map-on-demand if premapping failed */
 
        net->ibn_fmr_ps = cfs_percpt_alloc(lnet_cpt_table(),
                                           sizeof(kib_fmr_poolset_t));
@@ -2291,56 +2099,15 @@ kiblnd_net_init_pools(kib_net_t *net, __u32 *cpts, int ncpts)
                rc = kiblnd_init_fmr_poolset(net->ibn_fmr_ps[cpt], cpt, net,
                                             kiblnd_fmr_pool_size(ncpts),
                                             kiblnd_fmr_flush_trigger(ncpts));
-               if (rc == -ENOSYS && i == 0) /* no FMR */
-                       break; /* create PMR pool */
-
-               if (rc != 0) { /* a real error */
+               if (rc != 0) {
                        CERROR("Can't initialize FMR pool for CPT %d: %d\n",
                               cpt, rc);
                        goto failed;
                }
        }
 
-       if (i > 0) {
+       if (i > 0)
                LASSERT(i == ncpts);
-               goto create_tx_pool;
-       }
-
-       cfs_percpt_free(net->ibn_fmr_ps);
-       net->ibn_fmr_ps = NULL;
-
-       CWARN("Device does not support FMR, failing back to PMR\n");
-
-       if (*kiblnd_tunables.kib_pmr_pool_size <
-           *kiblnd_tunables.kib_ntx / 4) {
-               CERROR("Can't set pmr pool size (%d) < ntx / 4(%d)\n",
-                      *kiblnd_tunables.kib_pmr_pool_size,
-                      *kiblnd_tunables.kib_ntx / 4);
-               rc = -EINVAL;
-               goto failed;
-       }
-
-       net->ibn_pmr_ps = cfs_percpt_alloc(lnet_cpt_table(),
-                                          sizeof(kib_pmr_poolset_t));
-       if (net->ibn_pmr_ps == NULL) {
-               CERROR("Failed to allocate PMR pool array\n");
-               rc = -ENOMEM;
-               goto failed;
-       }
-
-       for (i = 0; i < ncpts; i++) {
-               cpt = (cpts == NULL) ? i : cpts[i];
-               rc = kiblnd_init_poolset(&net->ibn_pmr_ps[cpt]->pps_poolset,
-                                        cpt, net, "PMR",
-                                        kiblnd_pmr_pool_size(ncpts),
-                                        kiblnd_create_pmr_pool,
-                                        kiblnd_destroy_pmr_pool, NULL, NULL);
-               if (rc != 0) {
-                       CERROR("Can't initialize PMR pool for CPT %d: %d\n",
-                              cpt, rc);
-                       goto failed;
-               }
-       }
 
  create_tx_pool:
        net->ibn_tx_ps = cfs_percpt_alloc(lnet_cpt_table(),
@@ -2407,13 +2174,6 @@ kiblnd_hdev_get_attr(kib_hca_dev_t *hdev)
                 return 0;
         }
 
-        for (hdev->ibh_mr_shift = 0;
-             hdev->ibh_mr_shift < 64; hdev->ibh_mr_shift ++) {
-                if (hdev->ibh_mr_size == (1ULL << hdev->ibh_mr_shift) ||
-                    hdev->ibh_mr_size == (1ULL << hdev->ibh_mr_shift) - 1)
-                        return 0;
-        }
-
         CERROR("Invalid mr size: "LPX64"\n", hdev->ibh_mr_size);
         return -EINVAL;
 }
@@ -2421,21 +2181,12 @@ kiblnd_hdev_get_attr(kib_hca_dev_t *hdev)
 static void
 kiblnd_hdev_cleanup_mrs(kib_hca_dev_t *hdev)
 {
-        int     i;
-
-        if (hdev->ibh_nmrs == 0 || hdev->ibh_mrs == NULL)
-                return;
-
-        for (i = 0; i < hdev->ibh_nmrs; i++) {
-                if (hdev->ibh_mrs[i] == NULL)
-                        break;
+       if (hdev->ibh_mrs == NULL)
+               return;
 
-                ib_dereg_mr(hdev->ibh_mrs[i]);
-        }
+       ib_dereg_mr(hdev->ibh_mrs);
 
-        LIBCFS_FREE(hdev->ibh_mrs, sizeof(*hdev->ibh_mrs) * hdev->ibh_nmrs);
-        hdev->ibh_mrs  = NULL;
-        hdev->ibh_nmrs = 0;
+       hdev->ibh_mrs = NULL;
 }
 
 void
@@ -2455,89 +2206,25 @@ kiblnd_hdev_destroy(kib_hca_dev_t *hdev)
 static int
 kiblnd_hdev_setup_mrs(kib_hca_dev_t *hdev)
 {
-        struct ib_mr *mr;
-        int           i;
-        int           rc;
-        __u64         mm_size;
-        __u64         mr_size;
-        int           acflags = IB_ACCESS_LOCAL_WRITE |
-                                IB_ACCESS_REMOTE_WRITE;
-
-        rc = kiblnd_hdev_get_attr(hdev);
-        if (rc != 0)
-                return rc;
-
-        if (hdev->ibh_mr_shift == 64) {
-                LIBCFS_ALLOC(hdev->ibh_mrs, 1 * sizeof(*hdev->ibh_mrs));
-                if (hdev->ibh_mrs == NULL) {
-                        CERROR("Failed to allocate MRs table\n");
-                        return -ENOMEM;
-                }
-
-                hdev->ibh_mrs[0] = NULL;
-                hdev->ibh_nmrs   = 1;
-
-                mr = ib_get_dma_mr(hdev->ibh_pd, acflags);
-                if (IS_ERR(mr)) {
-                        CERROR("Failed ib_get_dma_mr : %ld\n", PTR_ERR(mr));
-                        kiblnd_hdev_cleanup_mrs(hdev);
-                        return PTR_ERR(mr);
-                }
-
-                hdev->ibh_mrs[0] = mr;
-
-                goto out;
-        }
+       struct ib_mr *mr;
+       int           rc;
+       int           acflags = IB_ACCESS_LOCAL_WRITE |
+                               IB_ACCESS_REMOTE_WRITE;
 
-        mr_size = (1ULL << hdev->ibh_mr_shift);
-        mm_size = (unsigned long)high_memory - PAGE_OFFSET;
-
-        hdev->ibh_nmrs = (int)((mm_size + mr_size - 1) >> hdev->ibh_mr_shift);
-
-        if (hdev->ibh_mr_shift < 32 || hdev->ibh_nmrs > 1024) {
-                /* it's 4T..., assume we will re-code at that time */
-                CERROR("Can't support memory size: x"LPX64
-                       " with MR size: x"LPX64"\n", mm_size, mr_size);
-                return -EINVAL;
-        }
-
-        /* create an array of MRs to cover all memory */
-        LIBCFS_ALLOC(hdev->ibh_mrs, sizeof(*hdev->ibh_mrs) * hdev->ibh_nmrs);
-        if (hdev->ibh_mrs == NULL) {
-                CERROR("Failed to allocate MRs' table\n");
-                return -ENOMEM;
-        }
-
-        memset(hdev->ibh_mrs, 0, sizeof(*hdev->ibh_mrs) * hdev->ibh_nmrs);
-
-        for (i = 0; i < hdev->ibh_nmrs; i++) {
-                struct ib_phys_buf ipb;
-                __u64              iova;
-
-                ipb.size = hdev->ibh_mr_size;
-                ipb.addr = i * mr_size;
-                iova     = ipb.addr;
-
-                mr = ib_reg_phys_mr(hdev->ibh_pd, &ipb, 1, acflags, &iova);
-                if (IS_ERR(mr)) {
-                        CERROR("Failed ib_reg_phys_mr addr "LPX64
-                               " size "LPX64" : %ld\n",
-                               ipb.addr, ipb.size, PTR_ERR(mr));
-                        kiblnd_hdev_cleanup_mrs(hdev);
-                        return PTR_ERR(mr);
-                }
+       rc = kiblnd_hdev_get_attr(hdev);
+       if (rc != 0)
+               return rc;
 
-                LASSERT (iova == ipb.addr);
+       mr = ib_get_dma_mr(hdev->ibh_pd, acflags);
+       if (IS_ERR(mr)) {
+               CERROR("Failed ib_get_dma_mr: %ld\n", PTR_ERR(mr));
+               kiblnd_hdev_cleanup_mrs(hdev);
+               return PTR_ERR(mr);
+       }
 
-                hdev->ibh_mrs[i] = mr;
-        }
+       hdev->ibh_mrs = mr;
 
-out:
-        if (hdev->ibh_mr_size != ~0ULL || hdev->ibh_nmrs != 1)
-                LCONSOLE_INFO("Register global MR array, MR size: "
-                              LPX64", array size: %d\n",
-                              hdev->ibh_mr_size, hdev->ibh_nmrs);
-        return 0;
+       return 0;
 }
 
 static int
@@ -2707,14 +2394,9 @@ kiblnd_dev_failover(kib_dev_t *dev)
                        kiblnd_fail_poolset(&net->ibn_tx_ps[i]->tps_poolset,
                                            &zombie_tpo);
 
-                       if (net->ibn_fmr_ps != NULL) {
+                       if (net->ibn_fmr_ps != NULL)
                                kiblnd_fail_fmr_poolset(net->ibn_fmr_ps[i],
                                                        &zombie_fpo);
-
-                       } else if (net->ibn_pmr_ps != NULL) {
-                               kiblnd_fail_poolset(&net->ibn_pmr_ps[i]->
-                                                   pps_poolset, &zombie_ppo);
-                       }
                }
        }
 
index 4e8b15b..9183c53 100644 (file)
@@ -111,7 +111,6 @@ typedef struct
        int              *kib_ib_mtu;           /* IB MTU */
        int              *kib_map_on_demand;    /* map-on-demand if RD has more fragments
                                                 * than this value, 0 disable map-on-demand */
-       int              *kib_pmr_pool_size;    /* # physical MR in pool */
        int              *kib_fmr_pool_size;    /* # FMRs in pool */
        int              *kib_fmr_flush_trigger; /* When to trigger FMR flush */
        int              *kib_fmr_cache;        /* enable FMR pool cache? */
@@ -177,7 +176,6 @@ kiblnd_concurrent_sends_v1(void)
 /* Pools (shared by connections on each CPT) */
 /* These pools can grow at runtime, so don't need give a very large value */
 #define IBLND_TX_POOL                  256
-#define IBLND_PMR_POOL                 256
 #define IBLND_FMR_POOL                 256
 #define IBLND_FMR_POOL_FLUSH           192
 
@@ -232,8 +230,7 @@ typedef struct kib_hca_dev
        __u64                ibh_page_mask;     /* page mask of current HCA */
        int                  ibh_mr_shift;      /* bits shift of max MR size */
        __u64                ibh_mr_size;       /* size of MR */
-       int                  ibh_nmrs;          /* # of global MRs */
-       struct ib_mr       **ibh_mrs;           /* global MR */
+       struct ib_mr        *ibh_mrs;           /* global MR */
        struct ib_pd        *ibh_pd;            /* PD */
        kib_dev_t           *ibh_dev;           /* owner */
        atomic_t             ibh_ref;           /* refcount */
@@ -250,17 +247,6 @@ typedef struct
         struct page            *ibp_pages[0];           /* page array */
 } kib_pages_t;
 
-struct kib_pmr_pool;
-
-typedef struct {
-       struct list_head        pmr_list;       /* chain node */
-       struct ib_phys_buf     *pmr_ipb;        /* physical buffer */
-       struct ib_mr           *pmr_mr;         /* IB MR */
-       struct kib_pmr_pool    *pmr_pool;       /* owner of this MR */
-       __u64                   pmr_iova;       /* Virtual I/O address */
-       int                     pmr_refcount;   /* reference count */
-} kib_phys_mr_t;
-
 struct kib_pool;
 struct kib_poolset;
 
@@ -335,15 +321,6 @@ typedef struct {
         kib_pages_t            *tpo_tx_pages;           /* premapped tx msg pages */
 } kib_tx_pool_t;
 
-typedef struct {
-        kib_poolset_t           pps_poolset;            /* pool-set */
-} kib_pmr_poolset_t;
-
-typedef struct kib_pmr_pool {
-        struct kib_hca_dev     *ppo_hdev;               /* device for this pool */
-        kib_pool_t              ppo_pool;               /* pool */
-} kib_pmr_pool_t;
-
 typedef struct
 {
        spinlock_t              fps_lock;               /* serialize */
@@ -389,7 +366,6 @@ typedef struct kib_net
 
        kib_tx_poolset_t        **ibn_tx_ps;    /* tx pool-set */
        kib_fmr_poolset_t       **ibn_fmr_ps;   /* fmr pool-set */
-       kib_pmr_poolset_t       **ibn_pmr_ps;   /* pmr pool-set */
 
        kib_dev_t               *ibn_dev;       /* underlying IB device */
 } kib_net_t;
@@ -637,12 +613,8 @@ typedef struct kib_tx                           /* transmit message */
        struct scatterlist      *tx_frags;
        /* rdma phys page addrs */
        __u64                   *tx_pages;
-       union {
-               /* MR for physical buffer */
-               kib_phys_mr_t  *pmr;
-               /* FMR */
-               kib_fmr_t       fmr;
-       }                       tx_u;
+       /* FMR */
+       kib_fmr_t               fmr;
                                /* dma direction */
        int                     tx_dmadir;
 } kib_tx_t;
@@ -1083,8 +1055,6 @@ static inline unsigned int kiblnd_sg_dma_len(struct ib_device *dev,
 
 struct ib_mr *kiblnd_find_rd_dma_mr(kib_hca_dev_t *hdev,
                                     kib_rdma_desc_t *rd);
-struct ib_mr *kiblnd_find_dma_mr(kib_hca_dev_t *hdev,
-                                 __u64 addr, __u64 size);
 void kiblnd_map_rx_descs(kib_conn_t *conn);
 void kiblnd_unmap_rx_descs(kib_conn_t *conn);
 void kiblnd_pool_free_node(kib_pool_t *pool, struct list_head *node);
@@ -1094,10 +1064,6 @@ int  kiblnd_fmr_pool_map(kib_fmr_poolset_t *fps, __u64 *pages,
                          int npages, __u64 iov, kib_fmr_t *fmr);
 void kiblnd_fmr_pool_unmap(kib_fmr_t *fmr, int status);
 
-int  kiblnd_pmr_pool_map(kib_pmr_poolset_t *pps, kib_hca_dev_t *hdev,
-                         kib_rdma_desc_t *rd, __u64 *iova, kib_phys_mr_t **pp_pmr);
-void kiblnd_pmr_pool_unmap(kib_phys_mr_t *pmr);
-
 int  kiblnd_tunables_init(void);
 void kiblnd_tunables_fini(void);
 
index 0dd9cdf..4a1916e 100644 (file)
@@ -132,7 +132,6 @@ kiblnd_get_idle_tx(lnet_ni_t *ni, lnet_nid_t target)
         LASSERT (tx->tx_conn == NULL);
         LASSERT (tx->tx_lntmsg[0] == NULL);
         LASSERT (tx->tx_lntmsg[1] == NULL);
-        LASSERT (tx->tx_u.pmr == NULL);
         LASSERT (tx->tx_nfrags == 0);
 
         return tx;
@@ -159,7 +158,7 @@ kiblnd_post_rx (kib_rx_t *rx, int credit)
        kib_conn_t         *conn = rx->rx_conn;
        kib_net_t          *net = conn->ibc_peer->ibp_ni->ni_data;
        struct ib_recv_wr  *bad_wrq = NULL;
-       struct ib_mr       *mr;
+       struct ib_mr       *mr = conn->ibc_hdev->ibh_mrs;
        int                 rc;
 
        LASSERT (net != NULL);
@@ -167,9 +166,7 @@ kiblnd_post_rx (kib_rx_t *rx, int credit)
        LASSERT (credit == IBLND_POSTRX_NO_CREDIT ||
                 credit == IBLND_POSTRX_PEER_CREDIT ||
                 credit == IBLND_POSTRX_RSRVD_CREDIT);
-
-       mr = kiblnd_find_dma_mr(conn->ibc_hdev, rx->rx_msgaddr, IBLND_MSG_SIZE);
-       LASSERT (mr != NULL);
+       LASSERT(mr != NULL);
 
         rx->rx_sge.lkey   = mr->lkey;
         rx->rx_sge.addr   = rx->rx_msgaddr;
@@ -592,57 +589,21 @@ kiblnd_fmr_map_tx(kib_net_t *net, kib_tx_t *tx, kib_rdma_desc_t *rd, int nob)
        cpt = tx->tx_pool->tpo_pool.po_owner->ps_cpt;
 
        fps = net->ibn_fmr_ps[cpt];
-       rc = kiblnd_fmr_pool_map(fps, pages, npages, 0, &tx->tx_u.fmr);
+       rc = kiblnd_fmr_pool_map(fps, pages, npages, 0, &tx->fmr);
         if (rc != 0) {
                 CERROR ("Can't map %d pages: %d\n", npages, rc);
                 return rc;
         }
 
-        /* If rd is not tx_rd, it's going to get sent to a peer, who will need
-         * the rkey */
-        rd->rd_key = (rd != tx->tx_rd) ? tx->tx_u.fmr.fmr_pfmr->fmr->rkey :
-                                         tx->tx_u.fmr.fmr_pfmr->fmr->lkey;
-        rd->rd_frags[0].rf_addr &= ~hdev->ibh_page_mask;
-        rd->rd_frags[0].rf_nob   = nob;
-        rd->rd_nfrags = 1;
-
-        return 0;
-}
-
-static int
-kiblnd_pmr_map_tx(kib_net_t *net, kib_tx_t *tx, kib_rdma_desc_t *rd, int nob)
-{
-       kib_hca_dev_t           *hdev;
-       kib_pmr_poolset_t       *pps;
-       __u64                   iova;
-       int                     cpt;
-       int                     rc;
-
-       LASSERT(tx->tx_pool != NULL);
-       LASSERT(tx->tx_pool->tpo_pool.po_owner != NULL);
-
-       hdev = tx->tx_pool->tpo_hdev;
-
-       iova = rd->rd_frags[0].rf_addr & ~hdev->ibh_page_mask;
-
-       cpt = tx->tx_pool->tpo_pool.po_owner->ps_cpt;
-
-       pps = net->ibn_pmr_ps[cpt];
-       rc = kiblnd_pmr_pool_map(pps, hdev, rd, &iova, &tx->tx_u.pmr);
-        if (rc != 0) {
-                CERROR("Failed to create MR by phybuf: %d\n", rc);
-                return rc;
-        }
-
-        /* If rd is not tx_rd, it's going to get sent to a peer, who will need
-         * the rkey */
-        rd->rd_key = (rd != tx->tx_rd) ? tx->tx_u.pmr->pmr_mr->rkey :
-                                         tx->tx_u.pmr->pmr_mr->lkey;
-        rd->rd_nfrags = 1;
-        rd->rd_frags[0].rf_addr = iova;
-        rd->rd_frags[0].rf_nob  = nob;
+       /* If rd is not tx_rd, it's going to get sent to a peer, who will need
+        * the rkey */
+       rd->rd_key = (rd != tx->tx_rd) ? tx->fmr.fmr_pfmr->fmr->rkey :
+                                        tx->fmr.fmr_pfmr->fmr->lkey;
+       rd->rd_frags[0].rf_addr &= ~hdev->ibh_page_mask;
+       rd->rd_frags[0].rf_nob   = nob;
+       rd->rd_nfrags = 1;
 
-        return 0;
+       return 0;
 }
 
 static void
@@ -652,13 +613,9 @@ kiblnd_unmap_tx(lnet_ni_t *ni, kib_tx_t *tx)
 
        LASSERT(net != NULL);
 
-       if (net->ibn_fmr_ps != NULL && tx->tx_u.fmr.fmr_pfmr != NULL) {
-               kiblnd_fmr_pool_unmap(&tx->tx_u.fmr, tx->tx_status);
-               tx->tx_u.fmr.fmr_pfmr = NULL;
-
-       } else if (net->ibn_pmr_ps != NULL && tx->tx_u.pmr != NULL) {
-               kiblnd_pmr_pool_unmap(tx->tx_u.pmr);
-               tx->tx_u.pmr = NULL;
+       if (net->ibn_fmr_ps != NULL && tx->fmr.fmr_pfmr != NULL) {
+               kiblnd_fmr_pool_unmap(&tx->fmr, tx->tx_status);
+               tx->fmr.fmr_pfmr = NULL;
        }
 
         if (tx->tx_nfrags != 0) {
@@ -703,8 +660,6 @@ kiblnd_map_tx(lnet_ni_t *ni, kib_tx_t *tx, kib_rdma_desc_t *rd, int nfrags)
 
        if (net->ibn_fmr_ps != NULL)
                return kiblnd_fmr_map_tx(net, tx, rd, nob);
-       else if (net->ibn_pmr_ps != NULL)
-               return kiblnd_pmr_map_tx(net, tx, rd, nob);
 
        return -EINVAL;
 }
@@ -1070,17 +1025,15 @@ kiblnd_init_tx_msg (lnet_ni_t *ni, kib_tx_t *tx, int type, int body_nob)
         struct ib_sge     *sge = &tx->tx_sge[tx->tx_nwrq];
         struct ib_send_wr *wrq = &tx->tx_wrq[tx->tx_nwrq];
         int                nob = offsetof (kib_msg_t, ibm_u) + body_nob;
-        struct ib_mr      *mr;
+       struct ib_mr      *mr = hdev->ibh_mrs;
 
         LASSERT (tx->tx_nwrq >= 0);
         LASSERT (tx->tx_nwrq < IBLND_MAX_RDMA_FRAGS + 1);
         LASSERT (nob <= IBLND_MSG_SIZE);
+       LASSERT(mr != NULL);
 
         kiblnd_init_msg(tx->tx_msg, type, body_nob);
 
-        mr = kiblnd_find_dma_mr(hdev, tx->tx_msgaddr, nob);
-        LASSERT (mr != NULL);
-
         sge->lkey   = mr->lkey;
         sge->addr   = tx->tx_msgaddr;
         sge->length = nob;
index fbaa7bb..cdddcd7 100644 (file)
@@ -126,11 +126,6 @@ static int fmr_cache = 1;
 CFS_MODULE_PARM(fmr_cache, "i", int, 0444,
                "non-zero to enable FMR caching");
 
-/* NB: this value is shared by all CPTs, it can grow at runtime */
-static int pmr_pool_size = 512;
-CFS_MODULE_PARM(pmr_pool_size, "i", int, 0444,
-               "size of MR cache pmr pool on each CPT");
-
 /*
  * 0: disable failover
  * 1: enable failover if necessary
@@ -170,7 +165,6 @@ kib_tunables_t kiblnd_tunables = {
         .kib_fmr_pool_size          = &fmr_pool_size,
         .kib_fmr_flush_trigger      = &fmr_flush_trigger,
         .kib_fmr_cache              = &fmr_cache,
-        .kib_pmr_pool_size          = &pmr_pool_size,
         .kib_require_priv_port      = &require_privileged_port,
        .kib_use_priv_port          = &use_privileged_port,
        .kib_nscheds                = &nscheds
@@ -335,14 +329,6 @@ static struct ctl_table kiblnd_ctl_table[] = {
        },
        {
                INIT_CTL_NAME
-               .procname       = "pmr_pool_size",
-               .data           = &pmr_pool_size,
-               .maxlen         = sizeof(int),
-               .mode           = 0444,
-               .proc_handler   = &proc_dointvec
-       },
-       {
-               INIT_CTL_NAME
                .procname       = "dev_failover",
                .data           = &dev_failover,
                .maxlen         = sizeof(int),