diff -Nru xen-4.2.1/.bk-to-hg xen-4.2.2/.bk-to-hg --- xen-4.2.1/.bk-to-hg 1970-01-01 01:00:00.000000000 +0100 +++ xen-4.2.2/.bk-to-hg 2013-04-23 18:42:55.000000000 +0200 @@ -0,0 +1,2 @@ +#!/bin/sh +exit 0 diff -Nru xen-4.2.1/Config.mk xen-4.2.2/Config.mk --- xen-4.2.1/Config.mk 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/Config.mk 2013-04-24 15:36:15.000000000 +0200 @@ -166,6 +166,7 @@ $(call cc-option-add,HOSTCFLAGS,HOSTCC,-Wdeclaration-after-statement) $(call cc-option-add,CFLAGS,CC,-Wdeclaration-after-statement) $(call cc-option-add,CFLAGS,CC,-Wno-unused-but-set-variable) +$(call cc-option-add,CFLAGS,CC,-Wno-unused-local-typedefs) LDFLAGS += $(foreach i, $(EXTRA_LIB), -L$(i)) CFLAGS += $(foreach i, $(EXTRA_INCLUDES), -I$(i)) @@ -192,6 +193,8 @@ QEMU_REMOTE=git://xenbits.xen.org/qemu-xen-4.2-testing.git endif +QEMU_UPSTREAM_URL ?= $(XEN_ROOT)/tools/qemu-xen + ifeq ($(GIT_HTTP),y) OVMF_UPSTREAM_URL ?= http://xenbits.xen.org/git-http/ovmf.git QEMU_UPSTREAM_URL ?= http://xenbits.xen.org/git-http/qemu-upstream-4.2-testing.git @@ -202,7 +205,7 @@ SEABIOS_UPSTREAM_URL ?= git://xenbits.xen.org/seabios.git endif OVMF_UPSTREAM_REVISION ?= b0855f925c6e2e0b21fbb03fab4b5fb5b6876871 -QEMU_UPSTREAM_REVISION ?= qemu-xen-4.2.1 +QEMU_UPSTREAM_REVISION ?= qemu-xen-4.2.2 SEABIOS_UPSTREAM_TAG ?= rel-1.6.3.2 # Sun Mar 11 09:27:07 2012 -0400 # Update version to 1.6.3.2 @@ -212,9 +215,12 @@ # Specify which qemu-dm to use. This may be `ioemu' to use the old # Mercurial in-tree version, or a local directory, or a git URL. # CONFIG_QEMU ?= `pwd`/$(XEN_ROOT)/../qemu-xen.git -CONFIG_QEMU ?= $(QEMU_REMOTE) +# CONFIG_QEMU ?= $(QEMU_REMOTE) +CONFIG_QEMU ?= $(XEN_ROOT)/tools/qemu-xen-traditional -QEMU_TAG ?= xen-4.2.1 +QEMU_TAG ?= xen-4.2.2 +# Thu Jan 17 15:52:16 2013 +0000 +# e1000: fix compile warning introduced by security fix, and debugging # Short answer -- do not enable this unless you know what you are # doing and are prepared for some pain. diff -Nru xen-4.2.1/Config.mk.orig xen-4.2.2/Config.mk.orig --- xen-4.2.1/Config.mk.orig 1970-01-01 01:00:00.000000000 +0100 +++ xen-4.2.2/Config.mk.orig 2013-04-23 18:42:55.000000000 +0200 @@ -0,0 +1,225 @@ +# -*- mode: Makefile; -*- + +ifeq ($(filter /%,$(XEN_ROOT)),) +$(error XEN_ROOT must be absolute) +endif + +# fallback for older make +realpath = $(wildcard $(foreach file,$(1),$(shell cd -P $(dir $(file)) && echo "$$PWD/$(notdir $(file))"))) + +-include $(XEN_ROOT)/.config + +# A debug build of Xen and tools? +debug ?= n +debug_symbols ?= $(debug) + +XEN_COMPILE_ARCH ?= $(shell uname -m | sed -e s/i.86/x86_32/ \ + -e s/i86pc/x86_32/ -e s/amd64/x86_64/ -e s/arm.*/arm/) +XEN_TARGET_ARCH ?= $(XEN_COMPILE_ARCH) +XEN_OS ?= $(shell uname -s) + +CONFIG_$(XEN_OS) := y + +SHELL ?= /bin/sh + +# Tools to run on system hosting the build +HOSTCC = gcc +HOSTCFLAGS = -Wall -Werror -Wstrict-prototypes -O2 -fomit-frame-pointer +HOSTCFLAGS += -fno-strict-aliasing + +DISTDIR ?= $(XEN_ROOT)/dist +DESTDIR ?= / + +# Allow phony attribute to be listed as dependency rather than fake target +.PHONY: .phony + +# Use Clang/LLVM instead of GCC? +clang ?= n +ifeq ($(clang),n) +gcc := y +else +gcc := n +endif + + +include $(XEN_ROOT)/config/$(XEN_OS).mk +include $(XEN_ROOT)/config/$(XEN_TARGET_ARCH).mk + +SHAREDIR ?= $(PREFIX)/share +DOCDIR ?= $(SHAREDIR)/doc/xen +MANDIR ?= $(SHAREDIR)/man +BASH_COMPLETION_DIR ?= $(CONFIG_DIR)/bash_completion.d + +# arguments: variable, common path part, path to test, if yes, if no +define setvar_dir + ifndef $(1) + ifneq (,$(wildcard $(2)$(3))) + $(1) ?= $(2)$(4) + else + $(1) ?= $(2)$(5) + endif + endif +endef + +# See distro_mapping.txt for other options +$(eval $(call setvar_dir,CONFIG_LEAF_DIR,,/etc/sysconfig,sysconfig,default)) +$(eval $(call setvar_dir,SUBSYS_DIR,/var/run,/subsys,/subsys,)) +$(eval $(call setvar_dir,INITD_DIR,/etc,/rc.d/init.d,/rc.d/init.d,/init.d)) + +ifneq ($(EXTRA_PREFIX),) +EXTRA_INCLUDES += $(EXTRA_PREFIX)/include +EXTRA_LIB += $(EXTRA_PREFIX)/lib +endif + +PYTHON ?= python +PYTHON_PREFIX_ARG ?= --prefix="$(PREFIX)" +# The above requires that PREFIX contains *no spaces*. This variable is here +# to permit the user to set PYTHON_PREFIX_ARG to '' to workaround this bug: +# https://bugs.launchpad.net/ubuntu/+bug/362570 + +# cc-option: Check if compiler supports first option, else fall back to second. +# +# This is complicated by the fact that unrecognised -Wno-* options: +# (a) are ignored unless the compilation emits a warning; and +# (b) even then produce a warning rather than an error +# To handle this we do a test compile, passing the option-under-test, on a code +# fragment that will always produce a warning (integer assigned to pointer). +# We then grep for the option-under-test in the compiler's output, the presence +# of which would indicate an "unrecognized command-line option" warning/error. +# +# Usage: cflags-y += $(call cc-option,$(CC),-march=winchip-c6,-march=i586) +cc-option = $(shell if test -z "`echo 'void*p=1;' | \ + $(1) $(2) -S -o /dev/null -xc - 2>&1 | grep -- $(2) -`"; \ + then echo "$(2)"; else echo "$(3)"; fi ;) + +# cc-option-add: Add an option to compilation flags, but only if supported. +# Usage: $(call cc-option-add CFLAGS,CC,-march=winchip-c6) +cc-option-add = $(eval $(call cc-option-add-closure,$(1),$(2),$(3))) +define cc-option-add-closure + ifneq ($$(call cc-option,$$($(2)),$(3),n),n) + $(1) += $(3) + endif +endef + +cc-options-add = $(foreach o,$(3),$(call cc-option-add,$(1),$(2),$(o))) + +# cc-ver: Check compiler is at least specified version. Return boolean 'y'/'n'. +# Usage: ifeq ($(call cc-ver,$(CC),0x030400),y) +cc-ver = $(shell if [ $$((`$(1) -dumpversion | awk -F. \ + '{ printf "0x%02x%02x%02x", $$1, $$2, $$3}'`)) -ge $$(($(2))) ]; \ + then echo y; else echo n; fi ;) + +# cc-ver-check: Check compiler is at least specified version, else fail. +# Usage: $(call cc-ver-check,CC,0x030400,"Require at least gcc-3.4") +cc-ver-check = $(eval $(call cc-ver-check-closure,$(1),$(2),$(3))) +define cc-ver-check-closure + ifeq ($$(call cc-ver,$$($(1)),$(2)),n) + override $(1) = echo "*** FATAL BUILD ERROR: "$(3) >&2; exit 1; + cc-option := n + endif +endef + +define buildmakevars2shellvars + export PREFIX="$(PREFIX)"; \ + export XEN_SCRIPT_DIR="$(XEN_SCRIPT_DIR)"; \ + export XEN_ROOT="$(XEN_ROOT)" +endef + +# +# Compare $(1) and $(2) and replace $(2) with $(1) if they differ +# +# Typically $(1) is a newly generated file and $(2) is the target file +# being regenerated. This prevents changing the timestamp of $(2) only +# due to being auto regenereated with the same contents. +define move-if-changed + if ! cmp -s $(1) $(2); then mv -f $(1) $(2); else rm -f $(1); fi +endef + +buildmakevars2file = $(eval $(call buildmakevars2file-closure,$(1))) +define buildmakevars2file-closure + .PHONY: genpath + genpath: + rm -f $(1).tmp; \ + $(foreach var, \ + SBINDIR BINDIR LIBEXEC LIBDIR SHAREDIR PRIVATE_BINDIR \ + XENFIRMWAREDIR XEN_CONFIG_DIR XEN_SCRIPT_DIR XEN_LOCK_DIR \ + XEN_RUN_DIR XEN_PAGING_DIR, \ + echo "$(var)=\"$($(var))\"" >>$(1).tmp;) \ + $(call move-if-changed,$(1).tmp,$(1)) +endef + +ifeq ($(debug_symbols),y) +CFLAGS += -g +endif + +CFLAGS += -fno-strict-aliasing + +CFLAGS += -std=gnu99 + +CFLAGS += -Wall -Wstrict-prototypes + +# Clang complains about macros that expand to 'if ( ( foo == bar ) ) ...' +# and is over-zealous with the printf format lint +# and is a bit too fierce about unused return values +CFLAGS-$(clang) += -Wno-parentheses -Wno-format -Wno-unused-value + +$(call cc-option-add,HOSTCFLAGS,HOSTCC,-Wdeclaration-after-statement) +$(call cc-option-add,CFLAGS,CC,-Wdeclaration-after-statement) +$(call cc-option-add,CFLAGS,CC,-Wno-unused-but-set-variable) +$(call cc-option-add,CFLAGS,CC,-Wno-unused-local-typedefs) + +LDFLAGS += $(foreach i, $(EXTRA_LIB), -L$(i)) +CFLAGS += $(foreach i, $(EXTRA_INCLUDES), -I$(i)) +LDFLAGS += $(foreach i, $(PREPEND_LIB), -L$(i)) +CFLAGS += $(foreach i, $(PREPEND_INCLUDES), -I$(i)) +APPEND_LDFLAGS += $(foreach i, $(APPEND_LIB), -L$(i)) +APPEND_CFLAGS += $(foreach i, $(APPEND_INCLUDES), -I$(i)) + +EMBEDDED_EXTRA_CFLAGS := -nopie -fno-stack-protector -fno-stack-protector-all +EMBEDDED_EXTRA_CFLAGS += -fno-exceptions + +# Enable XSM security module (by default, Flask). +XSM_ENABLE ?= n +FLASK_ENABLE ?= $(XSM_ENABLE) + +XEN_EXTFILES_URL=http://xenbits.xen.org/xen-extfiles +# All the files at that location were downloaded from elsewhere on +# the internet. The original download URL is preserved as a comment +# near the place in the Xen Makefiles where the file is used. + +ifeq ($(GIT_HTTP),y) +QEMU_REMOTE=http://xenbits.xen.org/git-http/qemu-xen-4.2-testing.git +else +QEMU_REMOTE=git://xenbits.xen.org/qemu-xen-4.2-testing.git +endif + +ifeq ($(GIT_HTTP),y) +OVMF_UPSTREAM_URL ?= http://xenbits.xen.org/git-http/ovmf.git +QEMU_UPSTREAM_URL ?= http://xenbits.xen.org/git-http/qemu-upstream-4.2-testing.git +SEABIOS_UPSTREAM_URL ?= http://xenbits.xen.org/git-http/seabios.git +else +OVMF_UPSTREAM_URL ?= git://xenbits.xen.org/ovmf.git +QEMU_UPSTREAM_URL ?= git://xenbits.xen.org/qemu-upstream-4.2-testing.git +SEABIOS_UPSTREAM_URL ?= git://xenbits.xen.org/seabios.git +endif +OVMF_UPSTREAM_REVISION ?= b0855f925c6e2e0b21fbb03fab4b5fb5b6876871 +QEMU_UPSTREAM_REVISION ?= qemu-xen-4.2.2 +SEABIOS_UPSTREAM_TAG ?= rel-1.6.3.2 +# Sun Mar 11 09:27:07 2012 -0400 +# Update version to 1.6.3.2 + +ETHERBOOT_NICS ?= rtl8139 8086100e + +# Specify which qemu-dm to use. This may be `ioemu' to use the old +# Mercurial in-tree version, or a local directory, or a git URL. +# CONFIG_QEMU ?= `pwd`/$(XEN_ROOT)/../qemu-xen.git +CONFIG_QEMU ?= $(QEMU_REMOTE) + +QEMU_TAG ?= xen-4.2.2 +# Thu Jan 17 15:52:16 2013 +0000 +# e1000: fix compile warning introduced by security fix, and debugging + +# Short answer -- do not enable this unless you know what you are +# doing and are prepared for some pain. + +CONFIG_TESTS ?= y diff -Nru xen-4.2.1/debian/changelog xen-4.2.2/debian/changelog --- xen-4.2.1/debian/changelog 2013-04-29 20:54:31.000000000 +0200 +++ xen-4.2.2/debian/changelog 2013-05-15 16:24:03.000000000 +0200 @@ -1,3 +1,132 @@ +xen (4.2.2-0ubuntu0.13.04.1) raring-proposed; urgency=low + + * Updating to latest upstream stable release (LP: #1180397). + Replacing: + - qemu-cve-2012-6075-1.patch + - qemu-cve-2012-6075-2.patch + - xsa33-4.2-unstable.patch + - xsa34-4.2.patch + - xsa35-4.2-with-xsa34.patch + - xsa36-4.2.patch + - xsa38.patch + - 0008-vmx-Simplify-cr0-update-handling-by-deferring-cr4-ch.patch + - 0009-VMX-disable-SMEP-feature-when-guest-is-in-non-paging.patch + - 0010-VMX-Always-disable-SMEP-when-guest-is-in-non-paging-.patch + - xsa44-4.2.patch + - xsa46-4.2.patch + - xsa47-4.2-unstable.patch + * Included upstream changes: + - IOMMU/ATS: fix maximum queue depth calculation + - nested vmx: fix rflags status in virtual vmexit + - nested vmx: fix handling of RDTSC + - nested vmx: fix DR access VM exit + - nested vmx: enable IA32E mode while do VM entry + - nested vmx: fix interrupt delivery to L2 guest + - x86: fix assertion in get_page_type() + - x86/HPET: fix FSB interrupt masking + - IOMMU: imply "verbose" from "debug" + - scheduler: fix rate limit range checking + - x86, amd: Disable way access filter on Piledriver CPUs + - passthrough/domctl: use correct struct in union + - x86: compat_show_guest_stack() should not truncate MFN + - VT-d: fix interrupt remapping source validation for devices + behind legacy bridges + - Config.mk: delete accidentally introduced drivel + - x86_32: don't allow use of nested HVM + - xen: Do not allow guests to enable nested HVM on themselves + - ACPI: acpi_table_parse() should return handler's error code + - AMD,IOMMU: Clean up old entries in remapping tables when creating + new one + - AMD,IOMMU: Disable IOMMU if SATA Combined mode is on + - AMD,IOMMU: Make per-device interrupt remapping table default + - tools/ocaml: oxenstored: Be more paranoid about ring reading + - oxenstored: Enforce a maximum message size of 4096 bytes + - xen: sched_credit: improve picking up the idle CPU for a VCPU + - x86: consistently mask floating point exceptions + - x86/AMD: Enable WC+ memory type on family 10 processors + - x86/hvm: fix RTC setting. + - x86: restore (optional) forwarding of PCI SERR induced NMI to Dom0 + - fix acpi_dmar_zap/reinstate() (fixes S3 regression) + - vmx: Simplify cr0 update handling by deferring cr4 changes to the + cr4 handler. + - VMX: disable SMEP feature when guest is in non-paging mode + - unmodified_drivers: __devinit was removed in linux-3.8 + - tools/ocaml: oxenstored: correctly handle a full ring. + - AMD IOMMU: also spot missing IO-APIC entries in IVRS table + - tools/ocaml: libxc bindings: Fix SBDF encoding + - libxl_json: Export json_object related function. + - libxl_json: Remove JSON_ERROR from enum. + - libxl_json: Replace JSON_TRUE/FALSE by JSON_BOOL. + - libxl_json: Introduce libxl__json_object_to_yajl_gen. + - libxl_qmp: Introduces helpers to create an argument list. + - libxl_qmp: Use qmp_parameters_* functions for param list of a + QMP command. + - libxl_qmp: Simplify run of single QMP commands. + - libxl_qmp: Introduce libxl__qmp_set_global_dirty_log. + - libxl_dom: Call the right switch logdirty for the right DM. + - libxl: libxl__qmp_save: Add filename as JSON parameter to + xen-save-devices-state + - libxl: Allow migration with qemu-xen. + - gcc4.8 build fix: Add -Wno-unused-local-typedefs to CFLAGS. + - xenoprof: avoid division by 0 + - AMD IOMMU: don't BUG() when we don't have to + - libxl: rename "abs" variables to "absolute" + - libxl: fix stale fd event callback race + - libxl: fix stale timeout event callback race + - x86_32: fix acpi_dmar_init() + - tools: Fix memset(&p,0,sizeof(p)) idiom in several places. + - tools/libxl: Improve videoram setting + - x86/mm: Take the p2m lock even in shadow mode. + - x86/nhvm: properly clean up after failure to set up all vCPU-s + - honor ACPI v4 FADT flags + - x86: fix null pointer dereference in intel_get_extended_msrs() + - IOMMU, AMD Family15h Model10-1Fh erratum 746 Workaround + - x86: fix CMCI injection + - x86/setup: don't relocate the VGA hole. + - vmx: fix handling of NMI VMEXIT. + - Avoid stale pointer when moving domain to another cpupool + - fix compat memory exchange op splitting + - x86: make certain memory sub-ops return valid values + - SEDF: avoid gathering vCPU-s on pCPU0 + - x86: defer processing events on the NMI exit path + - credit1: Use atomic bit operations for the flags structure + - xentrace: fix off-by-one in calculate_tbuf_size + - fix domain unlocking in some xsm error paths + - x86/MSI: add mechanism to fully protect MSI-X table from PV + guest accesses + - powernow: add fixups for AMD P-state figures + - x86/MCA: suppress bank clearing for certain injected events + - AMD/IOMMU: Process softirqs while building dom0 iommu mappings + - VT-d: Enumerate IOMMUs when listing capabilities + - IOMMU: properly check whether interrupt remapping is enabled + - VT-d: deal with 5500/5520/X58 errata + - AMD IOMMU: allow disabling only interrupt remapping when certain + IVRS consistency checks fail + - ACPI/APEI: fix ERST MOVE_DATA instruction implementation + - ACPI/ERST: Name table in otherwise opaque error messages + - ACPI/APEI: Unlock apei_iomaps_lock on error path + - ACPI, APEI: Add apei_exec_run_optional + - ACPI: fix APEI related table size checking + - x86: reserve pages when SandyBridge integrated graphics + - x86/EFI: permit setting variable with non-zero attributes + - hvm: Clean up vlapic_reg_write() error propagation. + - defer event channel bucket pointer store until after XSM checks + - x86: irq_move_cleanup_interrupt() must ignore legacy vectors + - x86/S3: Restore broken vcpu affinity on resume + - VMX: Always disable SMEP when guest is in non-paging mode + - x86/mm/shadow: spurious warning when unmapping xenheap pages. + - libxl: run libxl__arch_domain_create() much earlier. + - tools: Retry blktap2 tapdisk message on interrupt. + - libxl: don't launch more than one tapdisk process for each disk + - tools/blktap2: Handle read/write interrupts in blktap2 control plane. + - x86: don't pass negative time to gtime_to_gtsc() + - iommu/crash: Interrupt remapping is also disabled on crash + - x86: clear EFLAGS.NT in SYSENTER entry path + - x86: fix various issues with handling guest IRQs + - libxl: Fix SEGV in network-attach + + -- Stefan Bader Tue, 14 May 2013 20:15:41 +0200 + xen (4.2.1-0ubuntu3.1) raring-security; urgency=low * Applying Xen Security Advisories: diff -Nru xen-4.2.1/debian/patches/0008-vmx-Simplify-cr0-update-handling-by-deferring-cr4-ch.patch xen-4.2.2/debian/patches/0008-vmx-Simplify-cr0-update-handling-by-deferring-cr4-ch.patch --- xen-4.2.1/debian/patches/0008-vmx-Simplify-cr0-update-handling-by-deferring-cr4-ch.patch 2013-04-05 17:22:07.000000000 +0200 +++ xen-4.2.2/debian/patches/0008-vmx-Simplify-cr0-update-handling-by-deferring-cr4-ch.patch 1970-01-01 01:00:00.000000000 +0100 @@ -1,72 +0,0 @@ -From 1e6275a95d3e35a72939b588f422bb761ba82f6b Mon Sep 17 00:00:00 2001 -From: Keir Fraser -Date: Tue, 12 Feb 2013 13:43:16 +0100 -Subject: [PATCH] vmx: Simplify cr0 update handling by deferring cr4 changes to the cr4 handler. - -Signed-off-by: Keir Fraser -xen-unstable changeset: 26501:8201b6ec3564 -xen-unstable date: Wed Jan 30 17:15:39 UTC 2013 ---- - xen/arch/x86/hvm/vmx/vmx.c | 15 +++++---------- - 1 files changed, 5 insertions(+), 10 deletions(-) - -diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c -index 33c0bfc..b8f0336 100644 ---- a/xen/arch/x86/hvm/vmx/vmx.c -+++ b/xen/arch/x86/hvm/vmx/vmx.c -@@ -1133,20 +1133,18 @@ static void vmx_update_guest_cr(struct vcpu *v, unsigned int cr) - - if ( paging_mode_hap(v->domain) ) - { -- /* We manage GUEST_CR3 when guest CR0.PE is zero or when cr3 memevents are on */ -+ /* Manage GUEST_CR3 when CR0.PE=0. */ - uint32_t cr3_ctls = (CPU_BASED_CR3_LOAD_EXITING | - CPU_BASED_CR3_STORE_EXITING); - v->arch.hvm_vmx.exec_control &= ~cr3_ctls; - if ( !hvm_paging_enabled(v) ) - v->arch.hvm_vmx.exec_control |= cr3_ctls; - -+ /* Trap CR3 updates if CR3 memory events are enabled. */ - if ( v->domain->arch.hvm_domain.params[HVM_PARAM_MEMORY_EVENT_CR3] ) - v->arch.hvm_vmx.exec_control |= CPU_BASED_CR3_LOAD_EXITING; - - vmx_update_cpu_exec_control(v); -- -- /* Changing CR0.PE can change some bits in real CR4. */ -- vmx_update_guest_cr(v, 4); - } - - if ( !(v->arch.hvm_vcpu.guest_cr[0] & X86_CR0_TS) ) -@@ -1176,8 +1174,6 @@ static void vmx_update_guest_cr(struct vcpu *v, unsigned int cr) - { - for ( s = x86_seg_cs ; s <= x86_seg_tr ; s++ ) - vmx_set_segment_register(v, s, ®[s]); -- v->arch.hvm_vcpu.hw_cr[4] |= X86_CR4_VME; -- __vmwrite(GUEST_CR4, v->arch.hvm_vcpu.hw_cr[4]); - v->arch.hvm_vmx.exception_bitmap = 0xffffffff; - vmx_update_exception_bitmap(v); - } -@@ -1187,10 +1183,6 @@ static void vmx_update_guest_cr(struct vcpu *v, unsigned int cr) - if ( !(v->arch.hvm_vmx.vm86_segment_mask & (1<arch.hvm_vmx.vm86_saved_seg[s]); -- v->arch.hvm_vcpu.hw_cr[4] = -- ((v->arch.hvm_vcpu.hw_cr[4] & ~X86_CR4_VME) -- |(v->arch.hvm_vcpu.guest_cr[4] & X86_CR4_VME)); -- __vmwrite(GUEST_CR4, v->arch.hvm_vcpu.hw_cr[4]); - v->arch.hvm_vmx.exception_bitmap = HVM_TRAP_MASK - | (paging_mode_hap(v->domain) ? - 0 : (1U << TRAP_page_fault)) -@@ -1204,6 +1196,9 @@ static void vmx_update_guest_cr(struct vcpu *v, unsigned int cr) - v->arch.hvm_vcpu.guest_cr[0] | hw_cr0_mask; - __vmwrite(GUEST_CR0, v->arch.hvm_vcpu.hw_cr[0]); - __vmwrite(CR0_READ_SHADOW, v->arch.hvm_vcpu.guest_cr[0]); -+ -+ /* Changing CR0 can change some bits in real CR4. */ -+ vmx_update_guest_cr(v, 4); - break; - } - case 2: --- -1.7.2.5 - diff -Nru xen-4.2.1/debian/patches/0009-VMX-disable-SMEP-feature-when-guest-is-in-non-paging.patch xen-4.2.2/debian/patches/0009-VMX-disable-SMEP-feature-when-guest-is-in-non-paging.patch --- xen-4.2.1/debian/patches/0009-VMX-disable-SMEP-feature-when-guest-is-in-non-paging.patch 2013-04-05 17:23:02.000000000 +0200 +++ xen-4.2.2/debian/patches/0009-VMX-disable-SMEP-feature-when-guest-is-in-non-paging.patch 1970-01-01 01:00:00.000000000 +0100 @@ -1,46 +0,0 @@ -From 485f374230d39e153d7b9786e3d0336bd52ee661 Mon Sep 17 00:00:00 2001 -From: Dongxiao Xu -Date: Tue, 12 Feb 2013 13:44:02 +0100 -Subject: [PATCH] VMX: disable SMEP feature when guest is in non-paging mode - -SMEP is disabled if CPU is in non-paging mode in hardware. -However Xen always uses paging mode to emulate guest non-paging -mode with HAP. To emulate this behavior, SMEP needs to be manually -disabled when guest switches to non-paging mode. - -We met an issue that, SMP Linux guest with recent kernel (enable -SMEP support, for example, 3.5.3) would crash with triple fault if -setting unrestricted_guest=0 in grub. This is because Xen uses an -identity mapping page table to emulate the non-paging mode, where -the page table is set with USER flag. If SMEP is still enabled in -this case, guest will meet unhandlable page fault and then crash. - -Signed-off-by: Dongxiao Xu -Signed-off-by: Xiantao Zhang -xen-unstable changeset: 26502:d1bf3b21f783 -xen-unstable date: Wed Jan 30 17:17:30 UTC 2013 ---- - xen/arch/x86/hvm/vmx/vmx.c | 7 +++++++ - 1 files changed, 7 insertions(+), 0 deletions(-) - -diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c -index b8f0336..ca92b86 100644 ---- a/xen/arch/x86/hvm/vmx/vmx.c -+++ b/xen/arch/x86/hvm/vmx/vmx.c -@@ -1227,6 +1227,13 @@ static void vmx_update_guest_cr(struct vcpu *v, unsigned int cr) - { - v->arch.hvm_vcpu.hw_cr[4] |= X86_CR4_PSE; - v->arch.hvm_vcpu.hw_cr[4] &= ~X86_CR4_PAE; -+ /* -+ * SMEP is disabled if CPU is in non-paging mode in hardware. -+ * However Xen always uses paging mode to emulate guest non-paging -+ * mode with HAP. To emulate this behavior, SMEP needs to be -+ * manually disabled when guest switches to non-paging mode. -+ */ -+ v->arch.hvm_vcpu.hw_cr[4] &= ~X86_CR4_SMEP; - } - __vmwrite(GUEST_CR4, v->arch.hvm_vcpu.hw_cr[4]); - __vmwrite(CR4_READ_SHADOW, v->arch.hvm_vcpu.guest_cr[4]); --- -1.7.2.5 - diff -Nru xen-4.2.1/debian/patches/0010-VMX-Always-disable-SMEP-when-guest-is-in-non-paging-.patch xen-4.2.2/debian/patches/0010-VMX-Always-disable-SMEP-when-guest-is-in-non-paging-.patch --- xen-4.2.1/debian/patches/0010-VMX-Always-disable-SMEP-when-guest-is-in-non-paging-.patch 2013-04-05 17:32:17.000000000 +0200 +++ xen-4.2.2/debian/patches/0010-VMX-Always-disable-SMEP-when-guest-is-in-non-paging-.patch 1970-01-01 01:00:00.000000000 +0100 @@ -1,52 +0,0 @@ -From 0d2e673a763bc7c2ddf97fed074eb691d325ecc5 Mon Sep 17 00:00:00 2001 -From: Stefan Bader -Date: Thu, 4 Apr 2013 10:37:19 +0200 -Subject: [PATCH] VMX: Always disable SMEP when guest is in non-paging mode - -commit e7dda8ec9fc9020e4f53345cdbb18a2e82e54a65 - VMX: disable SMEP feature when guest is in non-paging mode - -disabled the SMEP bit if a guest VCPU was using HAP and was not -in paging mode. However I could observe VCPUs getting stuck in -the trampoline after the following patch in the Linux kernel -changed the way CR4 gets set up: - x86, realmode: read cr4 and EFER from kernel for 64-bit trampoline - -The change will set CR4 from already set flags which includes the -SMEP bit. On bare metal this does not matter as the CPU is in non- -paging mode at that time. But Xen seems to use the emulated non- -paging mode regardless of HAP (I verified that on the guests I was -seeing the issue, HAP was not used). - -Therefor it seems right to unset the SMEP bit for a VCPU that is -not in paging-mode, regardless of its HAP usage. - -Signed-off-by: Stefan Bader -Acked-by: Keir Fraser -Acked-by: Dongxiao Xu -Backported-by: Stefan Bader ---- - xen/arch/x86/hvm/vmx/vmx.c | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) - -Index: xen-4.2.1-intel/xen/arch/x86/hvm/vmx/vmx.c -=================================================================== ---- xen-4.2.1-intel.orig/xen/arch/x86/hvm/vmx/vmx.c 2013-04-05 17:25:01.000000000 +0200 -+++ xen-4.2.1-intel/xen/arch/x86/hvm/vmx/vmx.c 2013-04-05 17:30:01.972090062 +0200 -@@ -1227,11 +1227,14 @@ static void vmx_update_guest_cr(struct v - { - v->arch.hvm_vcpu.hw_cr[4] |= X86_CR4_PSE; - v->arch.hvm_vcpu.hw_cr[4] &= ~X86_CR4_PAE; -+ } -+ if ( !hvm_paging_enabled(v) ) -+ { - /* - * SMEP is disabled if CPU is in non-paging mode in hardware. - * However Xen always uses paging mode to emulate guest non-paging -- * mode with HAP. To emulate this behavior, SMEP needs to be -- * manually disabled when guest switches to non-paging mode. -+ * mode. To emulate this behavior, SMEP needs to be manually -+ * disabled when guest VCPU is in non-paging mode. - */ - v->arch.hvm_vcpu.hw_cr[4] &= ~X86_CR4_SMEP; - } diff -Nru xen-4.2.1/debian/patches/qemu-cve-2012-6075-1.patch xen-4.2.2/debian/patches/qemu-cve-2012-6075-1.patch --- xen-4.2.1/debian/patches/qemu-cve-2012-6075-1.patch 2013-03-08 12:19:26.000000000 +0100 +++ xen-4.2.2/debian/patches/qemu-cve-2012-6075-1.patch 1970-01-01 01:00:00.000000000 +0100 @@ -1,44 +0,0 @@ -From: Michael Contreras -Date: Mon, 3 Dec 2012 04:11:22 +0000 (-0800) -Subject: e1000: Discard packets that are too long if !SBP and !LPE -X-Git-Tag: v1.3.0~1 -X-Git-Url: http://git.qemu.org/?p=qemu.git;a=commitdiff_plain;h=b0d9ffcd0251161c7c92f94804dcf599dfa3edeb - -e1000: Discard packets that are too long if !SBP and !LPE - -The e1000_receive function for the e1000 needs to discard packets longer than -1522 bytes if the SBP and LPE flags are disabled. The linux driver assumes -this behavior and allocates memory based on this assumption. - -Signed-off-by: Michael Contreras -Signed-off-by: Anthony Liguori ---- - -Index: xen-4.2.0/qemu/hw/e1000.c -=================================================================== ---- xen-4.2.0.orig/qemu/hw/e1000.c 2012-11-20 10:54:05.000000000 +0100 -+++ xen-4.2.0/qemu/hw/e1000.c 2013-01-07 15:43:38.765802328 +0100 -@@ -55,6 +55,9 @@ static int debugflags = DBGBIT(TXERR) | - #define REG_IOADDR 0x0 - #define REG_IODATA 0x4 - -+/* this is the size past which hardware will drop packets when setting LPE=0 */ -+#define MAXIMUM_ETHERNET_VLAN_SIZE 1522 -+ - /* - * HW models: - * E1000_DEV_ID_82540EM works with Windows and Linux -@@ -628,6 +631,13 @@ e1000_receive(void *opaque, const uint8_ - return; - } - -+ /* Discard oversized packets if !LPE and !SBP. */ -+ if (size > MAXIMUM_ETHERNET_VLAN_SIZE -+ && !(s->mac_reg[RCTL] & E1000_RCTL_LPE) -+ && !(s->mac_reg[RCTL] & E1000_RCTL_SBP)) { -+ return; -+ } -+ - if (!receive_filter(s, buf, size)) - return; - diff -Nru xen-4.2.1/debian/patches/qemu-cve-2012-6075-2.patch xen-4.2.2/debian/patches/qemu-cve-2012-6075-2.patch --- xen-4.2.1/debian/patches/qemu-cve-2012-6075-2.patch 2013-03-08 12:19:26.000000000 +0100 +++ xen-4.2.2/debian/patches/qemu-cve-2012-6075-2.patch 1970-01-01 01:00:00.000000000 +0100 @@ -1,33 +0,0 @@ -From: Michael Contreras -Date: Wed, 5 Dec 2012 13:31:30 -0500 -Subject: Discard packets longer than 16384 when !SBP to match the hardware - behavior. -Signed-off-by: Michael Contreras - -Origin: https://lists.nongnu.org/archive/html/qemu-devel/2012-12/msg00533.html -Bug: CVE-2012-6075 (pt2) -Index: xen-4.2.0/qemu/hw/e1000.c -=================================================================== ---- xen-4.2.0.orig/qemu/hw/e1000.c 2013-01-07 15:43:38.765802328 +0100 -+++ xen-4.2.0/qemu/hw/e1000.c 2013-01-07 15:53:39.668739989 +0100 -@@ -57,6 +57,8 @@ static int debugflags = DBGBIT(TXERR) | - - /* this is the size past which hardware will drop packets when setting LPE=0 */ - #define MAXIMUM_ETHERNET_VLAN_SIZE 1522 -+/* this is the size past which hardware will drop packets when setting LPE=1 */ -+#define MAXIMUM_ETHERNET_LPE_SIZE 16384 - - /* - * HW models: -@@ -632,8 +634,9 @@ e1000_receive(void *opaque, const uint8_ - } - - /* Discard oversized packets if !LPE and !SBP. */ -- if (size > MAXIMUM_ETHERNET_VLAN_SIZE -- && !(s->mac_reg[RCTL] & E1000_RCTL_LPE) -+ if ((size > MAXIMUM_ETHERNET_LPE_SIZE || -+ (size > MAXIMUM_ETHERNET_VLAN_SIZE -+ && !(s->mac_reg[RCTL] & E1000_RCTL_LPE))) - && !(s->mac_reg[RCTL] & E1000_RCTL_SBP)) { - return; - } diff -Nru xen-4.2.1/debian/patches/series xen-4.2.2/debian/patches/series --- xen-4.2.1/debian/patches/series 2013-04-10 17:40:44.000000000 +0200 +++ xen-4.2.2/debian/patches/series 2013-05-03 23:06:09.000000000 +0200 @@ -60,13 +60,7 @@ qemu-prefix.diff qemu-disable-blktap.diff ubuntu-qemu-disable-qemu-upstream.diff -qemu-cve-2012-6075-1.patch -qemu-cve-2012-6075-2.patch -xsa33-4.2-unstable.patch -xsa34-4.2.patch -xsa35-4.2-with-xsa34.patch -xsa36-4.2.patch -xsa38.patch + qemu-fix-librt-test.patch tools-gdbsx-fix-build-failure-with-glibc-2.17.patch 0001-xen-enable-APIC-Register-Virtualization.patch @@ -76,9 +70,4 @@ 0005-x86-Save-restore-TSC-adjust-during-HVM-guest-migrati.patch 0006-x86-Expose-TSC-adjust-to-HVM-guest.patch 0007-x86-Fix-i386-virtual-apic.patch -0008-vmx-Simplify-cr0-update-handling-by-deferring-cr4-ch.patch -0009-VMX-disable-SMEP-feature-when-guest-is-in-non-paging.patch -0010-VMX-Always-disable-SMEP-when-guest-is-in-non-paging-.patch -xsa44-4.2.patch -xsa46-4.2.patch -xsa47-4.2-unstable.patch + diff -Nru xen-4.2.1/debian/patches/xsa33-4.2-unstable.patch xen-4.2.2/debian/patches/xsa33-4.2-unstable.patch --- xen-4.2.1/debian/patches/xsa33-4.2-unstable.patch 2013-03-08 12:19:26.000000000 +0100 +++ xen-4.2.2/debian/patches/xsa33-4.2-unstable.patch 1970-01-01 01:00:00.000000000 +0100 @@ -1,21 +0,0 @@ -VT-d: fix interrupt remapping source validation for devices behind -legacy bridges - -Using SVT_VERIFY_BUS here doesn't make sense; native Linux also -uses SVT_VERIFY_SID_SQ here instead. - -Signed-off-by: Jan Beulich - -Index: xen-4.2.0/xen/drivers/passthrough/vtd/intremap.c -=================================================================== ---- xen-4.2.0.orig/xen/drivers/passthrough/vtd/intremap.c 2012-09-18 09:34:55.000000000 +0200 -+++ xen-4.2.0/xen/drivers/passthrough/vtd/intremap.c 2013-01-07 15:22:57.083732054 +0100 -@@ -462,7 +462,7 @@ static void set_msi_source_id(struct pci - set_ire_sid(ire, SVT_VERIFY_BUS, SQ_ALL_16, - (bus << 8) | pdev->bus); - else if ( pdev_type(seg, bus, devfn) == DEV_TYPE_LEGACY_PCI_BRIDGE ) -- set_ire_sid(ire, SVT_VERIFY_BUS, SQ_ALL_16, -+ set_ire_sid(ire, SVT_VERIFY_SID_SQ, SQ_ALL_16, - PCI_BDF2(bus, devfn)); - } - break; diff -Nru xen-4.2.1/debian/patches/xsa34-4.2.patch xen-4.2.2/debian/patches/xsa34-4.2.patch --- xen-4.2.1/debian/patches/xsa34-4.2.patch 2013-03-08 12:19:26.000000000 +0100 +++ xen-4.2.2/debian/patches/xsa34-4.2.patch 1970-01-01 01:00:00.000000000 +0100 @@ -1,32 +0,0 @@ -x86_32: don't allow use of nested HVM - -There are (indirect) uses of map_domain_page() in the nested HVM code -that are unsafe when not just using the 1:1 mapping. - -This is XSA-34 / CVE-2013-0151. - -Signed-off-by: Jan Beulich - -Index: xen-4.2.0/xen/arch/x86/hvm/hvm.c -=================================================================== ---- xen-4.2.0.orig/xen/arch/x86/hvm/hvm.c 2013-01-29 15:45:35.000000000 +0100 -+++ xen-4.2.0/xen/arch/x86/hvm/hvm.c 2013-01-29 16:06:05.556481117 +0100 -@@ -3858,6 +3858,10 @@ long do_hvm_op(unsigned long op, XEN_GUE - rc = -EINVAL; - break; - case HVM_PARAM_NESTEDHVM: -+#ifdef __i386__ -+ if ( a.value ) -+ rc = -EINVAL; -+#else - if ( a.value > 1 ) - rc = -EINVAL; - if ( !is_hvm_domain(d) ) -@@ -3872,6 +3876,7 @@ long do_hvm_op(unsigned long op, XEN_GUE - for_each_vcpu(d, v) - if ( rc == 0 ) - rc = nestedhvm_vcpu_initialise(v); -+#endif - break; - case HVM_PARAM_BUFIOREQ_EVTCHN: - rc = -EINVAL; diff -Nru xen-4.2.1/debian/patches/xsa35-4.2-with-xsa34.patch xen-4.2.2/debian/patches/xsa35-4.2-with-xsa34.patch --- xen-4.2.1/debian/patches/xsa35-4.2-with-xsa34.patch 2013-03-08 12:19:26.000000000 +0100 +++ xen-4.2.2/debian/patches/xsa35-4.2-with-xsa34.patch 1970-01-01 01:00:00.000000000 +0100 @@ -1,26 +0,0 @@ -xen: Do not allow guests to enable nested HVM on themselves - -There is no reason for this and doing so exposes a memory leak to -guests. Only toolstacks need write access to this HVM param. - -This is XSA-35 / CVE-2013-0152. - -Signed-off-by: Ian Campbell -Acked-by: Jan Beulich - -Index: xen-4.2.0/xen/arch/x86/hvm/hvm.c -=================================================================== ---- xen-4.2.0.orig/xen/arch/x86/hvm/hvm.c 2013-01-29 16:06:05.556481117 +0100 -+++ xen-4.2.0/xen/arch/x86/hvm/hvm.c 2013-01-29 16:06:23.792570270 +0100 -@@ -3858,6 +3858,11 @@ long do_hvm_op(unsigned long op, XEN_GUE - rc = -EINVAL; - break; - case HVM_PARAM_NESTEDHVM: -+ if ( !IS_PRIV(current->domain) ) -+ { -+ rc = -EPERM; -+ break; -+ } - #ifdef __i386__ - if ( a.value ) - rc = -EINVAL; diff -Nru xen-4.2.1/debian/patches/xsa36-4.2.patch xen-4.2.2/debian/patches/xsa36-4.2.patch --- xen-4.2.1/debian/patches/xsa36-4.2.patch 2013-03-08 12:19:26.000000000 +0100 +++ xen-4.2.2/debian/patches/xsa36-4.2.patch 1970-01-01 01:00:00.000000000 +0100 @@ -1,339 +0,0 @@ -ACPI: acpi_table_parse() should return handler's error code - -Currently, the error code returned by acpi_table_parse()'s handler -is ignored. This patch will propagate handler's return value to -acpi_table_parse()'s caller. - -AMD,IOMMU: Clean up old entries in remapping tables when creating new -interrupt mapping. - -When changing the affinity of an IRQ associated with a passed -through PCI device, clear previous mapping. - -In addition, because some BIOSes may incorrectly program IVRS -entries for IOAPIC try to check for entry's consistency. Specifically, -if conflicting entries are found disable IOMMU if per-device -remapping table is used. If entries refer to bogus IOAPIC IDs -disable IOMMU unconditionally - -AMD,IOMMU: Disable IOMMU if SATA Combined mode is on - -AMD's SP5100 chipset can be placed into SATA Combined mode -that may cause prevent dom0 from booting when IOMMU is -enabled and per-device interrupt remapping table is used. -While SP5100 erratum 28 requires BIOSes to disable this mode, -some may still use it. - -This patch checks whether this mode is on and, if per-device -table is in use, disables IOMMU. - -AMD,IOMMU: Make per-device interrupt remapping table default - -Using global interrupt remapping table may be insecure, as -described by XSA-36. This patch makes per-device mode default. - -This is XSA-36 / CVE-2013-0153. - -Signed-off-by: Jan Beulich -Signed-off-by: Boris Ostrovsky - -Index: xen-4.2.0/xen/arch/x86/irq.c -=================================================================== ---- xen-4.2.0.orig/xen/arch/x86/irq.c 2012-09-18 09:34:55.000000000 +0200 -+++ xen-4.2.0/xen/arch/x86/irq.c 2013-01-29 16:06:38.196640680 +0100 -@@ -1943,9 +1943,6 @@ int map_domain_pirq( - spin_lock_irqsave(&desc->lock, flags); - set_domain_irq_pirq(d, irq, info); - spin_unlock_irqrestore(&desc->lock, flags); -- -- if ( opt_irq_vector_map == OPT_IRQ_VECTOR_MAP_PERDEV ) -- printk(XENLOG_INFO "Per-device vector maps for GSIs not implemented yet.\n"); - } - - done: -Index: xen-4.2.0/xen/drivers/acpi/tables.c -=================================================================== ---- xen-4.2.0.orig/xen/drivers/acpi/tables.c 2012-09-18 09:34:55.000000000 +0200 -+++ xen-4.2.0/xen/drivers/acpi/tables.c 2013-01-29 16:06:38.196640680 +0100 -@@ -267,7 +267,7 @@ acpi_table_parse_madt(enum acpi_madt_typ - * @handler: handler to run - * - * Scan the ACPI System Descriptor Table (STD) for a table matching @id, -- * run @handler on it. Return 0 if table found, return on if not. -+ * run @handler on it. - */ - int __init acpi_table_parse(char *id, acpi_table_handler handler) - { -@@ -282,8 +282,7 @@ int __init acpi_table_parse(char *id, ac - acpi_get_table(id, 0, &table); - - if (table) { -- handler(table); -- return 0; -+ return handler(table); - } else - return 1; - } -Index: xen-4.2.0/xen/drivers/passthrough/amd/iommu_acpi.c -=================================================================== ---- xen-4.2.0.orig/xen/drivers/passthrough/amd/iommu_acpi.c 2012-09-18 09:34:55.000000000 +0200 -+++ xen-4.2.0/xen/drivers/passthrough/amd/iommu_acpi.c 2013-01-31 09:13:47.608098741 +0100 -@@ -22,6 +22,7 @@ - #include - #include - #include -+#include - #include - #include - -@@ -635,6 +636,7 @@ static u16 __init parse_ivhd_device_spec - u16 header_length, u16 block_length, struct amd_iommu *iommu) - { - u16 dev_length, bdf; -+ int apic; - - dev_length = sizeof(*special); - if ( header_length < (block_length + dev_length) ) -@@ -651,10 +653,59 @@ static u16 __init parse_ivhd_device_spec - } - - add_ivrs_mapping_entry(bdf, bdf, special->header.data_setting, iommu); -- /* set device id of ioapic */ -- ioapic_sbdf[special->handle].bdf = bdf; -- ioapic_sbdf[special->handle].seg = seg; -- return dev_length; -+ -+ if ( special->variety != ACPI_IVHD_IOAPIC ) -+ { -+ if ( special->variety != ACPI_IVHD_HPET ) -+ printk(XENLOG_ERR "Unrecognized IVHD special variety %#x\n", -+ special->variety); -+ return dev_length; -+ } -+ -+ /* -+ * Some BIOSes have IOAPIC broken entries so we check for IVRS -+ * consistency here --- whether entry's IOAPIC ID is valid and -+ * whether there are conflicting/duplicated entries. -+ */ -+ for ( apic = 0; apic < nr_ioapics; apic++ ) -+ { -+ if ( IO_APIC_ID(apic) != special->handle ) -+ continue; -+ -+ if ( ioapic_sbdf[special->handle].pin_setup ) -+ { -+ if ( ioapic_sbdf[special->handle].bdf == bdf && -+ ioapic_sbdf[special->handle].seg == seg ) -+ AMD_IOMMU_DEBUG("IVHD Warning: Duplicate IO-APIC %#x entries\n", -+ special->handle); -+ else -+ { -+ printk(XENLOG_ERR "IVHD Error: Conflicting IO-APIC %#x entries\n", -+ special->handle); -+ if ( amd_iommu_perdev_intremap ) -+ return 0; -+ } -+ } -+ else -+ { -+ /* set device id of ioapic */ -+ ioapic_sbdf[special->handle].bdf = bdf; -+ ioapic_sbdf[special->handle].seg = seg; -+ -+ ioapic_sbdf[special->handle].pin_setup = xzalloc_array( -+ unsigned long, BITS_TO_LONGS(nr_ioapic_entries[apic])); -+ if ( nr_ioapic_entries[apic] && -+ !ioapic_sbdf[IO_APIC_ID(apic)].pin_setup ) -+ { -+ printk(XENLOG_ERR "IVHD Error: Out of memory\n"); -+ return 0; -+ } -+ } -+ return dev_length; -+ } -+ -+ printk(XENLOG_ERR "IVHD Error: Invalid IO-APIC %#x\n", special->handle); -+ return 0; - } - - static int __init parse_ivhd_block(const struct acpi_ivrs_hardware *ivhd_block) -Index: xen-4.2.0/xen/drivers/passthrough/amd/iommu_init.c -=================================================================== ---- xen-4.2.0.orig/xen/drivers/passthrough/amd/iommu_init.c 2012-09-18 09:34:55.000000000 +0200 -+++ xen-4.2.0/xen/drivers/passthrough/amd/iommu_init.c 2013-01-31 09:12:11.575629256 +0100 -@@ -1126,12 +1126,45 @@ static int __init amd_iommu_setup_device - return 0; - } - -+/* Check whether SP5100 SATA Combined mode is on */ -+static bool_t __init amd_sp5100_erratum28(void) -+{ -+ u32 bus, id; -+ u16 vendor_id, dev_id; -+ u8 byte; -+ -+ for (bus = 0; bus < 256; bus++) -+ { -+ id = pci_conf_read32(0, bus, 0x14, 0, PCI_VENDOR_ID); -+ -+ vendor_id = id & 0xffff; -+ dev_id = (id >> 16) & 0xffff; -+ -+ /* SP5100 SMBus module sets Combined mode on */ -+ if (vendor_id != 0x1002 || dev_id != 0x4385) -+ continue; -+ -+ byte = pci_conf_read8(0, bus, 0x14, 0, 0xad); -+ if ( (byte >> 3) & 1 ) -+ { -+ printk(XENLOG_WARNING "AMD-Vi: SP5100 erratum 28 detected, disabling IOMMU.\n" -+ "If possible, disable SATA Combined mode in BIOS or contact your vendor for BIOS update.\n"); -+ return 1; -+ } -+ } -+ -+ return 0; -+} -+ - int __init amd_iommu_init(void) - { - struct amd_iommu *iommu; - - BUG_ON( !iommu_found() ); - -+ if ( amd_iommu_perdev_intremap && amd_sp5100_erratum28() ) -+ goto error_out; -+ - ivrs_bdf_entries = amd_iommu_get_ivrs_dev_entries(); - - if ( !ivrs_bdf_entries ) -Index: xen-4.2.0/xen/drivers/passthrough/amd/iommu_intr.c -=================================================================== ---- xen-4.2.0.orig/xen/drivers/passthrough/amd/iommu_intr.c 2012-09-18 09:34:55.000000000 +0200 -+++ xen-4.2.0/xen/drivers/passthrough/amd/iommu_intr.c 2013-01-29 16:06:38.200640705 +0100 -@@ -99,12 +99,12 @@ static void update_intremap_entry(u32* e - static void update_intremap_entry_from_ioapic( - int bdf, - struct amd_iommu *iommu, -- struct IO_APIC_route_entry *ioapic_rte) -+ const struct IO_APIC_route_entry *rte, -+ const struct IO_APIC_route_entry *old_rte) - { - unsigned long flags; - u32* entry; - u8 delivery_mode, dest, vector, dest_mode; -- struct IO_APIC_route_entry *rte = ioapic_rte; - int req_id; - spinlock_t *lock; - int offset; -@@ -120,6 +120,14 @@ static void update_intremap_entry_from_i - spin_lock_irqsave(lock, flags); - - offset = get_intremap_offset(vector, delivery_mode); -+ if ( old_rte ) -+ { -+ int old_offset = get_intremap_offset(old_rte->vector, -+ old_rte->delivery_mode); -+ -+ if ( offset != old_offset ) -+ free_intremap_entry(iommu->seg, bdf, old_offset); -+ } - entry = (u32*)get_intremap_entry(iommu->seg, req_id, offset); - update_intremap_entry(entry, vector, delivery_mode, dest_mode, dest); - -@@ -188,6 +196,7 @@ int __init amd_iommu_setup_ioapic_remapp - amd_iommu_flush_intremap(iommu, req_id); - spin_unlock_irqrestore(&iommu->lock, flags); - } -+ set_bit(pin, ioapic_sbdf[IO_APIC_ID(apic)].pin_setup); - } - } - return 0; -@@ -199,6 +208,7 @@ void amd_iommu_ioapic_update_ire( - struct IO_APIC_route_entry old_rte = { 0 }; - struct IO_APIC_route_entry new_rte = { 0 }; - unsigned int rte_lo = (reg & 1) ? reg - 1 : reg; -+ unsigned int pin = (reg - 0x10) / 2; - int saved_mask, seg, bdf; - struct amd_iommu *iommu; - -@@ -236,6 +246,14 @@ void amd_iommu_ioapic_update_ire( - *(((u32 *)&new_rte) + 1) = value; - } - -+ if ( new_rte.mask && -+ !test_bit(pin, ioapic_sbdf[IO_APIC_ID(apic)].pin_setup) ) -+ { -+ ASSERT(saved_mask); -+ __io_apic_write(apic, reg, value); -+ return; -+ } -+ - /* mask the interrupt while we change the intremap table */ - if ( !saved_mask ) - { -@@ -244,7 +262,11 @@ void amd_iommu_ioapic_update_ire( - } - - /* Update interrupt remapping entry */ -- update_intremap_entry_from_ioapic(bdf, iommu, &new_rte); -+ update_intremap_entry_from_ioapic( -+ bdf, iommu, &new_rte, -+ test_and_set_bit(pin, -+ ioapic_sbdf[IO_APIC_ID(apic)].pin_setup) ? &old_rte -+ : NULL); - - /* Forward write access to IO-APIC RTE */ - __io_apic_write(apic, reg, value); -@@ -354,6 +376,12 @@ void amd_iommu_msi_msg_update_ire( - return; - } - -+ if ( msi_desc->remap_index >= 0 ) -+ update_intremap_entry_from_msi_msg(iommu, pdev, msi_desc, NULL); -+ -+ if ( !msg ) -+ return; -+ - update_intremap_entry_from_msi_msg(iommu, pdev, msi_desc, msg); - } - -Index: xen-4.2.0/xen/drivers/passthrough/amd/pci_amd_iommu.c -=================================================================== ---- xen-4.2.0.orig/xen/drivers/passthrough/amd/pci_amd_iommu.c 2012-09-18 09:34:55.000000000 +0200 -+++ xen-4.2.0/xen/drivers/passthrough/amd/pci_amd_iommu.c 2013-01-29 16:06:38.200640705 +0100 -@@ -205,6 +205,8 @@ int __init amd_iov_detect(void) - { - printk("AMD-Vi: Not overriding irq_vector_map setting\n"); - } -+ if ( !amd_iommu_perdev_intremap ) -+ printk(XENLOG_WARNING "AMD-Vi: Using global interrupt remap table is not recommended (see XSA-36)!\n"); - return scan_pci_devices(); - } - -Index: xen-4.2.0/xen/drivers/passthrough/iommu.c -=================================================================== ---- xen-4.2.0.orig/xen/drivers/passthrough/iommu.c 2012-09-18 09:34:55.000000000 +0200 -+++ xen-4.2.0/xen/drivers/passthrough/iommu.c 2013-01-31 09:12:11.679629746 +0100 -@@ -52,7 +52,7 @@ bool_t __read_mostly iommu_qinval = 1; - bool_t __read_mostly iommu_intremap = 1; - bool_t __read_mostly iommu_hap_pt_share = 1; - bool_t __read_mostly iommu_debug; --bool_t __read_mostly amd_iommu_perdev_intremap; -+bool_t __read_mostly amd_iommu_perdev_intremap = 1; - - DEFINE_PER_CPU(bool_t, iommu_dont_flush_iotlb); - -Index: xen-4.2.0/xen/include/asm-x86/hvm/svm/amd-iommu-proto.h -=================================================================== ---- xen-4.2.0.orig/xen/include/asm-x86/hvm/svm/amd-iommu-proto.h 2012-09-18 09:34:55.000000000 +0200 -+++ xen-4.2.0/xen/include/asm-x86/hvm/svm/amd-iommu-proto.h 2013-01-29 16:06:38.204640719 +0100 -@@ -100,6 +100,7 @@ void amd_iommu_read_msi_from_ire( - - extern struct ioapic_sbdf { - u16 bdf, seg; -+ unsigned long *pin_setup; - } ioapic_sbdf[MAX_IO_APICS]; - extern void *shared_intremap_table; - diff -Nru xen-4.2.1/debian/patches/xsa38.patch xen-4.2.2/debian/patches/xsa38.patch --- xen-4.2.1/debian/patches/xsa38.patch 2013-03-08 12:19:26.000000000 +0100 +++ xen-4.2.2/debian/patches/xsa38.patch 1970-01-01 01:00:00.000000000 +0100 @@ -1,73 +0,0 @@ -diff --git a/tools/ocaml/libs/xb/partial.ml b/tools/ocaml/libs/xb/partial.ml -index 3558889..d4d1c7b 100644 ---- a/tools/ocaml/libs/xb/partial.ml -+++ b/tools/ocaml/libs/xb/partial.ml -@@ -27,8 +27,15 @@ external header_size: unit -> int = "stub_header_size" - external header_of_string_internal: string -> int * int * int * int - = "stub_header_of_string" - -+let xenstore_payload_max = 4096 (* xen/include/public/io/xs_wire.h *) -+ - let of_string s = - let tid, rid, opint, dlen = header_of_string_internal s in -+ (* A packet which is bigger than xenstore_payload_max is illegal. -+ This will leave the guest connection is a bad state and will -+ be hard to recover from without restarting the connection -+ (ie rebooting the guest) *) -+ let dlen = min xenstore_payload_max dlen in - { - tid = tid; - rid = rid; -@@ -38,6 +45,7 @@ let of_string s = - } - - let append pkt s sz = -+ if pkt.len > 4096 then failwith "Buffer.add: cannot grow buffer"; - Buffer.add_string pkt.buf (String.sub s 0 sz) - - let to_complete pkt = -diff --git a/tools/ocaml/libs/xb/xs_ring_stubs.c b/tools/ocaml/libs/xb/xs_ring_stubs.c -index 00414c5..4888ac5 100644 ---- a/tools/ocaml/libs/xb/xs_ring_stubs.c -+++ b/tools/ocaml/libs/xb/xs_ring_stubs.c -@@ -39,21 +39,23 @@ static int xs_ring_read(struct mmap_interface *interface, - char *buffer, int len) - { - struct xenstore_domain_interface *intf = interface->addr; -- XENSTORE_RING_IDX cons, prod; -+ XENSTORE_RING_IDX cons, prod; /* offsets only */ - int to_read; - -- cons = intf->req_cons; -- prod = intf->req_prod; -+ cons = *(volatile uint32*)&intf->req_cons; -+ prod = *(volatile uint32*)&intf->req_prod; - xen_mb(); -+ cons = MASK_XENSTORE_IDX(cons); -+ prod = MASK_XENSTORE_IDX(prod); - if (prod == cons) - return 0; -- if (MASK_XENSTORE_IDX(prod) > MASK_XENSTORE_IDX(cons)) -+ if (prod > cons) - to_read = prod - cons; - else -- to_read = XENSTORE_RING_SIZE - MASK_XENSTORE_IDX(cons); -+ to_read = XENSTORE_RING_SIZE - cons; - if (to_read < len) - len = to_read; -- memcpy(buffer, intf->req + MASK_XENSTORE_IDX(cons), len); -+ memcpy(buffer, intf->req + cons, len); - xen_mb(); - intf->req_cons += len; - return len; -@@ -66,8 +68,8 @@ static int xs_ring_write(struct mmap_interface *interface, - XENSTORE_RING_IDX cons, prod; - int can_write; - -- cons = intf->rsp_cons; -- prod = intf->rsp_prod; -+ cons = *(volatile uint32*)&intf->rsp_cons; -+ prod = *(volatile uint32*)&intf->rsp_prod; - xen_mb(); - if ( (prod - cons) >= XENSTORE_RING_SIZE ) - return 0; diff -Nru xen-4.2.1/debian/patches/xsa44-4.2.patch xen-4.2.2/debian/patches/xsa44-4.2.patch --- xen-4.2.1/debian/patches/xsa44-4.2.patch 2013-04-10 13:56:53.000000000 +0200 +++ xen-4.2.2/debian/patches/xsa44-4.2.patch 1970-01-01 01:00:00.000000000 +0100 @@ -1,77 +0,0 @@ -x86: clear EFLAGS.NT in SYSENTER entry path - -... as it causes problems if we happen to exit back via IRET: In the -course of trying to handle the fault, the hypervisor creates a stack -frame by hand, and uses PUSHFQ to set the respective EFLAGS field, but -expects to be able to IRET through that stack frame to the second -portion of the fixup code (which causes a #GP due to the stored EFLAGS -having NT set). - -And even if this worked (e.g if we cleared NT in that path), it would -then (through the fail safe callback) cause a #GP in the guest with the -SYSENTER handler's first instruction as the source, which in turn would -allow guest user mode code to crash the guest kernel. - -Inject a #GP on the fake (NULL) address of the SYSENTER instruction -instead, just like in the case where the guest kernel didn't register -a corresponding entry point. - -On 32-bit we also need to make sure we clear SYSENTER_CS for all CPUs -(neither #RESET nor #INIT guarantee this). - -This is CVE-2013-1917 / XSA-44. - -Reported-by: Andrew Cooper -Signed-off-by: Jan Beulich -Tested-by: Andrew Cooper -Acked-by: Andrew Cooper - ---- a/xen/arch/x86/acpi/suspend.c -+++ b/xen/arch/x86/acpi/suspend.c -@@ -81,8 +81,12 @@ void restore_rest_processor_state(void) - } - - #else /* !defined(CONFIG_X86_64) */ -- if ( supervisor_mode_kernel && cpu_has_sep ) -- wrmsr(MSR_IA32_SYSENTER_ESP, &this_cpu(init_tss).esp1, 0); -+ if ( cpu_has_sep ) -+ { -+ wrmsr(MSR_IA32_SYSENTER_CS, 0, 0); -+ if ( supervisor_mode_kernel ) -+ wrmsr(MSR_IA32_SYSENTER_ESP, &this_cpu(init_tss).esp1, 0); -+ } - #endif - - /* Maybe load the debug registers. */ ---- a/xen/arch/x86/cpu/common.c -+++ b/xen/arch/x86/cpu/common.c -@@ -655,8 +655,11 @@ void __cpuinit cpu_init(void) - #if defined(CONFIG_X86_32) - t->ss0 = __HYPERVISOR_DS; - t->esp0 = get_stack_bottom(); -- if ( supervisor_mode_kernel && cpu_has_sep ) -+ if ( cpu_has_sep ) { -+ wrmsr(MSR_IA32_SYSENTER_CS, 0, 0); -+ if ( supervisor_mode_kernel ) - wrmsr(MSR_IA32_SYSENTER_ESP, &t->esp1, 0); -+ } - #elif defined(CONFIG_X86_64) - /* Bottom-of-stack must be 16-byte aligned! */ - BUG_ON((get_stack_bottom() & 15) != 0); ---- a/xen/arch/x86/x86_64/entry.S -+++ b/xen/arch/x86/x86_64/entry.S -@@ -284,7 +284,14 @@ sysenter_eflags_saved: - cmpb $0,VCPU_sysenter_disables_events(%rbx) - movq VCPU_sysenter_addr(%rbx),%rax - setne %cl -+ testl $X86_EFLAGS_NT,UREGS_eflags(%rsp) - leaq VCPU_trap_bounce(%rbx),%rdx -+UNLIKELY_START(nz, sysenter_nt_set) -+ pushfq -+ andl $~X86_EFLAGS_NT,(%rsp) -+ popfq -+ xorl %eax,%eax -+UNLIKELY_END(sysenter_nt_set) - testq %rax,%rax - leal (,%rcx,TBF_INTERRUPT),%ecx - UNLIKELY_START(z, sysenter_gpf) diff -Nru xen-4.2.1/debian/patches/xsa46-4.2.patch xen-4.2.2/debian/patches/xsa46-4.2.patch --- xen-4.2.1/debian/patches/xsa46-4.2.patch 2013-04-10 13:57:11.000000000 +0200 +++ xen-4.2.2/debian/patches/xsa46-4.2.patch 1970-01-01 01:00:00.000000000 +0100 @@ -1,285 +0,0 @@ -x86: fix various issues with handling guest IRQs - -- properly revoke IRQ access in map_domain_pirq() error path -- don't permit replacing an in use IRQ -- don't accept inputs in the GSI range for MAP_PIRQ_TYPE_MSI -- track IRQ access permission in host IRQ terms, not guest IRQ ones - (and with that, also disallow Dom0 access to IRQ0) - -This is CVE-2013-1919 / XSA-46. - -Signed-off-by: Jan Beulich -Acked-by: Stefano Stabellini - ---- a/tools/libxl/libxl_create.c -+++ b/tools/libxl/libxl_create.c -@@ -968,14 +968,16 @@ static void domcreate_launch_dm(libxl__e - } - - for (i = 0; i < d_config->b_info.num_irqs; i++) { -- uint32_t irq = d_config->b_info.irqs[i]; -+ int irq = d_config->b_info.irqs[i]; - -- LOG(DEBUG, "dom%d irq %"PRIx32, domid, irq); -+ LOG(DEBUG, "dom%d irq %d", domid, irq); - -- ret = xc_domain_irq_permission(CTX->xch, domid, irq, 1); -+ ret = irq >= 0 ? xc_physdev_map_pirq(CTX->xch, domid, irq, &irq) -+ : -EOVERFLOW; -+ if (!ret) -+ ret = xc_domain_irq_permission(CTX->xch, domid, irq, 1); - if ( ret<0 ){ -- LOGE(ERROR, -- "failed give dom%d access to irq %"PRId32, domid, irq); -+ LOGE(ERROR, "failed give dom%d access to irq %d", domid, irq); - ret = ERROR_FAIL; - } - } ---- a/tools/python/xen/xend/server/irqif.py -+++ b/tools/python/xen/xend/server/irqif.py -@@ -73,6 +73,12 @@ class IRQController(DevController): - - pirq = get_param('irq') - -+ rc = xc.physdev_map_pirq(domid = self.getDomid(), -+ index = pirq, -+ pirq = pirq) -+ if rc < 0: -+ raise VmError('irq: Failed to map irq %x' % (pirq)) -+ - rc = xc.domain_irq_permission(domid = self.getDomid(), - pirq = pirq, - allow_access = True) -@@ -81,12 +87,6 @@ class IRQController(DevController): - #todo non-fatal - raise VmError( - 'irq: Failed to configure irq: %d' % (pirq)) -- rc = xc.physdev_map_pirq(domid = self.getDomid(), -- index = pirq, -- pirq = pirq) -- if rc < 0: -- raise VmError( -- 'irq: Failed to map irq %x' % (pirq)) - back = dict([(k, config[k]) for k in self.valid_cfg if k in config]) - return (self.allocateDeviceID(), back, {}) - ---- a/xen/arch/x86/domain_build.c -+++ b/xen/arch/x86/domain_build.c -@@ -1219,7 +1219,7 @@ int __init construct_dom0( - /* DOM0 is permitted full I/O capabilities. */ - rc |= ioports_permit_access(dom0, 0, 0xFFFF); - rc |= iomem_permit_access(dom0, 0UL, ~0UL); -- rc |= irqs_permit_access(dom0, 0, d->nr_pirqs - 1); -+ rc |= irqs_permit_access(dom0, 1, nr_irqs_gsi - 1); - - /* - * Modify I/O port access permissions. ---- a/xen/arch/x86/domctl.c -+++ b/xen/arch/x86/domctl.c -@@ -772,9 +772,13 @@ long arch_do_domctl( - goto bind_out; - - ret = -EPERM; -- if ( !IS_PRIV(current->domain) && -- !irq_access_permitted(current->domain, bind->machine_irq) ) -- goto bind_out; -+ if ( !IS_PRIV(current->domain) ) -+ { -+ int irq = domain_pirq_to_irq(d, bind->machine_irq); -+ -+ if ( irq <= 0 || !irq_access_permitted(current->domain, irq) ) -+ goto bind_out; -+ } - - ret = -ESRCH; - if ( iommu_enabled ) -@@ -803,9 +807,13 @@ long arch_do_domctl( - bind = &(domctl->u.bind_pt_irq); - - ret = -EPERM; -- if ( !IS_PRIV(current->domain) && -- !irq_access_permitted(current->domain, bind->machine_irq) ) -- goto unbind_out; -+ if ( !IS_PRIV(current->domain) ) -+ { -+ int irq = domain_pirq_to_irq(d, bind->machine_irq); -+ -+ if ( irq <= 0 || !irq_access_permitted(current->domain, irq) ) -+ goto unbind_out; -+ } - - if ( iommu_enabled ) - { ---- a/xen/arch/x86/irq.c -+++ b/xen/arch/x86/irq.c -@@ -184,6 +184,14 @@ int create_irq(int node) - desc->arch.used = IRQ_UNUSED; - irq = ret; - } -+ else if ( dom0 ) -+ { -+ ret = irq_permit_access(dom0, irq); -+ if ( ret ) -+ printk(XENLOG_G_ERR -+ "Could not grant Dom0 access to IRQ%d (error %d)\n", -+ irq, ret); -+ } - - return irq; - } -@@ -280,6 +288,17 @@ void clear_irq_vector(int irq) - void destroy_irq(unsigned int irq) - { - BUG_ON(!MSI_IRQ(irq)); -+ -+ if ( dom0 ) -+ { -+ int err = irq_deny_access(dom0, irq); -+ -+ if ( err ) -+ printk(XENLOG_G_ERR -+ "Could not revoke Dom0 access to IRQ%u (error %d)\n", -+ irq, err); -+ } -+ - dynamic_irq_cleanup(irq); - clear_irq_vector(irq); - } -@@ -1853,7 +1872,7 @@ int map_domain_pirq( - - if ( !IS_PRIV(current->domain) && - !(IS_PRIV_FOR(current->domain, d) && -- irq_access_permitted(current->domain, pirq))) -+ irq_access_permitted(current->domain, irq))) - return -EPERM; - - if ( pirq < 0 || pirq >= d->nr_pirqs || irq < 0 || irq >= nr_irqs ) -@@ -1882,17 +1901,18 @@ int map_domain_pirq( - return ret; - } - -- ret = irq_permit_access(d, pirq); -+ ret = irq_permit_access(d, irq); - if ( ret ) - { -- dprintk(XENLOG_G_ERR, "dom%d: could not permit access to irq %d\n", -- d->domain_id, pirq); -+ printk(XENLOG_G_ERR -+ "dom%d: could not permit access to IRQ%d (pirq %d)\n", -+ d->domain_id, irq, pirq); - return ret; - } - - ret = prepare_domain_irq_pirq(d, irq, pirq, &info); - if ( ret ) -- return ret; -+ goto revoke; - - desc = irq_to_desc(irq); - -@@ -1916,8 +1936,14 @@ int map_domain_pirq( - spin_lock_irqsave(&desc->lock, flags); - - if ( desc->handler != &no_irq_type ) -+ { -+ spin_unlock_irqrestore(&desc->lock, flags); - dprintk(XENLOG_G_ERR, "dom%d: irq %d in use\n", - d->domain_id, irq); -+ pci_disable_msi(msi_desc); -+ ret = -EBUSY; -+ goto done; -+ } - setup_msi_handler(desc, msi_desc); - - if ( opt_irq_vector_map == OPT_IRQ_VECTOR_MAP_PERDEV -@@ -1946,7 +1972,14 @@ int map_domain_pirq( - - done: - if ( ret ) -+ { - cleanup_domain_irq_pirq(d, irq, info); -+ revoke: -+ if ( irq_deny_access(d, irq) ) -+ printk(XENLOG_G_ERR -+ "dom%d: could not revoke access to IRQ%d (pirq %d)\n", -+ d->domain_id, irq, pirq); -+ } - return ret; - } - -@@ -2012,10 +2045,11 @@ int unmap_domain_pirq(struct domain *d, - if ( !forced_unbind ) - cleanup_domain_irq_pirq(d, irq, info); - -- ret = irq_deny_access(d, pirq); -+ ret = irq_deny_access(d, irq); - if ( ret ) -- dprintk(XENLOG_G_ERR, "dom%d: could not deny access to irq %d\n", -- d->domain_id, pirq); -+ printk(XENLOG_G_ERR -+ "dom%d: could not deny access to IRQ%d (pirq %d)\n", -+ d->domain_id, irq, pirq); - - done: - return ret; ---- a/xen/arch/x86/physdev.c -+++ b/xen/arch/x86/physdev.c -@@ -147,7 +147,7 @@ int physdev_map_pirq(domid_t domid, int - if ( irq == -1 ) - irq = create_irq(NUMA_NO_NODE); - -- if ( irq < 0 || irq >= nr_irqs ) -+ if ( irq < nr_irqs_gsi || irq >= nr_irqs ) - { - dprintk(XENLOG_G_ERR, "dom%d: can't create irq for msi!\n", - d->domain_id); ---- a/xen/common/domctl.c -+++ b/xen/common/domctl.c -@@ -897,9 +897,9 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc - else if ( xsm_irq_permission(d, pirq, allow) ) - ret = -EPERM; - else if ( allow ) -- ret = irq_permit_access(d, pirq); -+ ret = pirq_permit_access(d, pirq); - else -- ret = irq_deny_access(d, pirq); -+ ret = pirq_deny_access(d, pirq); - - rcu_unlock_domain(d); - } ---- a/xen/common/event_channel.c -+++ b/xen/common/event_channel.c -@@ -368,7 +368,7 @@ static long evtchn_bind_pirq(evtchn_bind - if ( (pirq < 0) || (pirq >= d->nr_pirqs) ) - return -EINVAL; - -- if ( !is_hvm_domain(d) && !irq_access_permitted(d, pirq) ) -+ if ( !is_hvm_domain(d) && !pirq_access_permitted(d, pirq) ) - return -EPERM; - - spin_lock(&d->event_lock); ---- a/xen/include/xen/iocap.h -+++ b/xen/include/xen/iocap.h -@@ -28,4 +28,22 @@ - #define irq_access_permitted(d, i) \ - rangeset_contains_singleton((d)->irq_caps, i) - -+#define pirq_permit_access(d, i) ({ \ -+ struct domain *d__ = (d); \ -+ int i__ = domain_pirq_to_irq(d__, i); \ -+ i__ > 0 ? rangeset_add_singleton(d__->irq_caps, i__)\ -+ : -EINVAL; \ -+}) -+#define pirq_deny_access(d, i) ({ \ -+ struct domain *d__ = (d); \ -+ int i__ = domain_pirq_to_irq(d__, i); \ -+ i__ > 0 ? rangeset_remove_singleton(d__->irq_caps, i__)\ -+ : -EINVAL; \ -+}) -+#define pirq_access_permitted(d, i) ({ \ -+ struct domain *d__ = (d); \ -+ rangeset_contains_singleton(d__->irq_caps, \ -+ domain_pirq_to_irq(d__, i));\ -+}) -+ - #endif /* __XEN_IOCAP_H__ */ diff -Nru xen-4.2.1/debian/patches/xsa47-4.2-unstable.patch xen-4.2.2/debian/patches/xsa47-4.2-unstable.patch --- xen-4.2.1/debian/patches/xsa47-4.2-unstable.patch 2013-04-10 13:57:32.000000000 +0200 +++ xen-4.2.2/debian/patches/xsa47-4.2-unstable.patch 1970-01-01 01:00:00.000000000 +0100 @@ -1,31 +0,0 @@ -defer event channel bucket pointer store until after XSM checks - -Otherwise a dangling pointer can be left, which would cause subsequent -memory corruption as soon as the space got re-allocated for some other -purpose. - -This is CVE-2013-1920 / XSA-47. - -Reported-by: Wei Liu -Signed-off-by: Jan Beulich -Reviewed-by: Tim Deegan - ---- a/xen/common/event_channel.c -+++ b/xen/common/event_channel.c -@@ -140,7 +140,6 @@ static int get_free_port(struct domain * - chn = xzalloc_array(struct evtchn, EVTCHNS_PER_BUCKET); - if ( unlikely(chn == NULL) ) - return -ENOMEM; -- bucket_from_port(d, port) = chn; - - for ( i = 0; i < EVTCHNS_PER_BUCKET; i++ ) - { -@@ -153,6 +152,8 @@ static int get_free_port(struct domain * - } - } - -+ bucket_from_port(d, port) = chn; -+ - return port; - } - diff -Nru xen-4.2.1/docs/man/xl.cfg.pod.5 xen-4.2.2/docs/man/xl.cfg.pod.5 --- xen-4.2.1/docs/man/xl.cfg.pod.5 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/docs/man/xl.cfg.pod.5 2013-04-23 18:42:55.000000000 +0200 @@ -739,19 +739,15 @@ Sets the amount of RAM which the emulated video card will contain, which in turn limits the resolutions and bit depths which will be -available. This option is only available when using the B -option (see below). +available. The default amount of video ram for stdvga is 8MB which is sufficient -for e.g. 1600x1200 at 32bpp. +for e.g. 1600x1200 at 32bpp and videoram option is currently working +only when using the qemu-xen-traditional device-model. When using the emulated Cirrus graphics card (B) the amount of video ram is fixed at 4MB which is sufficient -for 1024x768 at 32 bpp. - -videoram option is currently only available when using the -qemu-xen-traditional device-model. Upstream qemu-xen device-model -currently doesn't support changing the amount of video memory -for the emulated graphics device. +for 1024x768 at 32 bpp and videoram option is currently working +only when using the upstream qemu-xen device-model. =item B diff -Nru xen-4.2.1/docs/misc/xen-command-line.markdown xen-4.2.2/docs/misc/xen-command-line.markdown --- xen-4.2.1/docs/misc/xen-command-line.markdown 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/docs/misc/xen-command-line.markdown 2013-04-23 18:42:55.000000000 +0200 @@ -594,6 +594,13 @@ Specify if the MMConfig space should be enabled. +### msi +> `= ` + +> Default: `true` + +Force Xen to (not) use PCI-MSI, even if ACPI FADT says otherwise. + ### nmi > `= ignore | dom0 | fatal` diff -Nru xen-4.2.1/.gitignore xen-4.2.2/.gitignore --- xen-4.2.1/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ xen-4.2.2/.gitignore 2013-04-23 18:42:55.000000000 +0200 @@ -0,0 +1,394 @@ +.hg +*.orig +*.rej +*~ +*.o +*.d +*.opic +*.a +*.so +*.so.[0-9]* +*.bin +*.bak +*.tmp +*.spot +*.spit +TAGS +cscope.files +cscope.in.out +cscope.out +cscope.po.out +.config + +dist +stubdom/*.tar.gz + +build-* +dist/* +docs/*.aux +docs/*.dvi +docs/*.log +docs/*.pdf +docs/*.ps +docs/*.toc +docs/api/* +docs/figs/xenserver.eps +docs/html/* +docs/interface/WARNINGS +docs/interface/images.pl +docs/interface/images.tex +docs/interface/img1.png +docs/interface/index.html +docs/interface/interface.css +docs/interface/interface.html +docs/interface/labels.pl +docs/man1/ +docs/man5/ +docs/pdf/* +docs/ps/* +docs/user/WARNINGS +docs/user/images.pl +docs/user/images.tex +docs/user/img1.png +docs/user/img2.png +docs/user/img3.png +docs/user/index.html +docs/user/internals.pl +docs/user/labels.pl +docs/user/user.css +docs/user/user.html +docs/xen-api/vm_lifecycle.eps +docs/xen-api/xenapi-datamodel-graph.eps +docs/xen-api/xenapi.out +docs/xen-api/xenapi.dvi +docs/xen-api/xenapi.pdf +docs/xen-api/xenapi.ps +docs/xen-api/xenapi.toc +extras/mini-os/arch/ia64/gen_off.s +extras/mini-os/include/mini-os +extras/mini-os/include/ia64/mini-os +extras/mini-os/include/ia64/offsets.h +extras/mini-os/include/x86/mini-os +extras/mini-os/include/xen +extras/mini-os/include/list.h +extras/mini-os/mini-os* +install/* +linux-[^/]*-paravirt/* +linux-2.6[^/]*/* +linux-[^/]*-rc/* +linux-[^/]*-tip/* +linux-[^/]*-git/* +linux-[^/]*.patch +mkddbxen +netbsd-[^/]*-tools/* +netbsd-[^/]*-xen0/* +netbsd-[^/]*-xenU/* +netbsd-[^/]*.patch +patches/*/.makedep +patches/ebtables-brnf-5_vs_2.4.25.diff +patches/ebtables.diff +patches/tmp/* +pristine-* +ref-* +tmp-* +stubdom/binutils-* +stubdom/cross-root-* +stubdom/gcc-* +stubdom/include +stubdom/ioemu +stubdom/xenstore +stubdom/libxc-* +stubdom/lwip-* +stubdom/mini-os-* +stubdom/mk-headers-* +stubdom/newlib-1.* +stubdom/newlib-x86* +stubdom/pciutils-* +stubdom/zlib-* +stubdom/grub-* +stubdom/ocaml-* +stubdom/lwip/ +stubdom/ioemu/ +stubdom/stubdompath.sh +tools/*/build/lib*/*.py +tools/autom4te.cache +tools/config.h +tools/config.log +tools/config.status +tools/config.cache +config/Tools.mk +tools/blktap2/daemon/blktapctrl +tools/blktap2/drivers/img2qcow +tools/blktap2/drivers/lock-util +tools/blktap2/drivers/qcow-create +tools/blktap2/drivers/qcow2raw +tools/blktap2/drivers/tapdisk +tools/blktap2/drivers/tapdisk-client +tools/blktap2/drivers/tapdisk-diff +tools/blktap2/drivers/tapdisk-stream +tools/blktap2/drivers/tapdisk2 +tools/blktap2/drivers/td-util +tools/blktap2/vhd/vhd-update +tools/blktap2/vhd/vhd-util +tools/blktap/drivers/blktapctrl +tools/blktap/drivers/img2qcow +tools/blktap/drivers/qcow-create +tools/blktap/drivers/qcow2raw +tools/blktap/drivers/tapdisk +tools/check/.* +tools/console/xenconsole +tools/console/xenconsoled +tools/debugger/gdb/gdb-6.2.1-linux-i386-xen/* +tools/debugger/gdb/gdb-6.2.1/* +tools/debugger/gdb/gdb-6.2.1.tar.bz2 +tools/debugger/gdbsx/gdbsx +tools/debugger/xenitp/xenitp +tools/firmware/*/biossums +tools/firmware/*.bin +tools/firmware/*.sym +tools/firmware/*bios/*bios*.txt +tools/firmware/etherboot/gpxe/* +tools/firmware/extboot/extboot.img +tools/firmware/extboot/signrom +tools/firmware/hvmloader/acpi/mk_dsdt +tools/firmware/hvmloader/acpi/dsdt*.c +tools/firmware/hvmloader/acpi/dsdt*.asl +tools/firmware/hvmloader/acpi/ssdt_*.h +tools/firmware/hvmloader/hvmloader +tools/firmware/hvmloader/roms.h +tools/firmware/hvmloader/roms.inc +tools/firmware/rombios/BIOS-bochs-[^/]* +tools/firmware/rombios/_rombios[^/]*_.c +tools/firmware/rombios/rombios[^/]*.s +tools/firmware/rombios/32bit/32bitbios_flat.h +tools/firmware/vgabios/vbetables-gen +tools/firmware/vgabios/vbetables.h +tools/flask/utils/flask-getenforce +tools/flask/utils/flask-get-bool +tools/flask/utils/flask-loadpolicy +tools/flask/utils/flask-setenforce +tools/flask/utils/flask-set-bool +tools/flask/utils/flask-label-pci +tools/fs-back/fs-backend +tools/hotplug/common/hotplugpath.sh +tools/include/xen/* +tools/include/xen-foreign/*.(c|h|size) +tools/include/xen-foreign/checker +tools/libxc/ia64/asm/*.h +tools/libxc/ia64/acpi/*.h +tools/libxc/ia64/acpi/platform/*.h +tools/libxc/ia64/dom_fw_asm.S +tools/libxc/ia64/dom_fw_common.c +tools/libxc/ia64/dom_fw_domu.c +tools/libxc/ia64/xen/*.h +tools/libxen/libxenapi- +tools/libxen/test/test_bindings +tools/libxen/test/test_event_handling +tools/libxl/libxlu_cfg_y.output +tools/libxl/xl +tools/libxl/testenum +tools/libxl/testenum.c +tools/libxl/tmp.* +tools/libxl/_libxl.api-for-check +tools/libxl/*.api-ok +tools/libaio/src/*.ol +tools/libaio/src/*.os +tools/misc/cpuperf/cpuperf-perfcntr +tools/misc/cpuperf/cpuperf-xen +tools/misc/lomount/lomount +tools/misc/mbootpack/bin2c +tools/misc/mbootpack/bootsect +tools/misc/mbootpack/bzimage_header.c +tools/misc/mbootpack/mbootpack +tools/misc/mbootpack/setup +tools/misc/miniterm/miniterm +tools/misc/xc_shadow +tools/misc/xen_cpuperf +tools/misc/xen-detect +tools/misc/xen-tmem-list-parse +tools/misc/xenperf +tools/misc/xenpm +tools/misc/xen-hvmctx +tools/misc/gtraceview +tools/misc/gtracestat +tools/misc/xenlockprof +tools/misc/lowmemd +tools/pygrub/build/* +tools/python/build/* +tools/python/xen/util/path.py +tools/remus/imqebt/imqebt +tools/remus/kmod/*(.cmd|.mod|.ko|.mod.c|.symvers|.xen) +tools/security/secpol_tool +tools/security/xen/* +tools/security/xensec_tool +tools/tests/blowfish.bin +tools/tests/blowfish.h +tools/tests/test_x86_emulator +tools/tests/x86_emulate +tools/tests/regression/installed/* +tools/tests/regression/build/* +tools/tests/regression/downloads/* +tools/tests/mem-sharing/memshrtool +tools/tests/mce-test/tools/xen-mceinj +tools/vnet/Make.local +tools/vnet/build/* +tools/vnet/gc +tools/vnet/gc*/* +tools/vnet/vnet-module/*.ko +tools/vnet/vnet-module/.*.cmd +tools/vnet/vnet-module/.tmp_versions/* +tools/vnet/vnet-module/vnet_module.mod.* +tools/vnet/vnetd/vnetd +tools/vtpm/tpm_emulator-*.tar.gz +tools/vtpm/tpm_emulator/* +tools/vtpm/vtpm/* +tools/vtpm_manager/manager/vtpm_managerd +tools/xcutils/lsevtchn +tools/xcutils/xc_restore +tools/xcutils/xc_save +tools/xcutils/readnotes +tools/xenfb/sdlfb +tools/xenfb/vncfb +tools/xenmon/xentrace_setmask +tools/xenmon/xenbaked +tools/xenpaging/xenpaging +tools/xenpmd/xenpmd +tools/xenstat/xentop/xentop +tools/xenstore/testsuite/tmp/* +tools/xenstore/init-xenstore-domain +tools/xenstore/xen +tools/xenstore/xenstore +tools/xenstore/xenstore-chmod +tools/xenstore/xenstore-exists +tools/xenstore/xenstore-list +tools/xenstore/xenstore-read +tools/xenstore/xenstore-rm +tools/xenstore/xenstore-write +tools/xenstore/xenstore-control +tools/xenstore/xenstore-ls +tools/xenstore/xenstored +tools/xenstore/xenstored_test +tools/xenstore/xs_crashme +tools/xenstore/xs_random +tools/xenstore/xs_stress +tools/xenstore/xs_tdb_dump +tools/xenstore/xs_test +tools/xenstore/xs_watch_stress +tools/xentrace/xentrace_setsize +tools/xentrace/tbctl +tools/xentrace/xenctx +tools/xentrace/xentrace +tools/xm-test/ramdisk/buildroot +tools/xm-test/aclocal.m4 +tools/xm-test/autom4te +tools/xm-test/install-sh +tools/xm-test/mkinstalldirs +tools/xm-test/missing +tools/xm-test/config(ure|.log|.status|.guess|.sub) +tools/xm-test/Makefile(.in)* +tools/xm-test/*/Makefile(.in)* +tools/xm-test/lib/XmTestLib/config.py +tools/xm-test/lib/XmTestReport/xmtest.py +tools/xm-test/tests/*.test +tools/ocaml-xenstored* +xen/.banner* +xen/BLOG +xen/System.map +xen/arch/arm/asm-offsets.s +xen/arch/arm/xen.lds +xen/arch/x86/asm-offsets.s +xen/arch/x86/boot/mkelf32 +xen/arch/x86/xen.lds +xen/arch/x86/boot/reloc.S +xen/arch/x86/boot/reloc.bin +xen/arch/x86/boot/reloc.lnk +xen/arch/x86/efi.lds +xen/arch/x86/efi/disabled +xen/arch/x86/efi/mkreloc +xen/ddb/* +xen/include/headers.chk +xen/include/asm +xen/include/asm-*/asm-offsets.h +xen/include/asm-ia64/asm-xsi-offsets.h +xen/include/asm-ia64/.offsets.h.stamp +xen/include/asm-ia64/xen +xen/include/compat/* +xen/include/hypervisor-ifs/arch +xen/include/linux +xen/include/public/public +xen/include/xen/*.new +xen/include/xen/acm_policy.h +xen/include/xen/banner.h +xen/include/xen/compile.h +xen/tools/figlet/figlet +xen/tools/symbols +xen/xen +xen/xen-syms +xen/xen.* +xen/arch/ia64/asm-offsets.s +xen/arch/ia64/asm-xsi-offsets.s +xen/arch/ia64/map.out +xen/arch/ia64/xen.lds.s +unmodified_drivers/linux-2.6/.tmp_versions +unmodified_drivers/linux-2.6/*.cmd +unmodified_drivers/linux-2.6/*.ko +unmodified_drivers/linux-2.6/*.mod.c +LibVNCServer* + +tools/qemu-xen-dir-remote +tools/qemu-xen-dir + +tools/qemu-xen-traditional-dir-remote +tools/qemu-xen-traditional-dir + +tools/firmware/seabios-dir-remote +tools/firmware/seabios-dir + +tools/firmware/rombios/_rombios_.c +tools/firmware/rombios/rombios.s +tools/firmware/rombios/rombios.sym +tools/include/xen-foreign/checker.c +tools/include/xen-foreign/ia64.h +tools/include/xen-foreign/structs.pyc +tools/include/xen-foreign/x86_32.h +tools/include/xen-foreign/x86_64.h + +.git +tools/misc/xen-hptool +tools/libxl/_*.[ch] +tools/libxl/testidl +tools/libxl/testidl.c +tools/libxl/*.pyc +tools/libxl/libxl-save-helper +tools/blktap2/control/tap-ctl +tools/firmware/etherboot/eb-roms.h +tools/firmware/etherboot/gpxe-git-snapshot.tar.gz +tools/misc/xenwatchdogd +tools/misc/xen-hvmcrash +tools/misc/xen-lowmemd +tools/libvchan/vchan-node[12] +tools/ocaml/*/.ocamldep.make +tools/ocaml/*/*.cm[ixao] +tools/ocaml/*/*.cmxa +tools/ocaml/*/*.annot +tools/ocaml/*/*/.ocamldep.make +tools/ocaml/*/*/*.cm[ixao] +tools/ocaml/*/*/*.cmxa +tools/ocaml/*/*/*.annot +tools/ocaml/*/*/META +tools/ocaml/libs/xl/_libxl_types.inc +tools/ocaml/libs/xl/_libxl_types.ml.in +tools/ocaml/libs/xl/_libxl_types.mli.in +tools/ocaml/libs/xl/xenlight.ml +tools/ocaml/libs/xl/xenlight.mli +tools/ocaml/xenstored/oxenstored + +tools/debugger/kdd/kdd +tools/firmware/etherboot/ipxe.tar.gz +tools/firmware/etherboot/ipxe/ +tools/python/xen/lowlevel/xl/_pyxl_types.c +tools/python/xen/lowlevel/xl/_pyxl_types.h +tools/xenstore/xenstore-watch + +docs/txt/misc/*.txt +docs/txt/man/*.txt diff -Nru xen-4.2.1/.hgignore xen-4.2.2/.hgignore --- xen-4.2.1/.hgignore 1970-01-01 01:00:00.000000000 +0100 +++ xen-4.2.2/.hgignore 2013-04-23 18:42:55.000000000 +0200 @@ -0,0 +1,365 @@ +.*\.a$ +.*\.cmi$ +.*\.cmo$ +.*\.cmx$ +\..*\.d$ +.*\.o$ +.*\.opic$ +.*\.pyc$ +.*\.so$ +.*\.so\..*$ +.*\.tar\.bz2$ +.*\.tar\.gz$ +.*~$ +.*\.tmp$ +.*\.flc$ +.*\.orig$ +.*\.rej$ +.*\.spot$ +.*\.spit$ +.*/a\.out$ +.*/Modules\.symvers$ +.*/cscope\..*$ +^cscope.*$ +^[^/]*\.bz2$ +^\.config$ +^\.pc +(^|/)(tags|TAGS)$ +(^|/)(GTAGS|GPATH|GSYMS|GRTAGS)$ +^build-.*$ +^dist/.*$ +^docs/.*\.aux$ +^docs/.*\.dvi$ +^docs/.*\.log$ +^docs/.*\.pdf$ +^docs/.*\.ps$ +^docs/.*\.toc$ +^docs/api/.*$ +^docs/figs/xenserver\.eps$ +^docs/html/.*$ +^docs/interface/WARNINGS$ +^docs/interface/images\.pl$ +^docs/interface/images\.tex$ +^docs/interface/img1\.png$ +^docs/interface/index\.html$ +^docs/interface/interface\.css$ +^docs/interface/interface\.html$ +^docs/interface/labels\.pl$ +^docs/man1/ +^docs/man5/ +^docs/pdf/.*$ +^docs/ps/.*$ +^docs/user/WARNINGS$ +^docs/user/images\.pl$ +^docs/user/images\.tex$ +^docs/user/img1\.png$ +^docs/user/img2\.png$ +^docs/user/img3\.png$ +^docs/user/index\.html$ +^docs/user/internals\.pl$ +^docs/user/labels\.pl$ +^docs/user/user\.css$ +^docs/user/user\.html$ +^docs/txt/.*$ +^docs/xen-api/vm_lifecycle.eps$ +^docs/xen-api/xenapi-datamodel-graph.eps$ +^docs/xen-api/xenapi.out$ +^extras/mini-os/arch/ia64/gen_off.s$ +^extras/mini-os/include/list\.h$ +^extras/mini-os/include/mini-os$ +^extras/mini-os/include/ia64/mini-os$ +^extras/mini-os/include/ia64/offsets.h$ +^extras/mini-os/include/x86/mini-os$ +^extras/mini-os/include/xen$ +^extras/mini-os/mini-os.*$ +^install/.*$ +^linux-[^/]*-paravirt/.*$ +^linux-2.6[^/]*/.*$ +^linux-[^/]*-rc/.*$ +^linux-[^/]*-tip/.*$ +^linux-[^/]*-git/.*$ +^linux-[^/]*\.patch$ +^mkddbxen$ +^netbsd-[^/]*-tools/.*$ +^netbsd-[^/]*-xen0/.*$ +^netbsd-[^/]*-xenU/.*$ +^netbsd-[^/]*\.patch$ +^patches/.*/\.makedep$ +^patches/ebtables-brnf-5_vs_2\.4\.25\.diff$ +^patches/ebtables\.diff$ +^patches/tmp/.*$ +^pristine-.*$ +^ref-.*$ +^tmp-.*$ +^stubdom/binutils-.*$ +^stubdom/cross-root-.*$ +^stubdom/gcc-.*$ +^stubdom/include$ +^stubdom/ioemu$ +^stubdom/xenstore$ +^stubdom/libxc-.*$ +^stubdom/lwip-.*$ +^stubdom/mini-os-.*$ +^stubdom/mk-headers-.*$ +^stubdom/newlib-.*$ +^stubdom/pciutils-.*$ +^stubdom/zlib-.*$ +^stubdom/grub-.*$ +^stubdom/ocaml-.*$ +^stubdom/lwip/ +^stubdom/ioemu/ +^stubdom/stubdompath\.sh$ +^tools/.*/build/lib.*/.*\.py$ +^tools/blktap2/control/tap-ctl$ +^tools/blktap2/drivers/img2qcow$ +^tools/blktap2/drivers/lock-util$ +^tools/blktap2/drivers/qcow-create$ +^tools/blktap2/drivers/qcow2raw$ +^tools/blktap2/drivers/tapdisk-client$ +^tools/blktap2/drivers/tapdisk-diff$ +^tools/blktap2/drivers/tapdisk-stream$ +^tools/blktap2/drivers/tapdisk2$ +^tools/blktap2/drivers/td-util$ +^tools/blktap2/vhd/vhd-update$ +^tools/blktap2/vhd/vhd-util$ +^tools/blktap/drivers/blktapctrl$ +^tools/blktap/drivers/img2qcow$ +^tools/blktap/drivers/qcow-create$ +^tools/blktap/drivers/qcow2raw$ +^tools/blktap/drivers/tapdisk$ +^tools/check/\..*$ +^tools/console/xenconsole$ +^tools/console/xenconsoled$ +^tools/debugger/gdb/gdb-6\.2\.1-linux-i386-xen/.*$ +^tools/debugger/gdb/gdb-6\.2\.1/.*$ +^tools/debugger/gdb/gdb-6\.2\.1\.tar\.bz2$ +^tools/debugger/gdbsx/gdbsx$ +^tools/debugger/kdd/kdd$ +^tools/debugger/xenitp/xenitp$ +^tools/firmware/.*/biossums$ +^tools/firmware/.*\.bin$ +^tools/firmware/.*\.sym$ +^tools/firmware/.*bios/.*bios.*\.txt$ +^tools/firmware/etherboot/eb-roms\.h$ +^tools/firmware/etherboot/ipxe/.*$ +^tools/firmware/etherboot/ipxe\.git/.*$ +^tools/firmware/extboot/extboot.img$ +^tools/firmware/extboot/signrom$ +^tools/firmware/hvmloader/acpi/mk_dsdt$ +^tools/firmware/hvmloader/acpi/dsdt.*\.c$ +^tools/firmware/hvmloader/acpi/dsdt_.*\.asl$ +^tools/firmware/hvmloader/acpi/ssdt_.*\.h$ +^tools/firmware/hvmloader/hvmloader$ +^tools/firmware/hvmloader/roms\.inc$ +^tools/firmware/rombios/BIOS-bochs-[^/]*$ +^tools/firmware/rombios/_rombios[^/]*_\.c$ +^tools/firmware/rombios/rombios[^/]*\.s$ +^tools/firmware/rombios/32bit/32bitbios_flat\.h$ +^tools/firmware/vgabios/vbetables-gen$ +^tools/firmware/vgabios/vbetables\.h$ +^tools/flask/utils/flask-getenforce$ +^tools/flask/utils/flask-get-bool$ +^tools/flask/utils/flask-loadpolicy$ +^tools/flask/utils/flask-setenforce$ +^tools/flask/utils/flask-set-bool$ +^tools/flask/utils/flask-label-pci$ +^tools/fs-back/fs-backend$ +^tools/hotplug/common/hotplugpath\.sh$ +^tools/include/xen/.*$ +^tools/include/xen-foreign/.*\.(c|h|size)$ +^tools/include/xen-foreign/checker$ +^tools/libxc/ia64/asm/.*\.h$ +^tools/libxc/ia64/acpi/.*\.h$ +^tools/libxc/ia64/acpi/platform/.*\.h$ +^tools/libxc/ia64/dom_fw_asm.S$ +^tools/libxc/ia64/dom_fw_common\.c$ +^tools/libxc/ia64/dom_fw_domu\.c$ +^tools/libxc/ia64/xen/.*\.h$ +^tools/libxen/libxenapi- +^tools/libxen/test/test_bindings$ +^tools/libxen/test/test_event_handling$ +^tools/libxl/_.*\.h$ +^tools/libxl/_.*\.c$ +^tools/libxl/libxlu_cfg_y\.output$ +^tools/libxl/xl$ +^tools/libxl/libxl-save-helper$ +^tools/libxl/testidl$ +^tools/libxl/testidl\.c$ +^tools/libxl/tmp\..*$ +^tools/libxl/.*\.new$ +^tools/libxl/_libxl\.api-for-check +^tools/libxl/libxl\.api-ok +^tools/libvchan/vchan-node[12]$ +^tools/libaio/src/.*\.ol$ +^tools/libaio/src/.*\.os$ +^tools/misc/cpuperf/cpuperf-perfcntr$ +^tools/misc/cpuperf/cpuperf-xen$ +^tools/misc/lomount/lomount$ +^tools/misc/mbootpack/bin2c$ +^tools/misc/mbootpack/bootsect$ +^tools/misc/mbootpack/bzimage_header\.c$ +^tools/misc/mbootpack/mbootpack$ +^tools/misc/mbootpack/setup$ +^tools/misc/miniterm/miniterm$ +^tools/misc/xc_shadow$ +^tools/misc/xen_cpuperf$ +^tools/misc/xen-detect$ +^tools/misc/xen-hptool$ +^tools/misc/xen-hvmcrash$ +^tools/misc/xen-tmem-list-parse$ +^tools/misc/xenperf$ +^tools/misc/xenpm$ +^tools/misc/xen-hvmctx$ +^tools/misc/xen-lowmemd$ +^tools/misc/gtraceview$ +^tools/misc/gtracestat$ +^tools/misc/xenlockprof$ +^tools/pygrub/build/.*$ +^tools/python/build/.*$ +^tools/python/xen/util/path\.py$ +^tools/python/xen/lowlevel/xl/_pyxl_types.c +^tools/python/xen/lowlevel/xl/_pyxl_types.h +^tools/remus/imqebt/imqebt$ +^tools/remus/kmod/.*(\.cmd|\.mod|\.ko|\.mod\.c|\.symvers|\.xen)$ +^tools/security/secpol_tool$ +^tools/security/xen/.*$ +^tools/security/xensec_tool$ +^tools/tests/x86_emulator/blowfish\.bin$ +^tools/tests/x86_emulator/blowfish\.h$ +^tools/tests/x86_emulator/test_x86_emulator$ +^tools/tests/x86_emulator/x86_emulate$ +^tools/tests/regression/installed/.*$ +^tools/tests/regression/build/.*$ +^tools/tests/regression/downloads/.*$ +^tools/tests/xen-access/xen-access$ +^tools/tests/mem-sharing/memshrtool$ +^tools/tests/mce-test/tools/xen-mceinj$ +^tools/vnet/Make.local$ +^tools/vnet/build/.*$ +^tools/vnet/gc$ +^tools/vnet/gc.*/.*$ +^tools/vnet/vnet-module/.*\.ko$ +^tools/vnet/vnet-module/\..*\.cmd$ +^tools/vnet/vnet-module/\.tmp_versions/.*$ +^tools/vnet/vnet-module/vnet_module\.mod\..*$ +^tools/vnet/vnetd/vnetd$ +^tools/vtpm/tpm_emulator-.*\.tar\.gz$ +^tools/vtpm/tpm_emulator/.*$ +^tools/vtpm/vtpm/.*$ +^tools/vtpm_manager/manager/vtpm_managerd$ +^tools/xcutils/lsevtchn$ +^tools/xcutils/xc_restore$ +^tools/xcutils/xc_save$ +^tools/xcutils/readnotes$ +^tools/misc/xenwatchdogd$ +^tools/xenfb/sdlfb$ +^tools/xenfb/vncfb$ +^tools/xenmon/xentrace_setmask$ +^tools/xenmon/xenbaked$ +^tools/xenpaging/xenpaging$ +^tools/xenpmd/xenpmd$ +^tools/xenstat/xentop/xentop$ +^tools/xenstore/testsuite/tmp/.*$ +^tools/xenstore/init-xenstore-domain$ +^tools/xenstore/xen$ +^tools/xenstore/xenstore$ +^tools/xenstore/xenstore-chmod$ +^tools/xenstore/xenstore-exists$ +^tools/xenstore/xenstore-list$ +^tools/xenstore/xenstore-read$ +^tools/xenstore/xenstore-rm$ +^tools/xenstore/xenstore-write$ +^tools/xenstore/xenstore-control$ +^tools/xenstore/xenstore-ls$ +^tools/xenstore/xenstore-watch$ +^tools/xenstore/xenstored$ +^tools/xenstore/xenstored_test$ +^tools/xenstore/xs_crashme$ +^tools/xenstore/xs_random$ +^tools/xenstore/xs_stress$ +^tools/xenstore/xs_tdb_dump$ +^tools/xenstore/xs_test$ +^tools/xenstore/xs_watch_stress$ +^tools/xentrace/xentrace_setsize$ +^tools/xentrace/tbctl$ +^tools/xentrace/xenctx$ +^tools/xentrace/xentrace$ +^tools/xm-test/ramdisk/buildroot +^tools/xm-test/aclocal.m4$ +^tools/xm-test/autom4te +^tools/xm-test/install-sh$ +^tools/xm-test/mkinstalldirs$ +^tools/xm-test/missing$ +^tools/xm-test/config(ure|.log|.status|.guess|.sub)$ +^tools/xm-test/Makefile(.in)*$ +^tools/xm-test/.*/Makefile(.in)*$ +^tools/xm-test/lib/XmTestLib/config.py$ +^tools/xm-test/lib/XmTestReport/xmtest.py$ +^tools/xm-test/tests/.*\.test$ +^tools/firmware/ovmf-remote +^tools/firmware/ovmf$ +^tools/qemu-xen-traditional-dir-remote +^tools/qemu-xen-traditional-dir$ +^tools/qemu-xen-dir-remote +^tools/qemu-xen-dir$ +^tools/firmware/seabios-dir-remote +^tools/firmware/seabios-dir$ +^tools/ocaml/.*/.*\.annot$ +^tools/ocaml/.*/.*\.cmx?a$ +^tools/ocaml/.*/META$ +^tools/ocaml/.*/\.ocamldep\.make$ +^tools/ocaml/libs/xl/_libxl_types\.ml\.in$ +^tools/ocaml/libs/xl/_libxl_types\.mli\.in$ +^tools/ocaml/libs/xl/_libxl_types\.inc$ +^tools/ocaml/libs/xl/xenlight\.ml$ +^tools/ocaml/libs/xl/xenlight\.mli$ +^tools/ocaml/xenstored/oxenstored$ +^tools/autom4te\.cache$ +^tools/config\.h$ +^tools/config\.log$ +^tools/config\.status$ +^tools/config\.cache$ +^config/Tools\.mk$ +^xen/\.banner.*$ +^xen/BLOG$ +^xen/System.map$ +^xen/arch/arm/asm-offsets\.s$ +^xen/arch/arm/xen\.lds$ +^xen/arch/x86/asm-offsets\.s$ +^xen/arch/x86/boot/mkelf32$ +^xen/arch/x86/xen\.lds$ +^xen/arch/x86/boot/reloc\.S$ +^xen/arch/x86/boot/reloc\.bin$ +^xen/arch/x86/boot/reloc\.lnk$ +^xen/arch/x86/efi\.lds$ +^xen/arch/x86/efi/disabled$ +^xen/arch/x86/efi/mkreloc$ +^xen/ddb/.*$ +^xen/include/headers\.chk$ +^xen/include/asm$ +^xen/include/asm-.*/asm-offsets\.h$ +^xen/include/asm-ia64/asm-xsi-offsets\.h$ +^xen/include/asm-ia64/.offsets.h.stamp$ +^xen/include/asm-ia64/xen$ +^xen/include/compat/.*$ +^xen/include/hypervisor-ifs/arch$ +^xen/include/linux$ +^xen/include/public/public$ +^xen/include/xen/.*\.new$ +^xen/include/xen/acm_policy\.h$ +^xen/include/xen/banner\.h$ +^xen/include/xen/compile\.h$ +^xen/tools/figlet/figlet$ +^xen/tools/symbols$ +^xen/xen$ +^xen/xen-syms$ +^xen/xen\..*$ +^xen/arch/ia64/asm-offsets\.s$ +^xen/arch/ia64/asm-xsi-offsets\.s$ +^xen/arch/ia64/map\.out$ +^xen/arch/ia64/xen\.lds\.s$ +^unmodified_drivers/linux-2.6/\.tmp_versions +^unmodified_drivers/linux-2.6/.*\.cmd$ +^unmodified_drivers/linux-2.6/.*\.ko$ +^unmodified_drivers/linux-2.6/.*\.mod\.c$ +^LibVNCServer.* diff -Nru xen-4.2.1/.hgsigs xen-4.2.2/.hgsigs --- xen-4.2.1/.hgsigs 1970-01-01 01:00:00.000000000 +0100 +++ xen-4.2.2/.hgsigs 2013-04-23 18:42:55.000000000 +0200 @@ -0,0 +1,16 @@ +2a60be40e2cb2a3c62836e690927588c3e31d01c 0 iQEcBAABAgAGBQJNLxyGAAoJEIP+FMlX6CvZUjIH/1R0TcK4zBLl1FdXWF/LnOW+HgezYywSRHuJqNur6TweqVqKxnM6gCqjRvlGOrtWOhtEVnb3FmR7pRX4dEiQnBdO//b30ZbU8zOKvDlB7Pa0U81pcD19tloycV+LbHgulVxXnZXeQRTP/eLsUKTM4GKiqvDNN3EPdZADJyz+0MLf/BCJipXVkgmzbFefFlBDRtw05BGE899kiObqoA6LnPPVvZxBqW4nNxeYR6nK7mgps9RRrgMnt9fyPmSN0+ME1nxhfl6Gd9p9109S5ujHwnzwgO/5X+OQF/F0i1SQVvXsGQyM5eE/ZxHEpEKqtFyWPEIk4/eFLsqmdPAAr5XERaw= +9dca60d88c630fcc7a07ad68fd3a0dce02aee646 0 iQEcBAABAgAGBQJNPtkLAAoJEIP+FMlX6CvZzPMH/Rwsp62u3DXfzune2FBh6WjJerPusvkkhfogDc21Mfy7ed/rJfr2ovLYdiJhc7Ml5F51rLc/1d2FshiCDB9x5nVGyKSx9VfWew6fU/YI5wc2BiQg47d9WM6WI8kP07E51c+ML9nQu9QOE4xI0JpFy2u1jByJtG/Wy9qgLwvhK1OoCjs0Z9/R9h5rvWhi61GpQ1z04/FdMRn0JqSOy7nLb4qWmXrNg5LfddJl63yNcK08HfHyp+KtnrLMNei8T8TKEAv3amC29h2t5xMmVsGMkfakjLuC3k9Jirn29YP25QHNqz405rH3aimFbVnIfwelNW7y+/5jfJ4r8Fnt8Oq0+Y4= +e7b31cc0093c6002effce7d038e929d936ed023f 0 iQEcBAABAgAGBQJNRvWqAAoJEIP+FMlX6CvZwYMH/2TbgdFOUQbzBCp1WgKHA2foq+KFBAl72uyOm3SPeaZID8mGe+jySnZj1zTgdZkuZv3sC510Hsl0EbJ+0cXtdvMemLuZHusRGzvP1cY3fWW6Ltme1EkFlsqEI3opO+mourSo8GVC/BnMqOl7fV8vpGv72BDqXQ/bBM8qgLnYeWN0yale7soR8Akpp27gNcivUUqKSerusHvIYV1mBl9Xg3mfQTCxR+bmM6lp4SXje38wWnqzAEWd5v9YpGKNacc0ca5mxJGz6t+dmr7PSdR5puYsSVU0CK3aWoL8jxGzT/caw03l5dboMaRbBWSD2R0UeZEG4B1C3aXFE9aiBV2I/No= +8df0c7f9cda6cb271a1414114e26f72e1d93a69a 0 iQEcBAABAgAGBQJNVB85AAoJEIP+FMlX6CvZ+aAIAL/+olR1XkxMyQyQlhV6pc9IPONHsUF1+xGcl1p3MRZCk32rNhdCM1NTMEW695Q9CRZ1/aZpCVJKSMNuuA3k6KEFEpyOMmAgWqRUgo7mMS/Jrp2qS0JCkKshQ3SoCJLsa6ENIJLKI/T4ZlUHTAK7MMfg7XjPLgHZU/l84LnpRDSfr8TeoQq4lcWYkAV+ra0VW0KXl1QrV5hMEmZAKqLhKHRYyRKgg3ZM81OHthe+zE8OUOd/yADxvwaovfai6c0wKoyHuRCi9Rzbp/aJbVFBkdDvZqhSWxq+IykC6MI/Yu3BlCTvwKVRgoYOtHJ4twjxln5qw+BExFZo3JfL16jQ6dE= +d2d27d989ebce4325575f871415337cc54891dde 0 iQEcBAABAgAGBQJNXBYbAAoJEIP+FMlX6CvZTGIH/2bxz3UrQNNwsUMmx5tNKwoAzmTjX5IjpsibwZgIlWFTpZhmbdAK5jvUVdPgmAURgPUHIkcic9MRfXZepzqxEyE/zz2itCcDE6oo1ibb2cwn54c2RlHhcweaDzEDroRfcGZ2tEWXIjTEAyNwlhy9IQZ9wC3XAA0wTwXoHx7o9fUs3WSFahr+Cz93w/sc7uQ6LK52WvVvUd7UflSEx2X4uACDknxbKucG6POCxnQ3A+eVXJmdnHak5c+ySsjwu+fHiQ3/ca0JY1RlEF+8NT+aFobZ51kr7acCmFDvOsGd7h6hhgNVe0mujq5pyooklA4qW83/VudS/jOVPnSt+cGhBpE= +7b6791dbfecdb2eba6acd2c8bf0ced17d06746b2 0 iQEcBAABAgAGBQJNa9NOAAoJEIP+FMlX6CvZK+sH/REZ7jV0iWnDbvfPgdl/KlxEVvj4LsmLFAVBa0sEHa8ih+THp3C8Bso7izIs424y667QH6Pq+wAiB5TELOOHRsp6VV5AxYXuNF1Vw9xD9YGUQ5ECAIfc9gldfZZAv4QZayHOgdz4zRnMOrO1D8rqNDVO7BcgNutgf25WtrLsg+mxxyLjcA9Q5Q7a6dY1WSzzSf6beOW9MLh6Hy2pGTzO3CcS6M0Aa6sXZKisy7CWMOueAbwSmRBmw3il1oM62I44ovAJUxBvLTQZm0mNPzeq0IP59rLrGzdhZ76+iE47GK/zGjcC7o/jSQUy6xhuUwgcx3PdB8vzJzNsz6p8mIR+UKo= +6241fa0ad1a939d2eba11bdec929564276f56a9e 0 iQEcBAABAgAGBQJNcSJqAAoJEIP+FMlX6CvZbxEH/206722t0t46MfPq0/buPpQDNiB0HtFZY79u1Yc8xGTo23rQ2NTG10JdCurN2pyxwFesiSIZ4Ua3zqpZ0EA2EN6xAFY9Vua4WEPNJwK8pxxWABcHI017QTidQs41bEaUn92yyfmixq6iYCGvR+b46KWbip/i9Z6vZpw0g3JyOaxgAhkA+p4w90yUIKUkjTrtiuqnI31MUQE0urwWAXQUj78knrqEu3wb91+me1KLH9WzReBB7tt3/GmaK4qSdnHNpIkulVK0XJYzFkJzFr5eHVeYTGFb25Sgir2sIN2gxaCPI3/p90akFMJKmeNV5XCmOQ5g2GWUZTff8LGF6Fk0Me8= +8e620dc570ce42564c1630de5798e23909ee809c 0 iQEcBAABAgAGBQJQFqUYAAoJEIP+FMlX6CvZDGEH/jxUFG29okRASHY6XwFrJ4AU7tLyC8Bt2vAH3ZaA/h1Tn2GWkQXf4tzBAvvwWNBrm1hdj73OaB7dD2l2kvL551AhoSd4/5z+pPtpC72ItwFFTr3Ep9GRZEvEHculuei5IUzw1lxZuNCPCScBxQl+KI+dZHIeP0YO46VZTtG+EeBlj0SJ7JojKN4REd382eIgSLvpEFHCM6vqeCWM9FtDyomiMXdSosDLcWdFauFmV7cdWybA5WPj6bkJenABwX0A1V9uf225S0DTdO0t/7ncZ8h+wXTzqiixywA+lqza+u+HzNyopWmwiFcseFZjuHbKx6M2v0EvKPBcyTgdRZF/+Kg= +f4c47bcc01e13cb2e3b4b71fd588d86278875442 0 iQEcBAABAgAGBQJQIpupAAoJEIP+FMlX6CvZnBwH/3qlibrquTmD2p3rcdVi/JkWixaKK3KH4Ows/76sAJYCdx9YkmtkgC4zyz5aph4Rfy7dYnQIUhbwNNdZNBDd0XOVkjQm0ZX1wQjv3yA3Eq9NOUDmfFWldF+oosOG3h/+MLm/36CkB7gFku1ENQ8kagytXe4rN3QdOiJ9Rz84BAv6nJoT/1OX+m+MlBs948orC23aNEfWxrsrv2s92v5fJcAfSLW/AtER2JnASIxWECJ/TOkuHtrO2QPoBymSnifM2R624L+ySwRxSxo+Owfpooje5eekk0ekifvdYtaJ3pOfoOCv8yGEtb7mXv62WowVkasUZa/q+rGdVpHuK0UlBjI= +d44f290e81df5f78f0e3545742e3c4ff5415b0a7 0 iQEcBAABAgAGBQJQNji7AAoJEIP+FMlX6CvZvBcIAJPiA6ydvolYCvZsfGgafqCpcpG3f+PbUOwQRWfUcaKHPWFKnwRkmx9MAP9tEjXFNZcbimktDrofmee6XfLb8NLnCcHWZT8trRXYTNw2lM6DpK+AROUpAcShF3gCHQEtCJC6+NArD75aUkUji3awbGlhplHbyWvgvSSULhga+2xfYszRC7eI/g+7/f4JNkvqeWllAtd9fwftXaGhQi2V4LT5IimpJI7PivlDi0wi+BtqXHcmZhlnw3zpR51NRujsMVTNZMqe733kGdt8Y8j3vvsfXBye4+YAkEKFrzW3jTYlA9ws71oNVvWmwmOjOHpx6ASfquP3hhAoiHvb2c6Wims= +68640a3c99cefa86ae70fc49871025864e5671f2 0 iQEcBAABAgAGBQJQSdgUAAoJEIP+FMlX6CvZeWUH/1SeYnKXtkt7n+WuMyF2LvCzZQApmOo+hqVB7m0Pe4Yh9bEq1PAE+sJOAoQIBklCpY3WFsNGQN8yIbYyWRzbIM7oavknwoUoSn50zMk12HczqHigXvhL/eOghRKNsK9BrQnRV+byNHRjzSHPReNxpzueKBOTrCMlXtYMDb94swc+hatEDItT4TwZcaNPri3kiWND0DPmOk58Ke96ml9rpomS1ff976hYAZl+N1Q3Pt998SXiaglZ9EeL0Y8cY759XqZII4D4o6/oQW8MzWrQZr4woHHU7MfK3OWslelzP486esHyyjotEWeelhgl/RjIl0crNBbmCWU15BOAw7wSZh4= +14164c5f22c88a9dc1cfd7178f84a7fab2b82aa8 0 iQEcBAABAgAGBQJQUcGjAAoJEIP+FMlX6CvZvX4H/1QV1VSW//dsv8IVCHPnHO4njlqYNUgIRycS4EuCJ8SrFLgfR77y3DwJg1D+JrYIT80QfzNeU3g/bcqz+0koD/P7joV4ONFkrB7pHSfACmMY7nfQ1Z2qHePAfBQ+cVdx6rXEYkFAbPjOz6kAP3LmpRLPasU46H+oG1zKHRgc0uhNN3Vit7eIhx/hDvY2YZDjuIWCQpmJylRlJsvMbpk2CjLiy4nXMNTKd1nlTNPTuRISsVBLx/ToquWtiO2a2EVRE4E+JhRGHNdFwXBRfV1XDDVNNRj+SvDvyWs29WKEOfVyGpgAKd29j/5YPzuHqmCcCfNxuN6lDHL6NxtwjZdDJao= +af176624c3ae86141a4ad8617b5ec2a834a6c626 0 iQEcBAABAgAGBQJQVt5zAAoJEIP+FMlX6CvZ2q4H/2eEMxgwzflIPj88Y/jE1z8dTJ8E2l2FTBziMlmFYkmsiqx+BlGz9kk610DQo4mJoHrRSZOcZX0/NNUuCZntRizEorBQUcBEOBJQgTLzaxatPR49W5N7gOgqwNuWplKV0Aor7X0qX+wFZ4kZdBuqOimV7Mw43L1LsskcuDmqi8Ipvbf+JjnRPXpeTlxBOD+52ZhAirxvpA+LZfLIIYV9lx3SB7z7okxlBS+rlyL+h9cuwthWO3545QPlwXcSBY9r9m9/5ZtAiID5935JDdZGd7Dt/ZmikVs9xE6QHrHmWZFDfqgGPOmYFmVhJxk1xwwUbor3qaiUjTwfjM+zAIqtNv4= +b6f071324f5ed076bfd28c71b51521cdd38639ab 0 iQEcBAABAgAGBQJQpLjpAAoJEIP+FMlX6CvZs2EIAM1HO25BnOPvo3fVjDErNnLo6miyentoLWJpXiDrJb+QRwuNVNGAQN0vlfd2iHcuvC9ipR1iFUizFcO1TI/wYoIOYOxs/r9Yk9cnBRThC7+yoBhCZY/LAbbd6SazEzI/86ZrMPbT4kfL8BD652UP1o9HCHgbFYDLzRMZTtep4+mA1OXCUWto4QjAJn+/SCQKI5kJXdLaj6JDS40kQoDXMlcTKu0NlftFT3zSA+U/SnOrRFwxW7uTxM09yyRLs/a/LbRcmYjeCnKUlvh8uapi5878Gxf5Bpo3XINKFsxC6p7nKF0wHzAqm63sB+o7C4fIvNY0nnWi5e7FDir+CO2yIKE= +bfa4df1dbe1dac55428437184f811d174d806755 0 iQEcBAABAgAGBQJQyFDqAAoJEIP+FMlX6CvZcUMIAMOChtmvuIBpWhuIJofsMp4C8TDQoI2idc3s6K1OvL5YgWrcaRoqLW4C4ItyEvx0xe19GUAoqdXUkj9tQ9fwT/p6dzLIGPRnACjKs8uTopiGulFdXu6b80IK3xwG3rAjC/yz7nU6ohQpWZJQCL1CyaIPr7MEYI905luiKC18WSc+hJADKGBdTIvLgKAD7GtQkAjPq8GrrGUtEE6rwawhl9R+jQLWkRf2ucbqgtDEzNCmSICkgjK2Sudc6h+mcKX7r0s3eEEiSh0SmhR+6K3mCYicaWCxn4A/La8CKabU3jdP/+EKjnk8x/6DFqXATf3ijr1kP/ZlHnbnxpPp7UwAhho= +25b021aa35ebdb08b53fd7acf36dfed184989933 0 iQEcBAABAgAGBQJQzzM9AAoJEIP+FMlX6CvZBNgH/iIXrpTnXRgSFMMQvlNZ2Ci7EirOdq6wmAFkNA9Fun/g2EgY2EUhtmcPPwVj273Q+I0XcaJX41Iost45ROQpaix46yAb+Oz+pEgMoqtPJmi1srdvBJJgkrsl7erbWdkcj1AmkvffBmhDG4IFvODgQTWo+lp1uASW+nPaJdmHx1sCJCiioOGkNaGRA5N9vLSuiRzuSZFePJP2BmrvjzC5A+bIyAfnCdD9izp1I5IIKB3I2/MfM+Hq2MR1XZwWJMExkQ63yuDTyP1TcpSIgqNzScu7XJbQVE1aUdPuO7GQjHn92UiSA9DEuhtfuizxafHhqr0cKfEeUF8KaMD9lV2uczw= diff -Nru xen-4.2.1/.hgtags xen-4.2.2/.hgtags --- xen-4.2.1/.hgtags 1970-01-01 01:00:00.000000000 +0100 +++ xen-4.2.2/.hgtags 2013-04-23 18:42:55.000000000 +0200 @@ -0,0 +1,64 @@ +42882b3e0dda89f3a8ec00da568f86e9b3c230f1 RELEASE-2.0.0 +475a162b66e2c19b1e9468b234a4ba705334905e RELEASE-2.0.1 +dc2f08429f17e6614fd2f1ab88cc09ca0a850f32 RELEASE-2.0.2 +6e1bbc13911751efa0b1c018425c1b085820fa02 RELEASE-2.0.3 +fb875591fd72e15c31879c0e9034d99b80225595 RELEASE-2.0.4 +1a522944f76540ea9d73fcc1b0d13d0f670183f0 RELEASE-2.0.5 +2a5814ad2e5634a5fa291b703a152e7fc0b4faf0 RELEASE-2.0.6 +487b2ee37d1cecb5f3e7a546b05ad097a0226f2f beta1 +6a65fe0f84c8339b5b89362d0ec34d8abab752b0 ia64-stable +3d330e41f41ce1bc118c02346e18949ad5d67f6b latest-semistable +30c521db4c71960b0cf1d9c9e1b658e77b535a3e latest-stable +9afec5bc14aeb197ef37ea54a57eacd427463fc3 semistable +30c521db4c71960b0cf1d9c9e1b658e77b535a3e split-1.0 +3d330e41f41ce1bc118c02346e18949ad5d67f6b split-1.1 +c8fdb0caa77b429cf47f9707926e83947778cb48 RELEASE-3.0.0 +af0573e9e5258db0a9d28aa954dd302ddd2c2d23 3.0.2-rc +d0d3fef37685be264a7f52201f8ef44c030daad3 3.0.2-branched +6ed4368b4a9e1924c983774c4b1a2b6baf8e98a6 3.0.3-branched +057f7c4dbed1c75a3fbe446d346cee04cff31497 3.0.4-branched +d2ef85c6bf84cc619ca2d42c2edfc6229e70a6ad 3.1.0-branched +bd3d6b4c52ec809f080c89c4ffcf61dc6e445978 sparse-tree-deprecated +1f0c6e0d74a4acc1d3796ff705adc8485eba9377 3.2.0-rc1 +458dc123dd02d38aaa9acb513d6f237a1c6e967e 3.2.0-rc2 +ed79613b48817d5e0d1f9b3cf104c0e4e8b0d8cf 3.2.0-rc3 +c5deb251b9dcece9e466a48a66d3528ca1797db4 3.2.0-rc4 +36bb2ab4722733d919d32e4555eb46cc6a06cb8f 3.2.0-rc5 +9facc624a238f2b9437b07fa28ff65884aa867f2 3.2.0-rc6 +c3494402098e26507fc61a6579832c0149351d6a 3.3.0-rc1 +dde12ff94c96331668fe38a7b09506fa94d03c34 3.3.0-rc2 +57fca3648f25dcc085ee380954342960a7979987 3.3.0-rc3 +96d0a48e87ee46ba7b73e8c906a7e2e0baf60e2e 3.3.0-rc4 +b4dba6a0e97cb6dd080fa566468e3cc972c34d7a 3.3.0-rc5 +bc372510f1794ee41a8b0501cc84f8a65d05e094 3.3.0-rc6 +daf1193bcd11345d566a4747fe1f12c90b44452c 3.3.0-rc7 +1e99ba54035623731bc7318a8357aa6a118c5da1 3.3.0-branched +d611d9ac6d0271b53eb1d4e5d0c4ef20b269eea8 3.4.0-rc1 +087854cf3ed9e30ce6bcf7499c9675b759e1e9e7 3.4.0-rc2 +22e01301ff64c6f9f835f604523ac019f0f5e993 3.4.0-rc3 +67b5ad8ae87e64159807374ad66d5b5b2fb2ca1f 4.0.0-rc1 +e5e4573bcaba68a8b93a35768c825c1e8daa23be 4.0.0-rc2 +7d565d58f49859a2161f0e74844773d3b3312634 4.0.0-rc3 +912295f1b1f30307975c7514569f6f9c8faae4a7 4.0.0-rc4 +92f2ee87e5018073edc08734b425bc60bcd80bcd 4.0.0-rc5 +b4a1832a916f1e8f2aa2ad5b1efa155f9dd0cb4f 4.0.0-rc6 +ec8f2e7dea44905eb86bb794516506451e4771cb 4.0.0-rc7 +542211ba675c74813ed0df3be686d7cd201e82e9 4.0.0-rc8 +91232efdcfdcfb6402b4c0e3724716655ee42af6 4.0.0-branched +2a60be40e2cb2a3c62836e690927588c3e31d01c 4.1.0-rc1 +9dca60d88c630fcc7a07ad68fd3a0dce02aee646 4.1.0-rc2 +e7b31cc0093c6002effce7d038e929d936ed023f 4.1.0-rc3 +8df0c7f9cda6cb271a1414114e26f72e1d93a69a 4.1.0-rc4 +d2d27d989ebce4325575f871415337cc54891dde 4.1.0-rc5 +7b6791dbfecdb2eba6acd2c8bf0ced17d06746b2 4.1.0-rc6 +6241fa0ad1a939d2eba11bdec929564276f56a9e 4.1.0-branched +8e620dc570ce42564c1630de5798e23909ee809c 4.2.0-rc1 +f4c47bcc01e13cb2e3b4b71fd588d86278875442 4.2.0-rc2 +d44f290e81df5f78f0e3545742e3c4ff5415b0a7 4.2.0-rc3 +68640a3c99cefa86ae70fc49871025864e5671f2 4.2.0-rc4 +528f0708b6db392e10303b7ed2ab529bb8b512b7 4.2.0-branched +14164c5f22c88a9dc1cfd7178f84a7fab2b82aa8 4.2.0-rc5 +af176624c3ae86141a4ad8617b5ec2a834a6c626 RELEASE-4.2.0 +b6f071324f5ed076bfd28c71b51521cdd38639ab 4.2.1-rc1 +bfa4df1dbe1dac55428437184f811d174d806755 4.2.1-rc2 +25b021aa35ebdb08b53fd7acf36dfed184989933 RELEASE-4.2.1 diff -Nru xen-4.2.1/.hg-to-bk xen-4.2.2/.hg-to-bk --- xen-4.2.1/.hg-to-bk 1970-01-01 01:00:00.000000000 +0100 +++ xen-4.2.2/.hg-to-bk 2013-04-23 18:42:55.000000000 +0200 @@ -0,0 +1,2 @@ +#!/bin/sh +exit 0 diff -Nru xen-4.2.1/qemu/hw/e1000.c xen-4.2.2/qemu/hw/e1000.c --- xen-4.2.1/qemu/hw/e1000.c 2013-03-08 15:27:08.000000000 +0100 +++ xen-4.2.2/qemu/hw/e1000.c 2013-01-17 17:00:26.000000000 +0100 @@ -55,6 +55,11 @@ #define REG_IOADDR 0x0 #define REG_IODATA 0x4 +/* this is the size past which hardware will drop packets when setting LPE=0 */ +#define MAXIMUM_ETHERNET_VLAN_SIZE 1522 +/* this is the size past which hardware will drop packets when setting LPE=1 */ +#define MAXIMUM_ETHERNET_LPE_SIZE 16384 + /* * HW models: * E1000_DEV_ID_82540EM works with Windows and Linux @@ -628,6 +633,15 @@ return; } + /* Discard oversized packets if !LPE and !SBP. */ + if ((size > MAXIMUM_ETHERNET_LPE_SIZE || + (size > MAXIMUM_ETHERNET_VLAN_SIZE + && !(s->mac_reg[RCTL] & E1000_RCTL_LPE))) + && !(s->mac_reg[RCTL] & E1000_RCTL_SBP)) { + DBGOUT(RX, "packet too large for applicable LPE/VLAN size\n"); + return; + } + if (!receive_filter(s, buf, size)) return; diff -Nru xen-4.2.1/.rootkeys xen-4.2.2/.rootkeys --- xen-4.2.1/.rootkeys 1970-01-01 01:00:00.000000000 +0100 +++ xen-4.2.2/.rootkeys 2013-04-23 18:42:55.000000000 +0200 @@ -0,0 +1,1634 @@ +3ddb6b0bKlMz_dz-M59a1mkUa1lASw BitKeeper/etc/config +3eba336c4BUxP3H1DjQl8sInORf1Yw BitKeeper/etc/gone +3ddb6b0buTaC5zg1_a8FoAR9FWi_mw BitKeeper/etc/ignore +3ddb79c9_hgSp-gsQm8HqWM_9W3B_A BitKeeper/etc/logging_ok +4177dbbfqsi01p2zgZa0geUOgScONw COPYING +423fdd91sxkCMaKFcDsEdhsZer54vA Config.mk +3eb788d6Kleck_Cut0ouGneviGzliQ Makefile +3f5ef5a24IaQasQE2tyMxrfxskMmvw README +41880852AtdVfSsfKGtrLdajX1vEXQ buildconfigs/Rules.mk +41880852oSxvHJSmnzI6hlpFvHuQqQ buildconfigs/mk.linux-2.4-xen0 +41880852YWbPAO-cofTsGkFW1x7tGw buildconfigs/mk.linux-2.4-xenU +41880852Cwk_14PhDA9XZToJ5B2iMQ buildconfigs/mk.linux-2.6-xen0 +41880852siMCKilMpoBLtpP_bhYC2Q buildconfigs/mk.linux-2.6-xenU +4188d881_D8HpHnhHabA46_ycKwQyw buildconfigs/mk.netbsd-2.0-xenU +3f9e7d53iC47UnlfORp9iC1vai6kWw docs/Makefile +4187c1c7IWmBinGdI19kL4MuZ6RLbQ docs/check_pkgs +3f9e7d60PWZJeVh5xdnk0nLUdxlqEA docs/figs/xenlogo.eps +418a3248xjIqmNKo0v_XQSfAvlBGFw docs/html.sty +41c0c4116itF389v0CEWcmzue6zJkA docs/misc/VMX_changes.txt +412f4bd9sm5mCQ8BkrgKcAKZGadq7Q docs/misc/blkif-drivers-explained.txt +420b949cy9ZGzED74Fz_DaWlK7tT4g docs/misc/crashdb.txt +4251a1f82AexscYEiF4Iku8Gc_kWfQ docs/misc/grant-tables.txt +424d462b5GuApQ_NyMsRFt9LbrsWow docs/misc/sedf_scheduler_mini-HOWTO.txt +42b7434c-M2l4Og0klGf6xSAARqa2w docs/misc/shype4xen_readme.txt +40d6ccbfKKBq8jE0ula4eHEzBiQuDA docs/misc/xen_config.html +410a4c2bAO_m_l4RsiiPHnZ4ixHWbQ docs/misc/xend.tex +3f9e7d564bWFB-Czjv1qdmE6o0GqNg docs/src/interface.tex +410144afnSd2Yw68AHGO5gXu2m3y6A docs/src/user.tex +3f815144d1vI2777JI-dO4wk49Iw7g extras/mini-os/Makefile +3f815144zTnCV5591ulIJQrpe5b-5Q extras/mini-os/README +3f815144r7AHj8GPvc3Nl1L9OSsWIg extras/mini-os/events.c +3f815144h-Chna6E38yo40jqU95G1Q extras/mini-os/h/events.h +3f8151445bYdgThGHQPeOW49PsrJ_A extras/mini-os/h/hypervisor.h +3f815144f2Vg3qb6tiwt2VZad-DWsg extras/mini-os/h/lib.h +3f81514437EzzRWAnZl4_Ej1oznMjg extras/mini-os/h/mm.h +3f815144nbSjjT1h4m99-QPbeSWY0Q extras/mini-os/h/os.h +3f815144L1t0AevJt2JDXPegv6JTrw extras/mini-os/h/time.h +3f815144UxddtL0ICCKisN-NDHNFaA extras/mini-os/h/types.h +3f815145LqcH11TCEZbAvcjarckkJw extras/mini-os/hypervisor.c +3f815145vwnmxhCwN7dMRWv_XFtXbg extras/mini-os/kernel.c +3f8151451k5emQAlRe80JdIvfSN4VA extras/mini-os/lib/malloc.c +3f815145Mb9WSKjOPsYTLsPIvPyy4Q extras/mini-os/lib/math.c +3f8151454rEuPjN74V2Bcu65RLnM-Q extras/mini-os/lib/printf.c +3f815145MQZrUJV0iRmTK2KIhwB2wg extras/mini-os/lib/string.c +3f815145AYE58Kpmsj5U7oHDpVDZJA extras/mini-os/minios-x86_32.lds +420c983dKBm6a2-sM04QzaaTy55crw extras/mini-os/minios-x86_64.lds +3f815145CB8XdPUqsmhAjSDFuwOoqA extras/mini-os/mm.c +3f815145vGYx1WY79voKkZB9yKwJKQ extras/mini-os/time.c +3f815145xlKBAQmal9oces3G_Mvxqw extras/mini-os/traps.c +3f815145W2mamPMclRLOzm5B38vWUQ extras/mini-os/x86_32.S +420c983dAE5qEtJMI6wHAQnHVJ1r2g extras/mini-os/x86_64.S +423e7e86yUUeeOvTAmjIahrpk1ksaQ freebsd-5.3-xen-sparse/conf/Makefile.i386-xen +423e7e86CSWbA9G8OftmMbfhStuQ6Q freebsd-5.3-xen-sparse/conf/files.i386-xen +42642db9m5qcqIrsHX8QlcBGeKSAmw freebsd-5.3-xen-sparse/conf/kern.mk +423e7e86m-vV5fQ_32CjcFMEr77Fyg freebsd-5.3-xen-sparse/conf/ldscript.i386-xen +423e7e86Fo2PxRS_37IwkpH-x5t5xQ freebsd-5.3-xen-sparse/conf/options.i386-xen +423e7e868Yt0iZuEeccnczyToPPvow freebsd-5.3-xen-sparse/fbsdxensetup +423e7e87szZMt1H0xhO5vzyXR6d7iQ freebsd-5.3-xen-sparse/i386-xen/Makefile +423e7e87zkFCb_Z4sHQpbec6jk3MdA freebsd-5.3-xen-sparse/i386-xen/conf/GENERIC +423e7e876sW2cYvlk0qy8YnBbPlklQ freebsd-5.3-xen-sparse/i386-xen/conf/GENERIC.hints +423e7e87DGOWxuyrh3sr9TmUwddFuQ freebsd-5.3-xen-sparse/i386-xen/conf/Makefile +423e7e87eEVyCRO7fX1xtDhf1XJkVg freebsd-5.3-xen-sparse/i386-xen/conf/NOTES +423e7e87XB6xpj6WE1bGhL_VMtRYzg freebsd-5.3-xen-sparse/i386-xen/conf/OLDCARD +423e7e87a984mQwCH2oAeQuddGgKLg freebsd-5.3-xen-sparse/i386-xen/conf/PAE +423e7e87Ol0GS76rWAgsk3LUwcGDxA freebsd-5.3-xen-sparse/i386-xen/conf/XENCONF +423e7e87J8ZFS37QDhcVwErFq0MI_Q freebsd-5.3-xen-sparse/i386-xen/conf/gethints.awk +423e7e879JhpmoexiNPqXRRcBmZ9gg freebsd-5.3-xen-sparse/i386-xen/i386-xen/clock.c +423e7e88URfvmzX5RoVTjlaUHW5-AA freebsd-5.3-xen-sparse/i386-xen/i386-xen/critical.c +423e7e88MJxOMvE6pfDvSHp7WuF9DQ freebsd-5.3-xen-sparse/i386-xen/i386-xen/ctrl_if.c +423e7e885ZJMOinNI0XzQE4EgL0N8g freebsd-5.3-xen-sparse/i386-xen/i386-xen/db_interface.c +423e7e88B5vxFblc-MlhxKk9e4ieBw freebsd-5.3-xen-sparse/i386-xen/i386-xen/evtchn.c +423e7e88z_BrFu1O71-Ya4pXJpjAPQ freebsd-5.3-xen-sparse/i386-xen/i386-xen/exception.s +423e7e88uDvAZLmABMkqOpmemyVRyw freebsd-5.3-xen-sparse/i386-xen/i386-xen/genassym.c +4266317eeOLpvRxIjmOYQVlL4WWQsg freebsd-5.3-xen-sparse/i386-xen/i386-xen/gnttab.c +423e7e88yr5NFQudubMnkvdb_y-Gtg freebsd-5.3-xen-sparse/i386-xen/i386-xen/hypervisor.c +423e7e88Y-e-4RRf9nrgkVn5PXUv3Q freebsd-5.3-xen-sparse/i386-xen/i386-xen/i686_mem.c +423e7e88b8m2cuGtOxVvs4Sok4Vk7Q freebsd-5.3-xen-sparse/i386-xen/i386-xen/initcpu.c +423e7e88GWQb_EYd2ifpPwFUkLsuZg freebsd-5.3-xen-sparse/i386-xen/i386-xen/intr_machdep.c +423e7e88rk8Ehi__jv3lkHlY5AgJ8g freebsd-5.3-xen-sparse/i386-xen/i386-xen/io_apic.c +423e7e89gHdRITIMC8UcCGE8I_b1xA freebsd-5.3-xen-sparse/i386-xen/i386-xen/local_apic.c +423e7e89rRVY9tFlFqlknnIz3yeWbA freebsd-5.3-xen-sparse/i386-xen/i386-xen/locore.s +423e7e89jeY3Xt1xJzoIaMuJYTvgSA freebsd-5.3-xen-sparse/i386-xen/i386-xen/machdep.c +423e7e89heNir7lAB1UbeMMUqePgMw freebsd-5.3-xen-sparse/i386-xen/i386-xen/mp_clock.c +423e7e890R-y2KIiLL3gmhxK84t_Hw freebsd-5.3-xen-sparse/i386-xen/i386-xen/mp_machdep.c +423e7e890m0CRnOquORvF3Yd328kSQ freebsd-5.3-xen-sparse/i386-xen/i386-xen/mptable.c +423e7e89IqeULJgwXuSF9vnCAqpnbA freebsd-5.3-xen-sparse/i386-xen/i386-xen/pmap.c +423e7e89gaiMYCEiHavf3VGTvD06JA freebsd-5.3-xen-sparse/i386-xen/i386-xen/support.s +423e7e89DDt4jyU_HE0XCkRYRqs76g freebsd-5.3-xen-sparse/i386-xen/i386-xen/swtch.s +423e7e89GTxBtczOgi8_jt6vWa9X7g freebsd-5.3-xen-sparse/i386-xen/i386-xen/symbols.raw +423e7e8988cR9BIPAYAk4mLhHzfJtw freebsd-5.3-xen-sparse/i386-xen/i386-xen/sys_machdep.c +423e7e8a96Rk0vPk2939cEa26JBpeQ freebsd-5.3-xen-sparse/i386-xen/i386-xen/trap.c +423e7e8a0PDbz_hWtTKwo4ZKy-FNYw freebsd-5.3-xen-sparse/i386-xen/i386-xen/vm_machdep.c +423e7e8aMaZIkzUU5UH-VgwB6uVJDQ freebsd-5.3-xen-sparse/i386-xen/i386-xen/xen_bus.c +423e7e8ac9Zkao6o8lF_dpdwz6FoXg freebsd-5.3-xen-sparse/i386-xen/i386-xen/xen_machdep.c +423e7e8aVYTynjpZsJxUsFSlIDhpJw freebsd-5.3-xen-sparse/i386-xen/include/cpufunc.h +423e7e8avrrUxDugrwq_GJp499DkJw freebsd-5.3-xen-sparse/i386-xen/include/ctrl_if.h +423e7e8apY1r9Td-S0eZITNZZbfNTQ freebsd-5.3-xen-sparse/i386-xen/include/evtchn.h +4266317eOVvN00XdcqRfDRFIrbqgvg freebsd-5.3-xen-sparse/i386-xen/include/gnttab.h +423e7e8btv8Gojq50ggnP5A1Dkc4kA freebsd-5.3-xen-sparse/i386-xen/include/hypervisor-ifs.h +423e7e8buhTLVFLZ33-5s8-UdADSZg freebsd-5.3-xen-sparse/i386-xen/include/hypervisor.h +423e7e8bnHT1kMD-FPC7zHZR7l3VXw freebsd-5.3-xen-sparse/i386-xen/include/md_var.h +423e7e8b9iF0oV70F62vNrZt8YbiQA freebsd-5.3-xen-sparse/i386-xen/include/multicall.h +423e7e8bpUbyvkZ7a8MWY0A_oWrB0w freebsd-5.3-xen-sparse/i386-xen/include/param.h +423e7e8bdz1fj4Rlj8W7OWXgLfBT7w freebsd-5.3-xen-sparse/i386-xen/include/pcb.h +423e7e8bHhHGybRm4OXwdq9NEOvZwQ freebsd-5.3-xen-sparse/i386-xen/include/pcpu.h +423e7e8bI1dvek3ZR7BKw7dMkVAEkA freebsd-5.3-xen-sparse/i386-xen/include/pmap.h +423e7e8bVOoPguCLyNj7pil-PT7Vcw freebsd-5.3-xen-sparse/i386-xen/include/segments.h +423e7e8c9AuwksRrt0ptRKHnNVWuNQ freebsd-5.3-xen-sparse/i386-xen/include/synch_bitops.h +423e7e8csdWimnMBI2HxEDJ30L42kQ freebsd-5.3-xen-sparse/i386-xen/include/trap.h +423e7e8cdsEhPyad2ppDoSiBR4eB9g freebsd-5.3-xen-sparse/i386-xen/include/vmparam.h +423e7e8ccGI7kzIlRcEVziGZzm46wg freebsd-5.3-xen-sparse/i386-xen/include/xen-os.h +423e7e8cVSqLIOp5vH4ADvAL_MF6Qg freebsd-5.3-xen-sparse/i386-xen/include/xen_intr.h +423e7e8c1vzXK91FKaMnZz0NZpb5NA freebsd-5.3-xen-sparse/i386-xen/include/xenfunc.h +423e7e8cLPHbgUJHLf1pPqZXlBgVqQ freebsd-5.3-xen-sparse/i386-xen/include/xenpmap.h +423e7e8caalqG0UsGxkk9PshfnMFtA freebsd-5.3-xen-sparse/i386-xen/include/xenvar.h +423e7e8c8MGTB12W2GZ-mTa-_T5Xuw freebsd-5.3-xen-sparse/i386-xen/xen/blkfront/xb_blkfront.c +423e7e8dL_lQk1nbqJ5MPL5cTzXR5g freebsd-5.3-xen-sparse/i386-xen/xen/char/console.c +423e7e8d4LBg7lzjHtssnxcZwezLJQ freebsd-5.3-xen-sparse/i386-xen/xen/misc/evtchn_dev.c +423e7e8dVX2QkuzWwB2rtZDxD5Y_-w freebsd-5.3-xen-sparse/i386-xen/xen/misc/npx.c +423e7e8d_PdWXjQeRg75twh7TleJhQ freebsd-5.3-xen-sparse/i386-xen/xen/netfront/xn_netfront.c +423e7e8dlsc1oCW_ul57w0AHY5jZjQ freebsd-5.3-xen-sparse/kern/kern_fork.c +427346bfHJQldVgD-acDy_2toKMhTA freebsd-5.3-xen-sparse/kern/kern_shutdown.c +423e7e8dVDL1WLfbmQWuXMbetYk4jA freebsd-5.3-xen-sparse/mkbuildtree +423e7e8dBrOrAbydK6h49bY0VvDgPw freebsd-5.3-xen-sparse/xenfbsd_kernel_build +4187ca95_eQN62ugV1zliQcfzXrHnw install.sh +3e5a4e6589G-U42lFKs43plskXoFxQ linux-2.4.30-xen-sparse/Makefile +3e5a4e65IEPjnWPZ5w3TxS5scV8Ewg linux-2.4.30-xen-sparse/arch/xen/Makefile +3e5a4e65n-KhsEAs-A4ULiStBp-r6w linux-2.4.30-xen-sparse/arch/xen/boot/Makefile +3e5a4e65OV_j_DBtjzt5vej771AJsA linux-2.4.30-xen-sparse/arch/xen/config.in +40648526SxcA4lGIHB_k7ID8VlRSzw linux-2.4.30-xen-sparse/arch/xen/defconfig-xen0 +40c73c77QesbL7eIvG-fJGAtVwhGRg linux-2.4.30-xen-sparse/arch/xen/defconfig-xenU +3e6377f5xwPfYZkPHPrDbEq1PRN7uQ linux-2.4.30-xen-sparse/arch/xen/drivers/balloon/Makefile +4083dc16z0jvZEH4PiVDbDRreaNp6w linux-2.4.30-xen-sparse/arch/xen/drivers/blkif/Makefile +4083dc16KQus88a4U3uCV6qVCA6_8Q linux-2.4.30-xen-sparse/arch/xen/drivers/blkif/backend/Makefile +4075806dI5kfeMD5RV-DA0PYoThx_w linux-2.4.30-xen-sparse/arch/xen/drivers/blkif/frontend/Makefile +4075806d4-j7vN0Mn0bklI1cRUX1vQ linux-2.4.30-xen-sparse/arch/xen/drivers/blkif/frontend/common.h +4075806dibjCcfuXv6CINMhxWTw3jQ linux-2.4.30-xen-sparse/arch/xen/drivers/blkif/frontend/vbd.c +3e5a4e65G3e2s0ghPMgiJ-gBTUJ0uQ linux-2.4.30-xen-sparse/arch/xen/drivers/console/Makefile +3e5a4e656nfFISThfbyXQOA6HN6YHw linux-2.4.30-xen-sparse/arch/xen/drivers/dom0/Makefile +40420a6ebRqDjufoN1WSJvolEW2Wjw linux-2.4.30-xen-sparse/arch/xen/drivers/evtchn/Makefile +4083dc16-Kd5y9psK_yk161sme5j5Q linux-2.4.30-xen-sparse/arch/xen/drivers/netif/Makefile +4083dc16UmHXxS9g_UFVnkUpN-oP2Q linux-2.4.30-xen-sparse/arch/xen/drivers/netif/backend/Makefile +405853f2wg7JXZJNltspMwOZJklxgw linux-2.4.30-xen-sparse/arch/xen/drivers/netif/frontend/Makefile +3e5a4e65lWzkiPXsZdzPt2RNnJGG1g linux-2.4.30-xen-sparse/arch/xen/kernel/Makefile +3e5a4e65_hqfuxtGG8IUy6wRM86Ecg linux-2.4.30-xen-sparse/arch/xen/kernel/entry.S +3e5a4e65Hy_1iUvMTPsNqGNXd9uFpg linux-2.4.30-xen-sparse/arch/xen/kernel/head.S +3e5a4e65RMGcuA-HCn3-wNx3fFQwdg linux-2.4.30-xen-sparse/arch/xen/kernel/i386_ksyms.c +3e5a4e653U6cELGv528IxOLHvCq8iA linux-2.4.30-xen-sparse/arch/xen/kernel/irq.c +3e5a4e65muT6SU3ck47IP87Q7Ti5hA linux-2.4.30-xen-sparse/arch/xen/kernel/ldt.c +4051db95N9N99FjsRwi49YKUNHWI8A linux-2.4.30-xen-sparse/arch/xen/kernel/pci-pc.c +3e5a4e65IGt3WwQDNiL4h-gYWgNTWQ linux-2.4.30-xen-sparse/arch/xen/kernel/process.c +3e5a4e66tR-qJMLj3MppcKqmvuI2XQ linux-2.4.30-xen-sparse/arch/xen/kernel/setup.c +3e5a4e66fWSTagLGU2P8BGFGRjhDiw linux-2.4.30-xen-sparse/arch/xen/kernel/signal.c +3e5a4e66N__lUXNwzQ-eADRzK9LXuQ linux-2.4.30-xen-sparse/arch/xen/kernel/time.c +3e5a4e66aHCbQ_F5QZ8VeyikLmuRZQ linux-2.4.30-xen-sparse/arch/xen/kernel/traps.c +3e5a4e66-9_NczrVMbuQkoSLyXckIw linux-2.4.30-xen-sparse/arch/xen/lib/Makefile +3e5a4e6637ZDk0BvFEC-aFQs599-ng linux-2.4.30-xen-sparse/arch/xen/lib/delay.c +3e5a4e66croVgpcJyJuF2ycQw0HuJw linux-2.4.30-xen-sparse/arch/xen/mm/Makefile +3e5a4e66l8Q5Tv-6B3lQIRmaVbFPzg linux-2.4.30-xen-sparse/arch/xen/mm/fault.c +3e5a4e661gLzzff25pJooKIIWe7IWg linux-2.4.30-xen-sparse/arch/xen/mm/init.c +3f0bed43UUdQichXAiVNrjV-y2Kzcg linux-2.4.30-xen-sparse/arch/xen/mm/ioremap.c +3e5a4e66qRlSTcjafidMB6ulECADvg linux-2.4.30-xen-sparse/arch/xen/vmlinux.lds +3e5a4e66mrtlmV75L1tjKDg8RaM5gA linux-2.4.30-xen-sparse/drivers/block/ll_rw_blk.c +40d70c24-Dy2HUMrwSZagfXvAPnI4w linux-2.4.30-xen-sparse/drivers/char/Makefile +3f108aeaLcGDgQdFAANLTUEid0a05w linux-2.4.30-xen-sparse/drivers/char/mem.c +3e5a4e66rw65CxyolW9PKz4GG42RcA linux-2.4.30-xen-sparse/drivers/char/tty_io.c +40c9c0c1pPwYE3-4i-oI3ubUu7UgvQ linux-2.4.30-xen-sparse/drivers/scsi/aic7xxx/Makefile +3e5a4e66wbeCpsJgVf_U8Jde-CNcsA linux-2.4.30-xen-sparse/include/asm-xen/bugs.h +3e5a4e66HdSkvIV6SJ1evG_xmTmXHA linux-2.4.30-xen-sparse/include/asm-xen/desc.h +3e5a4e66SYp_UpAVcF8Lc1wa3Qtgzw linux-2.4.30-xen-sparse/include/asm-xen/fixmap.h +406aeeaaQvl4RNtmd9hDEugBURbFpQ linux-2.4.30-xen-sparse/include/asm-xen/highmem.h +3e5a4e67YtcyDLQsShhCfQwPSELfvA linux-2.4.30-xen-sparse/include/asm-xen/hw_irq.h +4060044fVx7-tokvNLKBf_6qBB4lqQ linux-2.4.30-xen-sparse/include/asm-xen/io.h +3e5a4e673p7PEOyHFm3nHkYX6HQYBg linux-2.4.30-xen-sparse/include/asm-xen/irq.h +40d70c240tW7TWArl1VUgIFH2nVO1A linux-2.4.30-xen-sparse/include/asm-xen/keyboard.h +3e5a4e678ddsQOpbSiRdy1GRcDc9WA linux-2.4.30-xen-sparse/include/asm-xen/mmu_context.h +40d06e5b2YWInUX1Xv9amVANwd_2Xg linux-2.4.30-xen-sparse/include/asm-xen/module.h +3e5a4e67mnQfh-R8KcQCaVo2Oho6yg linux-2.4.30-xen-sparse/include/asm-xen/page.h +409ba2e7ZfV5hqTvIzxLtpClnxtIzg linux-2.4.30-xen-sparse/include/asm-xen/pci.h +3e5a4e67uTYU5oEnIDjxuaez8njjqg linux-2.4.30-xen-sparse/include/asm-xen/pgalloc.h +3e5a4e67X7JyupgdYkgDX19Huj2sAw linux-2.4.30-xen-sparse/include/asm-xen/pgtable-2level.h +3e5a4e67gr4NLGtQ5CvSLimMYZlkOA linux-2.4.30-xen-sparse/include/asm-xen/pgtable.h +3e5a4e676uK4xErTBDH6XJREn9LSyg linux-2.4.30-xen-sparse/include/asm-xen/processor.h +41224663YBCUMX1kVo_HRUtgaHTi7w linux-2.4.30-xen-sparse/include/asm-xen/queues.h +3e5a4e68uJz-xI0IBVMD7xRLQKJDFg linux-2.4.30-xen-sparse/include/asm-xen/segment.h +3e5a4e68Nfdh6QcOKUTGCaYkf2LmYA linux-2.4.30-xen-sparse/include/asm-xen/smp.h +3e5a4e68mTr0zcp9SXDbnd-XLrrfxw linux-2.4.30-xen-sparse/include/asm-xen/system.h +3f1056a9L_kqHcFheV00KbKBzv9j5w linux-2.4.30-xen-sparse/include/asm-xen/vga.h +40659defgWA92arexpMGn8X3QMDj3w linux-2.4.30-xen-sparse/include/asm-xen/xor.h +3f056927gMHl7mWB89rb73JahbhQIA linux-2.4.30-xen-sparse/include/linux/blk.h +42305f54mFScQCttpj57EIm60BnxIg linux-2.4.30-xen-sparse/include/linux/highmem.h +419e0488SBzS3mdUhwgsES5a5e3abA linux-2.4.30-xen-sparse/include/linux/irq.h +4124f66fPHG6yvB_vXmesjvzrJ3yMg linux-2.4.30-xen-sparse/include/linux/mm.h +401c0590D_kwJDU59X8NyvqSv_Cl2A linux-2.4.30-xen-sparse/include/linux/sched.h +40a248afgI0_JKthdYAe8beVfXSTpQ linux-2.4.30-xen-sparse/include/linux/skbuff.h +401c0592pLrp_aCbQRo9GXiYQQaVVA linux-2.4.30-xen-sparse/include/linux/timer.h +3f9d4b44247udoqWEgFkaHiWv6Uvyg linux-2.4.30-xen-sparse/kernel/time.c +401c059bjLBFYHRD4Py2uM3eA1D4zQ linux-2.4.30-xen-sparse/kernel/timer.c +3e6e7c1efbQe93xCvOpOVCnXTMmQ5w linux-2.4.30-xen-sparse/mkbuildtree +406aeeafkrnCuIVWLFv3kfn4uAD5Eg linux-2.4.30-xen-sparse/mm/highmem.c +3e5a4e68GxCIaFH4sy01v1wjapetaA linux-2.4.30-xen-sparse/mm/memory.c +3f108af5VxPkLv13tXpXgoRKALQtXQ linux-2.4.30-xen-sparse/mm/mprotect.c +3e5a4e681xMPdF9xCMwpyfuYMySU5g linux-2.4.30-xen-sparse/mm/mremap.c +409ba2e7akOFqQUg6Qyg2s28xcXiMg linux-2.4.30-xen-sparse/mm/page_alloc.c +41505c57WAd5l1rlfCLNSCpx9J13vA linux-2.4.30-xen-sparse/net/core/skbuff.c +40f562372u3A7_kfbYYixPHJJxYUxA linux-2.6.11-xen-sparse/arch/xen/Kconfig +40f56237utH41NPukqHksuNf29IC9A linux-2.6.11-xen-sparse/arch/xen/Kconfig.drivers +40f56237penAAlWVBVDpeQZNFIg8CA linux-2.6.11-xen-sparse/arch/xen/Makefile +40f56237JTc60m1FRlUxkUaGSQKrNw linux-2.6.11-xen-sparse/arch/xen/boot/Makefile +40f56237hRxbacU_3PdoAl6DjZ3Jnw linux-2.6.11-xen-sparse/arch/xen/configs/xen0_defconfig_x86_32 +424f001dsaMEQ1wWQnPmu0ejo6pgPA linux-2.6.11-xen-sparse/arch/xen/configs/xen0_defconfig_x86_64 +40f56237wubfjJKlfIzZlI3ZM2VgGA linux-2.6.11-xen-sparse/arch/xen/configs/xenU_defconfig_x86_32 +424f001dsBzCezYZD8vAn-h5D9ZRtQ linux-2.6.11-xen-sparse/arch/xen/configs/xenU_defconfig_x86_64 +40f56237Mta0yHNaMS_qtM2rge0qYA linux-2.6.11-xen-sparse/arch/xen/i386/Kconfig +40f56238u2CJdXNpjsZgHBxeVyY-2g linux-2.6.11-xen-sparse/arch/xen/i386/Makefile +40f56238eczveJ86k_4hNxCLRQIF-g linux-2.6.11-xen-sparse/arch/xen/i386/kernel/Makefile +42778a68_kGyflDnRbar9WAmb4CKYw linux-2.6.11-xen-sparse/arch/xen/i386/kernel/acpi/Makefile +42778a68_2OruSz7lwFPBiGhl3y-FA linux-2.6.11-xen-sparse/arch/xen/i386/kernel/acpi/boot.c +42778a69h76S5SCnDonnxnIt9nDGFQ linux-2.6.11-xen-sparse/arch/xen/i386/kernel/apic.c +40f56238rXVTJQKbBuXXLH52qEArcg linux-2.6.11-xen-sparse/arch/xen/i386/kernel/cpu/Makefile +40f562385s4lr6Zg92gExe7UQ4A76Q linux-2.6.11-xen-sparse/arch/xen/i386/kernel/cpu/common.c +41ab440bnpxZdWShZrGgM9pPaz5rmA linux-2.6.11-xen-sparse/arch/xen/i386/kernel/cpu/mtrr/Makefile +41ab440bBKWz-aEOEojU4PAMXe3Ppg linux-2.6.11-xen-sparse/arch/xen/i386/kernel/cpu/mtrr/main.c +40f56238XDtHSijkAFlbv1PT8Bhw_Q linux-2.6.11-xen-sparse/arch/xen/i386/kernel/entry.S +40f56238bnvciAuyzAiMkdzGErYt1A linux-2.6.11-xen-sparse/arch/xen/i386/kernel/head.S +40f58a0d31M2EkuPbG94ns_nOi0PVA linux-2.6.11-xen-sparse/arch/xen/i386/kernel/i386_ksyms.c +42778a69_lodTzZVlojib1-pZF030g linux-2.6.11-xen-sparse/arch/xen/i386/kernel/io_apic.c +40faa751_zbZlAmLyQgCXdYekVFdWA linux-2.6.11-xen-sparse/arch/xen/i386/kernel/ioport.c +41d00d82zN8IfLBRxc7G_i7lbwT3cQ linux-2.6.11-xen-sparse/arch/xen/i386/kernel/irq.c +40f56238ue3YRsK52HG7iccNzP1AwQ linux-2.6.11-xen-sparse/arch/xen/i386/kernel/ldt.c +41d54a76YMCA67S8J-TBT3J62Wx6yA linux-2.6.11-xen-sparse/arch/xen/i386/kernel/microcode.c +42778a69obEqvR75wSKCWPk9QnHo-w linux-2.6.11-xen-sparse/arch/xen/i386/kernel/mpparse.c +4107adf1cNtsuOxOB4T6paAoY2R2PA linux-2.6.11-xen-sparse/arch/xen/i386/kernel/pci-dma.c +40f56238a8iOVDEoostsbun_sy2i4g linux-2.6.11-xen-sparse/arch/xen/i386/kernel/process.c +40f56238YQIJoYG2ehDGEcdTgLmGbg linux-2.6.11-xen-sparse/arch/xen/i386/kernel/setup.c +40f56238nWMQg7CKbyTy0KJNvCzbtg linux-2.6.11-xen-sparse/arch/xen/i386/kernel/signal.c +41811cac4lkCB-fHir6CcxuEJ2pGsQ linux-2.6.11-xen-sparse/arch/xen/i386/kernel/smp.c +41811ca9mbGpqBrZVrUGEiv8CTV3ng linux-2.6.11-xen-sparse/arch/xen/i386/kernel/smpboot.c +40f56238qVGkpO_ycnQA8k03kQzAgA linux-2.6.11-xen-sparse/arch/xen/i386/kernel/time.c +40f56238NzTgeO63RGoxHrW5NQeO3Q linux-2.6.11-xen-sparse/arch/xen/i386/kernel/timers/Makefile +40f56238BMqG5PuSHufpjbvp_helBw linux-2.6.11-xen-sparse/arch/xen/i386/kernel/timers/timer_tsc.c +40f562389xNa78YBZciUibQjyRU_Lg linux-2.6.11-xen-sparse/arch/xen/i386/kernel/traps.c +40f56238JypKAUG01ZojFwH7qnZ5uA linux-2.6.11-xen-sparse/arch/xen/i386/kernel/vsyscall.S +427245dboQBkhq841wIPqlRD-AG9Jw linux-2.6.11-xen-sparse/arch/xen/i386/mach-default/Makefile +40f56238a3w6-byOzexIlMgni76Lcg linux-2.6.11-xen-sparse/arch/xen/i386/mm/Makefile +40f56238ILx8xlbywNbzTdv5Zr4xXQ linux-2.6.11-xen-sparse/arch/xen/i386/mm/fault.c +4118cc35CbY8rfGVspF5O-7EkXBEAA linux-2.6.11-xen-sparse/arch/xen/i386/mm/highmem.c +40f562383SKvDStdtrvzr5fyCbW4rw linux-2.6.11-xen-sparse/arch/xen/i386/mm/hypervisor.c +40f56239xcNylAxuGsQHwi1AyMLV8w linux-2.6.11-xen-sparse/arch/xen/i386/mm/init.c +41062ab7CjxC1UBaFhOMWWdhHkIUyg linux-2.6.11-xen-sparse/arch/xen/i386/mm/ioremap.c +40f5623906UYHv1rsVUeRc0tFT0dWw linux-2.6.11-xen-sparse/arch/xen/i386/mm/pgtable.c +4107adf12ndy94MidCaivDibJ3pPAg linux-2.6.11-xen-sparse/arch/xen/i386/pci/Makefile +4107adf1s5u6249DNPUViX1YNagbUQ linux-2.6.11-xen-sparse/arch/xen/i386/pci/irq.c +40f56239zOksGg_H4XD4ye6iZNtoZA linux-2.6.11-xen-sparse/arch/xen/kernel/Makefile +40f56239bvOjuuuViZ0XMlNiREFC0A linux-2.6.11-xen-sparse/arch/xen/kernel/ctrl_if.c +41ab6fa06JdF7jxUsuDcjN3UhuIAxg linux-2.6.11-xen-sparse/arch/xen/kernel/devmem.c +40f56238xFQe9T7M_U_FItM-bZIpLw linux-2.6.11-xen-sparse/arch/xen/kernel/evtchn.c +4110f478aeQWllIN7J4kouAHiAqrPw linux-2.6.11-xen-sparse/arch/xen/kernel/fixup.c +412dfae9eA3_6e6bCGUtg1mj8b56fQ linux-2.6.11-xen-sparse/arch/xen/kernel/gnttab.c +40f562392LBhwmOxVPsYdkYXMxI_ZQ linux-2.6.11-xen-sparse/arch/xen/kernel/reboot.c +414c113396tK1HTVeUalm3u-1DF16g linux-2.6.11-xen-sparse/arch/xen/kernel/skbuff.c +418f90e4lGdeJK9rmbOB1kN-IKSjsQ linux-2.6.11-xen-sparse/arch/xen/kernel/smp.c +3f68905c5eiA-lBMQSvXLMWS1ikDEA linux-2.6.11-xen-sparse/arch/xen/kernel/xen_proc.c +424efaa6xahU2q85_dT-SjUJEaivfg linux-2.6.11-xen-sparse/arch/xen/x86_64/Kconfig +424efaa6kKleWe45IrqsG8gkejgEQA linux-2.6.11-xen-sparse/arch/xen/x86_64/Makefile +42ba7fc4lb16rk9fVJeOBTPpy7bHFQ linux-2.6.11-xen-sparse/arch/xen/x86_64/ia32/Makefile +42ba7fc4URo9Q9gyOqemf4cCcAfYCg linux-2.6.11-xen-sparse/arch/xen/x86_64/ia32/ia32entry.S +42ba7fc4qPAX8G1HhVUPmps8xw_Odw linux-2.6.11-xen-sparse/arch/xen/x86_64/ia32/syscall32.c +42ba7fc4xqwiER7U_2NvNwqxhRMo1g linux-2.6.11-xen-sparse/arch/xen/x86_64/ia32/vsyscall-int80.S +424efaa6HSyuVodl6SxFGj39vlp6MA linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/Makefile +428f0973_moB26LYt56xXKYCTqEdXw linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/acpi/Makefile +428f0973NBdgINmWOEJjoIDL73SDbQ linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/apic.c +424efaa7bVAw3Z_q0SdFivfNVavyIg linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/asm-offsets.c +424efaa7ddTVabh547Opf0u9vKmUXw linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/e820.c +428868bbQust_FkSdkerMqYBWfrVKg linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/early_printk.c +424efaa7B_BWrAkLPJNoKk4EQY2a7w linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/entry.S +424efaa7vhgi7th5QVICjfuHmEWOkw linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/head.S +424efaa7tiMEZSAYepwyjaNWxyXF7Q linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/head64.c +424efaa6M6AGf53TJa2y9cl6coos0g linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/init_task.c +428f0973EY3nNGYatQn7IO61RHO0oQ linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/io_apic.c +424efaa6wHXXaloZygAv6ywDb7u7nQ linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/ioport.c +424efaa6gOkc9_uHCLgvY_DXPqh_sg linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/irq.c +424efaa6ibN3xXEeXoxURmKfJF_CUA linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/ldt.c +428f09737NE-9XTvvA58TXLP0j54Uw linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/mpparse.c +424efaa6aX4JkXAzBf4nqxRmLUfhqQ linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/pci-dma.c +424efaa7e8nVw04q-pK8XRFaHPVx_A linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/pci-nommu.c +424efaa7CxY9cbhqapUfqVYnD7T9LQ linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/process.c +424efaa7I-DPzj1fkZeYPJS7rA4FAw linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/setup.c +424efaa7DIVTR1U4waPGHucha9Xilg linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/setup64.c +424efaa6L1lrzwCIadTNxogSvljFwg linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/signal.c +424efaa61XzweJyW3v5Lb9egpe3rtw linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/smp.c +424efaa778MkpdkAIq0An1FjQENN_Q linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/smpboot.c +424efaa7szEu90xkjpXk5TufZxxa4g linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/traps.c +424efaa6sJsuHdGIGxm0r-ugsss3OQ linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/vsyscall.c +424efaa6xbX9LkKyaXvgbL9s_39Trw linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/x8664_ksyms.c +42ba7fc4mg4zVSdJUO5Wc9PM-KUbqg linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/xen_entry.S +424efaa670zlQTtnOYK_aNgqhmSx-Q linux-2.6.11-xen-sparse/arch/xen/x86_64/mm/Makefile +424efaa6HUC68-hBHgiWOMDfKZogIA linux-2.6.11-xen-sparse/arch/xen/x86_64/mm/fault.c +424efaa65ELRJ3JfgQQKLzW6y0ECYQ linux-2.6.11-xen-sparse/arch/xen/x86_64/mm/init.c +424efaa60dTbHfv65JBLVhNLcNPcRA linux-2.6.11-xen-sparse/arch/xen/x86_64/mm/ioremap.c +424efaa6uMX8YJASAVJT8ral74dz9Q linux-2.6.11-xen-sparse/arch/xen/x86_64/mm/pageattr.c +424efaa629XgfZi3vvTAuQmhCqmvIA linux-2.6.11-xen-sparse/arch/xen/x86_64/pci/Makefile +424efaa64SRL9FZhtQovFJAVh9sZlQ linux-2.6.11-xen-sparse/arch/xen/x86_64/pci/Makefile-BUS +41261688yS8eAyy-7kzG4KBs0xbYCA linux-2.6.11-xen-sparse/drivers/Makefile +42778a69QJ93x9p93ALrTV5QELHF-Q linux-2.6.11-xen-sparse/drivers/acpi/tables.c +4108f5c1WfTIrs0HZFeV39sttekCTw linux-2.6.11-xen-sparse/drivers/char/mem.c +4111308bZAIzwf_Kzu6x1TZYZ3E0_Q linux-2.6.11-xen-sparse/drivers/char/tty_io.c +40f56239Dp_vMTgz8TEbvo1hjHGc3w linux-2.6.11-xen-sparse/drivers/xen/Makefile +41768fbcncpBQf8s2l2-CwoSNIZ9uA linux-2.6.11-xen-sparse/drivers/xen/balloon/Makefile +3e6377f8i5e9eGz7Pw6fQuhuTQ7DQg linux-2.6.11-xen-sparse/drivers/xen/balloon/balloon.c +410d0893otFGghmv4dUXDUBBdY5aIA linux-2.6.11-xen-sparse/drivers/xen/blkback/Makefile +4087cf0d1XgMkooTZAiJS6NrcpLQNQ linux-2.6.11-xen-sparse/drivers/xen/blkback/blkback.c +4087cf0dZadZ8r6CEt4fNN350Yle3A linux-2.6.11-xen-sparse/drivers/xen/blkback/common.h +4087cf0dxlh29iw0w-9rxOCEGCjPcw linux-2.6.11-xen-sparse/drivers/xen/blkback/control.c +4087cf0dbuoH20fMjNZjcgrRK-1msQ linux-2.6.11-xen-sparse/drivers/xen/blkback/interface.c +4087cf0dk97tacDzxfByWV7JifUYqA linux-2.6.11-xen-sparse/drivers/xen/blkback/vbd.c +40f56239Sfle6wGv5FS0wjS_HI150A linux-2.6.11-xen-sparse/drivers/xen/blkfront/Kconfig +40f562395atl9x4suKGhPkjqLOXESg linux-2.6.11-xen-sparse/drivers/xen/blkfront/Makefile +40f56239-JNIaTzlviVJohVdoYOUpw linux-2.6.11-xen-sparse/drivers/xen/blkfront/blkfront.c +40f56239y9naBTXe40Pi2J_z3p-d1g linux-2.6.11-xen-sparse/drivers/xen/blkfront/block.h +40f56239BVfPsXBiWQitXgDRtOsiqg linux-2.6.11-xen-sparse/drivers/xen/blkfront/vbd.c +41a226e0vjAcDXHOnXE5ummcdUD2mg linux-2.6.11-xen-sparse/drivers/xen/blktap/Makefile +41a226e0VeZA1N8tbU6nvJ3OxUcJmw linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap.c +41a226e1k4J5VMLnrYXDWRqElS49YQ linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap.h +41a226e1-A_Hy7utS8vJKaXnH_tzfA linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap_controlmsg.c +41a226e19NoUUTOvs7jumDMRYDIO4Q linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap_datapath.c +41a226e1MNSyWWK5dEVgvSQ5OW0fDA linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap_userdev.c +40f56239fsLjvtD8YBRAWphps4FDjg linux-2.6.11-xen-sparse/drivers/xen/console/Makefile +3e5a4e651TH-SXHoufurnWjgl5bfOA linux-2.6.11-xen-sparse/drivers/xen/console/console.c +40f56239KYxO0YabhPzCTeUuln-lnA linux-2.6.11-xen-sparse/drivers/xen/evtchn/Makefile +40f56239DoibTX6R-ZYd3QTXAB8_TA linux-2.6.11-xen-sparse/drivers/xen/evtchn/evtchn.c +410a9817HEVJvred5Oy_uKH3HFJC5Q linux-2.6.11-xen-sparse/drivers/xen/netback/Makefile +4097ba831lpGeLlPg-bfV8XarVVuoQ linux-2.6.11-xen-sparse/drivers/xen/netback/common.h +4097ba83wvv8yi5P5xugCUBAdb6O-A linux-2.6.11-xen-sparse/drivers/xen/netback/control.c +4097ba83byY5bTSugJGZ1exTxIcMKw linux-2.6.11-xen-sparse/drivers/xen/netback/interface.c +4288ce19CHtBLg600EZ8TNuSPLs5Ng linux-2.6.11-xen-sparse/drivers/xen/netback/loopback.c +4087cf0dGmSbFhFZyIZBJzvqxY-qBw linux-2.6.11-xen-sparse/drivers/xen/netback/netback.c +40f56239lrg_Ob0BJ8WBFS1zeg2CYw linux-2.6.11-xen-sparse/drivers/xen/netfront/Kconfig +40f56239Wd4k_ycG_mFsSO1r5xKdtQ linux-2.6.11-xen-sparse/drivers/xen/netfront/Makefile +405853f6nbeazrNyEWNHBuoSg2PiPA linux-2.6.11-xen-sparse/drivers/xen/netfront/netfront.c +4108f5c1ppFXVpQzCOAZ6xXYubsjKA linux-2.6.11-xen-sparse/drivers/xen/privcmd/Makefile +3e5a4e65IUfzzMu2kZFlGEB8-rpTaA linux-2.6.11-xen-sparse/drivers/xen/privcmd/privcmd.c +41ee5e8bYDQkjRVKnFn5uFyy0KreCw linux-2.6.11-xen-sparse/drivers/xen/usbback/common.h +41ee5e8bt7xeBUJqG5XJS-ofukdsgA linux-2.6.11-xen-sparse/drivers/xen/usbback/control.c +41ee5e8bSs3BGC7yegM_ek2Tn0Ahvw linux-2.6.11-xen-sparse/drivers/xen/usbback/interface.c +41ee5e8bglvqKvZSY5uJ5JGQejEwyQ linux-2.6.11-xen-sparse/drivers/xen/usbback/usbback.c +41ee5e8ckZ9xVNvu9NHIZDK7JqApmQ linux-2.6.11-xen-sparse/drivers/xen/usbfront/usbfront.c +41ee5e8ck9scpGirfqEZRARbGDyTXA linux-2.6.11-xen-sparse/drivers/xen/usbfront/xhci.h +42c16ff4NMHjAt9hJHldXC-4_A6HRw linux-2.6.11-xen-sparse/drivers/xen/xenbus/Makefile +42c16ff4IWzDjvg0o08Nt-JrmuoJsA linux-2.6.11-xen-sparse/drivers/xen/xenbus/xenbus_comms.c +42c16ff4DukLxK4_pUAN0Gv0jLNaZQ linux-2.6.11-xen-sparse/drivers/xen/xenbus/xenbus_comms.h +42c16ff4fR8SNUirS3q19HNzTVoDXw linux-2.6.11-xen-sparse/drivers/xen/xenbus/xenbus_probe.c +42c16ff4goC8GfJvEqNFgE1Y8fNs5g linux-2.6.11-xen-sparse/drivers/xen/xenbus/xenbus_xs.c +412f47e4RKD-R5IS5gEXvcT8L4v8gA linux-2.6.11-xen-sparse/include/asm-generic/pgtable.h +42400318xlBIV46qyxLTaDepPLNyhg linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/agp.h +40f56239YAjS52QG2FIAQpHDZAdGHg linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/desc.h +4107adf1E5O4ztGHNGMzCCNhcvqNow linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/dma-mapping.h +40f5623akIoBsQ3KxSB2kufkbgONXQ linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/fixmap.h +41979925z1MsKU1SfuuheM1IFDQ_bA linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/floppy.h +4118b6a418gnL6AZsTdglC92YGqYTg linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/highmem.h +42539fb5A9hsS3NFQ-2VY4y1TONZZQ linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/hypercall.h +40f5623aJVXQwpJMOLE99XgvGsfQ8Q linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/io.h +40f5623aKXkBBxgpLx2NcvkncQ1Yyw linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/mach-xen/irq_vectors.h +40f5623aDMCsWOFO0jktZ4e8sjwvEg linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/mach-xen/setup_arch_post.h +40f5623arsFXkGdPvIqvFi3yFXGR0Q linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/mach-xen/setup_arch_pre.h +41811f07Iri9hrvs97t-baxmhOwWDQ linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/mach-xen/smpboot_hooks.h +426fa4d7RzvcFMqff_M76HrvRQZHSg linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/mmu.h +4120f807GCO0uqsLqdZj9csxR1Wthw linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/mmu_context.h +40f5623adgjZq9nAgCt0IXdWl7udSA linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/page.h +40f5623a54NuG-7qHihGYmw4wWQnMA linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/param.h +41137cc1kkvg0cg7uxddcEfjL7L67w linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/pci.h +40f5623atCokYc2uCysSJ8jFO8TEsw linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/pgalloc.h +412e01beTwiaC8sYY4XJP8PxLST5CA linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/pgtable-2level-defs.h +40f5623aEToIXouJgO-ao5d5pcEt1w linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/pgtable-2level.h +40f5623aCCXRPlGpNthVXstGz9ZV3A linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/pgtable.h +40f5623aPCkQQfPtJSooGdhcatrvnQ linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/processor.h +412ea0afQL2CAI-f522TbLjLPMibPQ linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/ptrace.h +40f5623bzLvxr7WoJIxVf2OH4rCBJg linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/segment.h +40f5623bG_LzgG6-qwk292nTc5Wabw linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/setup.h +4198c32a8NzmcKVOzKaEJfaQxxiA0A linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/spinlock.h +40f5623bgzm_9vwxpzJswlAxg298Gg linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/synch_bitops.h +40f5623bVdKP7Dt7qm8twu3NcnGNbA linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/system.h +40f5623bc8LKPRO09wY5dGDnY_YCpw linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/tlbflush.h +41062ab7uFxnCq-KtPeAm-aV8CicgA linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/vga.h +424f001delsctIT-_5gdbHsN9VfaQA linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/arch_hooks.h +424efa21QfpO4QqQf9ADB4U_2zo8dQ linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/bootsetup.h +424efa21riixePBPesLRsVnhFxfEfQ linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/desc.h +424efa21iAXuoKIT3-zDni6aryFlPQ linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/dma-mapping.h +424efa21QCdU7W3An0BM0bboJZ6f4Q linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/fixmap.h +424efa21S7Ruo0JzTFH1qwezpdtCbw linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/floppy.h +424f001ds3cL9WAgSH5Nja1BAkZfDg linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/hypercall.h +424efa20tMbuEQuxvPjow-wkBx83rA linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/io.h +424efa20meDrUt6I2XWbpuf72e4gEw linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/irq.h +424f001d3cpZoX9SZD_zjTapOs-ZIQ linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/mach-xen/io_ports.h +424f001eirTAXdX_1gCugGtzSGJUXw linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/mach-xen/irq_vectors.h +424f001eTD7ATy8MC71Lm2rOHHyUCA linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/mach-xen/mach_time.h +424f001ew4jIwfKeZUNa_U54UAaJcw linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/mach-xen/mach_timer.h +424f001ePIPWhBJGeTgj-KmiHOYvqw linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/mach-xen/setup_arch_post.h +424f001e0S9hTGOoEN8pgheQJ76yqQ linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/mach-xen/setup_arch_pre.h +424f001eQPBrY1621DbCPKn9wK36ZQ linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/mach-xen/smpboot_hooks.h +424efa21FvJNdHFfm2w2TOWohNsqDQ linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/mmu_context.h +424efa214neirHds4zbtwaefvG5PYA linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/page.h +424efa21-7jaHj-W-T4E9oM3kqFA7Q linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/param.h +424efa20I76WtOlPh71MaXtai3-qZA linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/pci.h +424efa20Fs7EHhAV6Hz_UtifwEfczg linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/pda.h +424efa20CGx-5HD8ahpdHxPW2KlrtA linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/pgalloc.h +424efa21YaMjX7hz7eCkVNcNWRK42A linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/pgtable.h +424efa21wPKwwFR1fcqrPD0_o3GKWA linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/processor.h +424efa20fTFqmaE0stH6lfB_4yN_lA linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/ptrace.h +424efa21fY4IvK0luYgDJHKV-MD3eQ linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/segment.h +424efa21KcupuJlHgmPiTk_T214FrA linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/smp.h +424efa210ZRt2U_8WmtyI7g74Nz-4Q linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/system.h +424f001eBp9fMbZ0Mo2kRJQ84gMgRw linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/timer.h +424efa21Xk2acvaHYnpyTCLE6nU6hw linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/tlbflush.h +424efa21Ey6Q4L4AsXxcEwH3vMDeiw linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/vga.h +424efa214gNhOfFimFJHq4in24Yp1g linux-2.6.11-xen-sparse/include/asm-xen/asm-x86_64/xor.h +41af4017PDMuSmMWtSRU5UC9Vylw5g linux-2.6.11-xen-sparse/include/asm-xen/balloon.h +40f5623bYNP7tHE2zX6YQxp9Zq2utQ linux-2.6.11-xen-sparse/include/asm-xen/ctrl_if.h +40f5623b3Eqs8pAc5WpPX8_jTzV2qw linux-2.6.11-xen-sparse/include/asm-xen/evtchn.h +419b4e9367PjTEvdjwavWN12BeBBXg linux-2.6.11-xen-sparse/include/asm-xen/foreign_page.h +412dfaeazclyNDM0cpnp60Yo4xulpQ linux-2.6.11-xen-sparse/include/asm-xen/gnttab.h +40f5623aGPlsm0u1LTO-NVZ6AGzNRQ linux-2.6.11-xen-sparse/include/asm-xen/hypervisor.h +3f108af1ylCIm82H052FVTfXACBHrw linux-2.6.11-xen-sparse/include/asm-xen/linux-public/privcmd.h +3fa8e3f0kBLeE4To2vpdi3cpJbIkbQ linux-2.6.11-xen-sparse/include/asm-xen/linux-public/suspend.h +4122466356eIBnC9ot44WSVVIFyhQA linux-2.6.11-xen-sparse/include/asm-xen/queues.h +42a885cawNQ18_b7i5-G7ekMsZ48hw linux-2.6.11-xen-sparse/include/asm-xen/synch_bitops.h +3f689063BoW-HWV3auUJ-OqXfcGArw linux-2.6.11-xen-sparse/include/asm-xen/xen_proc.h +42c16ff4t7djt61KEsejdrL8gNfQSA linux-2.6.11-xen-sparse/include/asm-xen/xenbus.h +419b4e93z2S0gR17XTy8wg09JEwAhg linux-2.6.11-xen-sparse/include/linux/gfp.h +42305f545Vc5SLCUewZ2-n-P9JJhEQ linux-2.6.11-xen-sparse/include/linux/highmem.h +419dfc609zbti8rqL60tL2dHXQ_rvQ linux-2.6.11-xen-sparse/include/linux/irq.h +428f8747dtEZ4CfC5tb6Loe9h0Ivpg linux-2.6.11-xen-sparse/include/linux/skbuff.h +419dfc6awx7w88wk6cG9P3mPidX6LQ linux-2.6.11-xen-sparse/kernel/irq/manage.c +40f56a0ddHCSs3501MY4hRf22tctOw linux-2.6.11-xen-sparse/mkbuildtree +42305f54Q6xJ1bXcQJlCQq1m-e2C8g linux-2.6.11-xen-sparse/mm/highmem.c +412f46c0LJuKAgSPGoC0Z1DEkLfuLA linux-2.6.11-xen-sparse/mm/memory.c +426fa4d7ooLYmFcFjJMF_ut4GFVh2Q linux-2.6.11-xen-sparse/mm/mmap.c +410a94a4KT6I6X0LVc7djB39tRDp4g linux-2.6.11-xen-sparse/mm/page_alloc.c +428f8747Gp_X2UtgwcL0-YeYkCXxvQ linux-2.6.11-xen-sparse/net/core/dev.c +428f8747vBdkOrip6rhWK_eEvVc8dA linux-2.6.11-xen-sparse/net/core/skbuff.c +413cb1e4zst25MDYjg63Y-NGC5_pLg netbsd-2.0-xen-sparse/Makefile +413cb1e5c_Mkxf_X0zimEhTKI_l4DA netbsd-2.0-xen-sparse/mkbuildtree +413cb1e5kY_Zil7-b0kI6hvCIxBEYg netbsd-2.0-xen-sparse/nbconfig-xen +413cb1e5-58q5doPifcE1Q8ZAgm-JQ netbsd-2.0-xen-sparse/nbmake-xen +413cb3b3Cmp02Gj87f3wwu2W9y0gBg netbsd-2.0-xen-sparse/sys/arch/xen/conf/XEN +413cb3b3aUP9GmUWqHWQ2SRp1qXnqQ netbsd-2.0-xen-sparse/sys/arch/xen/conf/files.xen +413cb3b3pZuLKElEpQwX1C-3hLW4qA netbsd-2.0-xen-sparse/sys/arch/xen/i386/autoconf.c +413cb3b34ui1cCGaSqIeLiBgMp-PDw netbsd-2.0-xen-sparse/sys/arch/xen/i386/gdt.c +413cb3b3i11i2GVGn0YGlRbM3ifbPQ netbsd-2.0-xen-sparse/sys/arch/xen/i386/hypervisor_machdep.c +413cb3b3FgMboWw-Pm3XdbBFSlZl_g netbsd-2.0-xen-sparse/sys/arch/xen/i386/locore.S +413cb3b4ABCSfkHRmbsWfnZNG28nBA netbsd-2.0-xen-sparse/sys/arch/xen/i386/machdep.c +413cb3b4bvVJ7UlliMSH60J4uIb9kA netbsd-2.0-xen-sparse/sys/arch/xen/i386/pmap.c +413cb3b4aKd9SUY-OzUiTF0Gb9ve9w netbsd-2.0-xen-sparse/sys/arch/xen/i386/sys_machdep.c +413cb3b4jUtWl-sP493PvB27o-Iltw netbsd-2.0-xen-sparse/sys/arch/xen/i386/vector.S +413cb3b4ElwwoJEmmzflV0HgK5Qxcg netbsd-2.0-xen-sparse/sys/arch/xen/i386/xen_machdep.c +413cb564XpMxewOF9BCK37BNcDewHQ netbsd-2.0-xen-sparse/sys/arch/xen/include/ctrl_if.h +413cb564rB0n4HPqzYQxBvfR9r-KeQ netbsd-2.0-xen-sparse/sys/arch/xen/include/evtchn.h +413cb3b4k9OVRCxuSdhKt-2baTp_Yg netbsd-2.0-xen-sparse/sys/arch/xen/include/frameasm.h +413cb3b4bRsqiHQLTKEZk4-zOksf8A netbsd-2.0-xen-sparse/sys/arch/xen/include/hypervisor.h +413cb3b4OqY83qI8GztIZGADpvrpSw netbsd-2.0-xen-sparse/sys/arch/xen/include/if_xennetvar.h +413cb3b42GG0LffraTnpZKlSUq57wg netbsd-2.0-xen-sparse/sys/arch/xen/include/pmap.h +41580792kPzxLiPb47k_GDEMSbAbzA netbsd-2.0-xen-sparse/sys/arch/xen/include/xbdvar.h +413cb3b4F0ArkWVBRyspkw7ivfXihg netbsd-2.0-xen-sparse/sys/arch/xen/include/xen.h +413cb3b4ullQud70n4JClwoEEUBh8Q netbsd-2.0-xen-sparse/sys/arch/xen/include/xenfunc.h +413cb3b4y1Ffq8BOhbdSpn-fGmKuEg netbsd-2.0-xen-sparse/sys/arch/xen/include/xenpmap.h +413cb3b4uXOFcT56QuLt1fcDrB-4Zg netbsd-2.0-xen-sparse/sys/arch/xen/x86/bus_space.c +413cb3b4hIffjrKn3zhVqJmH6ueB3Q netbsd-2.0-xen-sparse/sys/arch/xen/xen/clock.c +413cb564SakPue2EEm4MTtRb4z5JVw netbsd-2.0-xen-sparse/sys/arch/xen/xen/ctrl_if.c +413cb564uNQuIozl7hperSVK9EeDCA netbsd-2.0-xen-sparse/sys/arch/xen/xen/evtchn.c +413cb3b4eNdRIasCoQIuX4Nu39Dlqw netbsd-2.0-xen-sparse/sys/arch/xen/xen/hypervisor.c +413cb3b40DLJLbX_ZUIULB0JFjBuaw netbsd-2.0-xen-sparse/sys/arch/xen/xen/if_xennet.c +413cb3b46JnvK1UurZAubeQoFg1W-w netbsd-2.0-xen-sparse/sys/arch/xen/xen/xbd.c +413cb3b5rIKB3TbyhK3pbNyVkYysqA netbsd-2.0-xen-sparse/sys/arch/xen/xen/xen_debug.c +413cb3b5eKxnzoodEqaWn2wrPnHWnA netbsd-2.0-xen-sparse/sys/arch/xen/xen/xencons.c +413cb3b5F56TvQWAmO5TsuzhtzLFPQ netbsd-2.0-xen-sparse/sys/arch/xen/xen/xenkbc.c +422e4430vKaHLOOGS7X-SUUe3EBCgw netbsd-2.0-xen-sparse/sys/miscfs/kernfs/kernfs.h +422e4430-gOD358H8nGGnNWes08Nng netbsd-2.0-xen-sparse/sys/miscfs/kernfs/kernfs_vnops.c +413cb3b53nyOv1OIeDSsCXhBFDXvJA netbsd-2.0-xen-sparse/sys/nfs/files.nfs +413aa1d0oNP8HXLvfPuMe6cSroUfSA patches/linux-2.6.11/agpgart.patch +427261074Iy1MkbbqIV6zdZDWWx_Jg patches/linux-2.6.11/i386-cpu-hotplug-updated-for-mm.patch +42372652KCUP-IOH9RN19YQmGhs4aA patches/linux-2.6.11/iomap.patch +428359d4b3fDYtazwXi4UUmSWaOUew patches/linux-2.6.11/linux-2.6.11.12.patch +4296fb998LGSWCcljGKbOCUv3h9uRQ patches/linux-2.6.11/net-csum.patch +429ae875I9ZrqrRDjGD34IC2kzDREw patches/linux-2.6.11/rcu-nohz.patch +42b165fcilFTNezi9NIsG2ecLZVU0w patches/linux-2.6.11/smp-alts.patch +429ba3007184K-y6WHQ6KgY65-lEIQ patches/linux-2.6.11/udp-frag.patch +424f001e_M1Tnxc52rDrmCLelnDWMQ patches/linux-2.6.11/x86_64-linux.patch +3f776bd1Hy9rn69ntXBhPReUFw9IEA tools/Makefile +40e1b09db5mN69Ijj0X_Eol-S7dXiw tools/Rules.mk +4209033eUwhDBJ_bxejiv5c6gjXS4A tools/blktap/Makefile +4209033ewLAHdhGrT_2jo3Gb_5bDcA tools/blktap/README +42277b02mYXxgijE7MFeUe9d8eldMw tools/blktap/README-PARALLAX +4209033fHgtGpb_K16_xC9CpkjNZLw tools/blktap/blkdump.c +42090340rc2q1wmlGn6HtiJAkqhtNQ tools/blktap/blktaplib.c +42090340C-WkRPT7N3t-8Lzehzogdw tools/blktap/blktaplib.h +428df8fdkg84W8yveE50EbkbTUZgjQ tools/blktap/block-async.c +428df8feTrgGFZEBMA_dYijy9DNs1g tools/blktap/block-async.h +42277b02WrfP1meTDPv1M5swFq8oHQ tools/blktap/blockstore.c +42277b02P1C0FYj3gqwTZUD8sxKCug tools/blktap/blockstore.h +42371b8aL1JsxAXOd4bBhmZKDyjiJg tools/blktap/blockstored.c +42371b8aD_x3L9MKsXciMNqkuk58eQ tools/blktap/bstest.c +42277b03930x2TJT3PZlw6o0GERXpw tools/blktap/parallax.c +42277b03XQYq8bujXSz7JAZ8N7j_pA tools/blktap/radix.c +42277b03vZ4-jno_mgKmAcCW3ycRAg tools/blktap/radix.h +428df8fe5RYONloDWVMkM-CfHfB1vA tools/blktap/requests-async.c +428df8feWeKJ-9HJb5_rFqdm_xqErg tools/blktap/requests-async.h +42277b03U_wLHL-alMA0bfxGlqldXg tools/blktap/snaplog.c +42277b04Ryya-z662BEx8HnxNN0dGQ tools/blktap/snaplog.h +42277b04LxFjptgZ75Z98DUAso4Prg tools/blktap/vdi.c +42277b04tt5QkIvs8She8CQqH5kwpg tools/blktap/vdi.h +42277b04zMAhB0_946sHQ_H2vwnt0Q tools/blktap/vdi_create.c +42277b04xB_iUmiSm6nKcy8OV8bckA tools/blktap/vdi_fill.c +42277b045CJGD_rKH-ZT_-0X4knhWA tools/blktap/vdi_list.c +42277b043ZKx0NJSbcgptQctQ5rerg tools/blktap/vdi_snap.c +423f270c_QDjGLQ_YdaOtyBM5n9BDg tools/blktap/vdi_snap_delete.c +42277b043Fjy5-H7LyBtUPyDlZFo6A tools/blktap/vdi_snap_list.c +42277b04vhqD6Lq3WmGbaESoAAKdhw tools/blktap/vdi_tree.c +42277b04RnFo07c1LcdmLn-FtRJEmw tools/blktap/vdi_unittest.c +42277b047H8fTVyUf75BWAjh6Zpsqg tools/blktap/vdi_validate.c +4124b307nRyK3dhn1hAsvrY76NuV3g tools/check/Makefile +4124b307vHLUWbfpemVefmaWDcdfag tools/check/README +4124b307jt7T3CHysgl9LijNHSe1tA tools/check/check_brctl +4124b307HDX972-zihuZWXB7R8Vd0w tools/check/check_curl_devel +4124b307P3bZBkTFm6r-3XTbf0phAA tools/check/check_curl_lib +42642813SYRkwr07qVZ9eCI5QTZANg tools/check/check_iproute +4124b307u-FeKvFP9kZnh0rLV0XjGg tools/check/check_logging +4124b307tRTjLqzRy60QrUoqN2Fhuw tools/check/check_python +4124b307lnAATmulpXYa0M-dzxLBDA tools/check/check_zlib_devel +4124b308ly20ptMKQoiztPyP_X68Mw tools/check/check_zlib_lib +4124b308O8yPHMKbj4YPR_grPGZmdA tools/check/chk +423d3a7bpoTFd0vqFaocQ-FqC8RuPA tools/debugger/gdb/gdb-6.2.1-xen-sparse/gdb/gdbserver/Makefile.in +423d3a7b_HtKYGocoTS1adeOpqDFnw tools/debugger/gdb/gdb-6.2.1-xen-sparse/gdb/gdbserver/configure +423d3a7b2vJq86I8FbYm6up5BsCwfA tools/debugger/gdb/gdb-6.2.1-xen-sparse/gdb/gdbserver/configure.in +423d3a7bQPownmVb63qOoyq89ebBVA tools/debugger/gdb/gdb-6.2.1-xen-sparse/gdb/gdbserver/configure.srv +423d3a7bHtqhyOgiRWhjWt-S-6wbYg tools/debugger/gdb/gdb-6.2.1-xen-sparse/gdb/gdbserver/linux-xen-low.c +4273458dYPghQKVnj_xu5-fC38CcOg tools/debugger/gdb/gdb-6.2.1-xen-sparse/gdb/gdbserver/server.c +423d3a7b2ENk2IskDZYZ98pe5NsvIA tools/debugger/gdb/gdb-6.2.1-xen-sparse/mkbuildtree +423d3a7buANO_q-kgxIRffUu7lMnUw tools/debugger/gdb/gdbbuild +42a1a777Dt8l7bna7fm1vKmTEX1FCQ tools/debugger/libxendebug/Makefile +42a0c8d8qbLfvuvDUA0tFB9nHMh-zg tools/debugger/libxendebug/list.h +42a0c8d98XtmbhyddBgIyyHllz5WTw tools/debugger/libxendebug/xendebug.c +42a0c8d9ucRxWO41IHTfYI7xYGoKrw tools/debugger/libxendebug/xendebug.h +42a0c8d9zuGuWoaTux5NW4N3wOw8pg tools/debugger/pdb/Domain.ml +42a0c8d9pigEXFFtdut3R99jbf73NA tools/debugger/pdb/Domain.mli +42a0c8d93wnR_hcSAa7VHgn8CSrWEA tools/debugger/pdb/Intel.ml +42a0c8d95glt-jkgXe8GDOPT6TYN6Q tools/debugger/pdb/Makefile +42a0c8d9UueJDF0IRX3OozEvUhSTmw tools/debugger/pdb/OCamlMakefile +42a0c8d9PgBvaWPzTHSFb9ngii7c7w tools/debugger/pdb/PDB.ml +42a0c8danHHGiNywdeer6j4jzxAc2A tools/debugger/pdb/Process.ml +42a0c8dav_08OtySI4kYP1lahlVrpQ tools/debugger/pdb/Process.mli +42a0c8da51EqubQT5PJ4sxCKLF3xSw tools/debugger/pdb/Util.ml +42c06ff2SIoOLsDHH2ZyWKnYzA4Mkw tools/debugger/pdb/Xen_domain.ml +42c06ff2OXdWXeLK8YWeIIiHk3N6Xw tools/debugger/pdb/Xen_domain.mli +42a0c8daxftpiXuvLmc9fOOEhdFWiQ tools/debugger/pdb/debugger.ml +42a0c8da81tzhpvIAfkx9nZqUNrQvg tools/debugger/pdb/evtchn.ml +42a0c8dasiso9c-2sCvHBzP6YVjATA tools/debugger/pdb/evtchn.mli +42c06ff2FXdouy4s5_DM6rUgaeJrOA tools/debugger/pdb/linux-2.6-module/Makefile +42c06ff27x60l_XDMTZRnv688McFfg tools/debugger/pdb/linux-2.6-module/debug.c +42c06ff2crmxKZFQw7KCkQlLnJh2TQ tools/debugger/pdb/linux-2.6-module/module.c +42c06ff2tC-1f7KRAGcEGrxjSao60g tools/debugger/pdb/linux-2.6-module/pdb_module.h +42c06ff2n2Ib0UeptbyAYZoF9-gFMQ tools/debugger/pdb/pdb_caml_domain.c +42c06ff2jKvaB6JHP-B_AR8f-7KeVQ tools/debugger/pdb/pdb_caml_evtchn.c +42c06ff3XPemRQRAfNIEV2qw2o6IUw tools/debugger/pdb/pdb_caml_process.c +42a0c8daXD_6Y62A_u5-PO_Klrhi0w tools/debugger/pdb/pdb_caml_xc.c +42c06ff3joi_6rE-l4jh76qYUihAZA tools/debugger/pdb/pdb_caml_xcs.c +42c06ff3zUNt7tOZ-AgTTWcy9pirvg tools/debugger/pdb/pdb_caml_xen.h +42a0c8danJXun9ay5SPBhhkKvuUPfg tools/debugger/pdb/pdb_xen.c +42b03d06llc_GE7fXGQ6-rYR4VFAcw tools/debugger/pdb/readme +42a0c8dbjK6Du89D2SUcxsuAdlUu3w tools/debugger/pdb/server.ml +42c06ff3v6Ks9EscwR6L0OTqdZn5kA tools/debugger/pdb/xcs.ml +42c06ff3j-5U79rRFb4bGqx1Ajhw4Q tools/debugger/pdb/xcs.mli +401d7e160vaxMBAUSLSicuZ7AQjJ3w tools/examples/Makefile +401d7e16UgeqroJQTIhwkrDVkoWgZQ tools/examples/README +41597996VhTbNuHbuscYSfRb-WR6fA tools/examples/block-enbd +41597996GHP2_yVih2UspXh328fgMQ tools/examples/block-file +41dde8af16Hulg1pgW8aOnbbxyrl7w tools/examples/bochsrc +405ff55dawQyCHFEnJ067ChPRoXBBA tools/examples/init.d/xend +40278d94cIUWl2eRgnwZtr4hTyWT1Q tools/examples/init.d/xendomains +41dde8afTUuvdtFUlOx0ZRusKxyd8w tools/examples/mem-map.sxp +40ee75a9xFz6S05sDKu-JCLqyVTkDA tools/examples/network +41fc0c18hVgK5rKJyZUsqybux9D9Dg tools/examples/network-nat +41e661e1giIEKbJ25qfiP-ke8u8hFA tools/examples/network-route +40ee75a967sxgcRY4Q7zXoVUaJ4flA tools/examples/vif-bridge +41fc0c18AFAVXA1uGm1JFWHMeeznVw tools/examples/vif-nat +41e661e1ooiRKlOfwumG6wwzc0PdhQ tools/examples/vif-route +423ab2eaNCzxk3c-9yU1BwzxWvsDCQ tools/examples/vnc/Xservers +423ab2ea7ajZLdZOI-8Z-bpNdNhhAQ tools/examples/vnc/Xvnc-xen +40ee75a93cqxHp6MiYXxxwR5j2_8QQ tools/examples/xend-config.sxp +41dde8af6M2Pm1Rrv_f5jEFC_BIOIA tools/examples/xmexample.vmx +41090ec8Pj_bkgCBpg2W7WfmNkumEA tools/examples/xmexample1 +40cf2937oKlROYOJTN8GWwWM5AmjBg tools/examples/xmexample2 +41fc0c18_k4iL81hu4pMIWQu9dKpKA tools/examples/xmexample3 +42a6b4b7KssGzTDVN-XG2FM1gCEnnw tools/firmware/Makefile +42a6b4b7qP95OSsEL8XWKKZ1p1myjQ tools/firmware/README +42c3a8aasHaruuXW5eNaF3-Q3iJqxA tools/firmware/acpi/Makefile +42c3a8aa2r5f9x1E8l23Dj9DYi0nRg tools/firmware/acpi/README +42c3a8aayb825lgitjA4O817LDpJPw tools/firmware/acpi/acpi2_0.h +42c3a8aal-s682lGz6x7zbQcVdEJ2g tools/firmware/acpi/acpi_build.c +42c3a8aamRqrfrBqioo8YYXVMl5jeg tools/firmware/acpi/acpi_dsdt.asl +42c3a8aaFqGZdCjEpXBmtY1LalixwQ tools/firmware/acpi/acpi_dsdt.c +42c3a8aa4ujzPi0lLwnMmU0tDtKSzA tools/firmware/acpi/acpi_facs.c +42c3a8aaA9f6wfWWQA2R1y7lhjY3bw tools/firmware/acpi/acpi_facs.h +42c3a8aaWjUKeGAaqtGnpkIYLOWRfA tools/firmware/acpi/acpi_fadt.c +42c3a8aaMa-vFeyOVxMEM1tWkZGLdQ tools/firmware/acpi/acpi_fadt.h +42c3a8aaokyiLvJ5q9BNNTH8ndZ4bA tools/firmware/acpi/acpi_gen.c +42c3a8aanXHjc2BoQyntSiCDDNxYQA tools/firmware/acpi/acpi_madt.c +42c3a8aaDHlMc-XEzJOmv57llVt3eA tools/firmware/acpi/acpi_madt.h +42c3a8aanzri6r9l_Tnye7i3JSf1jg tools/firmware/acpi/acpi_rsdt.c +42a6b4b78PWdYzKYvLt_EHhvQCl9ig tools/firmware/rombios/Makefile +42a6b4b75sz5KF9Lry2EGnPMhOdnUA tools/firmware/rombios/apmbios.S +42a6b4b7YwP9rl3AJRTmZbBoal_c6Q tools/firmware/rombios/biossums.c +42a6b4b83gANosDYd43YaK7ATQvBEg tools/firmware/rombios/makesym.perl +42a6b4b8qcIQIBXDeOY3JRwsLM6lhw tools/firmware/rombios/rombios.c +42a6b4b8K7yqnU3-QxndYNZUgHpniw tools/firmware/rombios/rombios.diffs +42a6b4b86GMM969Y82nK3HuUi6eP9g tools/firmware/vgabios/BUGS +42a6b4b8J_MHMVmmF_igI7zeDxSiwA tools/firmware/vgabios/COPYING +42a6b4b8SYW5q21pPPuQt88Bkpqc2Q tools/firmware/vgabios/ChangeLog +42a6b4b8INe7qe20YYlwATaAADEMQA tools/firmware/vgabios/Makefile +42a6b4b8AYFCsoAeqqQ8dibmgxkfLA tools/firmware/vgabios/Notes +42a6b4b8NUXHh1hudvvNCuqgo9cB-Q tools/firmware/vgabios/README +42a6b4b8MM0Pj6uDwdJ4Eyg6hB-oEA tools/firmware/vgabios/TODO +42a6b4b8AL0YrgudjmQr7QvJ3we1Cg tools/firmware/vgabios/biossums.c +42a6b4b8Zce-r8OtpctwvqHBS8cHEw tools/firmware/vgabios/clext.c +42a6b4b8fIyMd0d8tIPV4JDAvB5l1A tools/firmware/vgabios/dataseghack +42a6b4b8M4BsNDRAJMHpY8H2iRu0qA tools/firmware/vgabios/vbe.c +42a6b4b8Z2pSU4e5qrUR5r1vEKNbKQ tools/firmware/vgabios/vbe.h +42a6b4b8EyiklW2C9eD9_t0OmRfmFQ tools/firmware/vgabios/vbe_display_api.txt +42a6b4b8oXcw5CgLj-mBVT4dUc-Umw tools/firmware/vgabios/vbetables.h +42a6b4b85jkZnCar41YreYVUAY7IDQ tools/firmware/vgabios/vgabios.c +42a6b4b8xxpRYh1BesaSgW3gpgMsaQ tools/firmware/vgabios/vgabios.h +42a6b4b8WSA5xHF-R5F8iBcB6BC5wA tools/firmware/vgabios/vgafonts.h +42a6b4b9C66bPuUTaLjCnJ0I-kGz9w tools/firmware/vgabios/vgatables.h +42a6b4b969QLJRt3TU_v3yYhZI45Gg tools/firmware/vmxassist/Makefile +42a6b4b95iuk7M2s-edoSFrWcdoYcw tools/firmware/vmxassist/TODO +42a6b4b9Q6VB27GxRNCARsDN2ZuKNw tools/firmware/vmxassist/gen.c +42a6b4b9NmLjb36-sXiiWzcGHjTOJA tools/firmware/vmxassist/head.S +42a6b4b9jmF9m22iiwu8XwEm1j5fnQ tools/firmware/vmxassist/machine.h +42a6b4b9ABmGHA1LzYjpq63FBs4hcw tools/firmware/vmxassist/mkhex +42a6b4b9xmj4TLHJtV-DhnwT9mMpfw tools/firmware/vmxassist/setup.c +42a6b4b9PjgANTP8Y8JFTToBrV9ssg tools/firmware/vmxassist/trap.S +42a6b4b9GlymU0VmQyan23pagDaRTQ tools/firmware/vmxassist/util.c +42a6b4b9mmqUyFn487gP4spU_R6xtg tools/firmware/vmxassist/util.h +42a6b4b9JssxvlpcV_-QcGRMDGgL_w tools/firmware/vmxassist/vm86.c +42a6b4b92oUAJMzCE-YcVlA2Z-2zyg tools/firmware/vmxassist/vm86.h +42a6b4b9TlkVUYTkLd_Bvq9vlrEx6g tools/firmware/vmxassist/vmxassist.ld +42a6b4b92L-2zFg-Qal6YweeE-pMiA tools/firmware/vmxassist/vmxloader.c +428d0d82yOaUzYQuYQxH7VzQytKo-g tools/ioemu/COPYING +428d0d82EdPp1TqJBembLgyB1y413w tools/ioemu/COPYING.LIB +428d0d82fd6-QydvFfHmeQBGrKnrrA tools/ioemu/Changelog +428d0d82xvTj4yzPYiurazyGj1PaEw tools/ioemu/Makefile +428d0d82HvgRPoyU3f60_u_t1L28Ag tools/ioemu/README +428d0d82aoWewa_6Z5kNUTgkRw0wNg tools/ioemu/TODO +428d0d82WYi8vrG7RKKyIJw01DAnGg tools/ioemu/VERSION +42c3a871n2v9J47-sowMlC1x4DSwQQ tools/ioemu/aes.c +42c3a871x3RluaD_Viya0FQ-iSHGHw tools/ioemu/aes.h +428d0d82wB05ibBxTCSsAhz3qRO7Gg tools/ioemu/block-cloop.c +428d0d82cucBBZFks3aMSL0-C3L9Nw tools/ioemu/block-cow.c +428d0d82s5FM7xmnj1XLAMlt_DdRIA tools/ioemu/block-qcow.c +428d0d83yWYa6mIH2mplo1L_3Cqadw tools/ioemu/block-vmdk.c +428d0d83nfcgHvu37hviRYwAAAAxSQ tools/ioemu/block.c +428d0d83LrXLfgm9h2RPNBRM_vkqsA tools/ioemu/block_int.h +428d0d83zt7CgVsTa-CIorpIGVWe7g tools/ioemu/bswap.h +428d0d83-I9bQJ8EduVO0OmP_YMtVg tools/ioemu/configure +428d0d83sUjdDRZnfykBaWd_uGjVQQ tools/ioemu/console.c +428d0d83Rsv-Pq8iGrvA0ChVTD-KEQ tools/ioemu/cpu-all.h +428d0d830tCm2-QC3iLTo-yS2D7azQ tools/ioemu/cpu-defs.h +428d0d83bOFEAX7Kc_lt7pm_ItnYOg tools/ioemu/cpu.h +428d0d83wJqNCht75GfVfWqGzaDBGA tools/ioemu/create_keysym_header.sh +428d0d83warJp9F3aKU4moRRVfTmFg tools/ioemu/exec-all.h +428d0d83m3Kwp8vJKycK1n5a_LygfA tools/ioemu/exec.c +428d0d83G-F1mvFyzCEMNhiU6ts8lQ tools/ioemu/hw/adb.c +428d0d83EE1hpyfMfr667s4aFK42hg tools/ioemu/hw/adlib.c +428d0d83AoBht7yFAmAUWoi-ZZS2Tw tools/ioemu/hw/cirrus_vga.c +428d0d83lD5ovmJG_Q1VfIIjw1Fm-A tools/ioemu/hw/cirrus_vga_rop.h +428d0d83SCwX65BPgonBcgYCxdKDNA tools/ioemu/hw/cirrus_vga_rop2.h +428d0d83zAKLZ8JX7_D6RMGcml3jRA tools/ioemu/hw/cuda.c +428d0d83OLV-aQor-LfByakKvo-1-g tools/ioemu/hw/dma.c +428d0d83P1VkKtXn90RMN8eBsvPFQA tools/ioemu/hw/fdc.c +428d0d849AqxX6FsPHv0ovjaFyNMVg tools/ioemu/hw/fmopl.c +428d0d84-hHRu7PVXjfc7oLfrDxY6g tools/ioemu/hw/fmopl.h +428d0d84zbtT2C8Xci_SqMP5bZ-wcQ tools/ioemu/hw/i8254.c +428d0d84KlR61OwSzjF0-L4iz58dfQ tools/ioemu/hw/i8259.c +428d0d84auhZx6c5Kv3WrfM2UZvqHA tools/ioemu/hw/ide.c +42c3a8bcqaiyuOWldKc1vXUP12-1Bg tools/ioemu/hw/ioapic.c +42c3a8bcMP67Od-xEnQaYAHahibD_w tools/ioemu/hw/ioapic.h +428d0d84WSlhNzdrcb-f-Lg-W9dniQ tools/ioemu/hw/iommu.c +428d0d84ri8ZtvhB6RJr1YNejjNWIQ tools/ioemu/hw/lance.c +428d0d84cxFFgDv5fBFrlxGoCiy6Nw tools/ioemu/hw/m48t08.c +428d0d84MQYDhAOLnBnag1BZWcW6JA tools/ioemu/hw/m48t08.h +428d0d84sE4ghX33RQ5kDSuyoLdhFg tools/ioemu/hw/m48t59.c +428d0d8465kZWTT4mVgf-VonglDOxw tools/ioemu/hw/m48t59.h +428d0d84OY7tvE-PKrBfjf2vEQXyMA tools/ioemu/hw/magic-load.c +428d0d84U-PYPR_GMVJoQsbCAVAQow tools/ioemu/hw/mc146818rtc.c +428d0d84jtSXGjQYKd_xvSiMM4C_7Q tools/ioemu/hw/ne2000.c +428d0d84SMHPk0cRnrZgUYkMxFXMMQ tools/ioemu/hw/openpic.c +428d0d84lyG0XDg5MxLMSee3MWgq3g tools/ioemu/hw/pc.c +428d0d84HWR3Q7dEESycfJ7hSWdGig tools/ioemu/hw/pci.c +428d0d84Noyn4ik0UX1E7OdfuFdrIw tools/ioemu/hw/pckbd.c +4294307e0KIA9jaU_1OMIGCcNeLdeQ tools/ioemu/hw/port-e9.c +428d0d840SMURRjsz9V96rwt-naynw tools/ioemu/hw/ppc.c +428d0d84MI7kZftH_c0FK1qiiyQBZg tools/ioemu/hw/ppc_chrp.c +428d0d859-xwA89jmzFk6x9UyXjAeA tools/ioemu/hw/ppc_prep.c +428d0d85YS1n4Fr_EK7B01EWSmrYRg tools/ioemu/hw/sb16.c +428d0d85GrUXL_p0ppOUIfWf8--hvw tools/ioemu/hw/sched.c +428d0d85wP3aLdHYJ-hDAImDP2sj_g tools/ioemu/hw/serial.c +428d0d85mOfwFqDCO76K6bc4IQOxQA tools/ioemu/hw/sun4m.c +428d0d852OCpAsfS1PNoJOfnHhFPSQ tools/ioemu/hw/tcx.c +428d0d85gCUCX0nbuRAt28QJgQ5P8w tools/ioemu/hw/timer.c +428d0d85hp-zgN40hVYXWRjhInkUkg tools/ioemu/hw/vga.c +428d0d85G_4S-hpRyrhV4yGjSrS-cQ tools/ioemu/hw/vga_int.h +428d0d85oWl1ONX_gIZWS1fXjeXGlA tools/ioemu/hw/vga_template.h +428d0d85_mNnFPE8hnoC3VvBD9CCuA tools/ioemu/keyboard_rdesktop.c +428d0d85SyOIeDg3SoxH2BiBpXWWkA tools/ioemu/keymaps/ar +428d0d85ToGTVvPrl8hKAi2QxCzp2w tools/ioemu/keymaps/common +428d0d85fmdxRplWI5Jp54NNZy5Mmw tools/ioemu/keymaps/convert-map +428d0d85t5IBwlnttPreCS0UX3nbOw tools/ioemu/keymaps/da +428d0d85XRNojuUlkCgvea0I_fdJEg tools/ioemu/keymaps/de +428d0d85QPup3ixECEpa7Pzr9lLEyw tools/ioemu/keymaps/de-ch +428d0d86r5UpNhOSALGJUUDaGv-vnQ tools/ioemu/keymaps/en-gb +428d0d86ylUT-4Skjnwa27vxIeBqYw tools/ioemu/keymaps/en-us +428d0d86vcHusn3XzWTLjKLDdNhZxw tools/ioemu/keymaps/es +428d0d86UVS0Km-9J94RAQM7iAbBzw tools/ioemu/keymaps/et +428d0d86hS47OlX4USgPPWk6RFWKLQ tools/ioemu/keymaps/fi +428d0d86kOcjaVVZqDgV2JDGcXQ8rg tools/ioemu/keymaps/fo +428d0d86c4GgMp1hDU2MFxiZ1Pz9Lg tools/ioemu/keymaps/fr +428d0d86BdbSM5PxuMaSf8vBv6rXQg tools/ioemu/keymaps/fr-be +428d0d86dQk_p9io2QdI9SGC6FVidg tools/ioemu/keymaps/fr-ca +428d0d86JpfLBZmnrv7Yp0tuezgzng tools/ioemu/keymaps/fr-ch +428d0d861RURctgJ3cgtnq0chW6JOA tools/ioemu/keymaps/hr +428d0d86mqzqw70FkLHZFzIkvTJBpw tools/ioemu/keymaps/hu +428d0d86O3ruSBL8ZyRBeLF7Ow67Og tools/ioemu/keymaps/is +428d0d87pcCatuZLYpVWtUu2Da9sgw tools/ioemu/keymaps/it +428d0d87M3Hy7ubCu27ZO-zWDk-YhQ tools/ioemu/keymaps/ja +428d0d87CqrbJBUI28UxJCIduSJ4rQ tools/ioemu/keymaps/lt +428d0d87jIV_V1YwET59i-Py3h0ILA tools/ioemu/keymaps/lv +428d0d87T3KIxrywXSAkRu-AiQQgIQ tools/ioemu/keymaps/mk +428d0d87_wmWi_IBHfpmZzhCKU-Baw tools/ioemu/keymaps/modifiers +428d0d87GgUuEd4Mz9p3mUGkdMdOsg tools/ioemu/keymaps/nl +428d0d87E1NtUwguKl72ifCTjDQ5rQ tools/ioemu/keymaps/nl-be +428d0d87lKhQOfn5yQ0tq3u7hfIgpw tools/ioemu/keymaps/no +428d0d87iD3aff-LOlaA4CmOUVct3Q tools/ioemu/keymaps/pl +428d0d870CMCzI7c6gcGZMNuIYGbnQ tools/ioemu/keymaps/pt +428d0d87gCs2M4A4P1ITzW86lm_-JA tools/ioemu/keymaps/pt-br +428d0d87nzQ8eK1b9_Zs1Z82dOuX1Q tools/ioemu/keymaps/ru +428d0d87uHdsh15a5mAD-HyWni8QDw tools/ioemu/keymaps/sl +428d0d87gsUMIP42oFecYrdZAJDAuw tools/ioemu/keymaps/sv +428d0d87OcfLjKuhg6p2uuiAPvJBqQ tools/ioemu/keymaps/th +428d0d87QbRtHJUft9qBkNXcl4pbzw tools/ioemu/keymaps/tr +428d0d88CJoMejkmBh6pWaqKMvQF8A tools/ioemu/main.c +428d0d88Fcan7gQZ6axXOmokBDLe7g tools/ioemu/monitor.c +428d0d88lVaOC64YBZ1Wzt-WV4JaSw tools/ioemu/osdep.c +428d0d885W7r27CDEJCW6Jlbxggc9g tools/ioemu/osdep.h +428d0d88CiP9tVdIdLWAzOnCOSdafg tools/ioemu/path.c +428d0d8908B65zMmhdGVME3jv7gpww tools/ioemu/qemu-binfmt-conf.sh +428d0d89taY6NPlnIyOAMQd_Ww5qUw tools/ioemu/qemu-img.c +428d0d89FY-g4UPH-ZW7t5ZCqvQVTQ tools/ioemu/readline.c +428d0d89dLURbktZFufDKSHan01GFg tools/ioemu/sdl.c +428d0d82dUmXkgIy11G-hoKTkhvkfQ tools/ioemu/target-i386-dm/Makefile +428d0d8ahpRAYl6s_itBxnTcxyMHaQ tools/ioemu/target-i386-dm/helper2.c +42c3a83bi-eu2QI4iQLkImYUVs0H6w tools/ioemu/target-i386-dm/qemu-dm.debug +428d0d8aU3Moaq4zNW5QMV_NxD-4XA tools/ioemu/target-i386-dm/qemu-ifup +428d0d8aqidj8n5H2_2qhBV0mIIJzA tools/ioemu/target-i386-dm/qemu-vgaram-bin.gz +428d0d8bMq0ZpccpHb1iVvSNbJjRxg tools/ioemu/thunk.c +428d0d8b2PYfwKLLShlnWcM3VWq9ag tools/ioemu/thunk.h +428d0d8bfvbYQwj6MgDr958m4_SfRA tools/ioemu/vgafont.h +428d0d8bgAojEQcAcTV2gj2E_eG4Lw tools/ioemu/vl.c +428d0d8bXiCY4iTjoSPxGry8jXdAtg tools/ioemu/vl.h +428d0d8bQVKedvN5EIPm39s33TXkpA tools/ioemu/vnc.c +428d0d85d831iQvvCD3LcaOD9rYGkg tools/ioemu/x86_32.ld +428f0763_67jCiHbdgfGlgAOJqfg9A tools/ioemu/x86_64.ld +3fbba6dbDfYvJSsw9500b4SZyUhxjQ tools/libxc/Makefile +41dde8afKYRKxS4XtLv1KUegGQy_bg tools/libxc/linux_boot_params.h +3fbba6dc1uU7U3IFeF6A-XEOYF2MkQ tools/libxc/rpm.spec +3fbba6dcrNxtygEcgJYAJJ1gCQqfsA tools/libxc/xc.h +42bbe5b9J1BFuxACiiyj38Fucc2xgg tools/libxc/xc_aout9.h +3fbba6dbEVkVMX0JuDFzap9jeaucGA tools/libxc/xc_bvtsched.c +4273458dyF2_sKA6CFkNJQYb8eY2dA tools/libxc/xc_core.c +3fbba6dbasJQV-MVElDC0DGSHMiL5w tools/libxc/xc_domain.c +40278d99BLsfUv3qxv0I8C1sClZ0ow tools/libxc/xc_elf.h +403e0977Bjsm_e82pwvl9VvaJxh8Gg tools/libxc/xc_evtchn.c +4227c129ZKjJPNYooHVzBCyinf7Y6Q tools/libxc/xc_gnttab.c +3fbba6dbNCU7U6nsMYiXzKkp3ztaJg tools/libxc/xc_linux_build.c +3fbba6dbl267zZOAVHYLOdLCdhcZMw tools/libxc/xc_linux_restore.c +3fbba6db7li3FJiABYtCmuGxOJxEGw tools/libxc/xc_linux_save.c +42bbe5b95gdEdSyDdrK2ts7GEiK5Mw tools/libxc/xc_load_aout9.c +42a40bc3vE3p9fPSJZQZK0MdQF9B8g tools/libxc/xc_load_bin.c +42a40bc4diWfFsPGf0RW7qXMufU4YQ tools/libxc/xc_load_elf.c +3fbba6db7WnnJr0KFrIFrqNlSKvFYg tools/libxc/xc_misc.c +4051bce6CHAsYh8P5t2OHDtRWOP9og tools/libxc/xc_physdev.c +3fbba6dctWRWlFJkYb6hdix2X4WMuw tools/libxc/xc_private.c +3fbba6dcbVrG2hPzEzwdeV_UC8kydQ tools/libxc/xc_private.h +42337174PxyzzPk62raDiYCIsfStDg tools/libxc/xc_ptrace.c +4273458duzL--nsTfT6e_q6Kfij48g tools/libxc/xc_ptrace_core.c +41ebbfe9U0b0kI-HgjK7VEY4EvW7_w tools/libxc/xc_sedf.c +41dde8b0pLfAKMs_L9Uri2hnzHiCRQ tools/libxc/xc_vmx_build.c +3f776bd2Xd-dUcPKlPN2vG89VGtfvQ tools/misc/Makefile +4225f56d7sa9aEARfjNeCVTMYDAmZA tools/misc/cpuperf/Makefile +4225f56dS5TGdKojmuBnrV3PzbE6Rg tools/misc/cpuperf/README.txt +4225f56dcodvBSPoWYS6kvwZCQhgzg tools/misc/cpuperf/cpuperf.c +4225f56dMjZK14EWd8K0gq4v5Diwjg tools/misc/cpuperf/cpuperf_perfcntr.h +4225f56d_XjSY1297IiH96qeqD4sCA tools/misc/cpuperf/cpuperf_xeno.h +4225f56dqlGC_UZ681F95mCgLbOeHQ tools/misc/cpuperf/module/Makefile +4225f56dnmms-VFr1MiDVG_dYoM7IQ tools/misc/cpuperf/module/perfcntr.c +4225f56dYhIGQRD_kKVJ6xQrkqO0YQ tools/misc/cpuperf/p4perf.h +40ab2cfawIw8tsYo0dQKtp83h4qfTQ tools/misc/fakei386xen +4249273cDOw6_uLUPvvUwWU1ZrJxnQ tools/misc/mbootpack/GPL +4249273cSmj2h8Fj3UpTg0g-k6CLsA tools/misc/mbootpack/Makefile +4249273c8gKIttF1QPiczvGo5AEOeA tools/misc/mbootpack/README +4249273c4N4PAkvt3trNlto4h76k8A tools/misc/mbootpack/bin2c.c +4249273cISg5nhW1Pt7OJ0jFu343ig tools/misc/mbootpack/bootsect.S +4249273cUiz8CgLqnG7XYFa8x5-MoQ tools/misc/mbootpack/buildimage.c +4249273c_gZ2yI_h-ci66E1Y5oSEPA tools/misc/mbootpack/mb_header.h +4249273cWnlW0-lOIYua1bkKirn6vA tools/misc/mbootpack/mb_info.h +4249273cA8LI3IMaSuhLOjykuMeQJA tools/misc/mbootpack/mbootpack.c +4249273cVTgyv2HYd-mC29IDaz0-mg tools/misc/mbootpack/mbootpack.h +4249273cLXQbRWFp_v-FqcyOm0sYtg tools/misc/mbootpack/setup.S +3f6dc136ZKOjd8PIqLbFBl_v-rnkGg tools/misc/miniterm/Makefile +3f6dc140C8tAeBfroAF24VrmCS4v_w tools/misc/miniterm/README +3f6dc142IHaf6XIcAYGmhV9nNSIHFQ tools/misc/miniterm/miniterm.c +40c9c469kT0H9COWzA4XzPBjWK0WsA tools/misc/netfix +4022a73cEKvrYe_DVZW2JlAxobg9wg tools/misc/nsplitd/Makefile +4022a73cKms4Oq030x2JBzUB426lAQ tools/misc/nsplitd/nsplitd.c +42b74436oXEaaUH_dPcGFviMiwNgCQ tools/misc/policyprocessor/SecurityLabel.java +42b74436fIW8ZI3pUpu13-Ox6G2cOA tools/misc/policyprocessor/SecurityPolicySpec.xsd +42b74436T4CN4HMWsuaHD2zS8jY1BA tools/misc/policyprocessor/SsidsEntry.java +42b74436Dk3WKJl6-SyP3LEBo3DXkQ tools/misc/policyprocessor/XmlToBin.java +42b74436ABj4SOVBWqY_IEIboFUkeA tools/misc/policyprocessor/XmlToBinInterface.java +42b7443684kBOrEBKFod4fGvnJ-rdA tools/misc/policyprocessor/myHandler.java +42b74436JjvZmOp2DfMb-TnpGZXQ8w tools/misc/policyprocessor/readme.install +42b74436-0Ig0yb-w1BYyCAFVTwqUg tools/misc/policyprocessor/readme.xen +42b74436WAJ6lmTO3foadk2527PFBQ tools/misc/policyprocessor/xen_sample_def.xml +42b744365VrTALmqRroQOBZ9EopUsw tools/misc/policyprocessor/xen_sample_policy.xml +42308df9dv_ZuP49nNPIROEMQ3F_LA tools/misc/xc_shadow.c +3f5ef5a2ir1kVAthS14Dc5QIRCEFWg tools/misc/xen-clone +3f5ef5a2dTZP0nnsFoeq2jRf3mWDDg tools/misc/xen-clone.README +405eedf6_nnNhFQ1I85lhCkLK6jFGA tools/misc/xencons +40c9c4697z76HDfkCLdMhmaEwzFoNQ tools/misc/xend +41adc641dV-0cDLSyzMs5BT8nL7v3Q tools/misc/xenperf.c +4056f5155QYZdsk-1fLdjsZPFTnlhg tools/misc/xensymoops +40cf2937dqM1jWW87O5OoOYND8leuA tools/misc/xm +42b742f6JFcp6LFpYu-B4AEsfQwSFw tools/policy/Makefile +42b742f66XOdRMrwaHvbCdSSQyCrFw tools/policy/policy_tool.c +4270cc81g3nSNYCZ1ryCMDEbLtMtbQ tools/pygrub/Makefile +4270deeccyRsJn6jLnRh9odRtMW9SA tools/pygrub/README +4270cc81EIl7NyaS3Av6IPRk2c2a6Q tools/pygrub/setup.py +4270cc81t7eNCDp4Bhbh58p1CNxaCQ tools/pygrub/src/GrubConf.py +4270d6c2fWF4r5-zF1pSuAFwUZS0aA tools/pygrub/src/__init__.py +4270cc81CzKMiujDPWcaYhu709vGXw tools/pygrub/src/fsys/__init__.py +4270cc81RTIiq9si0dI4YRTRE4KRMw tools/pygrub/src/fsys/ext2/__init__.py +4270cc81YCYa4pexivBD2NdLE2F_Pg tools/pygrub/src/fsys/ext2/ext2module.c +4270cc81o4BL5e8Cs87aSi8EXA5NtQ tools/pygrub/src/fsys/ext2/test.py +4294fab3_A8gB1E3T-8fDt0x0eGRqw tools/pygrub/src/fsys/reiser/__init__.py +4294fab3On_kRmhm1lwm4SDteFP_7Q tools/pygrub/src/fsys/reiser/reisermodule.c +4270cc81TS6L_tEO6wSp5wcURcpldQ tools/pygrub/src/pygrub +40c9c468icGyC5RAF1bRKsCXPDCvsA tools/python/Makefile +40ffc44dOwe1CcYXGCkYHdG_NxcccA tools/python/logging/logging-0.4.9.2/PKG-INFO +40ffc44dpqpgqgrnLfR70PsiBc3liA tools/python/logging/logging-0.4.9.2/README.txt +40ffc44ddfLckno4Gvzi3vZxwelZHQ tools/python/logging/logging-0.4.9.2/default.css +40ffc44dKSkczdvpd_x7rWGH4_BRIQ tools/python/logging/logging-0.4.9.2/liblogging.tex +40ffc44d2O51abh5t-1VTZfqhbS1ZQ tools/python/logging/logging-0.4.9.2/logging/__init__.py +40ffc44dT8ustodG0hDjYMCzQ8UCbA tools/python/logging/logging-0.4.9.2/logging/config.py +40ffc44dqbwdCcq6XgwpTvrUrABhhw tools/python/logging/logging-0.4.9.2/logging/handlers.py +40ffc44dVEL3QwvZx_Rcl3d41WxMRQ tools/python/logging/logging-0.4.9.2/python_logging.html +40ffc44dXypIfRTyuTD48cN0o-gAXg tools/python/logging/logging-0.4.9.2/setup.py +40ffc44dqqdkY-Ox_eoPuNmQR0_ebw tools/python/logging/logging-0.4.9.2/test/app.py +40ffc44d9vEJEV_44B-23sJHkT1-gA tools/python/logging/logging-0.4.9.2/test/critical.ini +40ffc44dA5BiSVip8DlCh0DfAaQzbg tools/python/logging/logging-0.4.9.2/test/debug.ini +40ffc44dAuxUnJx7Fu2puaiNheBRkg tools/python/logging/logging-0.4.9.2/test/error.ini +40ffc44dkAIw1gbAzj_XiQyoru93_Q tools/python/logging/logging-0.4.9.2/test/events.xml +40ffc44eZwnQ4wGs1zVaAGsnEoyz6Q tools/python/logging/logging-0.4.9.2/test/log_test.py +40ffc44epbz06Y2nCkuYotfQFY4bJQ tools/python/logging/logging-0.4.9.2/test/log_test0.py +40ffc44eVNdi9lXQOZ2n7yT1DXVQRQ tools/python/logging/logging-0.4.9.2/test/log_test1.py +40ffc44eeqydHPpipbO4oVhRt90v0A tools/python/logging/logging-0.4.9.2/test/log_test10.py +40ffc44eSum6e6Y_sh7hRBHnnRurfw tools/python/logging/logging-0.4.9.2/test/log_test11.py +40ffc44euWPhfnbZw64ShBIrZot84A tools/python/logging/logging-0.4.9.2/test/log_test12.py +40ffc44ekj8Hdg-2SLb0qdqJzGkXdA tools/python/logging/logging-0.4.9.2/test/log_test13.py +40ffc44e5DnmO4OEa54mS8Q9AgP3rg tools/python/logging/logging-0.4.9.2/test/log_test14.py +40ffc44e6uWMQdikNEzYeNeFewGQew tools/python/logging/logging-0.4.9.2/test/log_test15.py +40ffc44eHJ_XsDp2Le-qc96G2n7GdQ tools/python/logging/logging-0.4.9.2/test/log_test16.py +40ffc44eCIq8wSc2UI16VfkLPlW-SQ tools/python/logging/logging-0.4.9.2/test/log_test17.py +40ffc44eHWycPlgiEpt8pE8xYTbUkg tools/python/logging/logging-0.4.9.2/test/log_test18.py +40ffc44eeRuZcrB3tQzfrQnh22NBow tools/python/logging/logging-0.4.9.2/test/log_test19.py +40ffc44e6jQPP-ASsVux4-ERGuDrmQ tools/python/logging/logging-0.4.9.2/test/log_test2.py +40ffc44eNHf6r77J1VCNedKPTufY8Q tools/python/logging/logging-0.4.9.2/test/log_test20.py +40ffc44emS2gplqyEwbcLS43QNrnyA tools/python/logging/logging-0.4.9.2/test/log_test21.py +40ffc44e1Ojd79zACM2KAnXZyO3Nuw tools/python/logging/logging-0.4.9.2/test/log_test22.py +40ffc44ektXcwDnK4h4HqMHFSTA3BA tools/python/logging/logging-0.4.9.2/test/log_test3.ini +40ffc44e8ka-b5_nPYzWn0hXDSagMw tools/python/logging/logging-0.4.9.2/test/log_test3.py +40ffc44eVmFkQt7FaHxspmMV7IZLxw tools/python/logging/logging-0.4.9.2/test/log_test4.py +40ffc44eYJ7tjlUpS5bIF9I8YKK39g tools/python/logging/logging-0.4.9.2/test/log_test5.py +40ffc44eo9GvB3GvC2Aoaxu74ffS4A tools/python/logging/logging-0.4.9.2/test/log_test6.py +40ffc44eajjKGx6tj2nOVuYCfy-PoA tools/python/logging/logging-0.4.9.2/test/log_test7.py +40ffc44eEM_uMfIGRNoxRSP7_jpc7w tools/python/logging/logging-0.4.9.2/test/log_test8.py +40ffc44e4NBnAweOds3owURsSHZKyQ tools/python/logging/logging-0.4.9.2/test/log_test9.py +40ffc44eu_SYlzJ464qUFb8fdSGHsg tools/python/logging/logging-0.4.9.2/test/logconf.ini +40ffc44eTnvlvCSmjgGgfcOBm6SSAw tools/python/logging/logging-0.4.9.2/test/logconf.py +40ffc44egchRehfcmsPX0WdV06yp_w tools/python/logging/logging-0.4.9.2/test/logging.dtd +40ffc44ee9peTFswy96mwgBslmqEvQ tools/python/logging/logging-0.4.9.2/test/logging.xml +40ffc44ekRTWScJDGTe7k2aAp_ltRg tools/python/logging/logging-0.4.9.2/test/logrecv.ini +40ffc44eeQBA_QbbwrucZfYtksuEMA tools/python/logging/logging-0.4.9.2/test/logrecv.py +40ffc44eECASCQD_QL3wJd4dyK2KVg tools/python/logging/logging-0.4.9.2/test/myapp.py +40ffc44eUwKMOAwPTIBq0A8N8b56HQ tools/python/logging/logging-0.4.9.2/test/mymodule.py +40ffc44evyvayldKLSsizMmsDpBtkQ tools/python/logging/logging-0.4.9.2/test/stderr.exp +40ffc44eb-39RIR551oZoTiK11amSw tools/python/logging/logging-0.4.9.2/test/stdout.exp +40ffc44eGvzBilqBZEozKaMHz-HdxA tools/python/logging/logging-0.4.9.2/test/warn.ini +40ffc44eLXLuINsYi8eG0oJ6a2dSRA tools/python/logging/setup.py +40c9c469n2RRwCmjWdjdyyVRWKmgWg tools/python/setup.py +40dc4076hGpwa8-sWRN0jtXZeQJuKg tools/python/xen/__init__.py +40dfd40aMOhnw_cQLve9462UR5yYxQ tools/python/xen/lowlevel/__init__.py +3fbd0a42l40lM0IICw2jXbQBVZSdZg tools/python/xen/lowlevel/xc/xc.c +42a59f20JpCmm9DsCoVZowGafnhBuw tools/python/xen/lowlevel/xs/xs.c +40dc4076St6AmPTmQPrtQ6LGHPxGmw tools/python/xen/lowlevel/xu/__init__.py +40dc4076CwBYRTUQDdbdU1L6KcLgSw tools/python/xen/lowlevel/xu/xu.c +40d8915cyoVA0hJxiBFNymL7YvDaRg tools/python/xen/util/Brctl.py +40dfd40aGqGkiopOOgJxSF4iCbHM0Q tools/python/xen/util/__init__.py +4270e4efFg3wHCCxXpA0h6yoMTkeSQ tools/python/xen/util/blkif.py +4055ee4dwy4l0MghZosxoiu6zmhc9Q tools/python/xen/util/console_client.py +40c9c468IienauFHQ_xJIcqnPJ8giQ tools/python/xen/util/ip.py +42a4a80aiq_AT5whiSw-fKhNhRKITw tools/python/xen/util/mac.py +41dde8b0yuJX-S79w4xJKxBQ-Mhp1A tools/python/xen/util/memmap.py +4288c6fcB1kUAqX0gzU85GGxmamS4Q tools/python/xen/util/process.py +4059c6a0pnxhG8hwSOivXybbGOwuXw tools/python/xen/util/tempfile.py +4292565fDy2PaatawinIckKB0cKusg tools/python/xen/util/xpopen.py +4267a9b16u4IEPhjRryesk6A17sobA tools/python/xen/web/SrvBase.py +4267a9b1FfCUjW7m9anLERcx9lwhJg tools/python/xen/web/SrvDir.py +4267a9b1uMXIfzB6-81ZLqMCyTgJmw tools/python/xen/web/__init__.py +4267a9b1i_zVq36tt2iQejVuR6DGFw tools/python/xen/web/connection.py +4267a9b1KzSWZwWKYrGRc9bUhow_7Q tools/python/xen/web/http.py +4267a9b1KWNZhhmZnySe_nLASwO47g tools/python/xen/web/httpserver.py +4267a9b21miObgEJLAgtLTAKRBK8uQ tools/python/xen/web/protocol.py +4267a9b2pA22-lF37dB7XfapMNroGw tools/python/xen/web/reactor.py +4267a9b2AbH-azu7SXIUETXC39tu-A tools/python/xen/web/resource.py +4267a9b21XhDCpkVXtgea3ko8uS16g tools/python/xen/web/static.py +4267a9b2q7UA0cU5-KATCWX6O-TKsA tools/python/xen/web/tcp.py +4267a9b2XqvzKDWxfAdV22c3mO6NHA tools/python/xen/web/unix.py +40c9c468SNuObE_YWARyS0hzTPSzKg tools/python/xen/xend/Args.py +41597996WNvJA-DVCBmc0xU9w_XmoA tools/python/xen/xend/Blkctl.py +40c9c468Um_qc66OQeLEceIz1pgD5g tools/python/xen/xend/EventServer.py +40c9c468QJTEuk9g4qHxGpmIi70PEQ tools/python/xen/xend/PrettyPrint.py +40e15b7eeQxWE_hUPB2YTgM9fsZ1PQ tools/python/xen/xend/Vifctl.py +4270cc81xbweGYhsM4326N3dX1bGHQ tools/python/xen/xend/XendBootloader.py +42944ee8FQaAdZMF56O_WkWyBdCalA tools/python/xen/xend/XendCheckpoint.py +40c9c4688m3eqnC8fhLu1APm36VOVA tools/python/xen/xend/XendClient.py +40c9c468t6iIKTjwuYoe-UMCikDcOQ tools/python/xen/xend/XendConsole.py +40c9c468WnXs6eOUSff23IIGI4kMfQ tools/python/xen/xend/XendDB.py +40eee3a0sPO-WUu34uHUXOC7HliDGw tools/python/xen/xend/XendDmesg.py +40c9c468fSl3H3IypyT0ppkbb0ZT9A tools/python/xen/xend/XendDomain.py +40c9c4685ykq87_n1kVUbMr9flx9fg tools/python/xen/xend/XendDomainInfo.py +40f50d99YiiaMI1fZBh1VCDFLD57qg tools/python/xen/xend/XendError.py +40ffc44eGsgTEY355E3nN4mPLZHhMQ tools/python/xen/xend/XendLogging.py +40c9c468M96gA1EYDvNa5w5kQNYLFA tools/python/xen/xend/XendNode.py +4151594bhib4aUerB2SMKDl-iCtc4Q tools/python/xen/xend/XendProtocol.py +40c9c4686jruMyZIqiaZRMiMoqMJtg tools/python/xen/xend/XendRoot.py +40c9c468xzANp6o2D_MeCYwNmOIUsQ tools/python/xen/xend/XendVnet.py +40c9c468x191zetrVlMnExfsQWHxIQ tools/python/xen/xend/__init__.py +40c9c468S2YnCEKmk4ey8XQIST7INg tools/python/xen/xend/encode.py +42a475165HuglqWwNi2fjqNOIHbIKQ tools/python/xen/xend/image.py +4266169ezWIlXSfY50n6HSoVFbosmw tools/python/xen/xend/scheduler.py +40c9c468IxQabrKJSWs0aEjl-27mRQ tools/python/xen/xend/server/SrvConsole.py +40c9c4689Io5bxfbYIfRiUvsiLX0EQ tools/python/xen/xend/server/SrvConsoleDir.py +40c9c468woSmBByfeXA4o_jGf2gCgA tools/python/xen/xend/server/SrvDaemon.py +40eee3a0m38EwYXfCSFIjWNwG6jx_A tools/python/xen/xend/server/SrvDmesg.py +40c9c468TyHZUq8sk0FF_vxM6Sozrg tools/python/xen/xend/server/SrvDomain.py +40c9c469WzajDjutou3X7FmL9hMf3g tools/python/xen/xend/server/SrvDomainDir.py +40c9c4694eu5759Dehr4Uhakei0EMg tools/python/xen/xend/server/SrvNode.py +40c9c469TaZ83ypsrktmPSHLEZiP5w tools/python/xen/xend/server/SrvRoot.py +40c9c469W3sgDMbBJYQdz5wbQweL0Q tools/python/xen/xend/server/SrvServer.py +40c9c469aq7oXrE1Ngqf3_lBqL0RoQ tools/python/xen/xend/server/SrvVnetDir.py +4108f181GtRoD1U9TBuJXMfBbGJwdQ tools/python/xen/xend/server/SrvXendLog.py +40c9c469Y_aimoOFfUZoS-4eV8gEKg tools/python/xen/xend/server/__init__.py +40c9c4692hckPol_EK0EGB16ZyDsyQ tools/python/xen/xend/server/blkif.py +40c9c469N2-b3GqpLHHHPZykJPLVvA tools/python/xen/xend/server/channel.py +40c9c469hJ_IlatRne-9QEa0-wlquw tools/python/xen/xend/server/console.py +40c9c469UcNJh_NuLU0ytorM0Lk5Ow tools/python/xen/xend/server/controller.py +4266169exkN9o3hA8vxe8Er0BZv1Xw tools/python/xen/xend/server/event.py +40c9c469yrm31i60pGKslTi2Zgpotg tools/python/xen/xend/server/messages.py +40c9c46925x-Rjb0Cv2f1-l2jZrPYg tools/python/xen/xend/server/netif.py +40c9c469ZqILEQ8x6yWy0_51jopiCg tools/python/xen/xend/server/params.py +4266169eI_oX3YBjwaeC0V-THBRnjg tools/python/xen/xend/server/pciif.py +4294a1bf8rMUcddot-B2-pOxORimOg tools/python/xen/xend/server/relocate.py +41ee5e8dq9NtihbL4nWKjuSLOhXPUg tools/python/xen/xend/server/usbif.py +40c9c469LNxLVizOUpOjEaTKKCm8Aw tools/python/xen/xend/sxp.py +42a48d152jkT7ykQT_LWKnS-ojV_ZA tools/python/xen/xend/uuid.py +42a5a2c0ik9zrQvwjTUKDVVEQmvO2Q tools/python/xen/xend/xenstore/__init__.py +42a5a2c04xNCYAUXD0b9IDf4XekXRg tools/python/xen/xend/xenstore/xsnode.py +42a5a2c0-aP98db2PJIDxQJfTEMZ-A tools/python/xen/xend/xenstore/xsobj.py +42a5a2c0gxfQiAH_oVTShNPeG0LG2Q tools/python/xen/xend/xenstore/xsresource.py +40d05079aFRp6NQdo5wIh5Ly31c0cg tools/python/xen/xm/__init__.py +40cf2937gKQcATgXKGtNeWb1PDH5nA tools/python/xen/xm/create.py +40f552eariuUSB9TWqCPnDLz5zvxMw tools/python/xen/xm/destroy.py +40e41cd2w0I4En6qrJn4em8HkK_oxQ tools/python/xen/xm/help.py +40cf2937isyS250zyd0Q2GuEDoNXfQ tools/python/xen/xm/main.py +411b2c1ehdEGO_CwG0tvn85Q-Tfh5g tools/python/xen/xm/migrate.py +40cf2937PSslwBliN1g7ofDy2H_RhA tools/python/xen/xm/opts.py +40cf2937Z8WCNOnO2FcWdubvEAF9QQ tools/python/xen/xm/shutdown.py +41b88ba6_C4---jeA895Efg9YFZgKA tools/python/xen/xm/sysrq.py +422f27c8MDeRoOWZNdcRC5VDTcj3TQ tools/tests/Makefile +422f27c81CCtXt4Lthf7JF3Ajr0fUA tools/tests/test_x86_emulator.c +420b963dK3yGNtqxRM8npGZtrCQd1g tools/vnet/00INSTALL +41a21888_WlknVWjSxb32Fo13_ujsw tools/vnet/00README +420a9b706I-bN_uPdiy0m3rmDifNNg tools/vnet/INSTALL +41a21888bOiOJc7blzRbe4MNJoaYTw tools/vnet/Makefile +41a21888mg2k5HeiVjlQYEtJBZT4Qg tools/vnet/doc/vnet-module.txt +41a21888cuxfT8wjCdRR6V1lqf5NtA tools/vnet/doc/vnet-xend.txt +41a21888xEQJAIGktS6XQ4xz2TyA5g tools/vnet/examples/Makefile +41a21888FGQhPR5LJ1GRtOSIIN3QEw tools/vnet/examples/network-vnet +41a21888QPgKrulCfR9SY_pxZKU0KA tools/vnet/examples/vnet97.sxp +41a21888Gm0UBs1i7HqveT7Yz0u8DQ tools/vnet/examples/vnet98.sxp +41a21888r4oGPuGv2Lxl-thgV3H54w tools/vnet/examples/vnet99.sxp +40e1b09dMYB4ItGCqcMIzirdMd9I-w tools/vnet/libxutil/Makefile +40e033325Sjqs-_4TuzeUEprP_gYFg tools/vnet/libxutil/allocate.c +40e03332KYz7o1bn2MG_KPbBlyoIMA tools/vnet/libxutil/allocate.h +41a216cav5JJbtDQnusfuMa_1x_Xpw tools/vnet/libxutil/debug.h +40e9808eyjiahG5uF6AMelNVujBzCg tools/vnet/libxutil/enum.c +40e9808eZpbdn9q2KSSMGCNvY_ZgpQ tools/vnet/libxutil/enum.h +4284c2ecWyadIhHF1u_QSgWqIXkaLA tools/vnet/libxutil/fd_stream.c +4284c2ecEOOcF6fZUf_NsZzYAoNo-w tools/vnet/libxutil/fd_stream.h +40e03332p5Dc_owJQRuN72ymJZddFQ tools/vnet/libxutil/file_stream.c +40e03332jWfB2viAhLSkq1WK0r_iDQ tools/vnet/libxutil/file_stream.h +40e03332rUjNMGg11n2rN6V4DCrvOg tools/vnet/libxutil/gzip_stream.c +40e033321O5Qg22haLoq5lpmk4tooQ tools/vnet/libxutil/gzip_stream.h +40e9808easXCzzAZQodEfKAhgUXSPA tools/vnet/libxutil/hash_table.c +40e9808e94BNXIVVKBFHC3rnkvwtJg tools/vnet/libxutil/hash_table.h +40e03332ihnBGzHykVwZnFmkAppb4g tools/vnet/libxutil/iostream.c +40e03332UGwbLR4wsw4ft14p0Yw5pg tools/vnet/libxutil/iostream.h +40e0333245DLDzJemeSVBLuutHtzEQ tools/vnet/libxutil/kernel_stream.c +40e03332aK0GkgpDdc-PVTkWKTeOBg tools/vnet/libxutil/kernel_stream.h +40e9808epW9iHcLXuO3QfUfLzB7onw tools/vnet/libxutil/lexis.c +40e9808egccMhCizayQRGtpBA3L5MQ tools/vnet/libxutil/lexis.h +41a216caM4z39Fzjb91rv9Ed_4By1A tools/vnet/libxutil/socket_stream.c +41a216caqinvF1I5FQMHA4HTRz8MSA tools/vnet/libxutil/socket_stream.h +40e03332KT_tnnoAMbPVAZBB7kSOAQ tools/vnet/libxutil/string_stream.c +40e03332-VtK6_OZa1vMHXFil8uq6w tools/vnet/libxutil/string_stream.h +40e9808e5_PLdodqVOSx0b4T_f5aeg tools/vnet/libxutil/sxpr.c +40e9808e0O4sHZtkDv5hlSqjYcdQAQ tools/vnet/libxutil/sxpr.h +40ec1cc6SIiGbynOi-1NtPesOlzF-Q tools/vnet/libxutil/sxpr_parser.c +40ec1cc6wpvvGxZiq4EFvNOcw0tUFg tools/vnet/libxutil/sxpr_parser.h +40e03332Rkvq6nn_UNjzAAK_Tk9v1g tools/vnet/libxutil/sys_net.c +40e03332lQHvQHw4Rh7VsT1_sui29A tools/vnet/libxutil/sys_net.h +40e033321smklZd7bDSdWvQCeIshtg tools/vnet/libxutil/sys_string.c +40e03332h5V611rRWURRLqb1Ekatxg tools/vnet/libxutil/sys_string.h +41a216cayFe2FQroFuzvNPw1AvNiqQ tools/vnet/libxutil/util.c +41a216ca7mgVSnCBHPCLkGOIqPS1CQ tools/vnet/libxutil/util.h +41a21888c9TCRlUwJS9WBjB3e9aWgg tools/vnet/vnet-module/00README +41a21888K2ItolEkksc1MUqyTDI_Kg tools/vnet/vnet-module/Makefile +41a21888mJsFJD7bVMm-nrnWnalGBw tools/vnet/vnet-module/Makefile-2.4 +41a21888Znze3-UCCBZ-Nxpj-bNeHA tools/vnet/vnet-module/Makefile-2.6 +41a21889fwc1judJ7DYvyEviSJ3TPg tools/vnet/vnet-module/Makefile.ver +41a21889m_sYkdODF3j5uhMP-Guy9Q tools/vnet/vnet-module/Makefile.vnet +41a21889bXW2lC28U6KS_s5tOJ_W9Q tools/vnet/vnet-module/esp.c +41a21889L2MfLDsUFQxstt-0frIVmw tools/vnet/vnet-module/esp.h +41a21889V1jOsB2JExI-XQl720WHwg tools/vnet/vnet-module/etherip.c +41a21889IpMYbNufHMDXe2ndNw4JxA tools/vnet/vnet-module/etherip.h +41a21889LT9TNqO2EvTFIUTujrkX9w tools/vnet/vnet-module/if_etherip.h +41a21889PESythGZFG6kmSoOkkN2Nw tools/vnet/vnet-module/if_varp.h +41a21889nCPEomHqOyQ4vnhEm4II4g tools/vnet/vnet-module/linux/pfkeyv2.h +41a21889A_fw4pRmCbBfZdtRunM5Eg tools/vnet/vnet-module/random.c +41a218899Xy2dPKSu3pkuqaqkfKMTA tools/vnet/vnet-module/random.h +41a21889rIH5S1dv8ygdSsTGNlg0JA tools/vnet/vnet-module/sa.c +41a218896Z4vxy6gnV9h0fWRWu0lKQ tools/vnet/vnet-module/sa.h +41a21889qFD8BTbDpB55uVmSVDEsgw tools/vnet/vnet-module/sa_algorithm.c +41a21889r2AwTe-OCSSVMxBzz8uDtw tools/vnet/vnet-module/sa_algorithm.h +41a21889tvjtL7O8tMveVB8MdSKPnQ tools/vnet/vnet-module/skb_context.c +41a21889lD_QOUz2Msd7fB5rJQzfxA tools/vnet/vnet-module/skb_context.h +41a21889F1r1xnJamzdeuClR8MNwQg tools/vnet/vnet-module/skb_util.c +41a21889sS4bjVqEna24sS8NpV7SRA tools/vnet/vnet-module/skb_util.h +41a21889MDawEK3J_f_oAGnZznhG2w tools/vnet/vnet-module/tunnel.c +41a218896TlHXpVVqF50uz_u_WMXRw tools/vnet/vnet-module/tunnel.h +41a21889nQYbJbqrOApg_RbkwPtXGg tools/vnet/vnet-module/varp.c +41a21889Pev5MJlqqass6CxN4mmvPw tools/vnet/vnet-module/varp.h +41a21889GbsHHfkpA-PkOvltfEwpMA tools/vnet/vnet-module/varp_socket.c +41a21889sknn8zd5xCJlpQbs7MvxKg tools/vnet/vnet-module/vif.c +41a21889VsKKWpe6rcXOSLPy2FuNWQ tools/vnet/vnet-module/vif.h +41a21889dgkOyuSTVqy7D8TPIzrUyw tools/vnet/vnet-module/vnet.c +41a21889ocAdwk7V1nNt4iBpmYW-Mw tools/vnet/vnet-module/vnet.h +41a21889YrTiC0ArJSGFtiaHz2j1qQ tools/vnet/vnet-module/vnet_dev.c +41a21889rHT4vrC4VAfk7-xP_K5aBg tools/vnet/vnet-module/vnet_dev.h +41a21889qJj6GjT2f5hMHRvPS1AW4w tools/vnet/vnet-module/vnet_ioctl.c +41a2188a8W4xYB0LYm512agtoEv52g tools/vnet/vnet-module/vnet_ioctl.h +41a2188aFF_1T9OgpqUjjjaCqKB8lw tools/vnet/vnetd/Makefile +41a2188a9j84qS4CxqMLVCvyGpA93w tools/vnet/vnetd/connection.c +41a2188atexNEami9TNVYNkRSb7Bqg tools/vnet/vnetd/connection.h +41a2188abgYpITSrWoMGHHrM56nklw tools/vnet/vnetd/marshal.c +41a2188aUbOi5tAYwOS4aPixo1EGwQ tools/vnet/vnetd/marshal.h +41a2188aDJlSVB1s_st2MSWxW8kMwg tools/vnet/vnetd/select.c +41a2188aE9LUDdSSwNT3BWVWCvGSnQ tools/vnet/vnetd/select.h +41a2188aTbMKv_Eig12dSrBUEBl1Jg tools/vnet/vnetd/timer.c +41a2188aIzBGqQ6DUVzCxfBsN0Q6Ww tools/vnet/vnetd/timer.h +41a2188aIf3Xk6uvk7KzjdpOsflAEw tools/vnet/vnetd/vcache.c +41a2188ar6_vOO3_tEJQjmFVU3409A tools/vnet/vnetd/vcache.h +41a2188aETrGU60X9WtGhYVfU7z0Pw tools/vnet/vnetd/vnetd.c +41a2188ahYjemudGyB7078AWMFR-0w tools/vnet/vnetd/vnetd.h +41d58ba63w1WfBmd6Cr_18nhLNv7PA tools/xcs/Makefile +41d58ba6NxgkfzD_rmsGjgd_zJ3H_w tools/xcs/bindings.c +41d58ba6I2umi60mShq4Pl0RDg7lzQ tools/xcs/connection.c +41d58ba6YyYu53bFuoIAw9hNNmneEg tools/xcs/ctrl_interface.c +423d82c7ZKf2bDOxRcR4Nc1kN5StNQ tools/xcs/dump.c +423d82c7U__LHy9dvkUNUvSIhOqnBQ tools/xcs/dump.h +41d58ba6Ru9ZbhTjgYX_oiszSIwCww tools/xcs/evtchn.c +41d58ba6x9KO1CQBT7kKOKq_pJYC3g tools/xcs/xcs.c +41d58ba6R6foSMtSFEcu-yxWFrT8VQ tools/xcs/xcs.h +41d58ba6qyr2BkTcH2WlNBYLRyl2Yw tools/xcs/xcs_proto.h +41d58ba6ijEF6fedqRO5vFu7uCirZg tools/xcs/xcsdump.c +4292540couq-V0TPwyQ6bspNEWNcvw tools/xcutils/Makefile +42925407VysDb9O06OK_RUzTZxfLoA tools/xcutils/xc_restore.c +42936745WTLYamYsmXm_JGJ72JX-_Q tools/xcutils/xc_save.c +42a57d97mxMTlPnxBKep6R4ViI5rjg tools/xenstore/.gdbinit +42a57d97ZEoHuhMAFTuBMlLzA9v_ng tools/xenstore/Makefile +42a57d97ccA4uY-RxONvIH0P8U0gqg tools/xenstore/TODO +42a57d972RzmyLgsoH9b8qqk-UjcCA tools/xenstore/fake_libxc.c +42a57d97IjoPvbIVc4BUzwoKyM0VSw tools/xenstore/list.h +42a57d97fKgtf0HQLiQkAkVsOvuSyA tools/xenstore/talloc.c +42a57d98U3p0XP6xzCybTuaVQscUdw tools/xenstore/talloc.h +42a57d98LFN6Mug-uR4xgAxCE7lwUg tools/xenstore/talloc_guide.txt +42a57d98S69vKJYwO_WUjoFQZ6KzQg tools/xenstore/testsuite/01simple.sh +42a57d98BHcFpZz_fXHweylUEUU97Q tools/xenstore/testsuite/02directory.sh +42a57d98ua4Xeb6pmtbFNTAI833dyw tools/xenstore/testsuite/03write.sh +42a57d98nbuCUsVT0RJj1zA1JyMDsw tools/xenstore/testsuite/04rm.sh +42a57d98_ULKHP3_uX1PK2nPMTzWSQ tools/xenstore/testsuite/05filepermissions.sh +42a57d98YGCLyTDSGmoyFqRqQUlagQ tools/xenstore/testsuite/06dirpermissions.sh +42a57d98fdO519YyATk4_Zwr1STNfQ tools/xenstore/testsuite/07watch.sh +42a57d98zZUtvirUMjmHxFphJjmO7Q tools/xenstore/testsuite/08transaction.sh +42a57d98sn9RbpBgHRv1D99Kt7LwYA tools/xenstore/testsuite/09domain.sh +42b2a4bfxAwHlRgd31SJBgFnj8g3MA tools/xenstore/testsuite/10domain-homedir.sh +42b2a4bfHbUp4IB8tfNIa8j37S27fw tools/xenstore/testsuite/11domain-watch.sh +42b2a4bfhrB5v6uYKPj6jSO_Ng0PAA tools/xenstore/testsuite/12readonly.sh +42a57d98tSuoFCHnnM2GgENXJrRQmw tools/xenstore/testsuite/test.sh +42a57d98zxDP2Ti7dTznGROi66rUGw tools/xenstore/utils.c +42a57d98SDvOYCEjmCjwHSk6390GLA tools/xenstore/utils.h +42a57d98hFKbOY9D0mCE4H4NDoKr1w tools/xenstore/xenstored.h +42a57d981KFHLmJ0CjKkn1_gZhYvdw tools/xenstore/xenstored_core.c +42a57d98bcgE13vYaFxGTusmWbrFDA tools/xenstore/xenstored_core.h +42a57d98cD9wOFyRYfaEP0QgtqL1Xw tools/xenstore/xenstored_domain.c +42a57d98noLWvXU8ePbcqvvmu4p2Gw tools/xenstore/xenstored_domain.h +42a57d98kxHaQ1ApS7RpqmFoEnDmbg tools/xenstore/xenstored_test.h +42a57d981c9P3aFkWtxWEIRUapt_FQ tools/xenstore/xenstored_transaction.c +42a57d99pVo__10bbckp_b_rm6i59A tools/xenstore/xenstored_transaction.h +42a57d99izTIjWfG-IjQAPqYlDWJNg tools/xenstore/xenstored_watch.c +42a57d99-zLxBjzC7rfj_perV-orUg tools/xenstore/xenstored_watch.h +42a57d99BnkhISKgCCRcUqhteyuxCw tools/xenstore/xs.c +42a57d99FyiYSz9AkKKROrRydnA-gQ tools/xenstore/xs.h +42b29922EYQ87Y4fwZXSkEHgtQk7CQ tools/xenstore/xs_dom0_test.c +42a57d99SrtsJCDUlKyRPf3EX86A1Q tools/xenstore/xs_lib.c +42a57d99L2pYeMFyjQ_4Rnb17xTSMg tools/xenstore/xs_lib.h +42a57d99Kl6Ba8oCHv2fggl7QN9QZA tools/xenstore/xs_random.c +42a57d99SHYR1lQOD0shuErPDg9NKQ tools/xenstore/xs_stress.c +42a57d996aBawpkQNOWkNWXD6LrhPg tools/xenstore/xs_test.c +42b2a4bfp-lhxBfenUyHlvw7bPcVgA tools/xenstore/xs_watch_stress.c +403a3edbrr8RE34gkbR40zep98SXbg tools/xentrace/Makefile +40a107afN60pFdURgBv9KwEzgRl5mQ tools/xentrace/formats +420d52d2_znVbT4JAPIU36vQOme83g tools/xentrace/xenctx.c +4050c413PhhLNAYk3TEwP37i_iLw9Q tools/xentrace/xentrace.8 +403a3edbVpV2E_wq1zeEkJ_n4Uu2eg tools/xentrace/xentrace.c +403a3edblCUrzSj0mmKhO5HOPrOrSQ tools/xentrace/xentrace_format +4050c413NtuyIq5lsYJV4P7KIjujXw tools/xentrace/xentrace_format.1 +3f72f1bdJPsV3JCnBqs9ddL9tr6D2g xen/COPYING +3ddb79bcbOVHh38VJzc97-JEGD4dJQ xen/Makefile +3ddb79bcWnTwYsQRWl_PaneJfa6p0w xen/Rules.mk +42b742f6XHTfIEm_hUPtzjKr37LVhw xen/acm/Makefile +42b742f6tHzn0fZWH3TjPva8gbqpow xen/acm/acm_chinesewall_hooks.c +42b742f6bM8kZwuIUbepHZ8SQQkjJA xen/acm/acm_core.c +42b742f6cwfrPubqH47gQpke8xkYSA xen/acm/acm_null_hooks.c +42b742f69qSxm5MM-wtPaWtCqyI3KA xen/acm/acm_policy.c +42b742f6VbmdlwekQRMhXugjcu9QXg xen/acm/acm_simple_type_enforcement_hooks.c +421098b25A0RvuYN3rP28ga3_FN3_Q xen/arch/ia64/Makefile +421098b2okIeYXS9w9avmSozls61xA xen/arch/ia64/Rules.mk +421098b21p12UcKjHBrLh_LjlvNEwA xen/arch/ia64/acpi.c +421098b26C_0yoypoHqjDcJA9UrG_g xen/arch/ia64/asm-offsets.c +421098b2PHgzf_Gg4R65YRNi_QzMKQ xen/arch/ia64/dom0_ops.c +421098b2O7jsNfzQXA1v3rbAc1QhpA xen/arch/ia64/dom_fw.c +421098b2ZlaBcyiuuPr3WpzaSDwg6Q xen/arch/ia64/domain.c +42b33bb9GLR-tzcaHalk8fz9cgK0aA xen/arch/ia64/grant_table.c +42a08294zRikvZk_CR1iVojHjcVFZw xen/arch/ia64/hpsimserial.c +4239e98a_HX-FCIcXtVqY0BbrDqVug xen/arch/ia64/hypercall.c +4295e18f42gf1T-8W97A3KSlBaY1tA xen/arch/ia64/hyperprivop.S +421098b3LYAS8xJkQiGP7tiTlyBt0Q xen/arch/ia64/idle0_task.c +421098b3ys5GAr4z6_H1jD33oem82g xen/arch/ia64/irq.c +4272a8e4lavI6DrTvqaIhXeR5RuKBw xen/arch/ia64/ivt.S +421098b3Heh72KuoVlND3CH6c0B0aA xen/arch/ia64/lib/Makefile +42b2eaeez20voHWlBDjrqORiNg6uhg xen/arch/ia64/mm.c +421098b3O0MYMUsmYVFy84VV_1gFwQ xen/arch/ia64/mm_init.c +428b9f38Gp0KcPokG9Nq5v1rGk2FkA xen/arch/ia64/mmio.c +425ae516maKAsHBJVSzs19cdRgt3Nw xen/arch/ia64/patch/linux-2.6.11/cpumask.h +425ae516cGqvMzGtihTEsQXAXsuOhQ xen/arch/ia64/patch/linux-2.6.11/efi.c +425ae516Y1A4q4_Kfre3qnDj7lbHJg xen/arch/ia64/patch/linux-2.6.11/entry.S +428bb037eJ4qs48I-tUdhht5_95obA xen/arch/ia64/patch/linux-2.6.11/entry.h +428bb037jPbybWNkNymaqkFr83vT6Q xen/arch/ia64/patch/linux-2.6.11/gcc_intrin.h +425ae516txAP-owjzpTJ7ThfzWR8nw xen/arch/ia64/patch/linux-2.6.11/hardirq.h +425ae516PDO1ESDHXHVeDNvlqUfmdQ xen/arch/ia64/patch/linux-2.6.11/head.S +425ae516JR7HWvt1zxJ-wLvEWmJGgg xen/arch/ia64/patch/linux-2.6.11/hpsim_ssc.h +428bb037UxfxIhZaslk-qHazO4w0yg xen/arch/ia64/patch/linux-2.6.11/ia64regs.h +425ae516AHRNmaVuZjJY-9YjmKRDqg xen/arch/ia64/patch/linux-2.6.11/interrupt.h +425ae516U2wFUzrUJQUpy3z38jZHsQ xen/arch/ia64/patch/linux-2.6.11/io.h +425ae516GGRmXijPBLC5ii6yWOn0rg xen/arch/ia64/patch/linux-2.6.11/irq_ia64.c +425ae516atiECmpn_6nZDw4kkmbJ6g xen/arch/ia64/patch/linux-2.6.11/kregs.h +425ae516Je2zI-Iw30_uGhvUYdlCZQ xen/arch/ia64/patch/linux-2.6.11/mca_asm.h +425ae5160-9wHxh0tOnIjavEjt6W0A xen/arch/ia64/patch/linux-2.6.11/minstate.h +425ae516N7SaORdbodDr90tmtCzYXw xen/arch/ia64/patch/linux-2.6.11/mm_contig.c +425ae516WDLrfEA4zr40d00z0VIWPg xen/arch/ia64/patch/linux-2.6.11/page.h +425ae516pVQ75NhdItT593SiWI0lbQ xen/arch/ia64/patch/linux-2.6.11/pal.S +428bb037THuiyhERFP8RhRgapNkWXg xen/arch/ia64/patch/linux-2.6.11/pal.h +425ae516QfmjiF_a-mabAXqV8Imzkg xen/arch/ia64/patch/linux-2.6.11/pgalloc.h +425ae516EWaNOBEnc1xnphTbRmNZsw xen/arch/ia64/patch/linux-2.6.11/processor.h +428bb037KSxe7_UyqseK5bWhGe3KwA xen/arch/ia64/patch/linux-2.6.11/ptrace.h +425ae516LecDyXlwh3NLBtHZKXmMcA xen/arch/ia64/patch/linux-2.6.11/series +425ae516RFiPn2CGkpJ21LM-1lJcQg xen/arch/ia64/patch/linux-2.6.11/setup.c +42a8bcc8E6zmTKC5xgOcFLcnzbhVEw xen/arch/ia64/patch/linux-2.6.11/sn_sal.h +425ae516p4ICTkjqNYEfYFxqULj4dw xen/arch/ia64/patch/linux-2.6.11/system.h +425ae516juUB257qrwUdsL9AsswrqQ xen/arch/ia64/patch/linux-2.6.11/time.c +425ae5167zQn7zYcgKtDUDX2v-e8mw xen/arch/ia64/patch/linux-2.6.11/tlb.c +425ae5162bIl2Dgd19x-FceB4L9oGw xen/arch/ia64/patch/linux-2.6.11/types.h +42ae01f01KDfSgVQnscwJ0psRmEaCw xen/arch/ia64/patch/linux-2.6.11/uaccess.h +425ae516cFUNY2jHD46bujcF5NJheA xen/arch/ia64/patch/linux-2.6.11/unaligned.c +421098b39QFMC-1t1r38CA7NxAYBPA xen/arch/ia64/patch/linux-2.6.7/bootmem.h +421098b3SIA1vZX9fFUjo1T3o_jMCQ xen/arch/ia64/patch/linux-2.6.7/current.h +421098b3ZBl80iPuSeDU_Id5AgZl0w xen/arch/ia64/patch/linux-2.6.7/efi.c +421098b3VUmGT2Jdy4SWeDTwcCHaqg xen/arch/ia64/patch/linux-2.6.7/efi.h +421098b3dPmLXyvKEmvH_2XALeIYlg xen/arch/ia64/patch/linux-2.6.7/entry.S +421098b3eoimqDUiVw9p_RADfvICwQ xen/arch/ia64/patch/linux-2.6.7/gcc_intrin.h +421098b3ZcvjJahWCTvmpNb1RWArww xen/arch/ia64/patch/linux-2.6.7/hardirq.h +421098b3gZO0kxetbOVLlpsFkf0PWQ xen/arch/ia64/patch/linux-2.6.7/head.S +421098b3Hz4y9vxFo6rZ03PXkFF6-w xen/arch/ia64/patch/linux-2.6.7/hpsim_irq.c +421098b3mn7maohx9UTPjTZEVov-kg xen/arch/ia64/patch/linux-2.6.7/hpsim_ssc.h +421098b4HWTbzGFd8fAT27GIavt61g xen/arch/ia64/patch/linux-2.6.7/hw_irq.h +421098b4wVriEglxpLtvD9NMUr76Ew xen/arch/ia64/patch/linux-2.6.7/ide.h +421098b4ckKw7I-p3APMhFOuefMWMA xen/arch/ia64/patch/linux-2.6.7/init_task.c +421098b4CSuWMM-4vHvAa4F4luDOLQ xen/arch/ia64/patch/linux-2.6.7/init_task.h +421098b4x5Hnxgvf22nhvxzPMszw1g xen/arch/ia64/patch/linux-2.6.7/interrupt.h +421098b4BgHuG3PiGY2QOQCNEqMYsA xen/arch/ia64/patch/linux-2.6.7/io.h +421098b4JnNHXkW2732slXwxMX79RA xen/arch/ia64/patch/linux-2.6.7/irq.h +421098b4H-Upf_mxF2apXBffvYadUw xen/arch/ia64/patch/linux-2.6.7/irq_ia64.c +421098b4C0Lc3xag4Nm-_yC9IMTDqA xen/arch/ia64/patch/linux-2.6.7/ivt.S +421098b4weyd0AQTjPLmooChUJm13Q xen/arch/ia64/patch/linux-2.6.7/kregs.h +421098b4vHCejAUPem4w8p5V-AD1Ig xen/arch/ia64/patch/linux-2.6.7/lds.S +421098b4uooGl5X8zZM96qpmS0Furg xen/arch/ia64/patch/linux-2.6.7/linuxtime.h +424dad01Txy4dcgKHGkTx1L2z7GuQA xen/arch/ia64/patch/linux-2.6.7/mca_asm.h +421098b4awnw3Jf23gohJWoK8s7-Qg xen/arch/ia64/patch/linux-2.6.7/minstate.h +421098b5hIfMbZlQTfrOKN4BtzJgDQ xen/arch/ia64/patch/linux-2.6.7/mm_bootmem.c +421098b53IVBoQPcDjFciZy86YEhRQ xen/arch/ia64/patch/linux-2.6.7/mm_contig.c +421098b5pZw41QuBTvhjvSol6aAHDw xen/arch/ia64/patch/linux-2.6.7/mmzone.h +421098b5B_dClZDGuPYeY3IXo8Hlbw xen/arch/ia64/patch/linux-2.6.7/page.h +421098b5saClfxPj36l47H9Um7h1Fw xen/arch/ia64/patch/linux-2.6.7/page_alloc.c +424dab78_JGGpJDaAb6ZtkPJAkAKOA xen/arch/ia64/patch/linux-2.6.7/pal.S +4241ed05l9ZdG7Aj0tygIxIwPRXhog xen/arch/ia64/patch/linux-2.6.7/pgalloc.h +421098b5OkmcjMBq8gxs7ZrTa4Ao6g xen/arch/ia64/patch/linux-2.6.7/processor.h +421098b51RLB6jWr6rIlpB2SNObxZg xen/arch/ia64/patch/linux-2.6.7/sal.h +421098b5WFeRnwGtZnHkSvHVzA4blg xen/arch/ia64/patch/linux-2.6.7/setup.c +421098b5Jm2i8abzb0mpT6mlEiKZDg xen/arch/ia64/patch/linux-2.6.7/slab.c +421098b5w6MBnluEpQJAWDTBFrbWSQ xen/arch/ia64/patch/linux-2.6.7/slab.h +4241eb584dcZqssR_Uuz2-PgMJXZ5Q xen/arch/ia64/patch/linux-2.6.7/swiotlb.c +421098b5Cg7nbIXm3RhUF-uG3SKaUA xen/arch/ia64/patch/linux-2.6.7/system.h +421098b5XrkDYW_Nd9lg5CDgNzHLmg xen/arch/ia64/patch/linux-2.6.7/time.c +421098b5_kFbvZIIPM3bdCES1Ocqnw xen/arch/ia64/patch/linux-2.6.7/tlb.c +421098b5DWbgK-tBR4um8PEAqPwqTA xen/arch/ia64/patch/linux-2.6.7/types.h +421098b5il9YfZM0HpeCnaMgVN_q9g xen/arch/ia64/patch/linux-2.6.7/unaligned.c +421098b65M5cPramsLGbODg8lQwUjQ xen/arch/ia64/patch/linux-2.6.7/wait.h +42a0d69cCiNxr2Y1GY1khO7qRiNkbw xen/arch/ia64/pcdp.c +421098b6cYDwzXP86ViTLlTO2x7ovA xen/arch/ia64/pdb-stub.c +41a26ebcqaSGVQ8qTMwpPwOJSJ7qSw xen/arch/ia64/privop.c +41a26ebc4BOHDUsT0TSnryPeV2xfRA xen/arch/ia64/process.c +41a26ebcJ30TFl1v2kR8rqpEBvOtVw xen/arch/ia64/regionreg.c +421098b69pUiIJrqu_w0JMUnZ2uc2A xen/arch/ia64/smp.c +421098b6_ToSGrf6Pk1Uwg5aMAIBxg xen/arch/ia64/smpboot.c +42a8bd43dIEIsS-EoQqt5Df1RTr5Hg xen/arch/ia64/sn_console.c +428b9f38JJDW35iDn5DlfXTu700rkQ xen/arch/ia64/tools/README.RunVT +421098b6AUdbxR3wyn1ATcmNuTao_Q xen/arch/ia64/tools/README.xenia64 +42376c6dfyY0eq8MS2dK3BW2rFuEGg xen/arch/ia64/tools/README.xenia64linux +421098b6rQ2BQ103qu1n1HNofbS2Og xen/arch/ia64/tools/mkbuildtree +4252ace7eQQmDdwOqsKWdHo8JpKqnQ xen/arch/ia64/tools/privify/Makefile +4252ace76fKAIizJRS6S84KbK6yXYw xen/arch/ia64/tools/privify/README.privify +4252ace7uR0Th8eEXiLyafNPTDYrOg xen/arch/ia64/tools/privify/privify.c +4252ace7H2dIMPFeFwczAVoP4yAHxA xen/arch/ia64/tools/privify/privify.h +4252ace74lKUPFnO8PmF0Dtpk7Xkng xen/arch/ia64/tools/privify/privify_elf64.c +41a26ebc--sjlYZQxmIxyCx3jw70qA xen/arch/ia64/vcpu.c +421098b6M2WhsJ_ZMzFamAQcdc5gzw xen/arch/ia64/vhpt.c +428b9f38PglyXM-mJJfo19ycuQrEhw xen/arch/ia64/vlsapic.c +428b9f38EmpBsMHL3WbOZoieteBGdQ xen/arch/ia64/vmmu.c +428b9f38hU-X5aX0MIY3EU0Yw4PjcA xen/arch/ia64/vmx_entry.S +42b2eaf3YR7Sfx76IvKeqfHJiU6qXw xen/arch/ia64/vmx_hypercall.c +428b9f38S76bWI96g7uPLmE-uAcmdg xen/arch/ia64/vmx_init.c +428b9f385AMSyCRYBsckQClQY4ZgHA xen/arch/ia64/vmx_interrupt.c +428b9f380IOjPmj0N6eelH-WJjl1xg xen/arch/ia64/vmx_ivt.S +428b9f38Y7tp9uyNRdru3lPDXLjOCA xen/arch/ia64/vmx_minstate.h +428b9f38H9Pz0ZhRUT0-11A6jceE1w xen/arch/ia64/vmx_phy_mode.c +428b9f38pXU56r2OjoFW2Z8H1XY17w xen/arch/ia64/vmx_process.c +428b9f38GmZxD-GMDnQB3m7tOoukTA xen/arch/ia64/vmx_utility.c +428b9f38Pflg6Z4CtXeVGv7dyEOM4g xen/arch/ia64/vmx_vcpu.c +428b9f38Y7p7hXHWx9QF_oYUjdD__g xen/arch/ia64/vmx_virt.c +428b9f38EL7qKbbKkhBNr0KzMLS4Gg xen/arch/ia64/vmx_vsa.S +428b9f3805WejQ1E-OqAPANPAu8vPw xen/arch/ia64/vtlb.c +41a26ebc4jSBGQOuyNIPDST58mNbBw xen/arch/ia64/xenasm.S +4272adaeit9raZ9KnjO_wR4Ii9LJNQ xen/arch/ia64/xenirq.c +427162263zDUiPmTj-lP4eGyXs5eIg xen/arch/ia64/xenmem.c +421098b6mWyFPtkhPz9h1LCmKpoCLg xen/arch/ia64/xenmisc.c +421098b6lY2JzrV1oFDbrt7XQhtElg xen/arch/ia64/xensetup.c +427664f5eygrc3nEhI3RKf0Y37PzyA xen/arch/ia64/xentime.c +3ddb79bcZbRBzT3elFWSX7u6NtMagQ xen/arch/x86/Makefile +3ddb79bcBQF85CfLS4i1WGZ4oLLaCA xen/arch/x86/Rules.mk +3e5636e5FAYZ5_vQnmgwFJfSdmO5Mw xen/arch/x86/acpi/boot.c +3ddb79bcsjinG9k1KcvbVBuas1R2dA xen/arch/x86/apic.c +42360b3244-Q6BpEKhR_A1YtG1wPNQ xen/arch/x86/audit.c +4299ca46lrYcJPWxWgB4KTNkRQ7CwQ xen/arch/x86/bitops.c +3ddb79c4yGZ7_22QAFFwPzqP4NSHwA xen/arch/x86/boot/mkelf32.c +3ddb79bcSC_LvnmFlX-T5iTgaR0SKg xen/arch/x86/boot/x86_32.S +40e42bdbNu4MjI750THP_8J1S-Sa0g xen/arch/x86/boot/x86_64.S +4107c15e-VmEcLsE-7JCXZaabI8C7A xen/arch/x86/cdb.c +4295ecb1Ynez_TseZvDdjD7PzVMDiw xen/arch/x86/cpu/amd.c +4295ecb1KPPNny26nBEJzK4pAG-KXQ xen/arch/x86/cpu/centaur.c +4295ecb1QnJx9cbqCJQ1o4TTFQL5Vg xen/arch/x86/cpu/common.c +4295ecb1ZIJLN5uklV1xompN7DN1WQ xen/arch/x86/cpu/cpu.h +4295ecb1g6Ye-zy_oXVQQaKw4AtDmw xen/arch/x86/cpu/cyrix.c +4295ecb1MOdQxXznHu3g-p5DzhMv8g xen/arch/x86/cpu/intel.c +4295ecb1LsW7ov9JOtRP8euvJKbgbQ xen/arch/x86/cpu/intel_cacheinfo.c +4295ecb1AeClyruqwLz-xDthMZ5eoA xen/arch/x86/cpu/rise.c +4295ecb1GO92quFeyoVz2LsPQcFuHg xen/arch/x86/cpu/transmeta.c +3ddb79bcUrk2EIaM5VsT6wUudH1kkg xen/arch/x86/delay.c +4294b5ee34eGSh5YNDKMSxBIOycluw xen/arch/x86/dmi_scan.c +40e34414WiQO4h2m3tcpaCPn7SyYyg xen/arch/x86/dom0_ops.c +3ddb79bc1_2bAt67x9MFCP4AZrQnvQ xen/arch/x86/domain.c +4202391dkvdTZ8GhWXe3Gqf9EOgWXg xen/arch/x86/domain_build.c +41d3eaae6GSDo3ZJDfK3nvQsJux-PQ xen/arch/x86/e820.c +3ddb79bcY5zW7KhvI9gvfuPi3ZumEg xen/arch/x86/extable.c +3fe443fdDDb0Sw6NQBCk4GQapayfTA xen/arch/x86/flushtlb.c +4294b5ee0qd8iX0Z4a6XpmbS-7r9CQ xen/arch/x86/genapic/bigsmp.c +4294b5eeRyEW29Ue9ykTGCgG4PD2OQ xen/arch/x86/genapic/default.c +4294b5eeGvaKRkeAfnvIbNqPn__sLA xen/arch/x86/genapic/es7000.c +4294b5eezzXwm3k_PG72kjEidxESjA xen/arch/x86/genapic/es7000.h +4294b5eeUsoC73al4Bsg2E1NKy0oYQ xen/arch/x86/genapic/es7000plat.c +4294b5ee8T56zBzx90toTSftqiKoVA xen/arch/x86/genapic/probe.c +4294b5ee2PhCf6SsLxck58bGLR8hYA xen/arch/x86/genapic/summit.c +3ddb79bcesE5E-lS4QhRhlqXxqj9cA xen/arch/x86/i387.c +3ddb79bcCAq6IpdkHueChoVTfXqEQQ xen/arch/x86/i8259.c +3ddb79bcBit4xJXbwtX0kb1hh2uO1Q xen/arch/x86/idle0_task.c +3ddb79bcKIkRR0kqWaJhe5VUDkMdxg xen/arch/x86/io_apic.c +3ddb79bdqfIcjkz_h9Hvtp8Tk_19Zw xen/arch/x86/irq.c +41d54a76qfpO0VnbL2tYs0Jgt3W3XA xen/arch/x86/microcode.c +40ec29ffuOa1ZvmJHzFKyZn4k_RcXg xen/arch/x86/mm.c +3ddb79bdS4UeWWXDH-FaBKqcpMFcnw xen/arch/x86/mpparse.c +41aaf566Z4sTDgJ77eEg0TzzQ1ka6Q xen/arch/x86/mtrr/amd.c +41aaf566TOpOBXT00wwQGUh20f1rlA xen/arch/x86/mtrr/centaur.c +41aaf566yhr0zKYnGVSOQpkWMM0Kiw xen/arch/x86/mtrr/cyrix.c +41aaf567t3hFKsyfEFoy3KAnB-bj8w xen/arch/x86/mtrr/generic.c +41aaf567tqrKGSTDK8OVeAbpeoccPw xen/arch/x86/mtrr/main.c +41aaf567a36esU-rUK7twPiv-yTFyw xen/arch/x86/mtrr/mtrr.h +41aaf567DcTL6pqVtLZJI5cSryyA1A xen/arch/x86/mtrr/state.c +3f12cff65EV3qOG2j37Qm0ShgvXGRw xen/arch/x86/nmi.c +4051bcecFeq4DE70p4zGO5setf47CA xen/arch/x86/physdev.c +3ddb79bc7KxGCEJsgBnkDX7XjD_ZEQ xen/arch/x86/rwlock.c +3ddb79bcrD6Z_rUvSDgrvjyb4846Eg xen/arch/x86/setup.c +405b8599xI_PoEr3zZoJ2on-jdn7iw xen/arch/x86/shadow.c +3ddb79bcSx2e8JSR3pdSGa8x1ScYzA xen/arch/x86/smp.c +3ddb79bcfUN3-UBCPzX26IU8bq-3aw xen/arch/x86/smpboot.c +4266673dBje6CS6CwQ3lEdvWbf5Dcw xen/arch/x86/string.c +3ddb79bc-Udq7ol-NX4q9XsYnN7A2Q xen/arch/x86/time.c +3ddb79bccYVzXZJyVaxuv5T42Z1Fsw xen/arch/x86/trampoline.S +3ddb79bcOftONV9h4QCxXOfiT0h91w xen/arch/x86/traps.c +40e96d3ahBTZqbTViInnq0lM03vs7A xen/arch/x86/usercopy.c +41c0c411tD3C7TpfDMiFTf7BaNd_Dg xen/arch/x86/vmx.c +420951dcf1rSGnCH0AEYN2KjWGLG6A xen/arch/x86/vmx_intercept.c +41c0c411ODt8uEmV-yUxpQLpqimE5Q xen/arch/x86/vmx_io.c +41f97ef5139vN42cOYHfX_Ac8WOOjA xen/arch/x86/vmx_platform.c +41c0c4128URE0dxcO15JME_MuKBPfg xen/arch/x86/vmx_vmcs.c +419cbedeQDg8IrO3izo3o5rQNlo0kQ xen/arch/x86/x86_32/asm-offsets.c +3e32af9aRnYGl4GMOaDKp7JdfhOGhg xen/arch/x86/x86_32/domain_page.c +3ddb79bcecupHj56ZbTa3B0FxDowMg xen/arch/x86/x86_32/entry.S +3ddb79bcHwuCQDjBICDTSis52hWguw xen/arch/x86/x86_32/mm.c +40f92331jfOlE7MfKwpdkEb1CEf23g xen/arch/x86/x86_32/seg_fixup.c +42000d3ckiFc1qxa4AWqsd0t3lxuyw xen/arch/x86/x86_32/traps.c +3ddb79bcOMCu9-5mKpjIh5d0qqBDPg xen/arch/x86/x86_32/xen.lds +41bf1717Ty3hwN3E9swdu8QfnvGqww xen/arch/x86/x86_64/asm-offsets.c +40e96d3aLDI-nViMuYneD7VKYlZrVg xen/arch/x86/x86_64/entry.S +41bf1717XhPz_dNT5OKSjgmbFuWBuA xen/arch/x86/x86_64/mm.c +42000d3cMb8o1WuFBXC07c8i3lPZBw xen/arch/x86/x86_64/traps.c +40e96d3akN3Hu_J5Bk-WXD8OGscrYQ xen/arch/x86/x86_64/xen.lds +422f27c8J9DQfCpegccMid59XhSmGA xen/arch/x86/x86_emulate.c +3ddb79bdff-gj-jFGKjOejeHLqL8Lg xen/common/Makefile +3e397e66AyyD5fYraAySWuwi9uqSXg xen/common/ac_timer.c +427fa2d0J0LU2s5oKbsM0nTZ2iyd2Q xen/common/bitmap.c +3ddb79bdLX_P6iB7ILiblRLWvebapg xen/common/dom0_ops.c +3e6377e4i0c9GtKN65e99OtRbw3AZw xen/common/dom_mem_ops.c +3ddb79bdYO5D8Av12NHqPeSviav7cg xen/common/domain.c +40f2b4a27xPOh3R6zD4M_aabz-TDyg xen/common/elf.c +3fba5b96H0khoxNiKbjdi0inpXV-Pw xen/common/event_channel.c +41262590gGIOn-1pvF5KpUu8Wb6_JA xen/common/grant_table.c +3ddb79bd9drcFPVxd4w2GPOIjLlXpA xen/common/kernel.c +3e4cd9d8LAAghUY0hNIK72uc2ch_Nw xen/common/keyhandler.c +3ddb79bduhSEZI8xa7IbGQCpap5y2A xen/common/lib.c +41a61536SZbR6cj1ukWTb0DYU-vz9w xen/common/multicall.c +3ddb79bdD4SLmmdMD7yLW5HcUWucXw xen/common/page_alloc.c +3e54c38dkHAev597bPr71-hGzTdocg xen/common/perfc.c +42b742f6mgq9puEr7lUrLST0VEpsig xen/common/policy_ops.c +40589968dD2D1aejwSOvrROg7fOvGQ xen/common/sched_bvt.c +41ebbfe9oF1BF3cH5v7yE3eOL9uPbA xen/common/sched_sedf.c +3e397e6619PgAfBbw2XFbXkewvUWgw xen/common/schedule.c +3ddb79bd0gVQYmL2zvuJnldvD0AGxQ xen/common/softirq.c +3e7f358awXBC3Vw-wFRwPw18qL1khg xen/common/string.c +403a3edbejm33XLTGMuinKEwQBrOIg xen/common/trace.c +3ddb79bd3zgV33PHdt-cgh3sxcb1hw xen/common/vsprintf.c +4203fb92Qcy7mGpauBdq09J-WAqfoA xen/common/xmalloc.c +3ddb79c0ppNeJtjC4va8j41ADCnchA xen/drivers/Makefile +40715b2bi9gU43-cYzlmPDgreYQchw xen/drivers/acpi/Makefile +40715b2cNVOegtvyft_AHFKJYRprfA xen/drivers/acpi/tables.c +3e4a8cb7alzQCDKS7MlioPoHBKYkdQ xen/drivers/char/Makefile +4049e6bfNSIq7s7OV-Bd69QD0RpR2Q xen/drivers/char/console.c +4298e018XQtZkCdufpyFimOGZqqsFA xen/drivers/char/ns16550.c +3e4a8cb7nMChlro4wvOBo76n__iCFA xen/drivers/char/serial.c +42b742f6OteAMPWnoqxqfRX3yxD0yw xen/include/acm/acm_core.h +42b742f6XfIijctEwA0YWL2BoWtDNg xen/include/acm/acm_endian.h +42b742f6jXvp1vdbU2v2WJjTPku65A xen/include/acm/acm_hooks.h +40715b2cFpte_UNWnBZW0Du7z9AhTQ xen/include/acpi/acconfig.h +40715b2ctNvVZ058w8eM8DR9hOat_A xen/include/acpi/acexcep.h +40715b2com8I01qcHcAw47e93XsCqQ xen/include/acpi/acglobal.h +40715b2cS1t4uI3sMsu-c0M4qqAIrw xen/include/acpi/achware.h +40715b2cGf23lRI58NphiaDQl698-w xen/include/acpi/aclocal.h +40715b2cdG7tCF2NMk0j1RCQQPzPXg xen/include/acpi/acmacros.h +40715b2c4AvHYn2-2YIyt3mx-Mm5tw xen/include/acpi/acobject.h +40715b2cPUXsHzmchvXx7QHAfW0nMw xen/include/acpi/acoutput.h +40715b2cWM_6zR14U9Tp0s_q8D002A xen/include/acpi/acpi.h +40715b2dcJDTiROgyMk9swD_veWktA xen/include/acpi/acpi_bus.h +40715b2dRFlZK6apnH7WkUCBdyFXWA xen/include/acpi/acpi_drivers.h +40715b2dtgZhNGAzlyBMe3kqve3mqw xen/include/acpi/acpiosxf.h +40715b2dpW5TY7n5rzCufsDhJVWuMQ xen/include/acpi/acpixf.h +40715b2djvd97KbIpt4wyJgxwqCqmg xen/include/acpi/acstruct.h +40715b2dy8ECRkSo9x0tRRueAjPx1g xen/include/acpi/actbl.h +40715b2ds4J-XWn9Ix-lgBiJffNgxw xen/include/acpi/actbl1.h +40715b2d_aMKMjKKNImJR4km52KRHA xen/include/acpi/actbl2.h +40715b2d0oQUijKwEw6SDJ4LhD8c4g xen/include/acpi/actypes.h +40715b2dBByvcAtRpN5mafyEYLcBWA xen/include/acpi/acutils.h +40715b2dKRW7A71SNaeV6zfrEzYxPw xen/include/acpi/platform/acenv.h +40715b2d8fYydJMcODFrV1ocLklGDg xen/include/acpi/platform/acgcc.h +40715b2d1yZkqyAt0kgx2xEwsatuuA xen/include/acpi/platform/aclinux.h +421098b6Y3xqcv873Gvg1rQ5CChfFw xen/include/asm-ia64/config.h +421098b6ZcIrn_gdqjUtdJyCE0YkZQ xen/include/asm-ia64/debugger.h +421098b6z0zSuW1rcSJK1gR8RUi-fw xen/include/asm-ia64/dom_fw.h +421098b6Nn0I7hGB8Mkd1Cis0KMkhA xen/include/asm-ia64/domain.h +42b1d2d0rkNCmG2nFOnL-OfhJG9mDw xen/include/asm-ia64/event.h +4241e880hAyo_dk0PPDYj3LsMIvf-Q xen/include/asm-ia64/flushtlb.h +421098b6X3Fs2yht42TE2ufgKqt2Fw xen/include/asm-ia64/ia64_int.h +421098b7psFAn8kbeR-vcRCdc860Vw xen/include/asm-ia64/init.h +421098b7XC1A5PhA-lrU9pIO3sSSmA xen/include/asm-ia64/mm.h +421098b7c0Dx0ABuW_yHQdAqKhUoiQ xen/include/asm-ia64/mmu_context.h +421098b7C2dr3O7lgc_oeC9TEE9GKw xen/include/asm-ia64/multicall.h +421098b7dX_56NCV9zjftqm1yIqC8w xen/include/asm-ia64/offsets.h +421098b72bPUyviWloEAIB85dGCm2Q xen/include/asm-ia64/privop.h +421098b7Z6OwjZnrTZkh34DoDfcjrA xen/include/asm-ia64/regionreg.h +421098b707cY5YluUcWK5Pc-71ETVw xen/include/asm-ia64/regs.h +4214e2f3fbO_n9Z1kIcBR83d7W4OJw xen/include/asm-ia64/serial.h +42b89683nnFDAElJewfm2JxG-pv1BQ xen/include/asm-ia64/shadow.h +429fb3bc53qJOyKJCBfhDNmTasj8Gw xen/include/asm-ia64/slab.h +421098b7GkWOnlzSmPvNAhByOSZ1Dw xen/include/asm-ia64/time.h +421098b7FK3xgShpnH0I0Ou3O4fJ2Q xen/include/asm-ia64/tlb.h +421098b78IGdFOGUlPmpS7h_QBmoFg xen/include/asm-ia64/vcpu.h +421098b7PiAencgmBFGAqALU-V5rqQ xen/include/asm-ia64/vhpt.h +428b9f38_b0DgWwkJcBEsTdEmO9WNQ xen/include/asm-ia64/virt_event.h +428b9f38B0KbUj3o2FBQJ5tmIIMDHg xen/include/asm-ia64/vmmu.h +428b9f38ewjoJ-RL-2lsXFT04H2aag xen/include/asm-ia64/vmx.h +428b9f38coGlYeXx-7hpvfCTAPOd7w xen/include/asm-ia64/vmx_mm_def.h +428b9f387tov0OtOEeF8fVWSR2v5Pg xen/include/asm-ia64/vmx_pal.h +428b9f38is0zTsIm96_BKo4MLw0SzQ xen/include/asm-ia64/vmx_pal_vsa.h +428b9f38iDqbugHUheJrcTCD7zlb4g xen/include/asm-ia64/vmx_phy_mode.h +428b9f38grd_B0AGB1yp0Gi2befHaQ xen/include/asm-ia64/vmx_platform.h +42b8e0d63B41CDo2Nqmf8Vt0_RercA xen/include/asm-ia64/vmx_uaccess.h +428b9f38XgwHchZEpOzRtWfz0agFNQ xen/include/asm-ia64/vmx_vcpu.h +428b9f38tDTTJbkoONcAB9ODP8CiVg xen/include/asm-ia64/vmx_vpd.h +428b9f38_o0U5uJqmxZf_bqi6_PqVw xen/include/asm-ia64/vtm.h +428e120a-H-bqn10zOlnhlzlVEuW8A xen/include/asm-ia64/xenprocessor.h +421098b7LfwIHQ2lRYWhO4ruEXqIuQ xen/include/asm-ia64/xenserial.h +428e120esS-Tp1mX5VoUrsGJDNY_ow xen/include/asm-ia64/xensystem.h +40715b2dWe0tDhx9LkLXzTQkvD49RA xen/include/asm-x86/acpi.h +3ddb79c3l4IiQtf6MS2jIzcd-hJS8g xen/include/asm-x86/apic.h +3ddb79c3QJYWr8LLGdonLbWmNb9pQQ xen/include/asm-x86/apicdef.h +41bf17171g_hhz2k4B-fN9LQlODDjQ xen/include/asm-x86/asm_defns.h +3ddb79c3OiG9eTsi9Dy3F_OkuRAzKA xen/include/asm-x86/atomic.h +3ddb79c3rM-Ote0Xn6Ytg8Y6YqAG-A xen/include/asm-x86/bitops.h +3ddb79c3KhTI0F_Iw_hRL9QEyOVK-g xen/include/asm-x86/cache.h +404f1b920OQVnrbnXnySS-WxrH9Wzw xen/include/asm-x86/config.h +3ddb79c2LLt11EQHjrd6sB7FUqvFfA xen/include/asm-x86/cpufeature.h +40cf1596ajIU1KJfF22XD-tSLfH6XA xen/include/asm-x86/current.h +4194efbdvxUXjCLobbopgLOojisO4Q xen/include/asm-x86/debugger.h +3ddb79c2jFkPAZTDmU35L6IUssYMgQ xen/include/asm-x86/debugreg.h +3ddb79c3r9-31dIsewPV3P3i8HALsQ xen/include/asm-x86/delay.h +3ddb79c34BFiXjBJ_cCKB0aCsV1IDw xen/include/asm-x86/desc.h +40715b2dTokMLYGSuD58BnxOqyWVew xen/include/asm-x86/div64.h +4204e7acwzqgXyTAPKa1nM-L7Ec0Qw xen/include/asm-x86/domain.h +41d3eaaeIBzW621S1oa0c2yk7X43qQ xen/include/asm-x86/e820.h +42b1d2caFkOByU5n4LuMnT05f3kJFg xen/include/asm-x86/event.h +3ddb79c3NU8Zy40OTrq3D-i30Y3t4A xen/include/asm-x86/fixmap.h +3e2d29944GI24gf7vOP_7x8EyuqxeA xen/include/asm-x86/flushtlb.h +4294b5eep4lWuDtYUR74gYwt-_FnHA xen/include/asm-x86/genapic.h +3ddb79c39o75zPP0T1aQQ4mNrCAN2w xen/include/asm-x86/hardirq.h +3ddb79c3TMDjkxVndKFKnGiwY0HzDg xen/include/asm-x86/i387.h +4204e7acwXDo-5iAAiO2eQbtDeYZXA xen/include/asm-x86/init.h +3ddb79c3fQ_O3o5NHK2N8AJdk0Ea4Q xen/include/asm-x86/io.h +3ddb79c2TKeScYHQZreTdHqYNLbehQ xen/include/asm-x86/io_apic.h +3ddb79c2L7rTlFzazOLW1XuSZefpFw xen/include/asm-x86/irq.h +404f1b93OjLO4bFfBXYNaJdIqlNz-Q xen/include/asm-x86/ldt.h +4294b5eeeAE-U0umBauOpcfs9bOixw xen/include/asm-x86/mach-bigsmp/mach_apic.h +4294b5ee5qY2lHkA2hcNVFnZkHBVQw xen/include/asm-x86/mach-bigsmp/mach_apicdef.h +4294b5eeq6ore4EePanoutorWtvS1w xen/include/asm-x86/mach-bigsmp/mach_ipi.h +427fa2d0suK9Av7vsAXhsQxZjqpc_Q xen/include/asm-x86/mach-default/bios_ebda.h +427fa2d0-SWcuwbdSypo4953bc2JdQ xen/include/asm-x86/mach-default/io_ports.h +427fa2d0eyAl7LAeO-SVV4IW7lZPGQ xen/include/asm-x86/mach-default/irq_vectors.h +427fa2d0df7VWG4KKpnKbKR2Cbd1_w xen/include/asm-x86/mach-default/irq_vectors_limits.h +4260510aYPj2kr6rMbBfMxcvvmXndQ xen/include/asm-x86/mach-default/mach_apic.h +427fa2d0I3FWjE2tWdOhlEOJn7stcg xen/include/asm-x86/mach-default/mach_apicdef.h +427fa2d093fDS2gOBLcl7Yndzl7HmA xen/include/asm-x86/mach-default/mach_ipi.h +427fa2d0Y7bD35d-FvDAeiJDIdRw2A xen/include/asm-x86/mach-default/mach_mpparse.h +427fa2d0OfglYyfpDTD5DII4M0uZRw xen/include/asm-x86/mach-default/mach_wakecpu.h +4294b5eeTwL8TeEI5pEzxvGD5obZsA xen/include/asm-x86/mach-es7000/mach_apic.h +4294b5efhhBHJ81dsuLfJxWuN9PcDQ xen/include/asm-x86/mach-es7000/mach_apicdef.h +4294b5efvb29X4mFAhUBdeGUPTFoBw xen/include/asm-x86/mach-es7000/mach_ipi.h +4294b5efLlV3WvmctnQsCPAte4Bf6A xen/include/asm-x86/mach-es7000/mach_mpparse.h +4294b5efC90I55FIDtKg8jyW8FVffA xen/include/asm-x86/mach-es7000/mach_wakecpu.h +4294b5efqI--HHz7d7QVcVOi635jgw xen/include/asm-x86/mach-generic/mach_apic.h +4294b5efHFX7nHDP4ch4NGAPmCsp_w xen/include/asm-x86/mach-generic/mach_apicdef.h +4294b5efaen_warQx_kSN54AgXgBtg xen/include/asm-x86/mach-generic/mach_ipi.h +4294b5efq7CDZzdxl-Rxu2K_6cIePQ xen/include/asm-x86/mach-generic/mach_mpparse.h +4294b5efsEtawAifmsBZAjFagr8Z6Q xen/include/asm-x86/mach-generic/mach_mpspec.h +4294b5efz5xMcRrYJfcH-wTylihXMA xen/include/asm-x86/mach-summit/mach_apic.h +4294b5efmKbMzT7YOGp4Jn-5xoB3Uw xen/include/asm-x86/mach-summit/mach_apicdef.h +4294b5efyUK3aZFqxp7BVF_GXCx56g xen/include/asm-x86/mach-summit/mach_ipi.h +4294b5efjw2vUbiP4dQX6S6xZvAmZA xen/include/asm-x86/mach-summit/mach_mpparse.h +3ddb79c3I98vWcQR8xEo34JMJ4Ahyw xen/include/asm-x86/mc146818rtc.h +40ec25fd7cSvbP7Biw91zaU_g0xsEQ xen/include/asm-x86/mm.h +3ddb79c3n_UbPuxlkNxvvLycClIkxA xen/include/asm-x86/mpspec.h +427fa2d1eJRenftJJnRyLsHKl1ghtA xen/include/asm-x86/mpspec_def.h +3ddb79c2wa0dA_LGigxOelSGbJ284Q xen/include/asm-x86/msr.h +41aaf567Mi3OishhvrCtET1y-mxQBg xen/include/asm-x86/mtrr.h +41a61536MFhNalgbVmYGXAhQsPTZNw xen/include/asm-x86/multicall.h +3ddb79c3xjYnrv5t3VqYlR4tNEOl4Q xen/include/asm-x86/page.h +42422fb0FVX-TJkSvAXnbfwMf19XFA xen/include/asm-x86/physdev.h +3ddb79c2QF5-pZGzuX4QukPCDAl59A xen/include/asm-x86/processor.h +40cf1596bim9F9DNdV75klgRSZ6Y2A xen/include/asm-x86/regs.h +3ddb79c2plf7ciNgoNjU-RsbUzawsw xen/include/asm-x86/rwlock.h +405b8599BsDsDwKEJLS0XipaiQW3TA xen/include/asm-x86/shadow.h +3ddb79c3Hgbb2g8CyWLMCK-6_ZVQSQ xen/include/asm-x86/smp.h +3ddb79c3jn8ALV_S9W5aeTYUQRKBpg xen/include/asm-x86/smpboot.h +3ddb79c3NiyQE2vQnyGiaBnNjBO1rA xen/include/asm-x86/spinlock.h +3e7f358aG11EvMI9VJ4_9hD4LUO7rQ xen/include/asm-x86/string.h +3ddb79c3ezddh34MdelJpa5tNR00Dw xen/include/asm-x86/system.h +42033fc1Bb8ffTshBYFGouGkiAMoUQ xen/include/asm-x86/time.h +3ddb79c4HugMq7IYGxcQKFBpKwKhzA xen/include/asm-x86/types.h +40cf1596saFaHD5DC5zvrSn7CDCWGQ xen/include/asm-x86/uaccess.h +41c0c412k6GHYF3cJtDdw37ee3TVaw xen/include/asm-x86/vmx.h +41c0c412hck3QX-6_MaXaISGkngQuA xen/include/asm-x86/vmx_cpu.h +420951dcGoqsqnmjjAtEtm6-3dM9KA xen/include/asm-x86/vmx_intercept.h +41c0c41243jC1mcArZx_t3YkBL4lTA xen/include/asm-x86/vmx_platform.h +420951dcqyUCe_gXA_XJPu1ix_poKg xen/include/asm-x86/vmx_virpit.h +41c0c412lQ0NVVN9PsOSznQ-qhOiPA xen/include/asm-x86/vmx_vmcs.h +418fbcfe_WliJPToeVM-9VStvym-hw xen/include/asm-x86/x86_32/asm_defns.h +429c852fi3pvfa9kIjryYK5AGBmXAg xen/include/asm-x86/x86_32/page-2level.h +429c852fskvSOgcD5EC25_m9um9t4g xen/include/asm-x86/x86_32/page-3level.h +4208e2a3ZNFroNXbX9OYaOB-xtUyDQ xen/include/asm-x86/x86_32/page.h +3ddb79c3mbqEM7QQr3zVq7NiBNhouA xen/include/asm-x86/x86_32/regs.h +3ddb79c3M2n1ROZH6xk3HbyN4CPDqg xen/include/asm-x86/x86_32/uaccess.h +41bf1717bML6GxpclTWJabiaO5W5vg xen/include/asm-x86/x86_64/asm_defns.h +4208e2a3Fktw4ZttKdDxbhvTQ6brfQ xen/include/asm-x86/x86_64/page.h +404f1bb86rAXB3aLS1vYdcqpJiEcyg xen/include/asm-x86/x86_64/regs.h +404f1bc4tWkB9Qr8RkKtZGW5eMQzhw xen/include/asm-x86/x86_64/uaccess.h +422f27c8RHFkePhD34VIEpMMqofZcA xen/include/asm-x86/x86_emulate.h +400304fcmRQmDdFYEzDh0wcBba9alg xen/include/public/COPYING +42b742f6duiOTlZvysQkRYZHYBXqvg xen/include/public/acm.h +421098b7OKb9YH_EUA_UpCxBjaqtgA xen/include/public/arch-ia64.h +404f1bc68SXxmv0zQpXBWGrCzSyp8w xen/include/public/arch-x86_32.h +404f1bc7IwU-qnH8mJeVu0YsNGMrcw xen/include/public/arch-x86_64.h +3ddb79c2PMeWTK86y4C3F4MzHw4A1g xen/include/public/dom0_ops.h +403cd194j2pyLqXD8FJ-ukvZzkPenw xen/include/public/event_channel.h +4121d149udGfSUGhn3k1ECz0bM31nQ xen/include/public/grant_table.h +40f5623bqoi4GEoBiiUc6TZk1HjsMg xen/include/public/io/blkif.h +40dc4076pVeE1kEEWzcUaNZin65kCA xen/include/public/io/domain_controller.h +41c0c412FLc0gunlJl91qMYscFtXVA xen/include/public/io/ioreq.h +40f5623cTZ80EwjWUBlh44A9F9i_Lg xen/include/public/io/netif.h +41d40e9b8zCk5VDqhVbuQyhc7G3lqA xen/include/public/io/ring.h +41ee5e8c6mLxIx82KPsbpt_uts_vSA xen/include/public/io/usbif.h +42c3a8bcUFXJKVc8tWCFilICv2cNaA xen/include/public/io/vmx_vlapic.h +4051db79512nOCGweabrFWO2M2h5ng xen/include/public/physdev.h +42b742f7Lzy8SKKG25L_-fgk5FHA2Q xen/include/public/policy_ops.h +40589968wmhPmV5-ENbBYmMjnedgKw xen/include/public/sched_ctl.h +404f3d2eR2Owk-ZcGOx9ULGHg3nrww xen/include/public/trace.h +42b5a5f2QC1IxeuwCwwsOEhvcJ2BJg xen/include/public/version.h +4266bd01Ul-pC01ZVvBkhBnv5eqzvw xen/include/public/vmx_assist.h +3ddb79c25UE59iu4JJcbRalx95mvcg xen/include/public/xen.h +3e397e66m2tO3s-J8Jnr7Ws_tGoPTg xen/include/xen/ac_timer.h +40715b2epYl2jBbxzz9CI2rgIca7Zg xen/include/xen/acpi.h +427fa2d1wyoVbvCyZRLposYjA_D_4g xen/include/xen/bitmap.h +427fa2d1ItcC_yWuBUkhc7adedP5ow xen/include/xen/bitops.h +3ddb79c0c0cX_DZE209-Bb-Rx1v-Aw xen/include/xen/cache.h +41f2cea7Yna7xc0X9fyavIjoSFFeVg xen/include/xen/compile.h.in +3f840f12CkbYSlwMrY2S11Mpyxg7Nw xen/include/xen/compiler.h +3ddb79c259jh8hE7vre_8NuE7nwNSA xen/include/xen/config.h +3eb165e0eawr3R-p2ZQtSdLWtLRN_A xen/include/xen/console.h +427fa2d1bQCWgEQqTTh5MjG4MPEH9g xen/include/xen/cpumask.h +3ddb79c1V44RD26YqCUm-kqIupM37A xen/include/xen/ctype.h +3ddb79c05DdHQ0UxX_jKsXdR4QlMCA xen/include/xen/delay.h +4294b5efxcDdUVp4XMEE__IFw7nPow xen/include/xen/dmi.h +40f2b4a2hC3HtChu-ArD8LyojxWMjg xen/include/xen/domain.h +3e20b82fl1jmQiKdLy7fxMcutfpjWA xen/include/xen/domain_page.h +3ddb79c2O729EttZTYu1c8LcsUO_GQ xen/include/xen/elf.h +3ddb79c0HIghfBF8zFUdmXhOU8i6hA xen/include/xen/errno.h +3ddb79c1W0lQca8gRV7sN6j3iY4Luw xen/include/xen/event.h +41262590CyJy4vd42dnqzsn8-eeGvw xen/include/xen/grant_table.h +3ddb79c0GurNF9tDWqQbAwJFH8ugfA xen/include/xen/init.h +428084e41zemtCAtYLcD9bUzwE35SA xen/include/xen/inttypes.h +3ddb79c2qAxCOABlkKtD8Txohe-qEw xen/include/xen/irq.h +3ddb79c2b3qe-6Ann09FqZBF4IrJaQ xen/include/xen/irq_cpustat.h +3e4540ccPHqIIv2pvnQ1gV8LUnoHIg xen/include/xen/kernel.h +3e4cd9d8elj_7EgAs9Of56RQ2Yq_4g xen/include/xen/keyhandler.h +3ddb79c1NfYlOrWNqgZkj9EwtFfJow xen/include/xen/lib.h +3ddb79c18Ajy7micDGQQfJ0zWgEHtA xen/include/xen/list.h +3ddb79c1gs2VbLbQlw0dcDUXYIepDA xen/include/xen/mm.h +3ddb79c1ieLZfGSFwfvvSQ2NK1BMSg xen/include/xen/multiboot.h +41a61536ii6j2lJ2rXwMOLaG1CHPvw xen/include/xen/multicall.h +3e54c38dlSCVdyVM4PKcrSfzLLxWUQ xen/include/xen/perfc.h +3e54c38de9SUSYSAwxDf_DwkpAnQFA xen/include/xen/perfc_defn.h +3ddb79c04nQVR3EYM5L4zxDV_MCo1g xen/include/xen/prefetch.h +3e4540ccU1sgCx8seIMGlahmMfv7yQ xen/include/xen/reboot.h +40589969nPq3DMzv24RDb5LXE9brHw xen/include/xen/sched-if.h +3ddb79c0LzqqS0LhAQ50ekgj4oGl7Q xen/include/xen/sched.h +403a06a7H0hpHcKpAiDe5BPnaXWTlA xen/include/xen/serial.h +4252c315hw0xXYMKIfFzhomi1M1yNA xen/include/xen/shadow.h +3ddb79c09xbS-xxfKxuV3JETIhBzmg xen/include/xen/smp.h +3ddb79c1Vi5VleJAOKHAlY0G2zAsgw xen/include/xen/softirq.h +3ddb79c2iIcESrDAB8samy_yAh6olQ xen/include/xen/spinlock.h +3e7f358aMtFMUVvN_Zjg5qvEJIqEBA xen/include/xen/string.h +3ddb79c0BnA20PbgmuMPSGIBljNRQw xen/include/xen/time.h +403a3edbG9K5uZjuY19_LORbQGmFbA xen/include/xen/trace.h +3ddb79c1-kVvF8cVa0k3ZHDdBMj01Q xen/include/xen/types.h +3ddb79c14dXIhP7C2ahnoD08K90G_w xen/include/xen/xmalloc.h +41d291f5u3J3HYViXLs3cNuFGTvzNg xen/tools/Makefile +3eb3c87fc79FXLA6R9TvdBJNTvQDwA xen/tools/figlet/LICENSE +3eb3c87fPL2T_zBb0bHlbZY-ACEKRw xen/tools/figlet/Makefile +3eb3c87fmKYTC5GCh_rydFakZp9ayw xen/tools/figlet/README +3eb3c87fdQKQ5OBGbM-KjZfi9Us4ng xen/tools/figlet/figlet.c +3eb3c87fS7DNbg0i6yhFs28UIqAK5g xen/tools/figlet/xen.flf diff -Nru xen-4.2.1/tools/blktap2/control/tap-ctl-ipc.c xen-4.2.2/tools/blktap2/control/tap-ctl-ipc.c --- xen-4.2.1/tools/blktap2/control/tap-ctl-ipc.c 2012-09-28 11:02:51.000000000 +0200 +++ xen-4.2.2/tools/blktap2/control/tap-ctl-ipc.c 2013-04-23 18:42:55.000000000 +0200 @@ -64,12 +64,18 @@ FD_SET(fd, &readfds); ret = select(fd + 1, &readfds, NULL, NULL, t); - if (ret == -1) + if (ret == -1) { + if (errno == EINTR) + continue; break; + } else if (FD_ISSET(fd, &readfds)) { ret = read(fd, message + offset, len - offset); - if (ret <= 0) + if (ret <= 0) { + if (errno == EINTR) + continue; break; + } offset += ret; } else break; @@ -114,12 +120,18 @@ * bit more time than expected. */ ret = select(fd + 1, NULL, &writefds, NULL, t); - if (ret == -1) + if (ret == -1) { + if (errno == EINTR) + continue; break; + } else if (FD_ISSET(fd, &writefds)) { ret = write(fd, message + offset, len - offset); - if (ret <= 0) + if (ret <= 0) { + if (errno == EINTR) + continue; break; + } offset += ret; } else break; diff -Nru xen-4.2.1/tools/blktap2/drivers/md5.c xen-4.2.2/tools/blktap2/drivers/md5.c --- xen-4.2.1/tools/blktap2/drivers/md5.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/tools/blktap2/drivers/md5.c 2013-04-23 18:42:55.000000000 +0200 @@ -174,7 +174,7 @@ MD5Transform(ctx->buf, (uint32_t *) ctx->in); byteReverse((unsigned char *) ctx->buf, 4); memcpy(digest, ctx->buf, 16); - memset(ctx, 0, sizeof(ctx)); /* In case it's sensitive */ + memset(ctx, 0, sizeof(*ctx)); /* In case it's sensitive */ } /* The four core functions - F1 is optimized somewhat */ diff -Nru xen-4.2.1/tools/debugger/kdd/kdd-xen.c xen-4.2.2/tools/debugger/kdd/kdd-xen.c --- xen-4.2.1/tools/debugger/kdd/kdd-xen.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/tools/debugger/kdd/kdd-xen.c 2013-04-23 18:42:55.000000000 +0200 @@ -333,7 +333,7 @@ if (!cpu) return -1; - memset(r, 0, sizeof(r)); + memset(r, 0, sizeof(*r)); if (w64) kdd_get_regs_x86_64(cpu, &r->r64); diff -Nru xen-4.2.1/tools/libxc/xc_dom_boot.c xen-4.2.2/tools/libxc/xc_dom_boot.c --- xen-4.2.1/tools/libxc/xc_dom_boot.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/tools/libxc/xc_dom_boot.c 2013-04-23 18:42:55.000000000 +0200 @@ -266,7 +266,7 @@ return rc; /* let the vm run */ - memset(ctxt, 0, sizeof(ctxt)); + memset(ctxt, 0, sizeof(*ctxt)); if ( (rc = dom->arch_hooks->vcpu(dom, ctxt)) != 0 ) return rc; xc_dom_unmap_all(dom); diff -Nru xen-4.2.1/tools/libxl/libxl.c xen-4.2.2/tools/libxl/libxl.c --- xen-4.2.1/tools/libxl/libxl.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/tools/libxl/libxl.c 2013-04-23 18:42:55.000000000 +0200 @@ -768,23 +768,6 @@ goto out_err; } - if (type == LIBXL_DOMAIN_TYPE_HVM && flags & LIBXL_SUSPEND_LIVE) { - switch (libxl__device_model_version_running(gc, domid)) { - case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN: - LOG(ERROR, - "cannot live migrate HVM domains with qemu-xen device-model"); - rc = ERROR_FAIL; - goto out_err; - case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL: - /* No problem */ - break; - case -1: - rc = ERROR_FAIL; - goto out_err; - default: abort(); - } - } - libxl__domain_suspend_state *dss; GCNEW(dss); @@ -1800,7 +1783,7 @@ STATE_AO_GC(aodev->ao); flexarray_t *front = NULL; flexarray_t *back = NULL; - char *dev, *script; + char *dev = NULL, *script; libxl__device *device; int rc; libxl_ctx *ctx = gc->owner; @@ -1875,12 +1858,15 @@ break; case LIBXL_DISK_BACKEND_TAP: - dev = libxl__blktap_devpath(gc, disk->pdev_path, disk->format); - if (!dev) { - LOG(ERROR, "failed to get blktap devpath for %p\n", - disk->pdev_path); - rc = ERROR_FAIL; - goto out_free; + if (dev == NULL) { + dev = libxl__blktap_devpath(gc, disk->pdev_path, + disk->format); + if (!dev) { + LOG(ERROR, "failed to get blktap devpath for %p\n", + disk->pdev_path); + rc = ERROR_FAIL; + goto out_free; + } } flexarray_append(back, "tapdisk-params"); flexarray_append(back, libxl__sprintf(gc, "%s:%s", @@ -2586,7 +2572,8 @@ goto out_free; } if (!(l = libxl__xs_directory(gc, XBT_NULL, - libxl__sprintf(gc, "%s/device/vif", dompath), &nb))) { + libxl__sprintf(gc, "%s/device/vif", dompath), &nb)) || + nb == 0) { nic->devid = 0; } else { nic->devid = strtoul(l[nb - 1], NULL, 10) + 1; diff -Nru xen-4.2.1/tools/libxl/libxl_create.c xen-4.2.2/tools/libxl/libxl_create.c --- xen-4.2.1/tools/libxl/libxl_create.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/tools/libxl/libxl_create.c 2013-04-23 18:42:55.000000000 +0200 @@ -232,8 +232,24 @@ case LIBXL_DOMAIN_TYPE_HVM: if (b_info->shadow_memkb == LIBXL_MEMKB_DEFAULT) b_info->shadow_memkb = 0; - if (b_info->video_memkb == LIBXL_MEMKB_DEFAULT) - b_info->video_memkb = 8 * 1024; + + if (b_info->u.hvm.vga.kind == LIBXL_VGA_INTERFACE_TYPE_STD && + b_info->device_model_version == + LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN) { + if (b_info->video_memkb == LIBXL_MEMKB_DEFAULT) + b_info->video_memkb = 16 * 1024; + else if (b_info->video_memkb < (16 * 1024) ){ + LOG(ERROR, + "videoram must be at least 16 mb with stdvga"); + return ERROR_INVAL; + } + } else if (b_info->video_memkb == LIBXL_MEMKB_DEFAULT) + b_info->video_memkb = 8 * 1024; + else if (b_info->video_memkb < (8 * 1024) ){ + LOG(ERROR,"videoram must be at least 8 mb"); + return ERROR_INVAL; + } + if (b_info->u.hvm.timer_mode == LIBXL_TIMER_MODE_DEFAULT) b_info->u.hvm.timer_mode = LIBXL_TIMER_MODE_NO_DELAY_FOR_MISSED_TICKS; @@ -312,15 +328,16 @@ } int libxl__domain_build(libxl__gc *gc, - libxl_domain_build_info *info, + libxl_domain_config *d_config, uint32_t domid, libxl__domain_build_state *state) { + libxl_domain_build_info *const info = &d_config->b_info; char **vments = NULL, **localents = NULL; struct timeval start_time; int i, ret; - ret = libxl__build_pre(gc, domid, info, state); + ret = libxl__build_pre(gc, domid, d_config, state); if (ret) goto out; @@ -745,14 +762,14 @@ dcs->dmss.callback = domcreate_devmodel_started; if ( restore_fd < 0 ) { - rc = libxl__domain_build(gc, &d_config->b_info, domid, state); + rc = libxl__domain_build(gc, d_config, domid, state); domcreate_rebuild_done(egc, dcs, rc); return; } /* Restore */ - rc = libxl__build_pre(gc, domid, info, state); + rc = libxl__build_pre(gc, domid, d_config, state); if (rc) goto out; @@ -952,14 +969,16 @@ } for (i = 0; i < d_config->b_info.num_irqs; i++) { - uint32_t irq = d_config->b_info.irqs[i]; + int irq = d_config->b_info.irqs[i]; - LOG(DEBUG, "dom%d irq %"PRIx32, domid, irq); + LOG(DEBUG, "dom%d irq %d", domid, irq); - ret = xc_domain_irq_permission(CTX->xch, domid, irq, 1); + ret = irq >= 0 ? xc_physdev_map_pirq(CTX->xch, domid, irq, &irq) + : -EOVERFLOW; + if (!ret) + ret = xc_domain_irq_permission(CTX->xch, domid, irq, 1); if ( ret<0 ){ - LOGE(ERROR, - "failed give dom%d access to irq %"PRId32, domid, irq); + LOGE(ERROR, "failed give dom%d access to irq %d", domid, irq); ret = ERROR_FAIL; } } @@ -1111,7 +1130,6 @@ } } - libxl__arch_domain_create(gc, d_config, domid); domcreate_console_available(egc, dcs); domcreate_complete(egc, dcs, 0); diff -Nru xen-4.2.1/tools/libxl/libxl_dm.c xen-4.2.2/tools/libxl/libxl_dm.c --- xen-4.2.1/tools/libxl/libxl_dm.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/tools/libxl/libxl_dm.c 2013-04-23 18:42:55.000000000 +0200 @@ -435,6 +435,12 @@ break; case LIBXL_VGA_INTERFACE_TYPE_CIRRUS: flexarray_vappend(dm_args, "-vga", "cirrus", NULL); + if (b_info->video_memkb) { + flexarray_vappend(dm_args, "-global", + libxl__sprintf(gc, "vga.vram_size_mb=%d", + libxl__sizekb_to_mb(b_info->video_memkb)), + NULL); + } break; } @@ -811,7 +817,7 @@ if (ret) goto out; uint32_t dm_domid = sdss->pvqemu.guest_domid; - ret = libxl__domain_build(gc, &dm_config->b_info, dm_domid, stubdom_state); + ret = libxl__domain_build(gc, dm_config, dm_domid, stubdom_state); if (ret) goto out; diff -Nru xen-4.2.1/tools/libxl/libxl_dom.c xen-4.2.2/tools/libxl/libxl_dom.c --- xen-4.2.1/tools/libxl/libxl_dom.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/tools/libxl/libxl_dom.c 2013-04-23 18:42:55.000000000 +0200 @@ -18,6 +18,7 @@ #include #include "libxl_internal.h" +#include "libxl_arch.h" #include #include @@ -199,12 +200,14 @@ } int libxl__build_pre(libxl__gc *gc, uint32_t domid, - libxl_domain_build_info *info, libxl__domain_build_state *state) + libxl_domain_config *d_config, libxl__domain_build_state *state) { + libxl_domain_build_info *const info = &d_config->b_info; libxl_ctx *ctx = libxl__gc_owner(gc); int tsc_mode; char *xs_domid, *con_domid; uint32_t rtc_timeoffset; + int rc; xc_domain_max_vcpus(ctx->xch, domid, info->max_vcpus); @@ -218,7 +221,6 @@ * whatever that turns out to be. */ if (libxl_defbool_val(info->numa_placement)) { - int rc; if (!libxl_bitmap_is_full(&info->cpumap)) { LOG(ERROR, "Can run NUMA placement only if no vcpu " @@ -288,7 +290,9 @@ state->console_port = xc_evtchn_alloc_unbound(ctx->xch, domid, state->console_domid); state->vm_generationid_addr = 0; - return 0; + rc = libxl__arch_domain_create(gc, d_config, domid); + + return rc; } int libxl__build_post(libxl__gc *gc, uint32_t domid, @@ -685,10 +689,10 @@ libxl__ev_time_init(&lds->timeout); } -void libxl__domain_suspend_common_switch_qemu_logdirty - (int domid, unsigned enable, void *user) +static void domain_suspend_switch_qemu_xen_traditional_logdirty + (int domid, unsigned enable, + libxl__save_helper_state *shs) { - libxl__save_helper_state *shs = user; libxl__egc *egc = shs->egc; libxl__domain_suspend_state *dss = CONTAINER_OF(shs, *dss, shs); libxl__logdirty_switch *lds = &dss->logdirty; @@ -756,6 +760,45 @@ switch_logdirty_done(egc,dss,-1); } +static void domain_suspend_switch_qemu_xen_logdirty + (int domid, unsigned enable, + libxl__save_helper_state *shs) +{ + libxl__egc *egc = shs->egc; + libxl__domain_suspend_state *dss = CONTAINER_OF(shs, *dss, shs); + STATE_AO_GC(dss->ao); + int rc; + + rc = libxl__qmp_set_global_dirty_log(gc, domid, enable); + if (!rc) { + libxl__xc_domain_saverestore_async_callback_done(egc, shs, 0); + } else { + LOG(ERROR,"logdirty switch failed (rc=%d), aborting suspend",rc); + libxl__xc_domain_saverestore_async_callback_done(egc, shs, -1); + } +} + +void libxl__domain_suspend_common_switch_qemu_logdirty + (int domid, unsigned enable, void *user) +{ + libxl__save_helper_state *shs = user; + libxl__egc *egc = shs->egc; + libxl__domain_suspend_state *dss = CONTAINER_OF(shs, *dss, shs); + STATE_AO_GC(dss->ao); + + switch (libxl__device_model_version_running(gc, domid)) { + case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL: + domain_suspend_switch_qemu_xen_traditional_logdirty(domid, enable, shs); + break; + case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN: + domain_suspend_switch_qemu_xen_logdirty(domid, enable, shs); + break; + default: + LOG(ERROR,"logdirty switch failed" + ", no valid device model version found, aborting suspend"); + libxl__xc_domain_saverestore_async_callback_done(egc, shs, -1); + } +} static void switch_logdirty_timeout(libxl__egc *egc, libxl__ev_time *ev, const struct timeval *requested_abs) { diff -Nru xen-4.2.1/tools/libxl/libxl_event.c xen-4.2.2/tools/libxl/libxl_event.c --- xen-4.2.1/tools/libxl/libxl_event.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/tools/libxl/libxl_event.c 2013-04-23 18:42:55.000000000 +0200 @@ -38,23 +38,131 @@ * The application's registration hooks should be called ONLY via * these macros, with the ctx locked. Likewise all the "occurred" * entrypoints from the application should assert(!in_hook); + * + * During the hook call - including while the arguments are being + * evaluated - ev->nexus is guaranteed to be valid and refer to the + * nexus which is being used for this event registration. The + * arguments should specify ev->nexus for the for_libxl argument and + * ev->nexus->for_app_reg (or a pointer to it) for for_app_reg. */ -#define OSEVENT_HOOK_INTERN(retval, hookname, ...) do { \ - if (CTX->osevent_hooks) { \ - CTX->osevent_in_hook++; \ - retval CTX->osevent_hooks->hookname(CTX->osevent_user, __VA_ARGS__); \ - CTX->osevent_in_hook--; \ - } \ +#define OSEVENT_HOOK_INTERN(retval, failedp, evkind, hookop, nexusop, ...) do { \ + if (CTX->osevent_hooks) { \ + CTX->osevent_in_hook++; \ + libxl__osevent_hook_nexi *nexi = &CTX->hook_##evkind##_nexi_idle; \ + osevent_hook_pre_##nexusop(gc, ev, nexi, &ev->nexus); \ + retval CTX->osevent_hooks->evkind##_##hookop \ + (CTX->osevent_user, __VA_ARGS__); \ + if ((failedp)) \ + osevent_hook_failed_##nexusop(gc, ev, nexi, &ev->nexus); \ + CTX->osevent_in_hook--; \ + } \ } while (0) -#define OSEVENT_HOOK(hookname, ...) ({ \ - int osevent_hook_rc = 0; \ - OSEVENT_HOOK_INTERN(osevent_hook_rc = , hookname, __VA_ARGS__); \ - osevent_hook_rc; \ +#define OSEVENT_HOOK(evkind, hookop, nexusop, ...) ({ \ + int osevent_hook_rc = 0; \ + OSEVENT_HOOK_INTERN(osevent_hook_rc =, !!osevent_hook_rc, \ + evkind, hookop, nexusop, __VA_ARGS__); \ + osevent_hook_rc; \ }) -#define OSEVENT_HOOK_VOID(hookname, ...) \ - OSEVENT_HOOK_INTERN(/* void */, hookname, __VA_ARGS__) +#define OSEVENT_HOOK_VOID(evkind, hookop, nexusop, ...) \ + OSEVENT_HOOK_INTERN(/* void */, 0, evkind, hookop, nexusop, __VA_ARGS__) + +/* + * The application's calls to libxl_osevent_occurred_... may be + * indefinitely delayed with respect to the rest of the program (since + * they are not necessarily called with any lock held). So the + * for_libxl value we receive may be (almost) arbitrarily old. All we + * know is that it came from this ctx. + * + * Therefore we may not free the object referred to by any for_libxl + * value until we free the whole libxl_ctx. And if we reuse it we + * must be able to tell when an old use turns up, and discard the + * stale event. + * + * Thus we cannot use the ev directly as the for_libxl value - we need + * a layer of indirection. + * + * We do this by keeping a pool of libxl__osevent_hook_nexus structs, + * and use pointers to them as for_libxl values. In fact, there are + * two pools: one for fds and one for timeouts. This ensures that we + * don't risk a type error when we upcast nexus->ev. In each nexus + * the ev is either null or points to a valid libxl__ev_time or + * libxl__ev_fd, as applicable. + * + * We /do/ allow ourselves to reassociate an old nexus with a new ev + * as otherwise we would have to leak nexi. (This reassociation + * might, of course, be an old ev being reused for a new purpose so + * simply comparing the ev pointer is not sufficient.) Thus the + * libxl_osevent_occurred functions need to check that the condition + * allegedly signalled by this event actually exists. + * + * The nexi and the lists are all protected by the ctx lock. + */ + +struct libxl__osevent_hook_nexus { + void *ev; + void *for_app_reg; + LIBXL_SLIST_ENTRY(libxl__osevent_hook_nexus) next; +}; + +static void *osevent_ev_from_hook_nexus(libxl_ctx *ctx, + libxl__osevent_hook_nexus *nexus /* pass void *for_libxl */) +{ + return nexus->ev; +} + +static void osevent_release_nexus(libxl__gc *gc, + libxl__osevent_hook_nexi *nexi_idle, + libxl__osevent_hook_nexus *nexus) +{ + nexus->ev = 0; + LIBXL_SLIST_INSERT_HEAD(nexi_idle, nexus, next); +} + +/*----- OSEVENT* hook functions for nexusop "alloc" -----*/ +static void osevent_hook_pre_alloc(libxl__gc *gc, void *ev, + libxl__osevent_hook_nexi *nexi_idle, + libxl__osevent_hook_nexus **nexus_r) +{ + libxl__osevent_hook_nexus *nexus = LIBXL_SLIST_FIRST(nexi_idle); + if (nexus) { + LIBXL_SLIST_REMOVE_HEAD(nexi_idle, next); + } else { + nexus = libxl__zalloc(NOGC, sizeof(*nexus)); + } + nexus->ev = ev; + *nexus_r = nexus; +} +static void osevent_hook_failed_alloc(libxl__gc *gc, void *ev, + libxl__osevent_hook_nexi *nexi_idle, + libxl__osevent_hook_nexus **nexus) +{ + osevent_release_nexus(gc, nexi_idle, *nexus); +} + +/*----- OSEVENT* hook functions for nexusop "release" -----*/ +static void osevent_hook_pre_release(libxl__gc *gc, void *ev, + libxl__osevent_hook_nexi *nexi_idle, + libxl__osevent_hook_nexus **nexus) +{ + osevent_release_nexus(gc, nexi_idle, *nexus); +} +static void osevent_hook_failed_release(libxl__gc *gc, void *ev, + libxl__osevent_hook_nexi *nexi_idle, + libxl__osevent_hook_nexus **nexus) +{ + abort(); +} + +/*----- OSEVENT* hook functions for nexusop "noop" -----*/ +static void osevent_hook_pre_noop(libxl__gc *gc, void *ev, + libxl__osevent_hook_nexi *nexi_idle, + libxl__osevent_hook_nexus **nexus) { } +static void osevent_hook_failed_noop(libxl__gc *gc, void *ev, + libxl__osevent_hook_nexi *nexi_idle, + libxl__osevent_hook_nexus **nexus) { } + /* * fd events @@ -72,7 +180,8 @@ DBG("ev_fd=%p register fd=%d events=%x", ev, fd, events); - rc = OSEVENT_HOOK(fd_register, fd, &ev->for_app_reg, events, ev); + rc = OSEVENT_HOOK(fd,register, alloc, fd, &ev->nexus->for_app_reg, + events, ev->nexus); if (rc) goto out; ev->fd = fd; @@ -97,7 +206,7 @@ DBG("ev_fd=%p modify fd=%d events=%x", ev, ev->fd, events); - rc = OSEVENT_HOOK(fd_modify, ev->fd, &ev->for_app_reg, events); + rc = OSEVENT_HOOK(fd,modify, noop, ev->fd, &ev->nexus->for_app_reg, events); if (rc) goto out; ev->events = events; @@ -119,7 +228,7 @@ DBG("ev_fd=%p deregister fd=%d", ev, ev->fd); - OSEVENT_HOOK_VOID(fd_deregister, ev->fd, ev->for_app_reg); + OSEVENT_HOOK_VOID(fd,deregister, release, ev->fd, ev->nexus->for_app_reg); LIBXL_LIST_REMOVE(ev, entry); ev->fd = -1; @@ -158,25 +267,20 @@ return 0; } -static void time_insert_finite(libxl__gc *gc, libxl__ev_time *ev) -{ - libxl__ev_time *evsearch; - LIBXL_TAILQ_INSERT_SORTED(&CTX->etimes, entry, ev, evsearch, /*empty*/, - timercmp(&ev->abs, &evsearch->abs, >)); - ev->infinite = 0; -} - static int time_register_finite(libxl__gc *gc, libxl__ev_time *ev, - struct timeval abs) + struct timeval absolute) { int rc; + libxl__ev_time *evsearch; - rc = OSEVENT_HOOK(timeout_register, &ev->for_app_reg, abs, ev); + rc = OSEVENT_HOOK(timeout,register, alloc, &ev->nexus->for_app_reg, + absolute, ev->nexus); if (rc) return rc; ev->infinite = 0; - ev->abs = abs; - time_insert_finite(gc, ev); + ev->abs = absolute; + LIBXL_TAILQ_INSERT_SORTED(&CTX->etimes, entry, ev, evsearch, /*empty*/, + timercmp(&ev->abs, &evsearch->abs, >)); return 0; } @@ -184,7 +288,12 @@ static void time_deregister(libxl__gc *gc, libxl__ev_time *ev) { if (!ev->infinite) { - OSEVENT_HOOK_VOID(timeout_deregister, ev->for_app_reg); + struct timeval right_away = { 0, 0 }; + if (ev->nexus) /* only set if app provided hooks */ + ev->nexus->ev = 0; + OSEVENT_HOOK_VOID(timeout,modify, + noop /* release nexus in _occurred_ */, + &ev->nexus->for_app_reg, right_away); LIBXL_TAILQ_REMOVE(&CTX->etimes, ev, entry); } } @@ -202,16 +311,16 @@ int libxl__ev_time_register_abs(libxl__gc *gc, libxl__ev_time *ev, libxl__ev_time_callback *func, - struct timeval abs) + struct timeval absolute) { int rc; CTX_LOCK; DBG("ev_time=%p register abs=%lu.%06lu", - ev, (unsigned long)abs.tv_sec, (unsigned long)abs.tv_usec); + ev, (unsigned long)absolute.tv_sec, (unsigned long)absolute.tv_usec); - rc = time_register_finite(gc, ev, abs); + rc = time_register_finite(gc, ev, absolute); if (rc) goto out; ev->func = func; @@ -228,7 +337,7 @@ libxl__ev_time_callback *func, int milliseconds /* as for poll(2) */) { - struct timeval abs; + struct timeval absolute; int rc; CTX_LOCK; @@ -238,10 +347,10 @@ if (milliseconds < 0) { ev->infinite = 1; } else { - rc = time_rel_to_abs(gc, milliseconds, &abs); + rc = time_rel_to_abs(gc, milliseconds, &absolute); if (rc) goto out; - rc = time_register_finite(gc, ev, abs); + rc = time_register_finite(gc, ev, absolute); if (rc) goto out; } @@ -254,69 +363,6 @@ return rc; } -int libxl__ev_time_modify_abs(libxl__gc *gc, libxl__ev_time *ev, - struct timeval abs) -{ - int rc; - - CTX_LOCK; - - DBG("ev_time=%p modify abs==%lu.%06lu", - ev, (unsigned long)abs.tv_sec, (unsigned long)abs.tv_usec); - - assert(libxl__ev_time_isregistered(ev)); - - if (ev->infinite) { - rc = time_register_finite(gc, ev, abs); - if (rc) goto out; - } else { - rc = OSEVENT_HOOK(timeout_modify, &ev->for_app_reg, abs); - if (rc) goto out; - - LIBXL_TAILQ_REMOVE(&CTX->etimes, ev, entry); - ev->abs = abs; - time_insert_finite(gc, ev); - } - - rc = 0; - out: - time_done_debug(gc,__func__,ev,rc); - CTX_UNLOCK; - return rc; -} - -int libxl__ev_time_modify_rel(libxl__gc *gc, libxl__ev_time *ev, - int milliseconds) -{ - struct timeval abs; - int rc; - - CTX_LOCK; - - DBG("ev_time=%p modify ms=%d", ev, milliseconds); - - assert(libxl__ev_time_isregistered(ev)); - - if (milliseconds < 0) { - time_deregister(gc, ev); - ev->infinite = 1; - rc = 0; - goto out; - } - - rc = time_rel_to_abs(gc, milliseconds, &abs); - if (rc) goto out; - - rc = libxl__ev_time_modify_abs(gc, ev, abs); - if (rc) goto out; - - rc = 0; - out: - time_done_debug(gc,__func__,ev,rc); - CTX_UNLOCK; - return rc; -} - void libxl__ev_time_deregister(libxl__gc *gc, libxl__ev_time *ev) { CTX_LOCK; @@ -1009,35 +1055,58 @@ void libxl_osevent_occurred_fd(libxl_ctx *ctx, void *for_libxl, - int fd, short events, short revents) + int fd, short events_ign, short revents_ign) { - libxl__ev_fd *ev = for_libxl; - EGC_INIT(ctx); CTX_LOCK; assert(!CTX->osevent_in_hook); - assert(fd == ev->fd); - revents &= ev->events; - if (revents) - ev->func(egc, ev, fd, ev->events, revents); + libxl__ev_fd *ev = osevent_ev_from_hook_nexus(ctx, for_libxl); + if (!ev) goto out; + if (ev->fd != fd) goto out; + struct pollfd check; + for (;;) { + check.fd = fd; + check.events = ev->events; + int r = poll(&check, 1, 0); + if (!r) + goto out; + if (r==1) + break; + assert(r<0); + if (errno != EINTR) { + LIBXL__EVENT_DISASTER(egc, "failed poll to check for fd", errno, 0); + goto out; + } + } + + if (check.revents) + ev->func(egc, ev, fd, ev->events, check.revents); + + out: CTX_UNLOCK; EGC_FREE; } void libxl_osevent_occurred_timeout(libxl_ctx *ctx, void *for_libxl) { - libxl__ev_time *ev = for_libxl; - EGC_INIT(ctx); CTX_LOCK; assert(!CTX->osevent_in_hook); + libxl__osevent_hook_nexus *nexus = for_libxl; + libxl__ev_time *ev = osevent_ev_from_hook_nexus(ctx, nexus); + + osevent_release_nexus(gc, &CTX->hook_timeout_nexi_idle, nexus); + + if (!ev) goto out; assert(!ev->infinite); + LIBXL_TAILQ_REMOVE(&CTX->etimes, ev, entry); ev->func(egc, ev, &ev->abs); + out: CTX_UNLOCK; EGC_FREE; } diff -Nru xen-4.2.1/tools/libxl/libxl_event.h xen-4.2.2/tools/libxl/libxl_event.h --- xen-4.2.1/tools/libxl/libxl_event.h 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/tools/libxl/libxl_event.h 2013-04-23 18:42:55.000000000 +0200 @@ -287,8 +287,10 @@ int (*timeout_register)(void *user, void **for_app_registration_out, struct timeval abs, void *for_libxl); int (*timeout_modify)(void *user, void **for_app_registration_update, - struct timeval abs); - void (*timeout_deregister)(void *user, void *for_app_registration); + struct timeval abs) + /* only ever called with abs={0,0}, meaning ASAP */; + void (*timeout_deregister)(void *user, void *for_app_registration) + /* will never be called */; } libxl_osevent_hooks; /* The application which calls register_fd_hooks promises to @@ -337,6 +339,17 @@ * register (or modify), and pass it to subsequent calls to modify * or deregister. * + * Note that the application must cope with a call from libxl to + * timeout_modify racing with its own call to + * libxl__osevent_occurred_timeout. libxl guarantees that + * timeout_modify will only be called with abs={0,0} but the + * application must still ensure that libxl's attempt to cause the + * timeout to occur immediately is safely ignored even the timeout is + * actually already in the process of occurring. + * + * timeout_deregister is not used because it forms part of a + * deprecated unsafe mode of use of the API. + * * osevent_register_hooks may be called only once for each libxl_ctx. * libxl may make calls to register/modify/deregister from within * any libxl function (indeed, it will usually call register from diff -Nru xen-4.2.1/tools/libxl/libxl_internal.h xen-4.2.2/tools/libxl/libxl_internal.h --- xen-4.2.1/tools/libxl/libxl_internal.h 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/tools/libxl/libxl_internal.h 2013-04-23 18:42:55.000000000 +0200 @@ -136,6 +136,8 @@ typedef struct libxl__egc libxl__egc; typedef struct libxl__ao libxl__ao; typedef struct libxl__aop_occurred libxl__aop_occurred; +typedef struct libxl__osevent_hook_nexus libxl__osevent_hook_nexus; +typedef struct libxl__osevent_hook_nexi libxl__osevent_hook_nexi; _hidden void libxl__alloc_failed(libxl_ctx *, const char *func, size_t nmemb, size_t size) __attribute__((noreturn)); @@ -163,7 +165,7 @@ libxl__ev_fd_callback *func; /* remainder is private for libxl__ev_fd... */ LIBXL_LIST_ENTRY(libxl__ev_fd) entry; - void *for_app_reg; + libxl__osevent_hook_nexus *nexus; }; @@ -178,7 +180,7 @@ int infinite; /* not registered in list or with app if infinite */ LIBXL_TAILQ_ENTRY(libxl__ev_time) entry; struct timeval abs; - void *for_app_reg; + libxl__osevent_hook_nexus *nexus; }; typedef struct libxl__ev_xswatch libxl__ev_xswatch; @@ -329,6 +331,8 @@ libxl__poller poller_app; /* libxl_osevent_beforepoll and _afterpoll */ LIBXL_LIST_HEAD(, libxl__poller) pollers_event, pollers_idle; + LIBXL_SLIST_HEAD(libxl__osevent_hook_nexi, libxl__osevent_hook_nexus) + hook_fd_nexi_idle, hook_timeout_nexi_idle; LIBXL_LIST_HEAD(, libxl__ev_fd) efds; LIBXL_TAILQ_HEAD(, libxl__ev_time) etimes; @@ -877,7 +881,8 @@ } libxl__domain_build_state; _hidden int libxl__build_pre(libxl__gc *gc, uint32_t domid, - libxl_domain_build_info *info, libxl__domain_build_state *state); + libxl_domain_config * const d_config, + libxl__domain_build_state *state); _hidden int libxl__build_post(libxl__gc *gc, uint32_t domid, libxl_domain_build_info *info, libxl__domain_build_state *state, char **vms_ents, char **local_ents); @@ -1270,7 +1275,7 @@ uint32_t *domid); _hidden int libxl__domain_build(libxl__gc *gc, - libxl_domain_build_info *info, + libxl_domain_config *d_config, uint32_t domid, libxl__domain_build_state *state); @@ -1400,6 +1405,8 @@ _hidden int libxl__qmp_resume(libxl__gc *gc, int domid); /* Save current QEMU state into fd. */ _hidden int libxl__qmp_save(libxl__gc *gc, int domid, const char *filename); +/* Set dirty bitmap logging status */ +_hidden int libxl__qmp_set_global_dirty_log(libxl__gc *gc, int domid, bool enable); /* close and free the QMP handler */ _hidden void libxl__qmp_close(libxl__qmp_handler *qmp); /* remove the socket file, if the file has already been removed, @@ -1428,10 +1435,8 @@ _hidden yajl_gen_status libxl__yajl_gen_enum(yajl_gen hand, const char *str); typedef enum { - JSON_ERROR, JSON_NULL, - JSON_TRUE, - JSON_FALSE, + JSON_BOOL, JSON_INTEGER, JSON_DOUBLE, /* number is store in string, it's too big to be a long long or a double */ @@ -1445,6 +1450,7 @@ typedef struct libxl__json_object { libxl__json_node_type type; union { + bool b; long long i; double d; char *string; @@ -1463,6 +1469,10 @@ typedef struct libxl__yajl_ctx libxl__yajl_ctx; +static inline bool libxl__json_object_is_bool(const libxl__json_object *o) +{ + return o != NULL && o->type == JSON_BOOL; +} static inline bool libxl__json_object_is_string(const libxl__json_object *o) { return o != NULL && o->type == JSON_STRING; @@ -1480,6 +1490,13 @@ return o != NULL && o->type == JSON_ARRAY; } +static inline bool libxl__json_object_get_bool(const libxl__json_object *o) +{ + if (libxl__json_object_is_bool(o)) + return o->u.b; + else + return false; +} static inline const char *libxl__json_object_get_string(const libxl__json_object *o) { @@ -1512,6 +1529,15 @@ return -1; } +/* + * NOGC can be used with those json_object functions, but the + * libxl__json_object* will need to be freed with libxl__json_object_free. + */ +_hidden libxl__json_object *libxl__json_object_alloc(libxl__gc *gc_opt, + libxl__json_node_type type); +_hidden int libxl__json_object_append_to(libxl__gc *gc_opt, + libxl__json_object *obj, + libxl__json_object *dst); _hidden libxl__json_object *libxl__json_array_get(const libxl__json_object *o, int i); _hidden @@ -1520,9 +1546,13 @@ _hidden const libxl__json_object *libxl__json_map_get(const char *key, const libxl__json_object *o, libxl__json_node_type expected_type); -_hidden void libxl__json_object_free(libxl__gc *gc, libxl__json_object *obj); +_hidden yajl_status libxl__json_object_to_yajl_gen(libxl__gc *gc_opt, + yajl_gen hand, + libxl__json_object *param); +_hidden void libxl__json_object_free(libxl__gc *gc_opt, + libxl__json_object *obj); -_hidden libxl__json_object *libxl__json_parse(libxl__gc *gc, const char *s); +_hidden libxl__json_object *libxl__json_parse(libxl__gc *gc_opt, const char *s); /* Based on /local/domain/$domid/dm-version xenstore key * default is qemu xen traditional */ diff -Nru xen-4.2.1/tools/libxl/libxl_json.c xen-4.2.2/tools/libxl/libxl_json.c --- xen-4.2.1/tools/libxl/libxl_json.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/tools/libxl/libxl_json.c 2013-04-23 18:42:55.000000000 +0200 @@ -205,7 +205,7 @@ * libxl__json_object helper functions */ -static libxl__json_object *json_object_alloc(libxl__gc *gc, +libxl__json_object *libxl__json_object_alloc(libxl__gc *gc, libxl__json_node_type type) { libxl__json_object *obj; @@ -236,7 +236,7 @@ return obj; } -static int json_object_append_to(libxl__gc *gc, +int libxl__json_object_append_to(libxl__gc *gc, libxl__json_object *obj, libxl__json_object *dst) { @@ -381,6 +381,67 @@ return NULL; } +yajl_status libxl__json_object_to_yajl_gen(libxl__gc *gc, + yajl_gen hand, + libxl__json_object *obj) +{ + int idx = 0; + yajl_status rc; + + switch (obj->type) { + case JSON_NULL: + return yajl_gen_null(hand); + case JSON_BOOL: + return yajl_gen_bool(hand, obj->u.b); + case JSON_INTEGER: + return yajl_gen_integer(hand, obj->u.i); + case JSON_DOUBLE: + return yajl_gen_double(hand, obj->u.d); + case JSON_NUMBER: + return yajl_gen_number(hand, obj->u.string, strlen(obj->u.string)); + case JSON_STRING: + return libxl__yajl_gen_asciiz(hand, obj->u.string); + case JSON_MAP: { + libxl__json_map_node *node = NULL; + + rc = yajl_gen_map_open(hand); + if (rc != yajl_status_ok) + return rc; + for (idx = 0; idx < obj->u.map->count; idx++) { + if (flexarray_get(obj->u.map, idx, (void**)&node) != 0) + break; + + rc = libxl__yajl_gen_asciiz(hand, node->map_key); + if (rc != yajl_status_ok) + return rc; + rc = libxl__json_object_to_yajl_gen(gc, hand, node->obj); + if (rc != yajl_status_ok) + return rc; + } + return yajl_gen_map_close(hand); + } + case JSON_ARRAY: { + libxl__json_object *node = NULL; + + rc = yajl_gen_array_open(hand); + if (rc != yajl_status_ok) + return rc; + for (idx = 0; idx < obj->u.array->count; idx++) { + if (flexarray_get(obj->u.array, idx, (void**)&node) != 0) + break; + rc = libxl__json_object_to_yajl_gen(gc, hand, node); + if (rc != yajl_status_ok) + return rc; + } + return yajl_gen_array_close(hand); + } + case JSON_ANY: + /* JSON_ANY is not a valid value for obj->type. */ + ; + } + abort(); +} + /* * JSON callbacks @@ -393,10 +454,10 @@ DEBUG_GEN(ctx, null); - if ((obj = json_object_alloc(ctx->gc, JSON_NULL)) == NULL) + if ((obj = libxl__json_object_alloc(ctx->gc, JSON_NULL)) == NULL) return 0; - if (json_object_append_to(ctx->gc, obj, ctx->current) == -1) { + if (libxl__json_object_append_to(ctx->gc, obj, ctx->current) == -1) { libxl__json_object_free(ctx->gc, obj); return 0; } @@ -411,11 +472,10 @@ DEBUG_GEN_VALUE(ctx, bool, boolean); - if ((obj = json_object_alloc(ctx->gc, - boolean ? JSON_TRUE : JSON_FALSE)) == NULL) + if ((obj = libxl__json_object_alloc(ctx->gc, JSON_BOOL)) == NULL) return 0; - if (json_object_append_to(ctx->gc, obj, ctx->current) == -1) { + if (libxl__json_object_append_to(ctx->gc, obj, ctx->current) == -1) { libxl__json_object_free(ctx->gc, obj); return 0; } @@ -448,7 +508,7 @@ goto error; } - if ((obj = json_object_alloc(ctx->gc, JSON_DOUBLE)) == NULL) + if ((obj = libxl__json_object_alloc(ctx->gc, JSON_DOUBLE)) == NULL) return 0; obj->u.d = d; } else { @@ -458,7 +518,7 @@ goto error; } - if ((obj = json_object_alloc(ctx->gc, JSON_INTEGER)) == NULL) + if ((obj = libxl__json_object_alloc(ctx->gc, JSON_INTEGER)) == NULL) return 0; obj->u.i = i; } @@ -466,7 +526,7 @@ error: /* If the conversion fail, we just store the original string. */ - if ((obj = json_object_alloc(ctx->gc, JSON_NUMBER)) == NULL) + if ((obj = libxl__json_object_alloc(ctx->gc, JSON_NUMBER)) == NULL) return 0; t = malloc(len + 1); @@ -481,7 +541,7 @@ obj->u.string = t; out: - if (json_object_append_to(ctx->gc, obj, ctx->current) == -1) { + if (libxl__json_object_append_to(ctx->gc, obj, ctx->current) == -1) { libxl__json_object_free(ctx->gc, obj); return 0; } @@ -508,13 +568,13 @@ strncpy(t, (const char *) str, len); t[len] = 0; - if ((obj = json_object_alloc(ctx->gc, JSON_STRING)) == NULL) { + if ((obj = libxl__json_object_alloc(ctx->gc, JSON_STRING)) == NULL) { free(t); return 0; } obj->u.string = t; - if (json_object_append_to(ctx->gc, obj, ctx->current) == -1) { + if (libxl__json_object_append_to(ctx->gc, obj, ctx->current) == -1) { libxl__json_object_free(ctx->gc, obj); return 0; } @@ -573,11 +633,11 @@ DEBUG_GEN(ctx, map_open); - if ((obj = json_object_alloc(ctx->gc, JSON_MAP)) == NULL) + if ((obj = libxl__json_object_alloc(ctx->gc, JSON_MAP)) == NULL) return 0; if (ctx->current) { - if (json_object_append_to(ctx->gc, obj, ctx->current) == -1) { + if (libxl__json_object_append_to(ctx->gc, obj, ctx->current) == -1) { libxl__json_object_free(ctx->gc, obj); return 0; } @@ -615,11 +675,11 @@ DEBUG_GEN(ctx, array_open); - if ((obj = json_object_alloc(ctx->gc, JSON_ARRAY)) == NULL) + if ((obj = libxl__json_object_alloc(ctx->gc, JSON_ARRAY)) == NULL) return 0; if (ctx->current) { - if (json_object_append_to(ctx->gc, obj, ctx->current) == -1) { + if (libxl__json_object_append_to(ctx->gc, obj, ctx->current) == -1) { libxl__json_object_free(ctx->gc, obj); return 0; } diff -Nru xen-4.2.1/tools/libxl/libxl_qmp.c xen-4.2.2/tools/libxl/libxl_qmp.c --- xen-4.2.1/tools/libxl/libxl_qmp.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/tools/libxl/libxl_qmp.c 2013-04-23 18:42:55.000000000 +0200 @@ -78,7 +78,7 @@ }; static int qmp_send(libxl__qmp_handler *qmp, - const char *cmd, libxl_key_value_list *args, + const char *cmd, libxl__json_object *args, qmp_callback_t callback, void *opaque, qmp_request_context *context); @@ -178,7 +178,8 @@ goto out; } - if (libxl__json_map_get("enabled", o, JSON_FALSE)) { + obj = libxl__json_map_get("enabled", o, JSON_BOOL); + if (!obj || !libxl__json_object_get_bool(obj)) { rc = 0; goto out; } @@ -377,7 +378,7 @@ ret = libxl_fd_set_cloexec(qmp->ctx, qmp->qmp_fd, 1); if (ret) return -1; - memset(&qmp->addr, 0, sizeof (&qmp->addr)); + memset(&qmp->addr, 0, sizeof (qmp->addr)); qmp->addr.sun_family = AF_UNIX; strncpy(qmp->addr.sun_path, qmp_socket_path, sizeof (qmp->addr.sun_path)); @@ -502,7 +503,7 @@ } static char *qmp_send_prepare(libxl__gc *gc, libxl__qmp_handler *qmp, - const char *cmd, libxl_key_value_list *args, + const char *cmd, libxl__json_object *args, qmp_callback_t callback, void *opaque, qmp_request_context *context) { @@ -526,7 +527,7 @@ yajl_gen_integer(hand, ++qmp->last_id_used); if (args) { libxl__yajl_gen_asciiz(hand, "arguments"); - libxl_key_value_list_gen_json(hand, args); + libxl__json_object_to_yajl_gen(gc, hand, args); } yajl_gen_map_close(hand); @@ -560,7 +561,7 @@ } static int qmp_send(libxl__qmp_handler *qmp, - const char *cmd, libxl_key_value_list *args, + const char *cmd, libxl__json_object *args, qmp_callback_t callback, void *opaque, qmp_request_context *context) { @@ -588,7 +589,7 @@ } static int qmp_synchronous_send(libxl__qmp_handler *qmp, const char *cmd, - libxl_key_value_list *args, + libxl__json_object *args, qmp_callback_t callback, void *opaque, int ask_timeout) { @@ -624,6 +625,55 @@ } /* + * QMP Parameters Helpers + */ +static void qmp_parameters_common_add(libxl__gc *gc, + libxl__json_object **param, + const char *name, + libxl__json_object *obj) +{ + libxl__json_map_node *arg = NULL; + + if (!*param) { + *param = libxl__json_object_alloc(gc, JSON_MAP); + } + + arg = libxl__zalloc(gc, sizeof(*arg)); + + arg->map_key = libxl__strdup(gc, name); + arg->obj = obj; + + flexarray_append((*param)->u.map, arg); +} + +static void qmp_parameters_add_string(libxl__gc *gc, + libxl__json_object **param, + const char *name, const char *argument) +{ + libxl__json_object *obj; + + obj = libxl__json_object_alloc(gc, JSON_STRING); + obj->u.string = libxl__strdup(gc, argument); + + qmp_parameters_common_add(gc, param, name, obj); +} + +static void qmp_parameters_add_bool(libxl__gc *gc, + libxl__json_object **param, + const char *name, bool b) +{ + libxl__json_object *obj; + + obj = libxl__json_object_alloc(gc, JSON_BOOL); + obj->u.b = b; + qmp_parameters_common_add(gc, param, name, obj); +} + +#define QMP_PARAMETERS_SPRINTF(args, name, format, ...) \ + qmp_parameters_add_string(gc, args, name, \ + libxl__sprintf(gc, format, __VA_ARGS__)) + +/* * API */ @@ -746,11 +796,27 @@ return rc; } +static int qmp_run_command(libxl__gc *gc, int domid, + const char *cmd, libxl__json_object *args, + qmp_callback_t callback, void *opaque) +{ + libxl__qmp_handler *qmp = NULL; + int rc = 0; + + qmp = libxl__qmp_initialize(gc, domid); + if (!qmp) + return ERROR_FAIL; + + rc = qmp_synchronous_send(qmp, cmd, args, callback, opaque, qmp->timeout); + + libxl__qmp_close(qmp); + return rc; +} + int libxl__qmp_pci_add(libxl__gc *gc, int domid, libxl_device_pci *pcidev) { libxl__qmp_handler *qmp = NULL; - flexarray_t *parameters = NULL; - libxl_key_value_list args = NULL; + libxl__json_object *args = NULL; char *hostaddr = NULL; int rc = 0; @@ -763,58 +829,32 @@ if (!hostaddr) return -1; - parameters = flexarray_make(6, 1); - flexarray_append_pair(parameters, "driver", "xen-pci-passthrough"); - flexarray_append_pair(parameters, "id", - libxl__sprintf(gc, PCI_PT_QDEV_ID, - pcidev->bus, pcidev->dev, - pcidev->func)); - flexarray_append_pair(parameters, "hostaddr", hostaddr); + qmp_parameters_add_string(gc, &args, "driver", "xen-pci-passthrough"); + QMP_PARAMETERS_SPRINTF(&args, "id", PCI_PT_QDEV_ID, + pcidev->bus, pcidev->dev, pcidev->func); + qmp_parameters_add_string(gc, &args, "hostaddr", hostaddr); if (pcidev->vdevfn) { - flexarray_append_pair(parameters, "addr", - libxl__sprintf(gc, "%x.%x", - PCI_SLOT(pcidev->vdevfn), - PCI_FUNC(pcidev->vdevfn))); + QMP_PARAMETERS_SPRINTF(&args, "addr", "%x.%x", + PCI_SLOT(pcidev->vdevfn), PCI_FUNC(pcidev->vdevfn)); } - args = libxl__xs_kvs_of_flexarray(gc, parameters, parameters->count); - if (!args) - return -1; - rc = qmp_synchronous_send(qmp, "device_add", &args, + rc = qmp_synchronous_send(qmp, "device_add", args, NULL, NULL, qmp->timeout); if (rc == 0) { rc = qmp_synchronous_send(qmp, "query-pci", NULL, pci_add_callback, pcidev, qmp->timeout); } - flexarray_free(parameters); libxl__qmp_close(qmp); return rc; } static int qmp_device_del(libxl__gc *gc, int domid, char *id) { - libxl__qmp_handler *qmp = NULL; - flexarray_t *parameters = NULL; - libxl_key_value_list args = NULL; - int rc = 0; - - qmp = libxl__qmp_initialize(gc, domid); - if (!qmp) - return ERROR_FAIL; - - parameters = flexarray_make(2, 1); - flexarray_append_pair(parameters, "id", id); - args = libxl__xs_kvs_of_flexarray(gc, parameters, parameters->count); - if (!args) - return ERROR_NOMEM; + libxl__json_object *args = NULL; - rc = qmp_synchronous_send(qmp, "device_del", &args, - NULL, NULL, qmp->timeout); - - flexarray_free(parameters); - libxl__qmp_close(qmp); - return rc; + qmp_parameters_add_string(gc, &args, "id", id); + return qmp_run_command(gc, domid, "device_del", args, NULL, NULL); } int libxl__qmp_pci_del(libxl__gc *gc, int domid, libxl_device_pci *pcidev) @@ -829,90 +869,49 @@ int libxl__qmp_save(libxl__gc *gc, int domid, const char *filename) { - libxl__qmp_handler *qmp = NULL; - flexarray_t *parameters = NULL; - libxl_key_value_list args = NULL; - int rc = 0; + libxl__json_object *args = NULL; - qmp = libxl__qmp_initialize(gc, domid); - if (!qmp) - return ERROR_FAIL; - - parameters = flexarray_make(2, 1); - if (!parameters) { - rc = ERROR_NOMEM; - goto out; - } - flexarray_append_pair(parameters, "filename", (char *)filename); - args = libxl__xs_kvs_of_flexarray(gc, parameters, parameters->count); - if (!args) { - rc = ERROR_NOMEM; - goto out2; - } - - rc = qmp_synchronous_send(qmp, "xen-save-devices-state", &args, - NULL, NULL, qmp->timeout); - -out2: - flexarray_free(parameters); -out: - libxl__qmp_close(qmp); - return rc; + qmp_parameters_add_string(gc, &args, "filename", (char *)filename); + return qmp_run_command(gc, domid, "xen-save-devices-state", args, + NULL, NULL); } static int qmp_change(libxl__gc *gc, libxl__qmp_handler *qmp, char *device, char *target, char *arg) { - flexarray_t *parameters = NULL; - libxl_key_value_list args = NULL; + libxl__json_object *args = NULL; int rc = 0; - parameters = flexarray_make(6, 1); - flexarray_append_pair(parameters, "device", device); - flexarray_append_pair(parameters, "target", target); - if (arg) - flexarray_append_pair(parameters, "arg", arg); - args = libxl__xs_kvs_of_flexarray(gc, parameters, parameters->count); - if (!args) - return ERROR_NOMEM; + qmp_parameters_add_string(gc, &args, "device", device); + qmp_parameters_add_string(gc, &args, "target", target); + if (arg) { + qmp_parameters_add_string(gc, &args, "arg", arg); + } - rc = qmp_synchronous_send(qmp, "change", &args, + rc = qmp_synchronous_send(qmp, "change", args, NULL, NULL, qmp->timeout); - flexarray_free(parameters); return rc; } int libxl__qmp_stop(libxl__gc *gc, int domid) { - libxl__qmp_handler *qmp = NULL; - int rc = 0; - - qmp = libxl__qmp_initialize(gc, domid); - if (!qmp) - return ERROR_FAIL; - - rc = qmp_synchronous_send(qmp, "stop", NULL, - NULL, NULL, qmp->timeout); - - libxl__qmp_close(qmp); - return rc; + return qmp_run_command(gc, domid, "stop", NULL, NULL, NULL); } int libxl__qmp_resume(libxl__gc *gc, int domid) { - libxl__qmp_handler *qmp = NULL; - int rc = 0; + return qmp_run_command(gc, domid, "cont", NULL, NULL, NULL); +} - qmp = libxl__qmp_initialize(gc, domid); - if (!qmp) - return ERROR_FAIL; +int libxl__qmp_set_global_dirty_log(libxl__gc *gc, int domid, bool enable) +{ + libxl__json_object *args = NULL; - rc = qmp_synchronous_send(qmp, "cont", NULL, - NULL, NULL, qmp->timeout); + qmp_parameters_add_bool(gc, &args, "enable", enable); - libxl__qmp_close(qmp); - return rc; + return qmp_run_command(gc, domid, "xen-set-global-dirty-log", args, + NULL, NULL); } int libxl__qmp_initializations(libxl__gc *gc, uint32_t domid, diff -Nru xen-4.2.1/tools/ocaml/libs/xb/partial.ml xen-4.2.2/tools/ocaml/libs/xb/partial.ml --- xen-4.2.1/tools/ocaml/libs/xb/partial.ml 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/tools/ocaml/libs/xb/partial.ml 2013-04-23 18:42:55.000000000 +0200 @@ -27,8 +27,15 @@ external header_of_string_internal: string -> int * int * int * int = "stub_header_of_string" +let xenstore_payload_max = 4096 (* xen/include/public/io/xs_wire.h *) + let of_string s = let tid, rid, opint, dlen = header_of_string_internal s in + (* A packet which is bigger than xenstore_payload_max is illegal. + This will leave the guest connection is a bad state and will + be hard to recover from without restarting the connection + (ie rebooting the guest) *) + let dlen = min xenstore_payload_max dlen in { tid = tid; rid = rid; @@ -38,6 +45,7 @@ } let append pkt s sz = + if pkt.len > 4096 then failwith "Buffer.add: cannot grow buffer"; Buffer.add_string pkt.buf (String.sub s 0 sz) let to_complete pkt = diff -Nru xen-4.2.1/tools/ocaml/libs/xb/xs_ring_stubs.c xen-4.2.2/tools/ocaml/libs/xb/xs_ring_stubs.c --- xen-4.2.1/tools/ocaml/libs/xb/xs_ring_stubs.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/tools/ocaml/libs/xb/xs_ring_stubs.c 2013-04-23 18:42:55.000000000 +0200 @@ -39,21 +39,23 @@ char *buffer, int len) { struct xenstore_domain_interface *intf = interface->addr; - XENSTORE_RING_IDX cons, prod; + XENSTORE_RING_IDX cons, prod; /* offsets only */ int to_read; - cons = intf->req_cons; - prod = intf->req_prod; + cons = *(volatile uint32*)&intf->req_cons; + prod = *(volatile uint32*)&intf->req_prod; xen_mb(); if (prod == cons) return 0; - if (MASK_XENSTORE_IDX(prod) > MASK_XENSTORE_IDX(cons)) + cons = MASK_XENSTORE_IDX(cons); + prod = MASK_XENSTORE_IDX(prod); + if (prod > cons) to_read = prod - cons; else - to_read = XENSTORE_RING_SIZE - MASK_XENSTORE_IDX(cons); + to_read = XENSTORE_RING_SIZE - cons; if (to_read < len) len = to_read; - memcpy(buffer, intf->req + MASK_XENSTORE_IDX(cons), len); + memcpy(buffer, intf->req + cons, len); xen_mb(); intf->req_cons += len; return len; @@ -66,8 +68,8 @@ XENSTORE_RING_IDX cons, prod; int can_write; - cons = intf->rsp_cons; - prod = intf->rsp_prod; + cons = *(volatile uint32*)&intf->rsp_cons; + prod = *(volatile uint32*)&intf->rsp_prod; xen_mb(); if ( (prod - cons) >= XENSTORE_RING_SIZE ) return 0; diff -Nru xen-4.2.1/tools/ocaml/libs/xc/xenctrl_stubs.c xen-4.2.2/tools/ocaml/libs/xc/xenctrl_stubs.c --- xen-4.2.1/tools/ocaml/libs/xc/xenctrl_stubs.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/tools/ocaml/libs/xc/xenctrl_stubs.c 2013-04-23 18:42:55.000000000 +0200 @@ -1085,11 +1085,10 @@ static uint32_t pci_dev_to_bdf(int domain, int bus, int slot, int func) { - uint32_t bdf = 0; - bdf |= (bus & 0xff) << 16; - bdf |= (slot & 0x1f) << 11; - bdf |= (func & 0x7) << 8; - return bdf; + return ((uint32_t)domain & 0xffff) << 16 | + ((uint32_t)bus & 0xff) << 8 | + ((uint32_t)slot & 0x1f) << 3 | + ((uint32_t)func & 0x7); } CAMLprim value stub_xc_domain_test_assign_device(value xch, value domid, value desc) diff -Nru xen-4.2.1/tools/python/xen/lowlevel/netlink/libnetlink.c xen-4.2.2/tools/python/xen/lowlevel/netlink/libnetlink.c --- xen-4.2.1/tools/python/xen/lowlevel/netlink/libnetlink.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/tools/python/xen/lowlevel/netlink/libnetlink.c 2013-04-23 18:42:55.000000000 +0200 @@ -37,7 +37,7 @@ int sndbuf = 32768; int rcvbuf = 32768; - memset(rth, 0, sizeof(rth)); + memset(rth, 0, sizeof(*rth)); rth->fd = socket(AF_NETLINK, SOCK_RAW, protocol); if (rth->fd < 0) { diff -Nru xen-4.2.1/tools/python/xen/xend/server/irqif.py xen-4.2.2/tools/python/xen/xend/server/irqif.py --- xen-4.2.1/tools/python/xen/xend/server/irqif.py 2012-09-28 11:02:51.000000000 +0200 +++ xen-4.2.2/tools/python/xen/xend/server/irqif.py 2013-04-23 18:42:55.000000000 +0200 @@ -73,6 +73,12 @@ pirq = get_param('irq') + rc = xc.physdev_map_pirq(domid = self.getDomid(), + index = pirq, + pirq = pirq) + if rc < 0: + raise VmError('irq: Failed to map irq %x' % (pirq)) + rc = xc.domain_irq_permission(domid = self.getDomid(), pirq = pirq, allow_access = True) @@ -81,12 +87,6 @@ #todo non-fatal raise VmError( 'irq: Failed to configure irq: %d' % (pirq)) - rc = xc.physdev_map_pirq(domid = self.getDomid(), - index = pirq, - pirq = pirq) - if rc < 0: - raise VmError( - 'irq: Failed to map irq %x' % (pirq)) back = dict([(k, config[k]) for k in self.valid_cfg if k in config]) return (self.allocateDeviceID(), back, {}) diff -Nru xen-4.2.1/tools/xenstat/libxenstat/src/xenstat_linux.c xen-4.2.2/tools/xenstat/libxenstat/src/xenstat_linux.c --- xen-4.2.1/tools/xenstat/libxenstat/src/xenstat_linux.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/tools/xenstat/libxenstat/src/xenstat_linux.c 2013-04-23 18:42:55.000000000 +0200 @@ -113,7 +113,7 @@ /* Initialize all variables called has passed as non-NULL to zeros */ if (iface != NULL) - memset(iface, 0, sizeof(iface)); + memset(iface, 0, sizeof(*iface)); if (rxBytes != NULL) *rxBytes = 0; if (rxPackets != NULL) diff -Nru xen-4.2.1/unmodified_drivers/linux-2.6/compat-include/xen/platform-compat.h xen-4.2.2/unmodified_drivers/linux-2.6/compat-include/xen/platform-compat.h --- xen-4.2.1/unmodified_drivers/linux-2.6/compat-include/xen/platform-compat.h 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/unmodified_drivers/linux-2.6/compat-include/xen/platform-compat.h 2013-04-23 18:42:55.000000000 +0200 @@ -13,10 +13,19 @@ #define DEFINE_SPINLOCK(x) spinlock_t x = SPIN_LOCK_UNLOCKED #endif -#if defined(_LINUX_INIT_H) && !defined(__init) +#ifdef _LINUX_INIT_H + +#ifndef __init #define __init #endif +#ifndef __devinit +#define __devinit +#define __devinitdata +#endif + +#endif /* _LINUX_INIT_H */ + #if defined(__LINUX_CACHE_H) && !defined(__read_mostly) #define __read_mostly #endif diff -Nru xen-4.2.1/xen/arch/x86/acpi/cpufreq/powernow.c xen-4.2.2/xen/arch/x86/acpi/cpufreq/powernow.c --- xen-4.2.1/xen/arch/x86/acpi/cpufreq/powernow.c 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/acpi/cpufreq/powernow.c 2013-04-23 18:42:55.000000000 +0200 @@ -159,6 +159,51 @@ return result; } +static void amd_fixup_frequency(struct xen_processor_px *px) +{ + u32 hi, lo, fid, did; + int index = px->control & 0x00000007; + const struct cpuinfo_x86 *c = ¤t_cpu_data; + + if ((c->x86 != 0x10 || c->x86_model >= 10) && c->x86 != 0x11) + return; + + rdmsr(MSR_PSTATE_DEF_BASE + index, lo, hi); + /* + * MSR C001_0064+: + * Bit 63: PstateEn. Read-write. If set, the P-state is valid. + */ + if (!(hi & (1U << 31))) + return; + + fid = lo & 0x3f; + did = (lo >> 6) & 7; + if (c->x86 == 0x10) + px->core_frequency = (100 * (fid + 16)) >> did; + else + px->core_frequency = (100 * (fid + 8)) >> did; +} + +struct amd_cpu_data { + struct processor_performance *perf; + u32 max_hw_pstate; +}; + +static void get_cpu_data(void *arg) +{ + struct amd_cpu_data *data = arg; + struct processor_performance *perf = data->perf; + uint64_t msr_content; + unsigned int i; + + rdmsrl(MSR_PSTATE_CUR_LIMIT, msr_content); + data->max_hw_pstate = (msr_content & HW_PSTATE_MAX_MASK) >> + HW_PSTATE_MAX_SHIFT; + + for (i = 0; i < perf->state_count && i <= data->max_hw_pstate; i++) + amd_fixup_frequency(&perf->states[i]); +} + static int powernow_cpufreq_verify(struct cpufreq_policy *policy) { struct acpi_cpufreq_data *data; @@ -205,8 +250,7 @@ struct acpi_cpufreq_data *data; unsigned int result = 0; struct processor_performance *perf; - u32 max_hw_pstate; - uint64_t msr_content; + struct amd_cpu_data info; struct cpuinfo_x86 *c = &cpu_data[policy->cpu]; data = xzalloc(struct acpi_cpufreq_data); @@ -217,7 +261,7 @@ data->acpi_data = &processor_pminfo[cpu]->perf; - perf = data->acpi_data; + info.perf = perf = data->acpi_data; policy->shared_type = perf->shared_type; if (policy->shared_type == CPUFREQ_SHARED_TYPE_ALL || @@ -239,8 +283,6 @@ result = -ENODEV; goto err_unreg; } - rdmsrl(MSR_PSTATE_CUR_LIMIT, msr_content); - max_hw_pstate = (msr_content & HW_PSTATE_MAX_MASK) >> HW_PSTATE_MAX_SHIFT; if (perf->control_register.space_id != perf->status_register.space_id) { result = -ENODEV; @@ -265,8 +307,10 @@ policy->governor = cpufreq_opt_governor ? : CPUFREQ_DEFAULT_GOVERNOR; + on_selected_cpus(cpumask_of(cpu), get_cpu_data, &info, 1); + /* table init */ - for (i = 0; i < perf->state_count && i <= max_hw_pstate; i++) { + for (i = 0; i < perf->state_count && i <= info.max_hw_pstate; i++) { if (i > 0 && perf->states[i].core_frequency >= data->freq_table[valid_states-1].frequency / 1000) continue; diff -Nru xen-4.2.1/xen/arch/x86/acpi/power.c xen-4.2.2/xen/arch/x86/acpi/power.c --- xen-4.2.1/xen/arch/x86/acpi/power.c 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/acpi/power.c 2013-04-23 18:42:55.000000000 +0200 @@ -96,7 +96,10 @@ rcu_read_lock(&domlist_read_lock); for_each_domain ( d ) + { + restore_vcpu_affinity(d); domain_unpause(d); + } rcu_read_unlock(&domlist_read_lock); } diff -Nru xen-4.2.1/xen/arch/x86/acpi/suspend.c xen-4.2.2/xen/arch/x86/acpi/suspend.c --- xen-4.2.1/xen/arch/x86/acpi/suspend.c 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/acpi/suspend.c 2013-04-23 18:42:55.000000000 +0200 @@ -81,8 +81,12 @@ } #else /* !defined(CONFIG_X86_64) */ - if ( supervisor_mode_kernel && cpu_has_sep ) - wrmsr(MSR_IA32_SYSENTER_ESP, &this_cpu(init_tss).esp1, 0); + if ( cpu_has_sep ) + { + wrmsr(MSR_IA32_SYSENTER_CS, 0, 0); + if ( supervisor_mode_kernel ) + wrmsr(MSR_IA32_SYSENTER_ESP, &this_cpu(init_tss).esp1, 0); + } #endif /* Maybe load the debug registers. */ diff -Nru xen-4.2.1/xen/arch/x86/cpu/amd.c xen-4.2.2/xen/arch/x86/cpu/amd.c --- xen-4.2.1/xen/arch/x86/cpu/amd.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/cpu/amd.c 2013-04-23 18:42:55.000000000 +0200 @@ -493,6 +493,14 @@ } } + /* + * The way access filter has a performance penalty on some workloads. + * Disable it on the affected CPUs. + */ + if (c->x86 == 0x15 && c->x86_model >= 0x02 && c->x86_model < 0x20 && + !rdmsr_safe(MSR_AMD64_IC_CFG, value) && (value & 0x1e) != 0x1e) + wrmsr_safe(MSR_AMD64_IC_CFG, value | 0x1e); + amd_get_topology(c); /* Pointless to use MWAIT on Family10 as it does not deep sleep. */ @@ -526,6 +534,19 @@ } #endif + if (c->x86 == 0x10) { + /* + * On family 10h BIOS may not have properly enabled WC+ + * support, causing it to be converted to CD memtype. This may + * result in performance degradation for certain nested-paging + * guests. Prevent this conversion by clearing bit 24 in + * MSR_F10_BU_CFG2. + */ + rdmsrl(MSR_F10_BU_CFG2, value); + value &= ~(1ULL << 24); + wrmsrl(MSR_F10_BU_CFG2, value); + } + /* * Family 0x12 and above processors have APIC timer * running in deep C states. diff -Nru xen-4.2.1/xen/arch/x86/cpu/common.c xen-4.2.2/xen/arch/x86/cpu/common.c --- xen-4.2.1/xen/arch/x86/cpu/common.c 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/cpu/common.c 2013-04-23 18:42:55.000000000 +0200 @@ -655,8 +655,11 @@ #if defined(CONFIG_X86_32) t->ss0 = __HYPERVISOR_DS; t->esp0 = get_stack_bottom(); - if ( supervisor_mode_kernel && cpu_has_sep ) + if ( cpu_has_sep ) { + wrmsr(MSR_IA32_SYSENTER_CS, 0, 0); + if ( supervisor_mode_kernel ) wrmsr(MSR_IA32_SYSENTER_ESP, &t->esp1, 0); + } #elif defined(CONFIG_X86_64) /* Bottom-of-stack must be 16-byte aligned! */ BUG_ON((get_stack_bottom() & 15) != 0); diff -Nru xen-4.2.1/xen/arch/x86/cpu/mcheck/mce.c xen-4.2.2/xen/arch/x86/cpu/mcheck/mce.c --- xen-4.2.1/xen/arch/x86/cpu/mcheck/mce.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/cpu/mcheck/mce.c 2013-04-23 18:42:55.000000000 +0200 @@ -30,6 +30,7 @@ bool_t is_mc_panic; unsigned int __read_mostly nr_mce_banks; unsigned int __read_mostly firstbank; +uint8_t __read_mostly cmci_apic_vector; static void intpose_init(void); static void mcinfo_clear(struct mc_info *); @@ -1144,13 +1145,15 @@ printk("intpose_add: interpose array full - request dropped\n"); } -void intpose_inval(unsigned int cpu_nr, uint64_t msr) +bool_t intpose_inval(unsigned int cpu_nr, uint64_t msr) { - struct intpose_ent *ent; + struct intpose_ent *ent = intpose_lookup(cpu_nr, msr, NULL); - if ((ent = intpose_lookup(cpu_nr, msr, NULL)) != NULL) { - ent->cpu_nr = -1; - } + if ( !ent ) + return 0; + + ent->cpu_nr = -1; + return 1; } #define IS_MCA_BANKREG(r) \ @@ -1277,12 +1280,6 @@ __asm__ __volatile__("int $0x12"); } -static void x86_cmci_inject(void *data) -{ - printk("Simulating CMCI on cpu %d\n", smp_processor_id()); - __asm__ __volatile__("int $0xf7"); -} - #if BITS_PER_LONG == 64 #define ID2COOKIE(id) ((mctelem_cookie_t)(id)) @@ -1568,11 +1565,15 @@ on_selected_cpus(cpumap, x86_mc_mceinject, NULL, 1); break; case XEN_MC_INJECT_TYPE_CMCI: - if ( !cmci_support ) + if ( !cmci_apic_vector ) ret = x86_mcerr( "No CMCI supported in platform\n", -EINVAL); else - on_selected_cpus(cpumap, x86_cmci_inject, NULL, 1); + { + if ( cpumask_test_cpu(smp_processor_id(), cpumap) ) + send_IPI_self(cmci_apic_vector); + send_IPI_mask(cpumap, cmci_apic_vector); + } break; default: ret = x86_mcerr("Wrong mca type\n", -EINVAL); diff -Nru xen-4.2.1/xen/arch/x86/cpu/mcheck/mce.h xen-4.2.2/xen/arch/x86/cpu/mcheck/mce.h --- xen-4.2.1/xen/arch/x86/cpu/mcheck/mce.h 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/cpu/mcheck/mce.h 2013-04-23 18:42:55.000000000 +0200 @@ -38,6 +38,8 @@ mcheck_intel }; +extern uint8_t cmci_apic_vector; + /* Init functions */ enum mcheck_type amd_k7_mcheck_init(struct cpuinfo_x86 *c); enum mcheck_type amd_k8_mcheck_init(struct cpuinfo_x86 *c); @@ -87,7 +89,7 @@ /* Read an MSR, checking for an interposed value first */ extern struct intpose_ent *intpose_lookup(unsigned int, uint64_t, uint64_t *); -extern void intpose_inval(unsigned int, uint64_t); +extern bool_t intpose_inval(unsigned int, uint64_t); static inline uint64_t mca_rdmsr(unsigned int msr) { @@ -99,9 +101,9 @@ /* Write an MSR, invalidating any interposed value */ #define mca_wrmsr(msr, val) do { \ - intpose_inval(smp_processor_id(), msr); \ - wrmsrl(msr, val); \ -} while (0) + if ( !intpose_inval(smp_processor_id(), msr) ) \ + wrmsrl(msr, val); \ +} while ( 0 ) /* Utility function to "logout" all architectural MCA telemetry from the MCA diff -Nru xen-4.2.1/xen/arch/x86/cpu/mcheck/mce_intel.c xen-4.2.2/xen/arch/x86/cpu/mcheck/mce_intel.c --- xen-4.2.1/xen/arch/x86/cpu/mcheck/mce_intel.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/cpu/mcheck/mce_intel.c 2013-04-23 18:42:55.000000000 +0200 @@ -534,7 +534,7 @@ } /* this function will called when CAP(9).MCG_EXT_P = 1 */ - memset(&mc_ext, 0, sizeof(struct mcinfo_extended)); + memset(mc_ext, 0, sizeof(*mc_ext)); mc_ext->common.type = MC_TYPE_EXTENDED; mc_ext->common.size = sizeof(struct mcinfo_extended); @@ -1164,7 +1164,6 @@ { u32 l, apic; int cpu = smp_processor_id(); - static uint8_t cmci_apic_vector; if (!mce_available(c) || !cmci_support) { if (opt_cpu_info) diff -Nru xen-4.2.1/xen/arch/x86/domain_build.c xen-4.2.2/xen/arch/x86/domain_build.c --- xen-4.2.1/xen/arch/x86/domain_build.c 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/domain_build.c 2013-04-23 18:42:55.000000000 +0200 @@ -1219,7 +1219,7 @@ /* DOM0 is permitted full I/O capabilities. */ rc |= ioports_permit_access(dom0, 0, 0xFFFF); rc |= iomem_permit_access(dom0, 0UL, ~0UL); - rc |= irqs_permit_access(dom0, 0, d->nr_pirqs - 1); + rc |= irqs_permit_access(dom0, 1, nr_irqs_gsi - 1); /* * Modify I/O port access permissions. diff -Nru xen-4.2.1/xen/arch/x86/domain.c xen-4.2.2/xen/arch/x86/domain.c --- xen-4.2.1/xen/arch/x86/domain.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/domain.c 2013-04-23 18:42:55.000000000 +0200 @@ -819,7 +819,9 @@ v->arch.vgc_flags = flags; - memcpy(v->arch.fpu_ctxt, &c.nat->fpu_ctxt, sizeof(c.nat->fpu_ctxt)); + if ( flags & VGCF_I387_VALID ) + memcpy(v->arch.fpu_ctxt, &c.nat->fpu_ctxt, sizeof(c.nat->fpu_ctxt)); + if ( !compat ) { memcpy(&v->arch.user_regs, &c.nat->user_regs, sizeof(c.nat->user_regs)); diff -Nru xen-4.2.1/xen/arch/x86/domctl.c xen-4.2.2/xen/arch/x86/domctl.c --- xen-4.2.1/xen/arch/x86/domctl.c 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/domctl.c 2013-04-23 18:42:55.000000000 +0200 @@ -772,9 +772,13 @@ goto bind_out; ret = -EPERM; - if ( !IS_PRIV(current->domain) && - !irq_access_permitted(current->domain, bind->machine_irq) ) - goto bind_out; + if ( !IS_PRIV(current->domain) ) + { + int irq = domain_pirq_to_irq(d, bind->machine_irq); + + if ( irq <= 0 || !irq_access_permitted(current->domain, irq) ) + goto bind_out; + } ret = -ESRCH; if ( iommu_enabled ) @@ -803,9 +807,13 @@ bind = &(domctl->u.bind_pt_irq); ret = -EPERM; - if ( !IS_PRIV(current->domain) && - !irq_access_permitted(current->domain, bind->machine_irq) ) - goto unbind_out; + if ( !IS_PRIV(current->domain) ) + { + int irq = domain_pirq_to_irq(d, bind->machine_irq); + + if ( irq <= 0 || !irq_access_permitted(current->domain, irq) ) + goto unbind_out; + } if ( iommu_enabled ) { diff -Nru xen-4.2.1/xen/arch/x86/efi/runtime.c xen-4.2.2/xen/arch/x86/efi/runtime.c --- xen-4.2.1/xen/arch/x86/efi/runtime.c 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/efi/runtime.c 2013-04-23 18:42:55.000000000 +0200 @@ -380,9 +380,6 @@ long len; unsigned char *data; - if ( op->misc ) - return -EINVAL; - len = gwstrlen(guest_handle_cast(op->u.set_variable.name, CHAR16)); if ( len < 0 ) return len; diff -Nru xen-4.2.1/xen/arch/x86/genapic/bigsmp.c xen-4.2.2/xen/arch/x86/genapic/bigsmp.c --- xen-4.2.1/xen/arch/x86/genapic/bigsmp.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/genapic/bigsmp.c 2013-04-23 18:42:55.000000000 +0200 @@ -40,7 +40,14 @@ static __init int probe_bigsmp(void) { - if (!def_to_bigsmp) + /* + * We don't implement cluster mode, so force use of + * physical mode in both cases. + */ + if (acpi_gbl_FADT.flags & + (ACPI_FADT_APIC_CLUSTER | ACPI_FADT_APIC_PHYSICAL)) + def_to_bigsmp = 1; + else if (!def_to_bigsmp) dmi_check_system(bigsmp_dmi_table); return def_to_bigsmp; } diff -Nru xen-4.2.1/xen/arch/x86/genapic/x2apic.c xen-4.2.2/xen/arch/x86/genapic/x2apic.c --- xen-4.2.1/xen/arch/x86/genapic/x2apic.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/genapic/x2apic.c 2013-04-23 18:42:55.000000000 +0200 @@ -29,9 +29,6 @@ #include #include -static bool_t __initdata x2apic_phys; /* By default we use logical cluster mode. */ -boolean_param("x2apic_phys", x2apic_phys); - static void init_apic_ldr_x2apic_phys(void) { } @@ -121,8 +118,14 @@ .send_IPI_self = send_IPI_self_x2apic }; +static s8 __initdata x2apic_phys = -1; /* By default we use logical cluster mode. */ +boolean_param("x2apic_phys", x2apic_phys); + const struct genapic *__init apic_x2apic_probe(void) { + if ( x2apic_phys < 0 ) + x2apic_phys = !!(acpi_gbl_FADT.flags & ACPI_FADT_APIC_PHYSICAL); + return x2apic_phys ? &apic_x2apic_phys : &apic_x2apic_cluster; } diff -Nru xen-4.2.1/xen/arch/x86/hpet.c xen-4.2.2/xen/arch/x86/hpet.c --- xen-4.2.1/xen/arch/x86/hpet.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/hpet.c 2013-04-23 18:42:55.000000000 +0200 @@ -236,7 +236,7 @@ struct hpet_event_channel *ch = desc->action->dev_id; cfg = hpet_read32(HPET_Tn_CFG(ch->idx)); - cfg |= HPET_TN_FSB; + cfg |= HPET_TN_ENABLE; hpet_write32(cfg, HPET_Tn_CFG(ch->idx)); } @@ -246,7 +246,7 @@ struct hpet_event_channel *ch = desc->action->dev_id; cfg = hpet_read32(HPET_Tn_CFG(ch->idx)); - cfg &= ~HPET_TN_FSB; + cfg &= ~HPET_TN_ENABLE; hpet_write32(cfg, HPET_Tn_CFG(ch->idx)); } @@ -319,8 +319,14 @@ static int __init hpet_setup_msi_irq(unsigned int irq, struct hpet_event_channel *ch) { int ret; + u32 cfg = hpet_read32(HPET_Tn_CFG(ch->idx)); irq_desc_t *desc = irq_to_desc(irq); + /* set HPET Tn as oneshot */ + cfg &= ~(HPET_TN_LEVEL | HPET_TN_PERIODIC); + cfg |= HPET_TN_FSB | HPET_TN_32BIT; + hpet_write32(cfg, HPET_Tn_CFG(ch->idx)); + desc->handler = &hpet_msi_type; ret = request_irq(irq, hpet_interrupt_handler, 0, "HPET", ch); if ( ret < 0 ) @@ -541,11 +547,14 @@ for ( i = 0; i < n; i++ ) { - /* set HPET Tn as oneshot */ - cfg = hpet_read32(HPET_Tn_CFG(hpet_events[i].idx)); - cfg &= ~(HPET_TN_LEVEL | HPET_TN_PERIODIC); - cfg |= HPET_TN_ENABLE | HPET_TN_32BIT; - hpet_write32(cfg, HPET_Tn_CFG(hpet_events[i].idx)); + if ( i == 0 && (cfg & HPET_CFG_LEGACY) ) + { + /* set HPET T0 as oneshot */ + cfg = hpet_read32(HPET_Tn_CFG(0)); + cfg &= ~(HPET_TN_LEVEL | HPET_TN_PERIODIC); + cfg |= HPET_TN_ENABLE | HPET_TN_32BIT; + hpet_write32(cfg, HPET_Tn_CFG(0)); + } /* * The period is a femto seconds value. We need to calculate the scaled @@ -602,6 +611,8 @@ cfg = hpet_read32(HPET_Tn_CFG(hpet_events[i].idx)); cfg &= ~(HPET_TN_LEVEL | HPET_TN_PERIODIC); cfg |= HPET_TN_ENABLE | HPET_TN_32BIT; + if ( !(hpet_events[i].flags & HPET_EVT_LEGACY) ) + cfg |= HPET_TN_FSB; hpet_write32(cfg, HPET_Tn_CFG(hpet_events[i].idx)); hpet_events[i].next_event = STIME_MAX; diff -Nru xen-4.2.1/xen/arch/x86/hvm/hvm.c xen-4.2.2/xen/arch/x86/hvm/hvm.c --- xen-4.2.1/xen/arch/x86/hvm/hvm.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/hvm/hvm.c 2013-04-23 18:42:55.000000000 +0200 @@ -3862,9 +3862,16 @@ rc = -EINVAL; break; case HVM_PARAM_NESTEDHVM: - if ( a.value > 1 ) + if ( !IS_PRIV(current->domain) ) + { + rc = -EPERM; + break; + } +#ifdef __i386__ + if ( a.value ) rc = -EINVAL; - if ( !is_hvm_domain(d) ) +#else + if ( a.value > 1 ) rc = -EINVAL; /* Remove the check below once we have * shadow-on-shadow. @@ -3872,10 +3879,15 @@ if ( cpu_has_svm && !paging_mode_hap(d) && a.value ) rc = -EINVAL; /* Set up NHVM state for any vcpus that are already up */ - if ( !d->arch.hvm_domain.params[HVM_PARAM_NESTEDHVM] ) + if ( a.value && + !d->arch.hvm_domain.params[HVM_PARAM_NESTEDHVM] ) for_each_vcpu(d, v) if ( rc == 0 ) rc = nestedhvm_vcpu_initialise(v); + if ( !a.value || rc ) + for_each_vcpu(d, v) + nestedhvm_vcpu_destroy(v); +#endif break; case HVM_PARAM_BUFIOREQ_EVTCHN: rc = -EINVAL; diff -Nru xen-4.2.1/xen/arch/x86/hvm/nestedhvm.c xen-4.2.2/xen/arch/x86/hvm/nestedhvm.c --- xen-4.2.1/xen/arch/x86/hvm/nestedhvm.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/hvm/nestedhvm.c 2013-04-23 18:42:55.000000000 +0200 @@ -88,7 +88,7 @@ void nestedhvm_vcpu_destroy(struct vcpu *v) { - if ( nestedhvm_enabled(v->domain) && hvm_funcs.nhvm_vcpu_destroy ) + if ( hvm_funcs.nhvm_vcpu_destroy ) hvm_funcs.nhvm_vcpu_destroy(v); } diff -Nru xen-4.2.1/xen/arch/x86/hvm/rtc.c xen-4.2.2/xen/arch/x86/hvm/rtc.c --- xen-4.2.1/xen/arch/x86/hvm/rtc.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/hvm/rtc.c 2013-04-23 18:42:55.000000000 +0200 @@ -399,10 +399,17 @@ case RTC_DAY_OF_MONTH: case RTC_MONTH: case RTC_YEAR: - s->hw.cmos_data[s->hw.cmos_index] = data; - /* if in set mode, do not update the time */ - if ( !(s->hw.cmos_data[RTC_REG_B] & RTC_SET) ) + /* if in set mode, just write the register */ + if ( (s->hw.cmos_data[RTC_REG_B] & RTC_SET) ) + s->hw.cmos_data[s->hw.cmos_index] = data; + else + { + /* Fetch the current time and update just this field. */ + s->current_tm = gmtime(get_localtime(d)); + rtc_copy_date(s); + s->hw.cmos_data[s->hw.cmos_index] = data; rtc_set_time(s); + } alarm_timer_update(s); break; case RTC_REG_A: diff -Nru xen-4.2.1/xen/arch/x86/hvm/vlapic.c xen-4.2.2/xen/arch/x86/hvm/vlapic.c --- xen-4.2.1/xen/arch/x86/hvm/vlapic.c 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/hvm/vlapic.c 2013-04-23 18:42:55.000000000 +0200 @@ -669,10 +669,9 @@ break; case APIC_SELF_IPI: - if ( vlapic_x2apic_mode(vlapic) ) - vlapic_reg_write(v, APIC_ICR, 0x40000 | (val & 0xff)); - else - rc = X86EMUL_UNHANDLEABLE; + rc = vlapic_x2apic_mode(vlapic) + ? vlapic_reg_write(v, APIC_ICR, 0x40000 | (val & 0xff)) + : X86EMUL_UNHANDLEABLE; break; case APIC_ICR: @@ -827,19 +826,18 @@ { struct vlapic *vlapic = vcpu_vlapic(v); uint32_t offset = (msr - MSR_IA32_APICBASE_MSR) << 4; - int rc; if ( !vlapic_x2apic_mode(vlapic) ) - return 1; + return X86EMUL_UNHANDLEABLE; if ( offset == APIC_ICR ) - if ( vlapic_reg_write(v, APIC_ICR2 , (uint32_t)(msr_content >> 32)) ) - return 1; - - rc = vlapic_reg_write(v, offset, (uint32_t)msr_content); + { + int rc = vlapic_reg_write(v, APIC_ICR2, (uint32_t)(msr_content >> 32)); + if ( rc ) + return rc; + } - /* X86EMUL_RETRY for SIPI */ - return ((rc != X86EMUL_OKAY) && (rc != X86EMUL_RETRY)); + return vlapic_reg_write(v, offset, (uint32_t)msr_content); } static int vlapic_range(struct vcpu *v, unsigned long addr) diff -Nru xen-4.2.1/xen/arch/x86/hvm/vmx/intr.c xen-4.2.2/xen/arch/x86/hvm/vmx/intr.c --- xen-4.2.1/xen/arch/x86/hvm/vmx/intr.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/hvm/vmx/intr.c 2013-04-23 18:42:55.000000000 +0200 @@ -163,7 +163,7 @@ static int nvmx_intr_intercept(struct vcpu *v, struct hvm_intack intack) { - u32 exit_ctrl; + u32 ctrl; if ( nvmx_intr_blocked(v) != hvm_intblk_none ) { @@ -176,11 +176,14 @@ if ( intack.source == hvm_intsrc_pic || intack.source == hvm_intsrc_lapic ) { + ctrl = __get_vvmcs(vcpu_nestedhvm(v).nv_vvmcx, PIN_BASED_VM_EXEC_CONTROL); + if ( !(ctrl & PIN_BASED_EXT_INTR_MASK) ) + return 0; + vmx_inject_extint(intack.vector); - exit_ctrl = __get_vvmcs(vcpu_nestedhvm(v).nv_vvmcx, - VM_EXIT_CONTROLS); - if ( exit_ctrl & VM_EXIT_ACK_INTR_ON_EXIT ) + ctrl = __get_vvmcs(vcpu_nestedhvm(v).nv_vvmcx, VM_EXIT_CONTROLS); + if ( ctrl & VM_EXIT_ACK_INTR_ON_EXIT ) { /* for now, duplicate the ack path in vmx_intr_assist */ hvm_vcpu_ack_pending_irq(v, intack); diff -Nru xen-4.2.1/xen/arch/x86/hvm/vmx/vmx.c xen-4.2.2/xen/arch/x86/hvm/vmx/vmx.c --- xen-4.2.1/xen/arch/x86/hvm/vmx/vmx.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/hvm/vmx/vmx.c 2013-04-23 18:42:55.000000000 +0200 @@ -1133,20 +1133,18 @@ if ( paging_mode_hap(v->domain) ) { - /* We manage GUEST_CR3 when guest CR0.PE is zero or when cr3 memevents are on */ + /* Manage GUEST_CR3 when CR0.PE=0. */ uint32_t cr3_ctls = (CPU_BASED_CR3_LOAD_EXITING | CPU_BASED_CR3_STORE_EXITING); v->arch.hvm_vmx.exec_control &= ~cr3_ctls; if ( !hvm_paging_enabled(v) ) v->arch.hvm_vmx.exec_control |= cr3_ctls; + /* Trap CR3 updates if CR3 memory events are enabled. */ if ( v->domain->arch.hvm_domain.params[HVM_PARAM_MEMORY_EVENT_CR3] ) v->arch.hvm_vmx.exec_control |= CPU_BASED_CR3_LOAD_EXITING; vmx_update_cpu_exec_control(v); - - /* Changing CR0.PE can change some bits in real CR4. */ - vmx_update_guest_cr(v, 4); } if ( !(v->arch.hvm_vcpu.guest_cr[0] & X86_CR0_TS) ) @@ -1176,8 +1174,6 @@ { for ( s = x86_seg_cs ; s <= x86_seg_tr ; s++ ) vmx_set_segment_register(v, s, ®[s]); - v->arch.hvm_vcpu.hw_cr[4] |= X86_CR4_VME; - __vmwrite(GUEST_CR4, v->arch.hvm_vcpu.hw_cr[4]); v->arch.hvm_vmx.exception_bitmap = 0xffffffff; vmx_update_exception_bitmap(v); } @@ -1187,10 +1183,6 @@ if ( !(v->arch.hvm_vmx.vm86_segment_mask & (1<arch.hvm_vmx.vm86_saved_seg[s]); - v->arch.hvm_vcpu.hw_cr[4] = - ((v->arch.hvm_vcpu.hw_cr[4] & ~X86_CR4_VME) - |(v->arch.hvm_vcpu.guest_cr[4] & X86_CR4_VME)); - __vmwrite(GUEST_CR4, v->arch.hvm_vcpu.hw_cr[4]); v->arch.hvm_vmx.exception_bitmap = HVM_TRAP_MASK | (paging_mode_hap(v->domain) ? 0 : (1U << TRAP_page_fault)) @@ -1204,6 +1196,9 @@ v->arch.hvm_vcpu.guest_cr[0] | hw_cr0_mask; __vmwrite(GUEST_CR0, v->arch.hvm_vcpu.hw_cr[0]); __vmwrite(CR0_READ_SHADOW, v->arch.hvm_vcpu.guest_cr[0]); + + /* Changing CR0 can change some bits in real CR4. */ + vmx_update_guest_cr(v, 4); break; } case 2: @@ -1233,6 +1228,16 @@ v->arch.hvm_vcpu.hw_cr[4] |= X86_CR4_PSE; v->arch.hvm_vcpu.hw_cr[4] &= ~X86_CR4_PAE; } + if ( !hvm_paging_enabled(v) ) + { + /* + * SMEP is disabled if CPU is in non-paging mode in hardware. + * However Xen always uses paging mode to emulate guest non-paging + * mode. To emulate this behavior, SMEP needs to be manually + * disabled when guest VCPU is in non-paging mode. + */ + v->arch.hvm_vcpu.hw_cr[4] &= ~X86_CR4_SMEP; + } __vmwrite(GUEST_CR4, v->arch.hvm_vcpu.hw_cr[4]); __vmwrite(CR4_READ_SHADOW, v->arch.hvm_vcpu.guest_cr[4]); break; @@ -1595,7 +1600,7 @@ return len; } -static void update_guest_eip(void) +void update_guest_eip(void) { struct cpu_user_regs *regs = guest_cpu_user_regs(); unsigned long x; @@ -2309,6 +2314,13 @@ vector = intr_info & INTR_INFO_VECTOR_MASK; if ( vector == TRAP_machine_check ) do_machine_check(regs); + if ( vector == TRAP_nmi + && ((intr_info & INTR_INFO_INTR_TYPE_MASK) == + (X86_EVENTTYPE_NMI << 8)) ) + { + do_nmi(regs); + enable_nmis(); + } break; case EXIT_REASON_MCE_DURING_VMENTRY: do_machine_check(regs); @@ -2482,7 +2494,7 @@ (X86_EVENTTYPE_NMI << 8) ) goto exit_and_crash; HVMTRACE_0D(NMI); - self_nmi(); /* Real NMI, vector 2: normal processing. */ + /* Already handled above. */ break; case TRAP_machine_check: HVMTRACE_0D(MCE); diff -Nru xen-4.2.1/xen/arch/x86/hvm/vmx/vvmx.c xen-4.2.2/xen/arch/x86/hvm/vmx/vvmx.c --- xen-4.2.1/xen/arch/x86/hvm/vmx/vvmx.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/hvm/vmx/vvmx.c 2013-04-23 18:42:55.000000000 +0200 @@ -990,7 +990,8 @@ regs->eip = __get_vvmcs(nvcpu->nv_vvmcx, HOST_RIP); regs->esp = __get_vvmcs(nvcpu->nv_vvmcx, HOST_RSP); - regs->eflags = __vmread(GUEST_RFLAGS); + /* VM exit clears all bits except bit 1 */ + regs->eflags = 0x2; /* updating host cr0 to sync TS bit */ __vmwrite(HOST_CR0, v->arch.hvm_vmx.host_cr0); @@ -1350,7 +1351,7 @@ case MSR_IA32_VMX_ENTRY_CTLS: /* bit 0-8, and 12 must be 1 (refer G5 of SDM) */ data = 0x11ff; - data = (data << 32) | data; + data = ((data | VM_ENTRY_IA32E_MODE) << 32) | data; break; case IA32_FEATURE_CONTROL_MSR: @@ -1557,6 +1558,7 @@ tsc += __get_vvmcs(nvcpu->nv_vvmcx, TSC_OFFSET); regs->eax = (uint32_t)tsc; regs->edx = (uint32_t)(tsc >> 32); + update_guest_eip(); return 1; } @@ -1583,7 +1585,8 @@ break; case EXIT_REASON_DR_ACCESS: ctrl = __n2_exec_control(v); - if ( ctrl & CPU_BASED_MOV_DR_EXITING ) + if ( (ctrl & CPU_BASED_MOV_DR_EXITING) && + v->arch.hvm_vcpu.flag_dr_dirty ) nvcpu->nv_vmexit_pending = 1; break; case EXIT_REASON_INVLPG: diff -Nru xen-4.2.1/xen/arch/x86/i8259.c xen-4.2.2/xen/arch/x86/i8259.c --- xen-4.2.1/xen/arch/x86/i8259.c 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/i8259.c 2013-04-23 18:42:55.000000000 +0200 @@ -406,6 +406,8 @@ for (irq = 0; platform_legacy_irq(irq); irq++) { struct irq_desc *desc = irq_to_desc(irq); + if ( irq == 2 ) /* IRQ2 doesn't exist */ + continue; desc->handler = &i8259A_irq_type; per_cpu(vector_irq, cpu)[FIRST_LEGACY_VECTOR + irq] = irq; cpumask_copy(desc->arch.cpu_mask, cpumask_of(cpu)); diff -Nru xen-4.2.1/xen/arch/x86/irq.c xen-4.2.2/xen/arch/x86/irq.c --- xen-4.2.1/xen/arch/x86/irq.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/irq.c 2013-04-23 18:42:55.000000000 +0200 @@ -184,6 +184,14 @@ desc->arch.used = IRQ_UNUSED; irq = ret; } + else if ( dom0 ) + { + ret = irq_permit_access(dom0, irq); + if ( ret ) + printk(XENLOG_G_ERR + "Could not grant Dom0 access to IRQ%d (error %d)\n", + irq, ret); + } return irq; } @@ -280,6 +288,17 @@ void destroy_irq(unsigned int irq) { BUG_ON(!MSI_IRQ(irq)); + + if ( dom0 ) + { + int err = irq_deny_access(dom0, irq); + + if ( err ) + printk(XENLOG_G_ERR + "Could not revoke Dom0 access to IRQ%u (error %d)\n", + irq, err); + } + dynamic_irq_cleanup(irq); clear_irq_vector(irq); } @@ -616,7 +635,9 @@ ack_APIC_irq(); me = smp_processor_id(); - for (vector = FIRST_DYNAMIC_VECTOR; vector < NR_VECTORS; vector++) { + for ( vector = FIRST_DYNAMIC_VECTOR; + vector <= LAST_HIPRIORITY_VECTOR; vector++) + { unsigned int irq; unsigned int irr; struct irq_desc *desc; @@ -625,6 +646,9 @@ if (irq == -1) continue; + if ( vector >= FIRST_LEGACY_VECTOR && vector <= LAST_LEGACY_VECTOR ) + continue; + desc = irq_to_desc(irq); if (!desc) continue; @@ -646,7 +670,7 @@ * to myself. */ if (irr & (1 << (vector % 32))) { - genapic->send_IPI_self(IRQ_MOVE_CLEANUP_VECTOR); + send_IPI_self(IRQ_MOVE_CLEANUP_VECTOR); TRACE_3D(TRC_HW_IRQ_MOVE_CLEANUP_DELAY, irq, vector, smp_processor_id()); goto unlock; @@ -692,7 +716,7 @@ cpumask_and(&cleanup_mask, desc->arch.old_cpu_mask, &cpu_online_map); desc->arch.move_cleanup_count = cpumask_weight(&cleanup_mask); - genapic->send_IPI_mask(&cleanup_mask, IRQ_MOVE_CLEANUP_VECTOR); + send_IPI_mask(&cleanup_mask, IRQ_MOVE_CLEANUP_VECTOR); desc->arch.move_in_progress = 0; } @@ -1853,7 +1877,7 @@ if ( !IS_PRIV(current->domain) && !(IS_PRIV_FOR(current->domain, d) && - irq_access_permitted(current->domain, pirq))) + irq_access_permitted(current->domain, irq))) return -EPERM; if ( pirq < 0 || pirq >= d->nr_pirqs || irq < 0 || irq >= nr_irqs ) @@ -1882,17 +1906,18 @@ return ret; } - ret = irq_permit_access(d, pirq); + ret = irq_permit_access(d, irq); if ( ret ) { - dprintk(XENLOG_G_ERR, "dom%d: could not permit access to irq %d\n", - d->domain_id, pirq); + printk(XENLOG_G_ERR + "dom%d: could not permit access to IRQ%d (pirq %d)\n", + d->domain_id, irq, pirq); return ret; } ret = prepare_domain_irq_pirq(d, irq, pirq, &info); if ( ret ) - return ret; + goto revoke; desc = irq_to_desc(irq); @@ -1916,8 +1941,14 @@ spin_lock_irqsave(&desc->lock, flags); if ( desc->handler != &no_irq_type ) + { + spin_unlock_irqrestore(&desc->lock, flags); dprintk(XENLOG_G_ERR, "dom%d: irq %d in use\n", d->domain_id, irq); + pci_disable_msi(msi_desc); + ret = -EBUSY; + goto done; + } setup_msi_handler(desc, msi_desc); if ( opt_irq_vector_map == OPT_IRQ_VECTOR_MAP_PERDEV @@ -1942,14 +1973,18 @@ spin_lock_irqsave(&desc->lock, flags); set_domain_irq_pirq(d, irq, info); spin_unlock_irqrestore(&desc->lock, flags); - - if ( opt_irq_vector_map == OPT_IRQ_VECTOR_MAP_PERDEV ) - printk(XENLOG_INFO "Per-device vector maps for GSIs not implemented yet.\n"); } done: if ( ret ) + { cleanup_domain_irq_pirq(d, irq, info); + revoke: + if ( irq_deny_access(d, irq) ) + printk(XENLOG_G_ERR + "dom%d: could not revoke access to IRQ%d (pirq %d)\n", + d->domain_id, irq, pirq); + } return ret; } @@ -2015,10 +2050,11 @@ if ( !forced_unbind ) cleanup_domain_irq_pirq(d, irq, info); - ret = irq_deny_access(d, pirq); + ret = irq_deny_access(d, irq); if ( ret ) - dprintk(XENLOG_G_ERR, "dom%d: could not deny access to irq %d\n", - d->domain_id, pirq); + printk(XENLOG_G_ERR + "dom%d: could not deny access to IRQ%d (pirq %d)\n", + d->domain_id, irq, pirq); done: return ret; diff -Nru xen-4.2.1/xen/arch/x86/mm/p2m.c xen-4.2.2/xen/arch/x86/mm/p2m.c --- xen-4.2.1/xen/arch/x86/mm/p2m.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/mm/p2m.c 2013-04-23 18:42:55.000000000 +0200 @@ -163,8 +163,7 @@ return _mfn(gfn); } - /* For now only perform locking on hap domains */ - if ( locked && (hap_enabled(p2m->domain)) ) + if ( locked ) /* Grab the lock here, don't release until put_gfn */ gfn_lock(p2m, gfn, 0); @@ -197,8 +196,7 @@ void __put_gfn(struct p2m_domain *p2m, unsigned long gfn) { - if ( !p2m || !paging_mode_translate(p2m->domain) - || !hap_enabled(p2m->domain) ) + if ( !p2m || !paging_mode_translate(p2m->domain) ) /* Nothing to do in this case */ return; diff -Nru xen-4.2.1/xen/arch/x86/mm/shadow/common.c xen-4.2.2/xen/arch/x86/mm/shadow/common.c --- xen-4.2.1/xen/arch/x86/mm/shadow/common.c 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/mm/shadow/common.c 2013-04-23 18:42:55.000000000 +0200 @@ -2515,10 +2515,13 @@ { /* Don't complain if we're in HVM and there are some extra mappings: * The qemu helper process has an untyped mapping of this dom's RAM - * and the HVM restore program takes another. */ + * and the HVM restore program takes another. + * Also allow one typed refcount for xenheap pages, to match + * share_xen_page_with_guest(). */ if ( !(shadow_mode_external(v->domain) && (page->count_info & PGC_count_mask) <= 3 - && (page->u.inuse.type_info & PGT_count_mask) == 0) ) + && ((page->u.inuse.type_info & PGT_count_mask) + == !!is_xen_heap_page(page))) ) { SHADOW_ERROR("can't find all mappings of mfn %lx: " "c=%08lx t=%08lx\n", mfn_x(gmfn), diff -Nru xen-4.2.1/xen/arch/x86/mm.c xen-4.2.2/xen/arch/x86/mm.c --- xen-4.2.1/xen/arch/x86/mm.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/mm.c 2013-04-23 18:42:55.000000000 +0200 @@ -120,6 +120,7 @@ #include #include #include +#include /* * Mapping of first 2 or 4 megabytes of memory. This is mapped with 4kB @@ -433,7 +434,7 @@ if ( is_hvm_domain(d) ) return p2m_get_hostp2m(d)->max_mapped_pfn; /* NB. PV guests specify nr_pfns rather than max_pfn so we adjust here. */ - return arch_get_max_pfn(d) - 1; + return (arch_get_max_pfn(d) ?: 1) - 1; } void share_xen_page_with_guest( @@ -2586,7 +2587,7 @@ int rc = __get_page_type(page, type, 0); if ( likely(rc == 0) ) return 1; - ASSERT(rc == -EINVAL); + ASSERT(rc != -EINTR && rc != -EAGAIN); return 0; } @@ -5849,6 +5850,25 @@ } #endif +const unsigned long *__init get_platform_badpages(unsigned int *array_size) +{ + u32 igd_id; + static unsigned long __initdata bad_pages[] = { + 0x20050000, + 0x20110000, + 0x20130000, + 0x20138000, + 0x40004000, + }; + + *array_size = ARRAY_SIZE(bad_pages); + igd_id = pci_conf_read32(0, 0, 2, 0, 0); + if ( !IS_SNB_GFX(igd_id) ) + return NULL; + + return bad_pages; +} + /* * Local variables: * mode: C diff -Nru xen-4.2.1/xen/arch/x86/msi.c xen-4.2.2/xen/arch/x86/msi.c --- xen-4.2.1/xen/arch/x86/msi.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/msi.c 2013-04-23 18:42:55.000000000 +0200 @@ -31,6 +31,9 @@ #include #include +static s8 __read_mostly use_msi = -1; +boolean_param("msi", use_msi); + /* bitmap indicate which fixed map is free */ DEFINE_SPINLOCK(msix_fixmap_lock); DECLARE_BITMAP(msix_fixmap_pages, FIX_MSIX_MAX_PAGES); @@ -201,7 +204,7 @@ BUG(); } - if ( iommu_enabled ) + if ( iommu_intremap ) iommu_read_msi_from_ire(entry, msg); } @@ -209,7 +212,7 @@ { entry->msg = *msg; - if ( iommu_enabled ) + if ( iommu_intremap ) { ASSERT(msg != &entry->msg); iommu_update_ire_from_msi(entry, msg); @@ -479,7 +482,7 @@ } /* Free the unused IRTE if intr remap enabled */ - if ( iommu_enabled ) + if ( iommu_intremap ) iommu_update_ire_from_msi(entry, NULL); list_del(&entry->list); @@ -646,8 +649,8 @@ * @entries: pointer to an array of struct msix_entry entries * @nvec: number of @entries * - * Setup the MSI-X capability structure of device function with a - * single MSI-X irq. A return of zero indicates the successful setup of + * Setup the MSI-X capability structure of device function with the requested + * number MSI-X irqs. A return of zero indicates the successful setup of * requested MSI-X entries with allocated irqs or non-zero for otherwise. **/ static int msix_capability_init(struct pci_dev *dev, @@ -655,86 +658,69 @@ struct msi_desc **desc, unsigned int nr_entries) { - struct msi_desc *entry; - int pos; + struct msi_desc *entry = NULL; + int pos, vf; u16 control; - u64 table_paddr, entry_paddr; - u32 table_offset, entry_offset; - u8 bir; - void __iomem *base; - int idx; + u64 table_paddr; + u32 table_offset; + u8 bir, pbus, pslot, pfunc; u16 seg = dev->seg; u8 bus = dev->bus; u8 slot = PCI_SLOT(dev->devfn); u8 func = PCI_FUNC(dev->devfn); ASSERT(spin_is_locked(&pcidevs_lock)); - ASSERT(desc); pos = pci_find_cap_offset(seg, bus, slot, func, PCI_CAP_ID_MSIX); control = pci_conf_read16(seg, bus, slot, func, msix_control_reg(pos)); msix_set_enable(dev, 0);/* Ensure msix is disabled as I set it up */ - /* MSI-X Table Initialization */ - entry = alloc_msi_entry(); - if ( !entry ) - return -ENOMEM; + if ( desc ) + { + entry = alloc_msi_entry(); + if ( !entry ) + return -ENOMEM; + ASSERT(msi); + } - /* Request & Map MSI-X table region */ + /* Locate MSI-X table region */ table_offset = pci_conf_read32(seg, bus, slot, func, msix_table_offset_reg(pos)); bir = (u8)(table_offset & PCI_MSIX_BIRMASK); table_offset &= ~PCI_MSIX_BIRMASK; - entry_offset = msi->entry_nr * PCI_MSIX_ENTRY_SIZE; - - table_paddr = msi->table_base + table_offset; - entry_paddr = table_paddr + entry_offset; - idx = msix_get_fixmap(dev, table_paddr, entry_paddr); - if ( idx < 0 ) - { - xfree(entry); - return idx; - } - base = (void *)(fix_to_virt(idx) + - ((unsigned long)entry_paddr & ((1UL << PAGE_SHIFT) - 1))); - - entry->msi_attrib.type = PCI_CAP_ID_MSIX; - entry->msi_attrib.is_64 = 1; - entry->msi_attrib.entry_nr = msi->entry_nr; - entry->msi_attrib.maskbit = 1; - entry->msi_attrib.masked = 1; - entry->msi_attrib.pos = pos; - entry->irq = msi->irq; - entry->dev = dev; - entry->mask_base = base; - list_add_tail(&entry->list, &dev->msi_list); - - if ( !dev->msix_nr_entries ) + if ( !dev->info.is_virtfn ) { - u8 pbus, pslot, pfunc; - int vf; - u64 pba_paddr; - u32 pba_offset; + pbus = bus; + pslot = slot; + pfunc = func; + vf = -1; + } + else + { + pbus = dev->info.physfn.bus; + pslot = PCI_SLOT(dev->info.physfn.devfn); + pfunc = PCI_FUNC(dev->info.physfn.devfn); + vf = PCI_BDF2(dev->bus, dev->devfn); + } - if ( !dev->info.is_virtfn ) - { - pbus = bus; - pslot = slot; - pfunc = func; - vf = -1; - } - else + table_paddr = read_pci_mem_bar(seg, pbus, pslot, pfunc, bir, vf); + WARN_ON(msi && msi->table_base != table_paddr); + if ( !table_paddr ) + { + if ( !msi || !msi->table_base ) { - pbus = dev->info.physfn.bus; - pslot = PCI_SLOT(dev->info.physfn.devfn); - pfunc = PCI_FUNC(dev->info.physfn.devfn); - vf = PCI_BDF2(dev->bus, dev->devfn); + xfree(entry); + return -ENXIO; } + table_paddr = msi->table_base; + } + table_paddr += table_offset; - ASSERT(!dev->msix_used_entries); - WARN_ON(msi->table_base != - read_pci_mem_bar(seg, pbus, pslot, pfunc, bir, vf)); + if ( !dev->msix_used_entries ) + { + u64 pba_paddr; + u32 pba_offset; dev->msix_nr_entries = nr_entries; dev->msix_table.first = PFN_DOWN(table_paddr); @@ -755,7 +741,42 @@ BITS_TO_LONGS(nr_entries) - 1); WARN_ON(rangeset_overlaps_range(mmio_ro_ranges, dev->msix_pba.first, dev->msix_pba.last)); + } + if ( entry ) + { + /* Map MSI-X table region */ + u64 entry_paddr = table_paddr + msi->entry_nr * PCI_MSIX_ENTRY_SIZE; + int idx = msix_get_fixmap(dev, table_paddr, entry_paddr); + void __iomem *base; + + if ( idx < 0 ) + { + xfree(entry); + return idx; + } + base = (void *)(fix_to_virt(idx) + + ((unsigned long)entry_paddr & (PAGE_SIZE - 1))); + + /* Mask interrupt here */ + writel(1, base + PCI_MSIX_ENTRY_VECTOR_CTRL_OFFSET); + + entry->msi_attrib.type = PCI_CAP_ID_MSIX; + entry->msi_attrib.is_64 = 1; + entry->msi_attrib.entry_nr = msi->entry_nr; + entry->msi_attrib.maskbit = 1; + entry->msi_attrib.masked = 1; + entry->msi_attrib.pos = pos; + entry->irq = msi->irq; + entry->dev = dev; + entry->mask_base = base; + + list_add_tail(&entry->list, &dev->msi_list); + *desc = entry; + } + + if ( !dev->msix_used_entries ) + { if ( rangeset_add_range(mmio_ro_ranges, dev->msix_table.first, dev->msix_table.last) ) WARN(); @@ -766,7 +787,7 @@ if ( dev->domain ) p2m_change_entry_type_global(dev->domain, p2m_mmio_direct, p2m_mmio_direct); - if ( !dev->domain || !paging_mode_translate(dev->domain) ) + if ( desc && (!dev->domain || !paging_mode_translate(dev->domain)) ) { struct domain *d = dev->domain; @@ -780,6 +801,13 @@ break; if ( d ) { + if ( !IS_PRIV(d) && dev->msix_warned != d->domain_id ) + { + dev->msix_warned = d->domain_id; + printk(XENLOG_ERR + "Potentially insecure use of MSI-X on %04x:%02x:%02x.%u by Dom%d\n", + seg, bus, slot, func, d->domain_id); + } /* XXX How to deal with existing mappings? */ } } @@ -788,10 +816,6 @@ WARN_ON(dev->msix_table.first != (table_paddr >> PAGE_SHIFT)); ++dev->msix_used_entries; - /* Mask interrupt here */ - writel(1, entry->mask_base + PCI_MSIX_ENTRY_VECTOR_CTRL_OFFSET); - - *desc = entry; /* Restore MSI-X enabled bits */ pci_conf_write16(seg, bus, slot, func, msix_control_reg(pos), control); @@ -916,6 +940,19 @@ return status; } +static void _pci_cleanup_msix(struct pci_dev *dev) +{ + if ( !--dev->msix_used_entries ) + { + if ( rangeset_remove_range(mmio_ro_ranges, dev->msix_table.first, + dev->msix_table.last) ) + WARN(); + if ( rangeset_remove_range(mmio_ro_ranges, dev->msix_pba.first, + dev->msix_pba.last) ) + WARN(); + } +} + static void __pci_disable_msix(struct msi_desc *entry) { struct pci_dev *dev; @@ -939,15 +976,45 @@ pci_conf_write16(seg, bus, slot, func, msix_control_reg(pos), control); - if ( !--dev->msix_used_entries ) + _pci_cleanup_msix(dev); +} + +int pci_prepare_msix(u16 seg, u8 bus, u8 devfn, bool_t off) +{ + int rc; + struct pci_dev *pdev; + u8 slot = PCI_SLOT(devfn), func = PCI_FUNC(devfn); + unsigned int pos = pci_find_cap_offset(seg, bus, slot, func, + PCI_CAP_ID_MSIX); + + if ( !use_msi ) + return 0; + + if ( !pos ) + return -ENODEV; + + spin_lock(&pcidevs_lock); + pdev = pci_get_pdev(seg, bus, devfn); + if ( !pdev ) + rc = -ENODEV; + else if ( pdev->msix_used_entries != !!off ) + rc = -EBUSY; + else if ( off ) { - if ( rangeset_remove_range(mmio_ro_ranges, dev->msix_table.first, - dev->msix_table.last) ) - WARN(); - if ( rangeset_remove_range(mmio_ro_ranges, dev->msix_pba.first, - dev->msix_pba.last) ) - WARN(); + _pci_cleanup_msix(pdev); + rc = 0; } + else + { + u16 control = pci_conf_read16(seg, bus, slot, func, + msix_control_reg(pos)); + + rc = msix_capability_init(pdev, NULL, NULL, + multi_msix_capable(control)); + } + spin_unlock(&pcidevs_lock); + + return rc; } /* @@ -958,6 +1025,9 @@ { ASSERT(spin_is_locked(&pcidevs_lock)); + if ( !use_msi ) + return -EPERM; + return msi->table_base ? __pci_enable_msix(msi, desc) : __pci_enable_msi(msi, desc); } @@ -1003,7 +1073,10 @@ ASSERT(spin_is_locked(&pcidevs_lock)); - if (!pdev) + if ( !use_msi ) + return -EOPNOTSUPP; + + if ( !pdev ) return -EINVAL; ret = xsm_resource_setup_pci((pdev->seg << 16) | (pdev->bus << 8) | pdev->devfn); @@ -1062,7 +1135,7 @@ func = PCI_FUNC(pdev->devfn); pos = pci_find_cap_offset(seg, bus, slot, func, PCI_CAP_ID_MSIX); - if ( !pos ) + if ( !pos || !use_msi ) return 0; control = pci_conf_read16(seg, bus, slot, func, msix_control_reg(pos)); @@ -1135,6 +1208,9 @@ static int __init msi_setup_keyhandler(void) { + if ( use_msi < 0 ) + use_msi = !(acpi_gbl_FADT.boot_flags & ACPI_FADT_NO_MSI); + register_keyhandler('M', &dump_msi_keyhandler); return 0; } diff -Nru xen-4.2.1/xen/arch/x86/physdev.c xen-4.2.2/xen/arch/x86/physdev.c --- xen-4.2.1/xen/arch/x86/physdev.c 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/physdev.c 2013-04-23 18:42:55.000000000 +0200 @@ -147,7 +147,7 @@ if ( irq == -1 ) irq = create_irq(NUMA_NO_NODE); - if ( irq < 0 || irq >= nr_irqs ) + if ( irq < nr_irqs_gsi || irq >= nr_irqs ) { dprintk(XENLOG_G_ERR, "dom%d: can't create irq for msi!\n", d->domain_id); @@ -608,6 +608,18 @@ break; } + case PHYSDEVOP_prepare_msix: + case PHYSDEVOP_release_msix: { + struct physdev_pci_device dev; + + if ( copy_from_guest(&dev, arg, 1) ) + ret = -EFAULT; + else + ret = pci_prepare_msix(dev.seg, dev.bus, dev.devfn, + cmd != PHYSDEVOP_prepare_msix); + break; + } + #ifdef __x86_64__ case PHYSDEVOP_pci_mmcfg_reserved: { struct physdev_pci_mmcfg_reserved info; diff -Nru xen-4.2.1/xen/arch/x86/setup.c xen-4.2.2/xen/arch/x86/setup.c --- xen-4.2.1/xen/arch/x86/setup.c 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/setup.c 2013-04-23 18:42:55.000000000 +0200 @@ -837,8 +837,8 @@ l4_pgentry_t *pl4e; l3_pgentry_t *pl3e; l2_pgentry_t *pl2e; + uint64_t load_start; int i, j, k; - void *dst; /* Select relocation address. */ e = end - reloc_size; @@ -851,11 +851,9 @@ * with a barrier(). After this we must *not* modify static/global * data until after we have switched to the relocated pagetables! */ + load_start = (unsigned long)_start - XEN_VIRT_START; barrier(); - dst = move_memory(e, 0, (unsigned long)&_end - XEN_VIRT_START, 1); - - /* Poison low 1MB to detect stray pointers to physical 0-1MB. */ - memset(dst, 0x55, 1U << 20); + move_memory(e + load_start, load_start, _end - _start, 1); /* Walk initial pagetables, relocating page directory entries. */ pl4e = __va(__pa(idle_pg_table)); diff -Nru xen-4.2.1/xen/arch/x86/smp.c xen-4.2.2/xen/arch/x86/smp.c --- xen-4.2.1/xen/arch/x86/smp.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/smp.c 2013-04-23 18:42:55.000000000 +0200 @@ -43,6 +43,11 @@ genapic->send_IPI_mask(mask, vector); } +void send_IPI_self(int vector) +{ + genapic->send_IPI_self(vector); +} + /* * Some notes on x86 processor bugs affecting SMP operation: * diff -Nru xen-4.2.1/xen/arch/x86/time.c xen-4.2.2/xen/arch/x86/time.c --- xen-4.2.1/xen/arch/x86/time.c 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/time.c 2013-04-23 18:42:55.000000000 +0200 @@ -832,7 +832,16 @@ if ( is_hvm_domain(d) ) { struct pl_time *pl = &v->domain->arch.hvm_domain.pl_time; + stime += pl->stime_offset + v->arch.hvm_vcpu.stime_offset; + if ( (s64)stime < 0 ) + { + printk(XENLOG_G_WARNING "d%dv%d: bogus time %" PRId64 + " (offsets %" PRId64 "/%" PRId64 ")\n", + d->domain_id, v->vcpu_id, stime, + pl->stime_offset, v->arch.hvm_vcpu.stime_offset); + stime = 0; + } } tsc_stamp = gtime_to_gtsc(d, stime); } diff -Nru xen-4.2.1/xen/arch/x86/traps.c xen-4.2.2/xen/arch/x86/traps.c --- xen-4.2.1/xen/arch/x86/traps.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/traps.c 2013-04-23 18:42:55.000000000 +0200 @@ -3201,6 +3201,7 @@ static void pci_serr_softirq(void) { printk("\n\nNMI - PCI system error (SERR)\n"); + outb(inb(0x61) & 0x0b, 0x61); /* re-enable the PCI SERR error line. */ } void async_exception_cleanup(struct vcpu *curr) @@ -3291,9 +3292,20 @@ { outb((inb(0x61) & 0x0f) | 0x04, 0x61); /* clear-and-disable the PCI SERR error line. */ - /* Would like to print a diagnostic here but can't call printk() - from NMI context -- raise a softirq instead. */ - raise_softirq(PCI_SERR_SOFTIRQ); + switch ( opt_nmi[0] ) + { + case 'd': /* 'dom0' */ + nmi_dom0_report(_XEN_NMIREASON_pci_serr); + case 'i': /* 'ignore' */ + /* Would like to print a diagnostic here but can't call printk() + from NMI context -- raise a softirq instead. */ + raise_softirq(PCI_SERR_SOFTIRQ); + break; + default: /* 'fatal' */ + console_force_unlock(); + printk("\n\nNMI - PCI system error (SERR)\n"); + fatal_trap(TRAP_nmi, regs); + } } static void io_check_error(struct cpu_user_regs *regs) diff -Nru xen-4.2.1/xen/arch/x86/x86_32/entry.S xen-4.2.2/xen/arch/x86/x86_32/entry.S --- xen-4.2.1/xen/arch/x86/x86_32/entry.S 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/x86_32/entry.S 2013-04-23 18:42:55.000000000 +0200 @@ -60,6 +60,7 @@ #include #include #include +#include ALIGN restore_all_guest: @@ -561,6 +562,8 @@ jmp restore_all_xen .popsection +ENTRY(nmi) + pushl $TRAP_nmi<<16 handle_nmi_mce: #ifdef CONFIG_X86_SUPERVISOR_MODE_KERNEL # NMI/MCE entry protocol is incompatible with guest kernel in ring 0. @@ -581,7 +584,24 @@ * cases we have put guest DS/ES on the guest stack frame, which will * be detected by SAVE_ALL(), or we have rolled back restore_guest. */ - jmp ret_from_intr + cmpb $TRAP_nmi,UREGS_entry_vector(%esp) + jne ret_from_intr + /* We want to get straight to the IRET on the NMI exit path. */ + GET_CURRENT(%ebx) + movl UREGS_eflags(%esp),%eax + movb UREGS_cs(%esp),%al + testl $(3|X86_EFLAGS_VM),%eax + jz restore_all_xen + /* Send an IPI to ourselves to cover for the lack of event checking. */ + movl VCPU_processor(%ebx),%eax + shll $IRQSTAT_shift,%eax + cmpl $0,irq_stat(%eax) + je restore_all_guest + pushl $EVENT_CHECK_VECTOR + call send_IPI_self + addl $4,%esp + jmp restore_all_guest + .Lnmi_mce_xen: /* Check the outer (guest) context for %ds/%es state validity. */ GET_CPUINFO_FIELD(CPUINFO_guest_cpu_user_regs,%ebx) @@ -613,14 +633,18 @@ jmp .Lnmi_mce_common #endif /* !CONFIG_X86_SUPERVISOR_MODE_KERNEL */ -ENTRY(nmi) - pushl $TRAP_nmi<<16 - jmp handle_nmi_mce - ENTRY(machine_check) pushl $TRAP_machine_check<<16 jmp handle_nmi_mce +/* Enable NMIs. No special register assumptions. All registers are preserved. */ +ENTRY(enable_nmis) + /* Set up stack frame */ + pushf # EFLAGS + push %cs # CS + push $.Lret # EIP + iret # Disable the hardware NMI latch + ENTRY(setup_vm86_frame) mov %ecx,%ds mov %ecx,%es @@ -634,7 +658,7 @@ .endm copy_vm86_words addl $16,%esp - ret +.Lret: ret .section .rodata, "a", @progbits diff -Nru xen-4.2.1/xen/arch/x86/x86_64/compat/entry.S xen-4.2.2/xen/arch/x86/x86_64/compat/entry.S --- xen-4.2.1/xen/arch/x86/x86_64/compat/entry.S 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/x86_64/compat/entry.S 2013-04-23 18:42:55.000000000 +0200 @@ -171,7 +171,7 @@ jmp compat_test_all_events /* %rbx: struct vcpu, interrupts disabled */ -compat_restore_all_guest: +ENTRY(compat_restore_all_guest) ASSERT_INTERRUPTS_DISABLED RESTORE_ALL addq $8,%rsp diff -Nru xen-4.2.1/xen/arch/x86/x86_64/compat/traps.c xen-4.2.2/xen/arch/x86/x86_64/compat/traps.c --- xen-4.2.1/xen/arch/x86/x86_64/compat/traps.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/x86_64/compat/traps.c 2013-04-23 18:42:55.000000000 +0200 @@ -20,11 +20,12 @@ if ( v != current ) { struct vcpu *vcpu; + unsigned long mfn; ASSERT(guest_kernel_mode(v, regs)); - addr = read_cr3() >> PAGE_SHIFT; + mfn = read_cr3() >> PAGE_SHIFT; for_each_vcpu( v->domain, vcpu ) - if ( pagetable_get_pfn(vcpu->arch.guest_table) == addr ) + if ( pagetable_get_pfn(vcpu->arch.guest_table) == mfn ) break; if ( !vcpu ) { diff -Nru xen-4.2.1/xen/arch/x86/x86_64/entry.S xen-4.2.2/xen/arch/x86/x86_64/entry.S --- xen-4.2.1/xen/arch/x86/x86_64/entry.S 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/arch/x86/x86_64/entry.S 2013-04-23 18:42:55.000000000 +0200 @@ -11,6 +11,7 @@ #include #include #include +#include ALIGN /* %rbx: struct vcpu */ @@ -284,7 +285,14 @@ cmpb $0,VCPU_sysenter_disables_events(%rbx) movq VCPU_sysenter_addr(%rbx),%rax setne %cl + testl $X86_EFLAGS_NT,UREGS_eflags(%rsp) leaq VCPU_trap_bounce(%rbx),%rdx +UNLIKELY_START(nz, sysenter_nt_set) + pushfq + andl $~X86_EFLAGS_NT,(%rsp) + popfq + xorl %eax,%eax +UNLIKELY_END(sysenter_nt_set) testq %rax,%rax leal (,%rcx,TBF_INTERRUPT),%ecx UNLIKELY_START(z, sysenter_gpf) @@ -617,6 +625,9 @@ jmp restore_all_xen .popsection +ENTRY(nmi) + pushq $0 + movl $TRAP_nmi,4(%rsp) handle_ist_exception: SAVE_ALL testb $3,UREGS_cs(%rsp) @@ -631,18 +642,47 @@ movl UREGS_entry_vector(%rsp),%eax leaq exception_table(%rip),%rdx callq *(%rdx,%rax,8) - jmp ret_from_intr + cmpb $TRAP_nmi,UREGS_entry_vector(%rsp) + jne ret_from_intr -ENTRY(nmi) - pushq $0 - movl $TRAP_nmi,4(%rsp) - jmp handle_ist_exception + /* We want to get straight to the IRET on the NMI exit path. */ + testb $3,UREGS_cs(%rsp) + jz restore_all_xen + GET_CURRENT(%rbx) + /* Send an IPI to ourselves to cover for the lack of event checking. */ + movl VCPU_processor(%rbx),%eax + shll $IRQSTAT_shift,%eax + leaq irq_stat(%rip),%rcx + cmpl $0,(%rcx,%rax,1) + je 1f + movl $EVENT_CHECK_VECTOR,%edi + call send_IPI_self +1: movq VCPU_domain(%rbx),%rax + cmpb $0,DOMAIN_is_32bit_pv(%rax) + je restore_all_guest + jmp compat_restore_all_guest ENTRY(machine_check) pushq $0 movl $TRAP_machine_check,4(%rsp) jmp handle_ist_exception +/* Enable NMIs. No special register assumptions. Only %rax is not preserved. */ +ENTRY(enable_nmis) + movq %rsp, %rax /* Grab RSP before pushing */ + + /* Set up stack frame */ + pushq $0 /* SS */ + pushq %rax /* RSP */ + pushfq /* RFLAGS */ + pushq $__HYPERVISOR_CS /* CS */ + leaq 1f(%rip),%rax + pushq %rax /* RIP */ + + iretq /* Disable the hardware NMI latch */ +1: + retq + .section .rodata, "a", @progbits ENTRY(exception_table) diff -Nru xen-4.2.1/xen/common/compat/memory.c xen-4.2.2/xen/common/compat/memory.c --- xen-4.2.1/xen/common/compat/memory.c 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/common/compat/memory.c 2013-04-23 18:42:55.000000000 +0200 @@ -15,7 +15,8 @@ int compat_memory_op(unsigned int cmd, XEN_GUEST_HANDLE(void) compat) { - int rc, split, op = cmd & MEMOP_CMD_MASK; + int split, op = cmd & MEMOP_CMD_MASK; + long rc; unsigned int start_extent = cmd >> MEMOP_EXTENT_SHIFT; do @@ -172,7 +173,7 @@ if ( order_delta >= 0 ) nat.xchg->out.nr_extents = end_extent >> order_delta; else - nat.xchg->out.nr_extents = end_extent << order_delta; + nat.xchg->out.nr_extents = end_extent << -order_delta; ++split; } @@ -204,7 +205,7 @@ rc = do_memory_op(cmd, nat.hnd); if ( rc < 0 ) - return rc; + break; cmd = 0; if ( hypercall_xlat_continuation(&cmd, 0x02, nat.hnd, compat) ) @@ -318,5 +319,11 @@ __HYPERVISOR_memory_op, "ih", cmd, compat); } while ( split > 0 ); + if ( unlikely(rc > INT_MAX) ) + return INT_MAX; + + if ( unlikely(rc < INT_MIN) ) + return INT_MIN; + return rc; } diff -Nru xen-4.2.1/xen/common/domain.c xen-4.2.2/xen/common/domain.c --- xen-4.2.1/xen/common/domain.c 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/common/domain.c 2013-04-23 18:42:55.000000000 +0200 @@ -126,6 +126,7 @@ if ( !zalloc_cpumask_var(&v->cpu_affinity) || !zalloc_cpumask_var(&v->cpu_affinity_tmp) || + !zalloc_cpumask_var(&v->cpu_affinity_saved) || !zalloc_cpumask_var(&v->vcpu_dirty_cpumask) ) goto fail_free; @@ -155,6 +156,7 @@ fail_free: free_cpumask_var(v->cpu_affinity); free_cpumask_var(v->cpu_affinity_tmp); + free_cpumask_var(v->cpu_affinity_saved); free_cpumask_var(v->vcpu_dirty_cpumask); free_vcpu_struct(v); return NULL; diff -Nru xen-4.2.1/xen/common/domctl.c xen-4.2.2/xen/common/domctl.c --- xen-4.2.1/xen/common/domctl.c 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/common/domctl.c 2013-04-23 18:42:55.000000000 +0200 @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -897,9 +898,9 @@ else if ( xsm_irq_permission(d, pirq, allow) ) ret = -EPERM; else if ( allow ) - ret = irq_permit_access(d, pirq); + ret = pirq_permit_access(d, pirq); else - ret = irq_deny_access(d, pirq); + ret = pirq_deny_access(d, pirq); rcu_unlock_domain(d); } diff -Nru xen-4.2.1/xen/common/event_channel.c xen-4.2.2/xen/common/event_channel.c --- xen-4.2.1/xen/common/event_channel.c 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/common/event_channel.c 2013-04-23 18:42:55.000000000 +0200 @@ -140,7 +140,6 @@ chn = xzalloc_array(struct evtchn, EVTCHNS_PER_BUCKET); if ( unlikely(chn == NULL) ) return -ENOMEM; - bucket_from_port(d, port) = chn; for ( i = 0; i < EVTCHNS_PER_BUCKET; i++ ) { @@ -153,6 +152,8 @@ } } + bucket_from_port(d, port) = chn; + return port; } @@ -368,7 +369,7 @@ if ( (pirq < 0) || (pirq >= d->nr_pirqs) ) return -EINVAL; - if ( !is_hvm_domain(d) && !irq_access_permitted(d, pirq) ) + if ( !is_hvm_domain(d) && !pirq_access_permitted(d, pirq) ) return -EPERM; spin_lock(&d->event_lock); diff -Nru xen-4.2.1/xen/common/grant_table.c xen-4.2.2/xen/common/grant_table.c --- xen-4.2.1/xen/common/grant_table.c 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/common/grant_table.c 2013-04-23 18:42:55.000000000 +0200 @@ -2262,7 +2262,7 @@ rc = xsm_grant_setup(current->domain, d); if ( rc ) { op.status = GNTST_permission_denied; - goto out1; + goto out2; } gt = d->grant_table; diff -Nru xen-4.2.1/xen/common/memory.c xen-4.2.2/xen/common/memory.c --- xen-4.2.1/xen/common/memory.c 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/common/memory.c 2013-04-23 18:42:55.000000000 +0200 @@ -532,14 +532,13 @@ long do_memory_op(unsigned long cmd, XEN_GUEST_HANDLE(void) arg) { struct domain *d; - int rc, op; + long rc; unsigned int address_bits; unsigned long start_extent; struct xen_memory_reservation reservation; struct memop_args args; domid_t domid; - - op = cmd & MEMOP_CMD_MASK; + int op = cmd & MEMOP_CMD_MASK; switch ( op ) { diff -Nru xen-4.2.1/xen/common/page_alloc.c xen-4.2.2/xen/common/page_alloc.c --- xen-4.2.1/xen/common/page_alloc.c 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/common/page_alloc.c 2013-04-23 18:42:55.000000000 +0200 @@ -151,6 +151,10 @@ { unsigned long bad_spfn, bad_epfn; const char *p; +#ifdef CONFIG_X86 + const unsigned long *badpage = NULL; + unsigned int i, array_size; +#endif ps = round_pgup(ps); pe = round_pgdown(pe); @@ -161,6 +165,25 @@ bootmem_region_add(ps >> PAGE_SHIFT, pe >> PAGE_SHIFT); +#ifdef CONFIG_X86 + /* + * Here we put platform-specific memory range workarounds, i.e. + * memory known to be corrupt or otherwise in need to be reserved on + * specific platforms. + * We get these certain pages and remove them from memory region list. + */ + badpage = get_platform_badpages(&array_size); + if ( badpage ) + { + for ( i = 0; i < array_size; i++ ) + { + bootmem_region_zap(*badpage >> PAGE_SHIFT, + (*badpage >> PAGE_SHIFT) + 1); + badpage++; + } + } +#endif + /* Check new pages against the bad-page list. */ p = opt_badpage; while ( *p != '\0' ) diff -Nru xen-4.2.1/xen/common/sched_credit.c xen-4.2.2/xen/common/sched_credit.c --- xen-4.2.1/xen/common/sched_credit.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/common/sched_credit.c 2013-04-23 18:42:55.000000000 +0200 @@ -58,8 +58,8 @@ /* * Flags */ -#define CSCHED_FLAG_VCPU_PARKED 0x0001 /* VCPU over capped credits */ -#define CSCHED_FLAG_VCPU_YIELD 0x0002 /* VCPU yielding */ +#define CSCHED_FLAG_VCPU_PARKED 0x0 /* VCPU over capped credits */ +#define CSCHED_FLAG_VCPU_YIELD 0x1 /* VCPU yielding */ /* @@ -72,6 +72,9 @@ #define CSCHED_VCPU(_vcpu) ((struct csched_vcpu *) (_vcpu)->sched_priv) #define CSCHED_DOM(_dom) ((struct csched_dom *) (_dom)->sched_priv) #define RUNQ(_cpu) (&(CSCHED_PCPU(_cpu)->runq)) +/* Is the first element of _cpu's runq its idle vcpu? */ +#define IS_RUNQ_IDLE(_cpu) (list_empty(RUNQ(_cpu)) || \ + is_idle_vcpu(__runq_elem(RUNQ(_cpu)->next)->vcpu)) /* @@ -129,7 +132,7 @@ struct vcpu *vcpu; atomic_t credit; s_time_t start_time; /* When we were scheduled (used for credit) */ - uint16_t flags; + unsigned flags; int16_t pri; #ifdef CSCHED_STATS struct { @@ -211,7 +214,7 @@ /* If the vcpu yielded, try to put it behind one lower-priority * runnable vcpu if we can. The next runq_sort will bring it forward * within 30ms if the queue too long. */ - if ( svc->flags & CSCHED_FLAG_VCPU_YIELD + if ( test_bit(CSCHED_FLAG_VCPU_YIELD, &svc->flags) && __runq_elem(iter)->pri > CSCHED_PRI_IDLE ) { iter=iter->next; @@ -487,9 +490,14 @@ * distinct cores first and guarantees we don't do something stupid * like run two VCPUs on co-hyperthreads while there are idle cores * or sockets. + * + * Notice that, when computing the "idleness" of cpu, we may want to + * discount vc. That is, iff vc is the currently running and the only + * runnable vcpu on cpu, we add cpu to the idlers. */ cpumask_and(&idlers, &cpu_online_map, CSCHED_PRIV(ops)->idlers); - cpumask_set_cpu(cpu, &idlers); + if ( vc->processor == cpu && IS_RUNQ_IDLE(cpu) ) + cpumask_set_cpu(cpu, &idlers); cpumask_and(&cpus, &cpus, &idlers); cpumask_clear_cpu(cpu, &cpus); @@ -768,7 +776,7 @@ * those. */ if ( svc->pri == CSCHED_PRI_TS_UNDER && - !(svc->flags & CSCHED_FLAG_VCPU_PARKED) ) + !test_bit(CSCHED_FLAG_VCPU_PARKED, &svc->flags) ) { svc->pri = CSCHED_PRI_TS_BOOST; } @@ -781,12 +789,12 @@ static void csched_vcpu_yield(const struct scheduler *ops, struct vcpu *vc) { - struct csched_vcpu * const sv = CSCHED_VCPU(vc); + struct csched_vcpu * const svc = CSCHED_VCPU(vc); if ( !sched_credit_default_yield ) { /* Let the scheduler know that this vcpu is trying to yield */ - sv->flags |= CSCHED_FLAG_VCPU_YIELD; + set_bit(CSCHED_FLAG_VCPU_YIELD, &svc->flags); } } @@ -846,8 +854,9 @@ case XEN_SYSCTL_SCHEDOP_putinfo: if (params->tslice_ms > XEN_SYSCTL_CSCHED_TSLICE_MAX || params->tslice_ms < XEN_SYSCTL_CSCHED_TSLICE_MIN - || params->ratelimit_us > XEN_SYSCTL_SCHED_RATELIMIT_MAX - || params->ratelimit_us < XEN_SYSCTL_SCHED_RATELIMIT_MIN + || (params->ratelimit_us + && (params->ratelimit_us > XEN_SYSCTL_SCHED_RATELIMIT_MAX + || params->ratelimit_us < XEN_SYSCTL_SCHED_RATELIMIT_MIN)) || MICROSECS(params->ratelimit_us) > MILLISECS(params->tslice_ms) ) goto out; prv->tslice_ms = params->tslice_ms; @@ -1113,11 +1122,10 @@ /* Park running VCPUs of capped-out domains */ if ( sdom->cap != 0U && credit < -credit_cap && - !(svc->flags & CSCHED_FLAG_VCPU_PARKED) ) + !test_and_set_bit(CSCHED_FLAG_VCPU_PARKED, &svc->flags) ) { CSCHED_STAT_CRANK(vcpu_park); vcpu_pause_nosync(svc->vcpu); - svc->flags |= CSCHED_FLAG_VCPU_PARKED; } /* Lower bound on credits */ @@ -1133,7 +1141,7 @@ svc->pri = CSCHED_PRI_TS_UNDER; /* Unpark any capped domains whose credits go positive */ - if ( svc->flags & CSCHED_FLAG_VCPU_PARKED) + if ( test_and_clear_bit(CSCHED_FLAG_VCPU_PARKED, &svc->flags) ) { /* * It's important to unset the flag AFTER the unpause() @@ -1142,7 +1150,6 @@ */ CSCHED_STAT_CRANK(vcpu_unpark); vcpu_unpause(svc->vcpu); - svc->flags &= ~CSCHED_FLAG_VCPU_PARKED; } /* Upper bound on credits means VCPU stops earning */ @@ -1401,8 +1408,7 @@ /* * Clear YIELD flag before scheduling out */ - if ( scurr->flags & CSCHED_FLAG_VCPU_YIELD ) - scurr->flags &= ~(CSCHED_FLAG_VCPU_YIELD); + clear_bit(CSCHED_FLAG_VCPU_YIELD, &scurr->flags); /* * SMP Load balance: @@ -1607,17 +1613,6 @@ sched_credit_tslice_ms = CSCHED_DEFAULT_TSLICE_MS; } - if ( sched_ratelimit_us > XEN_SYSCTL_SCHED_RATELIMIT_MAX - || sched_ratelimit_us < XEN_SYSCTL_SCHED_RATELIMIT_MIN ) - { - printk("WARNING: sched_ratelimit_us outside of valid range [%d,%d].\n" - " Resetting to default %u\n", - XEN_SYSCTL_SCHED_RATELIMIT_MIN, - XEN_SYSCTL_SCHED_RATELIMIT_MAX, - SCHED_DEFAULT_RATELIMIT_US); - sched_ratelimit_us = SCHED_DEFAULT_RATELIMIT_US; - } - prv->tslice_ms = sched_credit_tslice_ms; prv->ticks_per_tslice = CSCHED_TICKS_PER_TSLICE; if ( prv->tslice_ms < prv->ticks_per_tslice ) diff -Nru xen-4.2.1/xen/common/sched_sedf.c xen-4.2.2/xen/common/sched_sedf.c --- xen-4.2.1/xen/common/sched_sedf.c 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/common/sched_sedf.c 2013-04-23 18:42:55.000000000 +0200 @@ -396,7 +396,8 @@ online = cpupool_scheduler_cpumask(v->domain->cpupool); cpumask_and(&online_affinity, v->cpu_affinity, online); - return cpumask_first(&online_affinity); + return cpumask_cycle(v->vcpu_id % cpumask_weight(&online_affinity) - 1, + &online_affinity); } /* diff -Nru xen-4.2.1/xen/common/schedule.c xen-4.2.2/xen/common/schedule.c --- xen-4.2.1/xen/common/schedule.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/common/schedule.c 2013-04-23 18:42:55.000000000 +0200 @@ -220,7 +220,7 @@ if ( v->sched_priv == NULL ) return 1; - SCHED_OP(VCPU2OP(v), insert_vcpu, v); + SCHED_OP(DOM2OP(d), insert_vcpu, v); return 0; } @@ -231,6 +231,9 @@ unsigned int new_p; void **vcpu_priv; void *domdata; + void *vcpudata; + struct scheduler *old_ops; + void *old_domdata; domdata = SCHED_OP(c->sched, alloc_domdata, d); if ( domdata == NULL ) @@ -261,21 +264,22 @@ domain_pause(d); + old_ops = DOM2OP(d); + old_domdata = d->sched_priv; + for_each_vcpu ( d, v ) { - SCHED_OP(VCPU2OP(v), remove_vcpu, v); - SCHED_OP(VCPU2OP(v), free_vdata, v->sched_priv); - v->sched_priv = NULL; + SCHED_OP(old_ops, remove_vcpu, v); } - SCHED_OP(DOM2OP(d), free_domdata, d->sched_priv); - d->cpupool = c; d->sched_priv = domdata; new_p = cpumask_first(c->cpu_valid); for_each_vcpu ( d, v ) { + vcpudata = v->sched_priv; + migrate_timer(&v->periodic_timer, new_p); migrate_timer(&v->singleshot_timer, new_p); migrate_timer(&v->poll_timer, new_p); @@ -288,12 +292,16 @@ new_p = cpumask_cycle(new_p, c->cpu_valid); SCHED_OP(c->sched, insert_vcpu, v); + + SCHED_OP(old_ops, free_vdata, vcpudata); } domain_update_node_affinity(d); domain_unpause(d); + SCHED_OP(old_ops, free_domdata, old_domdata); + xfree(vcpu_priv); return 0; @@ -530,6 +538,38 @@ } } +void restore_vcpu_affinity(struct domain *d) +{ + struct vcpu *v; + + for_each_vcpu ( d, v ) + { + vcpu_schedule_lock_irq(v); + + if ( v->affinity_broken ) + { + printk(XENLOG_DEBUG "Restoring affinity for d%dv%d\n", + d->domain_id, v->vcpu_id); + cpumask_copy(v->cpu_affinity, v->cpu_affinity_saved); + v->affinity_broken = 0; + } + + if ( v->processor == smp_processor_id() ) + { + set_bit(_VPF_migrating, &v->pause_flags); + vcpu_schedule_unlock_irq(v); + vcpu_sleep_nosync(v); + vcpu_migrate(v); + } + else + { + vcpu_schedule_unlock_irq(v); + } + } + + domain_update_node_affinity(d); +} + /* * This function is used by cpu_hotplug code from stop_machine context * and from cpupools to switch schedulers on a cpu. @@ -543,7 +583,7 @@ int ret = 0; c = per_cpu(cpupool, cpu); - if ( (c == NULL) || (system_state == SYS_STATE_suspend) ) + if ( c == NULL ) return ret; for_each_domain_in_cpupool ( d, c ) @@ -556,8 +596,15 @@ if ( cpumask_empty(&online_affinity) && cpumask_test_cpu(cpu, v->cpu_affinity) ) { - printk("Breaking vcpu affinity for domain %d vcpu %d\n", - v->domain->domain_id, v->vcpu_id); + printk(XENLOG_DEBUG "Breaking affinity for d%dv%d\n", + d->domain_id, v->vcpu_id); + + if (system_state == SYS_STATE_suspend) + { + cpumask_copy(v->cpu_affinity_saved, v->cpu_affinity); + v->affinity_broken = 1; + } + cpumask_setall(v->cpu_affinity); } @@ -603,7 +650,8 @@ vcpu_schedule_lock_irq(v); cpumask_copy(v->cpu_affinity, affinity); - if ( !cpumask_test_cpu(v->processor, v->cpu_affinity) ) + if ( VCPU2OP(v)->sched_id == XEN_SCHEDULER_SEDF || + !cpumask_test_cpu(v->processor, v->cpu_affinity) ) set_bit(_VPF_migrating, &v->pause_flags); vcpu_schedule_unlock_irq(v); @@ -1322,6 +1370,18 @@ if ( SCHED_OP(&ops, init) ) panic("scheduler returned error on init\n"); + if ( sched_ratelimit_us && + (sched_ratelimit_us > XEN_SYSCTL_SCHED_RATELIMIT_MAX + || sched_ratelimit_us < XEN_SYSCTL_SCHED_RATELIMIT_MIN) ) + { + printk("WARNING: sched_ratelimit_us outside of valid range [%d,%d].\n" + " Resetting to default %u\n", + XEN_SYSCTL_SCHED_RATELIMIT_MIN, + XEN_SYSCTL_SCHED_RATELIMIT_MAX, + SCHED_DEFAULT_RATELIMIT_US); + sched_ratelimit_us = SCHED_DEFAULT_RATELIMIT_US; + } + idle_domain = domain_create(DOMID_IDLE, 0, 0); BUG_ON(IS_ERR(idle_domain)); idle_domain->vcpu = idle_vcpu; diff -Nru xen-4.2.1/xen/common/trace.c xen-4.2.2/xen/common/trace.c --- xen-4.2.1/xen/common/trace.c 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/common/trace.c 2013-04-23 18:42:55.000000000 +0200 @@ -133,7 +133,7 @@ * The array of mfns for the highest cpu can start at the maximum value * mfn_offset can hold. So reduce the number of cpus and also the mfn_offset. */ - max_mfn_offset -= t_info_first_offset - 1; + max_mfn_offset -= t_info_first_offset; max_cpus--; if ( max_cpus ) max_mfn_offset /= max_cpus; diff -Nru xen-4.2.1/xen/common/xenoprof.c xen-4.2.2/xen/common/xenoprof.c --- xen-4.2.1/xen/common/xenoprof.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/common/xenoprof.c 2013-04-23 18:42:55.000000000 +0200 @@ -193,6 +193,13 @@ unsigned max_max_samples; int i; + nvcpu = 0; + for_each_vcpu ( d, v ) + nvcpu++; + + if ( !nvcpu ) + return -EINVAL; + d->xenoprof = xzalloc(struct xenoprof); if ( d->xenoprof == NULL ) { @@ -209,10 +216,6 @@ return -ENOMEM; } - nvcpu = 0; - for_each_vcpu ( d, v ) - nvcpu++; - bufsize = sizeof(struct xenoprof_buf); i = sizeof(struct event_log); #ifdef CONFIG_COMPAT diff -Nru xen-4.2.1/xen/drivers/acpi/apei/apei-base.c xen-4.2.2/xen/drivers/acpi/apei/apei-base.c --- xen-4.2.1/xen/drivers/acpi/apei/apei-base.c 2012-09-28 11:02:52.000000000 +0200 +++ xen-4.2.2/xen/drivers/acpi/apei/apei-base.c 2013-04-23 18:42:55.000000000 +0200 @@ -154,9 +154,10 @@ * Interpret the specified action. Go through whole action table, * execute all instructions belong to the action. */ -int apei_exec_run(struct apei_exec_context *ctx, u8 action) +int __apei_exec_run(struct apei_exec_context *ctx, u8 action, + bool_t optional) { - int rc; + int rc = -ENOENT; u32 i, ip; struct acpi_whea_header *entry; apei_exec_ins_func_t run; @@ -195,7 +196,7 @@ goto rewind; } - return 0; + return !optional && rc < 0 ? rc : 0; } typedef int (*apei_exec_entry_func_t)(struct apei_exec_context *ctx, diff -Nru xen-4.2.1/xen/drivers/acpi/apei/apei-internal.h xen-4.2.2/xen/drivers/acpi/apei/apei-internal.h --- xen-4.2.1/xen/drivers/acpi/apei/apei-internal.h 2012-09-28 11:02:52.000000000 +0200 +++ xen-4.2.2/xen/drivers/acpi/apei/apei-internal.h 2013-04-23 18:42:55.000000000 +0200 @@ -48,7 +48,18 @@ return ctx->value; } -int apei_exec_run(struct apei_exec_context *ctx, u8 action); +int __apei_exec_run(struct apei_exec_context *ctx, u8 action, bool_t optional); + +static inline int apei_exec_run(struct apei_exec_context *ctx, u8 action) +{ + return __apei_exec_run(ctx, action, 0); +} + +/* It is optional whether the firmware provides the action */ +static inline int apei_exec_run_optional(struct apei_exec_context *ctx, u8 action) +{ + return __apei_exec_run(ctx, action, 1); +} /* Common instruction implementation */ diff -Nru xen-4.2.1/xen/drivers/acpi/apei/apei-io.c xen-4.2.2/xen/drivers/acpi/apei/apei-io.c --- xen-4.2.1/xen/drivers/acpi/apei/apei-io.c 2012-09-28 11:02:52.000000000 +0200 +++ xen-4.2.2/xen/drivers/acpi/apei/apei-io.c 2013-04-23 18:42:55.000000000 +0200 @@ -146,10 +146,8 @@ spin_lock_irqsave(&apei_iomaps_lock, flags); map = __apei_find_iomap(paddr, size); - if (!map) - return; - - list_del(&map->list); + if (map) + list_del(&map->list); spin_unlock_irqrestore(&apei_iomaps_lock, flags); xfree(map); diff -Nru xen-4.2.1/xen/drivers/acpi/apei/erst.c xen-4.2.2/xen/drivers/acpi/apei/erst.c --- xen-4.2.1/xen/drivers/acpi/apei/erst.c 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/drivers/acpi/apei/erst.c 2013-04-23 18:42:55.000000000 +0200 @@ -247,15 +247,64 @@ { int rc; u64 offset; +#ifdef CONFIG_X86 + enum fixed_addresses idx; +#endif + void *src, *dst; + + /* ioremap does not work in interrupt context */ + if (in_irq()) { + printk(KERN_WARNING + "MOVE_DATA cannot be used in interrupt context\n"); + return -EBUSY; + } rc = __apei_exec_read_register(entry, &offset); if (rc) return rc; - memmove((void *)(unsigned long)(ctx->dst_base + offset), - (void *)(unsigned long)(ctx->src_base + offset), - ctx->var2); - return 0; +#ifdef CONFIG_X86 + switch (ctx->var2) { + case 0: + return 0; + case 1 ... PAGE_SIZE: + break; + default: + printk(KERN_WARNING + "MOVE_DATA cannot be used for %#"PRIx64" bytes of data\n", + ctx->var2); + return -EOPNOTSUPP; + } + + src = __acpi_map_table(ctx->src_base + offset, ctx->var2); +#else + src = ioremap(ctx->src_base + offset, ctx->var2); +#endif + if (!src) + return -ENOMEM; + +#ifdef CONFIG_X86 + BUILD_BUG_ON(FIX_ACPI_PAGES < 4); + idx = virt_to_fix((unsigned long)src + 2 * PAGE_SIZE); + offset += ctx->dst_base; + dst = (void *)fix_to_virt(idx) + (offset & ~PAGE_MASK); + set_fixmap(idx, offset); + if (PFN_DOWN(offset) != PFN_DOWN(offset + ctx->var2 - 1)) { + idx = virt_to_fix((unsigned long)dst + PAGE_SIZE); + set_fixmap(idx, offset + PAGE_SIZE); + } +#else + dst = ioremap(ctx->dst_base + offset, ctx->var2); +#endif + if (dst) { + memmove(dst, src, ctx->var2); + iounmap(dst); + } else + rc = -ENOMEM; + + iounmap(src); + + return rc; } static struct apei_exec_ins_type erst_ins_type[] = { @@ -715,12 +764,23 @@ static int __init erst_check_table(struct acpi_table_erst *erst_tab) { - if (erst_tab->header_length != sizeof(struct acpi_table_erst)) + if (erst_tab->header.length < sizeof(*erst_tab)) return -EINVAL; - if (erst_tab->header.length < sizeof(struct acpi_table_erst)) + + switch (erst_tab->header_length) { + case sizeof(*erst_tab) - sizeof(erst_tab->header): + /* + * While invalid per specification, there are (early?) systems + * indicating the full header size here, so accept that value too. + */ + case sizeof(*erst_tab): + break; + default: return -EINVAL; + } + if (erst_tab->entries != - (erst_tab->header.length - sizeof(struct acpi_table_erst)) / + (erst_tab->header.length - sizeof(*erst_tab)) / sizeof(struct acpi_erst_entry)) return -EINVAL; @@ -739,11 +799,11 @@ status = acpi_get_table(ACPI_SIG_ERST, 0, (struct acpi_table_header **)&erst_tab); if (status == AE_NOT_FOUND) { - printk(KERN_ERR "Table is not found!\n"); + printk(KERN_INFO "ERST table was not found\n"); return -ENODEV; } else if (ACPI_FAILURE(status)) { const char *msg = acpi_format_exception(status); - printk(KERN_ERR "Failed to get table, %s\n", msg); + printk(KERN_WARNING "Failed to get ERST table: %s\n", msg); return -EINVAL; } diff -Nru xen-4.2.1/xen/drivers/acpi/tables/tbxface.c xen-4.2.2/xen/drivers/acpi/tables/tbxface.c --- xen-4.2.1/xen/drivers/acpi/tables/tbxface.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/drivers/acpi/tables/tbxface.c 2013-04-23 18:42:55.000000000 +0200 @@ -205,3 +205,51 @@ return (AE_NOT_FOUND); } + +/****************************************************************************** + * + * FUNCTION: acpi_get_table_phys + * + * PARAMETERS: signature - ACPI signature of needed table + * instance - Which instance (for SSDTs) + * addr - Where the table's physical address is returned + * len - Where the length of table is returned + * + * RETURN: Status, pointer and length of table + * + * DESCRIPTION: Finds physical address and length of ACPI table + * + *****************************************************************************/ +acpi_status __init +acpi_get_table_phys(acpi_string signature, acpi_native_uint instance, + acpi_physical_address *addr, acpi_native_uint *len) +{ + acpi_native_uint i, j; + acpi_status status; + + if (!signature || !addr || !len) + return AE_BAD_PARAMETER; + + for (i = j = 0; i < acpi_gbl_root_table_list.count; i++) { + if (!ACPI_COMPARE_NAME( + &acpi_gbl_root_table_list.tables[i].signature, + signature)) + continue; + + if (++j < instance) + continue; + + status = + acpi_tb_verify_table(&acpi_gbl_root_table_list.tables[i]); + if (ACPI_SUCCESS(status)) { + *addr = acpi_gbl_root_table_list.tables[i].address; + *len = acpi_gbl_root_table_list.tables[i].length; + } + + acpi_gbl_root_table_list.tables[i].pointer = NULL; + + return status; + } + + return AE_NOT_FOUND; +} diff -Nru xen-4.2.1/xen/drivers/acpi/tables.c xen-4.2.2/xen/drivers/acpi/tables.c --- xen-4.2.1/xen/drivers/acpi/tables.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/drivers/acpi/tables.c 2013-04-23 18:42:55.000000000 +0200 @@ -267,7 +267,7 @@ * @handler: handler to run * * Scan the ACPI System Descriptor Table (STD) for a table matching @id, - * run @handler on it. Return 0 if table found, return on if not. + * run @handler on it. */ int __init acpi_table_parse(char *id, acpi_table_handler handler) { @@ -282,8 +282,7 @@ acpi_get_table(id, 0, &table); if (table) { - handler(table); - return 0; + return handler(table); } else return 1; } diff -Nru xen-4.2.1/xen/drivers/passthrough/amd/iommu_acpi.c xen-4.2.2/xen/drivers/passthrough/amd/iommu_acpi.c --- xen-4.2.1/xen/drivers/passthrough/amd/iommu_acpi.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/drivers/passthrough/amd/iommu_acpi.c 2013-04-23 18:42:55.000000000 +0200 @@ -22,6 +22,7 @@ #include #include #include +#include #include #include @@ -351,9 +352,8 @@ base = start_addr & PAGE_MASK; limit = (start_addr + mem_length - 1) & PAGE_MASK; - AMD_IOMMU_DEBUG("IVMD Block: Type 0x%x\n",ivmd_block->header.type); - AMD_IOMMU_DEBUG(" Start_Addr_Phys 0x%lx\n", start_addr); - AMD_IOMMU_DEBUG(" Mem_Length 0x%lx\n", mem_length); + AMD_IOMMU_DEBUG("IVMD Block: type %#x phys %#lx len %#lx\n", + ivmd_block->header.type, start_addr, mem_length); if ( ivmd_block->header.flags & ACPI_IVMD_EXCLUSION_RANGE ) iw = ir = IOMMU_CONTROL_ENABLED; @@ -548,8 +548,8 @@ return 0; } - AMD_IOMMU_DEBUG(" Dev_Id Range: 0x%x -> 0x%x\n", first_bdf, last_bdf); - AMD_IOMMU_DEBUG(" Dev_Id Alias: 0x%x\n", alias_id); + AMD_IOMMU_DEBUG(" Dev_Id Range: %#x -> %#x alias %#x\n", + first_bdf, last_bdf, alias_id); for ( bdf = first_bdf; bdf <= last_bdf; bdf++ ) add_ivrs_mapping_entry(bdf, alias_id, range->alias.header.data_setting, @@ -635,6 +635,7 @@ u16 header_length, u16 block_length, struct amd_iommu *iommu) { u16 dev_length, bdf; + int apic; dev_length = sizeof(*special); if ( header_length < (block_length + dev_length) ) @@ -650,11 +651,66 @@ return 0; } + AMD_IOMMU_DEBUG("IVHD Special: %04x:%02x:%02x.%u variety %#x handle %#x\n", + seg, PCI_BUS(bdf), PCI_SLOT(bdf), PCI_FUNC(bdf), + special->variety, special->handle); add_ivrs_mapping_entry(bdf, bdf, special->header.data_setting, iommu); - /* set device id of ioapic */ - ioapic_sbdf[special->handle].bdf = bdf; - ioapic_sbdf[special->handle].seg = seg; - return dev_length; + + if ( special->variety != ACPI_IVHD_IOAPIC ) + { + if ( special->variety != ACPI_IVHD_HPET ) + printk(XENLOG_ERR "Unrecognized IVHD special variety %#x\n", + special->variety); + return dev_length; + } + + if ( !iommu_intremap ) + return dev_length; + + /* + * Some BIOSes have IOAPIC broken entries so we check for IVRS + * consistency here --- whether entry's IOAPIC ID is valid and + * whether there are conflicting/duplicated entries. + */ + for ( apic = 0; apic < nr_ioapics; apic++ ) + { + if ( IO_APIC_ID(apic) != special->handle ) + continue; + + if ( ioapic_sbdf[special->handle].pin_setup ) + { + if ( ioapic_sbdf[special->handle].bdf == bdf && + ioapic_sbdf[special->handle].seg == seg ) + AMD_IOMMU_DEBUG("IVHD Warning: Duplicate IO-APIC %#x entries\n", + special->handle); + else + { + printk(XENLOG_ERR "IVHD Error: Conflicting IO-APIC %#x entries\n", + special->handle); + if ( amd_iommu_perdev_intremap ) + return 0; + } + } + else + { + /* set device id of ioapic */ + ioapic_sbdf[special->handle].bdf = bdf; + ioapic_sbdf[special->handle].seg = seg; + + ioapic_sbdf[special->handle].pin_setup = xzalloc_array( + unsigned long, BITS_TO_LONGS(nr_ioapic_entries[apic])); + if ( nr_ioapic_entries[apic] && + !ioapic_sbdf[IO_APIC_ID(apic)].pin_setup ) + { + printk(XENLOG_ERR "IVHD Error: Out of memory\n"); + return 0; + } + } + return dev_length; + } + + printk(XENLOG_ERR "IVHD Error: Invalid IO-APIC %#x\n", special->handle); + return 0; } static int __init parse_ivhd_block(const struct acpi_ivrs_hardware *ivhd_block) @@ -686,10 +742,9 @@ { ivhd_device = (const void *)((const u8 *)ivhd_block + block_length); - AMD_IOMMU_DEBUG( "IVHD Device Entry:\n"); - AMD_IOMMU_DEBUG( " Type 0x%x\n", ivhd_device->header.type); - AMD_IOMMU_DEBUG( " Dev_Id 0x%x\n", ivhd_device->header.id); - AMD_IOMMU_DEBUG( " Flags 0x%x\n", ivhd_device->header.data_setting); + AMD_IOMMU_DEBUG("IVHD Device Entry: type %#x id %#x flags %#x\n", + ivhd_device->header.type, ivhd_device->header.id, + ivhd_device->header.data_setting); switch ( ivhd_device->header.type ) { @@ -818,6 +873,7 @@ { const struct acpi_ivrs_header *ivrs_block; unsigned long length; + unsigned int apic; int error = 0; BUG_ON(!table); @@ -831,11 +887,9 @@ { ivrs_block = (struct acpi_ivrs_header *)((u8 *)table + length); - AMD_IOMMU_DEBUG("IVRS Block:\n"); - AMD_IOMMU_DEBUG(" Type 0x%x\n", ivrs_block->type); - AMD_IOMMU_DEBUG(" Flags 0x%x\n", ivrs_block->flags); - AMD_IOMMU_DEBUG(" Length 0x%x\n", ivrs_block->length); - AMD_IOMMU_DEBUG(" Dev_Id 0x%x\n", ivrs_block->device_id); + AMD_IOMMU_DEBUG("IVRS Block: type %#x flags %#x len %#x id %#x\n", + ivrs_block->type, ivrs_block->flags, + ivrs_block->length, ivrs_block->device_id); if ( table->length < (length + ivrs_block->length) ) { @@ -850,6 +904,29 @@ length += ivrs_block->length; } + /* Each IO-APIC must have been mentioned in the table. */ + for ( apic = 0; !error && iommu_intremap && apic < nr_ioapics; ++apic ) + { + if ( !nr_ioapic_entries[apic] || + ioapic_sbdf[IO_APIC_ID(apic)].pin_setup ) + continue; + + printk(XENLOG_ERR "IVHD Error: no information for IO-APIC %#x\n", + IO_APIC_ID(apic)); + if ( amd_iommu_perdev_intremap ) + error = -ENXIO; + else + { + ioapic_sbdf[IO_APIC_ID(apic)].pin_setup = xzalloc_array( + unsigned long, BITS_TO_LONGS(nr_ioapic_entries[apic])); + if ( !ioapic_sbdf[IO_APIC_ID(apic)].pin_setup ) + { + printk(XENLOG_ERR "IVHD Error: Out of memory\n"); + error = -ENOMEM; + } + } + } + return error; } @@ -992,5 +1069,8 @@ int __init amd_iommu_update_ivrs_mapping_acpi(void) { + if ( unlikely(acpi_gbl_FADT.boot_flags & ACPI_FADT_NO_MSI) ) + return -EPERM; + return acpi_table_parse(ACPI_SIG_IVRS, parse_ivrs_table); } diff -Nru xen-4.2.1/xen/drivers/passthrough/amd/iommu_cmd.c xen-4.2.2/xen/drivers/passthrough/amd/iommu_cmd.c --- xen-4.2.1/xen/drivers/passthrough/amd/iommu_cmd.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/drivers/passthrough/amd/iommu_cmd.c 2013-04-23 18:42:55.000000000 +0200 @@ -321,7 +321,7 @@ req_id = get_dma_requestor_id(iommu->seg, bdf); queueid = req_id; - maxpend = (ats_pdev->ats_queue_depth + 32) & 0xff; + maxpend = ats_pdev->ats_queue_depth & 0xff; /* send INVALIDATE_IOTLB_PAGES command */ spin_lock_irqsave(&iommu->lock, flags); diff -Nru xen-4.2.1/xen/drivers/passthrough/amd/iommu_init.c xen-4.2.2/xen/drivers/passthrough/amd/iommu_init.c --- xen-4.2.1/xen/drivers/passthrough/amd/iommu_init.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/drivers/passthrough/amd/iommu_init.c 2013-04-23 18:42:55.000000000 +0200 @@ -803,6 +803,42 @@ return irq; } +/* + * Family15h Model 10h-1fh erratum 746 (IOMMU Logging May Stall Translations) + * Workaround: + * BIOS should disable L2B micellaneous clock gating by setting + * L2_L2B_CK_GATE_CONTROL[CKGateL2BMiscDisable](D0F2xF4_x90[2]) = 1b + */ +static void amd_iommu_erratum_746_workaround(struct amd_iommu *iommu) +{ + u32 value; + u8 bus = PCI_BUS(iommu->bdf); + u8 dev = PCI_SLOT(iommu->bdf); + u8 func = PCI_FUNC(iommu->bdf); + + if ( (boot_cpu_data.x86 != 0x15) || + (boot_cpu_data.x86_model < 0x10) || + (boot_cpu_data.x86_model > 0x1f) ) + return; + + pci_conf_write32(iommu->seg, bus, dev, func, 0xf0, 0x90); + value = pci_conf_read32(iommu->seg, bus, dev, func, 0xf4); + + if ( value & (1 << 2) ) + return; + + /* Select NB indirect register 0x90 and enable writing */ + pci_conf_write32(iommu->seg, bus, dev, func, 0xf0, 0x90 | (1 << 8)); + + pci_conf_write32(iommu->seg, bus, dev, func, 0xf4, value | (1 << 2)); + printk(XENLOG_INFO + "AMD-Vi: Applying erratum 746 workaround for IOMMU at %04x:%02x:%02x.%u\n", + iommu->seg, bus, dev, func); + + /* Clear the enable writing bit */ + pci_conf_write32(iommu->seg, bus, dev, func, 0xf0, 0x90); +} + static void enable_iommu(struct amd_iommu *iommu) { unsigned long flags; @@ -815,6 +851,8 @@ return; } + amd_iommu_erratum_746_workaround(iommu); + register_iommu_dev_table_in_mmio_space(iommu); register_iommu_cmd_buffer_in_mmio_space(iommu); register_iommu_event_log_in_mmio_space(iommu); @@ -1126,12 +1164,46 @@ return 0; } +/* Check whether SP5100 SATA Combined mode is on */ +static bool_t __init amd_sp5100_erratum28(void) +{ + u32 bus, id; + u16 vendor_id, dev_id; + u8 byte; + + for (bus = 0; bus < 256; bus++) + { + id = pci_conf_read32(0, bus, 0x14, 0, PCI_VENDOR_ID); + + vendor_id = id & 0xffff; + dev_id = (id >> 16) & 0xffff; + + /* SP5100 SMBus module sets Combined mode on */ + if (vendor_id != 0x1002 || dev_id != 0x4385) + continue; + + byte = pci_conf_read8(0, bus, 0x14, 0, 0xad); + if ( (byte >> 3) & 1 ) + { + printk(XENLOG_WARNING "AMD-Vi: SP5100 erratum 28 detected, disabling IOMMU.\n" + "If possible, disable SATA Combined mode in BIOS or contact your vendor for BIOS update.\n"); + return 1; + } + } + + return 0; +} + int __init amd_iommu_init(void) { struct amd_iommu *iommu; BUG_ON( !iommu_found() ); + if ( iommu_intremap && amd_iommu_perdev_intremap && + amd_sp5100_erratum28() ) + goto error_out; + ivrs_bdf_entries = amd_iommu_get_ivrs_dev_entries(); if ( !ivrs_bdf_entries ) @@ -1146,7 +1218,7 @@ goto error_out; /* initialize io-apic interrupt remapping entries */ - if ( amd_iommu_setup_ioapic_remapping() != 0 ) + if ( iommu_intremap && amd_iommu_setup_ioapic_remapping() != 0 ) goto error_out; /* allocate and initialize a global device table shared by all iommus */ diff -Nru xen-4.2.1/xen/drivers/passthrough/amd/iommu_intr.c xen-4.2.2/xen/drivers/passthrough/amd/iommu_intr.c --- xen-4.2.1/xen/drivers/passthrough/amd/iommu_intr.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/drivers/passthrough/amd/iommu_intr.c 2013-04-23 18:42:55.000000000 +0200 @@ -99,12 +99,12 @@ static void update_intremap_entry_from_ioapic( int bdf, struct amd_iommu *iommu, - struct IO_APIC_route_entry *ioapic_rte) + const struct IO_APIC_route_entry *rte, + const struct IO_APIC_route_entry *old_rte) { unsigned long flags; u32* entry; u8 delivery_mode, dest, vector, dest_mode; - struct IO_APIC_route_entry *rte = ioapic_rte; int req_id; spinlock_t *lock; int offset; @@ -120,6 +120,14 @@ spin_lock_irqsave(lock, flags); offset = get_intremap_offset(vector, delivery_mode); + if ( old_rte ) + { + int old_offset = get_intremap_offset(old_rte->vector, + old_rte->delivery_mode); + + if ( offset != old_offset ) + free_intremap_entry(iommu->seg, bdf, old_offset); + } entry = (u32*)get_intremap_entry(iommu->seg, req_id, offset); update_intremap_entry(entry, vector, delivery_mode, dest_mode, dest); @@ -188,6 +196,7 @@ amd_iommu_flush_intremap(iommu, req_id); spin_unlock_irqrestore(&iommu->lock, flags); } + set_bit(pin, ioapic_sbdf[IO_APIC_ID(apic)].pin_setup); } } return 0; @@ -199,6 +208,7 @@ struct IO_APIC_route_entry old_rte = { 0 }; struct IO_APIC_route_entry new_rte = { 0 }; unsigned int rte_lo = (reg & 1) ? reg - 1 : reg; + unsigned int pin = (reg - 0x10) / 2; int saved_mask, seg, bdf; struct amd_iommu *iommu; @@ -236,6 +246,14 @@ *(((u32 *)&new_rte) + 1) = value; } + if ( new_rte.mask && + !test_bit(pin, ioapic_sbdf[IO_APIC_ID(apic)].pin_setup) ) + { + ASSERT(saved_mask); + __io_apic_write(apic, reg, value); + return; + } + /* mask the interrupt while we change the intremap table */ if ( !saved_mask ) { @@ -244,7 +262,11 @@ } /* Update interrupt remapping entry */ - update_intremap_entry_from_ioapic(bdf, iommu, &new_rte); + update_intremap_entry_from_ioapic( + bdf, iommu, &new_rte, + test_and_set_bit(pin, + ioapic_sbdf[IO_APIC_ID(apic)].pin_setup) ? &old_rte + : NULL); /* Forward write access to IO-APIC RTE */ __io_apic_write(apic, reg, value); @@ -354,6 +376,12 @@ return; } + if ( msi_desc->remap_index >= 0 ) + update_intremap_entry_from_msi_msg(iommu, pdev, msi_desc, NULL); + + if ( !msg ) + return; + update_intremap_entry_from_msi_msg(iommu, pdev, msi_desc, msg); } diff -Nru xen-4.2.1/xen/drivers/passthrough/amd/pci_amd_iommu.c xen-4.2.2/xen/drivers/passthrough/amd/pci_amd_iommu.c --- xen-4.2.1/xen/drivers/passthrough/amd/pci_amd_iommu.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/drivers/passthrough/amd/pci_amd_iommu.c 2013-04-23 18:42:55.000000000 +0200 @@ -32,8 +32,8 @@ { struct ivrs_mappings *ivrs_mappings = get_ivrs_mappings(seg); - BUG_ON ( bdf >= ivrs_bdf_entries ); - return ivrs_mappings ? ivrs_mappings[bdf].iommu : NULL; + return ivrs_mappings && bdf < ivrs_bdf_entries ? ivrs_mappings[bdf].iommu + : NULL; } /* @@ -205,6 +205,8 @@ { printk("AMD-Vi: Not overriding irq_vector_map setting\n"); } + if ( !amd_iommu_perdev_intremap ) + printk(XENLOG_WARNING "AMD-Vi: Using global interrupt remap table is not recommended (see XSA-36)!\n"); return scan_pci_devices(); } @@ -284,6 +286,9 @@ if ( mfn_valid(pfn) ) amd_iommu_map_page(d, pfn, pfn, IOMMUF_readable|IOMMUF_writable); + + if ( !(i & 0xfffff) ) + process_pending_softirqs(); } } diff -Nru xen-4.2.1/xen/drivers/passthrough/ats.h xen-4.2.2/xen/drivers/passthrough/ats.h --- xen-4.2.1/xen/drivers/passthrough/ats.h 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/drivers/passthrough/ats.h 2013-04-23 18:42:55.000000000 +0200 @@ -30,7 +30,7 @@ #define ATS_REG_CAP 4 #define ATS_REG_CTL 6 -#define ATS_QUEUE_DEPTH_MASK 0xF +#define ATS_QUEUE_DEPTH_MASK 0x1f #define ATS_ENABLE (1<<15) extern struct list_head ats_devices; diff -Nru xen-4.2.1/xen/drivers/passthrough/iommu.c xen-4.2.2/xen/drivers/passthrough/iommu.c --- xen-4.2.1/xen/drivers/passthrough/iommu.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/drivers/passthrough/iommu.c 2013-04-23 18:42:55.000000000 +0200 @@ -52,7 +52,7 @@ bool_t __read_mostly iommu_intremap = 1; bool_t __read_mostly iommu_hap_pt_share = 1; bool_t __read_mostly iommu_debug; -bool_t __read_mostly amd_iommu_perdev_intremap; +bool_t __read_mostly amd_iommu_perdev_intremap = 1; DEFINE_PER_CPU(bool_t, iommu_dont_flush_iotlb); @@ -91,7 +91,11 @@ else if ( !strcmp(s, "intremap") ) iommu_intremap = val; else if ( !strcmp(s, "debug") ) + { iommu_debug = val; + if ( val ) + iommu_verbose = 1; + } else if ( !strcmp(s, "amd-iommu-perdev-intremap") ) amd_iommu_perdev_intremap = val; else if ( !strcmp(s, "dom0-passthrough") ) @@ -400,6 +404,8 @@ rc = iommu_hardware_setup(); iommu_enabled = (rc == 0); } + if ( !iommu_enabled ) + iommu_intremap = 0; if ( (force_iommu && !iommu_enabled) || (force_intremap && !iommu_intremap) ) @@ -416,9 +422,12 @@ } printk("I/O virtualisation %sabled\n", iommu_enabled ? "en" : "dis"); if ( iommu_enabled ) + { printk(" - Dom0 mode: %s\n", iommu_passthrough ? "Passthrough" : iommu_dom0_strict ? "Strict" : "Relaxed"); + printk("Interrupt remapping %sabled\n", iommu_intremap ? "en" : "dis"); + } return rc; } @@ -522,7 +531,7 @@ const struct iommu_ops *ops = iommu_get_ops(); if ( iommu_enabled ) ops->crash_shutdown(); - iommu_enabled = 0; + iommu_enabled = iommu_intremap = 0; } int iommu_do_domctl( @@ -581,7 +590,7 @@ if ( ret ) break; - seg = domctl->u.get_device_group.machine_sbdf >> 16; + seg = domctl->u.assign_device.machine_sbdf >> 16; bus = (domctl->u.assign_device.machine_sbdf >> 8) & 0xff; devfn = domctl->u.assign_device.machine_sbdf & 0xff; @@ -610,7 +619,7 @@ if ( ret ) goto assign_device_out; - seg = domctl->u.get_device_group.machine_sbdf >> 16; + seg = domctl->u.assign_device.machine_sbdf >> 16; bus = (domctl->u.assign_device.machine_sbdf >> 8) & 0xff; devfn = domctl->u.assign_device.machine_sbdf & 0xff; @@ -638,7 +647,7 @@ if ( ret ) goto deassign_device_out; - seg = domctl->u.get_device_group.machine_sbdf >> 16; + seg = domctl->u.assign_device.machine_sbdf >> 16; bus = (domctl->u.assign_device.machine_sbdf >> 8) & 0xff; devfn = domctl->u.assign_device.machine_sbdf & 0xff; diff -Nru xen-4.2.1/xen/drivers/passthrough/vtd/dmar.c xen-4.2.2/xen/drivers/passthrough/vtd/dmar.c --- xen-4.2.1/xen/drivers/passthrough/vtd/dmar.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/drivers/passthrough/vtd/dmar.c 2013-04-23 18:42:55.000000000 +0200 @@ -776,6 +776,7 @@ } #ifdef CONFIG_X86 +#include #include /* ACPI tables may not be DMA protected by tboot, so use DMAR copy */ /* SINIT saved in SinitMleData in TXT heap (which is DMA protected) */ @@ -786,7 +787,32 @@ int __init acpi_dmar_init(void) { - acpi_get_table(ACPI_SIG_DMAR, 0, &dmar_table); + acpi_physical_address dmar_addr; + acpi_native_uint dmar_len; + + if ( ACPI_SUCCESS(acpi_get_table_phys(ACPI_SIG_DMAR, 0, + &dmar_addr, &dmar_len)) ) + { +#ifdef CONFIG_X86_32 + if ( dmar_addr + dmar_len > (DIRECTMAP_MBYTES << 20) ) + { + unsigned long offset = dmar_addr & (PAGE_SIZE - 1); + unsigned long mapped_size = PAGE_SIZE - offset; + + set_fixmap(FIX_DMAR_ZAP_LO, dmar_addr); + if ( mapped_size < sizeof(*dmar_table) ) + set_fixmap(FIX_DMAR_ZAP_HI, dmar_addr + PAGE_SIZE); + dmar_table = (void *)fix_to_virt(FIX_DMAR_ZAP_LO) + offset; + goto exit; + } +#endif + map_pages_to_xen((unsigned long)__va(dmar_addr), PFN_DOWN(dmar_addr), + PFN_UP(dmar_addr + dmar_len) - PFN_DOWN(dmar_addr), + PAGE_HYPERVISOR); + dmar_table = __va(dmar_addr); + } + + exit: __attribute__((__unused__)) return parse_dmar_table(acpi_parse_dmar); } diff -Nru xen-4.2.1/xen/drivers/passthrough/vtd/intremap.c xen-4.2.2/xen/drivers/passthrough/vtd/intremap.c --- xen-4.2.1/xen/drivers/passthrough/vtd/intremap.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/drivers/passthrough/vtd/intremap.c 2013-04-23 18:42:55.000000000 +0200 @@ -462,7 +462,7 @@ set_ire_sid(ire, SVT_VERIFY_BUS, SQ_ALL_16, (bus << 8) | pdev->bus); else if ( pdev_type(seg, bus, devfn) == DEV_TYPE_LEGACY_PCI_BRIDGE ) - set_ire_sid(ire, SVT_VERIFY_BUS, SQ_ALL_16, + set_ire_sid(ire, SVT_VERIFY_SID_SQ, SQ_ALL_16, PCI_BDF2(bus, devfn)); } break; diff -Nru xen-4.2.1/xen/drivers/passthrough/vtd/iommu.c xen-4.2.2/xen/drivers/passthrough/vtd/iommu.c --- xen-4.2.1/xen/drivers/passthrough/vtd/iommu.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/drivers/passthrough/vtd/iommu.c 2013-04-23 18:42:55.000000000 +0200 @@ -2086,6 +2086,9 @@ break; } } + if ( !iommu_intremap ) + for_each_drhd_unit ( drhd ) + disable_intremap(drhd->iommu); } /* @@ -2133,7 +2136,18 @@ if ( list_empty(&acpi_drhd_units) ) return -ENODEV; + if ( unlikely(acpi_gbl_FADT.boot_flags & ACPI_FADT_NO_MSI) ) + { + ret = -EPERM; + goto error; + } + platform_quirks_init(); + if ( !iommu_enabled ) + { + ret = -ENODEV; + goto error; + } /* We enable the following features only if they are supported by all VT-d * engines: Snoop Control, DMA passthrough, Queued Invalidation and @@ -2143,7 +2157,8 @@ { iommu = drhd->iommu; - printk("Intel VT-d supported page sizes: 4kB"); + printk("Intel VT-d iommu %"PRIu32" supported page sizes: 4kB", + iommu->index); if (cap_sps_2mb(iommu->cap)) printk(", 2MB"); diff -Nru xen-4.2.1/xen/drivers/passthrough/vtd/quirks.c xen-4.2.2/xen/drivers/passthrough/vtd/quirks.c --- xen-4.2.1/xen/drivers/passthrough/vtd/quirks.c 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/drivers/passthrough/vtd/quirks.c 2013-04-23 18:42:55.000000000 +0200 @@ -31,6 +31,7 @@ #include #include #include +#include #include #include "iommu.h" #include "dmar.h" @@ -47,7 +48,6 @@ #define IS_CTG(id) (id == 0x2a408086) #define IS_ILK(id) (id == 0x00408086 || id == 0x00448086 || id== 0x00628086 || id == 0x006A8086) #define IS_CPT(id) (id == 0x01008086 || id == 0x01048086) -#define IS_SNB_GFX(id) (id == 0x01068086 || id == 0x01168086 || id == 0x01268086 || id == 0x01028086 || id == 0x01128086 || id == 0x01228086 || id == 0x010A8086) static u32 __read_mostly ioh_id; static u32 __initdata igd_id; @@ -248,6 +248,29 @@ } } +/* 5500/5520/X58 Chipset Interrupt remapping errata, for stepping B-3. + * Fixed in stepping C-2. */ +static void __init tylersburg_intremap_quirk(void) +{ + uint32_t bus, device; + uint8_t rev; + + for ( bus = 0; bus < 0x100; bus++ ) + { + /* Match on System Management Registers on Device 20 Function 0 */ + device = pci_conf_read32(0, bus, 20, 0, PCI_VENDOR_ID); + rev = pci_conf_read8(0, bus, 20, 0, PCI_REVISION_ID); + + if ( rev == 0x13 && device == 0x342e8086 ) + { + printk(XENLOG_WARNING VTDPREFIX + "Disabling IOMMU due to Intel 5500/5520/X58 Chipset errata #47, #53\n"); + iommu_enabled = 0; + break; + } + } +} + /* initialize platform identification flags */ void __init platform_quirks_init(void) { @@ -268,6 +291,10 @@ /* ioremap IGD MMIO+0x2000 page */ map_igd_reg(); + + /* Tylersburg interrupt remap quirk */ + if ( iommu_intremap ) + tylersburg_intremap_quirk(); } /* diff -Nru xen-4.2.1/xen/drivers/passthrough/x86/ats.c xen-4.2.2/xen/drivers/passthrough/x86/ats.c --- xen-4.2.1/xen/drivers/passthrough/x86/ats.c 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/drivers/passthrough/x86/ats.c 2013-04-23 18:42:55.000000000 +0200 @@ -93,7 +93,8 @@ pdev->devfn = devfn; value = pci_conf_read16(seg, bus, PCI_SLOT(devfn), PCI_FUNC(devfn), pos + ATS_REG_CAP); - pdev->ats_queue_depth = value & ATS_QUEUE_DEPTH_MASK; + pdev->ats_queue_depth = value & ATS_QUEUE_DEPTH_MASK ?: + ATS_QUEUE_DEPTH_MASK + 1; list_add(&pdev->list, &ats_devices); } diff -Nru xen-4.2.1/xen/include/acpi/acpixf.h xen-4.2.2/xen/include/acpi/acpixf.h --- xen-4.2.1/xen/include/acpi/acpixf.h 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/include/acpi/acpixf.h 2013-04-23 18:42:55.000000000 +0200 @@ -77,6 +77,9 @@ acpi_get_table(acpi_string signature, acpi_native_uint instance, struct acpi_table_header **out_table); +acpi_status +acpi_get_table_phys(acpi_string signature, acpi_native_uint instance, + acpi_physical_address *addr, acpi_native_uint *len); /* * Namespace and name interfaces */ diff -Nru xen-4.2.1/xen/include/asm-x86/fixmap.h xen-4.2.2/xen/include/asm-x86/fixmap.h --- xen-4.2.1/xen/include/asm-x86/fixmap.h 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/include/asm-x86/fixmap.h 2013-04-23 18:42:55.000000000 +0200 @@ -37,6 +37,8 @@ FIX_PAE_HIGHMEM_END = FIX_PAE_HIGHMEM_0 + NR_CPUS-1, #define FIX_VGC_END FIX_PAE_HIGHMEM_0 #define FIX_VGC_BEGIN FIX_PAE_HIGHMEM_END + FIX_DMAR_ZAP_HI, + FIX_DMAR_ZAP_LO, #else FIX_VGC_END, FIX_VGC_BEGIN = FIX_VGC_END diff -Nru xen-4.2.1/xen/include/asm-x86/hvm/svm/amd-iommu-proto.h xen-4.2.2/xen/include/asm-x86/hvm/svm/amd-iommu-proto.h --- xen-4.2.1/xen/include/asm-x86/hvm/svm/amd-iommu-proto.h 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/include/asm-x86/hvm/svm/amd-iommu-proto.h 2013-04-23 18:42:55.000000000 +0200 @@ -100,6 +100,7 @@ extern struct ioapic_sbdf { u16 bdf, seg; + unsigned long *pin_setup; } ioapic_sbdf[MAX_IO_APICS]; extern void *shared_intremap_table; diff -Nru xen-4.2.1/xen/include/asm-x86/hvm/vmx/vmx.h xen-4.2.2/xen/include/asm-x86/hvm/vmx/vmx.h --- xen-4.2.1/xen/include/asm-x86/hvm/vmx/vmx.h 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/include/asm-x86/hvm/vmx/vmx.h 2013-04-23 18:42:55.000000000 +0200 @@ -394,6 +394,8 @@ void ept_walk_table(struct domain *d, unsigned long gfn); void setup_ept_dump(void); +void update_guest_eip(void); + /* EPT violation qualifications definitions */ #define _EPT_READ_VIOLATION 0 #define EPT_READ_VIOLATION (1UL<<_EPT_READ_VIOLATION) diff -Nru xen-4.2.1/xen/include/asm-x86/io_apic.h xen-4.2.2/xen/include/asm-x86/io_apic.h --- xen-4.2.1/xen/include/asm-x86/io_apic.h 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/include/asm-x86/io_apic.h 2013-04-23 18:42:55.000000000 +0200 @@ -129,7 +129,7 @@ extern struct mpc_config_ioapic mp_ioapics[MAX_IO_APICS]; /* Only need to remap ioapic RTE (reg: 10~3Fh) */ -#define ioapic_reg_remapped(reg) (iommu_enabled && ((reg) >= 0x10)) +#define ioapic_reg_remapped(reg) (iommu_intremap && ((reg) >= 0x10)) static inline unsigned int __io_apic_read(unsigned int apic, unsigned int reg) { diff -Nru xen-4.2.1/xen/include/asm-x86/mm.h xen-4.2.2/xen/include/asm-x86/mm.h --- xen-4.2.1/xen/include/asm-x86/mm.h 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/include/asm-x86/mm.h 2013-04-23 18:42:55.000000000 +0200 @@ -246,7 +246,7 @@ #endif #if defined(__i386__) -#define is_xen_heap_page(page) is_xen_heap_mfn(page_to_mfn(page)) +#define is_xen_heap_page(page) is_xen_heap_mfn(__page_to_mfn(page)) #define is_xen_heap_mfn(mfn) ({ \ unsigned long _mfn = (mfn); \ (_mfn < paddr_to_pfn(xenheap_phys_end)); \ @@ -342,6 +342,7 @@ void clear_superpage_mark(struct page_info *page); +const unsigned long *get_platform_badpages(unsigned int *array_size); /* Per page locks: * page_lock() is used for two purposes: pte serialization, and memory sharing. * diff -Nru xen-4.2.1/xen/include/asm-x86/msi.h xen-4.2.2/xen/include/asm-x86/msi.h --- xen-4.2.1/xen/include/asm-x86/msi.h 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/include/asm-x86/msi.h 2013-04-23 18:42:55.000000000 +0200 @@ -80,6 +80,7 @@ /* Helper functions */ extern int pci_enable_msi(struct msi_info *msi, struct msi_desc **desc); extern void pci_disable_msi(struct msi_desc *desc); +extern int pci_prepare_msix(u16 seg, u8 bus, u8 devfn, bool_t off); extern void pci_cleanup_msi(struct pci_dev *pdev); extern void setup_msi_handler(struct irq_desc *, struct msi_desc *); extern void setup_msi_irq(struct irq_desc *); diff -Nru xen-4.2.1/xen/include/asm-x86/msr-index.h xen-4.2.2/xen/include/asm-x86/msr-index.h --- xen-4.2.1/xen/include/asm-x86/msr-index.h 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/include/asm-x86/msr-index.h 2013-04-23 18:42:55.000000000 +0200 @@ -206,6 +206,7 @@ /* AMD64 MSRs */ #define MSR_AMD64_NB_CFG 0xc001001f +#define MSR_AMD64_IC_CFG 0xc0011021 #define MSR_AMD64_DC_CFG 0xc0011022 #define AMD64_NB_CFG_CF8_EXT_ENABLE_BIT 46 @@ -214,8 +215,9 @@ #define MSR_F10_MC4_MISC2 0xc0000409 #define MSR_F10_MC4_MISC3 0xc000040A -/* AMD Family10h MMU control MSRs */ -#define MSR_F10_BU_CFG 0xc0011023 +/* AMD Family10h Bus Unit MSRs */ +#define MSR_F10_BU_CFG 0xc0011023 +#define MSR_F10_BU_CFG2 0xc001102a /* Other AMD Fam10h MSRs */ #define MSR_FAM10H_MMIO_CONF_BASE 0xc0010058 diff -Nru xen-4.2.1/xen/include/asm-x86/pci.h xen-4.2.2/xen/include/asm-x86/pci.h --- xen-4.2.1/xen/include/asm-x86/pci.h 2013-02-04 17:53:11.000000000 +0100 +++ xen-4.2.2/xen/include/asm-x86/pci.h 2013-04-23 18:42:55.000000000 +0200 @@ -1,6 +1,11 @@ #ifndef __X86_PCI_H__ #define __X86_PCI_H__ +#define IS_SNB_GFX(id) (id == 0x01068086 || id == 0x01168086 \ + || id == 0x01268086 || id == 0x01028086 \ + || id == 0x01128086 || id == 0x01228086 \ + || id == 0x010A8086 ) + struct arch_pci_dev { vmask_t used_vectors; }; diff -Nru xen-4.2.1/xen/include/asm-x86/processor.h xen-4.2.2/xen/include/asm-x86/processor.h --- xen-4.2.1/xen/include/asm-x86/processor.h 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/include/asm-x86/processor.h 2013-04-23 18:42:55.000000000 +0200 @@ -584,6 +584,8 @@ DECLARE_TRAP_HANDLER(spurious_interrupt_bug); #undef DECLARE_TRAP_HANDLER +void enable_nmis(void); + void syscall_enter(void); void sysenter_entry(void); void sysenter_eflags_saved(void); diff -Nru xen-4.2.1/xen/include/asm-x86/smp.h xen-4.2.2/xen/include/asm-x86/smp.h --- xen-4.2.1/xen/include/asm-x86/smp.h 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/include/asm-x86/smp.h 2013-04-23 18:42:55.000000000 +0200 @@ -29,7 +29,8 @@ void smp_send_nmi_allbutself(void); -void send_IPI_mask(const cpumask_t *mask, int vector); +void send_IPI_mask(const cpumask_t *, int vector); +void send_IPI_self(int vector); extern void (*mtrr_hook) (void); diff -Nru xen-4.2.1/xen/include/public/nmi.h xen-4.2.2/xen/include/public/nmi.h --- xen-4.2.1/xen/include/public/nmi.h 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/include/public/nmi.h 2013-04-23 18:42:55.000000000 +0200 @@ -36,9 +36,14 @@ /* I/O-check error reported via ISA port 0x61, bit 6. */ #define _XEN_NMIREASON_io_error 0 #define XEN_NMIREASON_io_error (1UL << _XEN_NMIREASON_io_error) + /* PCI SERR reported via ISA port 0x61, bit 7. */ +#define _XEN_NMIREASON_pci_serr 1 +#define XEN_NMIREASON_pci_serr (1UL << _XEN_NMIREASON_pci_serr) +#if __XEN_INTERFACE_VERSION__ < 0x00040300 /* legacy alias of the above */ /* Parity error reported via ISA port 0x61, bit 7. */ #define _XEN_NMIREASON_parity_error 1 #define XEN_NMIREASON_parity_error (1UL << _XEN_NMIREASON_parity_error) +#endif /* Unknown hardware-generated NMI. */ #define _XEN_NMIREASON_unknown 2 #define XEN_NMIREASON_unknown (1UL << _XEN_NMIREASON_unknown) diff -Nru xen-4.2.1/xen/include/public/physdev.h xen-4.2.2/xen/include/public/physdev.h --- xen-4.2.1/xen/include/public/physdev.h 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/include/public/physdev.h 2013-04-23 18:42:55.000000000 +0200 @@ -303,6 +303,12 @@ #define PHYSDEVOP_pci_device_remove 26 #define PHYSDEVOP_restore_msi_ext 27 +/* + * Dom0 should use these two to announce MMIO resources assigned to + * MSI-X capable devices won't (prepare) or may (release) change. + */ +#define PHYSDEVOP_prepare_msix 30 +#define PHYSDEVOP_release_msix 31 struct physdev_pci_device { /* IN */ uint16_t seg; diff -Nru xen-4.2.1/xen/include/xen/iocap.h xen-4.2.2/xen/include/xen/iocap.h --- xen-4.2.1/xen/include/xen/iocap.h 2012-09-28 11:02:52.000000000 +0200 +++ xen-4.2.2/xen/include/xen/iocap.h 2013-04-23 18:42:55.000000000 +0200 @@ -28,4 +28,22 @@ #define irq_access_permitted(d, i) \ rangeset_contains_singleton((d)->irq_caps, i) +#define pirq_permit_access(d, i) ({ \ + struct domain *d__ = (d); \ + int i__ = domain_pirq_to_irq(d__, i); \ + i__ > 0 ? rangeset_add_singleton(d__->irq_caps, i__)\ + : -EINVAL; \ +}) +#define pirq_deny_access(d, i) ({ \ + struct domain *d__ = (d); \ + int i__ = domain_pirq_to_irq(d__, i); \ + i__ > 0 ? rangeset_remove_singleton(d__->irq_caps, i__)\ + : -EINVAL; \ +}) +#define pirq_access_permitted(d, i) ({ \ + struct domain *d__ = (d); \ + rangeset_contains_singleton(d__->irq_caps, \ + domain_pirq_to_irq(d__, i));\ +}) + #endif /* __XEN_IOCAP_H__ */ diff -Nru xen-4.2.1/xen/include/xen/pci.h xen-4.2.2/xen/include/xen/pci.h --- xen-4.2.1/xen/include/xen/pci.h 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/include/xen/pci.h 2013-04-23 18:42:55.000000000 +0200 @@ -57,6 +57,7 @@ int msix_table_refcnt[MAX_MSIX_TABLE_PAGES]; int msix_table_idx[MAX_MSIX_TABLE_PAGES]; spinlock_t msix_table_lock; + domid_t msix_warned; struct domain *domain; const u16 seg; diff -Nru xen-4.2.1/xen/include/xen/sched.h xen-4.2.2/xen/include/xen/sched.h --- xen-4.2.1/xen/include/xen/sched.h 2013-03-08 11:38:51.000000000 +0100 +++ xen-4.2.2/xen/include/xen/sched.h 2013-04-23 18:42:55.000000000 +0200 @@ -140,6 +140,9 @@ bool_t defer_shutdown; /* VCPU is paused following shutdown request (d->is_shutting_down)? */ bool_t paused_for_shutdown; + /* VCPU need affinity restored */ + bool_t affinity_broken; + /* * > 0: a single port is being polled; @@ -162,6 +165,8 @@ cpumask_var_t cpu_affinity; /* Used to change affinity temporarily. */ cpumask_var_t cpu_affinity_tmp; + /* Used to restore affinity across S3. */ + cpumask_var_t cpu_affinity_saved; /* Bitmask of CPUs which are holding onto this VCPU's state. */ cpumask_var_t vcpu_dirty_cpumask; @@ -666,6 +671,7 @@ void vcpu_force_reschedule(struct vcpu *v); int cpu_disable_scheduler(unsigned int cpu); int vcpu_set_affinity(struct vcpu *v, const cpumask_t *affinity); +void restore_vcpu_affinity(struct domain *d); void vcpu_runstate_get(struct vcpu *v, struct vcpu_runstate_info *runstate); uint64_t get_cpu_idle_time(unsigned int cpu); diff -Nru xen-4.2.1/xen/Makefile xen-4.2.2/xen/Makefile --- xen-4.2.1/xen/Makefile 2013-03-08 15:00:31.000000000 +0100 +++ xen-4.2.2/xen/Makefile 2013-04-23 18:42:55.000000000 +0200 @@ -2,7 +2,7 @@ # All other places this is stored (eg. compile.h) should be autogenerated. export XEN_VERSION = 4 export XEN_SUBVERSION = 2 -export XEN_EXTRAVERSION ?= .1$(XEN_VENDORVERSION) +export XEN_EXTRAVERSION ?= .2$(XEN_VENDORVERSION) export XEN_FULLVERSION = $(XEN_VERSION).$(XEN_SUBVERSION)$(XEN_EXTRAVERSION) -include xen-version