|
From: | Pavel Butsykin |
Subject: | Re: [Qemu-devel] [PATCH v3] util/async: use atomic_mb_set in qemu_bh_cancel |
Date: | Wed, 8 Nov 2017 19:36:53 +0300 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 |
On 08.11.2017 17:15, Paolo Bonzini wrote:
On 08/11/2017 15:10, Sergio Lopez wrote:I'm not quite sure that the pre-fetched is involved in this issue, because pre-fetch reading a certain addresses should be invalidated by write on another core to the same addresses. In our case write req->state = THREAD_DONE should invalidate read req->state == THREAD_DONE. I am inclined to think that there is a memory-reordering read with write. It's a very real case for x86 and I don't see the reasons which can prevent it:Yes, you're right. This is actually a memory reordering issue. I'm going to rewrite that paragraph.Well, memory reordering _is_ caused by speculative prefetching, delayed cache invalidation (store buffers), and so on.
what do you mean? If we are speaking about x86, then a write on another core (like req->state = THREAD_DONE in this issue) should invalidate prefetch read(req->state = THREAD_DONE) and this is prevented in hardware. The prefetch is locked to the L1, when another cpu invalidates the cache lines, the prefetch is invalidated also (As far as I understand it).
But it's probably better indeed to replace "pre-fetched" with "outdated". Whoever commits the patch can do the substitution (I can too). Paolo
[Prev in Thread] | Current Thread | [Next in Thread] |