> 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