diff options
Diffstat (limited to 'drivers/infiniband/hw/mlx5/mr.c')
-rw-r--r-- | drivers/infiniband/hw/mlx5/mr.c | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/drivers/infiniband/hw/mlx5/mr.c b/drivers/infiniband/hw/mlx5/mr.c index 763bb5b36144..8ab2f1360a45 100644 --- a/drivers/infiniband/hw/mlx5/mr.c +++ b/drivers/infiniband/hw/mlx5/mr.c | |||
@@ -582,6 +582,15 @@ static void clean_keys(struct mlx5_ib_dev *dev, int c) | |||
582 | } | 582 | } |
583 | } | 583 | } |
584 | 584 | ||
585 | static void mlx5_mr_cache_debugfs_cleanup(struct mlx5_ib_dev *dev) | ||
586 | { | ||
587 | if (!mlx5_debugfs_root) | ||
588 | return; | ||
589 | |||
590 | debugfs_remove_recursive(dev->cache.root); | ||
591 | dev->cache.root = NULL; | ||
592 | } | ||
593 | |||
585 | static int mlx5_mr_cache_debugfs_init(struct mlx5_ib_dev *dev) | 594 | static int mlx5_mr_cache_debugfs_init(struct mlx5_ib_dev *dev) |
586 | { | 595 | { |
587 | struct mlx5_mr_cache *cache = &dev->cache; | 596 | struct mlx5_mr_cache *cache = &dev->cache; |
@@ -600,38 +609,34 @@ static int mlx5_mr_cache_debugfs_init(struct mlx5_ib_dev *dev) | |||
600 | sprintf(ent->name, "%d", ent->order); | 609 | sprintf(ent->name, "%d", ent->order); |
601 | ent->dir = debugfs_create_dir(ent->name, cache->root); | 610 | ent->dir = debugfs_create_dir(ent->name, cache->root); |
602 | if (!ent->dir) | 611 | if (!ent->dir) |
603 | return -ENOMEM; | 612 | goto err; |
604 | 613 | ||
605 | ent->fsize = debugfs_create_file("size", 0600, ent->dir, ent, | 614 | ent->fsize = debugfs_create_file("size", 0600, ent->dir, ent, |
606 | &size_fops); | 615 | &size_fops); |
607 | if (!ent->fsize) | 616 | if (!ent->fsize) |
608 | return -ENOMEM; | 617 | goto err; |
609 | 618 | ||
610 | ent->flimit = debugfs_create_file("limit", 0600, ent->dir, ent, | 619 | ent->flimit = debugfs_create_file("limit", 0600, ent->dir, ent, |
611 | &limit_fops); | 620 | &limit_fops); |
612 | if (!ent->flimit) | 621 | if (!ent->flimit) |
613 | return -ENOMEM; | 622 | goto err; |
614 | 623 | ||
615 | ent->fcur = debugfs_create_u32("cur", 0400, ent->dir, | 624 | ent->fcur = debugfs_create_u32("cur", 0400, ent->dir, |
616 | &ent->cur); | 625 | &ent->cur); |
617 | if (!ent->fcur) | 626 | if (!ent->fcur) |
618 | return -ENOMEM; | 627 | goto err; |
619 | 628 | ||
620 | ent->fmiss = debugfs_create_u32("miss", 0600, ent->dir, | 629 | ent->fmiss = debugfs_create_u32("miss", 0600, ent->dir, |
621 | &ent->miss); | 630 | &ent->miss); |
622 | if (!ent->fmiss) | 631 | if (!ent->fmiss) |
623 | return -ENOMEM; | 632 | goto err; |
624 | } | 633 | } |
625 | 634 | ||
626 | return 0; | 635 | return 0; |
627 | } | 636 | err: |
628 | 637 | mlx5_mr_cache_debugfs_cleanup(dev); | |
629 | static void mlx5_mr_cache_debugfs_cleanup(struct mlx5_ib_dev *dev) | ||
630 | { | ||
631 | if (!mlx5_debugfs_root) | ||
632 | return; | ||
633 | 638 | ||
634 | debugfs_remove_recursive(dev->cache.root); | 639 | return -ENOMEM; |
635 | } | 640 | } |
636 | 641 | ||
637 | static void delay_time_func(unsigned long ctx) | 642 | static void delay_time_func(unsigned long ctx) |
@@ -692,6 +697,11 @@ int mlx5_mr_cache_init(struct mlx5_ib_dev *dev) | |||
692 | if (err) | 697 | if (err) |
693 | mlx5_ib_warn(dev, "cache debugfs failure\n"); | 698 | mlx5_ib_warn(dev, "cache debugfs failure\n"); |
694 | 699 | ||
700 | /* | ||
701 | * We don't want to fail driver if debugfs failed to initialize, | ||
702 | * so we are not forwarding error to the user. | ||
703 | */ | ||
704 | |||
695 | return 0; | 705 | return 0; |
696 | } | 706 | } |
697 | 707 | ||
@@ -1779,7 +1789,7 @@ mlx5_ib_sg_to_klms(struct mlx5_ib_mr *mr, | |||
1779 | mr->ndescs = sg_nents; | 1789 | mr->ndescs = sg_nents; |
1780 | 1790 | ||
1781 | for_each_sg(sgl, sg, sg_nents, i) { | 1791 | for_each_sg(sgl, sg, sg_nents, i) { |
1782 | if (unlikely(i > mr->max_descs)) | 1792 | if (unlikely(i >= mr->max_descs)) |
1783 | break; | 1793 | break; |
1784 | klms[i].va = cpu_to_be64(sg_dma_address(sg) + sg_offset); | 1794 | klms[i].va = cpu_to_be64(sg_dma_address(sg) + sg_offset); |
1785 | klms[i].bcount = cpu_to_be32(sg_dma_len(sg) - sg_offset); | 1795 | klms[i].bcount = cpu_to_be32(sg_dma_len(sg) - sg_offset); |