thunderbolt: tunnel: simplify allocation
Subsystems (2)
PATCH 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 as required by __counted_by.
Signed-off-by Rosen Penev <[email protected]>
--- drivers/thunderbolt/tunnel.c | 10 ++-------- drivers/thunderbolt/tunnel.h | 3 ++- 2 files changed, 4 insertions(+), 9 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 +2 -1
@@ -75,7 +75,6 @@ struct tb_tunnel {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,
Signature · 1 line
2.53.0
Quoted 10 lines · Rosen Penev
+++
b/drivers/thunderbolt/tunnel.hdrivers/thunderbolt/tunnel.h +0
-1@@ -75,7 +75,6 @@ struct tb_tunnel {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);
drivers/thunderbolt/tunnel.h struct tb_tunnel { · line 110
Quoted 5 lines
drivers/thunderbolt/tunnel.h +2
-0@@ -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);
Please move the kernel-doc to the right place as well.