RDMA/mlx5: Replace spinlock protected write with atomic var
authorSaeed Mahameed <saeedm@mellanox.com>
Tue, 10 Mar 2020 08:22:29 +0000 (10:22 +0200)
committerJason Gunthorpe <jgg@mellanox.com>
Fri, 13 Mar 2020 14:08:00 +0000 (11:08 -0300)
mkey variant calculation was spinlock protected to make it atomic, replace
that with one atomic variable.

Link: https://lore.kernel.org/r/20200310082238.239865-4-leon@kernel.org
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/hw/mlx5/main.c
drivers/infiniband/hw/mlx5/mlx5_ib.h
drivers/infiniband/hw/mlx5/mr.c

index fce8636..e4f8bee 100644 (file)
@@ -6390,7 +6390,7 @@ static int mlx5_ib_stage_init_init(struct mlx5_ib_dev *dev)
        spin_lock_init(&dev->reset_flow_resource_lock);
        xa_init(&dev->odp_mkeys);
        xa_init(&dev->sig_mrs);
-       spin_lock_init(&dev->mkey_lock);
+       atomic_set(&dev->mkey_var, 0);
 
        spin_lock_init(&dev->dm.lock);
        dev->dm.dev = mdev;
index 89a050e..3445402 100644 (file)
@@ -993,10 +993,7 @@ struct mlx5_ib_dev {
         */
        struct mlx5_ib_resources        devr;
 
-       /* protect mkey key part */
-       spinlock_t                      mkey_lock;
-       u8                              mkey_key;
-
+       atomic_t                        mkey_var;
        struct mlx5_mr_cache            cache;
        struct timer_list               delay_timer;
        /* Prevents soft lock on massive reg MRs */
index 8508af5..a1e6ab9 100644 (file)
@@ -54,12 +54,8 @@ static void
 assign_mkey_variant(struct mlx5_ib_dev *dev, struct mlx5_core_mkey *mkey,
                    u32 *in)
 {
+       u8 key = atomic_inc_return(&dev->mkey_var);
        void *mkc;
-       u8 key;
-
-       spin_lock_irq(&dev->mkey_lock);
-       key = dev->mkey_key++;
-       spin_unlock_irq(&dev->mkey_lock);
 
        mkc = MLX5_ADDR_OF(create_mkey_in, in, memory_key_mkey_entry);
        MLX5_SET(mkc, mkc, mkey_7_0, key);