/* 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)
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,