p***@xen.org
2018-11-15 12:44:45 UTC
commit 2262e808f4665bee820b5bb536aff47e560bdcc3
Author: Jan Beulich <***@suse.com>
AuthorDate: Thu Nov 15 13:36:52 2018 +0100
Commit: Jan Beulich <***@suse.com>
CommitDate: Thu Nov 15 13:36:52 2018 +0100
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 <***@suse.com>
Reviewed-by: Paul Durrant <***@citrix.com>
---
xen/arch/x86/hvm/emulate.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/xen/arch/x86/hvm/emulate.c b/xen/arch/x86/hvm/emulate.c
index e08524be49..488ea5e956 100644
--- a/xen/arch/x86/hvm/emulate.c
+++ b/xen/arch/x86/hvm/emulate.c
@@ -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 )
{
--
generated by git-patchbot for /home/xen/git/xen.git#staging
Author: Jan Beulich <***@suse.com>
AuthorDate: Thu Nov 15 13:36:52 2018 +0100
Commit: Jan Beulich <***@suse.com>
CommitDate: Thu Nov 15 13:36:52 2018 +0100
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 <***@suse.com>
Reviewed-by: Paul Durrant <***@citrix.com>
---
xen/arch/x86/hvm/emulate.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/xen/arch/x86/hvm/emulate.c b/xen/arch/x86/hvm/emulate.c
index e08524be49..488ea5e956 100644
--- a/xen/arch/x86/hvm/emulate.c
+++ b/xen/arch/x86/hvm/emulate.c
@@ -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 )
{
--
generated by git-patchbot for /home/xen/git/xen.git#staging