linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* set_pte() is no longer atomic with PAE36.
@ 1999-12-02 14:27 Stephen C. Tweedie
  1999-12-02 14:42 ` Alan Cox
  1999-12-02 15:54 ` Ingo Molnar
  0 siblings, 2 replies; 4+ messages in thread
From: Stephen C. Tweedie @ 1999-12-02 14:27 UTC (permalink / raw)
  To: Ingo Molnar, Linus Torvalds; +Cc: linux-mm, linux-kernel, Stephen Tweedie

Hi,

Ingo, do we not have a bit of a problem with set_pte() on PAE36-enabled
builds now?

	#define set_pte(pteptr, pteval) ((*(pteptr)) = (pteval))

would seem to be a problem: the 64-bit write is not atomic.  When
setting an unused pte, we want the word containing the page present bit
to be the last word written.  When clearing a pte, though, we need the
page present bit to be cleared before we invalidate the high order word,
otherwise we're in trouble if another cpu populates its tlb whilte the
pte is in an inconsistent (but valid, to the cpu) state.

Modifying an existing pte (eg. for COW) is probably even harder: do we
need to clear the page-present bit while we modify the high word?
Simply setting the dirty or accessed bits should pose no such problem,
but relocating a page looks as if it could bite here.

Basically, as long as we can assume that another cpu will only ever see
a pte with the page-present bit clear or a completely valid pte, all
should be fine.  Or have I missed something fundamental?

--Stephen

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~1999-12-02 15:54 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1999-12-02 14:27 set_pte() is no longer atomic with PAE36 Stephen C. Tweedie
1999-12-02 14:42 ` Alan Cox
1999-12-02 14:50   ` Ingo Molnar
1999-12-02 15:54 ` Ingo Molnar

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox