Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F108148147
D16418.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
111 KB
Referenced Files
None
Subscribers
None
D16418.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D16418: xen: import version 4.11
Attached
Detach File
Event Timeline
Log In to Comment