mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
x86/HVM: hvmemul_cmpxchg() should also use known_gla()
To be consistent with the write and rmw cases the mapping approach should not be used when the guest linear address translation is known. This in particular excludes the discard-write case from bypassing the emulation path. This also means that now EFLAGS should actually get properly updated, despite the discarded write portion of the memory access. Signed-off-by: Jan Beulich <jbeulich@suse.com> Reviewed-by: Paul Durrant <paul.durrant@citrix.com>
This commit is contained in:
1 parent
bfdd5e5876
commit
2262e808f4
1 file changed
+6
-3
@@ -1472,9 +1472,12 @@ static int hvmemul_cmpxchg(
|
||||
else if ( hvmemul_ctxt->seg_reg[x86_seg_ss].dpl == 3 )
|
||||
pfec |= PFEC_user_mode;
|
||||
|
||||
mapping = hvmemul_map_linear_addr(addr, bytes, pfec, hvmemul_ctxt);
|
||||
if ( IS_ERR(mapping) )
|
||||
return ~PTR_ERR(mapping);
|
||||
if ( !known_gla(addr, bytes, pfec) )
|
||||
{
|
||||
mapping = hvmemul_map_linear_addr(addr, bytes, pfec, hvmemul_ctxt);
|
||||
if ( IS_ERR(mapping) )
|
||||
return ~PTR_ERR(mapping);
|
||||
}
|
||||
|
||||
if ( !mapping )
|
||||
{
|
||||
|
||||