mirror of
https://github.com/torvalds/linux.git
synced 2026-09-24 06:24:02 +02:00
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: Rosen Penev <rosenp@gmail.com> Link: https://patch.msgid.link/20260327030124.8385-1-rosenp@gmail.com Signed-off-by: Leon Romanovsky <leon@kernel.org>
This commit is contained in:
parent
dbeb256e8d
commit
cef2842c92
|
|
@ -116,9 +116,9 @@ struct ib_gid_table {
|
||||||
/* rwlock protects data_vec[ix]->state and entry pointer.
|
/* rwlock protects data_vec[ix]->state and entry pointer.
|
||||||
*/
|
*/
|
||||||
rwlock_t rwlock;
|
rwlock_t rwlock;
|
||||||
struct ib_gid_table_entry **data_vec;
|
|
||||||
/* bit field, each bit indicates the index of default GID */
|
/* bit field, each bit indicates the index of default GID */
|
||||||
u32 default_gid_indices;
|
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)
|
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)
|
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)
|
if (!table)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
table->data_vec = kzalloc_objs(*table->data_vec, sz);
|
table->sz = sz;
|
||||||
if (!table->data_vec)
|
|
||||||
goto err_free_table;
|
|
||||||
|
|
||||||
mutex_init(&table->lock);
|
mutex_init(&table->lock);
|
||||||
|
|
||||||
table->sz = sz;
|
|
||||||
rwlock_init(&table->rwlock);
|
rwlock_init(&table->rwlock);
|
||||||
return table;
|
return table;
|
||||||
|
|
||||||
err_free_table:
|
|
||||||
kfree(table);
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void release_gid_table(struct ib_device *device,
|
static void release_gid_table(struct ib_device *device,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user