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 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.