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

Bug#999820:



Ah, no, using this patch is a bad idea.

It worked fine for most of the day, but then I tried pushing a TB over
NFS, and it died with watchdog timeouts and indefinite hangs.

That's sad. I guess I'll go for the backup option...

- Rich

On Fri, Nov 19, 2021 at 3:19 AM Rich <rincebrain@gmail.com> wrote:
>
> 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: