From: Jun Sun <jsun@mvista.com>
To: Justin Carlson <justin@cs.cmu.edu>
Cc: linux-mips@oss.sgi.com
Subject: Re: Atomicity & preemptive kernels
Date: Tue, 11 Jun 2002 11:44:04 -0700 [thread overview]
Message-ID: <3D0644F4.8070902@mvista.com> (raw)
In-Reply-To: 1023753603.1152.28.camel@localhost.localdomain
Justin Carlson wrote:
> On Mon, 2002-06-10 at 15:14, Jun Sun wrote:
>
>>I am not sure if I am following your logic, but I don't see a race condition here.
>>
>>Once current->mm is read into a register, the register is saved into stack
>>when an interrupt happens (which later incurs a reschedule presumbably). When
>>the current preempted process comes back later, it goes back to the "tail" of
>>do_IRQ(), followed by restoring the registers. Since the register now holds
>>the right value, set_entryhi() should be correct.
>>
>>
>
> You've described exactly what happens. The only problem is, it's
> possible the underlying value for current->mm has changed. It's a
> *really* narrow window, at most a cycle or two, but I think it is
> there. In addition, even if you hit the window, to trigger wrong
> behavior it requires that you also saturate the local ASID space,
> invoking the tlb flush and asid reset in get_mmu_context().
>
> The change that's introduced by the preemptive kernel is that
> switch_mm() can be called after an interrupt. So, with some
> hypothetical assembly, the code flow looks like this:
>
> lw $1, 120($29) ; Load current->mm->context into a register
> * Interrupt happens *
> * reschedule happens, switch_mm() is called *
> * get_new_mmu_context() invoked, starts a new ASID cycle.
> * current->mm->context for the original process changes
> * (sometime later) switch back to original process
> mtc0 $entryhi, $1 ; stale context put back into entryhi!
>
> Does that make more sense? It's really a tiny race, but I think it's a
> real one.
>
I see your point now.
However, the race is not there. switch_mm() is only called from inside
schedule() function, which as a whole is preemption-safe. In other words, the
above event sequence won't cause a context switch until we exit from
schedule() function.
Jun
next prev parent reply other threads:[~2002-06-11 18:46 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-06-10 19:44 Atomicity & preemptive kernels Justin Carlson
2002-06-10 22:14 ` Jun Sun
2002-06-11 0:00 ` Justin Carlson
2002-06-11 18:44 ` Jun Sun [this message]
2002-06-11 19:56 ` Justin Carlson
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=3D0644F4.8070902@mvista.com \
--to=jsun@mvista.com \
--cc=justin@cs.cmu.edu \
--cc=linux-mips@oss.sgi.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox