xen: update to Xen 4.7-rc4

Now both the xen-kernel and xen-tools packages are compiled with clang from
base.

xen-kernel however needs to use binutils due to some limitations in the
current elftc.

Approved by:	bapt
Sponsored by:	Citrix Systems R&D
This commit is contained in:
Roger Pau Monné 2016-06-03 11:26:09 +00:00
parent f24d27910f
commit 5e841df32b
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=416310
32 changed files with 338 additions and 1625 deletions

View file

@ -2,10 +2,12 @@
PORTNAME= xen PORTNAME= xen
PKGNAMESUFFIX= -kernel PKGNAMESUFFIX= -kernel
PORTVERSION= 4.5.2 PORTVERSION= 4.7.0
PORTREVISION= 2 PORTREVISION= 0
RCVERSION= 4
DISTNAME= ${PORTNAME}-${DISTVERSION}-rc${RCVERSION}
CATEGORIES= emulators CATEGORIES= emulators
MASTER_SITES= http://bits.xensource.com/oss-xen/release/${PORTVERSION}/ MASTER_SITES= http://bits.xensource.com/oss-xen/release/${DISTVERSION}-rc${RCVERSION}/
MAINTAINER= royger@FreeBSD.org MAINTAINER= royger@FreeBSD.org
COMMENT= Hypervisor using a microkernel design COMMENT= Hypervisor using a microkernel design
@ -15,31 +17,32 @@ LICENSE= GPLv2
ONLY_FOR_ARCHS= amd64 ONLY_FOR_ARCHS= amd64
USES= cpe gmake python:build USES= cpe gmake python:build
MAKE_ARGS= HOSTCC="${CC}" CC="${CC}" PYTHON=${PYTHON_CMD} \
NM="${NM}" LD="${LD}" # We need to use ld from ports because the version in base doesn't
USE_GCC= yes # support the '--build-id' switch that's needed for live hypervisor
# hot-patching. Once the ld version in base supports this option the
# dependency can be removed.
#
# GNU objcopy is used instead of elftc objcopy because of bug #533:
# https://sourceforge.net/p/elftoolchain/tickets/533/
# Once this is solved we should be able to switch to elfcopy.
#
# And finally we also need to use nm from binutils because the one
# from base cannot deal with i386pep binary files which is the format
# of the Xen EFI image (note that FreeBSD cannot yet boot as Dom0 from EFI,
# but the image is built anyway). This is reported to elftc as bug #534:
# https://sourceforge.net/p/elftoolchain/tickets/534/
MAKE_ARGS= clang=y PYTHON=${PYTHON_CMD} LD="${LD}" OBJCOPY="${OBJCOPY}" \
NM="${NM}"
USE_BINUTILS= yes
NO_MTREE= yes NO_MTREE= yes
STRIP= #
PLIST_FILES= /boot/xen \ PLIST_FILES= /boot/xen \
/boot/xen.4th /boot/xen.4th
ALL_TARGET= build EXTRA_PATCHES= ${FILESDIR}/0001-xen-logdirty-prevent-preemption-if-finished.patch:-p1 \
STRIP= # ${FILESDIR}/0002-xen-rework-paging_log_dirty_op-to-work-with-hvm-gues.patch:-p1 \
WRKSRC_SUBDIR= xen ${FILESDIR}/0001-build-fix-assembler-instruction-tests-again.patch:-p1 \
EXTRA_PATCHES= ${FILESDIR}/0001-introduce-a-helper-to-allocate-non-contiguous-memory.patch:-p2 \ ${FILESDIR}/kconf_arch.patch:-p1
${FILESDIR}/0002-vmap-avoid-hitting-an-ASSERT-with-vfree-NULL.patch:-p2 \
${FILESDIR}/0003-x86-shadow-fix-shadow_track_dirty_vram-to-work-on-hv.patch:-p2 \
${FILESDIR}/0004-x86-hap-make-hap_track_dirty_vram-use-non-contiguous.patch:-p2 \
${FILESDIR}/0005-x86-rework-paging_log_dirty_op-to-work-with-hvm-gues.patch:-p2 \
${FILESDIR}/0006-xen-pvh-enable-mmu_update-hypercall.patch:-p2 \
${FILESDIR}/0007-iommu-fix-usage-of-shared-EPT-IOMMU-page-tables-on-P.patch:-p2 \
${FILESDIR}/0001-x86-pvh-use-a-custom-IO-bitmap-for-PVH-hardware-doma.patch:-p2 \
${FILESDIR}/0002-x86-pvh-trap-access-to-sensitive-IO-ports.patch:-p2 \
${FILESDIR}/xsa156-4.5.patch:-p2 \
${FILESDIR}/xsa159.patch:-p2 \
${FILESDIR}/xsa165-4.5.patch:-p2 \
${FILESDIR}/xsa166-4.5.patch:-p2 \
${FILESDIR}/xsa167-4.6.patch:-p2 \
${FILESDIR}/xsa168.patch:-p2 \
${FILESDIR}/xsa170-4.5.patch:-p2
.include <bsd.port.options.mk> .include <bsd.port.options.mk>
@ -52,13 +55,20 @@ IGNORE= Only supported on FreeBSD
IGNORE= Only supported on recent FreeBSD 11 IGNORE= Only supported on recent FreeBSD 11
.endif .endif
pre-build:
${MAKE_CMD} -C ${WRKSRC}/xen defconfig ${MAKE_ARGS}
# Enable hypervisor hot-patching.
echo 'CONFIG_XSPLICE=y' >> ${WRKSRC}/xen/.config
echo 'CONFIG_FAST_SYMBOL_LOOKUP=y' >> ${WRKSRC}/xen/.config
# 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 build ${MAKE_ARGS}
do-install: do-install:
${MKDIR} ${STAGEDIR}/boot ${MKDIR} ${STAGEDIR}/boot
${INSTALL_PROGRAM} ${WRKSRC}/xen ${STAGEDIR}/boot ${INSTALL_PROGRAM} ${WRKSRC}/xen/xen ${STAGEDIR}/boot
${INSTALL_DATA} ${FILESDIR}/xen.4th ${STAGEDIR}/boot ${INSTALL_DATA} ${FILESDIR}/xen.4th ${STAGEDIR}/boot
.include <bsd.port.mk> .include <bsd.port.mk>
#Filter out LDFLAGS
.undef LDFLAGS
RUN_DEPENDS:= ${RUN_DEPENDS:N*gcc*}

View file

@ -1,2 +1,3 @@
SHA256 (xen-4.5.2.tar.gz) = 4c9e5dac4eea484974e9f76da2756c8e0973b4e884d28d37e955df9ebf00e7e8 TIMESTAMP = 1464704290
SIZE (xen-4.5.2.tar.gz) = 18416220 SHA256 (xen-4.7.0-rc4.tar.gz) = ad752bc80da2ab31287e5249adbeea2536b8141eefd7e8a45a3df42db727c630
SIZE (xen-4.7.0-rc4.tar.gz) = 20696897

View file

@ -0,0 +1,37 @@
From 1dda826420fff634983e94f97fb8411486acda0d Mon Sep 17 00:00:00 2001
From: Jan Beulich <jbeulich@suse.com>
Date: Tue, 31 May 2016 18:14:22 +0200
Subject: [PATCH] build: fix assembler instruction tests again
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Commit 7fb252bd41 ("build/xen: fix assembler instruction tests") added
$(AFLAGS) here, which results in all of those tests now failing.
Certain items need to be removed for things to work again.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
Acked-by: Roger Pau Monné <roger.pau@citrix.com>
Release-acked-by: Wei Liu <wei.liu2@citrix.com>
---
Config.mk | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/Config.mk b/Config.mk
index 5ddfbf8..bc5c456 100644
--- a/Config.mk
+++ b/Config.mk
@@ -150,7 +150,8 @@ endif
# as-insn: Check whether assembler supports an instruction.
# Usage: cflags-y += $(call as-insn "insn",option-yes,option-no)
as-insn = $(if $(shell echo 'void _(void) { asm volatile ( $(2) ); }' \
- | $(1) $(AFLAGS) -c -x c -o /dev/null - 2>&1),$(4),$(3))
+ | $(1) $(filter-out -M% %.d -include %/include/xen/config.h,$(AFLAGS)) \
+ -c -x c -o /dev/null - 2>&1),$(4),$(3))
# as-insn-check: Add an option to compilation flags, but only if insn is
# supported by assembler.
--
2.7.4 (Apple Git-66)

View file

@ -1,141 +0,0 @@
From 411801087603a1a070de7abbfa4373afe91ca3f5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>
Date: Fri, 9 Oct 2015 12:57:31 +0200
Subject: [PATCH 1/8] introduce a helper to allocate non-contiguous memory
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The allocator uses independent calls to alloc_domheap_pages in order to get
the desired amount of memory and then maps all the independent physical
addresses into a contiguous virtual address space.
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Tested-by: Julien Grall <julien.grall@citrix.com> (ARM)
Reviewed-by: Tim Deegan <tim@xen.org>
---
xen/common/vmap.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++
xen/include/asm-arm/mm.h | 2 ++
xen/include/asm-x86/page.h | 2 ++
xen/include/xen/vmap.h | 3 +++
4 files changed, 74 insertions(+)
diff --git a/xen/common/vmap.c b/xen/common/vmap.c
index 783cea3..b6827b5 100644
--- a/xen/common/vmap.c
+++ b/xen/common/vmap.c
@@ -215,4 +215,71 @@ void vunmap(const void *va)
#endif
vm_free(va);
}
+
+void *vmalloc(size_t size)
+{
+ unsigned long *mfn;
+ size_t pages, i;
+ struct page_info *pg;
+ void *va;
+
+ ASSERT(size);
+
+ pages = PFN_UP(size);
+ mfn = xmalloc_array(unsigned long, pages);
+ if ( mfn == NULL )
+ return NULL;
+
+ for ( i = 0; i < pages; i++ )
+ {
+ pg = alloc_domheap_page(NULL, 0);
+ if ( pg == NULL )
+ goto error;
+ mfn[i] = page_to_mfn(pg);
+ }
+
+ va = vmap(mfn, pages);
+ if ( va == NULL )
+ goto error;
+
+ xfree(mfn);
+ return va;
+
+ error:
+ while ( i-- )
+ free_domheap_page(mfn_to_page(mfn[i]));
+ xfree(mfn);
+ return NULL;
+}
+
+void *vzalloc(size_t size)
+{
+ void *p = vmalloc(size);
+ int i;
+
+ if ( p == NULL )
+ return NULL;
+
+ for ( i = 0; i < size; i += PAGE_SIZE )
+ clear_page(p + i);
+
+ return p;
+}
+
+void vfree(void *va)
+{
+ unsigned int i, pages = vm_size(va);
+ struct page_info *pg;
+ PAGE_LIST_HEAD(pg_list);
+
+ ASSERT(pages);
+
+ for ( i = 0; i < pages; i++ )
+ page_list_add(vmap_to_page(va + i * PAGE_SIZE), &pg_list);
+
+ vunmap(va);
+
+ while ( (pg = page_list_remove_head(&pg_list)) != NULL )
+ free_domheap_page(pg);
+}
#endif
diff --git a/xen/include/asm-arm/mm.h b/xen/include/asm-arm/mm.h
index d25e485..c0afcec 100644
--- a/xen/include/asm-arm/mm.h
+++ b/xen/include/asm-arm/mm.h
@@ -208,6 +208,8 @@ static inline void __iomem *ioremap_wc(paddr_t start, size_t len)
#define pfn_to_paddr(pfn) ((paddr_t)(pfn) << PAGE_SHIFT)
#define paddr_to_pfn(pa) ((unsigned long)((pa) >> PAGE_SHIFT))
#define paddr_to_pdx(pa) pfn_to_pdx(paddr_to_pfn(pa))
+#define vmap_to_mfn(va) paddr_to_pfn(virt_to_maddr((vaddr_t)va))
+#define vmap_to_page(va) mfn_to_page(vmap_to_mfn(va))
/* Page-align address and convert to frame number format */
#define paddr_to_pfn_aligned(paddr) paddr_to_pfn(PAGE_ALIGN(paddr))
diff --git a/xen/include/asm-x86/page.h b/xen/include/asm-x86/page.h
index ccf0752..27c2ae7 100644
--- a/xen/include/asm-x86/page.h
+++ b/xen/include/asm-x86/page.h
@@ -262,6 +262,8 @@ void copy_page_sse2(void *, const void *);
#define pfn_to_paddr(pfn) __pfn_to_paddr(pfn)
#define paddr_to_pfn(pa) __paddr_to_pfn(pa)
#define paddr_to_pdx(pa) pfn_to_pdx(paddr_to_pfn(pa))
+#define vmap_to_mfn(va) l1e_get_pfn(*virt_to_xen_l1e((unsigned long)(va)))
+#define vmap_to_page(va) mfn_to_page(vmap_to_mfn(va))
#endif /* !defined(__ASSEMBLY__) */
diff --git a/xen/include/xen/vmap.h b/xen/include/xen/vmap.h
index b1923dd..a13591d 100644
--- a/xen/include/xen/vmap.h
+++ b/xen/include/xen/vmap.h
@@ -11,6 +11,9 @@ void *__vmap(const unsigned long *mfn, unsigned int granularity,
unsigned int nr, unsigned int align, unsigned int flags);
void *vmap(const unsigned long *mfn, unsigned int nr);
void vunmap(const void *);
+void *vmalloc(size_t size);
+void *vzalloc(size_t size);
+void vfree(void *va);
void __iomem *ioremap(paddr_t, size_t);
--
1.9.5 (Apple Git-50.3)

View file

