2018-03-12 13:12+0200, Liran Alon: > From: Arbel Moshe <arbel.moshe@xxxxxxxxxx> > > VMware exposes the following Pseudo PMCs: > 0x10000: Physical host TSC > 0x10001: Elapsed real time in ns > 0x10002: Elapsed apparent time in ns > > For more info refer to: > https://www.vmware.com/files/pdf/techpaper/Timekeeping-In-VirtualMachines.pdf > > VMware allows access to these Pseduo-PMCs even when read via RDPMC > in Ring3 and CR4.PCE=0. Therefore, commit modifies x86 emulator > to allow access to these PMCs in this situation. In addition, > emulation of these PMCs were added to kvm_pmu_rdpmc(). > > Signed-off-by: Arbel Moshe <arbel.moshe@xxxxxxxxxx> > Reviewed-by: Liran Alon <liran.alon@xxxxxxxxxx> > Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> > Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> > --- > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > @@ -5887,23 +5887,28 @@ static bool kvm_vcpu_check_breakpoint(struct kvm_vcpu *vcpu, int *r) > > static bool is_vmware_backdoor_opcode(struct x86_emulate_ctxt *ctxt) > { > - if (ctxt->opcode_len != 1) > - return false; > - > - switch (ctxt->b) { > - case 0xe4: /* IN */ > - case 0xe5: > - case 0xec: > - case 0xed: > - case 0xe6: /* OUT */ > - case 0xe7: > - case 0xee: > - case 0xef: > - case 0x6c: /* INS */ > - case 0x6d: > - case 0x6e: /* OUTS */ > - case 0x6f: > - return true; > + switch (ctxt->opcode_len) { > + case 1: > + switch (ctxt->b) { > + case 0xe4: /* IN */ > + case 0xe5: > + case 0xec: > + case 0xed: > + case 0xe6: /* OUT */ > + case 0xe7: > + case 0xee: > + case 0xef: > + case 0x6c: /* INS */ > + case 0x6d: > + case 0x6e: /* OUTS */ > + case 0x6f: > + return true; > + } We fall through and return true for 0x33 with opcode_len == 1, plase add a break. > + case 2: > + switch (ctxt->b) { > + case 0x33: /* RDPMC */ > + return true; > + } > } > > return false; > -- > 1.9.1 >