RDMA/rxe: Optimize the mr pool struct
authorZhu Yanjun <yanjun.zhu@linux.dev>
Thu, 28 Apr 2022 04:10:28 +0000 (00:10 -0400)
committerJason Gunthorpe <jgg@nvidia.com>
Thu, 5 May 2022 01:02:58 +0000 (22:02 -0300)
Based on the commit c9f4c695835c ("RDMA/rxe: Reverse the sense of
RXE_POOL_NO_ALLOC"), only the mr pool uses the RXE_POOL_ALLOC, As such,
replace this flags with pool type to save memory.

Link: https://lore.kernel.org/r/20220428041028.1363139-1-yanjun.zhu@linux.dev
Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/sw/rxe/rxe_pool.c
drivers/infiniband/sw/rxe/rxe_pool.h

index 87066d0..8b1c4ff 100644 (file)
@@ -13,7 +13,6 @@ static const struct rxe_type_info {
        size_t size;
        size_t elem_offset;
        void (*cleanup)(struct rxe_pool_elem *elem);
-       enum rxe_pool_flags flags;
        u32 min_index;
        u32 max_index;
        u32 max_elem;
@@ -73,7 +72,6 @@ static const struct rxe_type_info {
                .size           = sizeof(struct rxe_mr),
                .elem_offset    = offsetof(struct rxe_mr, elem),
                .cleanup        = rxe_mr_cleanup,
-               .flags          = RXE_POOL_ALLOC,
                .min_index      = RXE_MIN_MR_INDEX,
                .max_index      = RXE_MAX_MR_INDEX,
                .max_elem       = RXE_MAX_MR_INDEX - RXE_MIN_MR_INDEX + 1,
@@ -101,7 +99,6 @@ void rxe_pool_init(struct rxe_dev *rxe, struct rxe_pool *pool,
        pool->max_elem          = info->max_elem;
        pool->elem_size         = ALIGN(info->size, RXE_POOL_ALIGN);
        pool->elem_offset       = info->elem_offset;
-       pool->flags             = info->flags;
        pool->cleanup           = info->cleanup;
 
        atomic_set(&pool->num_elem, 0);
@@ -122,7 +119,7 @@ void *rxe_alloc(struct rxe_pool *pool)
        void *obj;
        int err;
 
-       if (WARN_ON(!(pool->flags & RXE_POOL_ALLOC)))
+       if (WARN_ON(!(pool->type == RXE_TYPE_MR)))
                return NULL;
 
        if (atomic_inc_return(&pool->num_elem) > pool->max_elem)
@@ -156,7 +153,7 @@ int __rxe_add_to_pool(struct rxe_pool *pool, struct rxe_pool_elem *elem)
 {
        int err;
 
-       if (WARN_ON(pool->flags & RXE_POOL_ALLOC))
+       if (WARN_ON(pool->type == RXE_TYPE_MR))
                return -EINVAL;
 
        if (atomic_inc_return(&pool->num_elem) > pool->max_elem)
@@ -206,7 +203,7 @@ static void rxe_elem_release(struct kref *kref)
        if (pool->cleanup)
                pool->cleanup(elem);
 
-       if (pool->flags & RXE_POOL_ALLOC)
+       if (pool->type == RXE_TYPE_MR)
                kfree(elem->obj);
 
        atomic_dec(&pool->num_elem);
index 24bcc78..0860660 100644 (file)
@@ -7,10 +7,6 @@
 #ifndef RXE_POOL_H
 #define RXE_POOL_H
 
-enum rxe_pool_flags {
-       RXE_POOL_ALLOC          = BIT(1),
-};
-
 enum rxe_elem_type {
        RXE_TYPE_UC,
        RXE_TYPE_PD,
@@ -35,7 +31,6 @@ struct rxe_pool {
        struct rxe_dev          *rxe;
        const char              *name;
        void                    (*cleanup)(struct rxe_pool_elem *elem);
-       enum rxe_pool_flags     flags;
        enum rxe_elem_type      type;
 
        unsigned int            max_elem;