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 <rincebr...@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 <rincebr...@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.