On 23/09/2020 12:08, Bertrand Marquis wrote:
Hi Julien,
On 22 Sep 2020, at 20:31, Julien Grall <jul...@xen.org> wrote:
From: Julien Grall <jgr...@amazon.com>
Some callers of vcpu_pause() will expect to access the latest vcpu
context when the function returns (see XENDOMCTL_{set,get}vcpucontext}.
However, the latest vCPU context can only be observed after
v->is_running has been observed to be false.
As there is no memory barrier instruction generated, a processor could
try to speculatively access the vCPU context before it was observed.
The function vcpu_context_saved does contain a memory barrier already.
Memory barriers usually work in pair. We have a write barrier in
vcpu_context_saved() but no read barrier in the code relying on the
v->is_running.
Shouldn’t we make sure instead that any time is_running is modified to
false there is a barrier before (which is the case in vcpu_context_saved) ?
I understand the goal here but the barrier seem very far from the modification
of is_running.
That's not what I am trying to fix (see above). Instead, this patch will
ensure that when a pCPU observe v->is_running = false, then it can rely
on the context of the vCPU to be valid.
Cheers,
--
Julien Grall