[PATCH rdma-next 1/3] RDMA/core: Share driver structure size with core

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Leon Romanovsky <leonro@xxxxxxxxxxxx>

Add new macros to be used in drivers while registering ops structure
and IB/core while calling allocation routines, so drivers won't need
to perform kzalloc/kfree in their paths.

The change in allocation stage allows us to initialize common fields
prior to calling to drivers (e.g. restrack).

Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxxxx>
---
 drivers/infiniband/core/device.c | 2 ++
 include/rdma/ib_verbs.h          | 8 ++++++++
 2 files changed, 10 insertions(+)

diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c
index d13491b416dc..c332398376fc 100644
--- a/drivers/infiniband/core/device.c
+++ b/drivers/infiniband/core/device.c
@@ -1221,6 +1221,8 @@ void ib_set_device_ops(struct ib_device *dev, const struct ib_device_ops *ops)
 				(ptr)->name = ops->name;                       \
 	} while (0)

+#define SET_OBJ_SIZE(ptr, name) SET_DEVICE_OP(ptr, size_##name)
+
 	SET_DEVICE_OP(dev_ops, add_gid);
 	SET_DEVICE_OP(dev_ops, advise_mr);
 	SET_DEVICE_OP(dev_ops, alloc_dm);
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
index d54c87640f89..a1f097fa33f2 100644
--- a/include/rdma/ib_verbs.h
+++ b/include/rdma/ib_verbs.h
@@ -2264,6 +2264,14 @@ struct ib_counters_read_attr {

 struct uverbs_attr_bundle;

+#define INIT_RDMA_DRIVER_SIZE(ib_struct, drv_struct, member)                   \
+	.size_##ib_struct =                                                    \
+		(sizeof(struct drv_struct) +                                   \
+		 BUILD_BUG_ON_ZERO(offsetof(struct drv_struct, member)))
+
+#define RDMA_DRIVER_SIZE(_ib_dev, ib_struct) (_ib_dev->ops.size_##ib_struct)
+#define DECLARE_RDMA_DRIVER_SIZE(ib_struct) size_t size_##ib_struct
+
 /**
  * struct ib_device_ops - InfiniBand device operations
  * This structure defines all the InfiniBand device operations, providers will
--
2.19.1




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux