From: Jan Beulich Date: Mon, 11 May 2015 08:34:13 +0000 (+0200) Subject: Revert "x86/pvh: use a custom IO bitmap for PVH hardware domains" X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~3271 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=a8403337c02cbca04e3eaf0ff3c55f7eef521785;p=xen.git Revert "x86/pvh: use a custom IO bitmap for PVH hardware domains" This reverts commit e5786bae04c3ebf6b122b2d983a946ff29308781 - it breaks the XSM build. --- diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c index 8140a27cea..371fd33ed3 100644 --- a/xen/arch/x86/hvm/hvm.c +++ b/xen/arch/x86/hvm/hvm.c @@ -77,13 +77,9 @@ integer_param("hvm_debug", opt_hvm_debug_level); struct hvm_function_table hvm_funcs __read_mostly; -#define HVM_IOBITMAP_SIZE (3*PAGE_SIZE) -/* - * The I/O permission bitmap is globally shared by all HVM guests except - * the hardware domain that has a more permissive IO bitmap. - */ +/* I/O permission bitmap is globally shared by all HVM guests. */ unsigned long __attribute__ ((__section__ (".bss.page_aligned"))) - hvm_io_bitmap[HVM_IOBITMAP_SIZE/BYTES_PER_LONG]; + hvm_io_bitmap[3*PAGE_SIZE/BYTES_PER_LONG]; /* Xen command-line option to enable HAP */ static bool_t __initdata opt_hap_enabled = 1; @@ -1465,20 +1461,6 @@ int hvm_domain_initialise(struct domain *d) goto fail1; d->arch.hvm_domain.io_handler->num_slot = 0; - /* Set the default IO Bitmap */ - if ( is_hardware_domain(d) ) - { - d->arch.hvm_domain.io_bitmap = _xmalloc(HVM_IOBITMAP_SIZE, PAGE_SIZE); - if ( d->arch.hvm_domain.io_bitmap == NULL ) - { - rc = -ENOMEM; - goto fail1; - } - memset(d->arch.hvm_domain.io_bitmap, ~0, HVM_IOBITMAP_SIZE); - } - else - d->arch.hvm_domain.io_bitmap = hvm_io_bitmap; - if ( is_pvh_domain(d) ) { register_portio_handler(d, 0, 0x10003, handle_pvh_io); @@ -1514,8 +1496,6 @@ int hvm_domain_initialise(struct domain *d) stdvga_deinit(d); vioapic_deinit(d); fail1: - if ( is_hardware_domain(d) ) - xfree(d->arch.hvm_domain.io_bitmap); xfree(d->arch.hvm_domain.io_handler); xfree(d->arch.hvm_domain.params); fail0: diff --git a/xen/arch/x86/hvm/svm/vmcb.c b/xen/arch/x86/hvm/svm/vmcb.c index 10afd44b2b..21292bbe97 100644 --- a/xen/arch/x86/hvm/svm/vmcb.c +++ b/xen/arch/x86/hvm/svm/vmcb.c @@ -118,7 +118,7 @@ static int construct_vmcb(struct vcpu *v) svm_disable_intercept_for_msr(v, MSR_AMD64_LWP_CBADDR); vmcb->_msrpm_base_pa = (u64)virt_to_maddr(arch_svm->msrpm); - vmcb->_iopm_base_pa = virt_to_maddr(v->domain->arch.hvm_domain.io_bitmap); + vmcb->_iopm_base_pa = (u64)virt_to_maddr(hvm_io_bitmap); /* Virtualise EFLAGS.IF and LAPIC TPR (CR8). */ vmcb->_vintr.fields.intr_masking = 1; diff --git a/xen/arch/x86/hvm/vmx/vmcs.c b/xen/arch/x86/hvm/vmx/vmcs.c index a353351ea2..3123706f91 100644 --- a/xen/arch/x86/hvm/vmx/vmcs.c +++ b/xen/arch/x86/hvm/vmx/vmcs.c @@ -1032,9 +1032,8 @@ static int construct_vmcs(struct vcpu *v) } /* I/O access bitmap. */ - __vmwrite(IO_BITMAP_A, virt_to_maddr(d->arch.hvm_domain.io_bitmap)); - __vmwrite(IO_BITMAP_B, - virt_to_maddr(d->arch.hvm_domain.io_bitmap) + PAGE_SIZE); + __vmwrite(IO_BITMAP_A, virt_to_maddr((char *)hvm_io_bitmap + 0)); + __vmwrite(IO_BITMAP_B, virt_to_maddr((char *)hvm_io_bitmap + PAGE_SIZE)); if ( cpu_has_vmx_virtual_intr_delivery ) { diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c index 3b9aee5bea..2b9787a163 100644 --- a/xen/arch/x86/setup.c +++ b/xen/arch/x86/setup.c @@ -1446,9 +1446,6 @@ void __init noreturn __start_xen(unsigned long mbi_p) dmi_end_boot(); - if ( is_hardware_domain(dom0) ) - setup_io_bitmap(dom0); - system_state = SYS_STATE_active; domain_unpause_by_systemcontroller(dom0); @@ -1512,32 +1509,6 @@ int __hwdom_init xen_in_range(unsigned long mfn) return 0; } -static int __hwdom_init io_bitmap_cb(unsigned long s, unsigned long e, - void *ctx) -{ - struct domain *d = ctx; - int i; - - ASSERT(s <= INT_MAX && e <= INT_MAX); - for ( i = s; i <= e; i++ ) - __clear_bit(i, d->arch.hvm_domain.io_bitmap); - - return 0; -} - -void __hwdom_init setup_io_bitmap(struct domain *d) -{ - int rc; - - ASSERT(is_hardware_domain(d)); - if ( has_hvm_container_domain(d) ) - { - rc = rangeset_report_ranges(d->arch.ioport_caps, 0, 0x10000, - io_bitmap_cb, d); - BUG_ON(rc); - } -} - /* * Local variables: * mode: C diff --git a/xen/common/domain.c b/xen/common/domain.c index 8e0a7cd8c0..6803c4daa4 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -225,8 +225,6 @@ static int late_hwdom_init(struct domain *d) iommu_hwdom_init(d); - setup_io_bitmap(d); - return rv; #else return 0; diff --git a/xen/include/asm-x86/hvm/domain.h b/xen/include/asm-x86/hvm/domain.h index e250791072..0f8b19af2d 100644 --- a/xen/include/asm-x86/hvm/domain.h +++ b/xen/include/asm-x86/hvm/domain.h @@ -141,8 +141,6 @@ struct hvm_domain { */ uint64_t sync_tsc; - unsigned long *io_bitmap; - union { struct vmx_domain vmx; struct svm_domain svm; diff --git a/xen/include/asm-x86/setup.h b/xen/include/asm-x86/setup.h index 381d9f8048..08bc23a0f0 100644 --- a/xen/include/asm-x86/setup.h +++ b/xen/include/asm-x86/setup.h @@ -32,7 +32,6 @@ int construct_dom0( module_t *initrd, void *(*bootstrap_map)(const module_t *), char *cmdline); -void setup_io_bitmap(struct domain *d); unsigned long initial_images_nrpages(nodeid_t node); void discard_initial_images(void);