linux-mips
[Top] [All Lists]

WAIT vs. tickless kernel

To: linux-mips@linux-mips.org
Subject: WAIT vs. tickless kernel
From: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Date: Thu, 01 Nov 2007 00:49:06 +0900 (JST)
Original-recipient: rfc822;linux-mips@linux-mips.org
Sender: linux-mips-bounce@linux-mips.org
On some CPUs, there is a small window in the idle task which might
cause a large latency to wakeup a process.

http://www.linux-mips.org/archives/linux-mips/2005-11/msg00114.html

This can be avoided on some CPUs which can use xxx_wait_irqoff(), but
still there are many CPUs out of luck.

And now we have dyntick/tickless kernel.  On tickless kernel the
problem might become more serious.  We cannot know the worst latency
time.  Theoretically a task can lose wakeup-event forever.

Of course "nowait" kernel option will help, but are there any other
good solutions?

Just an idea: If we put an WAIT in hazard area of the MTC0 which
enables interrupts, can we accomplish something like
atomic-test-and-wait operation?

void r4k_wait_bulletproof(void)
{
        local_irq_disable();
        if (!need_resched())
                __asm__(
                "       .set    push            \n"
                "       .set    mips3           \n"
                "       .set    noat            \n"
                "       .align  4               \n" /* avoid stall on wait */
                "       mfc0    $1, $12         \n"
                "       ori     $1, 1           \n"
                "       mtc0    $1, $12         \n"
                "       wait                    \n"
                "       xori    $1, 1           \n"
                "       mtc0    $1, $12         \n"
                "       .set    pop             \n");
        local_irq_enable();
}

If this work as expected?  Comments from pipeline gurus are welcome ;)

---
Atsushi Nemoto


<Prev in Thread] Current Thread [Next in Thread>