[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#999820:



I forgot to include context on my own bug.

Bisecting this brought me to
https://github.com/torvalds/linux/commit/7d5ec3d3612396dc6d4b76366d20ab9fc06f399f
.

After a few attempts of varying partly-broken-or-panic, I concluded
that it seemed nearly correctly initialized at the point that we
called niu_try_msix(), at least on my hardware, and so added an escape
hatch to avoid the parts that step on the existing setup in a way that
breaks.

Not having any hardware but the one this broke on, or any familiarity
with the hardware or stack involved, I make no promises that it won't
come to life and scribble on your face with sharpie while you sleep,
just that I'm running it at the moment without such fires yet.

- Rich

On Fri, Nov 19, 2021 at 2:59 AM Rich <rincebrain@gmail.com> wrote:
>
> I found the following patch generated against 5.14.0 helps and hasn't
> burned the house down in testing so far.
>
> ---
>
> diff --git a/drivers/net/ethernet/sun/niu.c b/drivers/net/ethernet/sun/niu.c
> index 860644d182ab..70c08acd3ee5 100644
> --- a/drivers/net/ethernet/sun/niu.c
> +++ b/drivers/net/ethernet/sun/niu.c
> @@ -9034,16 +9034,20 @@ static void niu_try_msix(struct niu *np, u8
> *ldg_num_map)
>                 msi_vec[i].entry = i;
>         }
>
> -       num_irqs = pci_enable_msix_range(pdev, msi_vec, 1, num_irqs);
> +       if (np->num_ldg == 0)
> +               num_irqs = pci_enable_msix_range(pdev, msi_vec, 1, num_irqs);
> +
>         if (num_irqs < 0) {
>                 np->flags &= ~NIU_FLAGS_MSIX;
>                 return;
>         }
>
>         np->flags |= NIU_FLAGS_MSIX;
> -       for (i = 0; i < num_irqs; i++)
> -               np->ldg[i].irq = msi_vec[i].vector;
> -       np->num_ldg = num_irqs;
> +       if (np->num_ldg == 0) {
> +               for (i = 0; i < num_irqs; i++)
> +                       np->ldg[i].irq = msi_vec[i].vector;
> +               np->num_ldg = num_irqs;
> +       }
>  }
>
>  static int niu_n2_irq_init(struct niu *np, u8 *ldg_num_map)
>
> ---
>
> (I obviously haven't tested it on hardware other than the broken setup.)
>
> I'll try using this for a bit and see if it unexpectedly burns the house down.


Reply to: