Page MenuHomeFreeBSD

D16418.diff
No OneTemporary

D16418.diff

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 <bsd.port.options.mk>
+
+.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 <bsd.port.mk>
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 <roger.pau@citrix.com>
+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 <andrew.cooper3@citrix.com>
+Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
+Acked-by: Jan Beulich <jbeulich@suse.com>
+---
+ 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?= <roger.pau@citrix.com>
+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é <roger.pau@citrix.com>
+Reviewed-by: Jan Beulich <jbeulich@suse.com>
+---
+ 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 <jbeulich@suse.com>
+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 <jbeulich@suse.com>
+[switch to use MASK_EXTR to get VCNT]
+Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
+---
+ 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?= <roger.pau@citrix.com>
+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é <roger.pau@citrix.com>
+Acked-by: Jan Beulich <jbeulich@suse.com>
+---
+ 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 <roger.pau@citrix.com>
+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é <roger.pau@citrix.com>
+Reviewed-by: Jan Beulich <jbeulich@suse.com>
+---
+Cc: Jan Beulich <jbeulich@suse.com>
+Cc: Andrew Cooper <andrew.cooper3@citrix.com>
+Cc: Daniel Kiper <daniel.kiper@oracle.com>
+---
+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?= <roger.pau@citrix.com>
+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é <roger.pau@citrix.com>
+Reviewed-by: Jan Beulich <jbeulich@suse.com>
+---
+ 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 <roger.pau@citrix.com>
+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é <roger.pau@citrix.com>
+Acked-by: Jan Beulich <jbeulich@suse.com>
+---
+Cc: Jan Beulich <jbeulich@suse.com>
+Cc: Andrew Cooper <andrew.cooper3@citrix.com>
+---
+ 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?= <roger.pau@citrix.com>
+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é <roger.pau@citrix.com>
+Reviewed-by: Jan Beulich <jbeulich@suse.com>
+---
+ 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?= <roger.pau@citrix.com>
+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é <roger.pau@citrix.com>
+Acked-by: Jan Beulich <jbeulich@suse.com>
+---
+ 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 <roger.pau@citrix.com>
+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é <roger.pau@citrix.com>
+Reviewed-by: Jan Beulich <jbeulich@suse.com>
+---
+Cc: Jan Beulich <jbeulich@suse.com>
+Cc: Andrew Cooper <andrew.cooper3@citrix.com>
+Cc: Daniel Kiper <daniel.kiper@oracle.com>
+---
+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 <jbeulich@suse.com>
+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 <jbeulich@suse.com>
+[switched to use MASK_*]
+Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
+---
+ 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?= <roger.pau@citrix.com>
+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é <roger.pau@citrix.com>
+---
+ 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?= <roger.pau@citrix.com>
+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é <roger.pau@citrix.com>
+Reviewed-by: Jan Beulich <jbeulich@suse.com>
+---
+ 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?= <roger.pau@citrix.com>
+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é <roger.pau@citrix.com>
+Reviewed-by: Jan Beulich <jbeulich@suse.com>
+---
+ 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?= <roger.pau@citrix.com>
+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é <roger.pau@citrix.com>
+Acked-by: Wei Liu <wei.liu2@citrix.com>
+---
+ 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?= <roger.pau@citrix.com>
+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é <roger.pau@citrix.com>
+---
+ 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 <dteske@FreeBSD.org>
+\ 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 <bsd.port.options.mk>
+
+.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 <bsd.port.mk>
+
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 <roger.pau@citrix.com>
+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é <roger.pau@citrix.com>
+Acked-by: Wei Liu <wei.liu2@citrix.com>
+---
+ 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 <roger.pau@citrix.com>
+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é <roger.pau@citrix.com>
+---
+Cc: Ian Jackson <ian.jackson@eu.citrix.com>
+Cc: Wei Liu <wei.liu2@citrix.com>
+---
+ 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 <roger.pau@citrix.com>
+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é <roger.pau@citrix.com>
+Reviewed-by: Jan Beulich <jbeulich@suse.com>
+---
+Cc: Jan Beulich <jbeulich@suse.com>
+Cc: Andrew Cooper <andrew.cooper3@citrix.com>
+Cc: Daniel Kiper <daniel.kiper@oracle.com>
+---
+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?= <roger.pau@citrix.com>
+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é <roger.pau@citrix.com>
+Reviewed-by: Jan Beulich <jbeulich@suse.com>
+---
+ 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 <roger.pau@citrix.com>
+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é <roger.pau@citrix.com>
+Reviewed-by: Jan Beulich <jbeulich@suse.com>
+---
+Cc: Jan Beulich <jbeulich@suse.com>
+Cc: Andrew Cooper <andrew.cooper3@citrix.com>
+Cc: Daniel Kiper <daniel.kiper@oracle.com>
+---
+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

File Metadata

Mime Type
text/plain
Expires
Wed, Jan 22, 9:41 PM (15 h, 59 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16039442
Default Alt Text
D16418.diff (111 KB)

Event Timeline