struct brcmf_flowring *flow;
u32 i;
- flow = kzalloc_obj(*flow);
+ flow = kzalloc_flex(*flow, rings, nrofrings);
if (flow) {
- flow->dev = dev;
flow->nrofrings = nrofrings;
+ flow->dev = dev;
spin_lock_init(&flow->block_lock);
for (i = 0; i < ARRAY_SIZE(flow->addr_mode); i++)
flow->addr_mode[i] = ADDR_INDIRECT;
for (i = 0; i < ARRAY_SIZE(flow->hash); i++)
flow->hash[i].ifidx = BRCMF_FLOWRING_INVALID_IFIDX;
- flow->rings = kzalloc_objs(*flow->rings, nrofrings);
- if (!flow->rings) {
- kfree(flow);
- flow = NULL;
- }
}
return flow;
search = search->next;
kfree(remove);
}
- kfree(flow->rings);
kfree(flow);
}
struct brcmf_flowring {
struct device *dev;
struct brcmf_flowring_hash hash[BRCMF_FLOWRING_HASHSIZE];
- struct brcmf_flowring_ring **rings;
spinlock_t block_lock;
enum proto_addr_mode addr_mode[BRCMF_MAX_IFS];
u16 nrofrings;
bool tdls_active;
struct brcmf_flowring_tdls_entry *tdls_entry;
+ struct brcmf_flowring_ring *rings[] __counted_by(nrofrings);
};