aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatan Barak <matanb@mellanox.com>2016-02-29 11:05:28 -0500
committerDoug Ledford <dledford@redhat.com>2016-03-01 11:18:37 -0500
commita606b0f6691daf861482f8b77326f672238ffbfd (patch)
treebd599914cb46335bea1e9efa2c626c569e57c383
parent56e11d628c5d0553d9fc2ca1855144970e6b9eb6 (diff)
net/mlx5: Refactor mlx5_core_mr to mkey
Mlx5's mkey mechanism is also used for memory windows. The current code base uses MR (memory region) naming, which is inaccurate. Changing MR to mkey in order to represent its different usages more accurately. Signed-off-by: Matan Barak <matanb@mellanox.com> Reviewed-by: Yishai Hadas <yishaih@mellanox.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
-rw-r--r--drivers/infiniband/hw/mlx5/cq.c16
-rw-r--r--drivers/infiniband/hw/mlx5/mlx5_ib.h6
-rw-r--r--drivers/infiniband/hw/mlx5/mr.c58
-rw-r--r--drivers/infiniband/hw/mlx5/odp.c10
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/en.h2
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/en_main.c12
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/main.c6
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/mr.c54
-rw-r--r--include/linux/mlx5/driver.h24
-rw-r--r--include/linux/mlx5/qp.h4
10 files changed, 98 insertions, 94 deletions
diff --git a/drivers/infiniband/hw/mlx5/cq.c b/drivers/infiniband/hw/mlx5/cq.c
index 2a9ad8401750..a00ba4418de9 100644
--- a/drivers/infiniband/hw/mlx5/cq.c
+++ b/drivers/infiniband/hw/mlx5/cq.c
@@ -434,7 +434,7 @@ static int mlx5_poll_one(struct mlx5_ib_cq *cq,
434 struct mlx5_core_qp *mqp; 434 struct mlx5_core_qp *mqp;
435 struct mlx5_ib_wq *wq; 435 struct mlx5_ib_wq *wq;
436 struct mlx5_sig_err_cqe *sig_err_cqe; 436 struct mlx5_sig_err_cqe *sig_err_cqe;
437 struct mlx5_core_mr *mmr; 437 struct mlx5_core_mkey *mmkey;
438 struct mlx5_ib_mr *mr; 438 struct mlx5_ib_mr *mr;
439 uint8_t opcode; 439 uint8_t opcode;
440 uint32_t qpn; 440 uint32_t qpn;
@@ -539,17 +539,17 @@ repoll:
539 case MLX5_CQE_SIG_ERR: 539 case MLX5_CQE_SIG_ERR:
540 sig_err_cqe = (struct mlx5_sig_err_cqe *)cqe64; 540 sig_err_cqe = (struct mlx5_sig_err_cqe *)cqe64;
541 541
542 read_lock(&dev->mdev->priv.mr_table.lock); 542 read_lock(&dev->mdev->priv.mkey_table.lock);
543 mmr = __mlx5_mr_lookup(dev->mdev, 543 mmkey = __mlx5_mr_lookup(dev->mdev,
544 mlx5_base_mkey(be32_to_cpu(sig_err_cqe->mkey))); 544 mlx5_base_mkey(be32_to_cpu(sig_err_cqe->mkey)));
545 if (unlikely(!mmr)) { 545 if (unlikely(!mmkey)) {
546 read_unlock(&dev->mdev->priv.mr_table.lock); 546 read_unlock(&dev->mdev->priv.mkey_table.lock);
547 mlx5_ib_warn(dev, "CQE@CQ %06x for unknown MR %6x\n", 547 mlx5_ib_warn(dev, "CQE@CQ %06x for unknown MR %6x\n",
548 cq->mcq.cqn, be32_to_cpu(sig_err_cqe->mkey)); 548 cq->mcq.cqn, be32_to_cpu(sig_err_cqe->mkey));
549 return -EINVAL; 549 return -EINVAL;
550 } 550 }
551 551
552 mr = to_mibmr(mmr); 552 mr = to_mibmr(mmkey);
553 get_sig_err_item(sig_err_cqe, &mr->sig->err_item); 553 get_sig_err_item(sig_err_cqe, &mr->sig->err_item);
554 mr->sig->sig_err_exists = true; 554 mr->sig->sig_err_exists = true;
555 mr->sig->sigerr_count++; 555 mr->sig->sigerr_count++;
@@ -561,7 +561,7 @@ repoll:
561 mr->sig->err_item.expected, 561 mr->sig->err_item.expected,
562 mr->sig->err_item.actual); 562 mr->sig->err_item.actual);
563 563
564 read_unlock(&dev->mdev->priv.mr_table.lock); 564 read_unlock(&dev->mdev->priv.mkey_table.lock);
565 goto repoll; 565 goto repoll;
566 } 566 }
567 567
diff --git a/drivers/infiniband/hw/mlx5/mlx5_ib.h b/drivers/infiniband/hw/mlx5/mlx5_ib.h
index f84ec2b6425c..4167d67179ff 100644
--- a/drivers/infiniband/hw/mlx5/mlx5_ib.h
+++ b/drivers/infiniband/hw/mlx5/mlx5_ib.h
@@ -446,7 +446,7 @@ struct mlx5_ib_mr {
446 int ndescs; 446 int ndescs;
447 int max_descs; 447 int max_descs;
448 int desc_size; 448 int desc_size;
449 struct mlx5_core_mr mmr; 449 struct mlx5_core_mkey mmkey;
450 struct ib_umem *umem; 450 struct ib_umem *umem;
451 struct mlx5_shared_mr_info *smr_info; 451 struct mlx5_shared_mr_info *smr_info;
452 struct list_head list; 452 struct list_head list;
@@ -603,9 +603,9 @@ static inline struct mlx5_ib_qp *to_mibqp(struct mlx5_core_qp *mqp)
603 return container_of(mqp, struct mlx5_ib_qp_base, mqp)->container_mibqp; 603 return container_of(mqp, struct mlx5_ib_qp_base, mqp)->container_mibqp;
604} 604}
605 605
606static inline struct mlx5_ib_mr *to_mibmr(struct mlx5_core_mr *mmr) 606static inline struct mlx5_ib_mr *to_mibmr(struct mlx5_core_mkey *mmkey)
607{ 607{
608 return container_of(mmr, struct mlx5_ib_mr, mmr); 608 return container_of(mmkey, struct mlx5_ib_mr, mmkey);
609} 609}
610 610
611static inline struct mlx5_ib_pd *to_mpd(struct ib_pd *ibpd) 611static inline struct mlx5_ib_pd *to_mpd(struct ib_pd *ibpd)
diff --git a/drivers/infiniband/hw/mlx5/mr.c b/drivers/infiniband/hw/mlx5/mr.c
index cf26cd1f1fa2..399e2b5fb573 100644
--- a/drivers/infiniband/hw/mlx5/mr.c
+++ b/drivers/infiniband/hw/mlx5/mr.c
@@ -57,7 +57,7 @@ static int clean_mr(struct mlx5_ib_mr *mr);
57 57
58static int destroy_mkey(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr) 58static int destroy_mkey(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr)
59{ 59{
60 int err = mlx5_core_destroy_mkey(dev->mdev, &mr->mmr); 60 int err = mlx5_core_destroy_mkey(dev->mdev, &mr->mmkey);
61 61
62#ifdef CONFIG_INFINIBAND_ON_DEMAND_PAGING 62#ifdef CONFIG_INFINIBAND_ON_DEMAND_PAGING
63 /* Wait until all page fault handlers using the mr complete. */ 63 /* Wait until all page fault handlers using the mr complete. */
@@ -120,7 +120,7 @@ static void reg_mr_callback(int status, void *context)
120 struct mlx5_cache_ent *ent = &cache->ent[c]; 120 struct mlx5_cache_ent *ent = &cache->ent[c];
121 u8 key; 121 u8 key;
122 unsigned long flags; 122 unsigned long flags;
123 struct mlx5_mr_table *table = &dev->mdev->priv.mr_table; 123 struct mlx5_mkey_table *table = &dev->mdev->priv.mkey_table;
124 int err; 124 int err;
125 125
126 spin_lock_irqsave(&ent->lock, flags); 126 spin_lock_irqsave(&ent->lock, flags);
@@ -147,7 +147,7 @@ static void reg_mr_callback(int status, void *context)
147 spin_lock_irqsave(&dev->mdev->priv.mkey_lock, flags); 147 spin_lock_irqsave(&dev->mdev->priv.mkey_lock, flags);
148 key = dev->mdev->priv.mkey_key++; 148 key = dev->mdev->priv.mkey_key++;
149 spin_unlock_irqrestore(&dev->mdev->priv.mkey_lock, flags); 149 spin_unlock_irqrestore(&dev->mdev->priv.mkey_lock, flags);
150 mr->mmr.key = mlx5_idx_to_mkey(be32_to_cpu(mr->out.mkey) & 0xffffff) | key; 150 mr->mmkey.key = mlx5_idx_to_mkey(be32_to_cpu(mr->out.mkey) & 0xffffff) | key;
151 151
152 cache->last_add = jiffies; 152 cache->last_add = jiffies;
153 153
@@ -158,10 +158,10 @@ static void reg_mr_callback(int status, void *context)
158 spin_unlock_irqrestore(&ent->lock, flags); 158 spin_unlock_irqrestore(&ent->lock, flags);
159 159
160 write_lock_irqsave(&table->lock, flags); 160 write_lock_irqsave(&table->lock, flags);
161 err = radix_tree_insert(&table->tree, mlx5_base_mkey(mr->mmr.key), 161 err = radix_tree_insert(&table->tree, mlx5_base_mkey(mr->mmkey.key),
162 &mr->mmr); 162 &mr->mmkey);
163 if (err) 163 if (err)
164 pr_err("Error inserting to mr tree. 0x%x\n", -err); 164 pr_err("Error inserting to mkey tree. 0x%x\n", -err);
165 write_unlock_irqrestore(&table->lock, flags); 165 write_unlock_irqrestore(&table->lock, flags);
166} 166}
167 167
@@ -202,7 +202,7 @@ static int add_keys(struct mlx5_ib_dev *dev, int c, int num)
202 spin_lock_irq(&ent->lock); 202 spin_lock_irq(&ent->lock);
203 ent->pending++; 203 ent->pending++;
204 spin_unlock_irq(&ent->lock); 204 spin_unlock_irq(&ent->lock);
205 err = mlx5_core_create_mkey(dev->mdev, &mr->mmr, in, 205 err = mlx5_core_create_mkey(dev->mdev, &mr->mmkey, in,
206 sizeof(*in), reg_mr_callback, 206 sizeof(*in), reg_mr_callback,
207 mr, &mr->out); 207 mr, &mr->out);
208 if (err) { 208 if (err) {
@@ -691,14 +691,14 @@ struct ib_mr *mlx5_ib_get_dma_mr(struct ib_pd *pd, int acc)
691 seg->qpn_mkey7_0 = cpu_to_be32(0xffffff << 8); 691 seg->qpn_mkey7_0 = cpu_to_be32(0xffffff << 8);
692 seg->start_addr = 0; 692 seg->start_addr = 0;
693 693
694 err = mlx5_core_create_mkey(mdev, &mr->mmr, in, sizeof(*in), NULL, NULL, 694 err = mlx5_core_create_mkey(mdev, &mr->mmkey, in, sizeof(*in), NULL, NULL,
695 NULL); 695 NULL);
696 if (err) 696 if (err)
697 goto err_in; 697 goto err_in;
698 698
699 kfree(in); 699 kfree(in);
700 mr->ibmr.lkey = mr->mmr.key; 700 mr->ibmr.lkey = mr->mmkey.key;
701 mr->ibmr.rkey = mr->mmr.key; 701 mr->ibmr.rkey = mr->mmkey.key;
702 mr->umem = NULL; 702 mr->umem = NULL;
703 703
704 return &mr->ibmr; 704 return &mr->ibmr;
@@ -897,7 +897,7 @@ static struct mlx5_ib_mr *reg_umr(struct ib_pd *pd, struct ib_umem *umem,
897 897
898 memset(&umrwr, 0, sizeof(umrwr)); 898 memset(&umrwr, 0, sizeof(umrwr));
899 umrwr.wr.wr_id = (u64)(unsigned long)&umr_context; 899 umrwr.wr.wr_id = (u64)(unsigned long)&umr_context;
900 prep_umr_reg_wqe(pd, &umrwr.wr, &sg, dma, npages, mr->mmr.key, 900 prep_umr_reg_wqe(pd, &umrwr.wr, &sg, dma, npages, mr->mmkey.key,
901 page_shift, virt_addr, len, access_flags); 901 page_shift, virt_addr, len, access_flags);
902 902
903 mlx5_ib_init_umr_context(&umr_context); 903 mlx5_ib_init_umr_context(&umr_context);
@@ -914,9 +914,9 @@ static struct mlx5_ib_mr *reg_umr(struct ib_pd *pd, struct ib_umem *umem,
914 } 914 }
915 } 915 }
916 916
917 mr->mmr.iova = virt_addr; 917 mr->mmkey.iova = virt_addr;
918 mr->mmr.size = len; 918 mr->mmkey.size = len;
919 mr->mmr.pd = to_mpd(pd)->pdn; 919 mr->mmkey.pd = to_mpd(pd)->pdn;
920 920
921 mr->live = 1; 921 mr->live = 1;
922 922
@@ -1027,7 +1027,7 @@ int mlx5_ib_update_mtt(struct mlx5_ib_mr *mr, u64 start_page_index, int npages,
1027 wr.wr.opcode = MLX5_IB_WR_UMR; 1027 wr.wr.opcode = MLX5_IB_WR_UMR;
1028 wr.npages = sg.length / sizeof(u64); 1028 wr.npages = sg.length / sizeof(u64);
1029 wr.page_shift = PAGE_SHIFT; 1029 wr.page_shift = PAGE_SHIFT;
1030 wr.mkey = mr->mmr.key; 1030 wr.mkey = mr->mmkey.key;
1031 wr.target.offset = start_page_index; 1031 wr.target.offset = start_page_index;
1032 1032
1033 mlx5_ib_init_umr_context(&umr_context); 1033 mlx5_ib_init_umr_context(&umr_context);
@@ -1100,7 +1100,7 @@ static struct mlx5_ib_mr *reg_create(struct ib_mr *ibmr, struct ib_pd *pd,
1100 in->seg.qpn_mkey7_0 = cpu_to_be32(0xffffff << 8); 1100 in->seg.qpn_mkey7_0 = cpu_to_be32(0xffffff << 8);
1101 in->xlat_oct_act_size = cpu_to_be32(get_octo_len(virt_addr, length, 1101 in->xlat_oct_act_size = cpu_to_be32(get_octo_len(virt_addr, length,
1102 1 << page_shift)); 1102 1 << page_shift));
1103 err = mlx5_core_create_mkey(dev->mdev, &mr->mmr, in, inlen, NULL, 1103 err = mlx5_core_create_mkey(dev->mdev, &mr->mmkey, in, inlen, NULL,
1104 NULL, NULL); 1104 NULL, NULL);
1105 if (err) { 1105 if (err) {
1106 mlx5_ib_warn(dev, "create mkey failed\n"); 1106 mlx5_ib_warn(dev, "create mkey failed\n");
@@ -1111,7 +1111,7 @@ static struct mlx5_ib_mr *reg_create(struct ib_mr *ibmr, struct ib_pd *pd,
1111 mr->live = 1; 1111 mr->live = 1;
1112 kvfree(in); 1112 kvfree(in);
1113 1113
1114 mlx5_ib_dbg(dev, "mkey = 0x%x\n", mr->mmr.key); 1114 mlx5_ib_dbg(dev, "mkey = 0x%x\n", mr->mmkey.key);
1115 1115
1116 return mr; 1116 return mr;
1117 1117
@@ -1130,8 +1130,8 @@ static void set_mr_fileds(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr,
1130{ 1130{
1131 mr->npages = npages; 1131 mr->npages = npages;
1132 atomic_add(npages, &dev->mdev->priv.reg_pages); 1132 atomic_add(npages, &dev->mdev->priv.reg_pages);
1133 mr->ibmr.lkey = mr->mmr.key; 1133 mr->ibmr.lkey = mr->mmkey.key;
1134 mr->ibmr.rkey = mr->mmr.key; 1134 mr->ibmr.rkey = mr->mmkey.key;
1135 mr->ibmr.length = length; 1135 mr->ibmr.length = length;
1136 mr->access_flags = access_flags; 1136 mr->access_flags = access_flags;
1137} 1137}
@@ -1179,7 +1179,7 @@ struct ib_mr *mlx5_ib_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
1179 goto error; 1179 goto error;
1180 } 1180 }
1181 1181
1182 mlx5_ib_dbg(dev, "mkey 0x%x\n", mr->mmr.key); 1182 mlx5_ib_dbg(dev, "mkey 0x%x\n", mr->mmkey.key);
1183 1183
1184 mr->umem = umem; 1184 mr->umem = umem;
1185 set_mr_fileds(dev, mr, npages, length, access_flags); 1185 set_mr_fileds(dev, mr, npages, length, access_flags);
@@ -1205,7 +1205,7 @@ static int unreg_umr(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr)
1205 1205
1206 memset(&umrwr.wr, 0, sizeof(umrwr)); 1206 memset(&umrwr.wr, 0, sizeof(umrwr));
1207 umrwr.wr.wr_id = (u64)(unsigned long)&umr_context; 1207 umrwr.wr.wr_id = (u64)(unsigned long)&umr_context;
1208 prep_umr_unreg_wqe(dev, &umrwr.wr, mr->mmr.key); 1208 prep_umr_unreg_wqe(dev, &umrwr.wr, mr->mmkey.key);
1209 1209
1210 mlx5_ib_init_umr_context(&umr_context); 1210 mlx5_ib_init_umr_context(&umr_context);
1211 down(&umrc->sem); 1211 down(&umrc->sem);
@@ -1259,7 +1259,7 @@ static int rereg_umr(struct ib_pd *pd, struct mlx5_ib_mr *mr, u64 virt_addr,
1259 umrwr.wr.send_flags |= MLX5_IB_SEND_UMR_UPDATE_TRANSLATION; 1259 umrwr.wr.send_flags |= MLX5_IB_SEND_UMR_UPDATE_TRANSLATION;
1260 } 1260 }
1261 1261
1262 prep_umr_wqe_common(pd, &umrwr.wr, &sg, dma, npages, mr->mmr.key, 1262 prep_umr_wqe_common(pd, &umrwr.wr, &sg, dma, npages, mr->mmkey.key,
1263 page_shift); 1263 page_shift);
1264 1264
1265 if (flags & IB_MR_REREG_PD) { 1265 if (flags & IB_MR_REREG_PD) {
@@ -1371,7 +1371,7 @@ int mlx5_ib_rereg_user_mr(struct ib_mr *ib_mr, int flags, u64 start,
1371 1371
1372 if (flags & IB_MR_REREG_PD) { 1372 if (flags & IB_MR_REREG_PD) {
1373 ib_mr->pd = pd; 1373 ib_mr->pd = pd;
1374 mr->mmr.pd = to_mpd(pd)->pdn; 1374 mr->mmkey.pd = to_mpd(pd)->pdn;
1375 } 1375 }
1376 1376
1377 if (flags & IB_MR_REREG_ACCESS) 1377 if (flags & IB_MR_REREG_ACCESS)
@@ -1380,8 +1380,8 @@ int mlx5_ib_rereg_user_mr(struct ib_mr *ib_mr, int flags, u64 start,
1380 if (flags & IB_MR_REREG_TRANS) { 1380 if (flags & IB_MR_REREG_TRANS) {
1381 atomic_sub(mr->npages, &dev->mdev->priv.reg_pages); 1381 atomic_sub(mr->npages, &dev->mdev->priv.reg_pages);
1382 set_mr_fileds(dev, mr, npages, len, access_flags); 1382 set_mr_fileds(dev, mr, npages, len, access_flags);
1383 mr->mmr.iova = addr; 1383 mr->mmkey.iova = addr;
1384 mr->mmr.size = len; 1384 mr->mmkey.size = len;
1385 } 1385 }
1386#ifdef CONFIG_INFINIBAND_ON_DEMAND_PAGING 1386#ifdef CONFIG_INFINIBAND_ON_DEMAND_PAGING
1387 update_odp_mr(mr); 1387 update_odp_mr(mr);
@@ -1461,7 +1461,7 @@ static int clean_mr(struct mlx5_ib_mr *mr)
1461 err = destroy_mkey(dev, mr); 1461 err = destroy_mkey(dev, mr);
1462 if (err) { 1462 if (err) {
1463 mlx5_ib_warn(dev, "failed to destroy mkey 0x%x (%d)\n", 1463 mlx5_ib_warn(dev, "failed to destroy mkey 0x%x (%d)\n",
1464 mr->mmr.key, err); 1464 mr->mmkey.key, err);
1465 return err; 1465 return err;
1466 } 1466 }
1467 } else { 1467 } else {
@@ -1587,13 +1587,13 @@ struct ib_mr *mlx5_ib_alloc_mr(struct ib_pd *pd,
1587 } 1587 }
1588 1588
1589 in->seg.flags = MLX5_PERM_UMR_EN | access_mode; 1589 in->seg.flags = MLX5_PERM_UMR_EN | access_mode;
1590 err = mlx5_core_create_mkey(dev->mdev, &mr->mmr, in, sizeof(*in), 1590 err = mlx5_core_create_mkey(dev->mdev, &mr->mmkey, in, sizeof(*in),
1591 NULL, NULL, NULL); 1591 NULL, NULL, NULL);
1592 if (err) 1592 if (err)
1593 goto err_destroy_psv; 1593 goto err_destroy_psv;
1594 1594
1595 mr->ibmr.lkey = mr->mmr.key; 1595 mr->ibmr.lkey = mr->mmkey.key;
1596 mr->ibmr.rkey = mr->mmr.key; 1596 mr->ibmr.rkey = mr->mmkey.key;
1597 mr->umem = NULL; 1597 mr->umem = NULL;
1598 kfree(in); 1598 kfree(in);
1599 1599
diff --git a/drivers/infiniband/hw/mlx5/odp.c b/drivers/infiniband/hw/mlx5/odp.c
index b8d76361a48d..34e79e709c67 100644
--- a/drivers/infiniband/hw/mlx5/odp.c
+++ b/drivers/infiniband/hw/mlx5/odp.c
@@ -142,13 +142,13 @@ static struct mlx5_ib_mr *mlx5_ib_odp_find_mr_lkey(struct mlx5_ib_dev *dev,
142 u32 key) 142 u32 key)
143{ 143{
144 u32 base_key = mlx5_base_mkey(key); 144 u32 base_key = mlx5_base_mkey(key);
145 struct mlx5_core_mr *mmr = __mlx5_mr_lookup(dev->mdev, base_key); 145 struct mlx5_core_mkey *mmkey = __mlx5_mr_lookup(dev->mdev, base_key);
146 struct mlx5_ib_mr *mr = container_of(mmr, struct mlx5_ib_mr, mmr); 146 struct mlx5_ib_mr *mr = container_of(mmkey, struct mlx5_ib_mr, mmkey);
147 147
148 if (!mmr || mmr->key != key || !mr->live) 148 if (!mmkey || mmkey->key != key || !mr->live)
149 return NULL; 149 return NULL;
150 150
151 return container_of(mmr, struct mlx5_ib_mr, mmr); 151 return container_of(mmkey, struct mlx5_ib_mr, mmkey);
152} 152}
153 153
154static void mlx5_ib_page_fault_resume(struct mlx5_ib_qp *qp, 154static void mlx5_ib_page_fault_resume(struct mlx5_ib_qp *qp,
@@ -232,7 +232,7 @@ static int pagefault_single_data_segment(struct mlx5_ib_qp *qp,
232 io_virt += pfault->mpfault.bytes_committed; 232 io_virt += pfault->mpfault.bytes_committed;
233 bcnt -= pfault->mpfault.bytes_committed; 233 bcnt -= pfault->mpfault.bytes_committed;
234 234
235 start_idx = (io_virt - (mr->mmr.iova & PAGE_MASK)) >> PAGE_SHIFT; 235 start_idx = (io_virt - (mr->mmkey.iova & PAGE_MASK)) >> PAGE_SHIFT;
236 236
237 if (mr->umem->writable) 237 if (mr->umem->writable)
238 access_mask |= ODP_WRITE_ALLOWED_BIT; 238 access_mask |= ODP_WRITE_ALLOWED_BIT;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en.h b/drivers/net/ethernet/mellanox/mlx5/core/en.h
index aac071a7e830..6ef0bfded2ba 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en.h
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en.h
@@ -515,7 +515,7 @@ struct mlx5e_priv {
515 struct mlx5_uar cq_uar; 515 struct mlx5_uar cq_uar;
516 u32 pdn; 516 u32 pdn;
517 u32 tdn; 517 u32 tdn;
518 struct mlx5_core_mr mr; 518 struct mlx5_core_mkey mkey;
519 struct mlx5e_rq drop_rq; 519 struct mlx5e_rq drop_rq;
520 520
521 struct mlx5e_channel **channel; 521 struct mlx5e_channel **channel;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
index d4e1c3045200..43a148939557 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
@@ -982,7 +982,7 @@ static int mlx5e_open_channel(struct mlx5e_priv *priv, int ix,
982 c->cpu = cpu; 982 c->cpu = cpu;
983 c->pdev = &priv->mdev->pdev->dev; 983 c->pdev = &priv->mdev->pdev->dev;
984 c->netdev = priv->netdev; 984 c->netdev = priv->netdev;
985 c->mkey_be = cpu_to_be32(priv->mr.key); 985 c->mkey_be = cpu_to_be32(priv->mkey.key);
986 c->num_tc = priv->params.num_tc; 986 c->num_tc = priv->params.num_tc;
987 987
988 mlx5e_build_channeltc_to_txq_map(priv, ix); 988 mlx5e_build_channeltc_to_txq_map(priv, ix);
@@ -2194,7 +2194,7 @@ static void mlx5e_build_netdev(struct net_device *netdev)
2194} 2194}
2195 2195
2196static int mlx5e_create_mkey(struct mlx5e_priv *priv, u32 pdn, 2196static int mlx5e_create_mkey(struct mlx5e_priv *priv, u32 pdn,
2197 struct mlx5_core_mr *mr) 2197 struct mlx5_core_mkey *mkey)
2198{ 2198{
2199 struct mlx5_core_dev *mdev = priv->mdev; 2199 struct mlx5_core_dev *mdev = priv->mdev;
2200 struct mlx5_create_mkey_mbox_in *in; 2200 struct mlx5_create_mkey_mbox_in *in;
@@ -2210,7 +2210,7 @@ static int mlx5e_create_mkey(struct mlx5e_priv *priv, u32 pdn,
2210 in->seg.flags_pd = cpu_to_be32(pdn | MLX5_MKEY_LEN64); 2210 in->seg.flags_pd = cpu_to_be32(pdn | MLX5_MKEY_LEN64);
2211 in->seg.qpn_mkey7_0 = cpu_to_be32(0xffffff << 8); 2211 in->seg.qpn_mkey7_0 = cpu_to_be32(0xffffff << 8);
2212 2212
2213 err = mlx5_core_create_mkey(mdev, mr, in, sizeof(*in), NULL, NULL, 2213 err = mlx5_core_create_mkey(mdev, mkey, in, sizeof(*in), NULL, NULL,
2214 NULL); 2214 NULL);
2215 2215
2216 kvfree(in); 2216 kvfree(in);
@@ -2259,7 +2259,7 @@ static void *mlx5e_create_netdev(struct mlx5_core_dev *mdev)
2259 goto err_dealloc_pd; 2259 goto err_dealloc_pd;
2260 } 2260 }
2261 2261
2262 err = mlx5e_create_mkey(priv, priv->pdn, &priv->mr); 2262 err = mlx5e_create_mkey(priv, priv->pdn, &priv->mkey);
2263 if (err) { 2263 if (err) {
2264 mlx5_core_err(mdev, "create mkey failed, %d\n", err); 2264 mlx5_core_err(mdev, "create mkey failed, %d\n", err);
2265 goto err_dealloc_transport_domain; 2265 goto err_dealloc_transport_domain;
@@ -2333,7 +2333,7 @@ err_destroy_tises:
2333 mlx5e_destroy_tises(priv); 2333 mlx5e_destroy_tises(priv);
2334 2334
2335err_destroy_mkey: 2335err_destroy_mkey:
2336 mlx5_core_destroy_mkey(mdev, &priv->mr); 2336 mlx5_core_destroy_mkey(mdev, &priv->mkey);
2337 2337
2338err_dealloc_transport_domain: 2338err_dealloc_transport_domain:
2339 mlx5_core_dealloc_transport_domain(mdev, priv->tdn); 2339 mlx5_core_dealloc_transport_domain(mdev, priv->tdn);
@@ -2367,7 +2367,7 @@ static void mlx5e_destroy_netdev(struct mlx5_core_dev *mdev, void *vpriv)
2367 mlx5e_destroy_rqt(priv, MLX5E_INDIRECTION_RQT); 2367 mlx5e_destroy_rqt(priv, MLX5E_INDIRECTION_RQT);
2368 mlx5e_close_drop_rq(priv); 2368 mlx5e_close_drop_rq(priv);
2369 mlx5e_destroy_tises(priv); 2369 mlx5e_destroy_tises(priv);
2370 mlx5_core_destroy_mkey(priv->mdev, &priv->mr); 2370 mlx5_core_destroy_mkey(priv->mdev, &priv->mkey);
2371 mlx5_core_dealloc_transport_domain(priv->mdev, priv->tdn); 2371 mlx5_core_dealloc_transport_domain(priv->mdev, priv->tdn);
2372 mlx5_core_dealloc_pd(priv->mdev, priv->pdn); 2372 mlx5_core_dealloc_pd(priv->mdev, priv->pdn);
2373 mlx5_unmap_free_uar(priv->mdev, &priv->cq_uar); 2373 mlx5_unmap_free_uar(priv->mdev, &priv->cq_uar);
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c
index 1545a944c309..0916bbc69269 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/main.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c
@@ -1117,7 +1117,7 @@ static int mlx5_load_one(struct mlx5_core_dev *dev, struct mlx5_priv *priv)
1117 mlx5_init_cq_table(dev); 1117 mlx5_init_cq_table(dev);
1118 mlx5_init_qp_table(dev); 1118 mlx5_init_qp_table(dev);
1119 mlx5_init_srq_table(dev); 1119 mlx5_init_srq_table(dev);
1120 mlx5_init_mr_table(dev); 1120 mlx5_init_mkey_table(dev);
1121 1121
1122 err = mlx5_init_fs(dev); 1122 err = mlx5_init_fs(dev);
1123 if (err) { 1123 if (err) {
@@ -1164,7 +1164,7 @@ err_sriov:
1164err_reg_dev: 1164err_reg_dev:
1165 mlx5_cleanup_fs(dev); 1165 mlx5_cleanup_fs(dev);
1166err_fs: 1166err_fs:
1167 mlx5_cleanup_mr_table(dev); 1167 mlx5_cleanup_mkey_table(dev);
1168 mlx5_cleanup_srq_table(dev); 1168 mlx5_cleanup_srq_table(dev);
1169 mlx5_cleanup_qp_table(dev); 1169 mlx5_cleanup_qp_table(dev);
1170 mlx5_cleanup_cq_table(dev); 1170 mlx5_cleanup_cq_table(dev);
@@ -1237,7 +1237,7 @@ static int mlx5_unload_one(struct mlx5_core_dev *dev, struct mlx5_priv *priv)
1237#endif 1237#endif
1238 1238
1239 mlx5_cleanup_fs(dev); 1239 mlx5_cleanup_fs(dev);
1240 mlx5_cleanup_mr_table(dev); 1240 mlx5_cleanup_mkey_table(dev);
1241 mlx5_cleanup_srq_table(dev); 1241 mlx5_cleanup_srq_table(dev);
1242 mlx5_cleanup_qp_table(dev); 1242 mlx5_cleanup_qp_table(dev);
1243 mlx5_cleanup_cq_table(dev); 1243 mlx5_cleanup_cq_table(dev);
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/mr.c b/drivers/net/ethernet/mellanox/mlx5/core/mr.c
index 6fa22b51e460..77a7293921d5 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/mr.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/mr.c
@@ -36,25 +36,26 @@
36#include <linux/mlx5/cmd.h> 36#include <linux/mlx5/cmd.h>
37#include "mlx5_core.h" 37#include "mlx5_core.h"
38 38
39void mlx5_init_mr_table(struct mlx5_core_dev *dev) 39void mlx5_init_mkey_table(struct mlx5_core_dev *dev)
40{ 40{
41 struct mlx5_mr_table *table = &dev->priv.mr_table; 41 struct mlx5_mkey_table *table = &dev->priv.mkey_table;
42 42
43 memset(table, 0, sizeof(*table)); 43 memset(table, 0, sizeof(*table));
44 rwlock_init(&table->lock); 44 rwlock_init(&table->lock);
45 INIT_RADIX_TREE(&table->tree, GFP_ATOMIC); 45 INIT_RADIX_TREE(&table->tree, GFP_ATOMIC);
46} 46}
47 47
48void mlx5_cleanup_mr_table(struct mlx5_core_dev *dev) 48void mlx5_cleanup_mkey_table(struct mlx5_core_dev *dev)
49{ 49{
50} 50}
51 51
52int mlx5_core_create_mkey(struct mlx5_core_dev *dev, struct mlx5_core_mr *mr, 52int mlx5_core_create_mkey(struct mlx5_core_dev *dev,
53 struct mlx5_core_mkey *mkey,
53 struct mlx5_create_mkey_mbox_in *in, int inlen, 54 struct mlx5_create_mkey_mbox_in *in, int inlen,
54 mlx5_cmd_cbk_t callback, void *context, 55 mlx5_cmd_cbk_t callback, void *context,
55 struct mlx5_create_mkey_mbox_out *out) 56 struct mlx5_create_mkey_mbox_out *out)
56{ 57{
57 struct mlx5_mr_table *table = &dev->priv.mr_table; 58 struct mlx5_mkey_table *table = &dev->priv.mkey_table;
58 struct mlx5_create_mkey_mbox_out lout; 59 struct mlx5_create_mkey_mbox_out lout;
59 int err; 60 int err;
60 u8 key; 61 u8 key;
@@ -83,34 +84,35 @@ int mlx5_core_create_mkey(struct mlx5_core_dev *dev, struct mlx5_core_mr *mr,
83 return mlx5_cmd_status_to_err(&lout.hdr); 84 return mlx5_cmd_status_to_err(&lout.hdr);
84 } 85 }
85 86
86 mr->iova = be64_to_cpu(in->seg.start_addr); 87 mkey->iova = be64_to_cpu(in->seg.start_addr);
87 mr->size = be64_to_cpu(in->seg.len); 88 mkey->size = be64_to_cpu(in->seg.len);
88 mr->key = mlx5_idx_to_mkey(be32_to_cpu(lout.mkey) & 0xffffff) | key; 89 mkey->key = mlx5_idx_to_mkey(be32_to_cpu(lout.mkey) & 0xffffff) | key;
89 mr->pd = be32_to_cpu(in->seg.flags_pd) & 0xffffff; 90 mkey->pd = be32_to_cpu(in->seg.flags_pd) & 0xffffff;
90 91
91 mlx5_core_dbg(dev, "out 0x%x, key 0x%x, mkey 0x%x\n", 92 mlx5_core_dbg(dev, "out 0x%x, key 0x%x, mkey 0x%x\n",
92 be32_to_cpu(lout.mkey), key, mr->key); 93 be32_to_cpu(lout.mkey), key, mkey->key);
93 94
94 /* connect to MR tree */ 95 /* connect to mkey tree */
95 write_lock_irq(&table->lock); 96 write_lock_irq(&table->lock);
96 err = radix_tree_insert(&table->tree, mlx5_base_mkey(mr->key), mr); 97 err = radix_tree_insert(&table->tree, mlx5_base_mkey(mkey->key), mkey);
97 write_unlock_irq(&table->lock); 98 write_unlock_irq(&table->lock);
98 if (err) { 99 if (err) {
99 mlx5_core_warn(dev, "failed radix tree insert of mr 0x%x, %d\n", 100 mlx5_core_warn(dev, "failed radix tree insert of mkey 0x%x, %d\n",
100 mlx5_base_mkey(mr->key), err); 101 mlx5_base_mkey(mkey->key), err);
101 mlx5_core_destroy_mkey(dev, mr); 102 mlx5_core_destroy_mkey(dev, mkey);
102 } 103 }
103 104
104 return err; 105 return err;
105} 106}
106EXPORT_SYMBOL(mlx5_core_create_mkey); 107EXPORT_SYMBOL(mlx5_core_create_mkey);
107 108
108int mlx5_core_destroy_mkey(struct mlx5_core_dev *dev, struct mlx5_core_mr *mr) 109int mlx5_core_destroy_mkey(struct mlx5_core_dev *dev,
110 struct mlx5_core_mkey *mkey)
109{ 111{
110 struct mlx5_mr_table *table = &dev->priv.mr_table; 112 struct mlx5_mkey_table *table = &dev->priv.mkey_table;
111 struct mlx5_destroy_mkey_mbox_in in; 113 struct mlx5_destroy_mkey_mbox_in in;
112 struct mlx5_destroy_mkey_mbox_out out; 114 struct mlx5_destroy_mkey_mbox_out out;
113 struct mlx5_core_mr *deleted_mr; 115 struct mlx5_core_mkey *deleted_mkey;
114 unsigned long flags; 116 unsigned long flags;
115 int err; 117 int err;
116 118
@@ -118,16 +120,16 @@ int mlx5_core_destroy_mkey(struct mlx5_core_dev *dev, struct mlx5_core_mr *mr)
118 memset(&out, 0, sizeof(out)); 120 memset(&out, 0, sizeof(out));
119 121
120 write_lock_irqsave(&table->lock, flags); 122 write_lock_irqsave(&table->lock, flags);
121 deleted_mr = radix_tree_delete(&table->tree, mlx5_base_mkey(mr->key)); 123 deleted_mkey = radix_tree_delete(&table->tree, mlx5_base_mkey(mkey->key));
122 write_unlock_irqrestore(&table->lock, flags); 124 write_unlock_irqrestore(&table->lock, flags);
123 if (!deleted_mr) { 125 if (!deleted_mkey) {
124 mlx5_core_warn(dev, "failed radix tree delete of mr 0x%x\n", 126 mlx5_core_warn(dev, "failed radix tree delete of mkey 0x%x\n",
125 mlx5_base_mkey(mr->key)); 127 mlx5_base_mkey(mkey->key));
126 return -ENOENT; 128 return -ENOENT;
127 } 129 }
128 130
129 in.hdr.opcode = cpu_to_be16(MLX5_CMD_OP_DESTROY_MKEY); 131 in.hdr.opcode = cpu_to_be16(MLX5_CMD_OP_DESTROY_MKEY);
130 in.mkey = cpu_to_be32(mlx5_mkey_to_idx(mr->key)); 132 in.mkey = cpu_to_be32(mlx5_mkey_to_idx(mkey->key));
131 err = mlx5_cmd_exec(dev, &in, sizeof(in), &out, sizeof(out)); 133 err = mlx5_cmd_exec(dev, &in, sizeof(in), &out, sizeof(out));
132 if (err) 134 if (err)
133 return err; 135 return err;
@@ -139,7 +141,7 @@ int mlx5_core_destroy_mkey(struct mlx5_core_dev *dev, struct mlx5_core_mr *mr)
139} 141}
140EXPORT_SYMBOL(mlx5_core_destroy_mkey); 142EXPORT_SYMBOL(mlx5_core_destroy_mkey);
141 143
142int mlx5_core_query_mkey(struct mlx5_core_dev *dev, struct mlx5_core_mr *mr, 144int mlx5_core_query_mkey(struct mlx5_core_dev *dev, struct mlx5_core_mkey *mkey,
143 struct mlx5_query_mkey_mbox_out *out, int outlen) 145 struct mlx5_query_mkey_mbox_out *out, int outlen)
144{ 146{
145 struct mlx5_query_mkey_mbox_in in; 147 struct mlx5_query_mkey_mbox_in in;
@@ -149,7 +151,7 @@ int mlx5_core_query_mkey(struct mlx5_core_dev *dev, struct mlx5_core_mr *mr,
149 memset(out, 0, outlen); 151 memset(out, 0, outlen);
150 152
151 in.hdr.opcode = cpu_to_be16(MLX5_CMD_OP_QUERY_MKEY); 153 in.hdr.opcode = cpu_to_be16(MLX5_CMD_OP_QUERY_MKEY);
152 in.mkey = cpu_to_be32(mlx5_mkey_to_idx(mr->key)); 154 in.mkey = cpu_to_be32(mlx5_mkey_to_idx(mkey->key));
153 err = mlx5_cmd_exec(dev, &in, sizeof(in), out, outlen); 155 err = mlx5_cmd_exec(dev, &in, sizeof(in), out, outlen);
154 if (err) 156 if (err)
155 return err; 157 return err;
@@ -161,7 +163,7 @@ int mlx5_core_query_mkey(struct mlx5_core_dev *dev, struct mlx5_core_mr *mr,
161} 163}
162EXPORT_SYMBOL(mlx5_core_query_mkey); 164EXPORT_SYMBOL(mlx5_core_query_mkey);
163 165
164int mlx5_core_dump_fill_mkey(struct mlx5_core_dev *dev, struct mlx5_core_mr *mr, 166int mlx5_core_dump_fill_mkey(struct mlx5_core_dev *dev, struct mlx5_core_mkey *_mkey,
165 u32 *mkey) 167 u32 *mkey)
166{ 168{
167 struct mlx5_query_special_ctxs_mbox_in in; 169 struct mlx5_query_special_ctxs_mbox_in in;
diff --git a/include/linux/mlx5/driver.h b/include/linux/mlx5/driver.h
index 8edcd08853dd..9108904a6a56 100644
--- a/include/linux/mlx5/driver.h
+++ b/include/linux/mlx5/driver.h
@@ -338,7 +338,7 @@ struct mlx5_core_sig_ctx {
338 u32 sigerr_count; 338 u32 sigerr_count;
339}; 339};
340 340
341struct mlx5_core_mr { 341struct mlx5_core_mkey {
342 u64 iova; 342 u64 iova;
343 u64 size; 343 u64 size;
344 u32 key; 344 u32 key;
@@ -426,7 +426,7 @@ struct mlx5_srq_table {
426 struct radix_tree_root tree; 426 struct radix_tree_root tree;
427}; 427};
428 428
429struct mlx5_mr_table { 429struct mlx5_mkey_table {
430 /* protect radix tree 430 /* protect radix tree
431 */ 431 */
432 rwlock_t lock; 432 rwlock_t lock;
@@ -484,9 +484,9 @@ struct mlx5_priv {
484 struct mlx5_cq_table cq_table; 484 struct mlx5_cq_table cq_table;
485 /* end: cq staff */ 485 /* end: cq staff */
486 486
487 /* start: mr staff */ 487 /* start: mkey staff */
488 struct mlx5_mr_table mr_table; 488 struct mlx5_mkey_table mkey_table;
489 /* end: mr staff */ 489 /* end: mkey staff */
490 490
491 /* start: alloc staff */ 491 /* start: alloc staff */
492 /* protect buffer alocation according to numa node */ 492 /* protect buffer alocation according to numa node */
@@ -739,16 +739,18 @@ int mlx5_core_query_srq(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq,
739 struct mlx5_query_srq_mbox_out *out); 739 struct mlx5_query_srq_mbox_out *out);
740int mlx5_core_arm_srq(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq, 740int mlx5_core_arm_srq(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq,
741 u16 lwm, int is_srq); 741 u16 lwm, int is_srq);
742void mlx5_init_mr_table(struct mlx5_core_dev *dev); 742void mlx5_init_mkey_table(struct mlx5_core_dev *dev);
743void mlx5_cleanup_mr_table(struct mlx5_core_dev *dev); 743void mlx5_cleanup_mkey_table(struct mlx5_core_dev *dev);
744int mlx5_core_create_mkey(struct mlx5_core_dev *dev, struct mlx5_core_mr *mr, 744int mlx5_core_create_mkey(struct mlx5_core_dev *dev,
745 struct mlx5_core_mkey *mkey,
745 struct mlx5_create_mkey_mbox_in *in, int inlen, 746 struct mlx5_create_mkey_mbox_in *in, int inlen,
746 mlx5_cmd_cbk_t callback, void *context, 747 mlx5_cmd_cbk_t callback, void *context,
747 struct mlx5_create_mkey_mbox_out *out); 748 struct mlx5_create_mkey_mbox_out *out);
748int mlx5_core_destroy_mkey(struct mlx5_core_dev *dev, struct mlx5_core_mr *mr); 749int mlx5_core_destroy_mkey(struct mlx5_core_dev *dev,
749int mlx5_core_query_mkey(struct mlx5_core_dev *dev, struct mlx5_core_mr *mr, 750 struct mlx5_core_mkey *mkey);
751int mlx5_core_query_mkey(struct mlx5_core_dev *dev, struct mlx5_core_mkey *mkey,
750 struct mlx5_query_mkey_mbox_out *out, int outlen); 752 struct mlx5_query_mkey_mbox_out *out, int outlen);
751int mlx5_core_dump_fill_mkey(struct mlx5_core_dev *dev, struct mlx5_core_mr *mr, 753int mlx5_core_dump_fill_mkey(struct mlx5_core_dev *dev, struct mlx5_core_mkey *_mkey,
752 u32 *mkey); 754 u32 *mkey);
753int mlx5_core_alloc_pd(struct mlx5_core_dev *dev, u32 *pdn); 755int mlx5_core_alloc_pd(struct mlx5_core_dev *dev, u32 *pdn);
754int mlx5_core_dealloc_pd(struct mlx5_core_dev *dev, u32 pdn); 756int mlx5_core_dealloc_pd(struct mlx5_core_dev *dev, u32 pdn);
diff --git a/include/linux/mlx5/qp.h b/include/linux/mlx5/qp.h
index e5bbcf06de95..cf031a3f16c5 100644
--- a/include/linux/mlx5/qp.h
+++ b/include/linux/mlx5/qp.h
@@ -622,9 +622,9 @@ static inline struct mlx5_core_qp *__mlx5_qp_lookup(struct mlx5_core_dev *dev, u
622 return radix_tree_lookup(&dev->priv.qp_table.tree, qpn); 622 return radix_tree_lookup(&dev->priv.qp_table.tree, qpn);
623} 623}
624 624
625static inline struct mlx5_core_mr *__mlx5_mr_lookup(struct mlx5_core_dev *dev, u32 key) 625static inline struct mlx5_core_mkey *__mlx5_mr_lookup(struct mlx5_core_dev *dev, u32 key)
626{ 626{
627 return radix_tree_lookup(&dev->priv.mr_table.tree, key); 627 return radix_tree_lookup(&dev->priv.mkey_table.tree, key);
628} 628}
629 629
630struct mlx5_page_fault_resume_mbox_in { 630struct mlx5_page_fault_resume_mbox_in {