On Fri, May 09, 2025 at 03:13:45AM -0700, Shradha Gupta wrote: > In order to prepare the MANA driver to allocate the MSI-X IRQs > dynamically, we need to prepare the irq_setup() to allow skipping > affinitizing IRQs to first CPU sibling group. > > This would be for cases when number of IRQs is less than or equal > to number of online CPUs. In such cases for dynamically added IRQs > the first CPU sibling group would already be affinitized with HWC IRQ > > Signed-off-by: Shradha Gupta <shradhagu...@linux.microsoft.com> > Reviewed-by: Haiyang Zhang <haiya...@microsoft.com> > --- > drivers/net/ethernet/microsoft/mana/gdma_main.c | 16 ++++++++++++++-- > 1 file changed, 14 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/ethernet/microsoft/mana/gdma_main.c > b/drivers/net/ethernet/microsoft/mana/gdma_main.c > index 4ffaf7588885..2de42ce43373 100644 > --- a/drivers/net/ethernet/microsoft/mana/gdma_main.c > +++ b/drivers/net/ethernet/microsoft/mana/gdma_main.c > @@ -1288,7 +1288,8 @@ void mana_gd_free_res_map(struct gdma_resource *r) > r->size = 0; > } > > -static int irq_setup(unsigned int *irqs, unsigned int len, int node) > +static int irq_setup(unsigned int *irqs, unsigned int len, int node, > + bool skip_first_cpu) > { > const struct cpumask *next, *prev = cpu_none_mask; > cpumask_var_t cpus __free(free_cpumask_var); > @@ -1303,9 +1304,20 @@ static int irq_setup(unsigned int *irqs, unsigned int > len, int node) > while (weight > 0) { > cpumask_andnot(cpus, next, prev); > for_each_cpu(cpu, cpus) { > + /* > + * if the CPU sibling set is to be skipped we > + * just move on to the next CPUs without len-- > + */ > + if (unlikely(skip_first_cpu)) { > + skip_first_cpu = false; > + goto next_cpumask; > + } > + > if (len-- == 0) > goto done; > + > irq_set_affinity_and_hint(*irqs++, > topology_sibling_cpumask(cpu)); > +next_cpumask: > cpumask_andnot(cpus, cpus, > topology_sibling_cpumask(cpu)); > --weight; > } > @@ -1403,7 +1415,7 @@ static int mana_gd_setup_irqs(struct pci_dev *pdev) > } > } > > - err = irq_setup(irqs, (nvec - start_irq_index), gc->numa_node); > + err = irq_setup(irqs, (nvec - start_irq_index), gc->numa_node, false);
What for the 2nd parameter is parenthesized? > if (err) > goto free_irq; > > -- > 2.34.1 Reviewed-by: Yury Norov [NVIDIA] <yury.no...@gmail.com>