Commit cef2842c authored by Rosen Penev's avatar Rosen Penev Committed by Leon Romanovsky
Browse files

RDMA/core: Use kzalloc_flex for GID table



Simplifies allocations by using a flexible array member in struct ib_gid_table.

Add __counted_by to get extra runtime analysis.

Signed-off-by: default avatarRosen Penev <rosenp@gmail.com>
Link: https://patch.msgid.link/20260327030124.8385-1-rosenp@gmail.com


Signed-off-by: default avatarLeon Romanovsky <leon@kernel.org>
parent dbeb256e
Loading
Loading
Loading
Loading
+3 −11
Original line number Diff line number Diff line
@@ -116,9 +116,9 @@ struct ib_gid_table {
	/* rwlock protects data_vec[ix]->state and entry pointer.
	 */
	rwlock_t			rwlock;
	struct ib_gid_table_entry	**data_vec;
	/* bit field, each bit indicates the index of default GID */
	u32				default_gid_indices;
	struct ib_gid_table_entry	*data_vec[] __counted_by(sz);
};

static void dispatch_gid_change_event(struct ib_device *ib_dev, u32 port)
@@ -770,24 +770,16 @@ const struct ib_gid_attr *rdma_find_gid_by_filter(

static struct ib_gid_table *alloc_gid_table(int sz)
{
	struct ib_gid_table *table = kzalloc_obj(*table);
	struct ib_gid_table *table = kzalloc_flex(*table, data_vec, sz);

	if (!table)
		return NULL;

	table->data_vec = kzalloc_objs(*table->data_vec, sz);
	if (!table->data_vec)
		goto err_free_table;
	table->sz = sz;

	mutex_init(&table->lock);

	table->sz = sz;
	rwlock_init(&table->rwlock);
	return table;

err_free_table:
	kfree(table);
	return NULL;
}

static void release_gid_table(struct ib_device *device,