OSDN Git Service

RDMA/core: Simplify restrack interface
authorLeon Romanovsky <leonro@mellanox.com>
Wed, 30 Jan 2019 10:48:58 +0000 (12:48 +0200)
committerJason Gunthorpe <jgg@mellanox.com>
Thu, 31 Jan 2019 04:15:47 +0000 (21:15 -0700)
In the current implementation, we have one restrack root per-device and
all users are simply providing it directly. Let's simplify the interface
and have callers provide the ib_device and internally access the
restrack_root.

Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/core/device.c
drivers/infiniband/core/nldev.c
drivers/infiniband/core/restrack.c
include/rdma/restrack.h

index 9d2e108..919e94f 100644 (file)
@@ -287,7 +287,7 @@ struct ib_device *_ib_alloc_device(size_t size)
        if (!device)
                return NULL;
 
-       rdma_restrack_init(&device->res);
+       rdma_restrack_init(device);
 
        device->dev.class = &ib_class;
        device_initialize(&device->dev);
@@ -315,7 +315,7 @@ void ib_dealloc_device(struct ib_device *device)
        WARN_ON(!list_empty(&device->client_data_list));
        WARN_ON(device->reg_state != IB_DEV_UNREGISTERED &&
                device->reg_state != IB_DEV_UNINITIALIZED);
-       rdma_restrack_clean(&device->res);
+       rdma_restrack_clean(device);
        put_device(&device->dev);
 }
 EXPORT_SYMBOL(ib_dealloc_device);
index 1742ff4..ee98fc9 100644 (file)
@@ -314,7 +314,6 @@ static int fill_res_info(struct sk_buff *msg, struct ib_device *device)
                [RDMA_RESTRACK_CTX] = "ctx",
        };
 
-       struct rdma_restrack_root *res = &device->res;
        struct nlattr *table_attr;
        int ret, i, curr;
 
@@ -328,7 +327,8 @@ static int fill_res_info(struct sk_buff *msg, struct ib_device *device)
        for (i = 0; i < RDMA_RESTRACK_MAX; i++) {
                if (!names[i])
                        continue;
-               curr = rdma_restrack_count(res, i, task_active_pid_ns(current));
+               curr = rdma_restrack_count(device, i,
+                                          task_active_pid_ns(current));
                ret = fill_res_info_entry(msg, names[i], curr);
                if (ret)
                        goto err;
index 46a5c55..0ade3da 100644 (file)
@@ -18,8 +18,14 @@ static int fill_res_noop(struct sk_buff *msg,
        return 0;
 }
 
-void rdma_restrack_init(struct rdma_restrack_root *res)
+/**
+ * rdma_restrack_init() - initialize resource tracking
+ * @dev:  IB device
+ */
+void rdma_restrack_init(struct ib_device *dev)
 {
+       struct rdma_restrack_root *res = &dev->res;
+
        init_rwsem(&res->rwsem);
        res->fill_res_entry = fill_res_noop;
 }
@@ -38,11 +44,15 @@ static const char *type2str(enum rdma_restrack_type type)
        return names[type];
 };
 
-void rdma_restrack_clean(struct rdma_restrack_root *res)
+/**
+ * rdma_restrack_clean() - clean resource tracking
+ * @dev:  IB device
+ */
+void rdma_restrack_clean(struct ib_device *dev)
 {
+       struct rdma_restrack_root *res = &dev->res;
        struct rdma_restrack_entry *e;
        char buf[TASK_COMM_LEN];
-       struct ib_device *dev;
        const char *owner;
        int bkt;
 
@@ -72,10 +82,16 @@ void rdma_restrack_clean(struct rdma_restrack_root *res)
        pr_err("restrack: %s", CUT_HERE);
 }
 
-int rdma_restrack_count(struct rdma_restrack_root *res,
-                       enum rdma_restrack_type type,
+/**
+ * rdma_restrack_count() - the current usage of specific object
+ * @dev:  IB device
+ * @type: actual type of object to operate
+ * @ns:   PID namespace
+ */
+int rdma_restrack_count(struct ib_device *dev, enum rdma_restrack_type type,
                        struct pid_namespace *ns)
 {
+       struct rdma_restrack_root *res = &dev->res;
        struct rdma_restrack_entry *e;
        u32 cnt = 0;
 
index 8f179be..f756fc4 100644 (file)
@@ -49,6 +49,7 @@ enum rdma_restrack_type {
 };
 
 #define RDMA_RESTRACK_HASH_BITS        8
+struct ib_device;
 struct rdma_restrack_entry;
 
 /**
@@ -122,25 +123,9 @@ struct rdma_restrack_entry {
        bool                    user;
 };
 
-/**
- * rdma_restrack_init() - initialize resource tracking
- * @res:  resource tracking root
- */
-void rdma_restrack_init(struct rdma_restrack_root *res);
-
-/**
- * rdma_restrack_clean() - clean resource tracking
- * @res:  resource tracking root
- */
-void rdma_restrack_clean(struct rdma_restrack_root *res);
-
-/**
- * rdma_restrack_count() - the current usage of specific object
- * @res:  resource entry
- * @type: actual type of object to operate
- * @ns:   PID namespace
- */
-int rdma_restrack_count(struct rdma_restrack_root *res,
+void rdma_restrack_init(struct ib_device *dev);
+void rdma_restrack_clean(struct ib_device *dev);
+int rdma_restrack_count(struct ib_device *dev,
                        enum rdma_restrack_type type,
                        struct pid_namespace *ns);