Messages in this thread | | | Date | Sat, 15 Oct 2005 20:00:18 +0200 | From | Andrea Arcangeli <> | Subject | Re: Possible memory ordering bug in page reclaim? |
| |
On Sat, Oct 15, 2005 at 10:08:08PM +1000, Herbert Xu wrote: > Nick Piggin <nickpiggin@yahoo.com.au> wrote: > > > > Well yes, that's on the store side (1, above). However can't a CPU > > still speculatively (eg. guess the branch) load the page->flags > > cacheline which might be satisfied from memory before the page->count > > cacheline loads? Ie. you can still have the correct write ordering > > but have incorrect read ordering? > > > > Because neither PageDirty nor page_count is a barrier, and there is > > no read barrier between them. > > Yes you're right. A read barrier is required here.
Even a write barrier is required on the left side, the read barrier on the right side is useless if there is no write barrier on the left side.
Note that the barrier in atomic_add_negative is useless here because it happens way too late, _after_ the count is decremented (not _before_) so the decreased count could be already visible to the other cpu.
Not all archs are like x86 where a barrier happens implicitly both before and after the instruction, and the way atomic_add_negative is implemented the barrier from a common code point of view is only added _after_ the instruction. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |