Source-Changes-HG archive

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

[src/trunk]: src/sys/arch/arc add some TODOs.



details:   https://anonhg.NetBSD.org/src/rev/d389c93627e5
branches:  trunk
changeset: 484958:d389c93627e5
user:      soda <soda%NetBSD.org@localhost>
date:      Sat Apr 15 21:57:37 2000 +0000

description:
add some TODOs.
overblocking and related problems are currently common to all mips ports.

diffstat:

 sys/arch/arc/TODO |  49 ++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 48 insertions(+), 1 deletions(-)

diffs (66 lines):

diff -r 63685efa5f82 -r d389c93627e5 sys/arch/arc/TODO
--- a/sys/arch/arc/TODO Sat Apr 15 21:29:49 2000 +0000
+++ b/sys/arch/arc/TODO Sat Apr 15 21:57:37 2000 +0000
@@ -1,7 +1,10 @@
-$NetBSD: TODO,v 1.8 2000/03/04 07:09:09 nisimura Exp $
+$NetBSD: TODO,v 1.9 2000/04/15 21:57:37 soda Exp $
 
 To do list (not in any particular order).
 
+    o  XXX sudden hang up in a few minutes or dozens of minutes.
+       2000 Mar 17 -current is OK. Mar 29 is NG.
+
     o  Move the RO and WIRED attribute from the pte to the pv table.
        This saves four instructions in the tlb miss handler.
 
@@ -40,6 +43,50 @@
            or 'hardclock() by R4000' system.  Clock resolution of 100Hz
            without any interporation is substandard
 
+    o  overblocking on interrupt handler, and related problems
+
+       -   SR_INT_IE should be enabled before calling hardclock().
+           Since this is not done currently, spllowersoftclock()
+           on hardclock() doesn't have effect, and softclock() is
+           handled with all interrupt disabled in this case.
+               -> overblocking, possibly causes missing hardclock()
+
+       -   MIPS3_CLKF_BASEPRI() doesn't work correctly,
+           when MIPS_INT_MASK_5 (== MIPS_INT_MASK_CLOCK) is disabled.
+               -> micro optimization on hardclock() doesn't work.
+                  but currently this may make hardclock() latency better
+                  due to above SR_INT_IE problem.
+           s/MIPS_INT_MASK/MIPS3_INT_MASK/ makes this work, although tricky.
+
+       -   if (ipending & INT_MASK_REAL_DEV) == 0,
+           softnet() and softclock() are handled with all interrupt disabled.
+               -> overblocking, possibly causes missing hardclock()
+
+       -   softclock() is handled with softnet() disabled.
+               -> slightly overblocking
+
+       -   `netisr' handling in netintr() implies potential race condition.
+           `netisr' access should be protected by splnet().
+           currently this is not real problem due to above overblocking.
+
+           `ssir' handling on many mips ports has same problem.
+           It should be protected by splnet() or splserial() or splhigh()
+           (depends on the highest interrupt level which sets `ssir').
+           Since `ssir' is accessed not only by setsoftnet() but also
+           by setsoft(), setsoftnet() should protect `ssir' by splserial()
+           or something. (i.e. priority level which setsoft() will be called)
+           Probably, it is better to split `ssir' variable for each
+           priority level.
+           also, _clearsoftintr() should be called before `ssir' access.
+           currently this is not real problem due to above overblocking.
+
+    o  it is better to always disable MIPS_INT_MASK_CLOCK.
+       those are the points which should be fixed:
+       mips_idle: li t0, (MIPS_INT_MASK | MIPS_SR_INT_IE)
+       machdep.c: curpcb->pcb_context[11] = MIPS_INT_MASK | MIPS_SR_INT_IE;
+       spl0()
+       splnone()
+
     o  fix kernel start address
 
     o  merge new wscons



Home | Main Index | Thread Index | Old Index