Index: head/emulators/xen-kernel411/Makefile =================================================================== --- head/emulators/xen-kernel411/Makefile +++ head/emulators/xen-kernel411/Makefile @@ -0,0 +1,73 @@ +# $FreeBSD$ + +PORTNAME= xen +PORTVERSION= 4.11.0 +PORTREVISION= 0 +CATEGORIES= emulators +MASTER_SITES= http://downloads.xenproject.org/release/xen/${PORTVERSION}/ +PKGNAMESUFFIX= -kernel + +MAINTAINER= royger@FreeBSD.org +COMMENT= Hypervisor using a microkernel design + +LICENSE= GPLv2 + +ONLY_FOR_ARCHS= amd64 + +USES= cpe gmake python:2.7,build +# Ports build environment has ARCH=amd64 set which disables Xen automatic arch +# detection, but amd64 is not a valid arch for Xen. Hardcode x86_64 on the +# command line in order to overwrite the one from the environment. +MAKE_ARGS= clang=y PYTHON=${PYTHON_CMD} ARCH=x86_64 +NO_MTREE= yes +STRIP= # +PLIST_FILES= /boot/xen \ + /boot/xen.4th \ + lib/debug/boot/xen.debug + +# IOMMU fixes +EXTRA_PATCHES= ${FILESDIR}/0001-pci-treat-class-0-devices-as-endpoints.patch:-p1 +# vPCI MSI fixes +EXTRA_PATCHES+= ${FILESDIR}/0001-vpci-msi-split-code-to-bind-pirq.patch:-p1 \ + ${FILESDIR}/0002-vpci-msi-fix-update-of-bound-MSI-interrupts.patch:-p1 +# Add extra RAM regions to Dom0 memory map as UNUSABNLE +EXTRA_PATCHES+= ${FILESDIR}/0001-x86-dom0-add-extra-RAM-regions-as-UNUSABLE-for-PVH-m.patch:-p1 +# MTRR guest setup for PVH +EXTRA_PATCHES+= ${FILESDIR}/0001-x86-mtrr-introduce-mask-to-get-VCNT-from-MTRRcap-MSR.patch:-p1 \ + ${FILESDIR}/0001-x86-HVM-improve-MTRR-load-checks.patch:-p1 \ + ${FILESDIR}/0002-x86-mtrr-split-enabled-field-into-two-boolean-flags.patch:-p1 \ + ${FILESDIR}/0003-hvm-mtrr-add-emacs-local-variables-block-with-format.patch:-p1 \ + ${FILESDIR}/0004-hvm-mtrr-use-the-hardware-number-of-variable-ranges-.patch:-p1 \ + ${FILESDIR}/0005-hvm-mtrr-copy-hardware-state-for-Dom0.patch:-p1 \ + ${FILESDIR}/0006-libxc-pvh-set-default-MTRR-type-to-write-back.patch:-p1 \ + ${FILESDIR}/0007-docs-pvh-document-initial-MTRR-state.patch:-p1 +# Build with lld (LLVM linker) +EXTRA_PATCHES+= ${FILESDIR}/0001-x86-replace-usage-in-the-linker-script.patch:-p1 \ + ${FILESDIR}/0001-x86-efi-move-the-logic-to-detect-PE-build-support.patch:-p1 \ + ${FILESDIR}/0002-x86-efi-split-compiler-vs-linker-support.patch:-p1 +# Fix PVH Dom0 build with shadow paging +EXTRA_PATCHES+= ${FILESDIR}/0001-x86-pvh-change-the-order-of-the-iommu-initialization.patch:-p1 + +.include + +.if ${OPSYS} != FreeBSD +IGNORE= only supported on FreeBSD +.endif + +.if ${OSVERSION} < 1200074 +IGNORE= only supported on recent FreeBSD HEAD +.endif + +# The ports native 'build' target cannot be used because it sets +# CFLAGS, and that breaks the Xen build system. +do-build: + ${MAKE_CMD} -j${MAKE_JOBS_NUMBER} -C ${WRKSRC} xen ${MAKE_ARGS} + +do-install: + ${MKDIR} ${STAGEDIR}/boot + ${MKDIR} ${STAGEDIR}${PREFIX}/lib/debug/boot/ + ${INSTALL_PROGRAM} ${WRKSRC}/xen/xen ${STAGEDIR}/boot + ${INSTALL_DATA} ${FILESDIR}/xen.4th ${STAGEDIR}/boot + ${INSTALL_DATA} ${WRKSRC}/xen/xen-syms ${STAGEDIR}${PREFIX}/lib/debug/boot/xen.debug + +.include Index: head/emulators/xen-kernel411/distinfo =================================================================== --- head/emulators/xen-kernel411/distinfo +++ head/emulators/xen-kernel411/distinfo @@ -0,0 +1,3 @@ +TIMESTAMP = 1532345202 +SHA256 (xen-4.11.0.tar.gz) = 826e3a9f6d0eac94a825d272cc2c1294e22640ae75af906eb13920f9ad667643 +SIZE (xen-4.11.0.tar.gz) = 25131533 Index: head/emulators/xen-kernel411/files/0001-pci-treat-class-0-devices-as-endpoints.patch =================================================================== --- head/emulators/xen-kernel411/files/0001-pci-treat-class-0-devices-as-endpoints.patch +++ head/emulators/xen-kernel411/files/0001-pci-treat-class-0-devices-as-endpoints.patch @@ -0,0 +1,50 @@ +From 7495a5b6aa1c741964baf18a1cbdb8b8d71cce98 Mon Sep 17 00:00:00 2001 +From: Roger Pau Monne +Date: Tue, 8 May 2018 11:33:00 +0200 +Subject: [PATCH] pci: treat class 0 devices as endpoints +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Class 0 devices are legacy pre PCI 2.0 devices that didn't have a +class code. Treat them as endpoints, so that they can be handled by +the IOMMU and properly passed-through to the hardware domain. + +Such device has been seen on a Super Micro server, lspci -vv reports: + +00:13.0 Non-VGA unclassified device: Intel Corporation Device a135 (rev 31) + Subsystem: Super Micro Computer Inc Device 0931 + Flags: bus master, fast devsel, latency 0, IRQ 11 + Memory at df222000 (64-bit, non-prefetchable) [size=4K] + Capabilities: [80] Power Management version 3 + +Arguably this is not a legacy device (since this is a new server), but +in any case Xen needs to deal with it. + +Suggested-by: Andrew Cooper +Signed-off-by: Roger Pau Monné +Acked-by: Jan Beulich +--- + xen/drivers/passthrough/pci.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/xen/drivers/passthrough/pci.c b/xen/drivers/passthrough/pci.c +index 1db69d5b99..c4890a4295 100644 +--- a/xen/drivers/passthrough/pci.c ++++ b/xen/drivers/passthrough/pci.c +@@ -927,10 +927,11 @@ enum pdev_type pdev_type(u16 seg, u8 bus, u8 devfn) + case PCI_CLASS_BRIDGE_HOST: + return DEV_TYPE_PCI_HOST_BRIDGE; + +- case 0x0000: case 0xffff: ++ case 0xffff: + return DEV_TYPE_PCI_UNKNOWN; + } + ++ /* NB: treat legacy pre PCI 2.0 devices (class_device == 0) as endpoints. */ + return pos ? DEV_TYPE_PCIe_ENDPOINT : DEV_TYPE_PCI; + } + +-- +2.18.0 + Index: head/emulators/xen-kernel411/files/0001-vpci-msi-split-code-to-bind-pirq.patch =================================================================== --- head/emulators/xen-kernel411/files/0001-vpci-msi-split-code-to-bind-pirq.patch +++ head/emulators/xen-kernel411/files/0001-vpci-msi-split-code-to-bind-pirq.patch @@ -0,0 +1,123 @@ +From 9109e5afb99012244e9fbe7f44e7010950051443 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= +Date: Mon, 2 Jul 2018 13:07:26 +0200 +Subject: [PATCH 1/2] vpci/msi: split code to bind pirq +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +And put it in a separate update function. This is required in order to +improve binding of MSI PIRQs when using vPCI. + +No functional change. + +Signed-off-by: Roger Pau Monné +Reviewed-by: Jan Beulich +--- + xen/arch/x86/hvm/vmsi.c | 73 +++++++++++++++++++++++++---------------- + 1 file changed, 45 insertions(+), 28 deletions(-) + +diff --git a/xen/arch/x86/hvm/vmsi.c b/xen/arch/x86/hvm/vmsi.c +index 5ab7387d78..acadc23f8d 100644 +--- a/xen/arch/x86/hvm/vmsi.c ++++ b/xen/arch/x86/hvm/vmsi.c +@@ -663,6 +663,42 @@ void vpci_msi_arch_mask(struct vpci_msi *msi, const struct pci_dev *pdev, + vpci_mask_pirq(pdev->domain, msi->arch.pirq + entry, mask); + } + ++static int vpci_msi_update(const struct pci_dev *pdev, uint32_t data, ++ uint64_t address, unsigned int vectors, ++ unsigned int pirq, uint32_t mask) ++{ ++ unsigned int i; ++ ++ ASSERT(pcidevs_locked()); ++ ++ for ( i = 0; i < vectors; i++ ) ++ { ++ uint8_t vector = MASK_EXTR(data, MSI_DATA_VECTOR_MASK); ++ uint8_t vector_mask = 0xff >> (8 - fls(vectors) + 1); ++ struct xen_domctl_bind_pt_irq bind = { ++ .machine_irq = pirq + i, ++ .irq_type = PT_IRQ_TYPE_MSI, ++ .u.msi.gvec = (vector & ~vector_mask) | ++ ((vector + i) & vector_mask), ++ .u.msi.gflags = msi_gflags(data, address, (mask >> i) & 1), ++ }; ++ int rc = pt_irq_create_bind(pdev->domain, &bind); ++ ++ if ( rc ) ++ { ++ gdprintk(XENLOG_ERR, ++ "%04x:%02x:%02x.%u: failed to bind PIRQ %u: %d\n", ++ pdev->seg, pdev->bus, PCI_SLOT(pdev->devfn), ++ PCI_FUNC(pdev->devfn), pirq + i, rc); ++ while ( bind.machine_irq-- > pirq ) ++ pt_irq_destroy_bind(pdev->domain, &bind); ++ return rc; ++ } ++ } ++ ++ return 0; ++} ++ + static int vpci_msi_enable(const struct pci_dev *pdev, uint32_t data, + uint64_t address, unsigned int nr, + paddr_t table_base, uint32_t mask) +@@ -674,7 +710,7 @@ static int vpci_msi_enable(const struct pci_dev *pdev, uint32_t data, + .table_base = table_base, + .entry_nr = nr, + }; +- unsigned int i, vectors = table_base ? 1 : nr; ++ unsigned vectors = table_base ? 1 : nr; + int rc, pirq = INVALID_PIRQ; + + /* Get a PIRQ. */ +@@ -690,36 +726,17 @@ static int vpci_msi_enable(const struct pci_dev *pdev, uint32_t data, + return rc; + } + +- for ( i = 0; i < vectors; i++ ) ++ pcidevs_lock(); ++ rc = vpci_msi_update(pdev, data, address, vectors, pirq, mask); ++ if ( rc ) + { +- uint8_t vector = MASK_EXTR(data, MSI_DATA_VECTOR_MASK); +- uint8_t vector_mask = 0xff >> (8 - fls(vectors) + 1); +- struct xen_domctl_bind_pt_irq bind = { +- .machine_irq = pirq + i, +- .irq_type = PT_IRQ_TYPE_MSI, +- .u.msi.gvec = (vector & ~vector_mask) | +- ((vector + i) & vector_mask), +- .u.msi.gflags = msi_gflags(data, address, (mask >> i) & 1), +- }; +- +- pcidevs_lock(); +- rc = pt_irq_create_bind(pdev->domain, &bind); +- if ( rc ) +- { +- gdprintk(XENLOG_ERR, +- "%04x:%02x:%02x.%u: failed to bind PIRQ %u: %d\n", +- pdev->seg, pdev->bus, PCI_SLOT(pdev->devfn), +- PCI_FUNC(pdev->devfn), pirq + i, rc); +- while ( bind.machine_irq-- > pirq ) +- pt_irq_destroy_bind(pdev->domain, &bind); +- spin_lock(&pdev->domain->event_lock); +- unmap_domain_pirq(pdev->domain, pirq); +- spin_unlock(&pdev->domain->event_lock); +- pcidevs_unlock(); +- return rc; +- } ++ spin_lock(&pdev->domain->event_lock); ++ unmap_domain_pirq(pdev->domain, pirq); ++ spin_unlock(&pdev->domain->event_lock); + pcidevs_unlock(); ++ return rc; + } ++ pcidevs_unlock(); + + return pirq; + } +-- +2.18.0 + Index: head/emulators/xen-kernel411/files/0001-x86-HVM-improve-MTRR-load-checks.patch =================================================================== --- head/emulators/xen-kernel411/files/0001-x86-HVM-improve-MTRR-load-checks.patch +++ head/emulators/xen-kernel411/files/0001-x86-HVM-improve-MTRR-load-checks.patch @@ -0,0 +1,86 @@ +From 76159f10b174d8a5cd4c50213a9d21fcc0e9441d Mon Sep 17 00:00:00 2001 +From: Jan Beulich +Date: Mon, 16 Jul 2018 15:08:02 +0200 +Subject: [PATCH 1/7] x86/HVM: improve MTRR load checks +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +We should not assume that the incoming set of values contains exactly +MTRR_VCNT variable range MSRs. Permit a smaller amount and reject a +bigger one. As a result the save path then also needs to no longer use +a fixed upper bound, in turn requiring unused space in the save record +to be zeroed up front. + +Also slightly refine types where appropriate. + +Signed-off-by: Jan Beulich +[switch to use MASK_EXTR to get VCNT] +Signed-off-by: Roger Pau Monné +--- + xen/arch/x86/hvm/mtrr.c | 28 ++++++++++++++++++---------- + 1 file changed, 18 insertions(+), 10 deletions(-) + +diff --git a/xen/arch/x86/hvm/mtrr.c b/xen/arch/x86/hvm/mtrr.c +index c2927fb437..a636012388 100644 +--- a/xen/arch/x86/hvm/mtrr.c ++++ b/xen/arch/x86/hvm/mtrr.c +@@ -673,22 +673,22 @@ int hvm_set_mem_pinned_cacheattr(struct domain *d, uint64_t gfn_start, + + static int hvm_save_mtrr_msr(struct domain *d, hvm_domain_context_t *h) + { +- int i; + struct vcpu *v; +- struct hvm_hw_mtrr hw_mtrr; +- struct mtrr_state *mtrr_state; ++ + /* save mtrr&pat */ + for_each_vcpu(d, v) + { +- mtrr_state = &v->arch.hvm_vcpu.mtrr; ++ const struct mtrr_state *mtrr_state = &v->arch.hvm_vcpu.mtrr; ++ struct hvm_hw_mtrr hw_mtrr = { ++ .msr_mtrr_def_type = mtrr_state->def_type | ++ (mtrr_state->enabled << 10), ++ .msr_mtrr_cap = mtrr_state->mtrr_cap, ++ }; ++ unsigned int i; + + hvm_get_guest_pat(v, &hw_mtrr.msr_pat_cr); + +- hw_mtrr.msr_mtrr_def_type = mtrr_state->def_type +- | (mtrr_state->enabled << 10); +- hw_mtrr.msr_mtrr_cap = mtrr_state->mtrr_cap; +- +- for ( i = 0; i < MTRR_VCNT; i++ ) ++ for ( i = 0; i < MASK_EXTR(hw_mtrr.msr_mtrr_cap, MTRRcap_VCNT); i++ ) + { + /* save physbase */ + hw_mtrr.msr_mtrr_var[i*2] = +@@ -726,6 +726,14 @@ static int hvm_load_mtrr_msr(struct domain *d, hvm_domain_context_t *h) + if ( hvm_load_entry(MTRR, h, &hw_mtrr) != 0 ) + return -EINVAL; + ++ if ( MASK_EXTR(hw_mtrr.msr_mtrr_cap, MTRRcap_VCNT) > MTRR_VCNT ) ++ { ++ dprintk(XENLOG_G_ERR, ++ "HVM restore: %pv: too many (%lu) variable range MTRRs\n", ++ v, MASK_EXTR(hw_mtrr.msr_mtrr_cap, MTRRcap_VCNT)); ++ return -EINVAL; ++ } ++ + mtrr_state = &v->arch.hvm_vcpu.mtrr; + + hvm_set_guest_pat(v, hw_mtrr.msr_pat_cr); +@@ -735,7 +743,7 @@ static int hvm_load_mtrr_msr(struct domain *d, hvm_domain_context_t *h) + for ( i = 0; i < NUM_FIXED_MSR; i++ ) + mtrr_fix_range_msr_set(d, mtrr_state, i, hw_mtrr.msr_mtrr_fixed[i]); + +- for ( i = 0; i < MTRR_VCNT; i++ ) ++ for ( i = 0; i < MASK_EXTR(hw_mtrr.msr_mtrr_cap, MTRRcap_VCNT); i++ ) + { + mtrr_var_range_msr_set(d, mtrr_state, + MSR_IA32_MTRR_PHYSBASE(i), +-- +2.18.0 + Index: head/emulators/xen-kernel411/files/0001-x86-dom0-add-extra-RAM-regions-as-UNUSABLE-for-PVH-m.patch =================================================================== --- head/emulators/xen-kernel411/files/0001-x86-dom0-add-extra-RAM-regions-as-UNUSABLE-for-PVH-m.patch +++ head/emulators/xen-kernel411/files/0001-x86-dom0-add-extra-RAM-regions-as-UNUSABLE-for-PVH-m.patch @@ -0,0 +1,94 @@ +From e8e58be2b77708fd4d6ba6bca3f70bc507fde4be Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= +Date: Tue, 26 Jun 2018 08:48:14 +0200 +Subject: [PATCH] x86/dom0: add extra RAM regions as UNUSABLE for PVH memory + map +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +When running as PVH Dom0 the native memory map is used in order to +craft a tailored memory map for Dom0 taking into account it's memory +limit. + +Dom0 memory is always going to be smaller than the total amount +of memory present on the host, so in order to prevent Dom0 from +relocating PCI BARs over RAM regions mark all the RAM regions not +available to Dom0 as UNUSABLE in the memory map. + +Signed-off-by: Roger Pau Monné +Acked-by: Jan Beulich +--- + xen/arch/x86/hvm/dom0_build.c | 25 +++++++++++++++++-------- + 1 file changed, 17 insertions(+), 8 deletions(-) + +diff --git a/xen/arch/x86/hvm/dom0_build.c b/xen/arch/x86/hvm/dom0_build.c +index b237508072..e2b5d48e03 100644 +--- a/xen/arch/x86/hvm/dom0_build.c ++++ b/xen/arch/x86/hvm/dom0_build.c +@@ -314,8 +314,10 @@ static __init void pvh_setup_e820(struct domain *d, unsigned long nr_pages) + + /* + * Craft the e820 memory map for Dom0 based on the hardware e820 map. ++ * Add an extra entry in case we have to split a RAM entry into a RAM and a ++ * UNUSABLE one in order to truncate it. + */ +- d->arch.e820 = xzalloc_array(struct e820entry, e820.nr_map); ++ d->arch.e820 = xzalloc_array(struct e820entry, e820.nr_map + 1); + if ( !d->arch.e820 ) + panic("Unable to allocate memory for Dom0 e820 map"); + entry_guest = d->arch.e820; +@@ -323,19 +325,20 @@ static __init void pvh_setup_e820(struct domain *d, unsigned long nr_pages) + /* Clamp e820 memory map to match the memory assigned to Dom0 */ + for ( i = 0, entry = e820.map; i < e820.nr_map; i++, entry++ ) + { ++ *entry_guest = *entry; ++ + if ( entry->type != E820_RAM ) +- { +- *entry_guest = *entry; + goto next; +- } + + if ( nr_pages == cur_pages ) + { + /* +- * We already have all the assigned memory, +- * skip this entry ++ * We already have all the requested memory, turn this RAM region ++ * into a UNUSABLE region in order to prevent Dom0 from placing ++ * BARs in this area. + */ +- continue; ++ entry_guest->type = E820_UNUSABLE; ++ goto next; + } + + /* +@@ -358,6 +361,12 @@ static __init void pvh_setup_e820(struct domain *d, unsigned long nr_pages) + { + /* Truncate region */ + entry_guest->size = (nr_pages - cur_pages) << PAGE_SHIFT; ++ /* Add the remaining of the RAM region as UNUSABLE. */ ++ entry_guest++; ++ d->arch.nr_e820++; ++ entry_guest->type = E820_UNUSABLE; ++ entry_guest->addr = start + ((nr_pages - cur_pages) << PAGE_SHIFT); ++ entry_guest->size = end - entry_guest->addr; + cur_pages = nr_pages; + } + else +@@ -367,9 +376,9 @@ static __init void pvh_setup_e820(struct domain *d, unsigned long nr_pages) + next: + d->arch.nr_e820++; + entry_guest++; ++ ASSERT(d->arch.nr_e820 <= e820.nr_map + 1); + } + ASSERT(cur_pages == nr_pages); +- ASSERT(d->arch.nr_e820 <= e820.nr_map); + } + + static int __init pvh_setup_p2m(struct domain *d) +-- +2.18.0 + Index: head/emulators/xen-kernel411/files/0001-x86-efi-move-the-logic-to-detect-PE-build-support.patch =================================================================== --- head/emulators/xen-kernel411/files/0001-x86-efi-move-the-logic-to-detect-PE-build-support.patch +++ head/emulators/xen-kernel411/files/0001-x86-efi-move-the-logic-to-detect-PE-build-support.patch @@ -0,0 +1,129 @@ +From 9bd8e5d5cf128f5f19d8b8e74bd693c2711ce4d4 Mon Sep 17 00:00:00 2001 +From: Roger Pau Monne +Date: Fri, 20 Jul 2018 10:58:50 +0200 +Subject: [PATCH 1/2] x86/efi: move the logic to detect PE build support +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +So that it can be used by other components apart from the efi specific +code. By moving the detection code creating a dummy efi/disabled file +can be avoided. + +This is required so that the conditional used to define the efi symbol +in the linker script can be removed and instead the definition of the +efi symbol can be guarded using the preprocessor. + +The motivation behind this change is to be able to build Xen using lld +(the LLVM linker), that at least on version 6.0.0 doesn't work +properly with a DEFINED being used in a conditional expression: + +ld -melf_x86_64_fbsd -T xen.lds -N prelink.o --build-id=sha1 \ + /root/src/xen/xen/common/symbols-dummy.o -o /root/src/xen/xen/.xen-syms.0 +ld: error: xen.lds:233: symbol not found: efi + +Signed-off-by: Roger Pau Monné +Reviewed-by: Jan Beulich +--- +Cc: Jan Beulich +Cc: Andrew Cooper +Cc: Daniel Kiper +--- +Changes since v2: + - Use CFLAGS-y to append the XEN_BUILD_PE define. + - Check that XEN_BUILD_PE is set to 'y' in order to build the PE + binary. + +Changes since v1: + - Rename variable. + - Remove usage of the efi/disabled file. +--- + .gitignore | 1 - + xen/arch/x86/Makefile | 9 +++++++-- + xen/arch/x86/efi/Makefile | 11 +++-------- + xen/arch/x86/xen.lds.S | 4 +++- + 4 files changed, 13 insertions(+), 12 deletions(-) + +diff --git a/.gitignore b/.gitignore +index 55b78008c0..1625a8f0e7 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -302,7 +302,6 @@ xen/arch/x86/boot/*.bin + xen/arch/x86/boot/*.lnk + xen/arch/x86/efi.lds + xen/arch/x86/efi/check.efi +-xen/arch/x86/efi/disabled + xen/arch/x86/efi/mkreloc + xen/arch/*/efi/boot.c + xen/arch/*/efi/compat.c +diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile +index 5563c813dd..172685fb41 100644 +--- a/xen/arch/x86/Makefile ++++ b/xen/arch/x86/Makefile +@@ -163,10 +163,15 @@ EFI_LDFLAGS += --minor-image-version=$(XEN_SUBVERSION) + EFI_LDFLAGS += --major-os-version=2 --minor-os-version=0 + EFI_LDFLAGS += --major-subsystem-version=2 --minor-subsystem-version=0 + ++# Check if the build system supports PE. ++XEN_BUILD_PE := $(shell $(CC) $(filter-out $(CFLAGS-y) .%.d,$(CFLAGS)) -c efi/check.c -o efi/check.o 2>/dev/null && echo y) ++export XEN_BUILD_PE := $(if $(XEN_BUILD_PE),$(shell $(LD) -mi386pep --subsystem=10 -o efi/check.efi efi/check.o 2>/dev/null && echo y)) ++CFLAGS-$(XEN_BUILD_PE) += -DXEN_BUILD_PE ++ + $(TARGET).efi: VIRT_BASE = 0x$(shell $(NM) efi/relocs-dummy.o | sed -n 's, A VIRT_START$$,,p') + $(TARGET).efi: ALT_BASE = 0x$(shell $(NM) efi/relocs-dummy.o | sed -n 's, A ALT_START$$,,p') + # Don't use $(wildcard ...) here - at least make 3.80 expands this too early! +-$(TARGET).efi: guard = $(if $(shell echo efi/dis* | grep disabled),:) ++$(TARGET).efi: guard = $(if $(filter y,$(XEN_BUILD_PE)),,:) + + ifneq ($(build_id_linker),) + ifeq ($(call ld-ver-build-id,$(LD) $(filter -m%,$(EFI_LDFLAGS))),y) +@@ -232,6 +237,6 @@ efi/mkreloc: efi/mkreloc.c + clean:: + rm -f asm-offsets.s *.lds boot/*.o boot/*~ boot/core boot/mkelf32 + rm -f $(BASEDIR)/.xen-syms.[0-9]* boot/.*.d +- rm -f $(BASEDIR)/.xen.efi.[0-9]* efi/*.efi efi/disabled efi/mkreloc ++ rm -f $(BASEDIR)/.xen.efi.[0-9]* efi/*.efi efi/mkreloc + rm -f boot/cmdline.S boot/reloc.S boot/*.lnk boot/*.bin + rm -f note.o +diff --git a/xen/arch/x86/efi/Makefile b/xen/arch/x86/efi/Makefile +index 3be9661108..918383b325 100644 +--- a/xen/arch/x86/efi/Makefile ++++ b/xen/arch/x86/efi/Makefile +@@ -1,16 +1,11 @@ + CFLAGS += -fshort-wchar + +-efi := y$(shell rm -f disabled) +-efi := $(if $(efi),$(shell $(CC) $(filter-out $(CFLAGS-y) .%.d,$(CFLAGS)) -c check.c 2>disabled && echo y)) +-efi := $(if $(efi),$(shell $(LD) -mi386pep --subsystem=10 -o check.efi check.o 2>disabled && echo y)) +-efi := $(if $(efi),$(shell rm disabled)y) +- + %.o: %.ihex + $(OBJCOPY) -I ihex -O binary $< $@ + + boot.init.o: buildid.o + + obj-y := stub.o +-obj-$(efi) := boot.init.o compat.o relocs-dummy.o runtime.o +-extra-$(efi) += buildid.o +-nocov-$(efi) += stub.o ++obj-$(XEN_BUILD_PE) := boot.init.o compat.o relocs-dummy.o runtime.o ++extra-$(XEN_BUILD_PE) += buildid.o ++nocov-$(XEN_BUILD_PE) += stub.o +diff --git a/xen/arch/x86/xen.lds.S b/xen/arch/x86/xen.lds.S +index 326e885402..4a59467986 100644 +--- a/xen/arch/x86/xen.lds.S ++++ b/xen/arch/x86/xen.lds.S +@@ -304,7 +304,9 @@ SECTIONS + } :text + #endif + +- efi = DEFINED(efi) ? efi : .; ++#ifndef XEN_BUILD_PE ++ efi = .; ++#endif + + /* Sections to be discarded */ + /DISCARD/ : { +-- +2.18.0 + Index: head/emulators/xen-kernel411/files/0001-x86-mtrr-introduce-mask-to-get-VCNT-from-MTRRcap-MSR.patch =================================================================== --- head/emulators/xen-kernel411/files/0001-x86-mtrr-introduce-mask-to-get-VCNT-from-MTRRcap-MSR.patch +++ head/emulators/xen-kernel411/files/0001-x86-mtrr-introduce-mask-to-get-VCNT-from-MTRRcap-MSR.patch @@ -0,0 +1,87 @@ +From f7c587fa1341b59f4ff654bd7e55e162f3513130 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= +Date: Thu, 5 Jul 2018 15:28:56 +0200 +Subject: [PATCH] x86/mtrr: introduce mask to get VCNT from MTRRcap MSR +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +No functional change. + +Signed-off-by: Roger Pau Monné +Reviewed-by: Jan Beulich +--- + xen/arch/x86/cpu/mtrr/main.c | 2 +- + xen/arch/x86/hvm/mtrr.c | 8 ++++---- + xen/include/asm-x86/msr-index.h | 2 ++ + 3 files changed, 7 insertions(+), 5 deletions(-) + +diff --git a/xen/arch/x86/cpu/mtrr/main.c b/xen/arch/x86/cpu/mtrr/main.c +index 56f71a6e1f..e9df53f00d 100644 +--- a/xen/arch/x86/cpu/mtrr/main.c ++++ b/xen/arch/x86/cpu/mtrr/main.c +@@ -95,7 +95,7 @@ static void __init set_num_var_ranges(void) + config = 2; + else if (is_cpu(CENTAUR)) + config = 8; +- num_var_ranges = config & 0xff; ++ num_var_ranges = MASK_EXTR(config, MTRRcap_VCNT); + } + + static void __init init_table(void) +diff --git a/xen/arch/x86/hvm/mtrr.c b/xen/arch/x86/hvm/mtrr.c +index c78e5c17ad..c2927fb437 100644 +--- a/xen/arch/x86/hvm/mtrr.c ++++ b/xen/arch/x86/hvm/mtrr.c +@@ -78,7 +78,7 @@ static uint8_t __read_mostly pat_entry_tbl[PAT_TYPE_NUMS] = + bool_t is_var_mtrr_overlapped(const struct mtrr_state *m) + { + unsigned int seg, i; +- unsigned int num_var_ranges = (uint8_t)m->mtrr_cap; ++ unsigned int num_var_ranges = MASK_EXTR(m->mtrr_cap, MTRRcap_VCNT); + + for ( i = 0; i < num_var_ranges; i++ ) + { +@@ -193,7 +193,7 @@ static int get_mtrr_type(const struct mtrr_state *m, + uint8_t overlap_mtrr = 0; + uint8_t overlap_mtrr_pos = 0; + uint64_t mask = -(uint64_t)PAGE_SIZE << order; +- unsigned int seg, num_var_ranges = m->mtrr_cap & 0xff; ++ unsigned int seg, num_var_ranges = MASK_EXTR(m->mtrr_cap, MTRRcap_VCNT); + + if ( unlikely(!(m->enabled & 0x2)) ) + return MTRR_TYPE_UNCACHABLE; +@@ -483,7 +483,7 @@ bool mtrr_pat_not_equal(const struct vcpu *vd, const struct vcpu *vs) + + if ( md->enabled & 2 ) + { +- unsigned int num_var_ranges = (uint8_t)md->mtrr_cap; ++ unsigned int num_var_ranges = MASK_EXTR(md->mtrr_cap, MTRRcap_VCNT); + + /* Test default type MSR. */ + if ( md->def_type != ms->def_type ) +@@ -499,7 +499,7 @@ bool mtrr_pat_not_equal(const struct vcpu *vd, const struct vcpu *vs) + return true; + + /* Test variable ranges. */ +- if ( num_var_ranges != (uint8_t)ms->mtrr_cap || ++ if ( num_var_ranges != MASK_EXTR(ms->mtrr_cap, MTRRcap_VCNT) || + memcmp(md->var_ranges, ms->var_ranges, + num_var_ranges * sizeof(*md->var_ranges)) ) + return true; +diff --git a/xen/include/asm-x86/msr-index.h b/xen/include/asm-x86/msr-index.h +index 8fbccc88a7..95bb66916c 100644 +--- a/xen/include/asm-x86/msr-index.h ++++ b/xen/include/asm-x86/msr-index.h +@@ -60,6 +60,8 @@ + #define ATM_LNC_C6_AUTO_DEMOTE (1UL << 25) + + #define MSR_MTRRcap 0x000000fe ++#define MTRRcap_VCNT 0x000000ff ++ + #define MSR_IA32_BBL_CR_CTL 0x00000119 + + #define MSR_IA32_SYSENTER_CS 0x00000174 +-- +2.18.0 + Index: head/emulators/xen-kernel411/files/0001-x86-pvh-change-the-order-of-the-iommu-initialization.patch =================================================================== --- head/emulators/xen-kernel411/files/0001-x86-pvh-change-the-order-of-the-iommu-initialization.patch +++ head/emulators/xen-kernel411/files/0001-x86-pvh-change-the-order-of-the-iommu-initialization.patch @@ -0,0 +1,53 @@ +From ec3d58041829e0747d94efa11a44467c3e083b60 Mon Sep 17 00:00:00 2001 +From: Roger Pau Monne +Date: Tue, 24 Jul 2018 13:12:18 +0200 +Subject: [PATCH] x86/pvh: change the order of the iommu initialization for + Dom0 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The iommu initialization will also create MMIO mappings in the Dom0 +p2m, so the paging memory pool needs to be allocated or else iommu +initialization will fail. + +Move the call to init the iommu after the Dom0 p2m has been setup in +order to solve this. + +Note that issues caused by this wrong ordering have only been seen +when using shadow paging. + +Signed-off-by: Roger Pau Monné +Acked-by: Jan Beulich +--- +Cc: Jan Beulich +Cc: Andrew Cooper +--- + xen/arch/x86/hvm/dom0_build.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/xen/arch/x86/hvm/dom0_build.c b/xen/arch/x86/hvm/dom0_build.c +index 9a833fa4b9..f0cd63b1ec 100644 +--- a/xen/arch/x86/hvm/dom0_build.c ++++ b/xen/arch/x86/hvm/dom0_build.c +@@ -1093,8 +1093,6 @@ int __init dom0_construct_pvh(struct domain *d, const module_t *image, + + printk(XENLOG_INFO "*** Building a PVH Dom%d ***\n", d->domain_id); + +- iommu_hwdom_init(d); +- + rc = pvh_setup_p2m(d); + if ( rc ) + { +@@ -1102,6 +1100,8 @@ int __init dom0_construct_pvh(struct domain *d, const module_t *image, + return rc; + } + ++ iommu_hwdom_init(d); ++ + rc = pvh_load_kernel(d, image, image_headroom, initrd, bootstrap_map(image), + cmdline, &entry, &start_info); + if ( rc ) +-- +2.18.0 + Index: head/emulators/xen-kernel411/files/0001-x86-replace-usage-in-the-linker-script.patch =================================================================== --- head/emulators/xen-kernel411/files/0001-x86-replace-usage-in-the-linker-script.patch +++ head/emulators/xen-kernel411/files/0001-x86-replace-usage-in-the-linker-script.patch @@ -0,0 +1,39 @@ +From e21ba44f771226a5f6f0ce269aabcfb019eae539 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= +Date: Thu, 12 Jul 2018 10:48:18 +0200 +Subject: [PATCH] x86: replace '||' usage in the linker script +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +With '|'. The result is the same, and the later works with lld. Fixes +the following error when building Xen with lld: + +ld -melf_x86_64_fbsd -T xen.lds -N prelink.o --build-id=sha1 \ + /root/src/xen/xen/common/symbols-dummy.o -o /root/src/xen/xen/.xen-syms.0 +ld: error: xen.lds:260: malformed number: | +>>> ASSERT(__image_base__ > (((((((((261 >> 8) * 0xffff000000000000) | (261 << 39))) + ((1 << 39) / 2)) + (64 << 30)) + (1 << 30)) + (1 << 30))) || +>>> ^ + +Signed-off-by: Roger Pau Monné +Reviewed-by: Jan Beulich +--- + xen/arch/x86/xen.lds.S | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/xen/arch/x86/xen.lds.S b/xen/arch/x86/xen.lds.S +index 70afedd31d..326e885402 100644 +--- a/xen/arch/x86/xen.lds.S ++++ b/xen/arch/x86/xen.lds.S +@@ -331,7 +331,7 @@ SECTIONS + .comment 0 : { *(.comment) } + } + +-ASSERT(__image_base__ > XEN_VIRT_START || ++ASSERT(__image_base__ > XEN_VIRT_START | + __2M_rwdata_end <= XEN_VIRT_END - NR_CPUS * PAGE_SIZE, + "Xen image overlaps stubs area") + +-- +2.18.0 + Index: head/emulators/xen-kernel411/files/0002-vpci-msi-fix-update-of-bound-MSI-interrupts.patch =================================================================== --- head/emulators/xen-kernel411/files/0002-vpci-msi-fix-update-of-bound-MSI-interrupts.patch +++ head/emulators/xen-kernel411/files/0002-vpci-msi-fix-update-of-bound-MSI-interrupts.patch @@ -0,0 +1,94 @@ +From 1e34ed7174cce6ab37e420dda9452267301fb7d2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= +Date: Mon, 2 Jul 2018 13:07:55 +0200 +Subject: [PATCH 2/2] vpci/msi: fix update of bound MSI interrupts +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Current update process of already bound MSI interrupts is wrong +because unmap_domain_pirq calls pci_disable_msi, which disables MSI +interrupts on the device. On the other hand map_domain_pirq doesn't +enable MSI, so the current update process of already enabled MSI +entries is wrong because MSI control bit will be disabled by +unmap_domain_pirq and not re-enabled by map_domain_pirq. + +In order to fix this avoid unmapping the PIRQs and just update the +binding of the PIRQ. A new arch helper to do that is introduced. + +Note that MSI-X is not affected because unmap_domain_pirq only +disables the MSI enable control bit for the MSI case, for MSI-X the +bit is left untouched by unmap_domain_pirq. + +Signed-off-by: Roger Pau Monné +Acked-by: Jan Beulich +--- + xen/arch/x86/hvm/vmsi.c | 23 +++++++++++++++++++++++ + xen/drivers/vpci/msi.c | 3 +-- + xen/include/xen/vpci.h | 2 ++ + 3 files changed, 26 insertions(+), 2 deletions(-) + +diff --git a/xen/arch/x86/hvm/vmsi.c b/xen/arch/x86/hvm/vmsi.c +index acadc23f8d..3001d5c488 100644 +--- a/xen/arch/x86/hvm/vmsi.c ++++ b/xen/arch/x86/hvm/vmsi.c +@@ -699,6 +699,29 @@ static int vpci_msi_update(const struct pci_dev *pdev, uint32_t data, + return 0; + } + ++int vpci_msi_arch_update(struct vpci_msi *msi, const struct pci_dev *pdev) ++{ ++ int rc; ++ ++ ASSERT(msi->arch.pirq != INVALID_PIRQ); ++ ++ pcidevs_lock(); ++ rc = vpci_msi_update(pdev, msi->data, msi->address, msi->vectors, ++ msi->arch.pirq, msi->mask); ++ if ( rc ) ++ { ++ spin_lock(&pdev->domain->event_lock); ++ unmap_domain_pirq(pdev->domain, msi->arch.pirq); ++ spin_unlock(&pdev->domain->event_lock); ++ pcidevs_unlock(); ++ msi->arch.pirq = INVALID_PIRQ; ++ return rc; ++ } ++ pcidevs_unlock(); ++ ++ return 0; ++} ++ + static int vpci_msi_enable(const struct pci_dev *pdev, uint32_t data, + uint64_t address, unsigned int nr, + paddr_t table_base, uint32_t mask) +diff --git a/xen/drivers/vpci/msi.c b/xen/drivers/vpci/msi.c +index ad26c38a92..8f15ad7bf2 100644 +--- a/xen/drivers/vpci/msi.c ++++ b/xen/drivers/vpci/msi.c +@@ -87,8 +87,7 @@ static void update_msi(const struct pci_dev *pdev, struct vpci_msi *msi) + if ( !msi->enabled ) + return; + +- vpci_msi_arch_disable(msi, pdev); +- if ( vpci_msi_arch_enable(msi, pdev, msi->vectors) ) ++ if ( vpci_msi_arch_update(msi, pdev) ) + msi->enabled = false; + } + +diff --git a/xen/include/xen/vpci.h b/xen/include/xen/vpci.h +index 72d2225a97..af2b8580ee 100644 +--- a/xen/include/xen/vpci.h ++++ b/xen/include/xen/vpci.h +@@ -159,6 +159,8 @@ int __must_check vpci_msi_arch_enable(struct vpci_msi *msi, + const struct pci_dev *pdev, + unsigned int vectors); + void vpci_msi_arch_disable(struct vpci_msi *msi, const struct pci_dev *pdev); ++int __must_check vpci_msi_arch_update(struct vpci_msi *msi, ++ const struct pci_dev *pdev); + void vpci_msi_arch_init(struct vpci_msi *msi); + void vpci_msi_arch_print(const struct vpci_msi *msi); + +-- +2.18.0 + Index: head/emulators/xen-kernel411/files/0002-x86-efi-split-compiler-vs-linker-support.patch =================================================================== --- head/emulators/xen-kernel411/files/0002-x86-efi-split-compiler-vs-linker-support.patch +++ head/emulators/xen-kernel411/files/0002-x86-efi-split-compiler-vs-linker-support.patch @@ -0,0 +1,77 @@ +From fe810e9bcbca982a2f6980d119695c7e933c39bd Mon Sep 17 00:00:00 2001 +From: Roger Pau Monne +Date: Fri, 20 Jul 2018 10:58:50 +0200 +Subject: [PATCH 2/2] x86/efi: split compiler vs linker support +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +So that an ELF binary with support for EFI services will be built when +the compiler supports the MS ABI, regardless of the linker support for +PE. + +Signed-off-by: Roger Pau Monné +Reviewed-by: Jan Beulich +--- +Cc: Jan Beulich +Cc: Andrew Cooper +Cc: Daniel Kiper +--- +Changes since v1: + - New in this version. +--- + xen/arch/x86/Makefile | 9 +++++---- + xen/arch/x86/efi/Makefile | 6 +++--- + xen/arch/x86/xen.lds.S | 2 +- + 3 files changed, 9 insertions(+), 8 deletions(-) + +diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile +index 172685fb41..17e7d3fa34 100644 +--- a/xen/arch/x86/Makefile ++++ b/xen/arch/x86/Makefile +@@ -163,10 +163,11 @@ EFI_LDFLAGS += --minor-image-version=$(XEN_SUBVERSION) + EFI_LDFLAGS += --major-os-version=2 --minor-os-version=0 + EFI_LDFLAGS += --major-subsystem-version=2 --minor-subsystem-version=0 + +-# Check if the build system supports PE. +-XEN_BUILD_PE := $(shell $(CC) $(filter-out $(CFLAGS-y) .%.d,$(CFLAGS)) -c efi/check.c -o efi/check.o 2>/dev/null && echo y) +-export XEN_BUILD_PE := $(if $(XEN_BUILD_PE),$(shell $(LD) -mi386pep --subsystem=10 -o efi/check.efi efi/check.o 2>/dev/null && echo y)) +-CFLAGS-$(XEN_BUILD_PE) += -DXEN_BUILD_PE ++# Check if the compiler supports the MS ABI. ++export XEN_BUILD_EFI := $(shell $(CC) $(filter-out $(CFLAGS-y) .%.d,$(CFLAGS)) -c efi/check.c -o efi/check.o 2>/dev/null && echo y) ++# Check if the linker supports PE. ++XEN_BUILD_PE := $(if $(XEN_BUILD_EFI),$(shell $(LD) -mi386pep --subsystem=10 -o efi/check.efi efi/check.o 2>/dev/null && echo y)) ++CFLAGS-$(XEN_BUILD_EFI) += -DXEN_BUILD_EFI + + $(TARGET).efi: VIRT_BASE = 0x$(shell $(NM) efi/relocs-dummy.o | sed -n 's, A VIRT_START$$,,p') + $(TARGET).efi: ALT_BASE = 0x$(shell $(NM) efi/relocs-dummy.o | sed -n 's, A ALT_START$$,,p') +diff --git a/xen/arch/x86/efi/Makefile b/xen/arch/x86/efi/Makefile +index 918383b325..3816de2738 100644 +--- a/xen/arch/x86/efi/Makefile ++++ b/xen/arch/x86/efi/Makefile +@@ -6,6 +6,6 @@ CFLAGS += -fshort-wchar + boot.init.o: buildid.o + + obj-y := stub.o +-obj-$(XEN_BUILD_PE) := boot.init.o compat.o relocs-dummy.o runtime.o +-extra-$(XEN_BUILD_PE) += buildid.o +-nocov-$(XEN_BUILD_PE) += stub.o ++obj-$(XEN_BUILD_EFI) := boot.init.o compat.o relocs-dummy.o runtime.o ++extra-$(XEN_BUILD_EFI) += buildid.o ++nocov-$(XEN_BUILD_EFI) += stub.o +diff --git a/xen/arch/x86/xen.lds.S b/xen/arch/x86/xen.lds.S +index 4a59467986..6e9bda5109 100644 +--- a/xen/arch/x86/xen.lds.S ++++ b/xen/arch/x86/xen.lds.S +@@ -304,7 +304,7 @@ SECTIONS + } :text + #endif + +-#ifndef XEN_BUILD_PE ++#ifndef XEN_BUILD_EFI + efi = .; + #endif + +-- +2.18.0 + Index: head/emulators/xen-kernel411/files/0002-x86-mtrr-split-enabled-field-into-two-boolean-flags.patch =================================================================== --- head/emulators/xen-kernel411/files/0002-x86-mtrr-split-enabled-field-into-two-boolean-flags.patch +++ head/emulators/xen-kernel411/files/0002-x86-mtrr-split-enabled-field-into-two-boolean-flags.patch @@ -0,0 +1,198 @@ +From 8ebc60e0274b770743e59256f665789d4308b188 Mon Sep 17 00:00:00 2001 +From: Jan Beulich +Date: Mon, 16 Jul 2018 15:09:12 +0200 +Subject: [PATCH 2/7] x86/mtrr: split "enabled" field into two boolean flags +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The code hopefully is more readable this way. + +Also switch have_fixed to bool, seeing that it already is used as a +boolean. + +Signed-off-by: Jan Beulich +[switched to use MASK_*] +Signed-off-by: Roger Pau Monné +--- + xen/arch/x86/cpu/mtrr/generic.c | 14 +++++++++----- + xen/arch/x86/hvm/hvm.c | 6 ++++-- + xen/arch/x86/hvm/mtrr.c | 23 ++++++++++++++--------- + xen/include/asm-x86/msr-index.h | 2 ++ + xen/include/asm-x86/mtrr.h | 5 +++-- + 5 files changed, 32 insertions(+), 18 deletions(-) + +diff --git a/xen/arch/x86/cpu/mtrr/generic.c b/xen/arch/x86/cpu/mtrr/generic.c +index 7ba0c3f0fe..09763654be 100644 +--- a/xen/arch/x86/cpu/mtrr/generic.c ++++ b/xen/arch/x86/cpu/mtrr/generic.c +@@ -80,7 +80,8 @@ void __init get_mtrr_state(void) + + rdmsrl(MSR_MTRRdefType, msr_content); + mtrr_state.def_type = (msr_content & 0xff); +- mtrr_state.enabled = (msr_content & 0xc00) >> 10; ++ mtrr_state.enabled = MASK_EXTR(msr_content, MTRRdefType_E); ++ mtrr_state.fixed_enabled = MASK_EXTR(msr_content, MTRRdefType_FE); + + /* Store mtrr_cap for HVM MTRR virtualisation. */ + rdmsrl(MSR_MTRRcap, mtrr_state.mtrr_cap); +@@ -159,7 +160,7 @@ static void __init print_mtrr_state(const char *level) + unsigned int base = 0, step = 0x10000; + + printk("%sMTRR fixed ranges %sabled:\n", level, +- mtrr_state.enabled & 1 ? "en" : "dis"); ++ mtrr_state.fixed_enabled ? "en" : "dis"); + for (; block->ranges; ++block, step >>= 2) { + for (i = 0; i < block->ranges; ++i, fr += 8) { + print_fixed(base, step, fr, level); +@@ -169,7 +170,7 @@ static void __init print_mtrr_state(const char *level) + print_fixed_last(level); + } + printk("%sMTRR variable ranges %sabled:\n", level, +- mtrr_state.enabled & 2 ? "en" : "dis"); ++ mtrr_state.enabled ? "en" : "dis"); + width = (paddr_bits - PAGE_SHIFT + 3) / 4; + + for (i = 0; i < num_var_ranges; ++i) { +@@ -383,8 +384,11 @@ static unsigned long set_mtrr_state(void) + /* Set_mtrr_restore restores the old value of MTRRdefType, + so to set it we fiddle with the saved value */ + if ((deftype & 0xff) != mtrr_state.def_type +- || ((deftype & 0xc00) >> 10) != mtrr_state.enabled) { +- deftype = (deftype & ~0xcff) | mtrr_state.def_type | (mtrr_state.enabled << 10); ++ || MASK_EXTR(deftype, MTRRdefType_E) != mtrr_state.enabled ++ || MASK_EXTR(deftype, MTRRdefType_FE) != mtrr_state.fixed_enabled) { ++ deftype = (deftype & ~0xcff) | mtrr_state.def_type | ++ MASK_INSR(mtrr_state.enabled, MTRRdefType_E) | ++ MASK_INSR(mtrr_state.fixed_enabled, MTRRdefType_FE); + change_mask |= MTRR_CHANGE_MASK_DEFTYPE; + } + +diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c +index e022f5ab0e..3e2abeb274 100644 +--- a/xen/arch/x86/hvm/hvm.c ++++ b/xen/arch/x86/hvm/hvm.c +@@ -3453,8 +3453,10 @@ int hvm_msr_read_intercept(unsigned int msr, uint64_t *msr_content) + case MSR_MTRRdefType: + if ( !d->arch.cpuid->basic.mtrr ) + goto gp_fault; +- *msr_content = v->arch.hvm_vcpu.mtrr.def_type +- | (v->arch.hvm_vcpu.mtrr.enabled << 10); ++ *msr_content = v->arch.hvm_vcpu.mtrr.def_type | ++ MASK_INSR(v->arch.hvm_vcpu.mtrr.enabled, MTRRdefType_E) | ++ MASK_INSR(v->arch.hvm_vcpu.mtrr.fixed_enabled, ++ MTRRdefType_FE); + break; + case MSR_MTRRfix64K_00000: + if ( !d->arch.cpuid->basic.mtrr ) +diff --git a/xen/arch/x86/hvm/mtrr.c b/xen/arch/x86/hvm/mtrr.c +index a636012388..d74b363851 100644 +--- a/xen/arch/x86/hvm/mtrr.c ++++ b/xen/arch/x86/hvm/mtrr.c +@@ -195,11 +195,11 @@ static int get_mtrr_type(const struct mtrr_state *m, + uint64_t mask = -(uint64_t)PAGE_SIZE << order; + unsigned int seg, num_var_ranges = MASK_EXTR(m->mtrr_cap, MTRRcap_VCNT); + +- if ( unlikely(!(m->enabled & 0x2)) ) ++ if ( unlikely(!m->enabled) ) + return MTRR_TYPE_UNCACHABLE; + + pa &= mask; +- if ( (pa < 0x100000) && (m->enabled & 1) ) ++ if ( (pa < 0x100000) && m->fixed_enabled ) + { + /* Fixed range MTRR takes effect. */ + uint32_t addr = (uint32_t)pa, index; +@@ -391,7 +391,8 @@ bool_t mtrr_def_type_msr_set(struct domain *d, struct mtrr_state *m, + uint64_t msr_content) + { + uint8_t def_type = msr_content & 0xff; +- uint8_t enabled = (msr_content >> 10) & 0x3; ++ bool fixed_enabled = MASK_EXTR(msr_content, MTRRdefType_FE); ++ bool enabled = MASK_EXTR(msr_content, MTRRdefType_E); + + if ( unlikely(!valid_mtrr_type(def_type)) ) + { +@@ -406,10 +407,12 @@ bool_t mtrr_def_type_msr_set(struct domain *d, struct mtrr_state *m, + return 0; + } + +- if ( m->enabled != enabled || m->def_type != def_type ) ++ if ( m->enabled != enabled || m->fixed_enabled != fixed_enabled || ++ m->def_type != def_type ) + { + m->enabled = enabled; + m->def_type = def_type; ++ m->fixed_enabled = fixed_enabled; + memory_type_changed(d); + } + +@@ -478,10 +481,10 @@ bool mtrr_pat_not_equal(const struct vcpu *vd, const struct vcpu *vs) + const struct mtrr_state *md = &vd->arch.hvm_vcpu.mtrr; + const struct mtrr_state *ms = &vs->arch.hvm_vcpu.mtrr; + +- if ( (md->enabled ^ ms->enabled) & 2 ) ++ if ( md->enabled != ms->enabled ) + return true; + +- if ( md->enabled & 2 ) ++ if ( md->enabled ) + { + unsigned int num_var_ranges = MASK_EXTR(md->mtrr_cap, MTRRcap_VCNT); + +@@ -490,10 +493,10 @@ bool mtrr_pat_not_equal(const struct vcpu *vd, const struct vcpu *vs) + return true; + + /* Test fixed ranges. */ +- if ( (md->enabled ^ ms->enabled) & 1 ) ++ if ( md->fixed_enabled != ms->fixed_enabled ) + return true; + +- if ( (md->enabled & 1) && ++ if ( md->fixed_enabled && + memcmp(md->fixed_ranges, ms->fixed_ranges, + sizeof(md->fixed_ranges)) ) + return true; +@@ -681,7 +684,9 @@ static int hvm_save_mtrr_msr(struct domain *d, hvm_domain_context_t *h) + const struct mtrr_state *mtrr_state = &v->arch.hvm_vcpu.mtrr; + struct hvm_hw_mtrr hw_mtrr = { + .msr_mtrr_def_type = mtrr_state->def_type | +- (mtrr_state->enabled << 10), ++ MASK_INSR(mtrr_state->fixed_enabled, ++ MTRRdefType_FE) | ++ MASK_INSR(mtrr_state->enabled, MTRRdefType_E), + .msr_mtrr_cap = mtrr_state->mtrr_cap, + }; + unsigned int i; +diff --git a/xen/include/asm-x86/msr-index.h b/xen/include/asm-x86/msr-index.h +index 95bb66916c..94bccf73a1 100644 +--- a/xen/include/asm-x86/msr-index.h ++++ b/xen/include/asm-x86/msr-index.h +@@ -98,6 +98,8 @@ + #define MSR_MTRRfix4K_F0000 0x0000026e + #define MSR_MTRRfix4K_F8000 0x0000026f + #define MSR_MTRRdefType 0x000002ff ++#define MTRRdefType_FE (1u << 10) ++#define MTRRdefType_E (1u << 11) + + #define MSR_IA32_DEBUGCTLMSR 0x000001d9 + #define IA32_DEBUGCTLMSR_LBR (1<<0) /* Last Branch Record */ +diff --git a/xen/include/asm-x86/mtrr.h b/xen/include/asm-x86/mtrr.h +index 5cdc5d4fe3..b1f7af6396 100644 +--- a/xen/include/asm-x86/mtrr.h ++++ b/xen/include/asm-x86/mtrr.h +@@ -50,8 +50,9 @@ struct mtrr_var_range { + struct mtrr_state { + struct mtrr_var_range *var_ranges; + mtrr_type fixed_ranges[NUM_FIXED_RANGES]; +- unsigned char enabled; +- unsigned char have_fixed; ++ bool enabled; ++ bool fixed_enabled; ++ bool have_fixed; + mtrr_type def_type; + + u64 mtrr_cap; +-- +2.18.0 + Index: head/emulators/xen-kernel411/files/0003-hvm-mtrr-add-emacs-local-variables-block-with-format.patch =================================================================== --- head/emulators/xen-kernel411/files/0003-hvm-mtrr-add-emacs-local-variables-block-with-format.patch +++ head/emulators/xen-kernel411/files/0003-hvm-mtrr-add-emacs-local-variables-block-with-format.patch @@ -0,0 +1,35 @@ +From de3b31312248646394a78b837b8a02f2483cad02 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= +Date: Mon, 16 Jul 2018 15:09:50 +0200 +Subject: [PATCH 3/7] hvm/mtrr: add emacs local variables block with formatting + info +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Roger Pau Monné +--- + xen/arch/x86/hvm/mtrr.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/xen/arch/x86/hvm/mtrr.c b/xen/arch/x86/hvm/mtrr.c +index d74b363851..7db0d473e8 100644 +--- a/xen/arch/x86/hvm/mtrr.c ++++ b/xen/arch/x86/hvm/mtrr.c +@@ -871,3 +871,13 @@ int epte_get_entry_emt(struct domain *d, unsigned long gfn, mfn_t mfn, + + return MTRR_TYPE_UNCACHABLE; + } ++ ++/* ++ * Local variables: ++ * mode: C ++ * c-file-style: "BSD" ++ * c-basic-offset: 4 ++ * tab-width: 4 ++ * indent-tabs-mode: nil ++ * End: ++ */ +-- +2.18.0 + Index: head/emulators/xen-kernel411/files/0004-hvm-mtrr-use-the-hardware-number-of-variable-ranges-.patch =================================================================== --- head/emulators/xen-kernel411/files/0004-hvm-mtrr-use-the-hardware-number-of-variable-ranges-.patch +++ head/emulators/xen-kernel411/files/0004-hvm-mtrr-use-the-hardware-number-of-variable-ranges-.patch @@ -0,0 +1,135 @@ +From e520d9e144ac4766aaa7ce55f1c49191a5ddefc8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= +Date: Mon, 16 Jul 2018 15:10:09 +0200 +Subject: [PATCH 4/7] hvm/mtrr: use the hardware number of variable ranges for + Dom0 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Expand the size of the variable ranges array to match the size of the +underlying hardware, this is a preparatory change for copying the +hardware MTRR state for Dom0. + +Signed-off-by: Roger Pau Monné +Reviewed-by: Jan Beulich +--- + xen/arch/x86/hvm/hvm.c | 12 +++++++++--- + xen/arch/x86/hvm/mtrr.c | 31 +++++++++++++++++++++++++++++-- + xen/include/asm-x86/mtrr.h | 3 +++ + 3 files changed, 41 insertions(+), 5 deletions(-) + +diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c +index 3e2abeb274..c7eb943ed3 100644 +--- a/xen/arch/x86/hvm/hvm.c ++++ b/xen/arch/x86/hvm/hvm.c +@@ -3476,10 +3476,13 @@ int hvm_msr_read_intercept(unsigned int msr, uint64_t *msr_content) + index = msr - MSR_MTRRfix4K_C0000; + *msr_content = fixed_range_base[index + 3]; + break; +- case MSR_IA32_MTRR_PHYSBASE(0)...MSR_IA32_MTRR_PHYSMASK(MTRR_VCNT-1): ++ case MSR_IA32_MTRR_PHYSBASE(0)...MSR_IA32_MTRR_PHYSMASK(MTRR_VCNT_MAX - 1): + if ( !d->arch.cpuid->basic.mtrr ) + goto gp_fault; + index = msr - MSR_IA32_MTRR_PHYSBASE(0); ++ if ( (index / 2) >= ++ MASK_EXTR(v->arch.hvm_vcpu.mtrr.mtrr_cap, MTRRcap_VCNT) ) ++ goto gp_fault; + *msr_content = var_range_base[index]; + break; + +@@ -3637,10 +3640,13 @@ int hvm_msr_write_intercept(unsigned int msr, uint64_t msr_content, + index, msr_content) ) + goto gp_fault; + break; +- case MSR_IA32_MTRR_PHYSBASE(0)...MSR_IA32_MTRR_PHYSMASK(MTRR_VCNT-1): ++ case MSR_IA32_MTRR_PHYSBASE(0)...MSR_IA32_MTRR_PHYSMASK(MTRR_VCNT_MAX - 1): + if ( !d->arch.cpuid->basic.mtrr ) + goto gp_fault; +- if ( !mtrr_var_range_msr_set(v->domain, &v->arch.hvm_vcpu.mtrr, ++ index = msr - MSR_IA32_MTRR_PHYSBASE(0); ++ if ( ((index / 2) >= ++ MASK_EXTR(v->arch.hvm_vcpu.mtrr.mtrr_cap, MTRRcap_VCNT)) || ++ !mtrr_var_range_msr_set(v->domain, &v->arch.hvm_vcpu.mtrr, + msr, msr_content) ) + goto gp_fault; + break; +diff --git a/xen/arch/x86/hvm/mtrr.c b/xen/arch/x86/hvm/mtrr.c +index 7db0d473e8..4021d972fe 100644 +--- a/xen/arch/x86/hvm/mtrr.c ++++ b/xen/arch/x86/hvm/mtrr.c +@@ -154,14 +154,26 @@ uint8_t pat_type_2_pte_flags(uint8_t pat_type) + int hvm_vcpu_cacheattr_init(struct vcpu *v) + { + struct mtrr_state *m = &v->arch.hvm_vcpu.mtrr; ++ unsigned int num_var_ranges = ++ is_hardware_domain(v->domain) ? MASK_EXTR(mtrr_state.mtrr_cap, ++ MTRRcap_VCNT) ++ : MTRR_VCNT; ++ ++ if ( num_var_ranges > MTRR_VCNT_MAX ) ++ { ++ ASSERT(is_hardware_domain(v->domain)); ++ printk("WARNING: limited Dom%u variable range MTRRs from %u to %u\n", ++ v->domain->domain_id, num_var_ranges, MTRR_VCNT_MAX); ++ num_var_ranges = MTRR_VCNT_MAX; ++ } + + memset(m, 0, sizeof(*m)); + +- m->var_ranges = xzalloc_array(struct mtrr_var_range, MTRR_VCNT); ++ m->var_ranges = xzalloc_array(struct mtrr_var_range, num_var_ranges); + if ( m->var_ranges == NULL ) + return -ENOMEM; + +- m->mtrr_cap = (1u << 10) | (1u << 8) | MTRR_VCNT; ++ m->mtrr_cap = (1u << 10) | (1u << 8) | num_var_ranges; + + v->arch.hvm_vcpu.pat_cr = + ((uint64_t)PAT_TYPE_WRBACK) | /* PAT0: WB */ +@@ -448,6 +460,12 @@ bool_t mtrr_var_range_msr_set( + uint64_t *var_range_base = (uint64_t*)m->var_ranges; + + index = msr - MSR_IA32_MTRR_PHYSBASE(0); ++ if ( (index / 2) >= MASK_EXTR(m->mtrr_cap, MTRRcap_VCNT) ) ++ { ++ ASSERT_UNREACHABLE(); ++ return 0; ++ } ++ + if ( var_range_base[index] == msr_content ) + return 1; + +@@ -691,6 +709,15 @@ static int hvm_save_mtrr_msr(struct domain *d, hvm_domain_context_t *h) + }; + unsigned int i; + ++ if ( MASK_EXTR(hw_mtrr.msr_mtrr_cap, MTRRcap_VCNT) > ++ (ARRAY_SIZE(hw_mtrr.msr_mtrr_var) / 2) ) ++ { ++ dprintk(XENLOG_G_ERR, ++ "HVM save: %pv: too many (%lu) variable range MTRRs\n", ++ v, MASK_EXTR(hw_mtrr.msr_mtrr_cap, MTRRcap_VCNT)); ++ return -EINVAL; ++ } ++ + hvm_get_guest_pat(v, &hw_mtrr.msr_pat_cr); + + for ( i = 0; i < MASK_EXTR(hw_mtrr.msr_mtrr_cap, MTRRcap_VCNT); i++ ) +diff --git a/xen/include/asm-x86/mtrr.h b/xen/include/asm-x86/mtrr.h +index b1f7af6396..72d0690e28 100644 +--- a/xen/include/asm-x86/mtrr.h ++++ b/xen/include/asm-x86/mtrr.h +@@ -39,6 +39,9 @@ typedef u8 mtrr_type; + #define MTRR_PHYSBASE_SHIFT 12 + /* Number of variable range MSR pairs we emulate for HVM guests: */ + #define MTRR_VCNT 8 ++/* Maximum number of variable range MSR pairs if FE is supported. */ ++#define MTRR_VCNT_MAX ((MSR_MTRRfix64K_00000 - \ ++ MSR_IA32_MTRR_PHYSBASE(0)) / 2) + + struct mtrr_var_range { + uint64_t base; +-- +2.18.0 + Index: head/emulators/xen-kernel411/files/0005-hvm-mtrr-copy-hardware-state-for-Dom0.patch =================================================================== --- head/emulators/xen-kernel411/files/0005-hvm-mtrr-copy-hardware-state-for-Dom0.patch +++ head/emulators/xen-kernel411/files/0005-hvm-mtrr-copy-hardware-state-for-Dom0.patch @@ -0,0 +1,59 @@ +From d8b0840bb90711e93b6994e50c728bbbf0f012a0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= +Date: Mon, 16 Jul 2018 15:10:49 +0200 +Subject: [PATCH 5/7] hvm/mtrr: copy hardware state for Dom0 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Copy the state found on the hardware when creating a PVH Dom0. Since +the memory map provided to a PVH Dom0 is based on the native one using +the same set of MTRR ranges should provide Dom0 with a sane MTRR state +without having to manually build it in Xen. + +Signed-off-by: Roger Pau Monné +Reviewed-by: Jan Beulich +--- + xen/arch/x86/hvm/mtrr.c | 26 ++++++++++++++++++++++++++ + 1 file changed, 26 insertions(+) + +diff --git a/xen/arch/x86/hvm/mtrr.c b/xen/arch/x86/hvm/mtrr.c +index 4021d972fe..2b00993a7b 100644 +--- a/xen/arch/x86/hvm/mtrr.c ++++ b/xen/arch/x86/hvm/mtrr.c +@@ -185,6 +185,32 @@ int hvm_vcpu_cacheattr_init(struct vcpu *v) + ((uint64_t)PAT_TYPE_UC_MINUS << 48) | /* PAT6: UC- */ + ((uint64_t)PAT_TYPE_UNCACHABLE << 56); /* PAT7: UC */ + ++ if ( is_hardware_domain(v->domain) ) ++ { ++ /* Copy values from the host. */ ++ struct domain *d = v->domain; ++ unsigned int i; ++ ++ if ( mtrr_state.have_fixed ) ++ for ( i = 0; i < NUM_FIXED_MSR; i++ ) ++ mtrr_fix_range_msr_set(d, m, i, ++ ((uint64_t *)mtrr_state.fixed_ranges)[i]); ++ ++ for ( i = 0; i < num_var_ranges; i++ ) ++ { ++ mtrr_var_range_msr_set(d, m, MSR_IA32_MTRR_PHYSBASE(i), ++ mtrr_state.var_ranges[i].base); ++ mtrr_var_range_msr_set(d, m, MSR_IA32_MTRR_PHYSMASK(i), ++ mtrr_state.var_ranges[i].mask); ++ } ++ ++ mtrr_def_type_msr_set(d, m, ++ mtrr_state.def_type | ++ MASK_INSR(mtrr_state.fixed_enabled, ++ MTRRdefType_FE) | ++ MASK_INSR(mtrr_state.enabled, MTRRdefType_E)); ++ } ++ + return 0; + } + +-- +2.18.0 + Index: head/emulators/xen-kernel411/files/0006-libxc-pvh-set-default-MTRR-type-to-write-back.patch =================================================================== --- head/emulators/xen-kernel411/files/0006-libxc-pvh-set-default-MTRR-type-to-write-back.patch +++ head/emulators/xen-kernel411/files/0006-libxc-pvh-set-default-MTRR-type-to-write-back.patch @@ -0,0 +1,104 @@ +From a1c1ae0b0f5b30b5b928e45349086ec00930bccf Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= +Date: Mon, 16 Jul 2018 15:11:22 +0200 +Subject: [PATCH 6/7] libxc/pvh: set default MTRR type to write-back +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +And enable MTRR. This allows to provide a sane initial MTRR state for +PVH DomUs. This will have to be expanded when pci-passthrough support +is added to PVH guests, so that MMIO regions of devices are set as +UC. + +Note that initial MTRR setup is done by hvmloader for HVM guests, +that's not used by PVH guests. + +Signed-off-by: Roger Pau Monné +Acked-by: Wei Liu +--- + tools/libxc/xc_dom_x86.c | 44 ++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 44 insertions(+) + +diff --git a/tools/libxc/xc_dom_x86.c b/tools/libxc/xc_dom_x86.c +index e33a28847d..d28ff4d7e9 100644 +--- a/tools/libxc/xc_dom_x86.c ++++ b/tools/libxc/xc_dom_x86.c +@@ -53,6 +53,9 @@ + #define X86_CR0_PE 0x01 + #define X86_CR0_ET 0x10 + ++#define MTRR_TYPE_WRBACK 6 ++#define MTRR_DEF_TYPE_ENABLE (1u << 11) ++ + #define SPECIALPAGE_PAGING 0 + #define SPECIALPAGE_ACCESS 1 + #define SPECIALPAGE_SHARING 2 +@@ -931,6 +934,20 @@ static int vcpu_x86_64(struct xc_dom_image *dom) + return rc; + } + ++const static void *hvm_get_save_record(const void *ctx, unsigned int type, ++ unsigned int instance) ++{ ++ const struct hvm_save_descriptor *header; ++ ++ for ( header = ctx; ++ header->typecode != HVM_SAVE_CODE(END); ++ ctx += sizeof(*header) + header->length, header = ctx ) ++ if ( header->typecode == type && header->instance == instance ) ++ return ctx + sizeof(*header); ++ ++ return NULL; ++} ++ + static int vcpu_hvm(struct xc_dom_image *dom) + { + struct { +@@ -938,9 +955,12 @@ static int vcpu_hvm(struct xc_dom_image *dom) + HVM_SAVE_TYPE(HEADER) header; + struct hvm_save_descriptor cpu_d; + HVM_SAVE_TYPE(CPU) cpu; ++ struct hvm_save_descriptor mtrr_d; ++ HVM_SAVE_TYPE(MTRR) mtrr; + struct hvm_save_descriptor end_d; + HVM_SAVE_TYPE(END) end; + } bsp_ctx; ++ const HVM_SAVE_TYPE(MTRR) *mtrr_record; + uint8_t *full_ctx = NULL; + int rc; + +@@ -1014,6 +1034,30 @@ static int vcpu_hvm(struct xc_dom_image *dom) + if ( dom->start_info_seg.pfn ) + bsp_ctx.cpu.rbx = dom->start_info_seg.pfn << PAGE_SHIFT; + ++ /* Set the MTRR. */ ++ bsp_ctx.mtrr_d.typecode = HVM_SAVE_CODE(MTRR); ++ bsp_ctx.mtrr_d.instance = 0; ++ bsp_ctx.mtrr_d.length = HVM_SAVE_LENGTH(MTRR); ++ ++ mtrr_record = hvm_get_save_record(full_ctx, HVM_SAVE_CODE(MTRR), 0); ++ if ( !mtrr_record ) ++ { ++ xc_dom_panic(dom->xch, XC_INTERNAL_ERROR, ++ "%s: unable to get MTRR save record", __func__); ++ goto out; ++ } ++ ++ memcpy(&bsp_ctx.mtrr, mtrr_record, sizeof(bsp_ctx.mtrr)); ++ ++ /* TODO: maybe this should be a firmware option instead? */ ++ if ( !dom->device_model ) ++ /* ++ * Enable MTRR, set default type to WB. ++ * TODO: add MMIO areas as UC when passthrough is supported. ++ */ ++ bsp_ctx.mtrr.msr_mtrr_def_type = MTRR_TYPE_WRBACK | ++ MTRR_DEF_TYPE_ENABLE; ++ + /* Set the end descriptor. */ + bsp_ctx.end_d.typecode = HVM_SAVE_CODE(END); + bsp_ctx.end_d.instance = 0; +-- +2.18.0 + Index: head/emulators/xen-kernel411/files/0007-docs-pvh-document-initial-MTRR-state.patch =================================================================== --- head/emulators/xen-kernel411/files/0007-docs-pvh-document-initial-MTRR-state.patch +++ head/emulators/xen-kernel411/files/0007-docs-pvh-document-initial-MTRR-state.patch @@ -0,0 +1,44 @@ +From 565efbc8a7145c47379543edfcc84fc4f4dd6d83 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= +Date: Mon, 16 Jul 2018 15:11:42 +0200 +Subject: [PATCH 7/7] docs/pvh: document initial MTRR state +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Provided to both Dom0 and DomUs. + +Signed-off-by: Roger Pau Monné +--- + docs/misc/pvh.markdown | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +diff --git a/docs/misc/pvh.markdown b/docs/misc/pvh.markdown +index e85fb15374..1c9a00b48a 100644 +--- a/docs/misc/pvh.markdown ++++ b/docs/misc/pvh.markdown +@@ -92,3 +92,21 @@ event channels. Delivery of those interrupts can be configured in the same way + as HVM guests, check xen/include/public/hvm/params.h and + xen/include/public/hvm/hvm\_op.h for more information about available delivery + methods. ++ ++## MTRR ## ++ ++### Unprivileged guests ### ++ ++PVH guests are currently booted with the default MTRR type set to write-back ++and MTRR enabled. This allows DomUs to start with a sane MTRR state. Note that ++this will have to be revisited when pci-passthrough is added to PVH in order to ++set MMIO regions as UC. ++ ++Xen guarantees that RAM regions will always have the WB cache type set in the ++initial MTRR state, either set by the default MTRR type or by other means. ++ ++### Hardware domain ### ++ ++A PVH hardware domain is booted with the same MTRR state as the one found on ++the host. This is done because the hardware domain memory map is already a ++modified copy of the host memory map, so the same MTRR setup should work. +-- +2.18.0 + Index: head/emulators/xen-kernel411/files/xen.4th =================================================================== --- head/emulators/xen-kernel411/files/xen.4th +++ head/emulators/xen-kernel411/files/xen.4th @@ -0,0 +1,99 @@ +\ Copyright (c) 2015 Devin Teske +\ All rights reserved. +\ +\ Redistribution and use in source and binary forms, with or without +\ modification, are permitted provided that the following conditions +\ are met: +\ 1. Redistributions of source code must retain the above copyright +\ notice, this list of conditions and the following disclaimer. +\ 2. Redistributions in binary form must reproduce the above copyright +\ notice, this list of conditions and the following disclaimer in the +\ documentation and/or other materials provided with the distribution. +\ +\ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +\ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +\ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +\ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +\ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +\ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +\ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +\ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +\ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +\ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +\ SUCH DAMAGE. +\ +\ $FreeBSD$ + +create xenkerndefault 64 allot +0 xenkerndefault c! + +also menu-command-helpers +also menu-namespace + +: init_xen_active ( N -- N ) + s" [X]en Kernel.. off" 2 pick menu_caption[x] setenv + s" [X]en Kernel.. On" 2 pick toggled_text[x] setenv + s" toggle_xen" 2 pick menu_command[x] setenv + s" 120" 2 pick menu_keycode[x] setenv + s" ^[1mX^[men Kernel.. ^[34;1mOff^[m" 2 pick ansi_caption[x] setenv + s" ^[1mX^[men Kernel.. ^[32;7mOn^[m" 2 pick toggled_ansi[x] setenv +; + +: init_xen_inactive ( N -- N ) + s" Xen Kernel.. N/A" 2dup + 4 pick menu_caption[x] setenv + 2 pick ansi_caption[x] setenv + s" true" 2 pick menu_command[x] setenv +; + +: init_xen ( -- ) + s" optionsmenu_options" getenv 0> if + c@ dup [char] 0 > over [char] 9 < and false = if + drop [char] 0 + then + 1+ + else + [char] 1 + then + begin + dup [char] 8 > if + false ( break ) + else + dup s" optionsmenu_caption[x]" 20 +c! getenv -1 = if + false ( break ) + else + drop true + then + then + while + 1+ + repeat + + s" xen_kernel" getenv dup -1 <> over 0> and if + xenkerndefault 1+ 0 2swap strcat swap 1- c! + init_xen_active ( n -- n ) + toggle_menuitem ( n -- n ) + else + drop + xenkerndefault c@ 0<> if + init_xen_active ( n -- n ) + else + init_xen_inactive ( n -- n ) + then + then +; + +: toggle_xen ( N -- N TRUE ) + toggle_menuitem ( n -- n ) + menu-redraw + + dup toggle_stateN @ 0= if + s" xen_kernel" unsetenv + else + xenkerndefault count s" xen_kernel" setenv + then + + TRUE \ loop menu again +; + +set optionsmenu_init="$optionsmenu_init init_xen" Index: head/emulators/xen-kernel411/pkg-descr =================================================================== --- head/emulators/xen-kernel411/pkg-descr +++ head/emulators/xen-kernel411/pkg-descr @@ -0,0 +1,10 @@ +The Xen Project hypervisor is an open-source type-1 or baremetal hypervisor, +which makes it possible to run many instances of an operating system or indeed +different operating systems in parallel on a single machine (or host). The Xen +Project hypervisor is the only type-1 hypervisor that is available as open +source. It is used as the basis for a number of different commercial and open +source applications, such as: server virtualization, Infrastructure as a Service +(IaaS), desktop virtualization, security applications, embedded and hardware +appliances + +WWW: http://www.xenproject.org/ Index: head/emulators/xen-kernel411/pkg-message =================================================================== --- head/emulators/xen-kernel411/pkg-message +++ head/emulators/xen-kernel411/pkg-message @@ -0,0 +1,18 @@ +Please add the following entries in order to boot the xen kernel + +In /etc/sysctl.conf: + vm.max_wired=-1 + +In /etc/ttys: + xc0 "/usr/libexec/getty Pc" xterm on secure + +In /boot/loader.conf for a dom0 with 2G memory and 4 vcpus: + hw.pci.mcfg=0 + xen_kernel="/boot/xen" + xen_cmdline="dom0_mem=2048M dom0_max_vcpus=4 dom0=pvh com1=115200,8n1 guest_loglvl=all loglvl=all" + +Add to the above xen_cmdline in order to activate the serial console: + console=com1 + +In /boot/menu.rc.local: + try-include /boot/xen.4th Index: head/sysutils/xen-tools411/Makefile =================================================================== --- head/sysutils/xen-tools411/Makefile +++ head/sysutils/xen-tools411/Makefile @@ -0,0 +1,91 @@ +# $FreeBSD$ + +PORTNAME= xen +PKGNAMESUFFIX= -tools +PORTVERSION= 4.11.0 +PORTREVISION= 0 +CATEGORIES= sysutils emulators +MASTER_SITES= http://downloads.xenproject.org/release/xen/${PORTVERSION}/ + +MAINTAINER= royger@FreeBSD.org +COMMENT= Xen management tools + +LICENSE= GPLv2 LGPL3 +LICENSE_COMB= multi + +BROKEN_FreeBSD_10= does not build + +LIB_DEPENDS= libyajl.so:devel/yajl \ + liblzo2.so:archivers/lzo2 \ + libpixman-1.so:x11/pixman \ + libargp.so:devel/argp-standalone +DOCS_BUILD_DEPENDS=markdown>0:textproc/markdown \ + hs-pandoc>0:textproc/hs-pandoc +BUILD_DEPENDS= seabios>0:misc/seabios +RUN_DEPENDS= seabios>0:misc/seabios + +OPTIONS_DEFINE= DOCS + +ONLY_FOR_ARCHS= amd64 +ONLY_FOR_ARCHS_REASON= "not yet ported to anything other than amd64" + +USES= cpe gettext gmake libtool localbase:ldflags perl5 pkgconfig \ + python:2.7 shebangfix +USE_GNOME= glib20 +USE_LDCONFIG= yes +GNU_CONFIGURE= yes +# Set ARCH=x86_64 in order to overwrite the environment ARCH=amd64 +MAKE_ARGS= clang=y ARCH=x86_64 + +# Set correct include paths taking /usr/local into account. +EXTRA_PATCHES= ${FILESDIR}/0001-build-fix-include-paths-in-FreeBSD.patch:-p1 +# Build with lld (LLVM linker) +EXTRA_PATCHES+= ${FILESDIR}/0001-x86-replace-usage-in-the-linker-script.patch:-p1 \ + ${FILESDIR}/0001-x86-efi-move-the-logic-to-detect-PE-build-support.patch:-p1 \ + ${FILESDIR}/0002-x86-efi-split-compiler-vs-linker-support.patch:-p1 +# Fix docs build +EXTRA_PATCHES+= ${FILESDIR}/0001-docs-use-the-make-wildcard-function-instead-of-find.patch:-p1 + +CONFIGURE_ARGS+= --with-system-seabios=${LOCALBASE}/share/seabios/bios.bin + +SHEBANG_FILES= tools/misc/xen-ringwatch \ + tools/misc/xencov_split \ + tools/python/scripts/convert-legacy-stream \ + tools/python/scripts/verify-stream-v2 \ + tools/xenmon/xenmon.py + +ALL_TARGET= tools +DOCS_ALL_TARGET= docs +INSTALL_TARGET= install-tools +DOCS_INSTALL_TARGET= install-docs + +.include + +.if ${OPSYS} != FreeBSD +IGNORE= only supported on FreeBSD +.endif + +.if ${OSVERSION} < 1200074 +IGNORE= only supported on recent FreeBSD HEAD +.endif + +post-patch: + @for p in `ls ${FILESDIR}/*qemuu*.patch 2>/dev/null`; do \ + ${ECHO_CMD} "====> Applying $${p##*/}" ; \ + ${PATCH} -s -p1 -i $${p} -d ${WRKSRC}/tools/qemu-xen ; \ + done + +# The ports native 'build' target cannot be used because it sets CFLAGS, and +# that breaks the Xen kernel build system that's used by the tools in order to +# build the pv-shim. +do-build: + ${MAKE_CMD} -j${MAKE_JOBS_NUMBER} -C ${WRKSRC} ${MAKE_ARGS} ${ALL_TARGET} + +do-install: + ${MAKE_CMD} -j${MAKE_JOBS_NUMBER} -C ${WRKSRC} ${MAKE_ARGS} ${INSTALL_TARGET} + +post-install: + ${MKDIR} ${STAGEDIR}/var/run/xen + +.include + Index: head/sysutils/xen-tools411/distinfo =================================================================== --- head/sysutils/xen-tools411/distinfo +++ head/sysutils/xen-tools411/distinfo @@ -0,0 +1,3 @@ +TIMESTAMP = 1532353889 +SHA256 (xen-4.11.0.tar.gz) = 826e3a9f6d0eac94a825d272cc2c1294e22640ae75af906eb13920f9ad667643 +SIZE (xen-4.11.0.tar.gz) = 25131533 Index: head/sysutils/xen-tools411/files/0001-build-fix-include-paths-in-FreeBSD.patch =================================================================== --- head/sysutils/xen-tools411/files/0001-build-fix-include-paths-in-FreeBSD.patch +++ head/sysutils/xen-tools411/files/0001-build-fix-include-paths-in-FreeBSD.patch @@ -0,0 +1,33 @@ +From fe9b60476a548de1c62d6fc985e9741b04479d36 Mon Sep 17 00:00:00 2001 +From: Roger Pau Monne +Date: Mon, 2 Jul 2018 10:28:26 +0200 +Subject: [PATCH] build: fix include paths in FreeBSD +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +FreeBSD package manager uses /usr/local/ as the default install path, +but that's not part of the compiler search path, so add it using the +APPEND_{LIB/INCLUDES} variables. + +Signed-off-by: Roger Pau Monné +Acked-by: Wei Liu +--- + config/FreeBSD.mk | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/config/FreeBSD.mk b/config/FreeBSD.mk +index afeaefbde2..98a5117e60 100644 +--- a/config/FreeBSD.mk ++++ b/config/FreeBSD.mk +@@ -3,3 +3,7 @@ include $(XEN_ROOT)/config/StdGNU.mk + # No wget on FreeBSD base system + WGET = ftp + PKG_INSTALLDIR = ${prefix}/libdata/pkgconfig ++ ++# Add the default pkg install path ++APPEND_LIB += /usr/local/lib ++APPEND_INCLUDES += /usr/local/include +-- +2.18.0 + Index: head/sysutils/xen-tools411/files/0001-docs-use-the-make-wildcard-function-instead-of-find.patch =================================================================== --- head/sysutils/xen-tools411/files/0001-docs-use-the-make-wildcard-function-instead-of-find.patch +++ head/sysutils/xen-tools411/files/0001-docs-use-the-make-wildcard-function-instead-of-find.patch @@ -0,0 +1,41 @@ +From 76c9776e63305c23bca03eba933e7ce2ecbb749c Mon Sep 17 00:00:00 2001 +From: Roger Pau Monne +Date: Mon, 23 Jul 2018 17:58:35 +0200 +Subject: [PATCH] docs: use the make wildcard function instead of find +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The regexp used with find in order to list the man pages doesn't work +with FreeBSD find, so use a wildcard instead. No functional change. + +Signed-off-by: Roger Pau Monné +--- +Cc: Ian Jackson +Cc: Wei Liu +--- + docs/Makefile | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/docs/Makefile b/docs/Makefile +index b300bb6be1..fba6673db6 100644 +--- a/docs/Makefile ++++ b/docs/Makefile +@@ -8,10 +8,10 @@ DATE := $(shell date +%Y-%m-%d) + DOC_ARCHES := arm x86_32 x86_64 + + # Documentation sources to build +-MAN1SRC-y := $(sort $(shell find man/ -regex '.*\.\(pod\|markdown\)\.1' -print)) +-MAN5SRC-y := $(sort $(shell find man/ -regex '.*\.\(pod\|markdown\)\.5' -print)) +-MAN7SRC-y := $(sort $(shell find man/ -regex '.*\.\(pod\|markdown\)\.7' -print)) +-MAN8SRC-y := $(sort $(shell find man/ -regex '.*\.\(pod\|markdown\)\.8' -print)) ++MAN1SRC-y := $(sort $(wildcard man/*.pod.1 man/*.markdown.1)) ++MAN5SRC-y := $(sort $(wildcard man/*.pod.5 man/*.markdown.5)) ++MAN7SRC-y := $(sort $(wildcard man/*.pod.7 man/*.markdown.7)) ++MAN8SRC-y := $(sort $(wildcard man/*.pod.8 man/*.markdown.8)) + + MARKDOWNSRC-y := $(sort $(shell find misc -name '*.markdown' -print)) + +-- +2.18.0 + Index: head/sysutils/xen-tools411/files/0001-x86-efi-move-the-logic-to-detect-PE-build-support.patch =================================================================== --- head/sysutils/xen-tools411/files/0001-x86-efi-move-the-logic-to-detect-PE-build-support.patch +++ head/sysutils/xen-tools411/files/0001-x86-efi-move-the-logic-to-detect-PE-build-support.patch @@ -0,0 +1,129 @@ +From 9bd8e5d5cf128f5f19d8b8e74bd693c2711ce4d4 Mon Sep 17 00:00:00 2001 +From: Roger Pau Monne +Date: Fri, 20 Jul 2018 10:58:50 +0200 +Subject: [PATCH 1/2] x86/efi: move the logic to detect PE build support +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +So that it can be used by other components apart from the efi specific +code. By moving the detection code creating a dummy efi/disabled file +can be avoided. + +This is required so that the conditional used to define the efi symbol +in the linker script can be removed and instead the definition of the +efi symbol can be guarded using the preprocessor. + +The motivation behind this change is to be able to build Xen using lld +(the LLVM linker), that at least on version 6.0.0 doesn't work +properly with a DEFINED being used in a conditional expression: + +ld -melf_x86_64_fbsd -T xen.lds -N prelink.o --build-id=sha1 \ + /root/src/xen/xen/common/symbols-dummy.o -o /root/src/xen/xen/.xen-syms.0 +ld: error: xen.lds:233: symbol not found: efi + +Signed-off-by: Roger Pau Monné +Reviewed-by: Jan Beulich +--- +Cc: Jan Beulich +Cc: Andrew Cooper +Cc: Daniel Kiper +--- +Changes since v2: + - Use CFLAGS-y to append the XEN_BUILD_PE define. + - Check that XEN_BUILD_PE is set to 'y' in order to build the PE + binary. + +Changes since v1: + - Rename variable. + - Remove usage of the efi/disabled file. +--- + .gitignore | 1 - + xen/arch/x86/Makefile | 9 +++++++-- + xen/arch/x86/efi/Makefile | 11 +++-------- + xen/arch/x86/xen.lds.S | 4 +++- + 4 files changed, 13 insertions(+), 12 deletions(-) + +diff --git a/.gitignore b/.gitignore +index 55b78008c0..1625a8f0e7 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -302,7 +302,6 @@ xen/arch/x86/boot/*.bin + xen/arch/x86/boot/*.lnk + xen/arch/x86/efi.lds + xen/arch/x86/efi/check.efi +-xen/arch/x86/efi/disabled + xen/arch/x86/efi/mkreloc + xen/arch/*/efi/boot.c + xen/arch/*/efi/compat.c +diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile +index 5563c813dd..172685fb41 100644 +--- a/xen/arch/x86/Makefile ++++ b/xen/arch/x86/Makefile +@@ -163,10 +163,15 @@ EFI_LDFLAGS += --minor-image-version=$(XEN_SUBVERSION) + EFI_LDFLAGS += --major-os-version=2 --minor-os-version=0 + EFI_LDFLAGS += --major-subsystem-version=2 --minor-subsystem-version=0 + ++# Check if the build system supports PE. ++XEN_BUILD_PE := $(shell $(CC) $(filter-out $(CFLAGS-y) .%.d,$(CFLAGS)) -c efi/check.c -o efi/check.o 2>/dev/null && echo y) ++export XEN_BUILD_PE := $(if $(XEN_BUILD_PE),$(shell $(LD) -mi386pep --subsystem=10 -o efi/check.efi efi/check.o 2>/dev/null && echo y)) ++CFLAGS-$(XEN_BUILD_PE) += -DXEN_BUILD_PE ++ + $(TARGET).efi: VIRT_BASE = 0x$(shell $(NM) efi/relocs-dummy.o | sed -n 's, A VIRT_START$$,,p') + $(TARGET).efi: ALT_BASE = 0x$(shell $(NM) efi/relocs-dummy.o | sed -n 's, A ALT_START$$,,p') + # Don't use $(wildcard ...) here - at least make 3.80 expands this too early! +-$(TARGET).efi: guard = $(if $(shell echo efi/dis* | grep disabled),:) ++$(TARGET).efi: guard = $(if $(filter y,$(XEN_BUILD_PE)),,:) + + ifneq ($(build_id_linker),) + ifeq ($(call ld-ver-build-id,$(LD) $(filter -m%,$(EFI_LDFLAGS))),y) +@@ -232,6 +237,6 @@ efi/mkreloc: efi/mkreloc.c + clean:: + rm -f asm-offsets.s *.lds boot/*.o boot/*~ boot/core boot/mkelf32 + rm -f $(BASEDIR)/.xen-syms.[0-9]* boot/.*.d +- rm -f $(BASEDIR)/.xen.efi.[0-9]* efi/*.efi efi/disabled efi/mkreloc ++ rm -f $(BASEDIR)/.xen.efi.[0-9]* efi/*.efi efi/mkreloc + rm -f boot/cmdline.S boot/reloc.S boot/*.lnk boot/*.bin + rm -f note.o +diff --git a/xen/arch/x86/efi/Makefile b/xen/arch/x86/efi/Makefile +index 3be9661108..918383b325 100644 +--- a/xen/arch/x86/efi/Makefile ++++ b/xen/arch/x86/efi/Makefile +@@ -1,16 +1,11 @@ + CFLAGS += -fshort-wchar + +-efi := y$(shell rm -f disabled) +-efi := $(if $(efi),$(shell $(CC) $(filter-out $(CFLAGS-y) .%.d,$(CFLAGS)) -c check.c 2>disabled && echo y)) +-efi := $(if $(efi),$(shell $(LD) -mi386pep --subsystem=10 -o check.efi check.o 2>disabled && echo y)) +-efi := $(if $(efi),$(shell rm disabled)y) +- + %.o: %.ihex + $(OBJCOPY) -I ihex -O binary $< $@ + + boot.init.o: buildid.o + + obj-y := stub.o +-obj-$(efi) := boot.init.o compat.o relocs-dummy.o runtime.o +-extra-$(efi) += buildid.o +-nocov-$(efi) += stub.o ++obj-$(XEN_BUILD_PE) := boot.init.o compat.o relocs-dummy.o runtime.o ++extra-$(XEN_BUILD_PE) += buildid.o ++nocov-$(XEN_BUILD_PE) += stub.o +diff --git a/xen/arch/x86/xen.lds.S b/xen/arch/x86/xen.lds.S +index 326e885402..4a59467986 100644 +--- a/xen/arch/x86/xen.lds.S ++++ b/xen/arch/x86/xen.lds.S +@@ -304,7 +304,9 @@ SECTIONS + } :text + #endif + +- efi = DEFINED(efi) ? efi : .; ++#ifndef XEN_BUILD_PE ++ efi = .; ++#endif + + /* Sections to be discarded */ + /DISCARD/ : { +-- +2.18.0 + Index: head/sysutils/xen-tools411/files/0001-x86-replace-usage-in-the-linker-script.patch =================================================================== --- head/sysutils/xen-tools411/files/0001-x86-replace-usage-in-the-linker-script.patch +++ head/sysutils/xen-tools411/files/0001-x86-replace-usage-in-the-linker-script.patch @@ -0,0 +1,39 @@ +From e21ba44f771226a5f6f0ce269aabcfb019eae539 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= +Date: Thu, 12 Jul 2018 10:48:18 +0200 +Subject: [PATCH] x86: replace '||' usage in the linker script +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +With '|'. The result is the same, and the later works with lld. Fixes +the following error when building Xen with lld: + +ld -melf_x86_64_fbsd -T xen.lds -N prelink.o --build-id=sha1 \ + /root/src/xen/xen/common/symbols-dummy.o -o /root/src/xen/xen/.xen-syms.0 +ld: error: xen.lds:260: malformed number: | +>>> ASSERT(__image_base__ > (((((((((261 >> 8) * 0xffff000000000000) | (261 << 39))) + ((1 << 39) / 2)) + (64 << 30)) + (1 << 30)) + (1 << 30))) || +>>> ^ + +Signed-off-by: Roger Pau Monné +Reviewed-by: Jan Beulich +--- + xen/arch/x86/xen.lds.S | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/xen/arch/x86/xen.lds.S b/xen/arch/x86/xen.lds.S +index 70afedd31d..326e885402 100644 +--- a/xen/arch/x86/xen.lds.S ++++ b/xen/arch/x86/xen.lds.S +@@ -331,7 +331,7 @@ SECTIONS + .comment 0 : { *(.comment) } + } + +-ASSERT(__image_base__ > XEN_VIRT_START || ++ASSERT(__image_base__ > XEN_VIRT_START | + __2M_rwdata_end <= XEN_VIRT_END - NR_CPUS * PAGE_SIZE, + "Xen image overlaps stubs area") + +-- +2.18.0 + Index: head/sysutils/xen-tools411/files/0002-x86-efi-split-compiler-vs-linker-support.patch =================================================================== --- head/sysutils/xen-tools411/files/0002-x86-efi-split-compiler-vs-linker-support.patch +++ head/sysutils/xen-tools411/files/0002-x86-efi-split-compiler-vs-linker-support.patch @@ -0,0 +1,77 @@ +From fe810e9bcbca982a2f6980d119695c7e933c39bd Mon Sep 17 00:00:00 2001 +From: Roger Pau Monne +Date: Fri, 20 Jul 2018 10:58:50 +0200 +Subject: [PATCH 2/2] x86/efi: split compiler vs linker support +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +So that an ELF binary with support for EFI services will be built when +the compiler supports the MS ABI, regardless of the linker support for +PE. + +Signed-off-by: Roger Pau Monné +Reviewed-by: Jan Beulich +--- +Cc: Jan Beulich +Cc: Andrew Cooper +Cc: Daniel Kiper +--- +Changes since v1: + - New in this version. +--- + xen/arch/x86/Makefile | 9 +++++---- + xen/arch/x86/efi/Makefile | 6 +++--- + xen/arch/x86/xen.lds.S | 2 +- + 3 files changed, 9 insertions(+), 8 deletions(-) + +diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile +index 172685fb41..17e7d3fa34 100644 +--- a/xen/arch/x86/Makefile ++++ b/xen/arch/x86/Makefile +@@ -163,10 +163,11 @@ EFI_LDFLAGS += --minor-image-version=$(XEN_SUBVERSION) + EFI_LDFLAGS += --major-os-version=2 --minor-os-version=0 + EFI_LDFLAGS += --major-subsystem-version=2 --minor-subsystem-version=0 + +-# Check if the build system supports PE. +-XEN_BUILD_PE := $(shell $(CC) $(filter-out $(CFLAGS-y) .%.d,$(CFLAGS)) -c efi/check.c -o efi/check.o 2>/dev/null && echo y) +-export XEN_BUILD_PE := $(if $(XEN_BUILD_PE),$(shell $(LD) -mi386pep --subsystem=10 -o efi/check.efi efi/check.o 2>/dev/null && echo y)) +-CFLAGS-$(XEN_BUILD_PE) += -DXEN_BUILD_PE ++# Check if the compiler supports the MS ABI. ++export XEN_BUILD_EFI := $(shell $(CC) $(filter-out $(CFLAGS-y) .%.d,$(CFLAGS)) -c efi/check.c -o efi/check.o 2>/dev/null && echo y) ++# Check if the linker supports PE. ++XEN_BUILD_PE := $(if $(XEN_BUILD_EFI),$(shell $(LD) -mi386pep --subsystem=10 -o efi/check.efi efi/check.o 2>/dev/null && echo y)) ++CFLAGS-$(XEN_BUILD_EFI) += -DXEN_BUILD_EFI + + $(TARGET).efi: VIRT_BASE = 0x$(shell $(NM) efi/relocs-dummy.o | sed -n 's, A VIRT_START$$,,p') + $(TARGET).efi: ALT_BASE = 0x$(shell $(NM) efi/relocs-dummy.o | sed -n 's, A ALT_START$$,,p') +diff --git a/xen/arch/x86/efi/Makefile b/xen/arch/x86/efi/Makefile +index 918383b325..3816de2738 100644 +--- a/xen/arch/x86/efi/Makefile ++++ b/xen/arch/x86/efi/Makefile +@@ -6,6 +6,6 @@ CFLAGS += -fshort-wchar + boot.init.o: buildid.o + + obj-y := stub.o +-obj-$(XEN_BUILD_PE) := boot.init.o compat.o relocs-dummy.o runtime.o +-extra-$(XEN_BUILD_PE) += buildid.o +-nocov-$(XEN_BUILD_PE) += stub.o ++obj-$(XEN_BUILD_EFI) := boot.init.o compat.o relocs-dummy.o runtime.o ++extra-$(XEN_BUILD_EFI) += buildid.o ++nocov-$(XEN_BUILD_EFI) += stub.o +diff --git a/xen/arch/x86/xen.lds.S b/xen/arch/x86/xen.lds.S +index 4a59467986..6e9bda5109 100644 +--- a/xen/arch/x86/xen.lds.S ++++ b/xen/arch/x86/xen.lds.S +@@ -304,7 +304,7 @@ SECTIONS + } :text + #endif + +-#ifndef XEN_BUILD_PE ++#ifndef XEN_BUILD_EFI + efi = .; + #endif + +-- +2.18.0 + Index: head/sysutils/xen-tools411/pkg-descr =================================================================== --- head/sysutils/xen-tools411/pkg-descr +++ head/sysutils/xen-tools411/pkg-descr @@ -0,0 +1,5 @@ +The xl program is the new tool for managing Xen guest domains. The program can +be used to create, pause, and shutdown domains. It can also be used to list +current domains, enable or pin VCPUs, and attach or detach virtual block devices + +WWW: https://wiki.xen.org/wiki/XL Index: head/sysutils/xen-tools411/pkg-plist =================================================================== --- head/sysutils/xen-tools411/pkg-plist +++ head/sysutils/xen-tools411/pkg-plist @@ -0,0 +1,601 @@ +bin/pygrub +bin/xen-cpuid +bin/xen-detect +bin/xenalyze +bin/xencons +bin/xencov_split +bin/xenstore +bin/xenstore-chmod +bin/xenstore-control +bin/xenstore-exists +bin/xenstore-list +bin/xenstore-ls +bin/xenstore-read +bin/xenstore-rm +bin/xenstore-watch +bin/xenstore-write +bin/xentrace_format +etc/bash_completion.d/xl.sh +etc/rc.d/xencommons +etc/rc.d/xendriverdomain +%%ETCDIR%%/README +%%ETCDIR%%/README.incompatibilities +%%ETCDIR%%/cpupool +%%ETCDIR%%/oxenstored.conf +%%ETCDIR%%/scripts/block +%%ETCDIR%%/scripts/hotplugpath.sh +%%ETCDIR%%/scripts/vif-bridge +%%ETCDIR%%/xl.conf +%%ETCDIR%%/xlexample.hvm +%%ETCDIR%%/xlexample.pvlinux +include/_libxl_list.h +include/_libxl_types.h +include/_libxl_types_json.h +include/fsimage.h +include/fsimage_grub.h +include/fsimage_plugin.h +include/libxl.h +include/libxl_event.h +include/libxl_json.h +include/libxl_utils.h +include/libxl_uuid.h +include/libxlutil.h +include/xen/COPYING +include/xen/arch-arm.h +include/xen/arch-arm/hvm/save.h +include/xen/arch-x86/cpufeatureset.h +include/xen/arch-x86/cpuid.h +include/xen/arch-x86/hvm/save.h +include/xen/arch-x86/hvm/start_info.h +include/xen/arch-x86/pmu.h +include/xen/arch-x86/xen-mca.h +include/xen/arch-x86/xen-x86_32.h +include/xen/arch-x86/xen-x86_64.h +include/xen/arch-x86/xen.h +include/xen/arch-x86_32.h +include/xen/arch-x86_64.h +include/xen/callback.h +include/xen/dom0_ops.h +include/xen/domctl.h +include/xen/elfnote.h +include/xen/errno.h +include/xen/event_channel.h +include/xen/features.h +include/xen/foreign/arm32.h +include/xen/foreign/arm64.h +include/xen/foreign/x86_32.h +include/xen/foreign/x86_64.h +include/xen/grant_table.h +include/xen/hvm/dm_op.h +include/xen/hvm/e820.h +include/xen/hvm/hvm_info_table.h +include/xen/hvm/hvm_op.h +include/xen/hvm/hvm_vcpu.h +include/xen/hvm/hvm_xs_strings.h +include/xen/hvm/ioreq.h +include/xen/hvm/params.h +include/xen/hvm/pvdrivers.h +include/xen/hvm/save.h +include/xen/io/9pfs.h +include/xen/io/blkif.h +include/xen/io/console.h +include/xen/io/displif.h +include/xen/io/fbif.h +include/xen/io/fsif.h +include/xen/io/kbdif.h +include/xen/io/libxenvchan.h +include/xen/io/netif.h +include/xen/io/pciif.h +include/xen/io/protocols.h +include/xen/io/pvcalls.h +include/xen/io/ring.h +include/xen/io/sndif.h +include/xen/io/tpmif.h +include/xen/io/usbif.h +include/xen/io/vscsiif.h +include/xen/io/xenbus.h +include/xen/io/xs_wire.h +include/xen/kexec.h +include/xen/memory.h +include/xen/nmi.h +include/xen/physdev.h +include/xen/platform.h +include/xen/pmu.h +include/xen/sched.h +include/xen/sys/evtchn.h +include/xen/sys/gntdev.h +include/xen/sys/privcmd.h +include/xen/sysctl.h +include/xen/tmem.h +include/xen/trace.h +include/xen/vcpu.h +include/xen/version.h +include/xen/vm_event.h +include/xen/xen-compat.h +include/xen/xen.h +include/xen/xencomm.h +include/xen/xenoprof.h +include/xen/xsm/flask_op.h +include/xencall.h +include/xenctrl.h +include/xenctrl_compat.h +include/xendevicemodel.h +include/xenevtchn.h +include/xenforeignmemory.h +include/xengnttab.h +include/xenguest.h +include/xenstat.h +include/xenstore-compat/xs.h +include/xenstore-compat/xs_lib.h +include/xenstore.h +include/xenstore_lib.h +include/xentoolcore.h +include/xentoollog.h +include/xs.h +include/xs_lib.h +lib/debug/usr/local/lib/xen/boot/xen-shim-syms +lib/fs/ext2fs/fsimage.so +lib/fs/fat/fsimage.so +lib/fs/iso9660/fsimage.so +lib/fs/reiserfs/fsimage.so +lib/fs/ufs/fsimage.so +lib/fs/xfs/fsimage.so +lib/fs/zfs/fsimage.so +lib/libfsimage.so +lib/libfsimage.so.1.0 +lib/libfsimage.so.1.0.0 +lib/libxencall.a +lib/libxencall.so +lib/libxencall.so.1 +lib/libxencall.so.1.1 +lib/libxenctrl.a +lib/libxenctrl.so +lib/libxenctrl.so.4.11 +lib/libxenctrl.so.4.11.0 +lib/libxendevicemodel.a +lib/libxendevicemodel.so +lib/libxendevicemodel.so.1 +lib/libxendevicemodel.so.1.2 +lib/libxenevtchn.a +lib/libxenevtchn.so +lib/libxenevtchn.so.1 +lib/libxenevtchn.so.1.1 +lib/libxenforeignmemory.a +lib/libxenforeignmemory.so +lib/libxenforeignmemory.so.1 +lib/libxenforeignmemory.so.1.3 +lib/libxengnttab.a +lib/libxengnttab.so +lib/libxengnttab.so.1 +lib/libxengnttab.so.1.1 +lib/libxenguest.a +lib/libxenguest.so +lib/libxenguest.so.4.11 +lib/libxenguest.so.4.11.0 +lib/libxenlight.a +lib/libxenlight.so +lib/libxenlight.so.4.11 +lib/libxenlight.so.4.11.0 +lib/libxenstat.a +lib/libxenstat.so +lib/libxenstat.so.0 +lib/libxenstat.so.0.0 +lib/libxenstore.a +lib/libxenstore.so +lib/libxenstore.so.3.0 +lib/libxenstore.so.3.0.3 +lib/libxentoolcore.a +lib/libxentoolcore.so +lib/libxentoolcore.so.1 +lib/libxentoolcore.so.1.0 +lib/libxentoollog.a +lib/libxentoollog.so +lib/libxentoollog.so.1 +lib/libxentoollog.so.1.0 +lib/libxlutil.a +lib/libxlutil.so +lib/libxlutil.so.4.11 +lib/libxlutil.so.4.11.0 +%%PYTHON_SITELIBDIR%%/fsimage.so +%%PYTHON_SITELIBDIR%%/grub/ExtLinuxConf.py +%%PYTHON_SITELIBDIR%%/grub/ExtLinuxConf.pyc +%%PYTHON_SITELIBDIR%%/grub/GrubConf.py +%%PYTHON_SITELIBDIR%%/grub/GrubConf.pyc +%%PYTHON_SITELIBDIR%%/grub/LiloConf.py +%%PYTHON_SITELIBDIR%%/grub/LiloConf.pyc +%%PYTHON_SITELIBDIR%%/grub/__init__.py +%%PYTHON_SITELIBDIR%%/grub/__init__.pyc +%%PYTHON_SITELIBDIR%%/pygrub-0.3-py%%PYTHON_VER%%.egg-info +%%PYTHON_SITELIBDIR%%/xen-3.0-py%%PYTHON_VER%%.egg-info +%%PYTHON_SITELIBDIR%%/xen/__init__.py +%%PYTHON_SITELIBDIR%%/xen/__init__.pyc +%%PYTHON_SITELIBDIR%%/xen/lowlevel/__init__.py +%%PYTHON_SITELIBDIR%%/xen/lowlevel/__init__.pyc +%%PYTHON_SITELIBDIR%%/xen/lowlevel/xc.so +%%PYTHON_SITELIBDIR%%/xen/lowlevel/xs.so +%%PYTHON_SITELIBDIR%%/xen/migration/__init__.py +%%PYTHON_SITELIBDIR%%/xen/migration/__init__.pyc +%%PYTHON_SITELIBDIR%%/xen/migration/legacy.py +%%PYTHON_SITELIBDIR%%/xen/migration/legacy.pyc +%%PYTHON_SITELIBDIR%%/xen/migration/libxc.py +%%PYTHON_SITELIBDIR%%/xen/migration/libxc.pyc +%%PYTHON_SITELIBDIR%%/xen/migration/libxl.py +%%PYTHON_SITELIBDIR%%/xen/migration/libxl.pyc +%%PYTHON_SITELIBDIR%%/xen/migration/public.py +%%PYTHON_SITELIBDIR%%/xen/migration/public.pyc +%%PYTHON_SITELIBDIR%%/xen/migration/tests.py +%%PYTHON_SITELIBDIR%%/xen/migration/tests.pyc +%%PYTHON_SITELIBDIR%%/xen/migration/verify.py +%%PYTHON_SITELIBDIR%%/xen/migration/verify.pyc +%%PYTHON_SITELIBDIR%%/xen/migration/xl.py +%%PYTHON_SITELIBDIR%%/xen/migration/xl.pyc +lib/xen/bin/convert-legacy-stream +lib/xen/bin/libxl-save-helper +lib/xen/bin/lsevtchn +lib/xen/bin/pygrub +lib/xen/bin/readnotes +lib/xen/bin/verify-stream-v2 +lib/xen/bin/xen-init-dom0 +lib/xen/bin/xenconsole +lib/xen/bin/xenctx +lib/xen/bin/xenpaging +lib/xen/bin/xenpvnetboot +lib/xen/boot/hvmloader +lib/xen/boot/xen-shim +libdata/pkgconfig/xencall.pc +libdata/pkgconfig/xencontrol.pc +libdata/pkgconfig/xendevicemodel.pc +libdata/pkgconfig/xenevtchn.pc +libdata/pkgconfig/xenforeignmemory.pc +libdata/pkgconfig/xengnttab.pc +libdata/pkgconfig/xenguest.pc +libdata/pkgconfig/xenlight.pc +libdata/pkgconfig/xenstat.pc +libdata/pkgconfig/xenstore.pc +libdata/pkgconfig/xentoolcore.pc +libdata/pkgconfig/xentoollog.pc +libdata/pkgconfig/xlutil.pc +man/man1/xenstore-chmod.1.gz +man/man1/xenstore-ls.1.gz +man/man1/xenstore.1.gz +man/man1/xentop.1.gz +man/man1/xentrace_format.1.gz +man/man1/xl.1.gz +man/man5/xl-disk-configuration.5.gz +man/man5/xl-network-configuration.5.gz +man/man5/xl.cfg.5.gz +man/man5/xl.conf.5.gz +man/man5/xlcpupool.cfg.5.gz +man/man7/xen-pci-device-reservations.7.gz +man/man7/xen-pv-channel.7.gz +man/man7/xen-tscmode.7.gz +man/man7/xen-vbd-interface.7.gz +man/man7/xen-vtpm.7.gz +man/man7/xen-vtpmmgr.7.gz +man/man7/xl-numa-placement.7.gz +man/man8/xentrace.8.gz +sbin/flask-get-bool +sbin/flask-getenforce +sbin/flask-label-pci +sbin/flask-loadpolicy +sbin/flask-set-bool +sbin/flask-setenforce +sbin/gdbsx +sbin/kdd +sbin/oxenstored +sbin/xen-bugtool +sbin/xen-diag +sbin/xen-hptool +sbin/xen-hvmcrash +sbin/xen-hvmctx +sbin/xen-livepatch +sbin/xen-lowmemd +sbin/xen-mfndump +sbin/xen-ringwatch +sbin/xen-tmem-list-parse +sbin/xenbaked +sbin/xenconsoled +sbin/xencov +sbin/xenlockprof +sbin/xenmon.py +sbin/xenperf +sbin/xenpm +sbin/xenpmd +sbin/xenstored +sbin/xentop +sbin/xentrace +sbin/xentrace_setmask +sbin/xentrace_setsize +sbin/xenwatchdogd +sbin/xl +%%PORTDOCS%%%%DOCSDIR%%/html/SUPPORT.html +%%PORTDOCS%%%%DOCSDIR%%/html/features/feature-levelling.html +%%PORTDOCS%%%%DOCSDIR%%/html/features/index.html +%%PORTDOCS%%%%DOCSDIR%%/html/features/intel_psr_cat_cdp.html +%%PORTDOCS%%%%DOCSDIR%%/html/features/intel_psr_mba.html +%%PORTDOCS%%%%DOCSDIR%%/html/features/livepatch.html +%%PORTDOCS%%%%DOCSDIR%%/html/features/migration.html +%%PORTDOCS%%%%DOCSDIR%%/html/features/sched_credit.html +%%PORTDOCS%%%%DOCSDIR%%/html/features/sched_credit2.html +%%PORTDOCS%%%%DOCSDIR%%/html/features/sched_rtds.html +%%PORTDOCS%%%%DOCSDIR%%/html/features/template.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/.deps +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,arch-arm,hvm,save.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,arch-arm,smccc.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,arch-arm.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,callback.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,dom0_ops.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,domctl.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,elfnote.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,errno.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,event_channel.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,features.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,grant_table.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,hvm,dm_op.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,hvm,e820.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,hvm,hvm_info_table.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,hvm,hvm_op.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,hvm,hvm_vcpu.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,hvm,hvm_xs_strings.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,hvm,ioreq.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,hvm,params.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,hvm,pvdrivers.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,hvm,save.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,io,9pfs.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,io,blkif.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,io,console.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,io,displif.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,io,fbif.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,io,fsif.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,io,kbdif.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,io,libxenvchan.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,io,netif.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,io,pciif.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,io,protocols.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,io,pvcalls.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,io,ring.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,io,sndif.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,io,tpmif.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,io,usbif.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,io,vscsiif.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,io,xenbus.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,io,xs_wire.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,kexec.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,memory.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,nmi.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,physdev.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,platform.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,pmu.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,sched.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,sysctl.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,tmem.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,trace.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,vcpu.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,version.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,vm_event.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,xen-compat.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,xen.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,xencomm.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,xenoprof.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,xsm,flask_op.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,xen,errno.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/index.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/index.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/.deps +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,arch-x86,cpufeatureset.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,arch-x86,cpuid.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,arch-x86,hvm,save.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,arch-x86,hvm,start_info.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,arch-x86,pmu.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,arch-x86,xen-mca.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,arch-x86,xen-x86_32.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,arch-x86,xen.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,arch-x86_32.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,callback.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,dom0_ops.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,domctl.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,elfnote.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,errno.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,event_channel.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,features.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,grant_table.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,hvm,dm_op.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,hvm,e820.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,hvm,hvm_info_table.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,hvm,hvm_op.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,hvm,hvm_vcpu.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,hvm,hvm_xs_strings.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,hvm,ioreq.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,hvm,params.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,hvm,pvdrivers.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,hvm,save.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,io,9pfs.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,io,blkif.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,io,console.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,io,displif.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,io,fbif.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,io,fsif.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,io,kbdif.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,io,libxenvchan.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,io,netif.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,io,pciif.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,io,protocols.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,io,pvcalls.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,io,ring.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,io,sndif.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,io,tpmif.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,io,usbif.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,io,vscsiif.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,io,xenbus.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,io,xs_wire.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,kexec.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,memory.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,nmi.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,physdev.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,platform.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,pmu.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,sched.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,sysctl.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,tmem.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,trace.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,vcpu.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,version.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,vm_event.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,xen-compat.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,xen.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,xencomm.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,xenoprof.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,xsm,flask_op.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,xen,errno.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/index.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/.deps +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,arch-x86,cpufeatureset.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,arch-x86,cpuid.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,arch-x86,hvm,save.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,arch-x86,hvm,start_info.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,arch-x86,pmu.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,arch-x86,xen-mca.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,arch-x86,xen-x86_64.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,arch-x86,xen.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,arch-x86_64.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,callback.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,dom0_ops.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,domctl.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,elfnote.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,errno.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,event_channel.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,features.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,grant_table.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,hvm,dm_op.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,hvm,e820.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,hvm,hvm_info_table.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,hvm,hvm_op.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,hvm,hvm_vcpu.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,hvm,hvm_xs_strings.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,hvm,ioreq.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,hvm,params.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,hvm,pvdrivers.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,hvm,save.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,io,9pfs.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,io,blkif.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,io,console.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,io,displif.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,io,fbif.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,io,fsif.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,io,kbdif.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,io,libxenvchan.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,io,netif.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,io,pciif.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,io,protocols.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,io,pvcalls.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,io,ring.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,io,sndif.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,io,tpmif.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,io,usbif.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,io,vscsiif.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,io,xenbus.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,io,xs_wire.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,kexec.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,memory.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,nmi.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,physdev.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,platform.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,pmu.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,sched.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,sysctl.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,tmem.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,trace.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,vcpu.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,version.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,vm_event.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,xen-compat.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,xen.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,xencomm.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,xenoprof.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,xsm,flask_op.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,xen,errno.h.html +%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/index.html +%%PORTDOCS%%%%DOCSDIR%%/html/index.html +%%PORTDOCS%%%%DOCSDIR%%/html/man/index.html +%%PORTDOCS%%%%DOCSDIR%%/html/man/xen-pci-device-reservations.7.html +%%PORTDOCS%%%%DOCSDIR%%/html/man/xen-pv-channel.7.html +%%PORTDOCS%%%%DOCSDIR%%/html/man/xen-tscmode.7.html +%%PORTDOCS%%%%DOCSDIR%%/html/man/xen-vbd-interface.7.html +%%PORTDOCS%%%%DOCSDIR%%/html/man/xen-vtpm.7.html +%%PORTDOCS%%%%DOCSDIR%%/html/man/xen-vtpmmgr.7.html +%%PORTDOCS%%%%DOCSDIR%%/html/man/xenstore-chmod.1.html +%%PORTDOCS%%%%DOCSDIR%%/html/man/xenstore-ls.1.html +%%PORTDOCS%%%%DOCSDIR%%/html/man/xenstore.1.html +%%PORTDOCS%%%%DOCSDIR%%/html/man/xentop.1.html +%%PORTDOCS%%%%DOCSDIR%%/html/man/xentrace.8.html +%%PORTDOCS%%%%DOCSDIR%%/html/man/xentrace_format.1.html +%%PORTDOCS%%%%DOCSDIR%%/html/man/xl-disk-configuration.5.html +%%PORTDOCS%%%%DOCSDIR%%/html/man/xl-network-configuration.5.html +%%PORTDOCS%%%%DOCSDIR%%/html/man/xl-numa-placement.7.html +%%PORTDOCS%%%%DOCSDIR%%/html/man/xl.1.html +%%PORTDOCS%%%%DOCSDIR%%/html/man/xl.cfg.5.html +%%PORTDOCS%%%%DOCSDIR%%/html/man/xl.conf.5.html +%%PORTDOCS%%%%DOCSDIR%%/html/man/xlcpupool.cfg.5.html +%%PORTDOCS%%%%DOCSDIR%%/html/misc/9pfs.html +%%PORTDOCS%%%%DOCSDIR%%/html/misc/amd-ucode-container.txt +%%PORTDOCS%%%%DOCSDIR%%/html/misc/arm/big.LITTLE.txt +%%PORTDOCS%%%%DOCSDIR%%/html/misc/arm/booting.txt +%%PORTDOCS%%%%DOCSDIR%%/html/misc/arm/device-tree/acpi.txt +%%PORTDOCS%%%%DOCSDIR%%/html/misc/arm/device-tree/booting.txt +%%PORTDOCS%%%%DOCSDIR%%/html/misc/arm/device-tree/guest.txt +%%PORTDOCS%%%%DOCSDIR%%/html/misc/arm/device-tree/index.html +%%PORTDOCS%%%%DOCSDIR%%/html/misc/arm/device-tree/passthrough.txt +%%PORTDOCS%%%%DOCSDIR%%/html/misc/arm/early-printk.txt +%%PORTDOCS%%%%DOCSDIR%%/html/misc/arm/index.html +%%PORTDOCS%%%%DOCSDIR%%/html/misc/arm/passthrough.txt +%%PORTDOCS%%%%DOCSDIR%%/html/misc/arm/silicon-errata.txt +%%PORTDOCS%%%%DOCSDIR%%/html/misc/block-scripts.txt +%%PORTDOCS%%%%DOCSDIR%%/html/misc/console.txt +%%PORTDOCS%%%%DOCSDIR%%/html/misc/coverage.html +%%PORTDOCS%%%%DOCSDIR%%/html/misc/crashdb.txt +%%PORTDOCS%%%%DOCSDIR%%/html/misc/distro_mapping.txt +%%PORTDOCS%%%%DOCSDIR%%/html/misc/dump-core-format.txt +%%PORTDOCS%%%%DOCSDIR%%/html/misc/efi.html +%%PORTDOCS%%%%DOCSDIR%%/html/misc/grant-tables.txt +%%PORTDOCS%%%%DOCSDIR%%/html/misc/hvm-emulated-unplug.html +%%PORTDOCS%%%%DOCSDIR%%/html/misc/index.html +%%PORTDOCS%%%%DOCSDIR%%/html/misc/kconfig-language.txt +%%PORTDOCS%%%%DOCSDIR%%/html/misc/kconfig.txt +%%PORTDOCS%%%%DOCSDIR%%/html/misc/kexec_and_kdump.txt +%%PORTDOCS%%%%DOCSDIR%%/html/misc/libxl_memory.txt +%%PORTDOCS%%%%DOCSDIR%%/html/misc/livepatch.html +%%PORTDOCS%%%%DOCSDIR%%/html/misc/netif-staging-grants.html +%%PORTDOCS%%%%DOCSDIR%%/html/misc/printk-formats.txt +%%PORTDOCS%%%%DOCSDIR%%/html/misc/pv-drivers-lifecycle.html +%%PORTDOCS%%%%DOCSDIR%%/html/misc/pvcalls.html +%%PORTDOCS%%%%DOCSDIR%%/html/misc/pvh.html +%%PORTDOCS%%%%DOCSDIR%%/html/misc/qemu-backends.txt +%%PORTDOCS%%%%DOCSDIR%%/html/misc/qemu-deprivilege.txt +%%PORTDOCS%%%%DOCSDIR%%/html/misc/stubdom.txt +%%PORTDOCS%%%%DOCSDIR%%/html/misc/vtd-pi.txt +%%PORTDOCS%%%%DOCSDIR%%/html/misc/vtd.txt +%%PORTDOCS%%%%DOCSDIR%%/html/misc/vtpm-platforms.txt +%%PORTDOCS%%%%DOCSDIR%%/html/misc/x86-xenpv-bootloader.html +%%PORTDOCS%%%%DOCSDIR%%/html/misc/xen-command-line.html +%%PORTDOCS%%%%DOCSDIR%%/html/misc/xen-error-handling.txt +%%PORTDOCS%%%%DOCSDIR%%/html/misc/xenmon.txt +%%PORTDOCS%%%%DOCSDIR%%/html/misc/xenpaging.txt +%%PORTDOCS%%%%DOCSDIR%%/html/misc/xenstore-paths.html +%%PORTDOCS%%%%DOCSDIR%%/html/misc/xenstore-ring.txt +%%PORTDOCS%%%%DOCSDIR%%/html/misc/xenstore.txt +%%PORTDOCS%%%%DOCSDIR%%/html/misc/xl-psr.html +%%PORTDOCS%%%%DOCSDIR%%/html/misc/xsm-flask.txt +%%PORTDOCS%%%%DOCSDIR%%/html/process/index.html +%%PORTDOCS%%%%DOCSDIR%%/html/process/xen-release-management.html +%%PORTDOCS%%%%DOCSDIR%%/html/specs/index.html +%%PORTDOCS%%%%DOCSDIR%%/html/specs/libxc-migration-stream.html +%%PORTDOCS%%%%DOCSDIR%%/html/specs/libxl-migration-stream.html +@dir %%ETCDIR%%/auto +@dir /var/lib/xen/dump +@dir /var/lib/xen/xenpaging +@dir /var/lib/xen +@dir /var/lib/xenstored +@dir /var/lib +@dir /var/log/xen +@dir /var/run/xen +@dir /var/run/xenstored