Hey Miod, Thanks for the reply!
You are correct, I am using the second interface so that seems plausible. My Challenge Ss are the only SGIs I have that are currently running OpenBSD, but I do have an Octane that I was going to rebuild and add to the mix so that could be used for validation. Theo suggested that a fix for ARP committed the other day might have some impact on this so I've been testing the latest snapshot. So far I've been up for 19:47, so it's looking good so far. Interestingly enough I was getting "sq1: receive FIFO overflow" periodically with the previous snapshot, so far on this boot that has not recurred. If the box cores again I'll test your diff and see if that improves my situation. Thanks again, Miod! -Jesse On Fri, Jul 15, 2016 at 7:57 AM, Miod Vallat <[email protected]> wrote: >> Machine seems to hang at (seemingly) random intervals. This has >> occurred on several recent snapshots including 10-Jul. I have >> reproduced the issue on multiple systems, so it doesn't seem to be a >> hardware issue. It may not be relevant but the machines are running >> an MTU of 1454 on sq1. > > Are the other systems on which the issue has been reproduced also > Challenge S systems using the second Ethernet interface? > > If so, the problem might be caused by bad timing settings for the second > interface. > > Does the following diff help? > > Index: hpc/hpc.c > =================================================================== > RCS file: /OpenBSD/src/sys/arch/sgi/hpc/hpc.c,v > retrieving revision 1.18 > diff -u -p -r1.18 hpc.c > --- hpc/hpc.c 18 Sep 2015 20:50:02 -0000 1.18 > +++ hpc/hpc.c 15 Jul 2016 11:43:25 -0000 > @@ -427,8 +427,8 @@ hpc_attach(struct device *parent, struct > uint32_t hpctype; > int isonboard; > int isioplus; > - int giofast; > - int needprobe; > + int giofast = 0; > + int needprobe = 0; > int sysmask = 0; > > sc->sc_base = ga->ga_addr; > @@ -496,9 +496,34 @@ hpc_attach(struct device *parent, struct > isioplus = (sc->sc_base == HPC_BASE_ADDRESS_1 && hpctype == 3 && > (sysmask & HPCDEV_IP24) != 0); > > - printf(": SGI HPC%d%s (%s)\n", (hpctype == 3) ? 3 : 1, > - (hpctype == 15) ? ".5" : "", (isonboard) ? "onboard" : > - (isioplus) ? "IO+ mezzanine" : "GIO slot"); > + if (hpctype == 3) { > + if (sys_config.system_subtype == IP22_INDIGO2) { > + /* wild guess */ > + giofast = 1; > + } else { > + /* > + * According to IRIX hpc3.h, the fast GIO bit > + * is active high, but the register value has > + * been found to be 0xf8 on slow GIO systems > + * and 0xf1 on fast ones, which tends to prove > + * the opposite... > + */ > + if ((bus_space_read_4(sc->sc_ct, sc->sc_ch, > + IOC_BASE + IOC_GCREG) & IOC_GCREG_GIO_33MHZ) == 0) > + giofast = 1; > + } > + } > + > + if (hpctype == 3) { > + printf(": SGI HPC3 (%s, %uMHz)\n", > + (isonboard) ? "onboard" : > + (isioplus) ? "IO+ mezzanine" : "GIO slot", > + 25 + 8 * giofast); > + } else { > + printf(": SGI HPC1%s (%s)\n", > + (hpctype == 15) ? ".5" : "", > + (isonboard) ? "onboard" : "GIO slot"); > + } > > /* > * Configure the IOC. > @@ -586,42 +611,16 @@ hpc_attach(struct device *parent, struct > > if (hpctype == 3) { > hv = &hpc3_values; > - if (isonboard) { > + if (isonboard) > hd = hpc3_onboard; > - if (sys_config.system_subtype == IP22_INDIGO2) { > - /* wild guess */ > - giofast = 1; > - } else { > - /* > - * According to IRIX hpc3.h, the fast GIO bit > - * is active high, but the register value has > - * been found to be 0xf8 on slow GIO systems > - * and 0xf1 on fast ones, which tends to prove > - * the opposite... > - */ > - if (bus_space_read_4(sc->sc_ct, sc->sc_ch, > - IOC_BASE + IOC_GCREG) & > IOC_GCREG_GIO_33MHZ) > - giofast = 0; > - else > - giofast = 1; > - } > - } else { > + else > hd = hpc3_devices; > - /* > - * XXX should IO+ Mezzanine use the same settings as > - * XXX the onboard HPC3? > - */ > - giofast = 0; > - } > - needprobe = 0; > } else { > hv = &hpc1_values; > hv->revision = hpctype; > - giofast = 0; > - if (isonboard) { > + if (isonboard) > hd = hpc1_onboard; > - needprobe = 0; > - } else { > + else { > hd = hpc1_devices; > /* > * Until a reliable way of telling E++ and GIO32 SCSI
