Source-Changes-HG archive

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

[src/netbsd-1-6]: src/sys/dev/pci Pull up revision 1.62 (requested by tls in ...



details:   https://anonhg.NetBSD.org/src/rev/2d76e7db4200
branches:  netbsd-1-6
changeset: 529423:2d76e7db4200
user:      he <he%NetBSD.org@localhost>
date:      Thu Nov 21 18:28:15 2002 +0000

description:
Pull up revision 1.62 (requested by tls in ticket #1007):
  Do not treat the ``reset complete'' interrupts as errors.
  Doing so causes us to go into a reset/interrupt/reset loop.

diffstat:

 sys/dev/pci/if_sip.c |  29 ++++++++++++++++++++++++-----
 1 files changed, 24 insertions(+), 5 deletions(-)

diffs (70 lines):

diff -r d766f06b8c22 -r 2d76e7db4200 sys/dev/pci/if_sip.c
--- a/sys/dev/pci/if_sip.c      Thu Nov 21 18:05:15 2002 +0000
+++ b/sys/dev/pci/if_sip.c      Thu Nov 21 18:28:15 2002 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: if_sip.c,v 1.52.4.6 2002/11/01 18:33:45 tron Exp $     */
+/*     $NetBSD: if_sip.c,v 1.52.4.7 2002/11/21 18:28:15 he Exp $       */
 
 /*-
  * Copyright (c) 2001, 2002 The NetBSD Foundation, Inc.
@@ -82,7 +82,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_sip.c,v 1.52.4.6 2002/11/01 18:33:45 tron Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_sip.c,v 1.52.4.7 2002/11/21 18:28:15 he Exp $");
 
 #include "bpfilter.h"
 
@@ -258,6 +258,7 @@
        struct evcnt sc_ev_txdintr;     /* Tx descriptor interrupts */
        struct evcnt sc_ev_txiintr;     /* Tx idle interrupts */
        struct evcnt sc_ev_rxintr;      /* Rx interrupts */
+       struct evcnt sc_ev_hiberr;      /* HIBERR interrupts */
 #ifdef DP83820
        struct evcnt sc_ev_rxipsum;     /* IP checksums checked in-bound */
        struct evcnt sc_ev_rxtcpsum;    /* TCP checksums checked in-bound */
@@ -1026,6 +1027,8 @@
            NULL, sc->sc_dev.dv_xname, "txiintr");
        evcnt_attach_dynamic(&sc->sc_ev_rxintr, EVCNT_TYPE_INTR,
            NULL, sc->sc_dev.dv_xname, "rxintr");
+       evcnt_attach_dynamic(&sc->sc_ev_hiberr, EVCNT_TYPE_INTR,
+           NULL, sc->sc_dev.dv_xname, "hiberr");
 #ifdef DP83820
        evcnt_attach_dynamic(&sc->sc_ev_rxipsum, EVCNT_TYPE_MISC,
            NULL, sc->sc_dev.dv_xname, "rxipsum");
@@ -1572,15 +1575,31 @@
 #endif /* ! DP83820 */
 
                if (isr & ISR_HIBERR) {
+                       int want_init = 0;
+
+                       SIP_EVCNT_INCR(&sc->sc_ev_hiberr);
+
 #define        PRINTERR(bit, str)                                              \
-                       if (isr & (bit))                                \
-                               printf("%s: %s\n", sc->sc_dev.dv_xname, str)
+                       do {                                            \
+                               if (isr & (bit)) {                      \
+                                       printf("%s: %s\n",              \
+                                           sc->sc_dev.dv_xname, str);  \
+                                       want_init = 1;                  \
+                               }                                       \
+                       } while (/*CONSTCOND*/0)
+
                        PRINTERR(ISR_DPERR, "parity error");
                        PRINTERR(ISR_SSERR, "system error");
                        PRINTERR(ISR_RMABT, "master abort");
                        PRINTERR(ISR_RTABT, "target abort");
                        PRINTERR(ISR_RXSOVR, "receive status FIFO overrun");
-                       (void) SIP_DECL(init)(ifp);
+                       /*
+                        * Ignore:
+                        *      Tx reset complete
+                        *      Rx reset complete
+                        */
+                       if (want_init)
+                               (void) SIP_DECL(init)(ifp);
 #undef PRINTERR
                }
        }



Home | Main Index | Thread Index | Old Index