Source-Changes-HG archive

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

[src/netbsd-7]: src/sys/arch/sparc/sparc Pull up following revision(s) (reque...



details:   https://anonhg.NetBSD.org/src/rev/a4fa2c932f21
branches:  netbsd-7
changeset: 800450:a4fa2c932f21
user:      martin <martin%NetBSD.org@localhost>
date:      Wed Mar 21 11:54:47 2018 +0000

description:
Pull up following revision(s) (requested by mrg in ticket #1585):

        sys/arch/sparc/include/cpu.h: revision 1.99 (patch -> cpuvar.h)


- return early in xcall() if the function is sparc_noop() instead of triggering
  the IPI and then ignoring responses ( or lack thereof )
- write the .tag field last to avoid a race when polling for an incoming
  IPI
- add event counters for IPIs being caught with the mutex not held, and for
  messages that are already marked as completed

With this my SS20 made it through 48 hours of pkgsrc with MAKE_JOBS=3 and a
pair of SM81s.

Hypersparcs still crash but instead of craziness we get actual error messages,
apparently one CPU will occasionally do a watchdog reset, which according to
the manual is caused by catching a trap with traps disabled. Now to figure
out how that can even happen...

[file accidently missed in previous commit]

diffstat:

 sys/arch/sparc/sparc/cpuvar.h |  6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)

diffs (27 lines):

diff -r 5ab658d330ef -r a4fa2c932f21 sys/arch/sparc/sparc/cpuvar.h
--- a/sys/arch/sparc/sparc/cpuvar.h     Wed Mar 21 11:52:49 2018 +0000
+++ b/sys/arch/sparc/sparc/cpuvar.h     Wed Mar 21 11:54:47 2018 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: cpuvar.h,v 1.92 2013/11/16 23:54:01 mrg Exp $ */
+/*     $NetBSD: cpuvar.h,v 1.92.4.1 2018/03/21 11:54:47 martin Exp $ */
 
 /*
  *  Copyright (c) 1996 The NetBSD Foundation, Inc.
@@ -171,7 +171,7 @@
         * the pending register to avoid a hardware bug.
         */
 #define raise_ipi(cpi,lvl)     do {                    \
-       int x;                                          \
+       volatile int x;                                 \
        (cpi)->intreg_4m->pi_set = PINTR_SINTRLEV(lvl); \
        x = (cpi)->intreg_4m->pi_pend; __USE(x);        \
 } while (0)
@@ -340,6 +340,8 @@
        struct evcnt ci_savefpstate_null;
        struct evcnt ci_xpmsg_mutex_fail;
        struct evcnt ci_xpmsg_mutex_fail_call;
+       struct evcnt ci_xpmsg_mutex_not_held;
+       struct evcnt ci_xpmsg_bogus;
        struct evcnt ci_intrcnt[16];
        struct evcnt ci_sintrcnt[16];
 };



Home | Main Index | Thread Index | Old Index