]> asedeno.scripts.mit.edu Git - linux.git/blob - drivers/infiniband/hw/mlx5/mr.c
Merge tag 'trace-v5.3-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt...
[linux.git] / drivers / infiniband / hw / mlx5 / mr.c
1 /*
2  * Copyright (c) 2013-2015, Mellanox Technologies. All rights reserved.
3  *
4  * This software is available to you under a choice of one of two
5  * licenses.  You may choose to be licensed under the terms of the GNU
6  * General Public License (GPL) Version 2, available from the file
7  * COPYING in the main directory of this source tree, or the
8  * OpenIB.org BSD license below:
9  *
10  *     Redistribution and use in source and binary forms, with or
11  *     without modification, are permitted provided that the following
12  *     conditions are met:
13  *
14  *      - Redistributions of source code must retain the above
15  *        copyright notice, this list of conditions and the following
16  *        disclaimer.
17  *
18  *      - Redistributions in binary form must reproduce the above
19  *        copyright notice, this list of conditions and the following
20  *        disclaimer in the documentation and/or other materials
21  *        provided with the distribution.
22  *
23  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30  * SOFTWARE.
31  */
32
33
34 #include <linux/kref.h>
35 #include <linux/random.h>
36 #include <linux/debugfs.h>
37 #include <linux/export.h>
38 #include <linux/delay.h>
39 #include <rdma/ib_umem.h>
40 #include <rdma/ib_umem_odp.h>
41 #include <rdma/ib_verbs.h>
42 #include "mlx5_ib.h"
43
44 enum {
45         MAX_PENDING_REG_MR = 8,
46 };
47
48 #define MLX5_UMR_ALIGN 2048
49
50 static void clean_mr(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr);
51 static void dereg_mr(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr);
52 static int mr_cache_max_order(struct mlx5_ib_dev *dev);
53 static int unreg_umr(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr);
54 static bool umr_can_modify_entity_size(struct mlx5_ib_dev *dev)
55 {
56         return !MLX5_CAP_GEN(dev->mdev, umr_modify_entity_size_disabled);
57 }
58
59 static bool umr_can_use_indirect_mkey(struct mlx5_ib_dev *dev)
60 {
61         return !MLX5_CAP_GEN(dev->mdev, umr_indirect_mkey_disabled);
62 }
63
64 static bool use_umr(struct mlx5_ib_dev *dev, int order)
65 {
66         return order <= mr_cache_max_order(dev) &&
67                 umr_can_modify_entity_size(dev);
68 }
69
70 static int destroy_mkey(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr)
71 {
72         int err = mlx5_core_destroy_mkey(dev->mdev, &mr->mmkey);
73
74         if (IS_ENABLED(CONFIG_INFINIBAND_ON_DEMAND_PAGING))
75                 /* Wait until all page fault handlers using the mr complete. */
76                 synchronize_srcu(&dev->mr_srcu);
77
78         return err;
79 }
80
81 static int order2idx(struct mlx5_ib_dev *dev, int order)
82 {
83         struct mlx5_mr_cache *cache = &dev->cache;
84
85         if (order < cache->ent[0].order)
86                 return 0;
87         else
88                 return order - cache->ent[0].order;
89 }
90
91 static bool use_umr_mtt_update(struct mlx5_ib_mr *mr, u64 start, u64 length)
92 {
93         return ((u64)1 << mr->order) * MLX5_ADAPTER_PAGE_SIZE >=
94                 length + (start & (MLX5_ADAPTER_PAGE_SIZE - 1));
95 }
96
97 static void update_odp_mr(struct mlx5_ib_mr *mr)
98 {
99         if (is_odp_mr(mr)) {
100                 /*
101                  * This barrier prevents the compiler from moving the
102                  * setting of umem->odp_data->private to point to our
103                  * MR, before reg_umr finished, to ensure that the MR
104                  * initialization have finished before starting to
105                  * handle invalidations.
106                  */
107                 smp_wmb();
108                 to_ib_umem_odp(mr->umem)->private = mr;
109                 /*
110                  * Make sure we will see the new
111                  * umem->odp_data->private value in the invalidation
112                  * routines, before we can get page faults on the
113                  * MR. Page faults can happen once we put the MR in
114                  * the tree, below this line. Without the barrier,
115                  * there can be a fault handling and an invalidation
116                  * before umem->odp_data->private == mr is visible to
117                  * the invalidation handler.
118                  */
119                 smp_wmb();
120         }
121 }
122
123 static void reg_mr_callback(int status, struct mlx5_async_work *context)
124 {
125         struct mlx5_ib_mr *mr =
126                 container_of(context, struct mlx5_ib_mr, cb_work);
127         struct mlx5_ib_dev *dev = mr->dev;
128         struct mlx5_mr_cache *cache = &dev->cache;
129         int c = order2idx(dev, mr->order);
130         struct mlx5_cache_ent *ent = &cache->ent[c];
131         u8 key;
132         unsigned long flags;
133         struct xarray *mkeys = &dev->mdev->priv.mkey_table;
134         int err;
135
136         spin_lock_irqsave(&ent->lock, flags);
137         ent->pending--;
138         spin_unlock_irqrestore(&ent->lock, flags);
139         if (status) {
140                 mlx5_ib_warn(dev, "async reg mr failed. status %d\n", status);
141                 kfree(mr);
142                 dev->fill_delay = 1;
143                 mod_timer(&dev->delay_timer, jiffies + HZ);
144                 return;
145         }
146
147         mr->mmkey.type = MLX5_MKEY_MR;
148         spin_lock_irqsave(&dev->mdev->priv.mkey_lock, flags);
149         key = dev->mdev->priv.mkey_key++;
150         spin_unlock_irqrestore(&dev->mdev->priv.mkey_lock, flags);
151         mr->mmkey.key = mlx5_idx_to_mkey(MLX5_GET(create_mkey_out, mr->out, mkey_index)) | key;
152
153         cache->last_add = jiffies;
154
155         spin_lock_irqsave(&ent->lock, flags);
156         list_add_tail(&mr->list, &ent->head);
157         ent->cur++;
158         ent->size++;
159         spin_unlock_irqrestore(&ent->lock, flags);
160
161         xa_lock_irqsave(mkeys, flags);
162         err = xa_err(__xa_store(mkeys, mlx5_base_mkey(mr->mmkey.key),
163                                 &mr->mmkey, GFP_ATOMIC));
164         xa_unlock_irqrestore(mkeys, flags);
165         if (err)
166                 pr_err("Error inserting to mkey tree. 0x%x\n", -err);
167
168         if (!completion_done(&ent->compl))
169                 complete(&ent->compl);
170 }
171
172 static int add_keys(struct mlx5_ib_dev *dev, int c, int num)
173 {
174         struct mlx5_mr_cache *cache = &dev->cache;
175         struct mlx5_cache_ent *ent = &cache->ent[c];
176         int inlen = MLX5_ST_SZ_BYTES(create_mkey_in);
177         struct mlx5_ib_mr *mr;
178         void *mkc;
179         u32 *in;
180         int err = 0;
181         int i;
182
183         in = kzalloc(inlen, GFP_KERNEL);
184         if (!in)
185                 return -ENOMEM;
186
187         mkc = MLX5_ADDR_OF(create_mkey_in, in, memory_key_mkey_entry);
188         for (i = 0; i < num; i++) {
189                 if (ent->pending >= MAX_PENDING_REG_MR) {
190                         err = -EAGAIN;
191                         break;
192                 }
193
194                 mr = kzalloc(sizeof(*mr), GFP_KERNEL);
195                 if (!mr) {
196                         err = -ENOMEM;
197                         break;
198                 }
199                 mr->order = ent->order;
200                 mr->allocated_from_cache = 1;
201                 mr->dev = dev;
202
203                 MLX5_SET(mkc, mkc, free, 1);
204                 MLX5_SET(mkc, mkc, umr_en, 1);
205                 MLX5_SET(mkc, mkc, access_mode_1_0, ent->access_mode & 0x3);
206                 MLX5_SET(mkc, mkc, access_mode_4_2,
207                          (ent->access_mode >> 2) & 0x7);
208
209                 MLX5_SET(mkc, mkc, qpn, 0xffffff);
210                 MLX5_SET(mkc, mkc, translations_octword_size, ent->xlt);
211                 MLX5_SET(mkc, mkc, log_page_size, ent->page);
212
213                 spin_lock_irq(&ent->lock);
214                 ent->pending++;
215                 spin_unlock_irq(&ent->lock);
216                 err = mlx5_core_create_mkey_cb(dev->mdev, &mr->mmkey,
217                                                &dev->async_ctx, in, inlen,
218                                                mr->out, sizeof(mr->out),
219                                                reg_mr_callback, &mr->cb_work);
220                 if (err) {
221                         spin_lock_irq(&ent->lock);
222                         ent->pending--;
223                         spin_unlock_irq(&ent->lock);
224                         mlx5_ib_warn(dev, "create mkey failed %d\n", err);
225                         kfree(mr);
226                         break;
227                 }
228         }
229
230         kfree(in);
231         return err;
232 }
233
234 static void remove_keys(struct mlx5_ib_dev *dev, int c, int num)
235 {
236         struct mlx5_mr_cache *cache = &dev->cache;
237         struct mlx5_cache_ent *ent = &cache->ent[c];
238         struct mlx5_ib_mr *tmp_mr;
239         struct mlx5_ib_mr *mr;
240         LIST_HEAD(del_list);
241         int i;
242
243         for (i = 0; i < num; i++) {
244                 spin_lock_irq(&ent->lock);
245                 if (list_empty(&ent->head)) {
246                         spin_unlock_irq(&ent->lock);
247                         break;
248                 }
249                 mr = list_first_entry(&ent->head, struct mlx5_ib_mr, list);
250                 list_move(&mr->list, &del_list);
251                 ent->cur--;
252                 ent->size--;
253                 spin_unlock_irq(&ent->lock);
254                 mlx5_core_destroy_mkey(dev->mdev, &mr->mmkey);
255         }
256
257         if (IS_ENABLED(CONFIG_INFINIBAND_ON_DEMAND_PAGING))
258                 synchronize_srcu(&dev->mr_srcu);
259
260         list_for_each_entry_safe(mr, tmp_mr, &del_list, list) {
261                 list_del(&mr->list);
262                 kfree(mr);
263         }
264 }
265
266 static ssize_t size_write(struct file *filp, const char __user *buf,
267                           size_t count, loff_t *pos)
268 {
269         struct mlx5_cache_ent *ent = filp->private_data;
270         struct mlx5_ib_dev *dev = ent->dev;
271         char lbuf[20] = {0};
272         u32 var;
273         int err;
274         int c;
275
276         count = min(count, sizeof(lbuf) - 1);
277         if (copy_from_user(lbuf, buf, count))
278                 return -EFAULT;
279
280         c = order2idx(dev, ent->order);
281
282         if (sscanf(lbuf, "%u", &var) != 1)
283                 return -EINVAL;
284
285         if (var < ent->limit)
286                 return -EINVAL;
287
288         if (var > ent->size) {
289                 do {
290                         err = add_keys(dev, c, var - ent->size);
291                         if (err && err != -EAGAIN)
292                                 return err;
293
294                         usleep_range(3000, 5000);
295                 } while (err);
296         } else if (var < ent->size) {
297                 remove_keys(dev, c, ent->size - var);
298         }
299
300         return count;
301 }
302
303 static ssize_t size_read(struct file *filp, char __user *buf, size_t count,
304                          loff_t *pos)
305 {
306         struct mlx5_cache_ent *ent = filp->private_data;
307         char lbuf[20];
308         int err;
309
310         err = snprintf(lbuf, sizeof(lbuf), "%d\n", ent->size);
311         if (err < 0)
312                 return err;
313
314         return simple_read_from_buffer(buf, count, pos, lbuf, err);
315 }
316
317 static const struct file_operations size_fops = {
318         .owner  = THIS_MODULE,
319         .open   = simple_open,
320         .write  = size_write,
321         .read   = size_read,
322 };
323
324 static ssize_t limit_write(struct file *filp, const char __user *buf,
325                            size_t count, loff_t *pos)
326 {
327         struct mlx5_cache_ent *ent = filp->private_data;
328         struct mlx5_ib_dev *dev = ent->dev;
329         char lbuf[20] = {0};
330         u32 var;
331         int err;
332         int c;
333
334         count = min(count, sizeof(lbuf) - 1);
335         if (copy_from_user(lbuf, buf, count))
336                 return -EFAULT;
337
338         c = order2idx(dev, ent->order);
339
340         if (sscanf(lbuf, "%u", &var) != 1)
341                 return -EINVAL;
342
343         if (var > ent->size)
344                 return -EINVAL;
345
346         ent->limit = var;
347
348         if (ent->cur < ent->limit) {
349                 err = add_keys(dev, c, 2 * ent->limit - ent->cur);
350                 if (err)
351                         return err;
352         }
353
354         return count;
355 }
356
357 static ssize_t limit_read(struct file *filp, char __user *buf, size_t count,
358                           loff_t *pos)
359 {
360         struct mlx5_cache_ent *ent = filp->private_data;
361         char lbuf[20];
362         int err;
363
364         err = snprintf(lbuf, sizeof(lbuf), "%d\n", ent->limit);
365         if (err < 0)
366                 return err;
367
368         return simple_read_from_buffer(buf, count, pos, lbuf, err);
369 }
370
371 static const struct file_operations limit_fops = {
372         .owner  = THIS_MODULE,
373         .open   = simple_open,
374         .write  = limit_write,
375         .read   = limit_read,
376 };
377
378 static int someone_adding(struct mlx5_mr_cache *cache)
379 {
380         int i;
381
382         for (i = 0; i < MAX_MR_CACHE_ENTRIES; i++) {
383                 if (cache->ent[i].cur < cache->ent[i].limit)
384                         return 1;
385         }
386
387         return 0;
388 }
389
390 static void __cache_work_func(struct mlx5_cache_ent *ent)
391 {
392         struct mlx5_ib_dev *dev = ent->dev;
393         struct mlx5_mr_cache *cache = &dev->cache;
394         int i = order2idx(dev, ent->order);
395         int err;
396
397         if (cache->stopped)
398                 return;
399
400         ent = &dev->cache.ent[i];
401         if (ent->cur < 2 * ent->limit && !dev->fill_delay) {
402                 err = add_keys(dev, i, 1);
403                 if (ent->cur < 2 * ent->limit) {
404                         if (err == -EAGAIN) {
405                                 mlx5_ib_dbg(dev, "returned eagain, order %d\n",
406                                             i + 2);
407                                 queue_delayed_work(cache->wq, &ent->dwork,
408                                                    msecs_to_jiffies(3));
409                         } else if (err) {
410                                 mlx5_ib_warn(dev, "command failed order %d, err %d\n",
411                                              i + 2, err);
412                                 queue_delayed_work(cache->wq, &ent->dwork,
413                                                    msecs_to_jiffies(1000));
414                         } else {
415                                 queue_work(cache->wq, &ent->work);
416                         }
417                 }
418         } else if (ent->cur > 2 * ent->limit) {
419                 /*
420                  * The remove_keys() logic is performed as garbage collection
421                  * task. Such task is intended to be run when no other active
422                  * processes are running.
423                  *
424                  * The need_resched() will return TRUE if there are user tasks
425                  * to be activated in near future.
426                  *
427                  * In such case, we don't execute remove_keys() and postpone
428                  * the garbage collection work to try to run in next cycle,
429                  * in order to free CPU resources to other tasks.
430                  */
431                 if (!need_resched() && !someone_adding(cache) &&
432                     time_after(jiffies, cache->last_add + 300 * HZ)) {
433                         remove_keys(dev, i, 1);
434                         if (ent->cur > ent->limit)
435                                 queue_work(cache->wq, &ent->work);
436                 } else {
437                         queue_delayed_work(cache->wq, &ent->dwork, 300 * HZ);
438                 }
439         }
440 }
441
442 static void delayed_cache_work_func(struct work_struct *work)
443 {
444         struct mlx5_cache_ent *ent;
445
446         ent = container_of(work, struct mlx5_cache_ent, dwork.work);
447         __cache_work_func(ent);
448 }
449
450 static void cache_work_func(struct work_struct *work)
451 {
452         struct mlx5_cache_ent *ent;
453
454         ent = container_of(work, struct mlx5_cache_ent, work);
455         __cache_work_func(ent);
456 }
457
458 struct mlx5_ib_mr *mlx5_mr_cache_alloc(struct mlx5_ib_dev *dev, int entry)
459 {
460         struct mlx5_mr_cache *cache = &dev->cache;
461         struct mlx5_cache_ent *ent;
462         struct mlx5_ib_mr *mr;
463         int err;
464
465         if (entry < 0 || entry >= MAX_MR_CACHE_ENTRIES) {
466                 mlx5_ib_err(dev, "cache entry %d is out of range\n", entry);
467                 return NULL;
468         }
469
470         ent = &cache->ent[entry];
471         while (1) {
472                 spin_lock_irq(&ent->lock);
473                 if (list_empty(&ent->head)) {
474                         spin_unlock_irq(&ent->lock);
475
476                         err = add_keys(dev, entry, 1);
477                         if (err && err != -EAGAIN)
478                                 return ERR_PTR(err);
479
480                         wait_for_completion(&ent->compl);
481                 } else {
482                         mr = list_first_entry(&ent->head, struct mlx5_ib_mr,
483                                               list);
484                         list_del(&mr->list);
485                         ent->cur--;
486                         spin_unlock_irq(&ent->lock);
487                         if (ent->cur < ent->limit)
488                                 queue_work(cache->wq, &ent->work);
489                         return mr;
490                 }
491         }
492 }
493
494 static struct mlx5_ib_mr *alloc_cached_mr(struct mlx5_ib_dev *dev, int order)
495 {
496         struct mlx5_mr_cache *cache = &dev->cache;
497         struct mlx5_ib_mr *mr = NULL;
498         struct mlx5_cache_ent *ent;
499         int last_umr_cache_entry;
500         int c;
501         int i;
502
503         c = order2idx(dev, order);
504         last_umr_cache_entry = order2idx(dev, mr_cache_max_order(dev));
505         if (c < 0 || c > last_umr_cache_entry) {
506                 mlx5_ib_warn(dev, "order %d, cache index %d\n", order, c);
507                 return NULL;
508         }
509
510         for (i = c; i <= last_umr_cache_entry; i++) {
511                 ent = &cache->ent[i];
512
513                 mlx5_ib_dbg(dev, "order %d, cache index %d\n", ent->order, i);
514
515                 spin_lock_irq(&ent->lock);
516                 if (!list_empty(&ent->head)) {
517                         mr = list_first_entry(&ent->head, struct mlx5_ib_mr,
518                                               list);
519                         list_del(&mr->list);
520                         ent->cur--;
521                         spin_unlock_irq(&ent->lock);
522                         if (ent->cur < ent->limit)
523                                 queue_work(cache->wq, &ent->work);
524                         break;
525                 }
526                 spin_unlock_irq(&ent->lock);
527
528                 queue_work(cache->wq, &ent->work);
529         }
530
531         if (!mr)
532                 cache->ent[c].miss++;
533
534         return mr;
535 }
536
537 void mlx5_mr_cache_free(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr)
538 {
539         struct mlx5_mr_cache *cache = &dev->cache;
540         struct mlx5_cache_ent *ent;
541         int shrink = 0;
542         int c;
543
544         if (!mr->allocated_from_cache)
545                 return;
546
547         c = order2idx(dev, mr->order);
548         WARN_ON(c < 0 || c >= MAX_MR_CACHE_ENTRIES);
549
550         if (unreg_umr(dev, mr)) {
551                 mr->allocated_from_cache = false;
552                 destroy_mkey(dev, mr);
553                 ent = &cache->ent[c];
554                 if (ent->cur < ent->limit)
555                         queue_work(cache->wq, &ent->work);
556                 return;
557         }
558
559         ent = &cache->ent[c];
560         spin_lock_irq(&ent->lock);
561         list_add_tail(&mr->list, &ent->head);
562         ent->cur++;
563         if (ent->cur > 2 * ent->limit)
564                 shrink = 1;
565         spin_unlock_irq(&ent->lock);
566
567         if (shrink)
568                 queue_work(cache->wq, &ent->work);
569 }
570
571 static void clean_keys(struct mlx5_ib_dev *dev, int c)
572 {
573         struct mlx5_mr_cache *cache = &dev->cache;
574         struct mlx5_cache_ent *ent = &cache->ent[c];
575         struct mlx5_ib_mr *tmp_mr;
576         struct mlx5_ib_mr *mr;
577         LIST_HEAD(del_list);
578
579         cancel_delayed_work(&ent->dwork);
580         while (1) {
581                 spin_lock_irq(&ent->lock);
582                 if (list_empty(&ent->head)) {
583                         spin_unlock_irq(&ent->lock);
584                         break;
585                 }
586                 mr = list_first_entry(&ent->head, struct mlx5_ib_mr, list);
587                 list_move(&mr->list, &del_list);
588                 ent->cur--;
589                 ent->size--;
590                 spin_unlock_irq(&ent->lock);
591                 mlx5_core_destroy_mkey(dev->mdev, &mr->mmkey);
592         }
593
594 #ifdef CONFIG_INFINIBAND_ON_DEMAND_PAGING
595         synchronize_srcu(&dev->mr_srcu);
596 #endif
597
598         list_for_each_entry_safe(mr, tmp_mr, &del_list, list) {
599                 list_del(&mr->list);
600                 kfree(mr);
601         }
602 }
603
604 static void mlx5_mr_cache_debugfs_cleanup(struct mlx5_ib_dev *dev)
605 {
606         if (!mlx5_debugfs_root || dev->is_rep)
607                 return;
608
609         debugfs_remove_recursive(dev->cache.root);
610         dev->cache.root = NULL;
611 }
612
613 static void mlx5_mr_cache_debugfs_init(struct mlx5_ib_dev *dev)
614 {
615         struct mlx5_mr_cache *cache = &dev->cache;
616         struct mlx5_cache_ent *ent;
617         struct dentry *dir;
618         int i;
619
620         if (!mlx5_debugfs_root || dev->is_rep)
621                 return;
622
623         cache->root = debugfs_create_dir("mr_cache", dev->mdev->priv.dbg_root);
624
625         for (i = 0; i < MAX_MR_CACHE_ENTRIES; i++) {
626                 ent = &cache->ent[i];
627                 sprintf(ent->name, "%d", ent->order);
628                 dir = debugfs_create_dir(ent->name, cache->root);
629                 debugfs_create_file("size", 0600, dir, ent, &size_fops);
630                 debugfs_create_file("limit", 0600, dir, ent, &limit_fops);
631                 debugfs_create_u32("cur", 0400, dir, &ent->cur);
632                 debugfs_create_u32("miss", 0600, dir, &ent->miss);
633         }
634 }
635
636 static void delay_time_func(struct timer_list *t)
637 {
638         struct mlx5_ib_dev *dev = from_timer(dev, t, delay_timer);
639
640         dev->fill_delay = 0;
641 }
642
643 int mlx5_mr_cache_init(struct mlx5_ib_dev *dev)
644 {
645         struct mlx5_mr_cache *cache = &dev->cache;
646         struct mlx5_cache_ent *ent;
647         int i;
648
649         mutex_init(&dev->slow_path_mutex);
650         cache->wq = alloc_ordered_workqueue("mkey_cache", WQ_MEM_RECLAIM);
651         if (!cache->wq) {
652                 mlx5_ib_warn(dev, "failed to create work queue\n");
653                 return -ENOMEM;
654         }
655
656         mlx5_cmd_init_async_ctx(dev->mdev, &dev->async_ctx);
657         timer_setup(&dev->delay_timer, delay_time_func, 0);
658         for (i = 0; i < MAX_MR_CACHE_ENTRIES; i++) {
659                 ent = &cache->ent[i];
660                 INIT_LIST_HEAD(&ent->head);
661                 spin_lock_init(&ent->lock);
662                 ent->order = i + 2;
663                 ent->dev = dev;
664                 ent->limit = 0;
665
666                 init_completion(&ent->compl);
667                 INIT_WORK(&ent->work, cache_work_func);
668                 INIT_DELAYED_WORK(&ent->dwork, delayed_cache_work_func);
669
670                 if (i > MR_CACHE_LAST_STD_ENTRY) {
671                         mlx5_odp_init_mr_cache_entry(ent);
672                         continue;
673                 }
674
675                 if (ent->order > mr_cache_max_order(dev))
676                         continue;
677
678                 ent->page = PAGE_SHIFT;
679                 ent->xlt = (1 << ent->order) * sizeof(struct mlx5_mtt) /
680                            MLX5_IB_UMR_OCTOWORD;
681                 ent->access_mode = MLX5_MKC_ACCESS_MODE_MTT;
682                 if ((dev->mdev->profile->mask & MLX5_PROF_MASK_MR_CACHE) &&
683                     !dev->is_rep &&
684                     mlx5_core_is_pf(dev->mdev))
685                         ent->limit = dev->mdev->profile->mr_cache[i].limit;
686                 else
687                         ent->limit = 0;
688                 queue_work(cache->wq, &ent->work);
689         }
690
691         mlx5_mr_cache_debugfs_init(dev);
692
693         return 0;
694 }
695
696 int mlx5_mr_cache_cleanup(struct mlx5_ib_dev *dev)
697 {
698         int i;
699
700         if (!dev->cache.wq)
701                 return 0;
702
703         dev->cache.stopped = 1;
704         flush_workqueue(dev->cache.wq);
705
706         mlx5_mr_cache_debugfs_cleanup(dev);
707         mlx5_cmd_cleanup_async_ctx(&dev->async_ctx);
708
709         for (i = 0; i < MAX_MR_CACHE_ENTRIES; i++)
710                 clean_keys(dev, i);
711
712         destroy_workqueue(dev->cache.wq);
713         del_timer_sync(&dev->delay_timer);
714
715         return 0;
716 }
717
718 struct ib_mr *mlx5_ib_get_dma_mr(struct ib_pd *pd, int acc)
719 {
720         struct mlx5_ib_dev *dev = to_mdev(pd->device);
721         int inlen = MLX5_ST_SZ_BYTES(create_mkey_in);
722         struct mlx5_core_dev *mdev = dev->mdev;
723         struct mlx5_ib_mr *mr;
724         void *mkc;
725         u32 *in;
726         int err;
727
728         mr = kzalloc(sizeof(*mr), GFP_KERNEL);
729         if (!mr)
730                 return ERR_PTR(-ENOMEM);
731
732         in = kzalloc(inlen, GFP_KERNEL);
733         if (!in) {
734                 err = -ENOMEM;
735                 goto err_free;
736         }
737
738         mkc = MLX5_ADDR_OF(create_mkey_in, in, memory_key_mkey_entry);
739
740         MLX5_SET(mkc, mkc, access_mode_1_0, MLX5_MKC_ACCESS_MODE_PA);
741         MLX5_SET(mkc, mkc, a, !!(acc & IB_ACCESS_REMOTE_ATOMIC));
742         MLX5_SET(mkc, mkc, rw, !!(acc & IB_ACCESS_REMOTE_WRITE));
743         MLX5_SET(mkc, mkc, rr, !!(acc & IB_ACCESS_REMOTE_READ));
744         MLX5_SET(mkc, mkc, lw, !!(acc & IB_ACCESS_LOCAL_WRITE));
745         MLX5_SET(mkc, mkc, lr, 1);
746
747         MLX5_SET(mkc, mkc, length64, 1);
748         MLX5_SET(mkc, mkc, pd, to_mpd(pd)->pdn);
749         MLX5_SET(mkc, mkc, qpn, 0xffffff);
750         MLX5_SET64(mkc, mkc, start_addr, 0);
751
752         err = mlx5_core_create_mkey(mdev, &mr->mmkey, in, inlen);
753         if (err)
754                 goto err_in;
755
756         kfree(in);
757         mr->mmkey.type = MLX5_MKEY_MR;
758         mr->ibmr.lkey = mr->mmkey.key;
759         mr->ibmr.rkey = mr->mmkey.key;
760         mr->umem = NULL;
761
762         return &mr->ibmr;
763
764 err_in:
765         kfree(in);
766
767 err_free:
768         kfree(mr);
769
770         return ERR_PTR(err);
771 }
772
773 static int get_octo_len(u64 addr, u64 len, int page_shift)
774 {
775         u64 page_size = 1ULL << page_shift;
776         u64 offset;
777         int npages;
778
779         offset = addr & (page_size - 1);
780         npages = ALIGN(len + offset, page_size) >> page_shift;
781         return (npages + 1) / 2;
782 }
783
784 static int mr_cache_max_order(struct mlx5_ib_dev *dev)
785 {
786         if (MLX5_CAP_GEN(dev->mdev, umr_extended_translation_offset))
787                 return MR_CACHE_LAST_STD_ENTRY + 2;
788         return MLX5_MAX_UMR_SHIFT;
789 }
790
791 static int mr_umem_get(struct mlx5_ib_dev *dev, struct ib_udata *udata,
792                        u64 start, u64 length, int access_flags,
793                        struct ib_umem **umem, int *npages, int *page_shift,
794                        int *ncont, int *order)
795 {
796         struct ib_umem *u;
797         int err;
798
799         *umem = NULL;
800
801         u = ib_umem_get(udata, start, length, access_flags, 0);
802         err = PTR_ERR_OR_ZERO(u);
803         if (err) {
804                 mlx5_ib_dbg(dev, "umem get failed (%d)\n", err);
805                 return err;
806         }
807
808         mlx5_ib_cont_pages(u, start, MLX5_MKEY_PAGE_SHIFT_MASK, npages,
809                            page_shift, ncont, order);
810         if (!*npages) {
811                 mlx5_ib_warn(dev, "avoid zero region\n");
812                 ib_umem_release(u);
813                 return -EINVAL;
814         }
815
816         *umem = u;
817
818         mlx5_ib_dbg(dev, "npages %d, ncont %d, order %d, page_shift %d\n",
819                     *npages, *ncont, *order, *page_shift);
820
821         return 0;
822 }
823
824 static void mlx5_ib_umr_done(struct ib_cq *cq, struct ib_wc *wc)
825 {
826         struct mlx5_ib_umr_context *context =
827                 container_of(wc->wr_cqe, struct mlx5_ib_umr_context, cqe);
828
829         context->status = wc->status;
830         complete(&context->done);
831 }
832
833 static inline void mlx5_ib_init_umr_context(struct mlx5_ib_umr_context *context)
834 {
835         context->cqe.done = mlx5_ib_umr_done;
836         context->status = -1;
837         init_completion(&context->done);
838 }
839
840 static int mlx5_ib_post_send_wait(struct mlx5_ib_dev *dev,
841                                   struct mlx5_umr_wr *umrwr)
842 {
843         struct umr_common *umrc = &dev->umrc;
844         const struct ib_send_wr *bad;
845         int err;
846         struct mlx5_ib_umr_context umr_context;
847
848         mlx5_ib_init_umr_context(&umr_context);
849         umrwr->wr.wr_cqe = &umr_context.cqe;
850
851         down(&umrc->sem);
852         err = ib_post_send(umrc->qp, &umrwr->wr, &bad);
853         if (err) {
854                 mlx5_ib_warn(dev, "UMR post send failed, err %d\n", err);
855         } else {
856                 wait_for_completion(&umr_context.done);
857                 if (umr_context.status != IB_WC_SUCCESS) {
858                         mlx5_ib_warn(dev, "reg umr failed (%u)\n",
859                                      umr_context.status);
860                         err = -EFAULT;
861                 }
862         }
863         up(&umrc->sem);
864         return err;
865 }
866
867 static struct mlx5_ib_mr *alloc_mr_from_cache(
868                                   struct ib_pd *pd, struct ib_umem *umem,
869                                   u64 virt_addr, u64 len, int npages,
870                                   int page_shift, int order, int access_flags)
871 {
872         struct mlx5_ib_dev *dev = to_mdev(pd->device);
873         struct mlx5_ib_mr *mr;
874         int err = 0;
875         int i;
876
877         for (i = 0; i < 1; i++) {
878                 mr = alloc_cached_mr(dev, order);
879                 if (mr)
880                         break;
881
882                 err = add_keys(dev, order2idx(dev, order), 1);
883                 if (err && err != -EAGAIN) {
884                         mlx5_ib_warn(dev, "add_keys failed, err %d\n", err);
885                         break;
886                 }
887         }
888
889         if (!mr)
890                 return ERR_PTR(-EAGAIN);
891
892         mr->ibmr.pd = pd;
893         mr->umem = umem;
894         mr->access_flags = access_flags;
895         mr->desc_size = sizeof(struct mlx5_mtt);
896         mr->mmkey.iova = virt_addr;
897         mr->mmkey.size = len;
898         mr->mmkey.pd = to_mpd(pd)->pdn;
899
900         return mr;
901 }
902
903 static inline int populate_xlt(struct mlx5_ib_mr *mr, int idx, int npages,
904                                void *xlt, int page_shift, size_t size,
905                                int flags)
906 {
907         struct mlx5_ib_dev *dev = mr->dev;
908         struct ib_umem *umem = mr->umem;
909
910         if (flags & MLX5_IB_UPD_XLT_INDIRECT) {
911                 if (!umr_can_use_indirect_mkey(dev))
912                         return -EPERM;
913                 mlx5_odp_populate_klm(xlt, idx, npages, mr, flags);
914                 return npages;
915         }
916
917         npages = min_t(size_t, npages, ib_umem_num_pages(umem) - idx);
918
919         if (!(flags & MLX5_IB_UPD_XLT_ZAP)) {
920                 __mlx5_ib_populate_pas(dev, umem, page_shift,
921                                        idx, npages, xlt,
922                                        MLX5_IB_MTT_PRESENT);
923                 /* Clear padding after the pages
924                  * brought from the umem.
925                  */
926                 memset(xlt + (npages * sizeof(struct mlx5_mtt)), 0,
927                        size - npages * sizeof(struct mlx5_mtt));
928         }
929
930         return npages;
931 }
932
933 #define MLX5_MAX_UMR_CHUNK ((1 << (MLX5_MAX_UMR_SHIFT + 4)) - \
934                             MLX5_UMR_MTT_ALIGNMENT)
935 #define MLX5_SPARE_UMR_CHUNK 0x10000
936
937 int mlx5_ib_update_xlt(struct mlx5_ib_mr *mr, u64 idx, int npages,
938                        int page_shift, int flags)
939 {
940         struct mlx5_ib_dev *dev = mr->dev;
941         struct device *ddev = dev->ib_dev.dev.parent;
942         int size;
943         void *xlt;
944         dma_addr_t dma;
945         struct mlx5_umr_wr wr;
946         struct ib_sge sg;
947         int err = 0;
948         int desc_size = (flags & MLX5_IB_UPD_XLT_INDIRECT)
949                                ? sizeof(struct mlx5_klm)
950                                : sizeof(struct mlx5_mtt);
951         const int page_align = MLX5_UMR_MTT_ALIGNMENT / desc_size;
952         const int page_mask = page_align - 1;
953         size_t pages_mapped = 0;
954         size_t pages_to_map = 0;
955         size_t pages_iter = 0;
956         gfp_t gfp;
957         bool use_emergency_page = false;
958
959         if ((flags & MLX5_IB_UPD_XLT_INDIRECT) &&
960             !umr_can_use_indirect_mkey(dev))
961                 return -EPERM;
962
963         /* UMR copies MTTs in units of MLX5_UMR_MTT_ALIGNMENT bytes,
964          * so we need to align the offset and length accordingly
965          */
966         if (idx & page_mask) {
967                 npages += idx & page_mask;
968                 idx &= ~page_mask;
969         }
970
971         gfp = flags & MLX5_IB_UPD_XLT_ATOMIC ? GFP_ATOMIC : GFP_KERNEL;
972         gfp |= __GFP_ZERO | __GFP_NOWARN;
973
974         pages_to_map = ALIGN(npages, page_align);
975         size = desc_size * pages_to_map;
976         size = min_t(int, size, MLX5_MAX_UMR_CHUNK);
977
978         xlt = (void *)__get_free_pages(gfp, get_order(size));
979         if (!xlt && size > MLX5_SPARE_UMR_CHUNK) {
980                 mlx5_ib_dbg(dev, "Failed to allocate %d bytes of order %d. fallback to spare UMR allocation od %d bytes\n",
981                             size, get_order(size), MLX5_SPARE_UMR_CHUNK);
982
983                 size = MLX5_SPARE_UMR_CHUNK;
984                 xlt = (void *)__get_free_pages(gfp, get_order(size));
985         }
986
987         if (!xlt) {
988                 mlx5_ib_warn(dev, "Using XLT emergency buffer\n");
989                 xlt = (void *)mlx5_ib_get_xlt_emergency_page();
990                 size = PAGE_SIZE;
991                 memset(xlt, 0, size);
992                 use_emergency_page = true;
993         }
994         pages_iter = size / desc_size;
995         dma = dma_map_single(ddev, xlt, size, DMA_TO_DEVICE);
996         if (dma_mapping_error(ddev, dma)) {
997                 mlx5_ib_err(dev, "unable to map DMA during XLT update.\n");
998                 err = -ENOMEM;
999                 goto free_xlt;
1000         }
1001
1002         sg.addr = dma;
1003         sg.lkey = dev->umrc.pd->local_dma_lkey;
1004
1005         memset(&wr, 0, sizeof(wr));
1006         wr.wr.send_flags = MLX5_IB_SEND_UMR_UPDATE_XLT;
1007         if (!(flags & MLX5_IB_UPD_XLT_ENABLE))
1008                 wr.wr.send_flags |= MLX5_IB_SEND_UMR_FAIL_IF_FREE;
1009         wr.wr.sg_list = &sg;
1010         wr.wr.num_sge = 1;
1011         wr.wr.opcode = MLX5_IB_WR_UMR;
1012
1013         wr.pd = mr->ibmr.pd;
1014         wr.mkey = mr->mmkey.key;
1015         wr.length = mr->mmkey.size;
1016         wr.virt_addr = mr->mmkey.iova;
1017         wr.access_flags = mr->access_flags;
1018         wr.page_shift = page_shift;
1019
1020         for (pages_mapped = 0;
1021              pages_mapped < pages_to_map && !err;
1022              pages_mapped += pages_iter, idx += pages_iter) {
1023                 npages = min_t(int, pages_iter, pages_to_map - pages_mapped);
1024                 dma_sync_single_for_cpu(ddev, dma, size, DMA_TO_DEVICE);
1025                 npages = populate_xlt(mr, idx, npages, xlt,
1026                                       page_shift, size, flags);
1027
1028                 dma_sync_single_for_device(ddev, dma, size, DMA_TO_DEVICE);
1029
1030                 sg.length = ALIGN(npages * desc_size,
1031                                   MLX5_UMR_MTT_ALIGNMENT);
1032
1033                 if (pages_mapped + pages_iter >= pages_to_map) {
1034                         if (flags & MLX5_IB_UPD_XLT_ENABLE)
1035                                 wr.wr.send_flags |=
1036                                         MLX5_IB_SEND_UMR_ENABLE_MR |
1037                                         MLX5_IB_SEND_UMR_UPDATE_PD_ACCESS |
1038                                         MLX5_IB_SEND_UMR_UPDATE_TRANSLATION;
1039                         if (flags & MLX5_IB_UPD_XLT_PD ||
1040                             flags & MLX5_IB_UPD_XLT_ACCESS)
1041                                 wr.wr.send_flags |=
1042                                         MLX5_IB_SEND_UMR_UPDATE_PD_ACCESS;
1043                         if (flags & MLX5_IB_UPD_XLT_ADDR)
1044                                 wr.wr.send_flags |=
1045                                         MLX5_IB_SEND_UMR_UPDATE_TRANSLATION;
1046                 }
1047
1048                 wr.offset = idx * desc_size;
1049                 wr.xlt_size = sg.length;
1050
1051                 err = mlx5_ib_post_send_wait(dev, &wr);
1052         }
1053         dma_unmap_single(ddev, dma, size, DMA_TO_DEVICE);
1054
1055 free_xlt:
1056         if (use_emergency_page)
1057                 mlx5_ib_put_xlt_emergency_page();
1058         else
1059                 free_pages((unsigned long)xlt, get_order(size));
1060
1061         return err;
1062 }
1063
1064 /*
1065  * If ibmr is NULL it will be allocated by reg_create.
1066  * Else, the given ibmr will be used.
1067  */
1068 static struct mlx5_ib_mr *reg_create(struct ib_mr *ibmr, struct ib_pd *pd,
1069                                      u64 virt_addr, u64 length,
1070                                      struct ib_umem *umem, int npages,
1071                                      int page_shift, int access_flags,
1072                                      bool populate)
1073 {
1074         struct mlx5_ib_dev *dev = to_mdev(pd->device);
1075         struct mlx5_ib_mr *mr;
1076         __be64 *pas;
1077         void *mkc;
1078         int inlen;
1079         u32 *in;
1080         int err;
1081         bool pg_cap = !!(MLX5_CAP_GEN(dev->mdev, pg));
1082
1083         mr = ibmr ? to_mmr(ibmr) : kzalloc(sizeof(*mr), GFP_KERNEL);
1084         if (!mr)
1085                 return ERR_PTR(-ENOMEM);
1086
1087         mr->ibmr.pd = pd;
1088         mr->access_flags = access_flags;
1089
1090         inlen = MLX5_ST_SZ_BYTES(create_mkey_in);
1091         if (populate)
1092                 inlen += sizeof(*pas) * roundup(npages, 2);
1093         in = kvzalloc(inlen, GFP_KERNEL);
1094         if (!in) {
1095                 err = -ENOMEM;
1096                 goto err_1;
1097         }
1098         pas = (__be64 *)MLX5_ADDR_OF(create_mkey_in, in, klm_pas_mtt);
1099         if (populate && !(access_flags & IB_ACCESS_ON_DEMAND))
1100                 mlx5_ib_populate_pas(dev, umem, page_shift, pas,
1101                                      pg_cap ? MLX5_IB_MTT_PRESENT : 0);
1102
1103         /* The pg_access bit allows setting the access flags
1104          * in the page list submitted with the command. */
1105         MLX5_SET(create_mkey_in, in, pg_access, !!(pg_cap));
1106
1107         mkc = MLX5_ADDR_OF(create_mkey_in, in, memory_key_mkey_entry);
1108         MLX5_SET(mkc, mkc, free, !populate);
1109         MLX5_SET(mkc, mkc, access_mode_1_0, MLX5_MKC_ACCESS_MODE_MTT);
1110         MLX5_SET(mkc, mkc, a, !!(access_flags & IB_ACCESS_REMOTE_ATOMIC));
1111         MLX5_SET(mkc, mkc, rw, !!(access_flags & IB_ACCESS_REMOTE_WRITE));
1112         MLX5_SET(mkc, mkc, rr, !!(access_flags & IB_ACCESS_REMOTE_READ));
1113         MLX5_SET(mkc, mkc, lw, !!(access_flags & IB_ACCESS_LOCAL_WRITE));
1114         MLX5_SET(mkc, mkc, lr, 1);
1115         MLX5_SET(mkc, mkc, umr_en, 1);
1116
1117         MLX5_SET64(mkc, mkc, start_addr, virt_addr);
1118         MLX5_SET64(mkc, mkc, len, length);
1119         MLX5_SET(mkc, mkc, pd, to_mpd(pd)->pdn);
1120         MLX5_SET(mkc, mkc, bsf_octword_size, 0);
1121         MLX5_SET(mkc, mkc, translations_octword_size,
1122                  get_octo_len(virt_addr, length, page_shift));
1123         MLX5_SET(mkc, mkc, log_page_size, page_shift);
1124         MLX5_SET(mkc, mkc, qpn, 0xffffff);
1125         if (populate) {
1126                 MLX5_SET(create_mkey_in, in, translations_octword_actual_size,
1127                          get_octo_len(virt_addr, length, page_shift));
1128         }
1129
1130         err = mlx5_core_create_mkey(dev->mdev, &mr->mmkey, in, inlen);
1131         if (err) {
1132                 mlx5_ib_warn(dev, "create mkey failed\n");
1133                 goto err_2;
1134         }
1135         mr->mmkey.type = MLX5_MKEY_MR;
1136         mr->desc_size = sizeof(struct mlx5_mtt);
1137         mr->dev = dev;
1138         kvfree(in);
1139
1140         mlx5_ib_dbg(dev, "mkey = 0x%x\n", mr->mmkey.key);
1141
1142         return mr;
1143
1144 err_2:
1145         kvfree(in);
1146
1147 err_1:
1148         if (!ibmr)
1149                 kfree(mr);
1150
1151         return ERR_PTR(err);
1152 }
1153
1154 static void set_mr_fields(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr,
1155                           int npages, u64 length, int access_flags)
1156 {
1157         mr->npages = npages;
1158         atomic_add(npages, &dev->mdev->priv.reg_pages);
1159         mr->ibmr.lkey = mr->mmkey.key;
1160         mr->ibmr.rkey = mr->mmkey.key;
1161         mr->ibmr.length = length;
1162         mr->access_flags = access_flags;
1163 }
1164
1165 static struct ib_mr *mlx5_ib_get_dm_mr(struct ib_pd *pd, u64 start_addr,
1166                                        u64 length, int acc, int mode)
1167 {
1168         struct mlx5_ib_dev *dev = to_mdev(pd->device);
1169         int inlen = MLX5_ST_SZ_BYTES(create_mkey_in);
1170         struct mlx5_core_dev *mdev = dev->mdev;
1171         struct mlx5_ib_mr *mr;
1172         void *mkc;
1173         u32 *in;
1174         int err;
1175
1176         mr = kzalloc(sizeof(*mr), GFP_KERNEL);
1177         if (!mr)
1178                 return ERR_PTR(-ENOMEM);
1179
1180         in = kzalloc(inlen, GFP_KERNEL);
1181         if (!in) {
1182                 err = -ENOMEM;
1183                 goto err_free;
1184         }
1185
1186         mkc = MLX5_ADDR_OF(create_mkey_in, in, memory_key_mkey_entry);
1187
1188         MLX5_SET(mkc, mkc, access_mode_1_0, mode & 0x3);
1189         MLX5_SET(mkc, mkc, access_mode_4_2, (mode >> 2) & 0x7);
1190         MLX5_SET(mkc, mkc, a, !!(acc & IB_ACCESS_REMOTE_ATOMIC));
1191         MLX5_SET(mkc, mkc, rw, !!(acc & IB_ACCESS_REMOTE_WRITE));
1192         MLX5_SET(mkc, mkc, rr, !!(acc & IB_ACCESS_REMOTE_READ));
1193         MLX5_SET(mkc, mkc, lw, !!(acc & IB_ACCESS_LOCAL_WRITE));
1194         MLX5_SET(mkc, mkc, lr, 1);
1195
1196         MLX5_SET64(mkc, mkc, len, length);
1197         MLX5_SET(mkc, mkc, pd, to_mpd(pd)->pdn);
1198         MLX5_SET(mkc, mkc, qpn, 0xffffff);
1199         MLX5_SET64(mkc, mkc, start_addr, start_addr);
1200
1201         err = mlx5_core_create_mkey(mdev, &mr->mmkey, in, inlen);
1202         if (err)
1203                 goto err_in;
1204
1205         kfree(in);
1206
1207         mr->umem = NULL;
1208         set_mr_fields(dev, mr, 0, length, acc);
1209
1210         return &mr->ibmr;
1211
1212 err_in:
1213         kfree(in);
1214
1215 err_free:
1216         kfree(mr);
1217
1218         return ERR_PTR(err);
1219 }
1220
1221 int mlx5_ib_advise_mr(struct ib_pd *pd,
1222                       enum ib_uverbs_advise_mr_advice advice,
1223                       u32 flags,
1224                       struct ib_sge *sg_list,
1225                       u32 num_sge,
1226                       struct uverbs_attr_bundle *attrs)
1227 {
1228         if (advice != IB_UVERBS_ADVISE_MR_ADVICE_PREFETCH &&
1229             advice != IB_UVERBS_ADVISE_MR_ADVICE_PREFETCH_WRITE)
1230                 return -EOPNOTSUPP;
1231
1232         return mlx5_ib_advise_mr_prefetch(pd, advice, flags,
1233                                          sg_list, num_sge);
1234 }
1235
1236 struct ib_mr *mlx5_ib_reg_dm_mr(struct ib_pd *pd, struct ib_dm *dm,
1237                                 struct ib_dm_mr_attr *attr,
1238                                 struct uverbs_attr_bundle *attrs)
1239 {
1240         struct mlx5_ib_dm *mdm = to_mdm(dm);
1241         struct mlx5_core_dev *dev = to_mdev(dm->device)->mdev;
1242         u64 start_addr = mdm->dev_addr + attr->offset;
1243         int mode;
1244
1245         switch (mdm->type) {
1246         case MLX5_IB_UAPI_DM_TYPE_MEMIC:
1247                 if (attr->access_flags & ~MLX5_IB_DM_MEMIC_ALLOWED_ACCESS)
1248                         return ERR_PTR(-EINVAL);
1249
1250                 mode = MLX5_MKC_ACCESS_MODE_MEMIC;
1251                 start_addr -= pci_resource_start(dev->pdev, 0);
1252                 break;
1253         case MLX5_IB_UAPI_DM_TYPE_STEERING_SW_ICM:
1254         case MLX5_IB_UAPI_DM_TYPE_HEADER_MODIFY_SW_ICM:
1255                 if (attr->access_flags & ~MLX5_IB_DM_SW_ICM_ALLOWED_ACCESS)
1256                         return ERR_PTR(-EINVAL);
1257
1258                 mode = MLX5_MKC_ACCESS_MODE_SW_ICM;
1259                 break;
1260         default:
1261                 return ERR_PTR(-EINVAL);
1262         }
1263
1264         return mlx5_ib_get_dm_mr(pd, start_addr, attr->length,
1265                                  attr->access_flags, mode);
1266 }
1267
1268 struct ib_mr *mlx5_ib_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
1269                                   u64 virt_addr, int access_flags,
1270                                   struct ib_udata *udata)
1271 {
1272         struct mlx5_ib_dev *dev = to_mdev(pd->device);
1273         struct mlx5_ib_mr *mr = NULL;
1274         bool populate_mtts = false;
1275         struct ib_umem *umem;
1276         int page_shift;
1277         int npages;
1278         int ncont;
1279         int order;
1280         int err;
1281
1282         if (!IS_ENABLED(CONFIG_INFINIBAND_USER_MEM))
1283                 return ERR_PTR(-EOPNOTSUPP);
1284
1285         mlx5_ib_dbg(dev, "start 0x%llx, virt_addr 0x%llx, length 0x%llx, access_flags 0x%x\n",
1286                     start, virt_addr, length, access_flags);
1287
1288         if (IS_ENABLED(CONFIG_INFINIBAND_ON_DEMAND_PAGING) && !start &&
1289             length == U64_MAX) {
1290                 if (!(access_flags & IB_ACCESS_ON_DEMAND) ||
1291                     !(dev->odp_caps.general_caps & IB_ODP_SUPPORT_IMPLICIT))
1292                         return ERR_PTR(-EINVAL);
1293
1294                 mr = mlx5_ib_alloc_implicit_mr(to_mpd(pd), udata, access_flags);
1295                 if (IS_ERR(mr))
1296                         return ERR_CAST(mr);
1297                 return &mr->ibmr;
1298         }
1299
1300         err = mr_umem_get(dev, udata, start, length, access_flags, &umem,
1301                           &npages, &page_shift, &ncont, &order);
1302
1303         if (err < 0)
1304                 return ERR_PTR(err);
1305
1306         if (use_umr(dev, order)) {
1307                 mr = alloc_mr_from_cache(pd, umem, virt_addr, length, ncont,
1308                                          page_shift, order, access_flags);
1309                 if (PTR_ERR(mr) == -EAGAIN) {
1310                         mlx5_ib_dbg(dev, "cache empty for order %d\n", order);
1311                         mr = NULL;
1312                 }
1313                 populate_mtts = false;
1314         } else if (!MLX5_CAP_GEN(dev->mdev, umr_extended_translation_offset)) {
1315                 if (access_flags & IB_ACCESS_ON_DEMAND) {
1316                         err = -EINVAL;
1317                         pr_err("Got MR registration for ODP MR > 512MB, not supported for Connect-IB\n");
1318                         goto error;
1319                 }
1320                 populate_mtts = true;
1321         }
1322
1323         if (!mr) {
1324                 if (!umr_can_modify_entity_size(dev))
1325                         populate_mtts = true;
1326                 mutex_lock(&dev->slow_path_mutex);
1327                 mr = reg_create(NULL, pd, virt_addr, length, umem, ncont,
1328                                 page_shift, access_flags, populate_mtts);
1329                 mutex_unlock(&dev->slow_path_mutex);
1330         }
1331
1332         if (IS_ERR(mr)) {
1333                 err = PTR_ERR(mr);
1334                 goto error;
1335         }
1336
1337         mlx5_ib_dbg(dev, "mkey 0x%x\n", mr->mmkey.key);
1338
1339         mr->umem = umem;
1340         set_mr_fields(dev, mr, npages, length, access_flags);
1341
1342         update_odp_mr(mr);
1343
1344         if (!populate_mtts) {
1345                 int update_xlt_flags = MLX5_IB_UPD_XLT_ENABLE;
1346
1347                 if (access_flags & IB_ACCESS_ON_DEMAND)
1348                         update_xlt_flags |= MLX5_IB_UPD_XLT_ZAP;
1349
1350                 err = mlx5_ib_update_xlt(mr, 0, ncont, page_shift,
1351                                          update_xlt_flags);
1352
1353                 if (err) {
1354                         dereg_mr(dev, mr);
1355                         return ERR_PTR(err);
1356                 }
1357         }
1358
1359         if (IS_ENABLED(CONFIG_INFINIBAND_ON_DEMAND_PAGING)) {
1360                 mr->live = 1;
1361                 atomic_set(&mr->num_pending_prefetch, 0);
1362         }
1363
1364         return &mr->ibmr;
1365 error:
1366         ib_umem_release(umem);
1367         return ERR_PTR(err);
1368 }
1369
1370 static int unreg_umr(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr)
1371 {
1372         struct mlx5_core_dev *mdev = dev->mdev;
1373         struct mlx5_umr_wr umrwr = {};
1374
1375         if (mdev->state == MLX5_DEVICE_STATE_INTERNAL_ERROR)
1376                 return 0;
1377
1378         umrwr.wr.send_flags = MLX5_IB_SEND_UMR_DISABLE_MR |
1379                               MLX5_IB_SEND_UMR_UPDATE_PD_ACCESS;
1380         umrwr.wr.opcode = MLX5_IB_WR_UMR;
1381         umrwr.pd = dev->umrc.pd;
1382         umrwr.mkey = mr->mmkey.key;
1383         umrwr.ignore_free_state = 1;
1384
1385         return mlx5_ib_post_send_wait(dev, &umrwr);
1386 }
1387
1388 static int rereg_umr(struct ib_pd *pd, struct mlx5_ib_mr *mr,
1389                      int access_flags, int flags)
1390 {
1391         struct mlx5_ib_dev *dev = to_mdev(pd->device);
1392         struct mlx5_umr_wr umrwr = {};
1393         int err;
1394
1395         umrwr.wr.send_flags = MLX5_IB_SEND_UMR_FAIL_IF_FREE;
1396
1397         umrwr.wr.opcode = MLX5_IB_WR_UMR;
1398         umrwr.mkey = mr->mmkey.key;
1399
1400         if (flags & IB_MR_REREG_PD || flags & IB_MR_REREG_ACCESS) {
1401                 umrwr.pd = pd;
1402                 umrwr.access_flags = access_flags;
1403                 umrwr.wr.send_flags |= MLX5_IB_SEND_UMR_UPDATE_PD_ACCESS;
1404         }
1405
1406         err = mlx5_ib_post_send_wait(dev, &umrwr);
1407
1408         return err;
1409 }
1410
1411 int mlx5_ib_rereg_user_mr(struct ib_mr *ib_mr, int flags, u64 start,
1412                           u64 length, u64 virt_addr, int new_access_flags,
1413                           struct ib_pd *new_pd, struct ib_udata *udata)
1414 {
1415         struct mlx5_ib_dev *dev = to_mdev(ib_mr->device);
1416         struct mlx5_ib_mr *mr = to_mmr(ib_mr);
1417         struct ib_pd *pd = (flags & IB_MR_REREG_PD) ? new_pd : ib_mr->pd;
1418         int access_flags = flags & IB_MR_REREG_ACCESS ?
1419                             new_access_flags :
1420                             mr->access_flags;
1421         int page_shift = 0;
1422         int upd_flags = 0;
1423         int npages = 0;
1424         int ncont = 0;
1425         int order = 0;
1426         u64 addr, len;
1427         int err;
1428
1429         mlx5_ib_dbg(dev, "start 0x%llx, virt_addr 0x%llx, length 0x%llx, access_flags 0x%x\n",
1430                     start, virt_addr, length, access_flags);
1431
1432         atomic_sub(mr->npages, &dev->mdev->priv.reg_pages);
1433
1434         if (!mr->umem)
1435                 return -EINVAL;
1436
1437         if (flags & IB_MR_REREG_TRANS) {
1438                 addr = virt_addr;
1439                 len = length;
1440         } else {
1441                 addr = mr->umem->address;
1442                 len = mr->umem->length;
1443         }
1444
1445         if (flags != IB_MR_REREG_PD) {
1446                 /*
1447                  * Replace umem. This needs to be done whether or not UMR is
1448                  * used.
1449                  */
1450                 flags |= IB_MR_REREG_TRANS;
1451                 ib_umem_release(mr->umem);
1452                 mr->umem = NULL;
1453                 err = mr_umem_get(dev, udata, addr, len, access_flags,
1454                                   &mr->umem, &npages, &page_shift, &ncont,
1455                                   &order);
1456                 if (err)
1457                         goto err;
1458         }
1459
1460         if (flags & IB_MR_REREG_TRANS && !use_umr_mtt_update(mr, addr, len)) {
1461                 /*
1462                  * UMR can't be used - MKey needs to be replaced.
1463                  */
1464                 if (mr->allocated_from_cache)
1465                         err = unreg_umr(dev, mr);
1466                 else
1467                         err = destroy_mkey(dev, mr);
1468                 if (err)
1469                         goto err;
1470
1471                 mr = reg_create(ib_mr, pd, addr, len, mr->umem, ncont,
1472                                 page_shift, access_flags, true);
1473
1474                 if (IS_ERR(mr)) {
1475                         err = PTR_ERR(mr);
1476                         mr = to_mmr(ib_mr);
1477                         goto err;
1478                 }
1479
1480                 mr->allocated_from_cache = 0;
1481                 if (IS_ENABLED(CONFIG_INFINIBAND_ON_DEMAND_PAGING))
1482                         mr->live = 1;
1483         } else {
1484                 /*
1485                  * Send a UMR WQE
1486                  */
1487                 mr->ibmr.pd = pd;
1488                 mr->access_flags = access_flags;
1489                 mr->mmkey.iova = addr;
1490                 mr->mmkey.size = len;
1491                 mr->mmkey.pd = to_mpd(pd)->pdn;
1492
1493                 if (flags & IB_MR_REREG_TRANS) {
1494                         upd_flags = MLX5_IB_UPD_XLT_ADDR;
1495                         if (flags & IB_MR_REREG_PD)
1496                                 upd_flags |= MLX5_IB_UPD_XLT_PD;
1497                         if (flags & IB_MR_REREG_ACCESS)
1498                                 upd_flags |= MLX5_IB_UPD_XLT_ACCESS;
1499                         err = mlx5_ib_update_xlt(mr, 0, npages, page_shift,
1500                                                  upd_flags);
1501                 } else {
1502                         err = rereg_umr(pd, mr, access_flags, flags);
1503                 }
1504
1505                 if (err)
1506                         goto err;
1507         }
1508
1509         set_mr_fields(dev, mr, npages, len, access_flags);
1510
1511         update_odp_mr(mr);
1512         return 0;
1513
1514 err:
1515         ib_umem_release(mr->umem);
1516         mr->umem = NULL;
1517
1518         clean_mr(dev, mr);
1519         return err;
1520 }
1521
1522 static int
1523 mlx5_alloc_priv_descs(struct ib_device *device,
1524                       struct mlx5_ib_mr *mr,
1525                       int ndescs,
1526                       int desc_size)
1527 {
1528         int size = ndescs * desc_size;
1529         int add_size;
1530         int ret;
1531
1532         add_size = max_t(int, MLX5_UMR_ALIGN - ARCH_KMALLOC_MINALIGN, 0);
1533
1534         mr->descs_alloc = kzalloc(size + add_size, GFP_KERNEL);
1535         if (!mr->descs_alloc)
1536                 return -ENOMEM;
1537
1538         mr->descs = PTR_ALIGN(mr->descs_alloc, MLX5_UMR_ALIGN);
1539
1540         mr->desc_map = dma_map_single(device->dev.parent, mr->descs,
1541                                       size, DMA_TO_DEVICE);
1542         if (dma_mapping_error(device->dev.parent, mr->desc_map)) {
1543                 ret = -ENOMEM;
1544                 goto err;
1545         }
1546
1547         return 0;
1548 err:
1549         kfree(mr->descs_alloc);
1550
1551         return ret;
1552 }
1553
1554 static void
1555 mlx5_free_priv_descs(struct mlx5_ib_mr *mr)
1556 {
1557         if (mr->descs) {
1558                 struct ib_device *device = mr->ibmr.device;
1559                 int size = mr->max_descs * mr->desc_size;
1560
1561                 dma_unmap_single(device->dev.parent, mr->desc_map,
1562                                  size, DMA_TO_DEVICE);
1563                 kfree(mr->descs_alloc);
1564                 mr->descs = NULL;
1565         }
1566 }
1567
1568 static void clean_mr(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr)
1569 {
1570         int allocated_from_cache = mr->allocated_from_cache;
1571
1572         if (mr->sig) {
1573                 if (mlx5_core_destroy_psv(dev->mdev,
1574                                           mr->sig->psv_memory.psv_idx))
1575                         mlx5_ib_warn(dev, "failed to destroy mem psv %d\n",
1576                                      mr->sig->psv_memory.psv_idx);
1577                 if (mlx5_core_destroy_psv(dev->mdev,
1578                                           mr->sig->psv_wire.psv_idx))
1579                         mlx5_ib_warn(dev, "failed to destroy wire psv %d\n",
1580                                      mr->sig->psv_wire.psv_idx);
1581                 kfree(mr->sig);
1582                 mr->sig = NULL;
1583         }
1584
1585         if (!allocated_from_cache) {
1586                 destroy_mkey(dev, mr);
1587                 mlx5_free_priv_descs(mr);
1588         }
1589 }
1590
1591 static void dereg_mr(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr)
1592 {
1593         int npages = mr->npages;
1594         struct ib_umem *umem = mr->umem;
1595
1596         if (is_odp_mr(mr)) {
1597                 struct ib_umem_odp *umem_odp = to_ib_umem_odp(umem);
1598
1599                 /* Prevent new page faults and
1600                  * prefetch requests from succeeding
1601                  */
1602                 mr->live = 0;
1603
1604                 /* dequeue pending prefetch requests for the mr */
1605                 if (atomic_read(&mr->num_pending_prefetch))
1606                         flush_workqueue(system_unbound_wq);
1607                 WARN_ON(atomic_read(&mr->num_pending_prefetch));
1608
1609                 /* Wait for all running page-fault handlers to finish. */
1610                 synchronize_srcu(&dev->mr_srcu);
1611                 /* Destroy all page mappings */
1612                 if (umem_odp->page_list)
1613                         mlx5_ib_invalidate_range(umem_odp,
1614                                                  ib_umem_start(umem_odp),
1615                                                  ib_umem_end(umem_odp));
1616                 else
1617                         mlx5_ib_free_implicit_mr(mr);
1618                 /*
1619                  * We kill the umem before the MR for ODP,
1620                  * so that there will not be any invalidations in
1621                  * flight, looking at the *mr struct.
1622                  */
1623                 ib_umem_release(umem);
1624                 atomic_sub(npages, &dev->mdev->priv.reg_pages);
1625
1626                 /* Avoid double-freeing the umem. */
1627                 umem = NULL;
1628         }
1629
1630         clean_mr(dev, mr);
1631
1632         /*
1633          * We should unregister the DMA address from the HCA before
1634          * remove the DMA mapping.
1635          */
1636         mlx5_mr_cache_free(dev, mr);
1637         ib_umem_release(umem);
1638         if (umem)
1639                 atomic_sub(npages, &dev->mdev->priv.reg_pages);
1640
1641         if (!mr->allocated_from_cache)
1642                 kfree(mr);
1643 }
1644
1645 int mlx5_ib_dereg_mr(struct ib_mr *ibmr, struct ib_udata *udata)
1646 {
1647         struct mlx5_ib_mr *mmr = to_mmr(ibmr);
1648
1649         if (ibmr->type == IB_MR_TYPE_INTEGRITY) {
1650                 dereg_mr(to_mdev(mmr->mtt_mr->ibmr.device), mmr->mtt_mr);
1651                 dereg_mr(to_mdev(mmr->klm_mr->ibmr.device), mmr->klm_mr);
1652         }
1653
1654         dereg_mr(to_mdev(ibmr->device), mmr);
1655
1656         return 0;
1657 }
1658
1659 static void mlx5_set_umr_free_mkey(struct ib_pd *pd, u32 *in, int ndescs,
1660                                    int access_mode, int page_shift)
1661 {
1662         void *mkc;
1663
1664         mkc = MLX5_ADDR_OF(create_mkey_in, in, memory_key_mkey_entry);
1665
1666         MLX5_SET(mkc, mkc, free, 1);
1667         MLX5_SET(mkc, mkc, qpn, 0xffffff);
1668         MLX5_SET(mkc, mkc, pd, to_mpd(pd)->pdn);
1669         MLX5_SET(mkc, mkc, translations_octword_size, ndescs);
1670         MLX5_SET(mkc, mkc, access_mode_1_0, access_mode & 0x3);
1671         MLX5_SET(mkc, mkc, access_mode_4_2, (access_mode >> 2) & 0x7);
1672         MLX5_SET(mkc, mkc, umr_en, 1);
1673         MLX5_SET(mkc, mkc, log_page_size, page_shift);
1674 }
1675
1676 static int _mlx5_alloc_mkey_descs(struct ib_pd *pd, struct mlx5_ib_mr *mr,
1677                                   int ndescs, int desc_size, int page_shift,
1678                                   int access_mode, u32 *in, int inlen)
1679 {
1680         struct mlx5_ib_dev *dev = to_mdev(pd->device);
1681         int err;
1682
1683         mr->access_mode = access_mode;
1684         mr->desc_size = desc_size;
1685         mr->max_descs = ndescs;
1686
1687         err = mlx5_alloc_priv_descs(pd->device, mr, ndescs, desc_size);
1688         if (err)
1689                 return err;
1690
1691         mlx5_set_umr_free_mkey(pd, in, ndescs, access_mode, page_shift);
1692
1693         err = mlx5_core_create_mkey(dev->mdev, &mr->mmkey, in, inlen);
1694         if (err)
1695                 goto err_free_descs;
1696
1697         mr->mmkey.type = MLX5_MKEY_MR;
1698         mr->ibmr.lkey = mr->mmkey.key;
1699         mr->ibmr.rkey = mr->mmkey.key;
1700
1701         return 0;
1702
1703 err_free_descs:
1704         mlx5_free_priv_descs(mr);
1705         return err;
1706 }
1707
1708 static struct mlx5_ib_mr *mlx5_ib_alloc_pi_mr(struct ib_pd *pd,
1709                                 u32 max_num_sg, u32 max_num_meta_sg,
1710                                 int desc_size, int access_mode)
1711 {
1712         int inlen = MLX5_ST_SZ_BYTES(create_mkey_in);
1713         int ndescs = ALIGN(max_num_sg + max_num_meta_sg, 4);
1714         int page_shift = 0;
1715         struct mlx5_ib_mr *mr;
1716         u32 *in;
1717         int err;
1718
1719         mr = kzalloc(sizeof(*mr), GFP_KERNEL);
1720         if (!mr)
1721                 return ERR_PTR(-ENOMEM);
1722
1723         mr->ibmr.pd = pd;
1724         mr->ibmr.device = pd->device;
1725
1726         in = kzalloc(inlen, GFP_KERNEL);
1727         if (!in) {
1728                 err = -ENOMEM;
1729                 goto err_free;
1730         }
1731
1732         if (access_mode == MLX5_MKC_ACCESS_MODE_MTT)
1733                 page_shift = PAGE_SHIFT;
1734
1735         err = _mlx5_alloc_mkey_descs(pd, mr, ndescs, desc_size, page_shift,
1736                                      access_mode, in, inlen);
1737         if (err)
1738                 goto err_free_in;
1739
1740         mr->umem = NULL;
1741         kfree(in);
1742
1743         return mr;
1744
1745 err_free_in:
1746         kfree(in);
1747 err_free:
1748         kfree(mr);
1749         return ERR_PTR(err);
1750 }
1751
1752 static int mlx5_alloc_mem_reg_descs(struct ib_pd *pd, struct mlx5_ib_mr *mr,
1753                                     int ndescs, u32 *in, int inlen)
1754 {
1755         return _mlx5_alloc_mkey_descs(pd, mr, ndescs, sizeof(struct mlx5_mtt),
1756                                       PAGE_SHIFT, MLX5_MKC_ACCESS_MODE_MTT, in,
1757                                       inlen);
1758 }
1759
1760 static int mlx5_alloc_sg_gaps_descs(struct ib_pd *pd, struct mlx5_ib_mr *mr,
1761                                     int ndescs, u32 *in, int inlen)
1762 {
1763         return _mlx5_alloc_mkey_descs(pd, mr, ndescs, sizeof(struct mlx5_klm),
1764                                       0, MLX5_MKC_ACCESS_MODE_KLMS, in, inlen);
1765 }
1766
1767 static int mlx5_alloc_integrity_descs(struct ib_pd *pd, struct mlx5_ib_mr *mr,
1768                                       int max_num_sg, int max_num_meta_sg,
1769                                       u32 *in, int inlen)
1770 {
1771         struct mlx5_ib_dev *dev = to_mdev(pd->device);
1772         u32 psv_index[2];
1773         void *mkc;
1774         int err;
1775
1776         mr->sig = kzalloc(sizeof(*mr->sig), GFP_KERNEL);
1777         if (!mr->sig)
1778                 return -ENOMEM;
1779
1780         /* create mem & wire PSVs */
1781         err = mlx5_core_create_psv(dev->mdev, to_mpd(pd)->pdn, 2, psv_index);
1782         if (err)
1783                 goto err_free_sig;
1784
1785         mr->sig->psv_memory.psv_idx = psv_index[0];
1786         mr->sig->psv_wire.psv_idx = psv_index[1];
1787
1788         mr->sig->sig_status_checked = true;
1789         mr->sig->sig_err_exists = false;
1790         /* Next UMR, Arm SIGERR */
1791         ++mr->sig->sigerr_count;
1792         mr->klm_mr = mlx5_ib_alloc_pi_mr(pd, max_num_sg, max_num_meta_sg,
1793                                          sizeof(struct mlx5_klm),
1794                                          MLX5_MKC_ACCESS_MODE_KLMS);
1795         if (IS_ERR(mr->klm_mr)) {
1796                 err = PTR_ERR(mr->klm_mr);
1797                 goto err_destroy_psv;
1798         }
1799         mr->mtt_mr = mlx5_ib_alloc_pi_mr(pd, max_num_sg, max_num_meta_sg,
1800                                          sizeof(struct mlx5_mtt),
1801                                          MLX5_MKC_ACCESS_MODE_MTT);
1802         if (IS_ERR(mr->mtt_mr)) {
1803                 err = PTR_ERR(mr->mtt_mr);
1804                 goto err_free_klm_mr;
1805         }
1806
1807         /* Set bsf descriptors for mkey */
1808         mkc = MLX5_ADDR_OF(create_mkey_in, in, memory_key_mkey_entry);
1809         MLX5_SET(mkc, mkc, bsf_en, 1);
1810         MLX5_SET(mkc, mkc, bsf_octword_size, MLX5_MKEY_BSF_OCTO_SIZE);
1811
1812         err = _mlx5_alloc_mkey_descs(pd, mr, 4, sizeof(struct mlx5_klm), 0,
1813                                      MLX5_MKC_ACCESS_MODE_KLMS, in, inlen);
1814         if (err)
1815                 goto err_free_mtt_mr;
1816
1817         return 0;
1818
1819 err_free_mtt_mr:
1820         dereg_mr(to_mdev(mr->mtt_mr->ibmr.device), mr->mtt_mr);
1821         mr->mtt_mr = NULL;
1822 err_free_klm_mr:
1823         dereg_mr(to_mdev(mr->klm_mr->ibmr.device), mr->klm_mr);
1824         mr->klm_mr = NULL;
1825 err_destroy_psv:
1826         if (mlx5_core_destroy_psv(dev->mdev, mr->sig->psv_memory.psv_idx))
1827                 mlx5_ib_warn(dev, "failed to destroy mem psv %d\n",
1828                              mr->sig->psv_memory.psv_idx);
1829         if (mlx5_core_destroy_psv(dev->mdev, mr->sig->psv_wire.psv_idx))
1830                 mlx5_ib_warn(dev, "failed to destroy wire psv %d\n",
1831                              mr->sig->psv_wire.psv_idx);
1832 err_free_sig:
1833         kfree(mr->sig);
1834
1835         return err;
1836 }
1837
1838 static struct ib_mr *__mlx5_ib_alloc_mr(struct ib_pd *pd,
1839                                         enum ib_mr_type mr_type, u32 max_num_sg,
1840                                         u32 max_num_meta_sg)
1841 {
1842         struct mlx5_ib_dev *dev = to_mdev(pd->device);
1843         int inlen = MLX5_ST_SZ_BYTES(create_mkey_in);
1844         int ndescs = ALIGN(max_num_sg, 4);
1845         struct mlx5_ib_mr *mr;
1846         u32 *in;
1847         int err;
1848
1849         mr = kzalloc(sizeof(*mr), GFP_KERNEL);
1850         if (!mr)
1851                 return ERR_PTR(-ENOMEM);
1852
1853         in = kzalloc(inlen, GFP_KERNEL);
1854         if (!in) {
1855                 err = -ENOMEM;
1856                 goto err_free;
1857         }
1858
1859         mr->ibmr.device = pd->device;
1860         mr->umem = NULL;
1861
1862         switch (mr_type) {
1863         case IB_MR_TYPE_MEM_REG:
1864                 err = mlx5_alloc_mem_reg_descs(pd, mr, ndescs, in, inlen);
1865                 break;
1866         case IB_MR_TYPE_SG_GAPS:
1867                 err = mlx5_alloc_sg_gaps_descs(pd, mr, ndescs, in, inlen);
1868                 break;
1869         case IB_MR_TYPE_INTEGRITY:
1870                 err = mlx5_alloc_integrity_descs(pd, mr, max_num_sg,
1871                                                  max_num_meta_sg, in, inlen);
1872                 break;
1873         default:
1874                 mlx5_ib_warn(dev, "Invalid mr type %d\n", mr_type);
1875                 err = -EINVAL;
1876         }
1877
1878         if (err)
1879                 goto err_free_in;
1880
1881         kfree(in);
1882
1883         return &mr->ibmr;
1884
1885 err_free_in:
1886         kfree(in);
1887 err_free:
1888         kfree(mr);
1889         return ERR_PTR(err);
1890 }
1891
1892 struct ib_mr *mlx5_ib_alloc_mr(struct ib_pd *pd, enum ib_mr_type mr_type,
1893                                u32 max_num_sg, struct ib_udata *udata)
1894 {
1895         return __mlx5_ib_alloc_mr(pd, mr_type, max_num_sg, 0);
1896 }
1897
1898 struct ib_mr *mlx5_ib_alloc_mr_integrity(struct ib_pd *pd,
1899                                          u32 max_num_sg, u32 max_num_meta_sg)
1900 {
1901         return __mlx5_ib_alloc_mr(pd, IB_MR_TYPE_INTEGRITY, max_num_sg,
1902                                   max_num_meta_sg);
1903 }
1904
1905 struct ib_mw *mlx5_ib_alloc_mw(struct ib_pd *pd, enum ib_mw_type type,
1906                                struct ib_udata *udata)
1907 {
1908         struct mlx5_ib_dev *dev = to_mdev(pd->device);
1909         int inlen = MLX5_ST_SZ_BYTES(create_mkey_in);
1910         struct mlx5_ib_mw *mw = NULL;
1911         u32 *in = NULL;
1912         void *mkc;
1913         int ndescs;
1914         int err;
1915         struct mlx5_ib_alloc_mw req = {};
1916         struct {
1917                 __u32   comp_mask;
1918                 __u32   response_length;
1919         } resp = {};
1920
1921         err = ib_copy_from_udata(&req, udata, min(udata->inlen, sizeof(req)));
1922         if (err)
1923                 return ERR_PTR(err);
1924
1925         if (req.comp_mask || req.reserved1 || req.reserved2)
1926                 return ERR_PTR(-EOPNOTSUPP);
1927
1928         if (udata->inlen > sizeof(req) &&
1929             !ib_is_udata_cleared(udata, sizeof(req),
1930                                  udata->inlen - sizeof(req)))
1931                 return ERR_PTR(-EOPNOTSUPP);
1932
1933         ndescs = req.num_klms ? roundup(req.num_klms, 4) : roundup(1, 4);
1934
1935         mw = kzalloc(sizeof(*mw), GFP_KERNEL);
1936         in = kzalloc(inlen, GFP_KERNEL);
1937         if (!mw || !in) {
1938                 err = -ENOMEM;
1939                 goto free;
1940         }
1941
1942         mkc = MLX5_ADDR_OF(create_mkey_in, in, memory_key_mkey_entry);
1943
1944         MLX5_SET(mkc, mkc, free, 1);
1945         MLX5_SET(mkc, mkc, translations_octword_size, ndescs);
1946         MLX5_SET(mkc, mkc, pd, to_mpd(pd)->pdn);
1947         MLX5_SET(mkc, mkc, umr_en, 1);
1948         MLX5_SET(mkc, mkc, lr, 1);
1949         MLX5_SET(mkc, mkc, access_mode_1_0, MLX5_MKC_ACCESS_MODE_KLMS);
1950         MLX5_SET(mkc, mkc, en_rinval, !!((type == IB_MW_TYPE_2)));
1951         MLX5_SET(mkc, mkc, qpn, 0xffffff);
1952
1953         err = mlx5_core_create_mkey(dev->mdev, &mw->mmkey, in, inlen);
1954         if (err)
1955                 goto free;
1956
1957         mw->mmkey.type = MLX5_MKEY_MW;
1958         mw->ibmw.rkey = mw->mmkey.key;
1959         mw->ndescs = ndescs;
1960
1961         resp.response_length = min(offsetof(typeof(resp), response_length) +
1962                                    sizeof(resp.response_length), udata->outlen);
1963         if (resp.response_length) {
1964                 err = ib_copy_to_udata(udata, &resp, resp.response_length);
1965                 if (err) {
1966                         mlx5_core_destroy_mkey(dev->mdev, &mw->mmkey);
1967                         goto free;
1968                 }
1969         }
1970
1971         kfree(in);
1972         return &mw->ibmw;
1973
1974 free:
1975         kfree(mw);
1976         kfree(in);
1977         return ERR_PTR(err);
1978 }
1979
1980 int mlx5_ib_dealloc_mw(struct ib_mw *mw)
1981 {
1982         struct mlx5_ib_mw *mmw = to_mmw(mw);
1983         int err;
1984
1985         err =  mlx5_core_destroy_mkey((to_mdev(mw->device))->mdev,
1986                                       &mmw->mmkey);
1987         if (!err)
1988                 kfree(mmw);
1989         return err;
1990 }
1991
1992 int mlx5_ib_check_mr_status(struct ib_mr *ibmr, u32 check_mask,
1993                             struct ib_mr_status *mr_status)
1994 {
1995         struct mlx5_ib_mr *mmr = to_mmr(ibmr);
1996         int ret = 0;
1997
1998         if (check_mask & ~IB_MR_CHECK_SIG_STATUS) {
1999                 pr_err("Invalid status check mask\n");
2000                 ret = -EINVAL;
2001                 goto done;
2002         }
2003
2004         mr_status->fail_status = 0;
2005         if (check_mask & IB_MR_CHECK_SIG_STATUS) {
2006                 if (!mmr->sig) {
2007                         ret = -EINVAL;
2008                         pr_err("signature status check requested on a non-signature enabled MR\n");
2009                         goto done;
2010                 }
2011
2012                 mmr->sig->sig_status_checked = true;
2013                 if (!mmr->sig->sig_err_exists)
2014                         goto done;
2015
2016                 if (ibmr->lkey == mmr->sig->err_item.key)
2017                         memcpy(&mr_status->sig_err, &mmr->sig->err_item,
2018                                sizeof(mr_status->sig_err));
2019                 else {
2020                         mr_status->sig_err.err_type = IB_SIG_BAD_GUARD;
2021                         mr_status->sig_err.sig_err_offset = 0;
2022                         mr_status->sig_err.key = mmr->sig->err_item.key;
2023                 }
2024
2025                 mmr->sig->sig_err_exists = false;
2026                 mr_status->fail_status |= IB_MR_CHECK_SIG_STATUS;
2027         }
2028
2029 done:
2030         return ret;
2031 }
2032
2033 static int
2034 mlx5_ib_map_pa_mr_sg_pi(struct ib_mr *ibmr, struct scatterlist *data_sg,
2035                         int data_sg_nents, unsigned int *data_sg_offset,
2036                         struct scatterlist *meta_sg, int meta_sg_nents,
2037                         unsigned int *meta_sg_offset)
2038 {
2039         struct mlx5_ib_mr *mr = to_mmr(ibmr);
2040         unsigned int sg_offset = 0;
2041         int n = 0;
2042
2043         mr->meta_length = 0;
2044         if (data_sg_nents == 1) {
2045                 n++;
2046                 mr->ndescs = 1;
2047                 if (data_sg_offset)
2048                         sg_offset = *data_sg_offset;
2049                 mr->data_length = sg_dma_len(data_sg) - sg_offset;
2050                 mr->data_iova = sg_dma_address(data_sg) + sg_offset;
2051                 if (meta_sg_nents == 1) {
2052                         n++;
2053                         mr->meta_ndescs = 1;
2054                         if (meta_sg_offset)
2055                                 sg_offset = *meta_sg_offset;
2056                         else
2057                                 sg_offset = 0;
2058                         mr->meta_length = sg_dma_len(meta_sg) - sg_offset;
2059                         mr->pi_iova = sg_dma_address(meta_sg) + sg_offset;
2060                 }
2061                 ibmr->length = mr->data_length + mr->meta_length;
2062         }
2063
2064         return n;
2065 }
2066
2067 static int
2068 mlx5_ib_sg_to_klms(struct mlx5_ib_mr *mr,
2069                    struct scatterlist *sgl,
2070                    unsigned short sg_nents,
2071                    unsigned int *sg_offset_p,
2072                    struct scatterlist *meta_sgl,
2073                    unsigned short meta_sg_nents,
2074                    unsigned int *meta_sg_offset_p)
2075 {
2076         struct scatterlist *sg = sgl;
2077         struct mlx5_klm *klms = mr->descs;
2078         unsigned int sg_offset = sg_offset_p ? *sg_offset_p : 0;
2079         u32 lkey = mr->ibmr.pd->local_dma_lkey;
2080         int i, j = 0;
2081
2082         mr->ibmr.iova = sg_dma_address(sg) + sg_offset;
2083         mr->ibmr.length = 0;
2084
2085         for_each_sg(sgl, sg, sg_nents, i) {
2086                 if (unlikely(i >= mr->max_descs))
2087                         break;
2088                 klms[i].va = cpu_to_be64(sg_dma_address(sg) + sg_offset);
2089                 klms[i].bcount = cpu_to_be32(sg_dma_len(sg) - sg_offset);
2090                 klms[i].key = cpu_to_be32(lkey);
2091                 mr->ibmr.length += sg_dma_len(sg) - sg_offset;
2092
2093                 sg_offset = 0;
2094         }
2095
2096         if (sg_offset_p)
2097                 *sg_offset_p = sg_offset;
2098
2099         mr->ndescs = i;
2100         mr->data_length = mr->ibmr.length;
2101
2102         if (meta_sg_nents) {
2103                 sg = meta_sgl;
2104                 sg_offset = meta_sg_offset_p ? *meta_sg_offset_p : 0;
2105                 for_each_sg(meta_sgl, sg, meta_sg_nents, j) {
2106                         if (unlikely(i + j >= mr->max_descs))
2107                                 break;
2108                         klms[i + j].va = cpu_to_be64(sg_dma_address(sg) +
2109                                                      sg_offset);
2110                         klms[i + j].bcount = cpu_to_be32(sg_dma_len(sg) -
2111                                                          sg_offset);
2112                         klms[i + j].key = cpu_to_be32(lkey);
2113                         mr->ibmr.length += sg_dma_len(sg) - sg_offset;
2114
2115                         sg_offset = 0;
2116                 }
2117                 if (meta_sg_offset_p)
2118                         *meta_sg_offset_p = sg_offset;
2119
2120                 mr->meta_ndescs = j;
2121                 mr->meta_length = mr->ibmr.length - mr->data_length;
2122         }
2123
2124         return i + j;
2125 }
2126
2127 static int mlx5_set_page(struct ib_mr *ibmr, u64 addr)
2128 {
2129         struct mlx5_ib_mr *mr = to_mmr(ibmr);
2130         __be64 *descs;
2131
2132         if (unlikely(mr->ndescs == mr->max_descs))
2133                 return -ENOMEM;
2134
2135         descs = mr->descs;
2136         descs[mr->ndescs++] = cpu_to_be64(addr | MLX5_EN_RD | MLX5_EN_WR);
2137
2138         return 0;
2139 }
2140
2141 static int mlx5_set_page_pi(struct ib_mr *ibmr, u64 addr)
2142 {
2143         struct mlx5_ib_mr *mr = to_mmr(ibmr);
2144         __be64 *descs;
2145
2146         if (unlikely(mr->ndescs + mr->meta_ndescs == mr->max_descs))
2147                 return -ENOMEM;
2148
2149         descs = mr->descs;
2150         descs[mr->ndescs + mr->meta_ndescs++] =
2151                 cpu_to_be64(addr | MLX5_EN_RD | MLX5_EN_WR);
2152
2153         return 0;
2154 }
2155
2156 static int
2157 mlx5_ib_map_mtt_mr_sg_pi(struct ib_mr *ibmr, struct scatterlist *data_sg,
2158                          int data_sg_nents, unsigned int *data_sg_offset,
2159                          struct scatterlist *meta_sg, int meta_sg_nents,
2160                          unsigned int *meta_sg_offset)
2161 {
2162         struct mlx5_ib_mr *mr = to_mmr(ibmr);
2163         struct mlx5_ib_mr *pi_mr = mr->mtt_mr;
2164         int n;
2165
2166         pi_mr->ndescs = 0;
2167         pi_mr->meta_ndescs = 0;
2168         pi_mr->meta_length = 0;
2169
2170         ib_dma_sync_single_for_cpu(ibmr->device, pi_mr->desc_map,
2171                                    pi_mr->desc_size * pi_mr->max_descs,
2172                                    DMA_TO_DEVICE);
2173
2174         pi_mr->ibmr.page_size = ibmr->page_size;
2175         n = ib_sg_to_pages(&pi_mr->ibmr, data_sg, data_sg_nents, data_sg_offset,
2176                            mlx5_set_page);
2177         if (n != data_sg_nents)
2178                 return n;
2179
2180         pi_mr->data_iova = pi_mr->ibmr.iova;
2181         pi_mr->data_length = pi_mr->ibmr.length;
2182         pi_mr->ibmr.length = pi_mr->data_length;
2183         ibmr->length = pi_mr->data_length;
2184
2185         if (meta_sg_nents) {
2186                 u64 page_mask = ~((u64)ibmr->page_size - 1);
2187                 u64 iova = pi_mr->data_iova;
2188
2189                 n += ib_sg_to_pages(&pi_mr->ibmr, meta_sg, meta_sg_nents,
2190                                     meta_sg_offset, mlx5_set_page_pi);
2191
2192                 pi_mr->meta_length = pi_mr->ibmr.length;
2193                 /*
2194                  * PI address for the HW is the offset of the metadata address
2195                  * relative to the first data page address.
2196                  * It equals to first data page address + size of data pages +
2197                  * metadata offset at the first metadata page
2198                  */
2199                 pi_mr->pi_iova = (iova & page_mask) +
2200                                  pi_mr->ndescs * ibmr->page_size +
2201                                  (pi_mr->ibmr.iova & ~page_mask);
2202                 /*
2203                  * In order to use one MTT MR for data and metadata, we register
2204                  * also the gaps between the end of the data and the start of
2205                  * the metadata (the sig MR will verify that the HW will access
2206                  * to right addresses). This mapping is safe because we use
2207                  * internal mkey for the registration.
2208                  */
2209                 pi_mr->ibmr.length = pi_mr->pi_iova + pi_mr->meta_length - iova;
2210                 pi_mr->ibmr.iova = iova;
2211                 ibmr->length += pi_mr->meta_length;
2212         }
2213
2214         ib_dma_sync_single_for_device(ibmr->device, pi_mr->desc_map,
2215                                       pi_mr->desc_size * pi_mr->max_descs,
2216                                       DMA_TO_DEVICE);
2217
2218         return n;
2219 }
2220
2221 static int
2222 mlx5_ib_map_klm_mr_sg_pi(struct ib_mr *ibmr, struct scatterlist *data_sg,
2223                          int data_sg_nents, unsigned int *data_sg_offset,
2224                          struct scatterlist *meta_sg, int meta_sg_nents,
2225                          unsigned int *meta_sg_offset)
2226 {
2227         struct mlx5_ib_mr *mr = to_mmr(ibmr);
2228         struct mlx5_ib_mr *pi_mr = mr->klm_mr;
2229         int n;
2230
2231         pi_mr->ndescs = 0;
2232         pi_mr->meta_ndescs = 0;
2233         pi_mr->meta_length = 0;
2234
2235         ib_dma_sync_single_for_cpu(ibmr->device, pi_mr->desc_map,
2236                                    pi_mr->desc_size * pi_mr->max_descs,
2237                                    DMA_TO_DEVICE);
2238
2239         n = mlx5_ib_sg_to_klms(pi_mr, data_sg, data_sg_nents, data_sg_offset,
2240                                meta_sg, meta_sg_nents, meta_sg_offset);
2241
2242         ib_dma_sync_single_for_device(ibmr->device, pi_mr->desc_map,
2243                                       pi_mr->desc_size * pi_mr->max_descs,
2244                                       DMA_TO_DEVICE);
2245
2246         /* This is zero-based memory region */
2247         pi_mr->data_iova = 0;
2248         pi_mr->ibmr.iova = 0;
2249         pi_mr->pi_iova = pi_mr->data_length;
2250         ibmr->length = pi_mr->ibmr.length;
2251
2252         return n;
2253 }
2254
2255 int mlx5_ib_map_mr_sg_pi(struct ib_mr *ibmr, struct scatterlist *data_sg,
2256                          int data_sg_nents, unsigned int *data_sg_offset,
2257                          struct scatterlist *meta_sg, int meta_sg_nents,
2258                          unsigned int *meta_sg_offset)
2259 {
2260         struct mlx5_ib_mr *mr = to_mmr(ibmr);
2261         struct mlx5_ib_mr *pi_mr = NULL;
2262         int n;
2263
2264         WARN_ON(ibmr->type != IB_MR_TYPE_INTEGRITY);
2265
2266         mr->ndescs = 0;
2267         mr->data_length = 0;
2268         mr->data_iova = 0;
2269         mr->meta_ndescs = 0;
2270         mr->pi_iova = 0;
2271         /*
2272          * As a performance optimization, if possible, there is no need to
2273          * perform UMR operation to register the data/metadata buffers.
2274          * First try to map the sg lists to PA descriptors with local_dma_lkey.
2275          * Fallback to UMR only in case of a failure.
2276          */
2277         n = mlx5_ib_map_pa_mr_sg_pi(ibmr, data_sg, data_sg_nents,
2278                                     data_sg_offset, meta_sg, meta_sg_nents,
2279                                     meta_sg_offset);
2280         if (n == data_sg_nents + meta_sg_nents)
2281                 goto out;
2282         /*
2283          * As a performance optimization, if possible, there is no need to map
2284          * the sg lists to KLM descriptors. First try to map the sg lists to MTT
2285          * descriptors and fallback to KLM only in case of a failure.
2286          * It's more efficient for the HW to work with MTT descriptors
2287          * (especially in high load).
2288          * Use KLM (indirect access) only if it's mandatory.
2289          */
2290         pi_mr = mr->mtt_mr;
2291         n = mlx5_ib_map_mtt_mr_sg_pi(ibmr, data_sg, data_sg_nents,
2292                                      data_sg_offset, meta_sg, meta_sg_nents,
2293                                      meta_sg_offset);
2294         if (n == data_sg_nents + meta_sg_nents)
2295                 goto out;
2296
2297         pi_mr = mr->klm_mr;
2298         n = mlx5_ib_map_klm_mr_sg_pi(ibmr, data_sg, data_sg_nents,
2299                                      data_sg_offset, meta_sg, meta_sg_nents,
2300                                      meta_sg_offset);
2301         if (unlikely(n != data_sg_nents + meta_sg_nents))
2302                 return -ENOMEM;
2303
2304 out:
2305         /* This is zero-based memory region */
2306         ibmr->iova = 0;
2307         mr->pi_mr = pi_mr;
2308         if (pi_mr)
2309                 ibmr->sig_attrs->meta_length = pi_mr->meta_length;
2310         else
2311                 ibmr->sig_attrs->meta_length = mr->meta_length;
2312
2313         return 0;
2314 }
2315
2316 int mlx5_ib_map_mr_sg(struct ib_mr *ibmr, struct scatterlist *sg, int sg_nents,
2317                       unsigned int *sg_offset)
2318 {
2319         struct mlx5_ib_mr *mr = to_mmr(ibmr);
2320         int n;
2321
2322         mr->ndescs = 0;
2323
2324         ib_dma_sync_single_for_cpu(ibmr->device, mr->desc_map,
2325                                    mr->desc_size * mr->max_descs,
2326                                    DMA_TO_DEVICE);
2327
2328         if (mr->access_mode == MLX5_MKC_ACCESS_MODE_KLMS)
2329                 n = mlx5_ib_sg_to_klms(mr, sg, sg_nents, sg_offset, NULL, 0,
2330                                        NULL);
2331         else
2332                 n = ib_sg_to_pages(ibmr, sg, sg_nents, sg_offset,
2333                                 mlx5_set_page);
2334
2335         ib_dma_sync_single_for_device(ibmr->device, mr->desc_map,
2336                                       mr->desc_size * mr->max_descs,
2337                                       DMA_TO_DEVICE);
2338
2339         return n;
2340 }