Skip to content

Commit 1c8f43f

Browse files
leitaokuba-moo
authored andcommitted
IB/hfi1: allocate dummy net_device dynamically
Embedding net_device into structures prohibits the usage of flexible arrays in the net_device structure. For more details, see the discussion at [1]. Un-embed the net_device from struct hfi1_netdev_rx by converting it into a pointer. Then use the leverage alloc_netdev() to allocate the net_device object at hfi1_alloc_rx(). [1] https://lore.kernel.org/all/20240229225910.79e224cf@kernel.org/ Acked-by: Dennis Dalessandro <dennis.dalessandro@cornelisnetworks.com> Signed-off-by: Breno Leitao <leitao@debian.org> Acked-by: Leon Romanovsky <leon@kernel.org> Link: https://lore.kernel.org/r/20240430162213.746492-1-leitao@debian.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1 parent 3d549c3 commit 1c8f43f

2 files changed

Lines changed: 8 additions & 3 deletions

File tree

drivers/infiniband/hw/hfi1/netdev.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ struct hfi1_netdev_rxq {
4949
* When 0 receive queues will be freed.
5050
*/
5151
struct hfi1_netdev_rx {
52-
struct net_device rx_napi;
52+
struct net_device *rx_napi;
5353
struct hfi1_devdata *dd;
5454
struct hfi1_netdev_rxq *rxq;
5555
int num_rx_q;

drivers/infiniband/hw/hfi1/netdev_rx.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ static int hfi1_netdev_rxq_init(struct hfi1_netdev_rx *rx)
188188
int i;
189189
int rc;
190190
struct hfi1_devdata *dd = rx->dd;
191-
struct net_device *dev = &rx->rx_napi;
191+
struct net_device *dev = rx->rx_napi;
192192

193193
rx->num_rx_q = dd->num_netdev_contexts;
194194
rx->rxq = kcalloc_node(rx->num_rx_q, sizeof(*rx->rxq),
@@ -360,7 +360,11 @@ int hfi1_alloc_rx(struct hfi1_devdata *dd)
360360
if (!rx)
361361
return -ENOMEM;
362362
rx->dd = dd;
363-
init_dummy_netdev(&rx->rx_napi);
363+
rx->rx_napi = alloc_netdev_dummy(0);
364+
if (!rx->rx_napi) {
365+
kfree(rx);
366+
return -ENOMEM;
367+
}
364368

365369
xa_init(&rx->dev_tbl);
366370
atomic_set(&rx->enabled, 0);
@@ -374,6 +378,7 @@ void hfi1_free_rx(struct hfi1_devdata *dd)
374378
{
375379
if (dd->netdev_rx) {
376380
dd_dev_info(dd, "hfi1 rx freed\n");
381+
free_netdev(dd->netdev_rx->rx_napi);
377382
kfree(dd->netdev_rx);
378383
dd->netdev_rx = NULL;
379384
}

0 commit comments

Comments
 (0)