* [PATCH net-next] sfc: handle VI shortage on ef100 by readjusting the channels
@ 2023-05-24 9:36 Pieter Jansen van Vuuren
2023-05-24 10:09 ` Simon Horman
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Pieter Jansen van Vuuren @ 2023-05-24 9:36 UTC (permalink / raw)
To: netdev, linux-net-drivers
Cc: davem, kuba, pabeni, edumazet, ecree.xilinx, habetsm.xilinx,
Pieter Jansen van Vuuren
When fewer VIs are allocated than what is allowed we can readjust
the channels by calling efx_mcdi_alloc_vis() again.
Signed-off-by: Pieter Jansen van Vuuren <pieter.jansen-van-vuuren@amd.com>
Reviewed-by: Martin Habets <habetsm.xilinx@gmail.com>
---
drivers/net/ethernet/sfc/ef100_netdev.c | 51 ++++++++++++++++++++++---
1 file changed, 45 insertions(+), 6 deletions(-)
diff --git a/drivers/net/ethernet/sfc/ef100_netdev.c b/drivers/net/ethernet/sfc/ef100_netdev.c
index d916877b5a9a..c201e001f3b8 100644
--- a/drivers/net/ethernet/sfc/ef100_netdev.c
+++ b/drivers/net/ethernet/sfc/ef100_netdev.c
@@ -40,19 +40,26 @@ static int ef100_alloc_vis(struct efx_nic *efx, unsigned int *allocated_vis)
unsigned int tx_vis = efx->n_tx_channels + efx->n_extra_tx_channels;
unsigned int rx_vis = efx->n_rx_channels;
unsigned int min_vis, max_vis;
+ int rc;
EFX_WARN_ON_PARANOID(efx->tx_queues_per_channel != 1);
tx_vis += efx->n_xdp_channels * efx->xdp_tx_per_channel;
max_vis = max(rx_vis, tx_vis);
- /* Currently don't handle resource starvation and only accept
- * our maximum needs and no less.
+ /* We require at least a single complete TX channel worth of queues. */
+ min_vis = efx->tx_queues_per_channel;
+
+ rc = efx_mcdi_alloc_vis(efx, min_vis, max_vis,
+ NULL, allocated_vis);
+
+ /* We retry allocating VIs by reallocating channels when we have not
+ * been able to allocate the maximum VIs.
*/
- min_vis = max_vis;
+ if (!rc && *allocated_vis < max_vis)
+ rc = -EAGAIN;
- return efx_mcdi_alloc_vis(efx, min_vis, max_vis,
- NULL, allocated_vis);
+ return rc;
}
static int ef100_remap_bar(struct efx_nic *efx, int max_vis)
@@ -133,9 +140,41 @@ static int ef100_net_open(struct net_device *net_dev)
goto fail;
rc = ef100_alloc_vis(efx, &allocated_vis);
- if (rc)
+ if (rc && rc != -EAGAIN)
goto fail;
+ /* Try one more time but with the maximum number of channels
+ * equal to the allocated VIs, which would more likely succeed.
+ */
+ if (rc == -EAGAIN) {
+ rc = efx_mcdi_free_vis(efx);
+ if (rc)
+ goto fail;
+
+ efx_remove_interrupts(efx);
+ efx->max_channels = allocated_vis;
+
+ rc = efx_probe_interrupts(efx);
+ if (rc)
+ goto fail;
+
+ rc = efx_set_channels(efx);
+ if (rc)
+ goto fail;
+
+ rc = ef100_alloc_vis(efx, &allocated_vis);
+ if (rc && rc != -EAGAIN)
+ goto fail;
+
+ /* It should be very unlikely that we failed here again, but in
+ * such a case we return ENOSPC.
+ */
+ if (rc == -EAGAIN) {
+ rc = -ENOSPC;
+ goto fail;
+ }
+ }
+
rc = efx_probe_channels(efx);
if (rc)
return rc;
--
2.25.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH net-next] sfc: handle VI shortage on ef100 by readjusting the channels
2023-05-24 9:36 [PATCH net-next] sfc: handle VI shortage on ef100 by readjusting the channels Pieter Jansen van Vuuren
@ 2023-05-24 10:09 ` Simon Horman
2023-05-24 13:52 ` Pieter Jansen van Vuuren
2023-05-25 14:51 ` Edward Cree
2023-05-26 9:20 ` patchwork-bot+netdevbpf
2 siblings, 1 reply; 7+ messages in thread
From: Simon Horman @ 2023-05-24 10:09 UTC (permalink / raw)
To: Pieter Jansen van Vuuren
Cc: netdev, linux-net-drivers, davem, kuba, pabeni, edumazet,
ecree.xilinx, habetsm.xilinx
On Wed, May 24, 2023 at 10:36:38AM +0100, Pieter Jansen van Vuuren wrote:
> When fewer VIs are allocated than what is allowed we can readjust
> the channels by calling efx_mcdi_alloc_vis() again.
>
> Signed-off-by: Pieter Jansen van Vuuren <pieter.jansen-van-vuuren@amd.com>
> Reviewed-by: Martin Habets <habetsm.xilinx@gmail.com>
Hi Pieter,
this patch looks good to me.
Reviewed-by: Simon Horman <simon.horman@corigine.com>
But during the review I noticed that Smatch flags some
problems in ef100_netdev.c that you may wish to address.
Please see below.
> ---
> drivers/net/ethernet/sfc/ef100_netdev.c | 51 ++++++++++++++++++++++---
> 1 file changed, 45 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/net/ethernet/sfc/ef100_netdev.c b/drivers/net/ethernet/sfc/ef100_netdev.c
> index d916877b5a9a..c201e001f3b8 100644
> --- a/drivers/net/ethernet/sfc/ef100_netdev.c
> +++ b/drivers/net/ethernet/sfc/ef100_netdev.c
...
> @@ -133,9 +140,41 @@ static int ef100_net_open(struct net_device *net_dev)
> goto fail;
>
> rc = ef100_alloc_vis(efx, &allocated_vis);
> - if (rc)
> + if (rc && rc != -EAGAIN)
> goto fail;
>
> + /* Try one more time but with the maximum number of channels
> + * equal to the allocated VIs, which would more likely succeed.
> + */
> + if (rc == -EAGAIN) {
> + rc = efx_mcdi_free_vis(efx);
> + if (rc)
> + goto fail;
> +
> + efx_remove_interrupts(efx);
> + efx->max_channels = allocated_vis;
> +
> + rc = efx_probe_interrupts(efx);
> + if (rc)
> + goto fail;
> +
> + rc = efx_set_channels(efx);
> + if (rc)
> + goto fail;
> +
> + rc = ef100_alloc_vis(efx, &allocated_vis);
> + if (rc && rc != -EAGAIN)
> + goto fail;
> +
> + /* It should be very unlikely that we failed here again, but in
> + * such a case we return ENOSPC.
> + */
> + if (rc == -EAGAIN) {
> + rc = -ENOSPC;
> + goto fail;
> + }
> + }
> +
> rc = efx_probe_channels(efx);
> if (rc)
> return rc;
Not strictly related to this patch, but Smatch says that on error this should
probably free some resources. So perhaps:
goto fail;
Also not strictly related this patch, but Smatch also noticed that
in ef100_probe_netdev net_dev does not seem to be freed on the error path.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH net-next] sfc: handle VI shortage on ef100 by readjusting the channels
2023-05-24 10:09 ` Simon Horman
@ 2023-05-24 13:52 ` Pieter Jansen van Vuuren
2023-05-24 14:25 ` Simon Horman
0 siblings, 1 reply; 7+ messages in thread
From: Pieter Jansen van Vuuren @ 2023-05-24 13:52 UTC (permalink / raw)
To: Simon Horman
Cc: netdev, linux-net-drivers, davem, kuba, pabeni, edumazet,
ecree.xilinx, habetsm.xilinx
On 24/05/2023 11:09, Simon Horman wrote:
> On Wed, May 24, 2023 at 10:36:38AM +0100, Pieter Jansen van Vuuren wrote:
>> When fewer VIs are allocated than what is allowed we can readjust
>> the channels by calling efx_mcdi_alloc_vis() again.
>>
>> Signed-off-by: Pieter Jansen van Vuuren <pieter.jansen-van-vuuren@amd.com>
>> Reviewed-by: Martin Habets <habetsm.xilinx@gmail.com>
>
> Hi Pieter,
>
> this patch looks good to me.
>
> Reviewed-by: Simon Horman <simon.horman@corigine.com>
>
> But during the review I noticed that Smatch flags some
> problems in ef100_netdev.c that you may wish to address.
> Please see below.
>
>> ---
>> drivers/net/ethernet/sfc/ef100_netdev.c | 51 ++++++++++++++++++++++---
>> 1 file changed, 45 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/net/ethernet/sfc/ef100_netdev.c b/drivers/net/ethernet/sfc/ef100_netdev.c
>> index d916877b5a9a..c201e001f3b8 100644
>> --- a/drivers/net/ethernet/sfc/ef100_netdev.c
>> +++ b/drivers/net/ethernet/sfc/ef100_netdev.c
>
...
>> + /* It should be very unlikely that we failed here again, but in
>> + * such a case we return ENOSPC.
>> + */
>> + if (rc == -EAGAIN) {
>> + rc = -ENOSPC;
>> + goto fail;
>> + }
>> + }
>> +
>> rc = efx_probe_channels(efx);
>> if (rc)
>> return rc;
>
> Not strictly related to this patch, but Smatch says that on error this should
> probably free some resources. So perhaps:
>
> goto fail;
>
> Also not strictly related this patch, but Smatch also noticed that
> in ef100_probe_netdev net_dev does not seem to be freed on the error path.
Thank you for the review Simon. Yes, I think this requires some attention, I think
this is one of a few that we need to look at. So it will likely become a separate
patch set addressing Smatch issues.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH net-next] sfc: handle VI shortage on ef100 by readjusting the channels
2023-05-24 13:52 ` Pieter Jansen van Vuuren
@ 2023-05-24 14:25 ` Simon Horman
0 siblings, 0 replies; 7+ messages in thread
From: Simon Horman @ 2023-05-24 14:25 UTC (permalink / raw)
To: Pieter Jansen van Vuuren
Cc: netdev, linux-net-drivers, davem, kuba, pabeni, edumazet,
ecree.xilinx, habetsm.xilinx
On Wed, May 24, 2023 at 02:52:48PM +0100, Pieter Jansen van Vuuren wrote:
>
>
> On 24/05/2023 11:09, Simon Horman wrote:
> > On Wed, May 24, 2023 at 10:36:38AM +0100, Pieter Jansen van Vuuren wrote:
> >> When fewer VIs are allocated than what is allowed we can readjust
> >> the channels by calling efx_mcdi_alloc_vis() again.
> >>
> >> Signed-off-by: Pieter Jansen van Vuuren <pieter.jansen-van-vuuren@amd.com>
> >> Reviewed-by: Martin Habets <habetsm.xilinx@gmail.com>
> >
> > Hi Pieter,
> >
> > this patch looks good to me.
> >
> > Reviewed-by: Simon Horman <simon.horman@corigine.com>
> >
> > But during the review I noticed that Smatch flags some
> > problems in ef100_netdev.c that you may wish to address.
> > Please see below.
> >
> >> ---
> >> drivers/net/ethernet/sfc/ef100_netdev.c | 51 ++++++++++++++++++++++---
> >> 1 file changed, 45 insertions(+), 6 deletions(-)
> >>
> >> diff --git a/drivers/net/ethernet/sfc/ef100_netdev.c b/drivers/net/ethernet/sfc/ef100_netdev.c
> >> index d916877b5a9a..c201e001f3b8 100644
> >> --- a/drivers/net/ethernet/sfc/ef100_netdev.c
> >> +++ b/drivers/net/ethernet/sfc/ef100_netdev.c
> >
> ...
> >> + /* It should be very unlikely that we failed here again, but in
> >> + * such a case we return ENOSPC.
> >> + */
> >> + if (rc == -EAGAIN) {
> >> + rc = -ENOSPC;
> >> + goto fail;
> >> + }
> >> + }
> >> +
> >> rc = efx_probe_channels(efx);
> >> if (rc)
> >> return rc;
> >
> > Not strictly related to this patch, but Smatch says that on error this should
> > probably free some resources. So perhaps:
> >
> > goto fail;
> >
> > Also not strictly related this patch, but Smatch also noticed that
> > in ef100_probe_netdev net_dev does not seem to be freed on the error path.
>
> Thank you for the review Simon. Yes, I think this requires some attention, I think
> this is one of a few that we need to look at. So it will likely become a separate
> patch set addressing Smatch issues.
Thanks Pieter,
I agree that these are separate issues and can
be handled outside the scope of this patch.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH net-next] sfc: handle VI shortage on ef100 by readjusting the channels
2023-05-24 9:36 [PATCH net-next] sfc: handle VI shortage on ef100 by readjusting the channels Pieter Jansen van Vuuren
2023-05-24 10:09 ` Simon Horman
@ 2023-05-25 14:51 ` Edward Cree
2023-05-30 10:21 ` Pieter Jansen van Vuuren
2023-05-26 9:20 ` patchwork-bot+netdevbpf
2 siblings, 1 reply; 7+ messages in thread
From: Edward Cree @ 2023-05-25 14:51 UTC (permalink / raw)
To: Pieter Jansen van Vuuren, netdev, linux-net-drivers
Cc: davem, kuba, pabeni, edumazet, habetsm.xilinx
On 24/05/2023 10:36, Pieter Jansen van Vuuren wrote:
> When fewer VIs are allocated than what is allowed we can readjust
> the channels by calling efx_mcdi_alloc_vis() again.
>
> Signed-off-by: Pieter Jansen van Vuuren <pieter.jansen-van-vuuren@amd.com>
> Reviewed-by: Martin Habets <habetsm.xilinx@gmail.com>
Reviewed-by: Edward Cree <ecree.xilinx@gmail.com>
though see below for one nit (fix in a follow-up?)
> ---
> drivers/net/ethernet/sfc/ef100_netdev.c | 51 ++++++++++++++++++++++---
> 1 file changed, 45 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/net/ethernet/sfc/ef100_netdev.c b/drivers/net/ethernet/sfc/ef100_netdev.c
> index d916877b5a9a..c201e001f3b8 100644
> --- a/drivers/net/ethernet/sfc/ef100_netdev.c
> +++ b/drivers/net/ethernet/sfc/ef100_netdev.c
> @@ -40,19 +40,26 @@ static int ef100_alloc_vis(struct efx_nic *efx, unsigned int *allocated_vis)
> unsigned int tx_vis = efx->n_tx_channels + efx->n_extra_tx_channels;
> unsigned int rx_vis = efx->n_rx_channels;
> unsigned int min_vis, max_vis;
> + int rc;
>
> EFX_WARN_ON_PARANOID(efx->tx_queues_per_channel != 1);
>
> tx_vis += efx->n_xdp_channels * efx->xdp_tx_per_channel;
>
> max_vis = max(rx_vis, tx_vis);
> - /* Currently don't handle resource starvation and only accept
> - * our maximum needs and no less.
> + /* We require at least a single complete TX channel worth of queues. */
> + min_vis = efx->tx_queues_per_channel;
> +
> + rc = efx_mcdi_alloc_vis(efx, min_vis, max_vis,
> + NULL, allocated_vis);
I'd like a check here like
if (rc == -EAGAIN)
rc = -ESOMETHINGELSE;
just to avoid confusion if the MC or MCDI machinery returns EAGAIN
for whatever reason.
Or perhaps better still, don't overload EAGAIN like this and instead
have this function return 1 in the "we succeeded but didn't get
max_vis" case (would need a comment above the function, documenting
this), since that's not a value that can happen in-band.
-ed
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH net-next] sfc: handle VI shortage on ef100 by readjusting the channels
2023-05-24 9:36 [PATCH net-next] sfc: handle VI shortage on ef100 by readjusting the channels Pieter Jansen van Vuuren
2023-05-24 10:09 ` Simon Horman
2023-05-25 14:51 ` Edward Cree
@ 2023-05-26 9:20 ` patchwork-bot+netdevbpf
2 siblings, 0 replies; 7+ messages in thread
From: patchwork-bot+netdevbpf @ 2023-05-26 9:20 UTC (permalink / raw)
To: Pieter Jansen van Vuuren
Cc: netdev, linux-net-drivers, davem, kuba, pabeni, edumazet,
ecree.xilinx, habetsm.xilinx
Hello:
This patch was applied to netdev/net-next.git (main)
by David S. Miller <davem@davemloft.net>:
On Wed, 24 May 2023 10:36:38 +0100 you wrote:
> When fewer VIs are allocated than what is allowed we can readjust
> the channels by calling efx_mcdi_alloc_vis() again.
>
> Signed-off-by: Pieter Jansen van Vuuren <pieter.jansen-van-vuuren@amd.com>
> Reviewed-by: Martin Habets <habetsm.xilinx@gmail.com>
> ---
> drivers/net/ethernet/sfc/ef100_netdev.c | 51 ++++++++++++++++++++++---
> 1 file changed, 45 insertions(+), 6 deletions(-)
Here is the summary with links:
- [net-next] sfc: handle VI shortage on ef100 by readjusting the channels
https://git.kernel.org/netdev/net-next/c/ca7d05007d0a
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH net-next] sfc: handle VI shortage on ef100 by readjusting the channels
2023-05-25 14:51 ` Edward Cree
@ 2023-05-30 10:21 ` Pieter Jansen van Vuuren
0 siblings, 0 replies; 7+ messages in thread
From: Pieter Jansen van Vuuren @ 2023-05-30 10:21 UTC (permalink / raw)
To: Edward Cree, netdev, linux-net-drivers
Cc: davem, kuba, pabeni, edumazet, habetsm.xilinx
On 25/05/2023 15:51, Edward Cree wrote:
> On 24/05/2023 10:36, Pieter Jansen van Vuuren wrote:
>> When fewer VIs are allocated than what is allowed we can readjust
>> the channels by calling efx_mcdi_alloc_vis() again.
>>
>> Signed-off-by: Pieter Jansen van Vuuren <pieter.jansen-van-vuuren@amd.com>
>> Reviewed-by: Martin Habets <habetsm.xilinx@gmail.com>
>
> Reviewed-by: Edward Cree <ecree.xilinx@gmail.com>
> though see below for one nit (fix in a follow-up?)
>
>> ---
>> drivers/net/ethernet/sfc/ef100_netdev.c | 51 ++++++++++++++++++++++---
>> 1 file changed, 45 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/net/ethernet/sfc/ef100_netdev.c b/drivers/net/ethernet/sfc/ef100_netdev.c
>> index d916877b5a9a..c201e001f3b8 100644
>> --- a/drivers/net/ethernet/sfc/ef100_netdev.c
>> +++ b/drivers/net/ethernet/sfc/ef100_netdev.c
>> @@ -40,19 +40,26 @@ static int ef100_alloc_vis(struct efx_nic *efx, unsigned int *allocated_vis)
>> unsigned int tx_vis = efx->n_tx_channels + efx->n_extra_tx_channels;
>> unsigned int rx_vis = efx->n_rx_channels;
>> unsigned int min_vis, max_vis;
>> + int rc;
>>
>> EFX_WARN_ON_PARANOID(efx->tx_queues_per_channel != 1);
>>
>> tx_vis += efx->n_xdp_channels * efx->xdp_tx_per_channel;
>>
>> max_vis = max(rx_vis, tx_vis);
>> - /* Currently don't handle resource starvation and only accept
>> - * our maximum needs and no less.
>> + /* We require at least a single complete TX channel worth of queues. */
>> + min_vis = efx->tx_queues_per_channel;
>> +
>> + rc = efx_mcdi_alloc_vis(efx, min_vis, max_vis,
>> + NULL, allocated_vis);
>
> I'd like a check here like
> if (rc == -EAGAIN)
> rc = -ESOMETHINGELSE;
> just to avoid confusion if the MC or MCDI machinery returns EAGAIN
> for whatever reason.
> Or perhaps better still, don't overload EAGAIN like this and instead
> have this function return 1 in the "we succeeded but didn't get
> max_vis" case (would need a comment above the function, documenting
> this), since that's not a value that can happen in-band.
>
> -ed
Thank you Ed. Yes, I will work with you on the follow-up and then avoid
overloading EAGAIN.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2023-05-30 10:22 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-05-24 9:36 [PATCH net-next] sfc: handle VI shortage on ef100 by readjusting the channels Pieter Jansen van Vuuren
2023-05-24 10:09 ` Simon Horman
2023-05-24 13:52 ` Pieter Jansen van Vuuren
2023-05-24 14:25 ` Simon Horman
2023-05-25 14:51 ` Edward Cree
2023-05-30 10:21 ` Pieter Jansen van Vuuren
2023-05-26 9:20 ` patchwork-bot+netdevbpf
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).