@ -1,197 +0,0 @@
From 8ddb99287cd18da99a95a9f70904a97b52893599 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>
Date: Wed, 20 May 2015 13:26:43 +0200
Subject: [PATCH 1/2] x86/pvh: use a custom IO bitmap for PVH hardware domains
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Since a PVH hardware domain has access to the physical hardware create a
custom more permissive IO bitmap. The permissions set on the bitmap are
populated based on the contents of the ioports rangeset.
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Signed-off-by: Jan Beulich <jbeulich@suse.com>
---
xen/arch/x86/hvm/hvm.c | 24 ++++++++++++++++++++++--
xen/arch/x86/hvm/svm/vmcb.c | 2 +-
xen/arch/x86/hvm/vmx/vmcs.c | 4 ++--
xen/arch/x86/setup.c | 28 ++++++++++++++++++++++++++++
xen/common/domain.c | 3 +++
xen/include/asm-x86/hvm/domain.h | 2 ++
xen/include/asm-x86/setup.h | 1 +
7 files changed, 59 insertions(+), 5 deletions(-)
diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c
index 689e402..89423fa 100644
--- a/xen/arch/x86/hvm/hvm.c
+++ b/xen/arch/x86/hvm/hvm.c
@@ -77,9 +77,13 @@ integer_param("hvm_debug", opt_hvm_debug_level);
struct hvm_function_table hvm_funcs __read_mostly;
-/* I/O permission bitmap is globally shared by all HVM guests. */
+/*
+ * The I/O permission bitmap is globally shared by all HVM guests except
+ * the hardware domain which needs a more permissive one.
+ */
+#define HVM_IOBITMAP_SIZE (3 * PAGE_SIZE)
unsigned long __attribute__ ((__section__ (".bss.page_aligned")))
- hvm_io_bitmap[3*PAGE_SIZE/BYTES_PER_LONG];
+ hvm_io_bitmap[HVM_IOBITMAP_SIZE / BYTES_PER_LONG];
/* Xen command-line option to enable HAP */
static bool_t __initdata opt_hap_enabled = 1;
@@ -1461,6 +1465,20 @@ int hvm_domain_initialise(struct domain *d)
goto fail1;
d->arch.hvm_domain.io_handler->num_slot = 0;
+ /* Set the default IO Bitmap. */
+ if ( is_hardware_domain(d) )
+ {
+ d->arch.hvm_domain.io_bitmap = _xmalloc(HVM_IOBITMAP_SIZE, PAGE_SIZE);
+ if ( d->arch.hvm_domain.io_bitmap == NULL )
+ {
+ rc = -ENOMEM;
+ goto fail1;
+ }
+ memset(d->arch.hvm_domain.io_bitmap, ~0, HVM_IOBITMAP_SIZE);
+ }
+ else
+ d->arch.hvm_domain.io_bitmap = hvm_io_bitmap;
+
if ( is_pvh_domain(d) )
{
register_portio_handler(d, 0, 0x10003, handle_pvh_io);
@@ -1496,6 +1514,8 @@ int hvm_domain_initialise(struct domain *d)
stdvga_deinit(d);
vioapic_deinit(d);
fail1:
+ if ( is_hardware_domain(d) )
+ xfree(d->arch.hvm_domain.io_bitmap);
xfree(d->arch.hvm_domain.io_handler);
xfree(d->arch.hvm_domain.params);
fail0:
diff --git a/xen/arch/x86/hvm/svm/vmcb.c b/xen/arch/x86/hvm/svm/vmcb.c
index 21292bb..6339d2a 100644
--- a/xen/arch/x86/hvm/svm/vmcb.c
+++ b/xen/arch/x86/hvm/svm/vmcb.c
@@ -118,7 +118,7 @@ static int construct_vmcb(struct vcpu *v)
svm_disable_intercept_for_msr(v, MSR_AMD64_LWP_CBADDR);
vmcb->_msrpm_base_pa = (u64)virt_to_maddr(arch_svm->msrpm);
- vmcb->_iopm_base_pa = (u64)virt_to_maddr(hvm_io_bitmap);
+ vmcb->_iopm_base_pa = __pa(v->domain->arch.hvm_domain.io_bitmap);
/* Virtualise EFLAGS.IF and LAPIC TPR (CR8). */
vmcb->_vintr.fields.intr_masking = 1;
diff --git a/xen/arch/x86/hvm/vmx/vmcs.c b/xen/arch/x86/hvm/vmx/vmcs.c
index 3123706..355d1b5 100644
--- a/xen/arch/x86/hvm/vmx/vmcs.c
+++ b/xen/arch/x86/hvm/vmx/vmcs.c
@@ -1032,8 +1032,8 @@ static int construct_vmcs(struct vcpu *v)
}
/* I/O access bitmap. */
- __vmwrite(IO_BITMAP_A, virt_to_maddr((char *)hvm_io_bitmap + 0));
- __vmwrite(IO_BITMAP_B, virt_to_maddr((char *)hvm_io_bitmap + PAGE_SIZE));
+ __vmwrite(IO_BITMAP_A, __pa(d->arch.hvm_domain.io_bitmap));
+ __vmwrite(IO_BITMAP_B, __pa(d->arch.hvm_domain.io_bitmap) + PAGE_SIZE);
if ( cpu_has_vmx_virtual_intr_delivery )
{
diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c
index 2b9787a..cd333f9 100644
--- a/xen/arch/x86/setup.c
+++ b/xen/arch/x86/setup.c
@@ -1446,6 +1446,8 @@ void __init noreturn __start_xen(unsigned long mbi_p)
dmi_end_boot();
+ setup_io_bitmap(dom0);
+
system_state = SYS_STATE_active;
domain_unpause_by_systemcontroller(dom0);
@@ -1509,6 +1511,32 @@ int __hwdom_init xen_in_range(unsigned long mfn)
return 0;
}
+static int __hwdom_init io_bitmap_cb(unsigned long s, unsigned long e,
+ void *ctx)
+{
+ struct domain *d = ctx;
+ unsigned int i;
+
+ ASSERT(e <= INT_MAX);
+ for ( i = s; i <= e; i++ )
+ __clear_bit(i, d->arch.hvm_domain.io_bitmap);
+
+ return 0;
+}
+
+void __hwdom_init setup_io_bitmap(struct domain *d)
+{
+ int rc;
+
+ if ( has_hvm_container_domain(d) )
+ {
+ bitmap_fill(d->arch.hvm_domain.io_bitmap, 0x10000);
+ rc = rangeset_report_ranges(d->arch.ioport_caps, 0, 0x10000,
+ io_bitmap_cb, d);
+ BUG_ON(rc);
+ }
+}
+
/*
* Local variables:
* mode: C
diff --git a/xen/common/domain.c b/xen/common/domain.c
index 6803c4d..b0e83f5 100644
--- a/xen/common/domain.c
+++ b/xen/common/domain.c
@@ -42,6 +42,7 @@
#include <xsm/xsm.h>
#include <xen/trace.h>
#include <xen/tmem.h>
+#include <asm/setup.h>
/* Linux config option: propageted to domain0 */
/* xen_processor_pmbits: xen control Cx, Px, ... */
@@ -219,6 +220,8 @@ static int late_hwdom_init(struct domain *d)
rangeset_swap(d->iomem_caps, dom0->iomem_caps);
#ifdef CONFIG_X86
rangeset_swap(d->arch.ioport_caps, dom0->arch.ioport_caps);
+ setup_io_bitmap(d);
+ setup_io_bitmap(dom0);
#endif
rcu_unlock_domain(dom0);
diff --git a/xen/include/asm-x86/hvm/domain.h b/xen/include/asm-x86/hvm/domain.h
index 0f8b19a..bdab45d 100644
--- a/xen/include/asm-x86/hvm/domain.h
+++ b/xen/include/asm-x86/hvm/domain.h
@@ -141,6 +141,8 @@ struct hvm_domain {
*/
uint64_t sync_tsc;
+ unsigned long *io_bitmap;
+
union {
struct vmx_domain vmx;
struct svm_domain svm;
diff --git a/xen/include/asm-x86/setup.h b/xen/include/asm-x86/setup.h
index 08bc23a..381d9f8 100644
--- a/xen/include/asm-x86/setup.h
+++ b/xen/include/asm-x86/setup.h
@@ -32,6 +32,7 @@ int construct_dom0(
module_t *initrd,
void *(*bootstrap_map)(const module_t *),
char *cmdline);
+void setup_io_bitmap(struct domain *d);
unsigned long initial_images_nrpages(nodeid_t node);
void discard_initial_images(void);
--
2.5.4 (Apple Git-61)

View file

@ -0,0 +1,44 @@
From 7a0ed7f3c2dcb1f104b6f70223d48d8826aec7f2 Mon Sep 17 00:00:00 2001
From: Roger Pau Monne <roger.pau@citrix.com>
Date: Tue, 31 May 2016 16:07:26 +0200
Subject: [PATCH 1/2] xen/logdirty: prevent preemption if finished
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
While working on PVH migration support I've realized that
paging_log_dirty_op sometimes restarts with sc->pages == pages, which means
there's no more work to do. Avoid this by adding a check in the preemption
points of the function.
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
---
xen/arch/x86/mm/paging.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/xen/arch/x86/mm/paging.c b/xen/arch/x86/mm/paging.c
index 8219bb6..ed94ff7 100644
--- a/xen/arch/x86/mm/paging.c
+++ b/xen/arch/x86/mm/paging.c
@@ -519,7 +519,8 @@ static int paging_log_dirty_op(struct domain *d,
if ( l2 )
unmap_domain_page(l2);
- if ( i3 < LOGDIRTY_NODE_ENTRIES - 1 && hypercall_preempt_check() )
+ if ( i3 < LOGDIRTY_NODE_ENTRIES - 1 && hypercall_preempt_check() &&
+ sc->pages != pages )
{
d->arch.paging.preempt.log_dirty.i4 = i4;
d->arch.paging.preempt.log_dirty.i3 = i3 + 1;
@@ -531,7 +532,7 @@ static int paging_log_dirty_op(struct domain *d,
unmap_domain_page(l3);
if ( !rv && i4 < LOGDIRTY_NODE_ENTRIES - 1 &&
- hypercall_preempt_check() )
+ hypercall_preempt_check() && sc->pages != pages )
{
d->arch.paging.preempt.log_dirty.i4 = i4 + 1;
d->arch.paging.preempt.log_dirty.i3 = 0;
--
2.7.4 (Apple Git-66)

View file

@ -1,43 +0,0 @@
From ed4a7917a6faa8b7e8f211eaeda270f96e45de7d Mon Sep 17 00:00:00 2001
From: Andrew Cooper <andrew.cooper3@citrix.com>
Date: Fri, 9 Oct 2015 12:57:31 +0200
Subject: [PATCH 2/8] vmap: avoid hitting an ASSERT with vfree(NULL)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
and unconditionally defer the vm_size() call, as it doesn't have a NULL
short circuit.
Reported-by: Wei Liu <wei.liu2@citrix.com>
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Tested-by: Wei Liu <wei.liu2@citrix.com>
Reviewed-by: Roger Pau Monné <roger.pau@citrix.com>
Acked-by: Tim Deegan <tim@xen.org>
---
xen/common/vmap.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/xen/common/vmap.c b/xen/common/vmap.c
index b6827b5..9028802 100644
--- a/xen/common/vmap.c
+++ b/xen/common/vmap.c
@@ -268,10 +268,14 @@ void *vzalloc(size_t size)
void vfree(void *va)
{
- unsigned int i, pages = vm_size(va);
+ unsigned int i, pages;
struct page_info *pg;
PAGE_LIST_HEAD(pg_list);
+ if ( !va )
+ return;
+
+ pages = vm_size(va);
ASSERT(pages);
for ( i = 0; i < pages; i++ )
--
1.9.5 (Apple Git-50.3)

View file

@ -1,52 +0,0 @@
From 72d5acdc1d5b83107066e25054f9119e7771cf70 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>
Date: Wed, 20 May 2015 13:27:23 +0200
Subject: [PATCH 2/2] x86/pvh: trap access to sensitive IO ports
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This is needed so Xen can properly trap 4 byte accesses to 0xcf8 in order to
keep consistency with accesses to 0xcfc.
The access to RTC ports also needs to be trapped in order to keep
consistency, this includes RTC_PORT(0) and RTC_PORT(1) (0x70 and 0x71
respectively).
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
---
xen/arch/x86/setup.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c
index cd333f9..2cc9185 100644
--- a/xen/arch/x86/setup.c
+++ b/xen/arch/x86/setup.c
@@ -49,6 +49,7 @@
#include <xen/cpu.h>
#include <asm/nmi.h>
#include <asm/alternative.h>
+#include <asm/mc146818rtc.h>
/* opt_nosmp: If true, secondary processors are ignored. */
static bool_t __initdata opt_nosmp;
@@ -1534,6 +1535,16 @@ void __hwdom_init setup_io_bitmap(struct domain *d)
rc = rangeset_report_ranges(d->arch.ioport_caps, 0, 0x10000,
io_bitmap_cb, d);
BUG_ON(rc);
+ /*
+ * NB: we need to trap accesses to 0xcf8 in order to intercept
+ * 4 byte accesses, that need to be handled by Xen in order to
+ * keep consistency.
+ * Access to 1 byte RTC ports also needs to be trapped in order
+ * to keep consistency with PV.
+ */
+ __set_bit(0xcf8, d->arch.hvm_domain.io_bitmap);
+ __set_bit(RTC_PORT(0), d->arch.hvm_domain.io_bitmap);
+ __set_bit(RTC_PORT(1), d->arch.hvm_domain.io_bitmap);
}
}
--
2.5.4 (Apple Git-61)

View file

@ -1,7 +1,7 @@
From 63d4838f2f5644060c064f356078a748ca413364 Mon Sep 17 00:00:00 2001 From e253a2e2fb45197273cee7a7fa2b77f7a87cb67f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com> From: Roger Pau Monne <roger.pau@citrix.com>
Date: Fri, 9 Oct 2015 12:57:32 +0200 Date: Tue, 31 May 2016 16:07:26 +0200
Subject: [PATCH 5/8] x86: rework paging_log_dirty_op to work with hvm guests Subject: [PATCH 2/2] xen: rework paging_log_dirty_op to work with hvm guests
MIME-Version: 1.0 MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8 Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit Content-Transfer-Encoding: 8bit
@ -14,17 +14,43 @@ Fix this by independently mapping each page of the guest bitmap as needed
without the paging lock held. without the paging lock held.
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com> Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Reviewed-by: Tim Deegan <tim@xen.org> Cc: Tim Deegan <tim@xen.org>
Cc: Jan Beulich <jbeulich@suse.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>
--- ---
xen/arch/x86/mm/paging.c | 98 +++++++++++++++++++++++++++++++++++++++----- Changes since v6:
- Move the again label to the start of the function.
- Set all the preempt fields if we need to map a new page (just like on the
preempt case).
Changes since v4:
- Indent again label.
- Replace bogus paddr_t cast with proper type.
- Update preempt.log_dirty before dropping the paging lock.
Changes since v3:
- Drop last parameter from map_dirty_bitmap.
- Drop pointless initializers in paging_log_dirty_op.
- Add a new field to paging_domain in order to copy i2 position.
- Move the again case up to make sure we don't hold cached values of the
contents of log_dirty.
- Replace the BUG_ON in paging_log_dirty_op with an ASSERT.
Changes since v2:
- Add checks for p2m_is_ram and p2m_is_discard_write when mapping a guest
page.
- Remove error checking from memset/memcpy, they unconditionally return
dst.
---
xen/arch/x86/mm/paging.c | 97 +++++++++++++++++++++++++++++++++++++++-----
xen/include/asm-x86/domain.h | 1 + xen/include/asm-x86/domain.h | 1 +
2 files changed, 88 insertions(+), 11 deletions(-) 2 files changed, 87 insertions(+), 11 deletions(-)
diff --git a/xen/arch/x86/mm/paging.c b/xen/arch/x86/mm/paging.c diff --git a/xen/arch/x86/mm/paging.c b/xen/arch/x86/mm/paging.c
index 6b788f7..06dc7fa 100644 index ed94ff7..595c9d6 100644
--- a/xen/arch/x86/mm/paging.c --- a/xen/arch/x86/mm/paging.c
+++ b/xen/arch/x86/mm/paging.c +++ b/xen/arch/x86/mm/paging.c
@@ -397,6 +397,51 @@ int paging_mfn_is_dirty(struct domain *d, mfn_t gmfn) @@ -406,6 +406,51 @@ int paging_mfn_is_dirty(struct domain *d, mfn_t gmfn)
return rv; return rv;
} }
@ -55,7 +81,7 @@ index 6b788f7..06dc7fa 100644
+ p2m_mem_paging_populate(current->domain, gfn); + p2m_mem_paging_populate(current->domain, gfn);
+ return NULL; + return NULL;
+ } + }
+ if ( p2m_is_shared(p2mt) ) + if ( p2m_is_shared(p2mt) || p2m_is_discard_write(p2mt) )
+ { + {
+ put_page(*page); + put_page(*page);
+ return NULL; + return NULL;
@ -76,7 +102,7 @@ index 6b788f7..06dc7fa 100644
/* Read a domain's log-dirty bitmap and stats. If the operation is a CLEAN, /* Read a domain's log-dirty bitmap and stats. If the operation is a CLEAN,
* clear the bitmap and stats as well. */ * clear the bitmap and stats as well. */
@@ -409,9 +454,22 @@ static int paging_log_dirty_op(struct domain *d, @@ -418,7 +463,11 @@ static int paging_log_dirty_op(struct domain *d,
mfn_t *l4 = NULL, *l3 = NULL, *l2 = NULL; mfn_t *l4 = NULL, *l3 = NULL, *l2 = NULL;
unsigned long *l1 = NULL; unsigned long *l1 = NULL;
int i4, i3, i2; int i4, i3, i2;
@ -86,8 +112,12 @@ index 6b788f7..06dc7fa 100644
+ again: + again:
if ( !resuming ) if ( !resuming )
domain_pause(d); {
+ /*
@@ -439,6 +488,14 @@ static int paging_log_dirty_op(struct domain *d,
p2m_flush_hardware_cached_dirty(d);
}
+ index_mapped = resuming ? d->arch.paging.preempt.log_dirty.done : 0; + index_mapped = resuming ? d->arch.paging.preempt.log_dirty.done : 0;
+ dirty_bitmap = map_dirty_bitmap(sc->dirty_bitmap, index_mapped, &page); + dirty_bitmap = map_dirty_bitmap(sc->dirty_bitmap, index_mapped, &page);
+ if ( dirty_bitmap == NULL ) + if ( dirty_bitmap == NULL )
@ -99,7 +129,7 @@ index 6b788f7..06dc7fa 100644
paging_lock(d); paging_lock(d);
if ( !d->arch.paging.preempt.dom ) if ( !d->arch.paging.preempt.dom )
@@ -451,18 +509,18 @@ static int paging_log_dirty_op(struct domain *d, @@ -478,18 +535,18 @@ static int paging_log_dirty_op(struct domain *d,
l4 = paging_map_log_dirty_bitmap(d); l4 = paging_map_log_dirty_bitmap(d);
i4 = d->arch.paging.preempt.log_dirty.i4; i4 = d->arch.paging.preempt.log_dirty.i4;
i3 = d->arch.paging.preempt.log_dirty.i3; i3 = d->arch.paging.preempt.log_dirty.i3;
@ -108,13 +138,13 @@ index 6b788f7..06dc7fa 100644
for ( ; (pages < sc->pages) && (i4 < LOGDIRTY_NODE_ENTRIES); i4++, i3 = 0 ) for ( ; (pages < sc->pages) && (i4 < LOGDIRTY_NODE_ENTRIES); i4++, i3 = 0 )
{ {
l3 = (l4 && mfn_valid(l4[i4])) ? map_domain_page(mfn_x(l4[i4])) : NULL; l3 = (l4 && mfn_valid(l4[i4])) ? map_domain_page(l4[i4]) : NULL;
- for ( ; (pages < sc->pages) && (i3 < LOGDIRTY_NODE_ENTRIES); i3++ ) - for ( ; (pages < sc->pages) && (i3 < LOGDIRTY_NODE_ENTRIES); i3++ )
+ for ( ; (pages < sc->pages) && (i3 < LOGDIRTY_NODE_ENTRIES); + for ( ; (pages < sc->pages) && (i3 < LOGDIRTY_NODE_ENTRIES);
+ i3++, i2 = 0 ) + i3++, i2 = 0 )
{ {
l2 = ((l3 && mfn_valid(l3[i3])) ? l2 = ((l3 && mfn_valid(l3[i3])) ?
map_domain_page(mfn_x(l3[i3])) : NULL); map_domain_page(l3[i3]) : NULL);
- for ( i2 = 0; - for ( i2 = 0;
- (pages < sc->pages) && (i2 < LOGDIRTY_NODE_ENTRIES); - (pages < sc->pages) && (i2 < LOGDIRTY_NODE_ENTRIES);
- i2++ ) - i2++ )
@ -122,7 +152,7 @@ index 6b788f7..06dc7fa 100644
{ {
unsigned int bytes = PAGE_SIZE; unsigned int bytes = PAGE_SIZE;
l1 = ((l2 && mfn_valid(l2[i2])) ? l1 = ((l2 && mfn_valid(l2[i2])) ?
@@ -471,15 +529,28 @@ static int paging_log_dirty_op(struct domain *d, @@ -498,15 +555,28 @@ static int paging_log_dirty_op(struct domain *d,
bytes = (unsigned int)((sc->pages - pages + 7) >> 3); bytes = (unsigned int)((sc->pages - pages + 7) >> 3);
if ( likely(peek) ) if ( likely(peek) )
{ {
@ -158,7 +188,7 @@ index 6b788f7..06dc7fa 100644
} }
pages += bytes << 3; pages += bytes << 3;
if ( l1 ) if ( l1 )
@@ -496,6 +567,7 @@ static int paging_log_dirty_op(struct domain *d, @@ -524,6 +594,7 @@ static int paging_log_dirty_op(struct domain *d,
{ {
d->arch.paging.preempt.log_dirty.i4 = i4; d->arch.paging.preempt.log_dirty.i4 = i4;
d->arch.paging.preempt.log_dirty.i3 = i3 + 1; d->arch.paging.preempt.log_dirty.i3 = i3 + 1;
@ -166,7 +196,7 @@ index 6b788f7..06dc7fa 100644
rv = -ERESTART; rv = -ERESTART;
break; break;
} }
@@ -508,6 +580,7 @@ static int paging_log_dirty_op(struct domain *d, @@ -536,6 +607,7 @@ static int paging_log_dirty_op(struct domain *d,
{ {
d->arch.paging.preempt.log_dirty.i4 = i4 + 1; d->arch.paging.preempt.log_dirty.i4 = i4 + 1;
d->arch.paging.preempt.log_dirty.i3 = 0; d->arch.paging.preempt.log_dirty.i3 = 0;
@ -174,7 +204,7 @@ index 6b788f7..06dc7fa 100644
rv = -ERESTART; rv = -ERESTART;
} }
if ( rv ) if ( rv )
@@ -537,6 +610,7 @@ static int paging_log_dirty_op(struct domain *d, @@ -565,6 +637,7 @@ static int paging_log_dirty_op(struct domain *d,
if ( rv ) if ( rv )
{ {
/* Never leave the domain paused on real errors. */ /* Never leave the domain paused on real errors. */
@ -182,7 +212,7 @@ index 6b788f7..06dc7fa 100644
ASSERT(rv == -ERESTART); ASSERT(rv == -ERESTART);
return rv; return rv;
} }
@@ -549,12 +623,14 @@ static int paging_log_dirty_op(struct domain *d, @@ -577,12 +650,14 @@ static int paging_log_dirty_op(struct domain *d,
* paging modes (shadow or hap). Safe because the domain is paused. */ * paging modes (shadow or hap). Safe because the domain is paused. */
d->arch.paging.log_dirty.clean_dirty_bitmap(d); d->arch.paging.log_dirty.clean_dirty_bitmap(d);
} }
@ -198,10 +228,10 @@ index 6b788f7..06dc7fa 100644
if ( l1 ) if ( l1 )
diff --git a/xen/include/asm-x86/domain.h b/xen/include/asm-x86/domain.h diff --git a/xen/include/asm-x86/domain.h b/xen/include/asm-x86/domain.h
index 6a77a93..63dea9c 100644 index 165e533..0dc1ed8 100644
--- a/xen/include/asm-x86/domain.h --- a/xen/include/asm-x86/domain.h
+++ b/xen/include/asm-x86/domain.h +++ b/xen/include/asm-x86/domain.h
@@ -197,6 +197,7 @@ struct paging_domain { @@ -206,6 +206,7 @@ struct paging_domain {
unsigned long done:PADDR_BITS - PAGE_SHIFT; unsigned long done:PADDR_BITS - PAGE_SHIFT;
unsigned long i4:PAGETABLE_ORDER; unsigned long i4:PAGETABLE_ORDER;
unsigned long i3:PAGETABLE_ORDER; unsigned long i3:PAGETABLE_ORDER;
@ -210,5 +240,5 @@ index 6a77a93..63dea9c 100644
}; };
} preempt; } preempt;
-- --
1.9.5 (Apple Git-50.3) 2.7.4 (Apple Git-66)

View file

@ -1,120 +0,0 @@
From 055ee44e3cc7c40dc3a3319370d287591771a7f3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>
Date: Fri, 9 Oct 2015 12:57:32 +0200
Subject: [PATCH 3/8] x86/shadow: fix shadow_track_dirty_vram to work on hvm
guests
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Modify shadow_track_dirty_vram to use a local buffer and then flush to the
guest without the paging_lock held. This is modeled after
hap_track_dirty_vram.
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Reviewed-by: Tim Deegan <tim@xen.org>
---
xen/arch/x86/mm/shadow/common.c | 49 +++++++++++++++++++++++++----------------
1 file changed, 30 insertions(+), 19 deletions(-)
diff --git a/xen/arch/x86/mm/shadow/common.c b/xen/arch/x86/mm/shadow/common.c
index a5eed28..6b91b8c 100644
--- a/xen/arch/x86/mm/shadow/common.c
+++ b/xen/arch/x86/mm/shadow/common.c
@@ -3478,7 +3478,7 @@ void shadow_clean_dirty_bitmap(struct domain *d)
int shadow_track_dirty_vram(struct domain *d,
unsigned long begin_pfn,
unsigned long nr,
- XEN_GUEST_HANDLE_64(uint8) dirty_bitmap)
+ XEN_GUEST_HANDLE_64(uint8) guest_dirty_bitmap)
{
int rc;
unsigned long end_pfn = begin_pfn + nr;
@@ -3488,6 +3488,7 @@ int shadow_track_dirty_vram(struct domain *d,
p2m_type_t t;
struct sh_dirty_vram *dirty_vram;
struct p2m_domain *p2m = p2m_get_hostp2m(d);
+ uint8_t *dirty_bitmap = NULL;
if ( end_pfn < begin_pfn || end_pfn > p2m->max_mapped_pfn + 1 )
return -EINVAL;
@@ -3516,6 +3517,12 @@ int shadow_track_dirty_vram(struct domain *d,
goto out;
}
+ dirty_bitmap = vzalloc(dirty_size);
+ if ( dirty_bitmap == NULL )
+ {
+ rc = -ENOMEM;
+ goto out;
+ }
/* This should happen seldomly (Video mode change),
* no need to be careful. */
if ( !dirty_vram )
@@ -3546,12 +3553,8 @@ int shadow_track_dirty_vram(struct domain *d,
rc = -ENODATA;
}
else if (dirty_vram->last_dirty == -1)
- {
/* still completely clean, just copy our empty bitmap */
- rc = -EFAULT;
- if ( copy_to_guest(dirty_bitmap, dirty_vram->dirty_bitmap, dirty_size) == 0 )
- rc = 0;
- }
+ memcpy(dirty_bitmap, dirty_vram->dirty_bitmap, dirty_size);
else
{
unsigned long map_mfn = INVALID_MFN;
@@ -3630,21 +3633,19 @@ int shadow_track_dirty_vram(struct domain *d,
if ( map_sl1p )
sh_unmap_domain_page(map_sl1p);
- rc = -EFAULT;
- if ( copy_to_guest(dirty_bitmap, dirty_vram->dirty_bitmap, dirty_size) == 0 ) {
- memset(dirty_vram->dirty_bitmap, 0, dirty_size);
- if (dirty_vram->last_dirty + SECONDS(2) < NOW())
+ memcpy(dirty_bitmap, dirty_vram->dirty_bitmap, dirty_size);
+ memset(dirty_vram->dirty_bitmap, 0, dirty_size);
+ if ( dirty_vram->last_dirty + SECONDS(2) < NOW() )
+ {
+ /* was clean for more than two seconds, try to disable guest
+ * write access */
+ for ( i = begin_pfn; i < end_pfn; i++ )
{
- /* was clean for more than two seconds, try to disable guest
- * write access */
- for ( i = begin_pfn; i < end_pfn; i++ ) {
- mfn_t mfn = get_gfn_query_unlocked(d, i, &t);
- if (mfn_x(mfn) != INVALID_MFN)
- flush_tlb |= sh_remove_write_access(d->vcpu[0], mfn, 1, 0);
- }
- dirty_vram->last_dirty = -1;
+ mfn_t mfn = get_gfn_query_unlocked(d, i, &t);
+ if ( mfn_x(mfn) != INVALID_MFN )
+ flush_tlb |= sh_remove_write_access(d->vcpu[0], mfn, 1, 0);
}
- rc = 0;
+ dirty_vram->last_dirty = -1;
}
}
if ( flush_tlb )
@@ -3659,6 +3660,16 @@ out_dirty_vram:
out:
paging_unlock(d);
+ if ( rc == 0 && dirty_bitmap != NULL &&
+ copy_to_guest(guest_dirty_bitmap, dirty_bitmap, dirty_size) )
+ {
+ paging_lock(d);
+ for ( i = 0; i < dirty_size; i++ )
+ dirty_vram->dirty_bitmap[i] |= dirty_bitmap[i];
+ paging_unlock(d);
+ rc = -EFAULT;
+ }
+ vfree(dirty_bitmap);
p2m_unlock(p2m_get_hostp2m(d));
return rc;
}
--
1.9.5 (Apple Git-50.3)

View file

@ -1,44 +0,0 @@
From 50ca52274eda838f0562938fae3432a0f05f2585 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>
Date: Fri, 9 Oct 2015 12:57:32 +0200
Subject: [PATCH 4/8] x86/hap: make hap_track_dirty_vram use non-contiguous
memory for temporary map
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Just like it's done for shadow_track_dirty_vram allocate the temporary
buffer using non-contiguous memory.
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Reviewed-by: Tim Deegan <tim@xen.org>
---
xen/arch/x86/mm/hap/hap.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/xen/arch/x86/mm/hap/hap.c b/xen/arch/x86/mm/hap/hap.c
index abf3d7a..f7b12a8 100644
--- a/xen/arch/x86/mm/hap/hap.c
+++ b/xen/arch/x86/mm/hap/hap.c
@@ -87,7 +87,7 @@ int hap_track_dirty_vram(struct domain *d,
}
rc = -ENOMEM;
- dirty_bitmap = xzalloc_bytes(size);
+ dirty_bitmap = vzalloc(size);
if ( !dirty_bitmap )
goto out;
@@ -168,8 +168,7 @@ int hap_track_dirty_vram(struct domain *d,
p2m_ram_logdirty, p2m_ram_rw);
}
out:
- if ( dirty_bitmap )
- xfree(dirty_bitmap);
+ vfree(dirty_bitmap);
return rc;
}
--
1.9.5 (Apple Git-50.3)

View file

@ -1,33 +0,0 @@
From bec71ff2b61acc42e71a2bd79ec5cf172130e5f8 Mon Sep 17 00:00:00 2001
From: Roger Pau Monne <roger.pau@citrix.com>
Date: Fri, 9 Oct 2015 12:57:32 +0200
Subject: [PATCH 6/8] xen/pvh: enable mmu_update hypercall
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This is needed for performing save/restore of PV guests.
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Cc: Tim Deegan <tim@xen.org>
Cc: Jan Beulich <jbeulich@suse.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>
---
xen/arch/x86/hvm/hvm.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c
index 7d53c6c..d3fdc3d 100644
--- a/xen/arch/x86/hvm/hvm.c
+++ b/xen/arch/x86/hvm/hvm.c
@@ -4843,6 +4843,7 @@ static hvm_hypercall_t *const pvh_hypercall64_table[NR_hypercalls] = {
[ __HYPERVISOR_grant_table_op ] = (hvm_hypercall_t *)hvm_grant_table_op,
HYPERCALL(vcpu_op),
HYPERCALL(mmuext_op),
+ HYPERCALL(mmu_update),
HYPERCALL(xsm_op),
HYPERCALL(sched_op),
HYPERCALL(event_channel_op),
--
1.9.5 (Apple Git-50.3)

View file

@ -1,86 +0,0 @@
From 43f76b1443c8fc3b54dbb9fb466becbb9d584d6d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <roger.pau@citrix.com>
Date: Fri, 9 Oct 2015 12:57:33 +0200
Subject: [PATCH 7/8] iommu: fix usage of shared EPT/IOMMU page tables on PVH
guests
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
iommu_share_p2m_table should not prevent PVH guests from using a shared page
table between the IOMMU and EPT. Clean the code by removing the asserts in
the vendor specific implementations (amd_iommu_share_p2m, iommu_set_pgd),
and moving the hap_enabled assert to the caller (iommu_share_p2m_table).
Also fix another incorrect usage of is_hvm_domain usage in
arch_iommu_populate_page_table. This has not given problems so far because
all the pages in PVH guests are of type PGT_writable_page.
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Tested-by: David Vrabel <david.vrabel@citrix.com>
Reviewed-by: Tim Deegan <tim@xen.org>
Acked-by: Kevin Tian <kevin.tian@intel.com>
---
xen/drivers/passthrough/amd/iommu_map.c | 2 --
xen/drivers/passthrough/iommu.c | 3 ++-
xen/drivers/passthrough/vtd/iommu.c | 2 --
xen/drivers/passthrough/x86/iommu.c | 2 +-
4 files changed, 3 insertions(+), 6 deletions(-)
diff --git a/xen/drivers/passthrough/amd/iommu_map.c b/xen/drivers/passthrough/amd/iommu_map.c
index a8c60ec..31dc05d 100644
--- a/xen/drivers/passthrough/amd/iommu_map.c
+++ b/xen/drivers/passthrough/amd/iommu_map.c
@@ -785,8 +785,6 @@ void amd_iommu_share_p2m(struct domain *d)
struct page_info *p2m_table;
mfn_t pgd_mfn;
- ASSERT( is_hvm_domain(d) && d->arch.hvm_domain.hap_enabled );
-
if ( !iommu_use_hap_pt(d) )
return;
diff --git a/xen/drivers/passthrough/iommu.c b/xen/drivers/passthrough/iommu.c
index cc12735..7fcbbb1 100644
--- a/xen/drivers/passthrough/iommu.c
+++ b/xen/drivers/passthrough/iommu.c
@@ -332,7 +332,8 @@ void iommu_share_p2m_table(struct domain* d)
{
const struct iommu_ops *ops = iommu_get_ops();
- if ( iommu_enabled && is_hvm_domain(d) )
+ ASSERT( hap_enabled(d) );
+ if ( iommu_enabled )
ops->share_p2m(d);
}
diff --git a/xen/drivers/passthrough/vtd/iommu.c b/xen/drivers/passthrough/vtd/iommu.c
index 5a946d4..a5a111c 100644
--- a/xen/drivers/passthrough/vtd/iommu.c
+++ b/xen/drivers/passthrough/vtd/iommu.c
@@ -1802,8 +1802,6 @@ static void iommu_set_pgd(struct domain *d)
struct hvm_iommu *hd = domain_hvm_iommu(d);
mfn_t pgd_mfn;
- ASSERT( is_hvm_domain(d) && d->arch.hvm_domain.hap_enabled );
-
if ( !iommu_use_hap_pt(d) )
return;
diff --git a/xen/drivers/passthrough/x86/iommu.c b/xen/drivers/passthrough/x86/iommu.c
index ce0ca5a..3d2c12a 100644
--- a/xen/drivers/passthrough/x86/iommu.c
+++ b/xen/drivers/passthrough/x86/iommu.c
@@ -56,7 +56,7 @@ int arch_iommu_populate_page_table(struct domain *d)
while ( !rc && (page = page_list_remove_head(&d->page_list)) )
{
- if ( is_hvm_domain(d) ||
+ if ( has_hvm_container_domain(d) ||
(page->u.inuse.type_info & PGT_type_mask) == PGT_writable_page )
{
BUG_ON(SHARED_M2P(mfn_to_gmfn(d, page_to_mfn(page))));
--
1.9.5 (Apple Git-50.3)

View file

@ -1,127 +0,0 @@
x86/HVM: always intercept #AC and #DB
Both being benign exceptions, and both being possible to get triggered
by exception delivery, this is required to prevent a guest from locking
up a CPU (resulting from no other VM exits occurring once getting into
such a loop).
The specific scenarios:
1) #AC may be raised during exception delivery if the handler is set to
be a ring-3 one by a 32-bit guest, and the stack is misaligned.
2) #DB may be raised during exception delivery when a breakpoint got
placed on a data structure involved in delivering the exception. This
can result in an endless loop when a 64-bit guest uses a non-zero IST
for the vector 1 IDT entry, but even without use of IST the time it
takes until a contributory fault would get raised (results depending
on the handler) may be quite long.
This is XSA-156.
Reported-by: Benjamin Serebrin <serebrin@google.com>
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
Tested-by: Andrew Cooper <andrew.cooper3@citrix.com>
--- a/xen/arch/x86/hvm/svm/svm.c
+++ b/xen/arch/x86/hvm/svm/svm.c
@@ -1045,10 +1045,11 @@ static void noreturn svm_do_resume(struc
unlikely(v->arch.hvm_vcpu.debug_state_latch != debug_state) )
{
uint32_t intercepts = vmcb_get_exception_intercepts(vmcb);
- uint32_t mask = (1U << TRAP_debug) | (1U << TRAP_int3);
+
v->arch.hvm_vcpu.debug_state_latch = debug_state;
vmcb_set_exception_intercepts(
- vmcb, debug_state ? (intercepts | mask) : (intercepts & ~mask));
+ vmcb, debug_state ? (intercepts | (1U << TRAP_int3))
+ : (intercepts & ~(1U << TRAP_int3)));
}
if ( v->arch.hvm_svm.launch_core != smp_processor_id() )
@@ -2435,8 +2436,9 @@ void svm_vmexit_handler(struct cpu_user_
case VMEXIT_EXCEPTION_DB:
if ( !v->domain->debugger_attached )
- goto unexpected_exit_type;
- domain_pause_for_debugger();
+ hvm_inject_hw_exception(TRAP_debug, HVM_DELIVER_NO_ERROR_CODE);
+ else
+ domain_pause_for_debugger();
break;
case VMEXIT_EXCEPTION_BP:
@@ -2484,6 +2486,11 @@ void svm_vmexit_handler(struct cpu_user_
break;
}
+ case VMEXIT_EXCEPTION_AC:
+ HVMTRACE_1D(TRAP, TRAP_alignment_check);
+ hvm_inject_hw_exception(TRAP_alignment_check, vmcb->exitinfo1);
+ break;
+
case VMEXIT_EXCEPTION_UD:
svm_vmexit_ud_intercept(regs);
break;
--- a/xen/arch/x86/hvm/vmx/vmx.c
+++ b/xen/arch/x86/hvm/vmx/vmx.c
@@ -1186,16 +1186,10 @@ static void vmx_update_host_cr3(struct v
void vmx_update_debug_state(struct vcpu *v)
{
- unsigned long mask;
-
- mask = 1u << TRAP_int3;
- if ( !cpu_has_monitor_trap_flag )
- mask |= 1u << TRAP_debug;
-
if ( v->arch.hvm_vcpu.debug_state_latch )
- v->arch.hvm_vmx.exception_bitmap |= mask;
+ v->arch.hvm_vmx.exception_bitmap |= 1U << TRAP_int3;
else
- v->arch.hvm_vmx.exception_bitmap &= ~mask;
+ v->arch.hvm_vmx.exception_bitmap &= ~(1U << TRAP_int3);
vmx_vmcs_enter(v);
vmx_update_exception_bitmap(v);
@@ -2801,9 +2795,10 @@ void vmx_vmexit_handler(struct cpu_user_
__vmread(EXIT_QUALIFICATION, &exit_qualification);
HVMTRACE_1D(TRAP_DEBUG, exit_qualification);
write_debugreg(6, exit_qualification | 0xffff0ff0);
- if ( !v->domain->debugger_attached || cpu_has_monitor_trap_flag )
- goto exit_and_crash;
- domain_pause_for_debugger();
+ if ( !v->domain->debugger_attached )
+ hvm_inject_hw_exception(vector, HVM_DELIVER_NO_ERROR_CODE);
+ else
+ domain_pause_for_debugger();
break;
case TRAP_int3:
{
@@ -2868,6 +2863,11 @@ void vmx_vmexit_handler(struct cpu_user_
hvm_inject_page_fault(regs->error_code, exit_qualification);
break;
+ case TRAP_alignment_check:
+ HVMTRACE_1D(TRAP, vector);
+ __vmread(VM_EXIT_INTR_ERROR_CODE, &ecode);
+ hvm_inject_hw_exception(vector, ecode);
+ break;
case TRAP_nmi:
if ( (intr_info & INTR_INFO_INTR_TYPE_MASK) !=
(X86_EVENTTYPE_NMI << 8) )
--- a/xen/include/asm-x86/hvm/hvm.h
+++ b/xen/include/asm-x86/hvm/hvm.h
@@ -378,7 +378,10 @@ static inline int hvm_event_pending(stru
(X86_CR4_VMXE | X86_CR4_PAE | X86_CR4_MCE))
/* These exceptions must always be intercepted. */
-#define HVM_TRAP_MASK ((1U << TRAP_machine_check) | (1U << TRAP_invalid_op))
+#define HVM_TRAP_MASK ((1U << TRAP_debug) | \
+ (1U << TRAP_invalid_op) | \
+ (1U << TRAP_alignment_check) | \
+ (1U << TRAP_machine_check))
/*
* x86 event types. This enumeration is valid for:

View file

@ -1,47 +0,0 @@
memory: fix XENMEM_exchange error handling
assign_pages() can fail due to the domain getting killed in parallel,
which should not result in a hypervisor crash.
Also delete a redundant put_gfn() - all relevant paths leading to the
"fail" label already do this (and there are also paths where it was
plain wrong). All of the put_gfn()-s got introduced by 51032ca058
("Modify naming of queries into the p2m"), including the otherwise
unneeded initializer for k (with even a kind of misleading comment -
the compiler warning could actually have served as a hint that the use
is wrong).
This is XSA-159.
Reported-by: Julien Grall <julien.grall@citrix.com>
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
--- a/xen/common/memory.c
+++ b/xen/common/memory.c
@@ -334,7 +334,7 @@ static long memory_exchange(XEN_GUEST_HA
PAGE_LIST_HEAD(out_chunk_list);
unsigned long in_chunk_order, out_chunk_order;
xen_pfn_t gpfn, gmfn, mfn;
- unsigned long i, j, k = 0; /* gcc ... */
+ unsigned long i, j, k;
unsigned int memflags = 0;
long rc = 0;
struct domain *d;
@@ -572,11 +572,12 @@ static long memory_exchange(XEN_GUEST_HA
fail:
/* Reassign any input pages we managed to steal. */
while ( (page = page_list_remove_head(&in_chunk_list)) )
- {
- put_gfn(d, gmfn + k--);
if ( assign_pages(d, page, 0, MEMF_no_refcount) )
- BUG();
- }
+ {
+ BUG_ON(!d->is_dying);
+ if ( test_and_clear_bit(_PGC_allocated, &page->count_info) )
+ put_page(page);
+ }
dying:
rcu_unlock_domain(d);

View file

@ -1,85 +0,0 @@
x86: don't leak ST(n)/XMMn values to domains first using them
FNINIT doesn't alter these registers, and hence using it is
insufficient to initialize a guest's initial state.
This is XSA-165.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
--- a/xen/arch/x86/domain.c
+++ b/xen/arch/x86/domain.c
@@ -798,6 +798,17 @@ int arch_set_info_guest(
if ( v->arch.xsave_area )
v->arch.xsave_area->xsave_hdr.xstate_bv = XSTATE_FP_SSE;
}
+ else if ( v->arch.xsave_area )
+ memset(&v->arch.xsave_area->xsave_hdr, 0,
+ sizeof(v->arch.xsave_area->xsave_hdr));
+ else
+ {
+ typeof(v->arch.xsave_area->fpu_sse) *fpu_sse = v->arch.fpu_ctxt;
+
+ memset(fpu_sse, 0, sizeof(*fpu_sse));
+ fpu_sse->fcw = FCW_DEFAULT;
+ fpu_sse->mxcsr = MXCSR_DEFAULT;
+ }
if ( !compat )
{
--- a/xen/arch/x86/i387.c
+++ b/xen/arch/x86/i387.c
@@ -17,19 +17,6 @@
#include <asm/xstate.h>
#include <asm/asm_defns.h>
-static void fpu_init(void)
-{
- unsigned long val;
-
- asm volatile ( "fninit" );
- if ( cpu_has_xmm )
- {
- /* load default value into MXCSR control/status register */
- val = MXCSR_DEFAULT;
- asm volatile ( "ldmxcsr %0" : : "m" (val) );
- }
-}
-
/*******************************/
/* FPU Restore Functions */
/*******************************/
@@ -248,15 +235,8 @@ void vcpu_restore_fpu_lazy(struct vcpu *
if ( cpu_has_xsave )
fpu_xrstor(v, XSTATE_LAZY);
- else if ( v->fpu_initialised )
- {
- if ( cpu_has_fxsr )
- fpu_fxrstor(v);
- else
- fpu_frstor(v);
- }
else
- fpu_init();
+ fpu_fxrstor(v);
v->fpu_initialised = 1;
v->fpu_dirtied = 1;
@@ -317,7 +297,14 @@ int vcpu_init_fpu(struct vcpu *v)
else
{
v->arch.fpu_ctxt = _xzalloc(sizeof(v->arch.xsave_area->fpu_sse), 16);
- if ( !v->arch.fpu_ctxt )
+ if ( v->arch.fpu_ctxt )
+ {
+ typeof(v->arch.xsave_area->fpu_sse) *fpu_sse = v->arch.fpu_ctxt;
+
+ fpu_sse->fcw = FCW_DEFAULT;
+ fpu_sse->mxcsr = MXCSR_DEFAULT;
+ }
+ else
{
rc = -ENOMEM;
goto done;

View file

@ -1,44 +0,0 @@
x86/HVM: avoid reading ioreq state more than once
Otherwise, especially when the compiler chooses to translate the
switch() to a jump table, unpredictable behavior (and in the jump table
case arbitrary code execution) can result.
This is XSA-166.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
--- a/xen/arch/x86/hvm/hvm.c
+++ b/xen/arch/x86/hvm/hvm.c
@@ -400,23 +400,23 @@ bool_t hvm_io_pending(struct vcpu *v)
static bool_t hvm_wait_for_io(struct hvm_ioreq_vcpu *sv, ioreq_t *p)
{
+ unsigned int state;
+
/* NB. Optimised for common case (p->state == STATE_IOREQ_NONE). */
- while ( p->state != STATE_IOREQ_NONE )
+ while ( (state = p->state) != STATE_IOREQ_NONE )
{
- switch ( p->state )
+ rmb();
+ switch ( state )
{
case STATE_IORESP_READY: /* IORESP_READY -> NONE */
- rmb(); /* see IORESP_READY /then/ read contents of ioreq */
hvm_io_assist(p);
break;
case STATE_IOREQ_READY: /* IOREQ_{READY,INPROCESS} -> IORESP_READY */
case STATE_IOREQ_INPROCESS:
- wait_on_xen_event_channel(sv->ioreq_evtchn,
- (p->state != STATE_IOREQ_READY) &&
- (p->state != STATE_IOREQ_INPROCESS));
+ wait_on_xen_event_channel(sv->ioreq_evtchn, p->state != state);
break;
default:
- gdprintk(XENLOG_ERR, "Weird HVM iorequest state %d.\n", p->state);
+ gdprintk(XENLOG_ERR, "Weird HVM iorequest state %u\n", state);
domain_crash(sv->vcpu->domain);
return 0; /* bail */
}

View file

@ -1,77 +0,0 @@
x86/mm: PV superpage handling lacks sanity checks
MMUEXT_{,UN}MARK_SUPER fail to check the input MFN for validity before
dereferencing pointers into the superpage frame table.
get_superpage() has a similar issue.
This is XSA-167.
Reported-by: Qinghao Tang <luodalongde@gmail.com>
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
--- a/xen/arch/x86/mm.c
+++ b/xen/arch/x86/mm.c
@@ -2624,6 +2624,9 @@ int get_superpage(unsigned long mfn, str
ASSERT(opt_allow_superpage);
+ if ( !mfn_valid(mfn | (L1_PAGETABLE_ENTRIES - 1)) )
+ return -EINVAL;
+
spage = mfn_to_spage(mfn);
y = spage->type_info;
do {
@@ -3401,42 +3404,26 @@ long do_mmuext_op(
}
case MMUEXT_MARK_SUPER:
+ case MMUEXT_UNMARK_SUPER:
{
unsigned long mfn = op.arg1.mfn;
- if ( unlikely(d != pg_owner) )
- rc = -EPERM;
- else if ( mfn & (L1_PAGETABLE_ENTRIES-1) )
- {
- MEM_LOG("Unaligned superpage reference mfn %lx", mfn);
- okay = 0;
- }
- else if ( !opt_allow_superpage )
+ if ( !opt_allow_superpage )
{
MEM_LOG("Superpages disallowed");
rc = -ENOSYS;
}
- else
- rc = mark_superpage(mfn_to_spage(mfn), d);
- break;
- }
-
- case MMUEXT_UNMARK_SUPER:
- {
- unsigned long mfn = op.arg1.mfn;
-
- if ( unlikely(d != pg_owner) )
+ else if ( unlikely(d != pg_owner) )
rc = -EPERM;
- else if ( mfn & (L1_PAGETABLE_ENTRIES-1) )
+ else if ( mfn & (L1_PAGETABLE_ENTRIES - 1) )
{
MEM_LOG("Unaligned superpage reference mfn %lx", mfn);
- okay = 0;
- }
- else if ( !opt_allow_superpage )
- {
- MEM_LOG("Superpages disallowed");
- rc = -ENOSYS;
+ rc = -EINVAL;
}
+ else if ( !mfn_valid(mfn | (L1_PAGETABLE_ENTRIES - 1)) )
+ rc = -EINVAL;
+ else if ( op.cmd == MMUEXT_MARK_SUPER )
+ rc = mark_superpage(mfn_to_spage(mfn), d);
else
rc = unmark_superpage(mfn_to_spage(mfn));
break;

View file

@ -1,27 +0,0 @@
x86/VMX: prevent INVVPID failure due to non-canonical guest address
While INVLPG (and on SVM INVLPGA) don't fault on non-canonical
addresses, INVVPID fails (in the "individual address" case) when passed
such an address.
Since such intercepted INVLPG are effectively no-ops anyway, don't fix
this in vmx_invlpg_intercept(), but instead have paging_invlpg() never
return true in such a case.
This is XSA-168.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
--- a/xen/include/asm-x86/paging.h
+++ b/xen/include/asm-x86/paging.h
@@ -245,7 +245,7 @@ paging_fault(unsigned long va, struct cp
* or 0 if it's safe not to do so. */
static inline int paging_invlpg(struct vcpu *v, unsigned long va)
{
- return paging_get_hostmode(v)->invlpg(v, va);
+ return is_canonical_address(va) && paging_get_hostmode(v)->invlpg(v, va);
}
/* Translate a guest virtual address to the frame number that the

View file

@ -1,79 +0,0 @@
x86/VMX: sanitize rIP before re-entering guest
... to prevent guest user mode arranging for a guest crash (due to
failed VM entry). (On the AMD system I checked, hardware is doing
exactly the canonicalization being added here.)
Note that fixing this in an architecturally correct way would be quite
a bit more involved: Making the x86 instruction emulator check all
branch targets for validity, plus dealing with invalid rIP resulting
from update_guest_eip() or incoming directly during a VM exit. The only
way to get the latter right would be by not having hardware do the
injection.
Note further that there are a two early returns from
vmx_vmexit_handler(): One (through vmx_failed_vmentry()) leads to
domain_crash() anyway, and the other covers real mode only and can
neither occur with a non-canonical rIP nor result in an altered rIP,
so we don't need to force those paths through the checking logic.
This is XSA-170.
Reported-by: 刘令 <liuling-it@360.cn>
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
Tested-by: Andrew Cooper <andrew.cooper3@citrix.com>
--- a/xen/arch/x86/hvm/vmx/vmx.c
+++ b/xen/arch/x86/hvm/vmx/vmx.c
@@ -2675,7 +2675,7 @@ void vmx_handle_EOI_induced_exit(struct
void vmx_vmexit_handler(struct cpu_user_regs *regs)
{
unsigned long exit_qualification, exit_reason, idtv_info, intr_info = 0;
- unsigned int vector = 0;
+ unsigned int vector = 0, mode;
struct vcpu *v = current;
__vmread(GUEST_RIP, &regs->rip);
@@ -3219,6 +3219,41 @@ void vmx_vmexit_handler(struct cpu_user_
out:
if ( nestedhvm_vcpu_in_guestmode(v) )
nvmx_idtv_handling();
+
+ /*
+ * VM entry will fail (causing the guest to get crashed) if rIP (and
+ * rFLAGS, but we don't have an issue there) doesn't meet certain
+ * criteria. As we must not allow less than fully privileged mode to have
+ * such an effect on the domain, we correct rIP in that case (accepting
+ * this not being architecturally correct behavior, as the injected #GP
+ * fault will then not see the correct [invalid] return address).
+ * And since we know the guest will crash, we crash it right away if it
+ * already is in most privileged mode.
+ */
+ mode = vmx_guest_x86_mode(v);
+ if ( mode == 8 ? !is_canonical_address(regs->rip)
+ : regs->rip != regs->_eip )
+ {
+ struct segment_register ss;
+
+ gdprintk(XENLOG_WARNING, "Bad rIP %lx for mode %u\n", regs->rip, mode);
+
+ vmx_get_segment_register(v, x86_seg_ss, &ss);
+ if ( ss.attr.fields.dpl )
+ {
+ __vmread(VM_ENTRY_INTR_INFO, &intr_info);
+ if ( !(intr_info & INTR_INFO_VALID_MASK) )
+ hvm_inject_hw_exception(TRAP_gp_fault, 0);
+ /* Need to fix rIP nevertheless. */
+ if ( mode == 8 )
+ regs->rip = (long)(regs->rip << (64 - VADDR_BITS)) >>
+ (64 - VADDR_BITS);
+ else
+ regs->rip = regs->_eip;
+ }
+ else
+ domain_crash(v->domain);
+ }
}
void vmx_vmenter_helper(const struct cpu_user_regs *regs)

View file

@ -1,11 +1,13 @@
# $FreeBSD$ # $FreeBSD$
PORTNAME= xen PORTNAME= xen
PORTVERSION= 4.5.2
PORTREVISION= 3
CATEGORIES= sysutils emulators
MASTER_SITES= http://bits.xensource.com/oss-xen/release/${PORTVERSION}/
PKGNAMESUFFIX= -tools PKGNAMESUFFIX= -tools
PORTVERSION= 4.7.0
PORTREVISION= 0
RCVERSION= 4
DISTNAME= ${PORTNAME}-${DISTVERSION}-rc${RCVERSION}
CATEGORIES= sysutils emulators
MASTER_SITES= http://bits.xensource.com/oss-xen/release/${DISTVERSION}-rc${RCVERSION}/
MAINTAINER= royger@FreeBSD.org MAINTAINER= royger@FreeBSD.org
COMMENT= Xen management tool, based on LibXenlight COMMENT= Xen management tool, based on LibXenlight
@ -17,42 +19,40 @@ BROKEN_FreeBSD_10= does not build
LIB_DEPENDS= libyajl.so:devel/yajl \ LIB_DEPENDS= libyajl.so:devel/yajl \
liblzo2.so:archivers/lzo2 \ liblzo2.so:archivers/lzo2 \
libpixman-1.so:x11/pixman libpixman-1.so:x11/pixman \
libargp.so:devel/argp-standalone
BUILD_DEPENDS= dev86>0:devel/dev86 \ BUILD_DEPENDS= dev86>0:devel/dev86 \
seabios>0:misc/seabios seabios>0:misc/seabios \
markdown>0:textproc/markdown
OPTIONS_DEFINE= DOCS OPTIONS_DEFINE= DOCS
ONLY_FOR_ARCHS= amd64 ONLY_FOR_ARCHS= amd64
ONLY_FOR_ARCHS_REASON= "not yet ported to anything other than amd64" ONLY_FOR_ARCHS_REASON= "not yet ported to anything other than amd64"
WRKSRC= ${WRKDIR}/xen-${PORTVERSION} USES= cpe gmake libtool perl5 pkgconfig python shebangfix localbase \
gettext
USES= cpe gmake libtool perl5 pkgconfig python shebangfix localbase
USE_GNOME= glib20 USE_GNOME= glib20
USE_LDCONFIG= yes USE_LDCONFIG= yes
GNU_CONFIGURE= yes GNU_CONFIGURE= yes
CONFIGURE_ENV= HOSTCC="${CC}" CC="${CC}" \ MAKE_ARGS= clang=y
ac_cv_path_BASH=${TRUE} \
ac_cv_path_XGETTEXT=${TRUE}
MAKE_ARGS= HOSTCC="${CC}" CC="${CC}" GCC="${CC}" cc="${GCC}" \
HOSTCFLAGS="${CFLAGS}" SEABIOS_PATH="${LOCALBASE}/share/seabios/bios.bin"
QEMU_ARGS= --disable-gtk \ QEMU_ARGS= --disable-gtk \
--disable-smartcard-nss \ --disable-smartcard-nss \
--disable-sdl \ --disable-sdl \
--disable-vte \ --disable-vte \
--disable-glx \
--disable-curses \ --disable-curses \
--disable-tools \ --disable-tools \
--disable-curl \ --disable-curl \
--cxx=c++ --cxx=c++
CFLAGS= -Wno-ignored-attributes -Qunused-arguments -Wno-header-guard \
-Wno-tautological-compare -Wno-format-extra-args -w
EXTRA_PATCHES= ${FILESDIR}/0002-libxc-fix-xc_dom_load_elf_symtab.patch:-p1 \ EXTRA_PATCHES= ${FILESDIR}/var_paths.patch:-p1
${FILESDIR}/xsa160-4.6.patch:-p1
CONFIGURE_ARGS+= --with-extra-qemuu-configure-args="${QEMU_ARGS}" \
--with-system-seabios=${LOCALBASE}/share/seabios/bios.bin
# Disable bash and xgettext tests, they are not needed on FreeBSD.
CONFIGURE_ENV+= ac_cv_path_BASH=${TRUE}
CONFIGURE_ARGS+= --with-extra-qemuu-configure-args="${QEMU_ARGS}"
SHEBANG_FILES= tools/misc/xencov_split \ SHEBANG_FILES= tools/misc/xencov_split \
tools/misc/xen-ringwatch tools/misc/xen-ringwatch
ALL_TARGET= tools docs ALL_TARGET= tools docs
@ -73,7 +73,7 @@ post-patch:
${WRKSRC}/tools/libxl/libxl_dm.c \ ${WRKSRC}/tools/libxl/libxl_dm.c \
${WRKSRC}/tools/qemu-xen-traditional/i386-dm/helper2.c \ ${WRKSRC}/tools/qemu-xen-traditional/i386-dm/helper2.c \
${WRKSRC}/docs/man/* ${WRKSRC}/docs/man/*
@for p in ${FILESDIR}/*qemuu*.patch; do \ @for p in `ls ${FILESDIR}/*qemuu*.patch 2>/dev/null`; do \
${ECHO_CMD} "====> Applying $${p##*/}" ; \ ${ECHO_CMD} "====> Applying $${p##*/}" ; \
${PATCH} -s -p1 -i $${p} -d ${WRKSRC}/tools/qemu-xen ; \ ${PATCH} -s -p1 -i $${p} -d ${WRKSRC}/tools/qemu-xen ; \
done done

View file

@ -1,2 +1,3 @@
SHA256 (xen-4.5.2.tar.gz) = 4c9e5dac4eea484974e9f76da2756c8e0973b4e884d28d37e955df9ebf00e7e8 TIMESTAMP = 1464773219
SIZE (xen-4.5.2.tar.gz) = 18416220 SHA256 (xen-4.7.0-rc4.tar.gz) = ad752bc80da2ab31287e5249adbeea2536b8141eefd7e8a45a3df42db727c630
SIZE (xen-4.7.0-rc4.tar.gz) = 20696897

View file

@ -1,125 +0,0 @@
From e438f954ae3c6685ccf83b3bd01983f3224af3ab Mon Sep 17 00:00:00 2001
From: Roger Pau Monne <roger.pau@citrix.com>
Date: Thu, 11 Jun 2015 17:31:43 +0200
Subject: [PATCH 2/2] libxc: fix xc_dom_load_elf_symtab
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
xc_dom_load_elf_symtab was incorrectly trying to perform the same
calculations already done in elf_parse_bsdsyms when load == 0 is used.
Instead of trying to repeat the calculations, just trust what
elf_parse_bsdsyms has already accounted for.
This also simplifies the code by allowing the non-load case to return
earlier.
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Cc: Ian Jackson <ian.jackson@eu.citrix.com>
Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Cc: Ian Campbell <ian.campbell@citrix.com>
Cc: Wei Liu <wei.liu2@citrix.com>
---
tools/libxc/xc_dom_elfloader.c | 33 ++++++++++++++-------------------
1 file changed, 14 insertions(+), 19 deletions(-)
diff --git a/tools/libxc/xc_dom_elfloader.c b/tools/libxc/xc_dom_elfloader.c
index 9843b1f..6ce1062 100644
--- a/tools/libxc/xc_dom_elfloader.c
+++ b/tools/libxc/xc_dom_elfloader.c
@@ -128,6 +128,8 @@ static elf_errorstatus xc_dom_load_elf_symtab(struct xc_dom_image *dom,
return 0;
}
+ size = elf->bsd_symtab_pend - elf->bsd_symtab_pstart;
+
if ( load )
{
char *hdr_ptr;
@@ -135,11 +137,10 @@ static elf_errorstatus xc_dom_load_elf_symtab(struct xc_dom_image *dom,
if ( !dom->bsd_symtab_start )
return 0;
- size = dom->kernel_seg.vend - dom->bsd_symtab_start;
hdr_ptr = xc_dom_vaddr_to_ptr(dom, dom->bsd_symtab_start, &allow_size);
if ( hdr_ptr == NULL )
{
- DOMPRINTF("%s/load: xc_dom_vaddr_to_ptr(dom,dom->bsd_symtab_start"
+ DOMPRINTF("%s: xc_dom_vaddr_to_ptr(dom,dom->bsd_symtab_start"
" => NULL", __FUNCTION__);
return -1;
}
@@ -152,8 +153,6 @@ static elf_errorstatus xc_dom_load_elf_symtab(struct xc_dom_image *dom,
{
char *hdr_ptr;
- size = sizeof(unsigned) + elf_size(elf, elf->ehdr) +
- elf_shdr_count(elf) * elf_size(elf, shdr);
hdr_ptr = xc_dom_malloc(dom, size);
if ( hdr_ptr == NULL )
return 0;
@@ -161,6 +160,8 @@ static elf_errorstatus xc_dom_load_elf_symtab(struct xc_dom_image *dom,
elf->caller_xdest_size = size;
hdr = ELF_REALPTR2PTRVAL(hdr_ptr);
dom->bsd_symtab_start = elf_round_up(elf, dom->kernel_seg.vend);
+ dom->kernel_seg.vend = elf_round_up(elf, dom->bsd_symtab_start + size);
+ return 0;
}
elf_memcpy_safe(elf, hdr + sizeof(unsigned),
@@ -189,9 +190,8 @@ static elf_errorstatus xc_dom_load_elf_symtab(struct xc_dom_image *dom,
}
if ( elf->caller_xdest_size < sizeof(unsigned) )
{
- DOMPRINTF("%s/%s: header size %"PRIx64" too small",
- __FUNCTION__, load ? "load" : "parse",
- (uint64_t)elf->caller_xdest_size);
+ DOMPRINTF("%s: header size %"PRIx64" too small",
+ __FUNCTION__, (uint64_t)elf->caller_xdest_size);
return -1;
}
if ( elf_init(&syms, elf->caller_xdest_base + sizeof(unsigned),
@@ -219,10 +219,9 @@ static elf_errorstatus xc_dom_load_elf_symtab(struct xc_dom_image *dom,
maxaddr = elf_round_up(&syms, symtab + elf_size(&syms, syms.ehdr) +
elf_shdr_count(&syms) * elf_size(&syms, shdr));
- DOMPRINTF("%s/%s: bsd_symtab_start=%" PRIx64 ", kernel.end=0x%" PRIx64
+ DOMPRINTF("%s: bsd_symtab_start=%" PRIx64 ", kernel.end=0x%" PRIx64
" -- symtab=0x%" PRIx64 ", maxaddr=0x%" PRIx64 "",
- __FUNCTION__, load ? "load" : "parse",
- dom->bsd_symtab_start, dom->kernel_seg.vend,
+ __FUNCTION__, dom->bsd_symtab_start, dom->kernel_seg.vend,
symtab, maxaddr);
count = elf_shdr_count(&syms);
@@ -279,13 +278,10 @@ static elf_errorstatus xc_dom_load_elf_symtab(struct xc_dom_image *dom,
type == SHT_SYMTAB ? "symtab" : "strtab",
size, maxaddr);
- if ( load )
- {
- shdr2 = elf_shdr_by_index(elf, h);
- elf_memcpy_safe(elf, elf_section_start(&syms, shdr),
- elf_section_start(elf, shdr2),
- size);
- }
+ shdr2 = elf_shdr_by_index(elf, h);
+ elf_memcpy_safe(elf, elf_section_start(&syms, shdr),
+ elf_section_start(elf, shdr2),
+ size);
}
/* Name is NULL. */
@@ -308,8 +304,7 @@ static elf_errorstatus xc_dom_load_elf_symtab(struct xc_dom_image *dom,
dom->bsd_symtab_start = 0;
return 0;
}
- if ( !load )
- dom->kernel_seg.vend = maxaddr;
+
return 0;
}
--
1.9.5 (Apple Git-50.3)

View file

@ -1,27 +0,0 @@
--- configure.orig 2015-01-12 16:53:24 UTC
+++ configure
@@ -1936,7 +1936,7 @@ XEN_RUN_DIR=$localstatedir/run/xen
XEN_LOG_DIR=$localstatedir/log/xen
-XEN_LIB_STORED=$localstatedir/lib/xenstored
+XEN_LIB_STORED=$localstatedir/db/xenstored
SHAREDIR=$prefix/share
@@ -1955,13 +1955,13 @@ XEN_SCRIPT_DIR=$XEN_CONFIG_DIR/scripts
case "$host_os" in
-*freebsd*) XEN_LOCK_DIR=$localstatedir/lib ;;
+*freebsd*) XEN_LOCK_DIR=$localstatedir/db ;;
*netbsd*) XEN_LOCK_DIR=$localstatedir/lib ;;
*) XEN_LOCK_DIR=$localstatedir/lock ;;
esac
-XEN_PAGING_DIR=$localstatedir/lib/xen/xenpaging
+XEN_PAGING_DIR=$localstatedir/db/xen/xenpaging

View file

@ -1,27 +0,0 @@
--- tools/configure.orig 2015-01-12 16:53:24 UTC
+++ tools/configure
@@ -3776,7 +3776,7 @@ XEN_RUN_DIR=$localstatedir/run/xen
XEN_LOG_DIR=$localstatedir/log/xen
-XEN_LIB_STORED=$localstatedir/lib/xenstored
+XEN_LIB_STORED=$localstatedir/db/xenstored
SHAREDIR=$prefix/share
@@ -3795,13 +3795,13 @@ XEN_SCRIPT_DIR=$XEN_CONFIG_DIR/scripts
case "$host_os" in
-*freebsd*) XEN_LOCK_DIR=$localstatedir/lib ;;
+*freebsd*) XEN_LOCK_DIR=$localstatedir/db ;;
*netbsd*) XEN_LOCK_DIR=$localstatedir/lib ;;
*) XEN_LOCK_DIR=$localstatedir/lock ;;
esac
-XEN_PAGING_DIR=$localstatedir/lib/xen/xenpaging
+XEN_PAGING_DIR=$localstatedir/db/xen/xenpaging

View file

@ -1,11 +0,0 @@
--- tools/libxc/xc_dom_bzimageloader.c.orig 2015-11-03 09:11:18 UTC
+++ tools/libxc/xc_dom_bzimageloader.c
@@ -469,7 +469,7 @@ static int xc_try_lzo1x_decode(
for ( *size = 0; ; )
{
- lzo_uint src_len, dst_len, out_len;
+ lzo_uint src_len, dst_len, out_len = 0;
unsigned char *tmp_buf;
msg = "Short input";

View file

@ -1,13 +0,0 @@
--- tools/misc/xenpm.c.orig 2015-11-03 09:11:18 UTC
+++ tools/misc/xenpm.c
@@ -97,8 +97,8 @@ static void parse_cpuid_and_int(int argc
if ( argc == 0 || sscanf(argv[argc > 1], "%d", val) != 1 )
{
- fprintf(stderr, argc ? "Invalid %s '%s'\n" : "Missing %s\n",
- what, argv[argc > 1]);
+ fprintf(stderr, argc ? "Invalid %s '%s'\n" : "Missing %s\n%s",
+ what, argc ? argv[argc > 1] : "");
exit(EINVAL);
}
}

View file

@ -1,10 +0,0 @@
--- tools/qemu-xen/configure.orig 2015-06-10 11:43:51 UTC
+++ tools/qemu-xen/configure
@@ -1451,6 +1451,7 @@ if test "$stack_protector" != "no" ; the
# We need to check both a compile and a link, since some compiler
# setups fail only on a .c->.o compile and some only at link time
if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
+ do_cxx $QEMU_CXXFLAGS -Werror $flag -o $TMPE $TMPCXX $TMPO $LDFLAGS &&
compile_prog "-Werror $flag" ""; then
QEMU_CFLAGS="$QEMU_CFLAGS $flag"
LIBTOOLFLAGS="$LIBTOOLFLAGS -Wc,$flag"

View file

@ -0,0 +1,13 @@
diff --git a/config/FreeBSD.mk b/config/FreeBSD.mk
index bb3a5d0..b072030 100644
--- a/config/FreeBSD.mk
+++ b/config/FreeBSD.mk
@@ -2,3 +2,8 @@ include $(XEN_ROOT)/config/StdGNU.mk
# No wget on FreeBSD base system
WGET = ftp
+
+XEN_LIB_STORED := ${localstatedir}/db/xenstored
+XEN_LOCK_DIR := ${localstatedir}/db
+XEN_PAGING_DIR := ${localstatedir}/db/xen/xenpaging
+XEN_DUMP_DIR := ${localstatedir}/crash/xen

View file

@ -1,69 +0,0 @@
From adcbd15b1aec8367f790774c998db199c9b577bf Mon Sep 17 00:00:00 2001
From: Ian Jackson <ian.jackson@eu.citrix.com>
Date: Wed, 18 Nov 2015 15:34:54 +0000
Subject: [PATCH] libxl: Fix bootloader-related virtual memory leak on pv
build failure
The bootloader may call libxl__file_reference_map(), which mmap's the
pv_kernel and pv_ramdisk into process memory. This was only unmapped,
however, on the success path of libxl__build_pv(). If there were a
failure anywhere between libxl_bootloader.c:parse_bootloader_result()
and the end of libxl__build_pv(), the calls to
libxl__file_reference_unmap() would be skipped, leaking the mapped
virtual memory.
Ideally this would be fixed by adding the unmap calls to the
destruction path for libxl__domain_build_state. Unfortunately the
lifetime of the libxl__domain_build_state is opaque, and it doesn't
have a proper destruction path. But, the only thing in it that isn't
from the gc are these bootloader references, and they are only ever
set for one libxl__domain_build_state, the one which is
libxl__domain_create_state.build_state.
So we can clean up in the exit path from libxl__domain_create_*, which
always comes through domcreate_complete.
Remove the now-redundant unmaps in libxl__build_pv's success path.
This is XSA-160.
Signed-off-by: George Dunlap <george.dunlap@citrix.com>
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Tested-by: George Dunlap <george.dunlap@citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
---
tools/libxl/libxl_create.c | 3 +++
tools/libxl/libxl_dom.c | 3 ---
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c
index f5771da..278b9ed 100644
--- a/tools/libxl/libxl_create.c
+++ b/tools/libxl/libxl_create.c
@@ -1484,6 +1484,9 @@ static void domcreate_complete(libxl__egc *egc,
libxl_domain_config *const d_config = dcs->guest_config;
libxl_domain_config *d_config_saved = &dcs->guest_config_saved;
+ libxl__file_reference_unmap(&dcs->build_state.pv_kernel);
+ libxl__file_reference_unmap(&dcs->build_state.pv_ramdisk);
+
if (!rc && d_config->b_info.exec_ssidref)
rc = xc_flask_relabel_domain(CTX->xch, dcs->guest_domid, d_config->b_info.exec_ssidref);
diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c
index 8019f4e..2da3ac4 100644
--- a/tools/libxl/libxl_dom.c
+++ b/tools/libxl/libxl_dom.c
@@ -750,9 +750,6 @@ int libxl__build_pv(libxl__gc *gc, uint32_t domid,
state->store_mfn = xc_dom_p2m_host(dom, dom->xenstore_pfn);
}
- libxl__file_reference_unmap(&state->pv_kernel);
- libxl__file_reference_unmap(&state->pv_ramdisk);
-
ret = 0;
out:
xc_dom_release(dom);
--
1.7.10.4

View file

@ -1,42 +0,0 @@
net: pcnet: add check to validate receive data size(CVE-2015-7504)
In loopback mode, pcnet_receive routine appends CRC code to the
receive buffer. If the data size given is same as the buffer size,
the appended CRC code overwrites 4 bytes after s->buffer. Added a
check to avoid that.
Reported-by: Qinghao Tang <luodalongde@gmail.com>
Signed-off-by: Prasad J Pandit <pjp@fedoraproject.org>
---
hw/net/pcnet.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/hw/net/pcnet.c b/hw/net/pcnet.c
index 3437376..5f55591 100644
--- a/hw/net/pcnet.c
+++ b/hw/net/pcnet.c
@@ -1085,7 +1085,7 @@ ssize_t pcnet_receive(NetClientState *nc, const uint8_t *buf, size_t size_)
uint32_t fcs = ~0;
uint8_t *p = src;
- while (p != &src[size-4])
+ while (p != &src[size])
CRC(fcs, *p++);
crc_err = (*(uint32_t *)p != htonl(fcs));
}
@@ -1234,8 +1234,10 @@ static void pcnet_transmit(PCNetState *s)
bcnt = 4096 - GET_FIELD(tmd.length, TMDL, BCNT);
/* if multi-tmd packet outsizes s->buffer then skip it silently.
- Note: this is not what real hw does */
- if (s->xmit_pos + bcnt > sizeof(s->buffer)) {
+ * Note: this is not what real hw does.
+ * Last four bytes of s->buffer are used to store CRC FCS code.
+ */
+ if (s->xmit_pos + bcnt > sizeof(s->buffer) - 4) {
s->xmit_pos = -1;
goto txdone;
}
--
2.4.3

View file

@ -1,5 +1,7 @@
bin/pygrub bin/pygrub
bin/xen-cpuid
bin/xen-detect bin/xen-detect
bin/xenalyze
bin/xencons bin/xencons
bin/xencov_split bin/xencov_split
bin/xenstore bin/xenstore
@ -12,14 +14,14 @@ bin/xenstore-read
bin/xenstore-rm bin/xenstore-rm
bin/xenstore-watch bin/xenstore-watch
bin/xenstore-write bin/xenstore-write
bin/xentrace
bin/xentrace_format bin/xentrace_format
bin/xentrace_setsize
etc/bash_completion.d/xl.sh etc/bash_completion.d/xl.sh
etc/rc.d/xencommons etc/rc.d/xencommons
etc/rc.d/xendriverdomain
%%ETCDIR%%/README %%ETCDIR%%/README
%%ETCDIR%%/README.incompatibilities %%ETCDIR%%/README.incompatibilities
%%ETCDIR%%/cpupool %%ETCDIR%%/cpupool
%%ETCDIR%%/scripts/block
%%ETCDIR%%/scripts/hotplugpath.sh %%ETCDIR%%/scripts/hotplugpath.sh
%%ETCDIR%%/scripts/vif-bridge %%ETCDIR%%/scripts/vif-bridge
%%ETCDIR%%/xl.conf %%ETCDIR%%/xl.conf
@ -40,8 +42,10 @@ include/libxlutil.h
include/xen/COPYING include/xen/COPYING
include/xen/arch-arm.h include/xen/arch-arm.h
include/xen/arch-arm/hvm/save.h include/xen/arch-arm/hvm/save.h
include/xen/arch-x86/cpufeatureset.h
include/xen/arch-x86/cpuid.h include/xen/arch-x86/cpuid.h
include/xen/arch-x86/hvm/save.h include/xen/arch-x86/hvm/save.h
include/xen/arch-x86/pmu.h
include/xen/arch-x86/xen-mca.h include/xen/arch-x86/xen-mca.h
include/xen/arch-x86/xen-x86_32.h include/xen/arch-x86/xen-x86_32.h
include/xen/arch-x86/xen-x86_64.h include/xen/arch-x86/xen-x86_64.h
@ -52,6 +56,7 @@ include/xen/callback.h
include/xen/dom0_ops.h include/xen/dom0_ops.h
include/xen/domctl.h include/xen/domctl.h
include/xen/elfnote.h include/xen/elfnote.h
include/xen/errno.h
include/xen/event_channel.h include/xen/event_channel.h
include/xen/features.h include/xen/features.h
include/xen/foreign/arm32.h include/xen/foreign/arm32.h
@ -63,6 +68,7 @@ include/xen/grant_table.h
include/xen/hvm/e820.h include/xen/hvm/e820.h
include/xen/hvm/hvm_info_table.h include/xen/hvm/hvm_info_table.h
include/xen/hvm/hvm_op.h include/xen/hvm/hvm_op.h
include/xen/hvm/hvm_vcpu.h
include/xen/hvm/hvm_xs_strings.h include/xen/hvm/hvm_xs_strings.h
include/xen/hvm/ioreq.h include/xen/hvm/ioreq.h
include/xen/hvm/params.h include/xen/hvm/params.h
@ -84,11 +90,11 @@ include/xen/io/vscsiif.h
include/xen/io/xenbus.h include/xen/io/xenbus.h
include/xen/io/xs_wire.h include/xen/io/xs_wire.h
include/xen/kexec.h include/xen/kexec.h
include/xen/mem_event.h
include/xen/memory.h include/xen/memory.h
include/xen/nmi.h include/xen/nmi.h
include/xen/physdev.h include/xen/physdev.h
include/xen/platform.h include/xen/platform.h
include/xen/pmu.h
include/xen/sched.h include/xen/sched.h
include/xen/sys/evtchn.h include/xen/sys/evtchn.h
include/xen/sys/privcmd.h include/xen/sys/privcmd.h
@ -97,13 +103,18 @@ include/xen/tmem.h
include/xen/trace.h include/xen/trace.h
include/xen/vcpu.h include/xen/vcpu.h
include/xen/version.h include/xen/version.h
include/xen/vm_event.h
include/xen/xen-compat.h include/xen/xen-compat.h
include/xen/xen.h include/xen/xen.h
include/xen/xencomm.h include/xen/xencomm.h
include/xen/xenoprof.h include/xen/xenoprof.h
include/xen/xsm/flask_op.h include/xen/xsm/flask_op.h
include/xencall.h
include/xenctrl.h include/xenctrl.h
include/xenctrlosdep.h include/xenctrl_compat.h
include/xenevtchn.h
include/xenforeignmemory.h
include/xengnttab.h
include/xenguest.h include/xenguest.h
include/xenstat.h include/xenstat.h
include/xenstore-compat/xs.h include/xenstore-compat/xs.h
@ -123,18 +134,34 @@ lib/fs/zfs/fsimage.so
lib/libfsimage.so lib/libfsimage.so
lib/libfsimage.so.1.0 lib/libfsimage.so.1.0
lib/libfsimage.so.1.0.0 lib/libfsimage.so.1.0.0
lib/libxencall.a
lib/libxencall.so
lib/libxencall.so.1
lib/libxencall.so.1.0
lib/libxenctrl.a lib/libxenctrl.a
lib/libxenctrl.so lib/libxenctrl.so
lib/libxenctrl.so.4.5 lib/libxenctrl.so.4.7
lib/libxenctrl.so.4.5.0 lib/libxenctrl.so.4.7.0
lib/libxenevtchn.a
lib/libxenevtchn.so
lib/libxenevtchn.so.1
lib/libxenevtchn.so.1.0
lib/libxenforeignmemory.a
lib/libxenforeignmemory.so
lib/libxenforeignmemory.so.1
lib/libxenforeignmemory.so.1.0
lib/libxengnttab.a
lib/libxengnttab.so
lib/libxengnttab.so.1
lib/libxengnttab.so.1.0
lib/libxenguest.a lib/libxenguest.a
lib/libxenguest.so lib/libxenguest.so
lib/libxenguest.so.4.5 lib/libxenguest.so.4.7
lib/libxenguest.so.4.5.0 lib/libxenguest.so.4.7.0
lib/libxenlight.a lib/libxenlight.a
lib/libxenlight.so lib/libxenlight.so
lib/libxenlight.so.4.5 lib/libxenlight.so.4.7
lib/libxenlight.so.4.5.0 lib/libxenlight.so.4.7.0
lib/libxenstat.a lib/libxenstat.a
lib/libxenstat.so lib/libxenstat.so
lib/libxenstat.so.0 lib/libxenstat.so.0
@ -143,10 +170,14 @@ lib/libxenstore.a
lib/libxenstore.so lib/libxenstore.so
lib/libxenstore.so.3.0 lib/libxenstore.so.3.0
lib/libxenstore.so.3.0.3 lib/libxenstore.so.3.0.3
lib/libxentoollog.a
lib/libxentoollog.so
lib/libxentoollog.so.1
lib/libxentoollog.so.1.0
lib/libxlutil.a lib/libxlutil.a
lib/libxlutil.so lib/libxlutil.so
lib/libxlutil.so.4.3 lib/libxlutil.so.4.7
lib/libxlutil.so.4.3.0 lib/libxlutil.so.4.7.0
%%PYTHON_SITELIBDIR%%/fsimage.so %%PYTHON_SITELIBDIR%%/fsimage.so
%%PYTHON_SITELIBDIR%%/grub/ExtLinuxConf.py %%PYTHON_SITELIBDIR%%/grub/ExtLinuxConf.py
%%PYTHON_SITELIBDIR%%/grub/ExtLinuxConf.pyc %%PYTHON_SITELIBDIR%%/grub/ExtLinuxConf.pyc
@ -164,18 +195,35 @@ lib/libxlutil.so.4.3.0
%%PYTHON_SITELIBDIR%%/xen/lowlevel/__init__.pyc %%PYTHON_SITELIBDIR%%/xen/lowlevel/__init__.pyc
%%PYTHON_SITELIBDIR%%/xen/lowlevel/xc.so %%PYTHON_SITELIBDIR%%/xen/lowlevel/xc.so
%%PYTHON_SITELIBDIR%%/xen/lowlevel/xs.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/libxl-save-helper
lib/xen/bin/lsevtchn lib/xen/bin/lsevtchn
lib/xen/bin/pygrub lib/xen/bin/pygrub
lib/xen/bin/qemu-system-i386 lib/xen/bin/qemu-system-i386
lib/xen/bin/readnotes lib/xen/bin/readnotes
lib/xen/bin/verify-stream-v2
lib/xen/bin/xen-init-dom0 lib/xen/bin/xen-init-dom0
lib/xen/bin/xenconsole lib/xen/bin/xenconsole
lib/xen/bin/xenctx lib/xen/bin/xenctx
lib/xen/bin/xenpaging lib/xen/bin/xenpaging
lib/xen/bin/xenpvnetboot lib/xen/bin/xenpvnetboot
lib/xen/boot/hvmloader lib/xen/boot/hvmloader
lib/xen/etc/qemu/target-x86_64.conf
man/man1/xenstore-chmod.1.gz man/man1/xenstore-chmod.1.gz
man/man1/xenstore-ls.1.gz man/man1/xenstore-ls.1.gz
man/man1/xenstore.1.gz man/man1/xenstore.1.gz
@ -186,6 +234,12 @@ man/man5/xl.cfg.5.gz
man/man5/xl.conf.5.gz man/man5/xl.conf.5.gz
man/man5/xlcpupool.cfg.5.gz man/man5/xlcpupool.cfg.5.gz
man/man8/xentrace.8.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/gdbsx
sbin/gtracestat sbin/gtracestat
sbin/gtraceview sbin/gtraceview
@ -198,6 +252,7 @@ sbin/xen-lowmemd
sbin/xen-mfndump sbin/xen-mfndump
sbin/xen-ringwatch sbin/xen-ringwatch
sbin/xen-tmem-list-parse sbin/xen-tmem-list-parse
sbin/xen-xsplice
sbin/xenbaked sbin/xenbaked
sbin/xenconsoled sbin/xenconsoled
sbin/xencov sbin/xencov
@ -208,10 +263,11 @@ sbin/xenpm
sbin/xenpmd sbin/xenpmd
sbin/xenstored sbin/xenstored
sbin/xentop sbin/xentop
sbin/xentrace
sbin/xentrace_setmask sbin/xentrace_setmask
sbin/xentrace_setsize
sbin/xenwatchdogd sbin/xenwatchdogd
sbin/xl sbin/xl
%%PORTDOCS%%%%DOCSDIR%%/README.xenmon
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/.deps %%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,hvm,save.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,arch-arm.h.html %%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,arch-arm.h.html
@ -219,6 +275,7 @@ sbin/xl
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,dom0_ops.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,domctl.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,elfnote.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,event_channel.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,features.h.html %%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,features.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,gcov.h.html %%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,gcov.h.html
@ -226,6 +283,7 @@ sbin/xl
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,hvm,e820.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_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_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,hvm_xs_strings.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,hvm,ioreq.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,params.h.html
@ -247,17 +305,18 @@ sbin/xl
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,io,xenbus.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,io,xs_wire.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,kexec.h.html %%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,kexec.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,mem_event.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,memory.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,nmi.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,physdev.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,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,sched.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,sysctl.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,tmem.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,trace.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,vcpu.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,version.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-compat.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/include,public,xen.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,xencomm.h.html
@ -267,8 +326,10 @@ sbin/xl
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/index.html %%PORTDOCS%%%%DOCSDIR%%/html/hypercall/arm/index.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/index.html %%PORTDOCS%%%%DOCSDIR%%/html/hypercall/index.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/.deps %%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,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,save.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-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-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,xen.h.html
@ -277,6 +338,7 @@ sbin/xl
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,dom0_ops.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,domctl.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,elfnote.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,event_channel.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,features.h.html %%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,features.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,gcov.h.html %%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,gcov.h.html
@ -284,6 +346,7 @@ sbin/xl
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,hvm,e820.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_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_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,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,ioreq.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,hvm,params.h.html %%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,hvm,params.h.html
@ -305,17 +368,18 @@ sbin/xl
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,io,xenbus.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,io,xs_wire.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,kexec.h.html %%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,kexec.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,mem_event.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,memory.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,nmi.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,physdev.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,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,sched.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,sysctl.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,tmem.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,trace.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,vcpu.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,version.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-compat.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,public,xen.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,xencomm.h.html
@ -324,8 +388,10 @@ sbin/xl
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_32/include,xen,errno.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_32/index.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/.deps %%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,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,save.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-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-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,xen.h.html
@ -334,6 +400,7 @@ sbin/xl
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,dom0_ops.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,domctl.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,elfnote.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,event_channel.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,features.h.html %%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,features.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,gcov.h.html %%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,gcov.h.html
@ -341,6 +408,7 @@ sbin/xl
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,hvm,e820.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_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_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,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,ioreq.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,hvm,params.h.html %%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,hvm,params.h.html
@ -362,17 +430,18 @@ sbin/xl
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,io,xenbus.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,io,xs_wire.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,kexec.h.html %%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,kexec.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,mem_event.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,memory.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,nmi.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,physdev.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,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,sched.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,sysctl.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,tmem.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,trace.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,vcpu.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,version.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-compat.h.html
%%PORTDOCS%%%%DOCSDIR%%/html/hypercall/x86_64/include,public,xen.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,xencomm.h.html
@ -385,36 +454,68 @@ sbin/xl
%%PORTDOCS%%%%DOCSDIR%%/html/man/xenstore-chmod.1.html %%PORTDOCS%%%%DOCSDIR%%/html/man/xenstore-chmod.1.html
%%PORTDOCS%%%%DOCSDIR%%/html/man/xenstore-ls.1.html %%PORTDOCS%%%%DOCSDIR%%/html/man/xenstore-ls.1.html
%%PORTDOCS%%%%DOCSDIR%%/html/man/xenstore.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.1.html %%PORTDOCS%%%%DOCSDIR%%/html/man/xl.1.html
%%PORTDOCS%%%%DOCSDIR%%/html/man/xl.cfg.5.html %%PORTDOCS%%%%DOCSDIR%%/html/man/xl.cfg.5.html
%%PORTDOCS%%%%DOCSDIR%%/html/man/xl.conf.5.html %%PORTDOCS%%%%DOCSDIR%%/html/man/xl.conf.5.html
%%PORTDOCS%%%%DOCSDIR%%/html/man/xlcpupool.cfg.5.html %%PORTDOCS%%%%DOCSDIR%%/html/man/xlcpupool.cfg.5.html
%%PORTDOCS%%%%DOCSDIR%%/html/misc/amd-ucode-container.txt %%PORTDOCS%%%%DOCSDIR%%/html/misc/amd-ucode-container.txt
%%PORTDOCS%%%%DOCSDIR%%/html/misc/arm/booting.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/block-scripts.txt
%%PORTDOCS%%%%DOCSDIR%%/html/misc/channel.txt %%PORTDOCS%%%%DOCSDIR%%/html/misc/channel.txt
%%PORTDOCS%%%%DOCSDIR%%/html/misc/console.txt %%PORTDOCS%%%%DOCSDIR%%/html/misc/console.txt
%%PORTDOCS%%%%DOCSDIR%%/html/misc/coverage.html
%%PORTDOCS%%%%DOCSDIR%%/html/misc/crashdb.txt %%PORTDOCS%%%%DOCSDIR%%/html/misc/crashdb.txt
%%PORTDOCS%%%%DOCSDIR%%/html/misc/distro_mapping.txt %%PORTDOCS%%%%DOCSDIR%%/html/misc/distro_mapping.txt
%%PORTDOCS%%%%DOCSDIR%%/html/misc/dump-core-format.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/grant-tables.txt
%%PORTDOCS%%%%DOCSDIR%%/html/misc/hvm-emulated-unplug.html
%%PORTDOCS%%%%DOCSDIR%%/html/misc/hvmlite.html
%%PORTDOCS%%%%DOCSDIR%%/html/misc/index.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/kexec_and_kdump.txt
%%PORTDOCS%%%%DOCSDIR%%/html/misc/libxl_memory.txt %%PORTDOCS%%%%DOCSDIR%%/html/misc/libxl_memory.txt
%%PORTDOCS%%%%DOCSDIR%%/html/misc/pci-device-reservations.txt %%PORTDOCS%%%%DOCSDIR%%/html/misc/pci-device-reservations.txt
%%PORTDOCS%%%%DOCSDIR%%/html/misc/printk-formats.txt %%PORTDOCS%%%%DOCSDIR%%/html/misc/printk-formats.txt
%%PORTDOCS%%%%DOCSDIR%%/html/misc/pvh-readme.txt %%PORTDOCS%%%%DOCSDIR%%/html/misc/pvh-readme.txt
%%PORTDOCS%%%%DOCSDIR%%/html/misc/sedf_scheduler_mini-HOWTO.txt %%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/tscmode.txt %%PORTDOCS%%%%DOCSDIR%%/html/misc/tscmode.txt
%%PORTDOCS%%%%DOCSDIR%%/html/misc/vbd-interface.txt %%PORTDOCS%%%%DOCSDIR%%/html/misc/vbd-interface.txt
%%PORTDOCS%%%%DOCSDIR%%/html/misc/vtd-pi.txt
%%PORTDOCS%%%%DOCSDIR%%/html/misc/vtd.txt %%PORTDOCS%%%%DOCSDIR%%/html/misc/vtd.txt
%%PORTDOCS%%%%DOCSDIR%%/html/misc/vtpm-platforms.txt %%PORTDOCS%%%%DOCSDIR%%/html/misc/vtpm-platforms.txt
%%PORTDOCS%%%%DOCSDIR%%/html/misc/vtpm.txt %%PORTDOCS%%%%DOCSDIR%%/html/misc/vtpm.txt
%%PORTDOCS%%%%DOCSDIR%%/html/misc/vtpmmgr.txt %%PORTDOCS%%%%DOCSDIR%%/html/misc/vtpmmgr.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/xen-error-handling.txt
%%PORTDOCS%%%%DOCSDIR%%/html/misc/xenmon.txt
%%PORTDOCS%%%%DOCSDIR%%/html/misc/xenpaging.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-ring.txt
%%PORTDOCS%%%%DOCSDIR%%/html/misc/xenstore.txt %%PORTDOCS%%%%DOCSDIR%%/html/misc/xenstore.txt
%%PORTDOCS%%%%DOCSDIR%%/html/misc/xl-disk-configuration.txt %%PORTDOCS%%%%DOCSDIR%%/html/misc/xl-disk-configuration.txt
%%PORTDOCS%%%%DOCSDIR%%/html/misc/xl-network-configuration.html
%%PORTDOCS%%%%DOCSDIR%%/html/misc/xl-numa-placement.html
%%PORTDOCS%%%%DOCSDIR%%/html/misc/xl-psr.html
%%PORTDOCS%%%%DOCSDIR%%/html/misc/xsm-flask.txt %%PORTDOCS%%%%DOCSDIR%%/html/misc/xsm-flask.txt
%%PORTDOCS%%%%DOCSDIR%%/html/misc/xsplice.html
share/pkgconfig/xenlight.pc
share/pkgconfig/xlutil.pc
share/qemu-xen/qemu/QEMU,cgthree.bin share/qemu-xen/qemu/QEMU,cgthree.bin
share/qemu-xen/qemu/QEMU,tcx.bin share/qemu-xen/qemu/QEMU,tcx.bin
share/qemu-xen/qemu/acpi-dsdt.aml share/qemu-xen/qemu/acpi-dsdt.aml
@ -488,16 +589,18 @@ share/qemu-xen/qemu/s390-zipl.rom
share/qemu-xen/qemu/sgabios.bin share/qemu-xen/qemu/sgabios.bin
share/qemu-xen/qemu/slof.bin share/qemu-xen/qemu/slof.bin
share/qemu-xen/qemu/spapr-rtas.bin share/qemu-xen/qemu/spapr-rtas.bin
share/qemu-xen/qemu/trace-events
share/qemu-xen/qemu/u-boot.e500
share/qemu-xen/qemu/vgabios-cirrus.bin share/qemu-xen/qemu/vgabios-cirrus.bin
share/qemu-xen/qemu/vgabios-qxl.bin share/qemu-xen/qemu/vgabios-qxl.bin
share/qemu-xen/qemu/vgabios-stdvga.bin share/qemu-xen/qemu/vgabios-stdvga.bin
share/qemu-xen/qemu/vgabios-virtio.bin
share/qemu-xen/qemu/vgabios-vmware.bin share/qemu-xen/qemu/vgabios-vmware.bin
share/qemu-xen/qemu/vgabios.bin share/qemu-xen/qemu/vgabios.bin
@dir %%ETCDIR%%/auto @dir %%ETCDIR%%/auto
@dir /var/crash/xen
@dir /var/db/xen/xenpaging @dir /var/db/xen/xenpaging
@dir /var/db/xen @dir /var/db/xen
@dir /var/db/xenstored @dir /var/db/xenstored
@dir /var/log/xen @dir /var/log/xen
@dir /var/xen/dump
@dir /var/xen
@dir /var/run/xen @dir /var/run/xen