Re: [PATCH v3] KVM: nVMX: Improve I/O exit handling

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Feb 18, 2013 at 09:53:22AM +0100, Jan Kiszka wrote:
> On 2013-02-18 09:44, Gleb Natapov wrote:
> > On Mon, Feb 18, 2013 at 07:32:53AM +0100, Jan Kiszka wrote:
> >> On 2013-02-14 19:46, Jan Kiszka wrote:
> >>> This prevents trapping L2 I/O exits if L1 has neither unconditional nor
> >>> bitmap-based exiting enabled. Furthermore, it implements basic I/O
> >>> bitmap handling. Repeated string accesses are still reported to L1
> >>> unconditionally for now.
> >>>
> >>> Signed-off-by: Jan Kiszka <jan.kiszka@xxxxxxxxxxx>
> >>> ---
> >>>
> >>> Changes in v3:
> >>>  - trap unconditionally if bitmap access fails
> >>>
> >>>  arch/x86/kvm/vmx.c |   55 ++++++++++++++++++++++++++++++++++++++++++++++++++-
> >>>  1 files changed, 53 insertions(+), 2 deletions(-)
> >>>
> >>> diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
> >>> index 6667042..2633199 100644
> >>> --- a/arch/x86/kvm/vmx.c
> >>> +++ b/arch/x86/kvm/vmx.c
> >>> @@ -5908,6 +5908,58 @@ static int (*const kvm_vmx_exit_handlers[])(struct kvm_vcpu *vcpu) = {
> >>>  static const int kvm_vmx_max_exit_handlers =
> >>>  	ARRAY_SIZE(kvm_vmx_exit_handlers);
> >>>  
> >>> +static bool nested_vmx_exit_handled_io(struct kvm_vcpu *vcpu,
> >>> +				       struct vmcs12 *vmcs12)
> >>> +{
> >>> +	unsigned long exit_qualification;
> >>> +	gpa_t bitmap, last_bitmap;
> >>> +	bool string, rep;
> >>> +	u16 port;
> >>> +	int size;
> >>> +	u8 b;
> >>> +
> >>> +	if (nested_cpu_has(vmcs12, CPU_BASED_UNCOND_IO_EXITING))
> >>> +		return 1;
> >>> +
> >>> +	if (!nested_cpu_has(vmcs12, CPU_BASED_USE_IO_BITMAPS))
> >>> +		return 0;
> >>> +
> >>> +	exit_qualification = vmcs_readl(EXIT_QUALIFICATION);
> >>> +
> >>> +	string = exit_qualification & 16;
> >>> +	rep = exit_qualification & 32;
> >>> +
> >>> +	/* TODO: interpret instruction and check range against bitmap */
> >>> +	if (string && rep)
> >>> +		return 1;
> >>
> >> Nonsense, rep ins/outs always works against the same port. We can simply
> >> drop this check and be done with the feature. I'll come up with v4.
> >>
> > Actually this reminds me that we should check range of ports depending
> > on operand size, not one port. But here is a catch, older cpus do not
> > provide operand size as part of exit information.
> 
> You mean what bit 54 in VMX_BASIC is telling us? Too bad. OK, will write
> v5 which takes this into account.
> 
Yes, this one. We can just exit unconditionally on older cpus.

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


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux