xen: import version 4.11

Reviewed by:		bapt
Sponsored by:		Citrix Systems R&D
Differential Revision:	https://reviews.freebsd.org/D16418
This commit is contained in:
Roger Pau Monné 2018-07-24 13:57:46 +00:00
parent 768717cce7
commit 0691518059
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=475255
30 changed files with 2629 additions and 0 deletions

View file

@ -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>

View file

@ -0,0 +1,3 @@
TIMESTAMP = 1532345202
SHA256 (xen-4.11.0.tar.gz) = 826e3a9f6d0eac94a825d272cc2c1294e22640ae75af906eb13920f9ad667643
SIZE (xen-4.11.0.tar.gz) = 25131533

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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"

View file

@ -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/

View file

@ -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

View file

@ -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>

View file

@ -0,0 +1,3 @@
TIMESTAMP = 1532353889
SHA256 (xen-4.11.0.tar.gz) = 826e3a9f6d0eac94a825d272cc2c1294e22640ae75af906eb13920f9ad667643
SIZE (xen-4.11.0.tar.gz) = 25131533

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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