thunderbolt: tunnel: simplify allocation
Subsystems (2)
PATCH v2 1/1 thunderbolt: tunnel: simplify allocation
Use a flexible array member and kzalloc_flex to combine allocations.
Add __counted_by for extra runtime analysis. Move counting variable assignment after allocation. kzalloc_flex with GCC >= 15 does this automatically.
Signed-off-by Rosen Penev <[email protected]>
---
v2: move kernel-doc and reword slightly.
drivers/thunderbolt/tunnel.c | 10 ++-------- drivers/thunderbolt/tunnel.h | 5 +++-- 2 files changed, 5 insertions(+), 10 deletions(-)
drivers/thunderbolt/tunnel.c +2 -8
@@ -180,19 +180,14 @@ static struct tb_tunnel *tb_tunnel_alloc(struct tb *tb, size_t npaths, {struct tb_tunnel *tunnel; - tunnel =kzalloc_obj (*tunnel); + tunnel =kzalloc_flex (*tunnel, paths, npaths);if (!tunnel)return NULL ; - tunnel->paths =kzalloc_objs (tunnel->paths[0 ], npaths); -if (!tunnel->paths) { -kfree (tunnel); -return NULL ; - } + tunnel->npaths = npaths;INIT_LIST_HEAD (&tunnel->list); tunnel->tb = tb; - tunnel->npaths = npaths; tunnel->type = type;kref_init (&tunnel->kref);
@@ -219,7 +214,6 @@ static void tb_tunnel_destroy(struct kref *kref)tb_path_free (tunnel->paths[i]); } -kfree (tunnel->paths);kfree (tunnel); }
drivers/thunderbolt/tunnel.h +3 -2
@@ -37,7 +37,6 @@ enum tb_tunnel_state {* @src_port: Source port of the tunnel * @dst_port: Destination port of the tunnel. For discovered incomplete * tunnels may be %NULL or null adapter port instead. -* @paths: All paths required by the tunnel * @npaths: Number of paths in @paths * @pre_activate: Optional tunnel specific initialization called before * activation. Can touch hardware.
@@ -69,13 +68,13 @@ enum tb_tunnel_state {* @dprx_work: Worker that is scheduled to poll completion of DPRX capabilities read * @callback: Optional callback called when DP tunnel is fully activated * @callback_data: Optional data for @callback +* @paths: All paths required by the tunnel */ struct tb_tunnel {struct kref kref;struct tb *tb;struct tb_port *src_port;struct tb_port *dst_port; -struct tb_path **paths;size_t npaths;int (*pre_activate)(struct tb_tunnel *tunnel);int (*activate)(struct tb_tunnel *tunnel,bool activate);
@@ -107,6 +106,8 @@ struct tb_tunnel {struct delayed_work dprx_work;void (*callback)(struct tb_tunnel *tunnel,void *data);void *callback_data; + + struct tb_path *paths[] __counted_by(npaths); }; struct tb_tunnel *tb_tunnel_discover_pci(struct tb *tb, struct tb_port *down,
--
2.53.0
Mika Westerberg
AppliedQuoted 7 lines · Rosen Penev
Use a flexible array member and
kzalloc_flexto combine allocations.Add
__counted_byfor extra runtime analysis. Move counting variable assignment after allocation.kzalloc_flexwith GCC >= 15 does this automatically.Signed-off-by Rosen Penev <[email protected]>
Applied to thunderbolt.git/next, thanks!