> 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

Reply via email to