On 4/29/07, He, Qing <[EMAIL PROTECTED]> wrote:
> This patch enables IO bitmaps control on vmx and unmask the 0x80 port to
> avoid VMEXITs caused by accessing port 0x80. 0x80 is used as delays (see
> include/asm/io.h), and handling VMEXITs on its access is unnecessary but
> slows things down. This patch improves kernel build test at around
> 3%~5%.
>         Because every VM uses the same io bitmap, it is shared between
> all VMs rather than a per-VM data structure.
>
> Signed-off-by: Qing He <[EMAIL PROTECTED]>
>
>
> diff --git a/drivers/kvm/vmx.c b/drivers/kvm/vmx.c
> index 1d2b41b..a91d71f 100644
> --- a/drivers/kvm/vmx.c
> +++ b/drivers/kvm/vmx.c
> @@ -33,6 +33,8 @@ MODULE_LICENSE("GPL");
>  static DEFINE_PER_CPU(struct vmcs *, vmxarea);
>  static DEFINE_PER_CPU(struct vmcs *, current_vmcs);
>
> +static char *vmx_io_bitmap;
> +
>  #ifdef CONFIG_X86_64
>  #define HOST_IS_64 1
>  #else
> @@ -1127,8 +1129,8 @@ static int vmx_vcpu_setup(struct kvm_vcpu *vcpu)
>         vmcs_write32(GUEST_PENDING_DBG_EXCEPTIONS, 0);
>
>         /* I/O */
> -       vmcs_write64(IO_BITMAP_A, 0);
> -       vmcs_write64(IO_BITMAP_B, 0);
> +       vmcs_write64(IO_BITMAP_A, (unsigned long) __pa(vmx_io_bitmap));
> +       vmcs_write64(IO_BITMAP_B, (unsigned long) __pa(vmx_io_bitmap +
> PAGE_SIZE));
>
>         guest_write_tsc(0);
>
> @@ -1148,7 +1150,7 @@ static int vmx_vcpu_setup(struct kvm_vcpu *vcpu)
>                                CPU_BASED_HLT_EXITING         /* 20.6.2
> */
>                                | CPU_BASED_CR8_LOAD_EXITING    /* 20.6.2
> */
>                                | CPU_BASED_CR8_STORE_EXITING   /* 20.6.2
> */
> -                              | CPU_BASED_UNCOND_IO_EXITING   /* 20.6.2
> */
> +                              | CPU_BASED_ACTIVATE_IO_BITMAP  /* 20.6.2
> */
>                                | CPU_BASED_MOV_DR_EXITING
>                                | CPU_BASED_USE_TSC_OFFSETING   /* 21.3
> */
>                         );
> @@ -2190,11 +2192,39 @@ static struct kvm_arch_ops vmx_arch_ops = {
>
>  static int __init vmx_init(void)
>  {
> -       return kvm_init_arch(&vmx_arch_ops, THIS_MODULE);
> +       int r;
> +
> +       vmx_io_bitmap = (char *) __get_free_pages(GFP_KERNEL, 1);

Why allocate two continuous pages instead of two separate pages for
IO_BITMAP_A and IO_BITMAP_B?

> +       if (!vmx_io_bitmap) {
> +               printk(KERN_ERR "kvm: vmx_io_bitmap allocation
> failed.\n");
> +               r = -ENOMEM;
> +               goto out;
> +       }
> +
> +       /*
> +        * Allow direct access to the PC debug port (it is often used
> for I/O
> +        * delays, but the vmexits simply slow things down).
> +        */
> +       memset(vmx_io_bitmap, ~0, 2 * PAGE_SIZE);
> +       clear_bit(0x80, vmx_io_bitmap);
> +
> +       r = kvm_init_arch(&vmx_arch_ops, THIS_MODULE);
> +       if (r) {
> +               goto out1;
> +       }
> +
> +       return 0;
> +
> +out1:
> +       free_pages((unsigned long) vmx_io_bitmap, 1);
> +out:
> +       return r;
>  }
>
>  static void __exit vmx_exit(void)
>  {
> +       if (vmx_io_bitmap)
> +               free_pages((unsigned long) vmx_io_bitmap, 1);

Is there necessary to set vmx_io_bimap to NULL after free_page? And, I
assume that this
one should go to vmx member later.

Thanks,
Neo

>         kvm_exit_arch();
>  }
>
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by DB2 Express
> Download DB2 Express C - the FREE version of DB2 express and take
> control of your XML. No limits. Just data. Click to get it now.
> http://sourceforge.net/powerbar/db2/
> _______________________________________________
> kvm-devel mailing list
> kvm-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/kvm-devel
>
>
>


-- 
I would remember that if researchers were not ambitious
probably today we haven't the technology we are using!

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
kvm-devel mailing list
kvm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-devel

Reply via email to