linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] IB/hfi1: allocate dummy net_device dynamically
@ 2024-03-13 10:33 Breno Leitao
  2024-03-13 10:42 ` Leon Romanovsky
  2024-03-15 16:12 ` Dennis Dalessandro
  0 siblings, 2 replies; 7+ messages in thread
From: Breno Leitao @ 2024-03-13 10:33 UTC (permalink / raw)
  To: Dennis Dalessandro, Jason Gunthorpe, Leon Romanovsky
  Cc: kuba, keescook, open list:HFI1 DRIVER, open list

struct net_device shouldn't be embedded into any structure, instead,
the owner should use the priv space to embed their state into net_device.

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/

Signed-off-by: Breno Leitao <leitao@debian.org>

----
PS: this diff needs d160c66cda0ac8614 ("net: Do not return value from
init_dummy_netdev()") in order to apply and build cleanly.
---
Changelog:

v2:
	* Free struct hfi1_netdev_rx allocation if alloc_netdev() fails
	* Pass zero as the private size for alloc_netdev().
	* Remove wrong reference for iwl in the comments
---
 drivers/infiniband/hw/hfi1/netdev.h    |  2 +-
 drivers/infiniband/hw/hfi1/netdev_rx.c | 10 ++++++++--
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/drivers/infiniband/hw/hfi1/netdev.h b/drivers/infiniband/hw/hfi1/netdev.h
index 8aa074670a9c..07c8f77c9181 100644
--- a/drivers/infiniband/hw/hfi1/netdev.h
+++ b/drivers/infiniband/hw/hfi1/netdev.h
@@ -49,7 +49,7 @@ struct hfi1_netdev_rxq {
  *		When 0 receive queues will be freed.
  */
 struct hfi1_netdev_rx {
-	struct net_device rx_napi;
+	struct net_device *rx_napi;
 	struct hfi1_devdata *dd;
 	struct hfi1_netdev_rxq *rxq;
 	int num_rx_q;
diff --git a/drivers/infiniband/hw/hfi1/netdev_rx.c b/drivers/infiniband/hw/hfi1/netdev_rx.c
index 720d4c85c9c9..cd6e78e257ef 100644
--- a/drivers/infiniband/hw/hfi1/netdev_rx.c
+++ b/drivers/infiniband/hw/hfi1/netdev_rx.c
@@ -188,7 +188,7 @@ static int hfi1_netdev_rxq_init(struct hfi1_netdev_rx *rx)
 	int i;
 	int rc;
 	struct hfi1_devdata *dd = rx->dd;
-	struct net_device *dev = &rx->rx_napi;
+	struct net_device *dev = rx->rx_napi;
 
 	rx->num_rx_q = dd->num_netdev_contexts;
 	rx->rxq = kcalloc_node(rx->num_rx_q, sizeof(*rx->rxq),
@@ -360,7 +360,12 @@ int hfi1_alloc_rx(struct hfi1_devdata *dd)
 	if (!rx)
 		return -ENOMEM;
 	rx->dd = dd;
-	init_dummy_netdev(&rx->rx_napi);
+	rx->rx_napi = alloc_netdev(0, "dummy", NET_NAME_UNKNOWN,
+				   init_dummy_netdev);
+	if (!rx->rx_napi) {
+		kfree(rx);
+		return -ENOMEM;
+	}
 
 	xa_init(&rx->dev_tbl);
 	atomic_set(&rx->enabled, 0);
@@ -374,6 +379,7 @@ void hfi1_free_rx(struct hfi1_devdata *dd)
 {
 	if (dd->netdev_rx) {
 		dd_dev_info(dd, "hfi1 rx freed\n");
+		free_netdev(dd->netdev_rx->rx_napi);
 		kfree(dd->netdev_rx);
 		dd->netdev_rx = NULL;
 	}
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH v2] IB/hfi1: allocate dummy net_device dynamically
  2024-03-13 10:33 [PATCH v2] IB/hfi1: allocate dummy net_device dynamically Breno Leitao
@ 2024-03-13 10:42 ` Leon Romanovsky
  2024-03-13 13:55   ` Jakub Kicinski
  2024-03-15 16:12 ` Dennis Dalessandro
  1 sibling, 1 reply; 7+ messages in thread
From: Leon Romanovsky @ 2024-03-13 10:42 UTC (permalink / raw)
  To: Breno Leitao
  Cc: Dennis Dalessandro, Jason Gunthorpe, kuba, keescook,
	open list:HFI1 DRIVER, open list

On Wed, Mar 13, 2024 at 03:33:10AM -0700, Breno Leitao wrote:
> struct net_device shouldn't be embedded into any structure, instead,
> the owner should use the priv space to embed their state into net_device.

"shouldn't" is a strong word, given the fact that original init_dummy_netdev()
was designed to be used in such way.

> 
> 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/
> 
> Signed-off-by: Breno Leitao <leitao@debian.org>
> 
> ----
> PS: this diff needs d160c66cda0ac8614 ("net: Do not return value from
> init_dummy_netdev()") in order to apply and build cleanly.

We are in merge window now, so if Dennis approves, I will apply it after the merge window

Thanks

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v2] IB/hfi1: allocate dummy net_device dynamically
  2024-03-13 10:42 ` Leon Romanovsky
@ 2024-03-13 13:55   ` Jakub Kicinski
  2024-03-13 17:16     ` Leon Romanovsky
  0 siblings, 1 reply; 7+ messages in thread
From: Jakub Kicinski @ 2024-03-13 13:55 UTC (permalink / raw)
  To: Leon Romanovsky
  Cc: Breno Leitao, Dennis Dalessandro, Jason Gunthorpe, keescook,
	open list:HFI1 DRIVER, open list

On Wed, 13 Mar 2024 12:42:52 +0200 Leon Romanovsky wrote:
> > PS: this diff needs d160c66cda0ac8614 ("net: Do not return value from
> > init_dummy_netdev()") in order to apply and build cleanly.  
> 
> We are in merge window now, so if Dennis approves, I will apply it
> after the merge window

Can we do a shared branch? We don't want to wait full release cycle
for a single driver outside of netdev.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v2] IB/hfi1: allocate dummy net_device dynamically
  2024-03-13 13:55   ` Jakub Kicinski
@ 2024-03-13 17:16     ` Leon Romanovsky
  0 siblings, 0 replies; 7+ messages in thread
From: Leon Romanovsky @ 2024-03-13 17:16 UTC (permalink / raw)
  To: Jakub Kicinski
  Cc: Breno Leitao, Dennis Dalessandro, Jason Gunthorpe, keescook,
	open list:HFI1 DRIVER, open list

On Wed, Mar 13, 2024 at 06:55:26AM -0700, Jakub Kicinski wrote:
> On Wed, 13 Mar 2024 12:42:52 +0200 Leon Romanovsky wrote:
> > > PS: this diff needs d160c66cda0ac8614 ("net: Do not return value from
> > > init_dummy_netdev()") in order to apply and build cleanly.  
> > 
> > We are in merge window now, so if Dennis approves, I will apply it
> > after the merge window
> 
> Can we do a shared branch? We don't want to wait full release cycle
> for a single driver outside of netdev.

No problem, I will create a branch based on -rc1 for it.

Thanks

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v2] IB/hfi1: allocate dummy net_device dynamically
  2024-03-13 10:33 [PATCH v2] IB/hfi1: allocate dummy net_device dynamically Breno Leitao
  2024-03-13 10:42 ` Leon Romanovsky
@ 2024-03-15 16:12 ` Dennis Dalessandro
  2024-03-15 17:51   ` Breno Leitao
  1 sibling, 1 reply; 7+ messages in thread
From: Dennis Dalessandro @ 2024-03-15 16:12 UTC (permalink / raw)
  To: Breno Leitao, Jason Gunthorpe, Leon Romanovsky
  Cc: kuba, keescook, open list:HFI1 DRIVER, open list

On 3/13/24 6:33 AM, Breno Leitao wrote:
> struct net_device shouldn't be embedded into any structure, instead,
> the owner should use the priv space to embed their state into net_device.
> 
> 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/
> 
> Signed-off-by: Breno Leitao <leitao@debian.org>
> 
> ----
> PS: this diff needs d160c66cda0ac8614 ("net: Do not return value from
> init_dummy_netdev()") in order to apply and build cleanly.
> ---
> Changelog:
> 
> v2:
> 	* Free struct hfi1_netdev_rx allocation if alloc_netdev() fails
> 	* Pass zero as the private size for alloc_netdev().
> 	* Remove wrong reference for iwl in the comments
> ---

Very lightly tested, but interface came up and I could send traffic. Code seems
OK too.

I'd prefer to at least remove the first sentence of the commit message. It makes
it sound like hfi1 was doing something incorrectly when it was using the
interface as it was designed. Instead it should read more like this is an
enhancement.


Regardless, we can call this one acked.


Acked-by: Dennis Dalessandro <dennis.dalessandro@cornelisnetworks.com>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v2] IB/hfi1: allocate dummy net_device dynamically
  2024-03-15 16:12 ` Dennis Dalessandro
@ 2024-03-15 17:51   ` Breno Leitao
  2024-03-17  8:41     ` Leon Romanovsky
  0 siblings, 1 reply; 7+ messages in thread
From: Breno Leitao @ 2024-03-15 17:51 UTC (permalink / raw)
  To: Dennis Dalessandro
  Cc: Jason Gunthorpe, Leon Romanovsky, kuba, keescook,
	open list:HFI1 DRIVER, open list

On Fri, Mar 15, 2024 at 12:12:15PM -0400, Dennis Dalessandro wrote:
> On 3/13/24 6:33 AM, Breno Leitao wrote:
> > struct net_device shouldn't be embedded into any structure, instead,
> > the owner should use the priv space to embed their state into net_device.
> > 
> > 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/
> > 
> > Signed-off-by: Breno Leitao <leitao@debian.org>
> > 
> > ----
> > PS: this diff needs d160c66cda0ac8614 ("net: Do not return value from
> > init_dummy_netdev()") in order to apply and build cleanly.
> > ---
> > Changelog:
> > 
> > v2:
> > 	* Free struct hfi1_netdev_rx allocation if alloc_netdev() fails
> > 	* Pass zero as the private size for alloc_netdev().
> > 	* Remove wrong reference for iwl in the comments
> > ---
> 
> Very lightly tested, but interface came up and I could send traffic. Code seems
> OK too.
> 
> I'd prefer to at least remove the first sentence of the commit message.

That is OK for me. Would you like to remove it when merging it, or,
would you prefer me to resend it?

Thanks

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v2] IB/hfi1: allocate dummy net_device dynamically
  2024-03-15 17:51   ` Breno Leitao
@ 2024-03-17  8:41     ` Leon Romanovsky
  0 siblings, 0 replies; 7+ messages in thread
From: Leon Romanovsky @ 2024-03-17  8:41 UTC (permalink / raw)
  To: Breno Leitao
  Cc: Dennis Dalessandro, Jason Gunthorpe, kuba, keescook,
	open list:HFI1 DRIVER, open list

On Fri, Mar 15, 2024 at 10:51:46AM -0700, Breno Leitao wrote:
> On Fri, Mar 15, 2024 at 12:12:15PM -0400, Dennis Dalessandro wrote:
> > On 3/13/24 6:33 AM, Breno Leitao wrote:
> > > struct net_device shouldn't be embedded into any structure, instead,
> > > the owner should use the priv space to embed their state into net_device.
> > > 
> > > 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/
> > > 
> > > Signed-off-by: Breno Leitao <leitao@debian.org>
> > > 
> > > ----
> > > PS: this diff needs d160c66cda0ac8614 ("net: Do not return value from
> > > init_dummy_netdev()") in order to apply and build cleanly.
> > > ---
> > > Changelog:
> > > 
> > > v2:
> > > 	* Free struct hfi1_netdev_rx allocation if alloc_netdev() fails
> > > 	* Pass zero as the private size for alloc_netdev().
> > > 	* Remove wrong reference for iwl in the comments
> > > ---
> > 
> > Very lightly tested, but interface came up and I could send traffic. Code seems
> > OK too.
> > 
> > I'd prefer to at least remove the first sentence of the commit message.
> 
> That is OK for me. Would you like to remove it when merging it, or,
> would you prefer me to resend it?

Please resend together with Dennis's Acked-by.

Thanks

> 
> Thanks

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2024-03-17  8:41 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-03-13 10:33 [PATCH v2] IB/hfi1: allocate dummy net_device dynamically Breno Leitao
2024-03-13 10:42 ` Leon Romanovsky
2024-03-13 13:55   ` Jakub Kicinski
2024-03-13 17:16     ` Leon Romanovsky
2024-03-15 16:12 ` Dennis Dalessandro
2024-03-15 17:51   ` Breno Leitao
2024-03-17  8:41     ` Leon Romanovsky

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).