diff options
author | Toomas Soome <tsoome@me.com> | 2016-02-06 15:42:31 +0200 |
---|---|---|
committer | Richard Lowe <richlowe@richlowe.net> | 2016-02-18 16:10:42 -0500 |
commit | 6e7bd6722c43b5bb4fa3bfb4961472f546ec2a6a (patch) | |
tree | 79219529fd47d58f92c49e3c45e212f0946bd647 /usr/src | |
parent | 49a119360d49a6e7e0b08e69ff5d965e828d3424 (diff) | |
download | illumos-gate-6e7bd6722c43b5bb4fa3bfb4961472f546ec2a6a.tar.gz |
6599 kstat queues should assert on both platforms
Reviewed by: Igor Kozhukhov <ikozhukhov@gmail.com>
Reviewed by: Hans Rosenfeld <rosenfeld@grumpf.hope-2000.org>
Reviewed by: Richard Elling <Richard.Elling@RichardElling.com>
Approved by: Richard Lowe <richlowe@richlowe.net>
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/uts/sun4u/cpu/common_asm.s | 39 | ||||
-rw-r--r-- | usr/src/uts/sun4v/cpu/common_asm.s | 39 |
2 files changed, 78 insertions, 0 deletions
diff --git a/usr/src/uts/sun4u/cpu/common_asm.s b/usr/src/uts/sun4u/cpu/common_asm.s index a3e2343c89..aee74db442 100644 --- a/usr/src/uts/sun4u/cpu/common_asm.s +++ b/usr/src/uts/sun4u/cpu/common_asm.s @@ -808,6 +808,29 @@ kstat_q_panic_msg: QRETURN; \ stx %g1, [%o0 + QTYPE/**/LASTUPDATE]; /* lastupdate = now */ +#if !defined(DEBUG) +/* + * same as KSTAT_Q_UPDATE but without: + * QBR %o1, QZERO; + * to be used only with non-debug build. mimics ASSERT() behaviour. + */ +#define KSTAT_Q_UPDATE_ND(QOP, QRETURN, QTYPE) \ + ld [%o0 + QTYPE/**/CNT], %o1; /* %o1 = old qlen */ \ + QOP %o1, 1, %o2; /* %o2 = new qlen */ \ + st %o2, [%o0 + QTYPE/**/CNT]; /* delay: save qlen */ \ + ldx [%o0 + QTYPE/**/LASTUPDATE], %o3; \ + ldx [%o0 + QTYPE/**/TIME], %o4; /* %o4 = old time */ \ + ldx [%o0 + QTYPE/**/LENTIME], %o5; /* %o5 = old lentime */ \ + sub %g1, %o3, %o2; /* %o2 = time delta */ \ + mulx %o1, %o2, %o3; /* %o3 = cur lentime */ \ + add %o4, %o2, %o4; /* %o4 = new time */ \ + add %o5, %o3, %o5; /* %o5 = new lentime */ \ + stx %o4, [%o0 + QTYPE/**/TIME]; /* save time */ \ + stx %o5, [%o0 + QTYPE/**/LENTIME]; /* save lentime */ \ +QRETURN; \ + stx %g1, [%o0 + QTYPE/**/LASTUPDATE]; /* lastupdate = now */ +#endif + .align 16 ENTRY(kstat_waitq_enter) GET_NATIVE_TIME(%g1, %g2, %g3) @@ -817,7 +840,11 @@ QRETURN; \ .align 16 ENTRY(kstat_waitq_exit) GET_NATIVE_TIME(%g1, %g2, %g3) +#if defined(DEBUG) KSTAT_Q_UPDATE(sub, BRZPN, kstat_q_panic, retl, KSTAT_IO_W) +#else + KSTAT_Q_UPDATE_ND(sub, retl, KSTAT_IO_W) +#endif SET_SIZE(kstat_waitq_exit) .align 16 @@ -829,20 +856,32 @@ QRETURN; \ .align 16 ENTRY(kstat_runq_exit) GET_NATIVE_TIME(%g1, %g2, %g3) +#if defined(DEBUG) KSTAT_Q_UPDATE(sub, BRZPN, kstat_q_panic, retl, KSTAT_IO_R) +#else + KSTAT_Q_UPDATE_ND(sub, retl, KSTAT_IO_R) +#endif SET_SIZE(kstat_runq_exit) .align 16 ENTRY(kstat_waitq_to_runq) GET_NATIVE_TIME(%g1, %g2, %g3) +#if defined(DEBUG) KSTAT_Q_UPDATE(sub, BRZPN, kstat_q_panic, 1:, KSTAT_IO_W) +#else + KSTAT_Q_UPDATE_ND(sub, 1:, KSTAT_IO_W) +#endif KSTAT_Q_UPDATE(add, BRZPT, 1f, 1:retl, KSTAT_IO_R) SET_SIZE(kstat_waitq_to_runq) .align 16 ENTRY(kstat_runq_back_to_waitq) GET_NATIVE_TIME(%g1, %g2, %g3) +#if defined(DEBUG) KSTAT_Q_UPDATE(sub, BRZPN, kstat_q_panic, 1:, KSTAT_IO_R) +#else + KSTAT_Q_UPDATE_ND(sub, 1:, KSTAT_IO_R) +#endif KSTAT_Q_UPDATE(add, BRZPT, 1f, 1:retl, KSTAT_IO_W) SET_SIZE(kstat_runq_back_to_waitq) diff --git a/usr/src/uts/sun4v/cpu/common_asm.s b/usr/src/uts/sun4v/cpu/common_asm.s index ff08ef97f6..fda53b4d2a 100644 --- a/usr/src/uts/sun4v/cpu/common_asm.s +++ b/usr/src/uts/sun4v/cpu/common_asm.s @@ -654,6 +654,29 @@ kstat_q_panic_msg: QRETURN; \ stx %g1, [%o0 + QTYPE/**/LASTUPDATE]; /* lastupdate = now */ +#if !defined(DEBUG) +/* + * same as KSTAT_Q_UPDATE but without: + * QBR %o1, QZERO; + * to be used only with non-debug build. mimics ASSERT() behaviour. + */ +#define KSTAT_Q_UPDATE_ND(QOP, QRETURN, QTYPE) \ + ld [%o0 + QTYPE/**/CNT], %o1; /* %o1 = old qlen */ \ + QOP %o1, 1, %o2; /* %o2 = new qlen */ \ + st %o2, [%o0 + QTYPE/**/CNT]; /* delay: save qlen */ \ + ldx [%o0 + QTYPE/**/LASTUPDATE], %o3; \ + ldx [%o0 + QTYPE/**/TIME], %o4; /* %o4 = old time */ \ + ldx [%o0 + QTYPE/**/LENTIME], %o5; /* %o5 = old lentime */ \ + sub %g1, %o3, %o2; /* %o2 = time delta */ \ + mulx %o1, %o2, %o3; /* %o3 = cur lentime */ \ + add %o4, %o2, %o4; /* %o4 = new time */ \ + add %o5, %o3, %o5; /* %o5 = new lentime */ \ + stx %o4, [%o0 + QTYPE/**/TIME]; /* save time */ \ + stx %o5, [%o0 + QTYPE/**/LENTIME]; /* save lentime */ \ +QRETURN; \ + stx %g1, [%o0 + QTYPE/**/LASTUPDATE]; /* lastupdate = now */ +#endif + .align 16 ENTRY(kstat_waitq_enter) GET_NATIVE_TIME(%g1,%g2,%g3,__LINE__) @@ -663,7 +686,11 @@ QRETURN; \ .align 16 ENTRY(kstat_waitq_exit) GET_NATIVE_TIME(%g1,%g2,%g3,__LINE__) +#if defined(DEBUG) KSTAT_Q_UPDATE(sub, BRZPN, kstat_q_panic, retl, KSTAT_IO_W) +#else + KSTAT_Q_UPDATE_ND(sub, retl, KSTAT_IO_W) +#endif SET_SIZE(kstat_waitq_exit) .align 16 @@ -675,20 +702,32 @@ QRETURN; \ .align 16 ENTRY(kstat_runq_exit) GET_NATIVE_TIME(%g1,%g2,%g3,__LINE__) +#if defined(DEBUG) KSTAT_Q_UPDATE(sub, BRZPN, kstat_q_panic, retl, KSTAT_IO_R) +#else + KSTAT_Q_UPDATE_ND(sub, retl, KSTAT_IO_R) +#endif SET_SIZE(kstat_runq_exit) .align 16 ENTRY(kstat_waitq_to_runq) GET_NATIVE_TIME(%g1,%g2,%g3,__LINE__) +#if defined(DEBUG) KSTAT_Q_UPDATE(sub, BRZPN, kstat_q_panic, 1:, KSTAT_IO_W) +#else + KSTAT_Q_UPDATE_ND(sub, 1:, KSTAT_IO_W) +#endif KSTAT_Q_UPDATE(add, BRZPT, 1f, 1:retl, KSTAT_IO_R) SET_SIZE(kstat_waitq_to_runq) .align 16 ENTRY(kstat_runq_back_to_waitq) GET_NATIVE_TIME(%g1,%g2,%g3,__LINE__) +#if defined(DEBUG) KSTAT_Q_UPDATE(sub, BRZPN, kstat_q_panic, 1:, KSTAT_IO_R) +#else + KSTAT_Q_UPDATE_ND(sub, 1:, KSTAT_IO_R) +#endif KSTAT_Q_UPDATE(add, BRZPT, 1f, 1:retl, KSTAT_IO_W) SET_SIZE(kstat_runq_back_to_waitq) |