|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] x86/HVM: fix forwarding of internally cached requests (part 2)
commit 670ee15ac1e3de7c15381fdaab0e531489b48939
Author: Jan Beulich <jbeulich@xxxxxxxx>
AuthorDate: Thu Apr 28 15:09:26 2016 +0200
Commit: Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Thu Apr 28 15:09:26 2016 +0200
x86/HVM: fix forwarding of internally cached requests (part 2)
Commit 96ae556569 ("x86/HVM: fix forwarding of internally cached
requests") wasn't quite complete: hvmemul_do_io() also needs to
propagate up the clipped count. (I really should have re-tested the
forward port resulting in the earlier change, instead of relying on the
testing done on the older version of Xen which the fix was first needed
for.)
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
Reviewed-by: Paul Durrant <paul.durrant@xxxxxxxxxx>
Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
xen/arch/x86/hvm/emulate.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/xen/arch/x86/hvm/emulate.c b/xen/arch/x86/hvm/emulate.c
index 1384a42..be1e7c2 100644
--- a/xen/arch/x86/hvm/emulate.c
+++ b/xen/arch/x86/hvm/emulate.c
@@ -137,7 +137,7 @@ static int hvmemul_do_io(
if ( (p.type != (is_mmio ? IOREQ_TYPE_COPY : IOREQ_TYPE_PIO)) ||
(p.addr != addr) ||
(p.size != size) ||
- (p.count != *reps) ||
+ (p.count > *reps) ||
(p.dir != dir) ||
(p.df != df) ||
(p.data_is_ptr != data_is_addr) )
@@ -145,6 +145,8 @@ static int hvmemul_do_io(
if ( data_is_addr )
return X86EMUL_UNHANDLEABLE;
+
+ *reps = p.count;
goto finish_access;
default:
return X86EMUL_UNHANDLEABLE;
@@ -162,6 +164,13 @@ static int hvmemul_do_io(
rc = hvm_io_intercept(&p);
+ /*
+ * p.count may have got reduced (see hvm_process_io_intercept()) - inform
+ * our callers and mirror this into latched state.
+ */
+ ASSERT(p.count <= *reps);
+ *reps = vio->io_req.count = p.count;
+
switch ( rc )
{
case X86EMUL_OKAY:
--
generated by git-patchbot for /home/xen/git/xen.git#master
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |