From: Ralf Baechle <ralf@linux-mips.org>
To: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Cc: linux-mips@linux-mips.org
Subject: Re: WAIT vs. tickless kernel
Date: Wed, 31 Oct 2007 16:13:33 +0000 [thread overview]
Message-ID: <20071031161333.GA22871@linux-mips.org> (raw)
In-Reply-To: <20071101.004906.106263529.anemo@mba.ocn.ne.jp>
On Thu, Nov 01, 2007 at 12:49:06AM +0900, Atsushi Nemoto wrote:
> 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 ;)
This one is definately playing with the fire. Or alternatively requires
detailed knowledge of the pipeline and pipelines tend to change. MIPS
Technologies does regular maintenance releases of its cores which also
add features and may change the pipelines in subtle way that may break
something like this.
The only safe but ugly workaround is to change the return from exception
code to detect if the EPC is in the range startin from the condition
check in the idle loop to including the WAIT instruction and if so to
patch the EPC to resume execution at the condition check or the
instruction following the WAIT.
Ralf
next prev parent reply other threads:[~2007-10-31 16:13 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-10-31 15:49 WAIT vs. tickless kernel Atsushi Nemoto
2007-10-31 16:13 ` Ralf Baechle [this message]
2007-10-31 16:31 ` Atsushi Nemoto
2007-10-31 16:39 ` Ralf Baechle
2007-11-02 16:46 ` Atsushi Nemoto
2007-11-06 15:39 ` Atsushi Nemoto
2007-11-06 15:58 ` David Daney
2007-11-06 16:02 ` Atsushi Nemoto
2007-11-07 14:23 ` Atsushi Nemoto
2007-11-11 17:05 ` Atsushi Nemoto
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20071031161333.GA22871@linux-mips.org \
--to=ralf@linux-mips.org \
--cc=anemo@mba.ocn.ne.jp \
--cc=linux-mips@linux-mips.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.