Laurent Vivier wrote:
> vmx.c uses x86_decode_prefix() instead of get_io_count().
>
>   
>  static int handle_io(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
>  {
>       u64 exit_qualification;
> @@ -1831,8 +1780,32 @@
>       port = exit_qualification >> 16;
>       address = 0;
>       if (string) {
> -             if (rep && !get_io_count(vcpu, &count))
> +             int mode;
> +             u64 inst;
> +             gva_t rip;
> +             struct x86_prefix prefix;
> +             u32 cs_ar = vmcs_read32(GUEST_CS_AR_BYTES);
> +             unsigned long addr_mask;
> +
> +             mode = (vmcs_readl(GUEST_RFLAGS) & X86_EFLAGS_VM) ?
> +                             X86EMUL_MODE_REAL : (cs_ar & AR_L_MASK)
> +                             ? X86EMUL_MODE_PROT64 : (cs_ar & AR_DB_MASK)
> +                             ? X86EMUL_MODE_PROT32 : X86EMUL_MODE_PROT16;
> +
> +             rip = vmcs_readl(GUEST_RIP);
> +             if (mode != X86EMUL_MODE_PROT64)
> +                     rip += vmcs_readl(GUEST_CS_BASE);
> +             if (emulator_read_std(rip, &inst, sizeof(inst), vcpu)
> +                                     != X86EMUL_CONTINUE)
> +                     return 1;
> +
> +             if (x86_decode_prefix(mode, (u8*)&inst, &prefix) == -1)
>                       return 1;
> +
> +             addr_mask = (~0ULL >> (64 - (prefix.ad_bytes <<3)));
> +             if (rep)
> +                     count = vcpu->regs[VCPU_REGS_RCX] & addr_mask;
> +
>               address = vmcs_readl(GUEST_LINEAR_ADDRESS);
>       }
>       return kvm_setup_pio(vcpu, kvm_run, in, size, count, string, down,

How about just calliing emulate_instruction() from here (just for the 
string case)?  That will eliminate all the setup code.

x86_emulate_memop() will need to be extended to decode ins/outs, but 
that's fairly easy.

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


-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
kvm-devel mailing list
kvm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-devel

Reply via email to