Port-powerpc archive

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

powerpc softintr (was Re: ibm4xx interrupts)



Hello,

On Tue, 27 Jun 2006 01:55:23 +0200,
Jachym Holecek <freza AT dspfpga.com> wrote
>the diff below converts ibm4xx to:
>  * generic soft interrupts

I think powerpc's softintr_schedule() has a problem when checking
si->si_refs value.  It should be checked in splvm() guard. right?

I have experienced KASSERT(si->si_refs > 0) failed at softintr__run()
when havily softintr/softnet had occured. Following quick patch
resolves the phenomenon.

--- softintr.c.orig     2006-04-12 21:30:50.000000000 +0900
+++ softintr.c  2006-06-27 12:50:46.000000000 +0900
@@ -136,6 +136,13 @@ softintr_schedule(void *cookie)
        /*
         * Assume checking a single integer field is atomic.
         */
+#if 1
+       s = splvm();
+       if (si->si_refs > 1) {
+               splx(s);
+               return;
+       }
+#else
        if (si->si_refs > 1)
                return;
 
@@ -143,6 +150,7 @@ softintr_schedule(void *cookie)
         * Raise IPL and insert onto queue.
         */
        s = splvm();
+#endif
        SIMPLEQ_INSERT_TAIL(qh, si, si_link);
        si->si_refs++;
        switch (si->si_ipl) {

--
 TAKAOKA is gathering P*O*W*E*R.         http://method.jp/tadashi/



Home | Main Index | Thread Index | Old Index