[PATCH 1/3] KVM: trace mmio read event properly

2012-01-16 Thread Xiao Guangrong
In current code, we use KVM_TRACE_MMIO_READ to trace mmio read event which
only can be completed immediately, instead of it, we trace the time when
read event occur, then cooperate with then later patch, we can know the time
of mmio read emulation

Signed-off-by: Xiao Guangrong xiaoguangr...@linux.vnet.ibm.com
---
 arch/x86/kvm/x86.c |6 ++
 1 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index c95ca2d..0d41cfc 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -3432,7 +3432,6 @@ static int vcpu_mmio_read(struct kvm_vcpu *vcpu, gpa_t 
addr, int len, void *v)
  !kvm_iodevice_read(vcpu-arch.apic-dev, addr, n, v))
 kvm_io_bus_read(vcpu-kvm, KVM_MMIO_BUS, addr, n, v))
break;
-   trace_kvm_mmio(KVM_TRACE_MMIO_READ, n, addr, *(u64 *)v);
handled += n;
addr += n;
len -= n;
@@ -3658,8 +3657,6 @@ static int read_prepare(struct kvm_vcpu *vcpu, void *val, 
int bytes)
 {
if (vcpu-mmio_read_completed) {
memcpy(val, vcpu-mmio_data, bytes);
-   trace_kvm_mmio(KVM_TRACE_MMIO_READ, bytes,
-  vcpu-mmio_phys_addr, *(u64 *)val);
vcpu-mmio_read_completed = 0;
return 1;
}
@@ -3681,7 +3678,6 @@ static int write_emulate(struct kvm_vcpu *vcpu, gpa_t gpa,

 static int write_mmio(struct kvm_vcpu *vcpu, gpa_t gpa, int bytes, void *val)
 {
-   trace_kvm_mmio(KVM_TRACE_MMIO_WRITE, bytes, gpa, *(u64 *)val);
return vcpu_mmio_write(vcpu, gpa, bytes, val);
 }

@@ -3744,6 +3740,8 @@ mmio:
/*
 * Is this MMIO handled locally?
 */
+   trace_kvm_mmio(write ? KVM_TRACE_MMIO_WRITE : KVM_TRACE_MMIO_READ,
+   bytes, gpa, *(u64 *)val);
handled = ops-read_write_mmio(vcpu, gpa, bytes, val);
if (handled == bytes)
return X86EMUL_CONTINUE;
-- 
1.7.7.5

--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/3] KVM: trace mmio read event properly

2012-01-16 Thread Avi Kivity
On 01/16/2012 11:31 AM, Xiao Guangrong wrote:
 In current code, we use KVM_TRACE_MMIO_READ to trace mmio read event which
 only can be completed immediately, instead of it, we trace the time when
 read event occur, then cooperate with then later patch, we can know the time
 of mmio read emulation

 @@ -3744,6 +3740,8 @@ mmio:
   /*
* Is this MMIO handled locally?
*/
 + trace_kvm_mmio(write ? KVM_TRACE_MMIO_WRITE : KVM_TRACE_MMIO_READ,

It's better to push the conditional to the trace event itself, so it's
only evaluated if tracing is enabled.

 + bytes, gpa, *(u64 *)val);

We get the wrong value for reads here, no?

Can't we leave the code as is, and infer the start of the event from the
last kvm_exit trace?

   handled = ops-read_write_mmio(vcpu, gpa, bytes, val);
   if (handled == bytes)
   return X86EMUL_CONTINUE;


-- 
error compiling committee.c: too many arguments to function

--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html