diff mbox series

[net] bnxt_en: use irq_update_affinity_hint()

Message ID 20241106180811.385175-1-mheib@redhat.com (mailing list archive)
State Accepted
Commit fcf42409c6e15e47186de8bb051176aaf92c597a
Delegated to: Netdev Maintainers
Headers show
Series [net] bnxt_en: use irq_update_affinity_hint() | expand

Checks

Context Check Description
netdev/series_format success Single patches do not need cover letters
netdev/tree_selection success Clearly marked for net
netdev/ynl success Generated files up to date; no warnings/errors; no diff in generated;
netdev/fixes_present fail Series targets non-next tree, but doesn't contain any Fixes tags
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit success Errors and warnings before: 3 this patch: 3
netdev/build_tools success No tools touched, skip
netdev/cc_maintainers warning 4 maintainers not CCed: andrew+netdev@lunn.ch pabeni@redhat.com edumazet@google.com kuba@kernel.org
netdev/build_clang success Errors and warnings before: 3 this patch: 3
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/deprecated_api success None detected
netdev/check_selftest success No net selftest shell script
netdev/verify_fixes success No Fixes tag
netdev/build_allmodconfig_warn success Errors and warnings before: 4 this patch: 4
netdev/checkpatch warning WARNING: line length of 82 exceeds 80 columns
netdev/build_clang_rust success No Rust files in patch. Skipping build
netdev/kdoc success Errors and warnings before: 2 this patch: 2
netdev/source_inline success Was 0 now: 0
netdev/contest success net-next-2024-11-07--12-00 (tests: 787)

Commit Message

Mohammad Heib Nov. 6, 2024, 6:08 p.m. UTC
irq_set_affinity_hint() is deprecated, Use irq_update_affinity_hint()
instead. This removes the side-effect of actually applying the affinity.

The driver does not really need to worry about spreading its IRQs across
CPUs. The core code already takes care of that. when the driver applies the
affinities by itself, it breaks the users' expectations:

 1. The user configures irqbalance with IRQBALANCE_BANNED_CPULIST in
    order to prevent IRQs from being moved to certain CPUs that run a
    real-time workload.

 2. bnxt_en device reopening will resets the affinity
    in bnxt_open().

 3. bnxt_en has no idea about irqbalance's config, so it may move an IRQ to
    a banned CPU. The real-time workload suffers unacceptable latency.

Signed-off-by: Mohammad Heib <mheib@redhat.com>
---
 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

Comments

Andy Gospodarek Nov. 6, 2024, 11:24 p.m. UTC | #1
On Wed, Nov 06, 2024 at 08:08:11PM +0200, Mohammad Heib wrote:
> irq_set_affinity_hint() is deprecated, Use irq_update_affinity_hint()
> instead. This removes the side-effect of actually applying the affinity.
> 
> The driver does not really need to worry about spreading its IRQs across
> CPUs. The core code already takes care of that. when the driver applies the
> affinities by itself, it breaks the users' expectations:
> 
>  1. The user configures irqbalance with IRQBALANCE_BANNED_CPULIST in
>     order to prevent IRQs from being moved to certain CPUs that run a
>     real-time workload.
> 
>  2. bnxt_en device reopening will resets the affinity
>     in bnxt_open().
> 
>  3. bnxt_en has no idea about irqbalance's config, so it may move an IRQ to
>     a banned CPU. The real-time workload suffers unacceptable latency.
> 

Thanks for the patch.  This seems inline with what have been done in other
drivers.

> Signed-off-by: Mohammad Heib <mheib@redhat.com>
Reviewed-by: Andy Gospodarek <gospo@broadcom.com>

> ---
>  drivers/net/ethernet/broadcom/bnxt/bnxt.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
> index 99d025b69079..cd82f93b20a1 100644
> --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
> +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
> @@ -10885,7 +10885,7 @@ static void bnxt_free_irq(struct bnxt *bp)
>  		irq = &bp->irq_tbl[map_idx];
>  		if (irq->requested) {
>  			if (irq->have_cpumask) {
> -				irq_set_affinity_hint(irq->vector, NULL);
> +				irq_update_affinity_hint(irq->vector, NULL);
>  				free_cpumask_var(irq->cpu_mask);
>  				irq->have_cpumask = 0;
>  			}
> @@ -10940,10 +10940,10 @@ static int bnxt_request_irq(struct bnxt *bp)
>  			irq->have_cpumask = 1;
>  			cpumask_set_cpu(cpumask_local_spread(i, numa_node),
>  					irq->cpu_mask);
> -			rc = irq_set_affinity_hint(irq->vector, irq->cpu_mask);
> +			rc = irq_update_affinity_hint(irq->vector, irq->cpu_mask);
>  			if (rc) {
>  				netdev_warn(bp->dev,
> -					    "Set affinity failed, IRQ = %d\n",
> +					    "Update affinity hint failed, IRQ = %d\n",
>  					    irq->vector);
>  				break;
>  			}
> -- 
> 2.34.3
>
Somnath Kotur Nov. 7, 2024, 3:42 a.m. UTC | #2
On Thu, Nov 7, 2024 at 4:54 AM Andy Gospodarek
<andrew.gospodarek@broadcom.com> wrote:
>
> On Wed, Nov 06, 2024 at 08:08:11PM +0200, Mohammad Heib wrote:
> > irq_set_affinity_hint() is deprecated, Use irq_update_affinity_hint()
> > instead. This removes the side-effect of actually applying the affinity.
> >
> > The driver does not really need to worry about spreading its IRQs across
> > CPUs. The core code already takes care of that. when the driver applies the
> > affinities by itself, it breaks the users' expectations:
> >
> >  1. The user configures irqbalance with IRQBALANCE_BANNED_CPULIST in
> >     order to prevent IRQs from being moved to certain CPUs that run a
> >     real-time workload.
> >
> >  2. bnxt_en device reopening will resets the affinity
> >     in bnxt_open().
> >
> >  3. bnxt_en has no idea about irqbalance's config, so it may move an IRQ to
> >     a banned CPU. The real-time workload suffers unacceptable latency.
> >
>
> Thanks for the patch.  This seems inline with what have been done in other
> drivers.
>
> > Signed-off-by: Mohammad Heib <mheib@redhat.com>
> Reviewed-by: Andy Gospodarek <gospo@broadcom.com>
>
> > ---
> >  drivers/net/ethernet/broadcom/bnxt/bnxt.c | 6 +++---
> >  1 file changed, 3 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
> > index 99d025b69079..cd82f93b20a1 100644
> > --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
> > +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
> > @@ -10885,7 +10885,7 @@ static void bnxt_free_irq(struct bnxt *bp)
> >               irq = &bp->irq_tbl[map_idx];
> >               if (irq->requested) {
> >                       if (irq->have_cpumask) {
> > -                             irq_set_affinity_hint(irq->vector, NULL);
> > +                             irq_update_affinity_hint(irq->vector, NULL);
> >                               free_cpumask_var(irq->cpu_mask);
> >                               irq->have_cpumask = 0;
> >                       }
> > @@ -10940,10 +10940,10 @@ static int bnxt_request_irq(struct bnxt *bp)
> >                       irq->have_cpumask = 1;
> >                       cpumask_set_cpu(cpumask_local_spread(i, numa_node),
> >                                       irq->cpu_mask);
> > -                     rc = irq_set_affinity_hint(irq->vector, irq->cpu_mask);
> > +                     rc = irq_update_affinity_hint(irq->vector, irq->cpu_mask);
> >                       if (rc) {
> >                               netdev_warn(bp->dev,
> > -                                         "Set affinity failed, IRQ = %d\n",
> > +                                         "Update affinity hint failed, IRQ = %d\n",
> >                                           irq->vector);
> >                               break;
> >                       }
> > --
> > 2.34.3
> >
>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
patchwork-bot+netdevbpf@kernel.org Nov. 12, 2024, 12:10 a.m. UTC | #3
Hello:

This patch was applied to netdev/net-next.git (main)
by Jakub Kicinski <kuba@kernel.org>:

On Wed,  6 Nov 2024 20:08:11 +0200 you wrote:
> irq_set_affinity_hint() is deprecated, Use irq_update_affinity_hint()
> instead. This removes the side-effect of actually applying the affinity.
> 
> The driver does not really need to worry about spreading its IRQs across
> CPUs. The core code already takes care of that. when the driver applies the
> affinities by itself, it breaks the users' expectations:
> 
> [...]

Here is the summary with links:
  - [net] bnxt_en: use irq_update_affinity_hint()
    https://git.kernel.org/netdev/net-next/c/fcf42409c6e1

You are awesome, thank you!
diff mbox series

Patch

diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index 99d025b69079..cd82f93b20a1 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -10885,7 +10885,7 @@  static void bnxt_free_irq(struct bnxt *bp)
 		irq = &bp->irq_tbl[map_idx];
 		if (irq->requested) {
 			if (irq->have_cpumask) {
-				irq_set_affinity_hint(irq->vector, NULL);
+				irq_update_affinity_hint(irq->vector, NULL);
 				free_cpumask_var(irq->cpu_mask);
 				irq->have_cpumask = 0;
 			}
@@ -10940,10 +10940,10 @@  static int bnxt_request_irq(struct bnxt *bp)
 			irq->have_cpumask = 1;
 			cpumask_set_cpu(cpumask_local_spread(i, numa_node),
 					irq->cpu_mask);
-			rc = irq_set_affinity_hint(irq->vector, irq->cpu_mask);
+			rc = irq_update_affinity_hint(irq->vector, irq->cpu_mask);
 			if (rc) {
 				netdev_warn(bp->dev,
-					    "Set affinity failed, IRQ = %d\n",
+					    "Update affinity hint failed, IRQ = %d\n",
 					    irq->vector);
 				break;
 			}