From 7e759c69d79ffa5ea08331b75858ebdecc5d2aa37a768bd04b70cfa6d20ec08c Mon Sep 17 00:00:00 2001 From: Charles Arnold Date: Tue, 30 Nov 2010 23:19:04 +0000 Subject: [PATCH] - bnc#655438 - Using performance counter in domU on Nehalem cpus 22417-vpmu-nehalem.patch - Upstream patches from Jan 22389-amd-iommu-decls.patch 22416-acpi-check-mwait.patch 22431-p2m-remove-bug-check.patch - bnc#656245 - VUL-1: hypervisor: application or kernel in any pv Xen domain can crash Xen x86_64-gdt-ldt-fault-filter.patch - bnc#654050 - Python: a crasher bug in pyexpat - upstream patch needs backporting 22235-lxml-validator.patch - bnc#628729 - Add a small, fast alternative to 'xm list' for enumerating active domains. xen-list is a C program that uses libxenstore and libxenctl directly, bypassing the python toolstack. xen-utils-0.1.tar.bz2 OBS-URL: https://build.opensuse.org/package/show/Virtualization/xen?expand=0&rev=86 --- 22235-lxml-validator.patch | 186 ++++++++++++++++++++++++++ 22389-amd-iommu-decls.patch | 33 +++++ 22416-acpi-check-mwait.patch | 21 +++ 22417-vpmu-nehalem.patch | 123 +++++++++++++++++ 22431-p2m-remove-bug-check.patch | 23 ++++ cpu-pools-python.patch | 4 +- x86_64-gdt-ldt-fault-filter.patch | 13 ++ xen-utils-0.1.tar.bz2 | 3 + xen-warnings.diff | 24 ++++ xen.changes | 33 +++++ xen.spec | 211 ++++++++++++++++-------------- xenpaging.autostart.patch | 18 ++- 12 files changed, 593 insertions(+), 99 deletions(-) create mode 100644 22235-lxml-validator.patch create mode 100644 22389-amd-iommu-decls.patch create mode 100644 22416-acpi-check-mwait.patch create mode 100644 22417-vpmu-nehalem.patch create mode 100644 22431-p2m-remove-bug-check.patch create mode 100644 x86_64-gdt-ldt-fault-filter.patch create mode 100644 xen-utils-0.1.tar.bz2 diff --git a/22235-lxml-validator.patch b/22235-lxml-validator.patch new file mode 100644 index 0000000..ef92c04 --- /dev/null +++ b/22235-lxml-validator.patch @@ -0,0 +1,186 @@ +# HG changeset patch +# User Stephan Peijnik +# Date 1286816093 -3600 +# Node ID b8cc53d22545706b28c7a26dffd24f192a76541a +# Parent fbce8e403470db8c9e580a5efd9d717cd2260c1f +Replace pyxml/xmlproc-based XML validator with lxml based one + +Pyxml/xmlproc is being used in tools/xen/xm/xenapi_create.py but is +unmaintained for several years now. xmlproc is used only for validating +XML documents against a DTD file. + +This patch replaces the pyxml/xmlproc based XML validation with code +based on lxml, which is actively maintained. + +Signed-off-by: Stephan Peijnik +Signed-off-by: Stefano Stabellini +committer: Stefano Stabellini + +Index: xen-4.0.1-testing/README +=================================================================== +--- xen-4.0.1-testing.orig/README ++++ xen-4.0.1-testing/README +@@ -137,12 +137,15 @@ Python Runtime Libraries + Xend (the Xen daemon) has the following runtime dependencies: + + * Python 2.3 or later. +- In many distros, the XML-aspects to the standard library ++ In some distros, the XML-aspects to the standard library + (xml.dom.minidom etc) are broken out into a separate python-xml package. + This is also required. ++ In more recent versions of Debian and Ubuntu the XML-aspects are included ++ in the base python package however (python-xml has been removed ++ from Debian in squeeze and from Ubuntu in intrepid). + + URL: http://www.python.org/ +- Debian: python, python-xml ++ Debian: python + + * For optional SSL support, pyOpenSSL: + URL: http://pyopenssl.sourceforge.net/ +@@ -153,8 +156,9 @@ Xend (the Xen daemon) has the following + Debian: python-pam + + * For optional XenAPI support in XM, PyXML: +- URL: http://pyxml.sourceforge.net +- YUM: PyXML ++ URL: http://codespeak.net/lxml/ ++ Debian: python-lxml ++ YUM: python-lxml + + + Intel(R) Trusted Execution Technology Support +Index: xen-4.0.1-testing/tools/python/xen/xm/xenapi_create.py +=================================================================== +--- xen-4.0.1-testing.orig/tools/python/xen/xm/xenapi_create.py ++++ xen-4.0.1-testing/tools/python/xen/xm/xenapi_create.py +@@ -14,13 +14,15 @@ + # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + #============================================================================ + # Copyright (C) 2007 Tom Wilkie ++# Copyright (C) 2010 ANEXIA Internetdienstleistungs GmbH ++# Author: Stephan Peijnik + #============================================================================ + """Domain creation using new XenAPI + """ + + from xen.xm.main import server, get_default_SR + from xml.dom.minidom import parse, getDOMImplementation +-from xml.parsers.xmlproc import xmlproc, xmlval, xmldtd ++from lxml import etree + from xen.xend import sxp + from xen.xend.XendAPIConstants import XEN_API_ON_NORMAL_EXIT, \ + XEN_API_ON_CRASH_BEHAVIOUR +@@ -35,6 +37,7 @@ import os + from os.path import join + import traceback + import re ++import warnings # Used by lxml-based validator + + def log(_, msg): + #print "> " + msg +@@ -118,12 +121,21 @@ class xenapi_create: + Use this if possible as it gives nice + error messages + """ +- dtd = xmldtd.load_dtd(self.dtd) +- parser = xmlproc.XMLProcessor() +- parser.set_application(xmlval.ValidatingApp(dtd, parser)) +- parser.dtd = dtd +- parser.ent = dtd +- parser.parse_resource(file) ++ try: ++ dtd = etree.DTD(open(self.dtd, 'r')) ++ except IOError: ++ # The old code did neither raise an exception here, nor ++ # did it report an error. For now we issue a warning. ++ # TODO: How to handle a missing dtd file? ++ # --sp ++ warnings.warn('DTD file %s not found.' % (self.dtd), ++ UserWarning) ++ return ++ ++ tree = etree.parse(file) ++ root = tree.getroot() ++ if not dtd.validate(root): ++ self.handle_dtd_errors(dtd) + + def check_dom_against_dtd(self, dom): + """ +@@ -131,49 +143,36 @@ class xenapi_create: + Doesn't give as nice error messages. + (no location info) + """ +- dtd = xmldtd.load_dtd(self.dtd) +- app = xmlval.ValidatingApp(dtd, self) +- app.set_locator(self) +- self.dom2sax(dom, app) +- +- # Get errors back from ValidatingApp +- def report_error(self, number, args=None): +- self.errors = xmlproc.errors.english + try: +- msg = self.errors[number] +- if args != None: +- msg = msg % args +- except KeyError: +- msg = self.errors[4002] % number # Unknown err msg :-) +- print msg ++ dtd = etree.DTD(open(self.dtd, 'r')) ++ except IOError: ++ # The old code did neither raise an exception here, nor ++ # did it report an error. For now we issue a warning. ++ # TODO: How to handle a missing dtd file? ++ # --sp ++ warnings.warn('DTD file %s not found.' % (self.dtd), ++ UserWarning) ++ return ++ ++ # XXX: This may be a bit slow. Maybe we should use another way ++ # of getting an etree root element from the minidom DOM tree... ++ # -- sp ++ root = etree.XML(dom.toxml()) ++ if not dtd.validate(root): ++ self.handle_dtd_errors(dtd) ++ ++ # Do the same that was done in report_error before. This is directly ++ # called by check_dtd and check_dom_against_dtd. ++ # We are using sys.stderr instead of print though (python3k clean). ++ def handle_dtd_errors(self, dtd): ++ # XXX: Do we really want to bail out here? ++ # -- sp ++ for err in dtd.error_log: ++ err_str = 'ERROR: %s\n' % (str(err),) ++ sys.stderr.write(err_str) ++ sys.stderr.flush() + sys.exit(-1) + +- # Here for compatibility with ValidatingApp +- def get_line(self): +- return -1 +- +- def get_column(self): +- return -1 +- +- def dom2sax(self, dom, app): +- """ +- Take a dom tree and tarverse it, +- issuing SAX calls to app. +- """ +- for child in dom.childNodes: +- if child.nodeType == child.TEXT_NODE: +- data = child.nodeValue +- app.handle_data(data, 0, len(data)) +- else: +- app.handle_start_tag( +- child.nodeName, +- self.attrs_to_dict(child.attributes)) +- self.dom2sax(child, app) +- app.handle_end_tag(child.nodeName) +- +- def attrs_to_dict(self, attrs): +- return dict(attrs.items()) +- + # + # Checks which cannot be done with dtd + # diff --git a/22389-amd-iommu-decls.patch b/22389-amd-iommu-decls.patch new file mode 100644 index 0000000..de6e7ab --- /dev/null +++ b/22389-amd-iommu-decls.patch @@ -0,0 +1,33 @@ +# HG changeset patch +# User Keir Fraser +# Date 1289906913 0 +# Node ID 9b2ca938cfe6c0639471e24634bc4a48d889b412 +# Parent 87f248de52304bc96a80dc093250fed0197f37e0 +amd iommu: Fix HV crash with 32bit pv_ops kernel + +Signed-off-by: Wei Wang +Tested-by: Conny Seidel + +--- a/xen/include/asm-x86/hvm/svm/amd-iommu-proto.h ++++ b/xen/include/asm-x86/hvm/svm/amd-iommu-proto.h +@@ -32,9 +32,6 @@ + #define DMA_32BIT_MASK 0x00000000ffffffffULL + #define PAGE_ALIGN(addr) (((addr) + PAGE_SIZE - 1) & PAGE_MASK) + +-extern int amd_iommu_debug; +-extern int amd_iommu_perdev_intremap; +- + #define AMD_IOMMU_DEBUG(fmt, args...) \ + do \ + { \ +--- a/xen/include/xen/iommu.h ++++ b/xen/include/xen/iommu.h +@@ -30,6 +30,8 @@ extern bool_t iommu_enabled; + extern bool_t force_iommu, iommu_verbose; + extern bool_t iommu_workaround_bios_bug, iommu_passthrough; + extern bool_t iommu_snoop, iommu_qinval, iommu_intremap; ++extern bool_t amd_iommu_debug; ++extern bool_t amd_iommu_perdev_intremap; + + #define domain_hvm_iommu(d) (&d->arch.hvm_domain.hvm_iommu) + diff --git a/22416-acpi-check-mwait.patch b/22416-acpi-check-mwait.patch new file mode 100644 index 0000000..d28d6e7 --- /dev/null +++ b/22416-acpi-check-mwait.patch @@ -0,0 +1,21 @@ +# HG changeset patch +# User Keir Fraser +# Date 1290453180 0 +# Node ID 0cc4ed1ce1f34ce442ed4da106e555931c895395 +# Parent 899131a8f9d2b99acc4bbe18593952d30446e71b +x86: Check for MWAIT in CPUID before using it in ACPI idle code. + +Signed-off-by: Keir Fraser + +--- a/xen/arch/x86/acpi/cpu_idle.c ++++ b/xen/arch/x86/acpi/cpu_idle.c +@@ -717,7 +717,8 @@ static void set_cx( + { + case ACPI_ADR_SPACE_FIXED_HARDWARE: + if ( xen_cx->reg.bit_width == VENDOR_INTEL && +- xen_cx->reg.bit_offset == NATIVE_CSTATE_BEYOND_HALT ) ++ xen_cx->reg.bit_offset == NATIVE_CSTATE_BEYOND_HALT && ++ boot_cpu_has(X86_FEATURE_MWAIT) ) + cx->entry_method = ACPI_CSTATE_EM_FFH; + else + cx->entry_method = ACPI_CSTATE_EM_HALT; diff --git a/22417-vpmu-nehalem.patch b/22417-vpmu-nehalem.patch new file mode 100644 index 0000000..bfe2de2 --- /dev/null +++ b/22417-vpmu-nehalem.patch @@ -0,0 +1,123 @@ +References: bnc#655438 + +# HG changeset patch +# User Keir Fraser +# Date 1290453394 0 +# Node ID c0c1f5f0745e25af6f8b4a1006637d98a8d63581 +# Parent 0cc4ed1ce1f34ce442ed4da106e555931c895395 +x86 hvm: Fix VPMU issue on Nehalem cpus + +Fix an issue on Nehalem cpus where performance counter overflows may +lead to endless interrupt loops on this cpu. + +Signed-off-by: Dietmar Hahn + +# HG changeset patch +# User Keir Fraser +# Date 1290173202 0 +# Node ID b7ed352fa6100104374000cdbd845bbfc6478f08 +# Parent 437576a0f2026ded6dcc4b11558714dad1d1d042 +VPMU: Add the Intel CPU X7542 to the list of supported prcocessors + +Signed-off-by: Dietmar Hahn + +--- a/xen/arch/x86/hvm/vmx/vpmu.c ++++ b/xen/arch/x86/hvm/vmx/vpmu.c +@@ -96,6 +96,7 @@ void vpmu_initialise(struct vcpu *v) + case 23: + case 26: + case 29: ++ case 46: + vpmu->arch_vpmu_ops = &core2_vpmu_ops; + break; + } +--- a/xen/arch/x86/hvm/vmx/vpmu_core2.c ++++ b/xen/arch/x86/hvm/vmx/vpmu_core2.c +@@ -35,6 +35,68 @@ + #include + #include + ++/* ++ * QUIRK to workaround an issue on Nehalem processors currently seen ++ * on family 6 cpus E5520 (model 26) and X7542 (model 46). ++ * The issue leads to endless PMC interrupt loops on the processor. ++ * If the interrupt handler is running and a pmc reaches the value 0, this ++ * value remains forever and it triggers immediately a new interrupt after ++ * finishing the handler. ++ * A workaround is to read all flagged counters and if the value is 0 write ++ * 1 (or another value != 0) into it. ++ * There exist no errata and the real cause of this behaviour is unknown. ++ */ ++bool_t __read_mostly is_pmc_quirk; ++ ++static void check_pmc_quirk(void) ++{ ++ u8 family = current_cpu_data.x86; ++ u8 cpu_model = current_cpu_data.x86_model; ++ is_pmc_quirk = 0; ++ if ( family == 6 ) ++ { ++ if ( cpu_model == 46 || cpu_model == 26 ) ++ is_pmc_quirk = 1; ++ } ++} ++ ++static int core2_get_pmc_count(void); ++static void handle_pmc_quirk(u64 msr_content) ++{ ++ int num_gen_pmc = core2_get_pmc_count(); ++ int num_fix_pmc = 3; ++ int i; ++ u64 val; ++ ++ if ( !is_pmc_quirk ) ++ return; ++ ++ val = msr_content; ++ for ( i = 0; i < num_gen_pmc; i++ ) ++ { ++ if ( val & 0x1 ) ++ { ++ u64 cnt; ++ rdmsrl(MSR_P6_PERFCTR0 + i, cnt); ++ if ( cnt == 0 ) ++ wrmsrl(MSR_P6_PERFCTR0 + i, 1); ++ } ++ val >>= 1; ++ } ++ val = msr_content >> 32; ++ for ( i = 0; i < num_fix_pmc; i++ ) ++ { ++ if ( val & 0x1 ) ++ { ++ u64 cnt; ++ rdmsrl(MSR_CORE_PERF_FIXED_CTR0 + i, cnt); ++ if ( cnt == 0 ) ++ wrmsrl(MSR_CORE_PERF_FIXED_CTR0 + i, 1); ++ } ++ val >>= 1; ++ } ++} ++ + u32 core2_counters_msr[] = { + MSR_CORE_PERF_FIXED_CTR0, + MSR_CORE_PERF_FIXED_CTR1, +@@ -497,6 +559,10 @@ static int core2_vpmu_do_interrupt(struc + rdmsrl(MSR_CORE_PERF_GLOBAL_STATUS, msr_content); + if ( !msr_content ) + return 0; ++ ++ if ( is_pmc_quirk ) ++ handle_pmc_quirk(msr_content); ++ + core2_vpmu_cxt->global_ovf_status |= msr_content; + msr_content = 0xC000000700000000 | ((1 << core2_get_pmc_count()) - 1); + wrmsrl(MSR_CORE_PERF_GLOBAL_OVF_CTRL, msr_content); +@@ -518,6 +584,7 @@ static int core2_vpmu_do_interrupt(struc + + static void core2_vpmu_initialise(struct vcpu *v) + { ++ check_pmc_quirk(); + } + + static void core2_vpmu_destroy(struct vcpu *v) diff --git a/22431-p2m-remove-bug-check.patch b/22431-p2m-remove-bug-check.patch new file mode 100644 index 0000000..d7ba909 --- /dev/null +++ b/22431-p2m-remove-bug-check.patch @@ -0,0 +1,23 @@ +# HG changeset patch +# User Tim Deegan +# Date 1290594003 0 +# Node ID 79b71c77907b80772ee8cba0c5bbf8e444e61226 +# Parent e5c4e925e1bd15baeadc0817dcceb5fff54b8a74 +x86/mm: remove incorrect BUG_ON. +This BUG_ON tests a property of an effectively random PFN in the guest, +and is explicitly _not_ seeing the MFN that's known to be owned. + +Signed-off-by: Tim Deegan + +--- a/xen/arch/x86/mm/p2m.c ++++ b/xen/arch/x86/mm/p2m.c +@@ -2186,9 +2186,6 @@ guest_physmap_add_entry(struct domain *d + P2M_DEBUG("aliased! mfn=%#lx, old gfn=%#lx, new gfn=%#lx\n", + mfn + i, ogfn, gfn + i); + omfn = gfn_to_mfn_query(d, ogfn, &ot); +- /* If we get here, we know the local domain owns the page, +- so it can't have been grant mapped in. */ +- BUG_ON( p2m_is_grant(ot) ); + if ( p2m_is_ram(ot) ) + { + ASSERT(mfn_valid(omfn)); diff --git a/cpu-pools-python.patch b/cpu-pools-python.patch index 21472db..6d48773 100644 --- a/cpu-pools-python.patch +++ b/cpu-pools-python.patch @@ -2511,7 +2511,7 @@ Index: xen-4.0.1-testing/tools/python/xen/xm/xenapi_create.py =================================================================== --- xen-4.0.1-testing.orig/tools/python/xen/xm/xenapi_create.py +++ xen-4.0.1-testing/tools/python/xen/xm/xenapi_create.py -@@ -310,6 +310,8 @@ class xenapi_create: +@@ -309,6 +309,8 @@ class xenapi_create: get_child_nodes_as_dict(vm, "platform", "key", "value"), "other_config": get_child_nodes_as_dict(vm, "other_config", "key", "value"), @@ -2520,7 +2520,7 @@ Index: xen-4.0.1-testing/tools/python/xen/xm/xenapi_create.py "PV_bootloader": "", "PV_kernel": -@@ -696,6 +698,8 @@ class sxp2xml: +@@ -695,6 +697,8 @@ class sxp2xml: = str(get_child_by_name(config, "s3_integrity", 0)) vm.attributes["superpages"] \ = str(get_child_by_name(config, "superpages", 0)) diff --git a/x86_64-gdt-ldt-fault-filter.patch b/x86_64-gdt-ldt-fault-filter.patch new file mode 100644 index 0000000..4da0f12 --- /dev/null +++ b/x86_64-gdt-ldt-fault-filter.patch @@ -0,0 +1,13 @@ +References: bnc#656245 + +--- a/xen/arch/x86/traps.c ++++ b/xen/arch/x86/traps.c +@@ -1223,7 +1223,7 @@ static int fixup_page_fault(unsigned lon + + if ( unlikely(IN_HYPERVISOR_RANGE(addr)) ) + { +- if ( !(regs->error_code & PFEC_reserved_bit) && ++ if ( !(regs->error_code & (PFEC_user_mode | PFEC_reserved_bit)) && + (addr >= GDT_LDT_VIRT_START) && (addr < GDT_LDT_VIRT_END) ) + return handle_gdt_ldt_mapping_fault( + addr - GDT_LDT_VIRT_START, regs); diff --git a/xen-utils-0.1.tar.bz2 b/xen-utils-0.1.tar.bz2 new file mode 100644 index 0000000..64c9b49 --- /dev/null +++ b/xen-utils-0.1.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef15c1d850149d7b1038e2e1e46e4f18ed2127700a38d6f28fa6fdaa95224563 +size 6267 diff --git a/xen-warnings.diff b/xen-warnings.diff index efc476a..5b60152 100644 --- a/xen-warnings.diff +++ b/xen-warnings.diff @@ -174,3 +174,27 @@ Index: xen-4.0.1-testing/tools/blktap2/drivers/block-remus.c RPRINTF("opening %s\n", name); +Index: xen-4.0.1-testing/tools/blktap/lib/blktaplib.h +=================================================================== +--- xen-4.0.1-testing.orig/tools/blktap/lib/blktaplib.h ++++ xen-4.0.1-testing/tools/blktap/lib/blktaplib.h +@@ -196,6 +196,7 @@ typedef struct msg_pid { + } msg_pid_t; + + #define READ 0 ++#undef WRITE + #define WRITE 1 + + /*Control Messages between manager and tapdev*/ +Index: xen-4.0.1-testing/tools/blktap2/include/blktaplib.h +=================================================================== +--- xen-4.0.1-testing.orig/tools/blktap2/include/blktaplib.h ++++ xen-4.0.1-testing/tools/blktap2/include/blktaplib.h +@@ -198,6 +198,7 @@ typedef struct msg_lock { + } msg_lock_t; + + #define READ 0 ++#undef WRITE + #define WRITE 1 + + /*Control Messages between manager and tapdev*/ diff --git a/xen.changes b/xen.changes index df6cb1f..a6f8e12 100644 --- a/xen.changes +++ b/xen.changes @@ -1,3 +1,36 @@ +------------------------------------------------------------------- +Tue Nov 30 13:44:35 MST 2010 - carnold@novell.com + +- bnc#655438 - Using performance counter in domU on Nehalem cpus + 22417-vpmu-nehalem.patch +- Upstream patches from Jan + 22389-amd-iommu-decls.patch + 22416-acpi-check-mwait.patch + 22431-p2m-remove-bug-check.patch + +------------------------------------------------------------------- +Tue Nov 30 06:46:28 MST 2010 - carnold@novell.com + +- bnc#656245 - VUL-1: hypervisor: application or kernel in any pv + Xen domain can crash Xen + x86_64-gdt-ldt-fault-filter.patch + +------------------------------------------------------------------- +Mon Nov 29 10:06:49 MST 2010 - carnold@novell.com + +- bnc#654050 - Python: a crasher bug in pyexpat - upstream patch + needs backporting + 22235-lxml-validator.patch + +------------------------------------------------------------------- +Tue Nov 23 15:46:09 MST 2010 - jfehlig@novell.com + +- bnc#628729 - Add a small, fast alternative to 'xm list' for + enumerating active domains. xen-list is a C program that uses + libxenstore and libxenctl directly, bypassing the python + toolstack. + xen-utils-0.1.tar.bz2 + ------------------------------------------------------------------- Fri Nov 19 11:48:43 CST 2010 - lidongyang@novell.com diff --git a/xen.spec b/xen.spec index 215448b..3ddaae8 100644 --- a/xen.spec +++ b/xen.spec @@ -25,35 +25,35 @@ ExclusiveArch: %ix86 x86_64 %define changeset 21326 %define xen_build_dir xen-4.0.1-testing %define with_kmp 1 -BuildRequires: LibVNCServer-devel -BuildRequires: SDL-devel -BuildRequires: automake -BuildRequires: bin86 -BuildRequires: curl-devel -BuildRequires: dev86 -BuildRequires: graphviz -BuildRequires: latex2html -BuildRequires: libjpeg-devel -BuildRequires: libxml2-devel -BuildRequires: ncurses-devel -BuildRequires: openssl -BuildRequires: openssl-devel -BuildRequires: pciutils-devel -BuildRequires: python-devel -BuildRequires: texinfo -BuildRequires: transfig +BuildRequires: LibVNCServer-devel +BuildRequires: SDL-devel +BuildRequires: automake +BuildRequires: bin86 +BuildRequires: curl-devel +BuildRequires: dev86 +BuildRequires: graphviz +BuildRequires: latex2html +BuildRequires: libjpeg-devel +BuildRequires: libxml2-devel +BuildRequires: ncurses-devel +BuildRequires: openssl +BuildRequires: openssl-devel +BuildRequires: pciutils-devel +BuildRequires: python-devel +BuildRequires: texinfo +BuildRequires: transfig %if %suse_version <= 1110 -BuildRequires: pmtools +BuildRequires: pmtools %else -BuildRequires: acpica +BuildRequires: acpica %endif %if %suse_version >= 1030 -BuildRequires: texlive -BuildRequires: texlive-latex +BuildRequires: texlive +BuildRequires: texlive-latex %else -BuildRequires: te_ams -BuildRequires: te_latex -BuildRequires: tetex +BuildRequires: te_ams +BuildRequires: te_latex +BuildRequires: tetex %endif %ifarch x86_64 BuildRequires: glibc-32bit glibc-devel-32bit @@ -78,28 +78,29 @@ PreReq: %insserv_prereq %fillup_prereq Summary: Xen Virtualization: Hypervisor (aka VMM aka Microkernel) Source0: xen-4.0.1-testing-src.tar.bz2 Source1: stubdom.tar.bz2 -Source2: README.SuSE -Source3: boot.xen -Source4: boot.local.xenU -Source5: init.xend -Source6: init.xendomains -Source7: logrotate.conf -Source8: domUloader.py -Source9: xmexample.domUloader -Source10: xmexample.disks -Source11: block-nbd -Source12: block-iscsi -Source13: block-npiv-common.sh -Source14: block-npiv -Source15: block-npiv-vport -Source16: xmclone.sh -Source17: xend-relocation.sh -Source18: init.xen_loop +Source2: xen-utils-0.1.tar.bz2 +Source3: README.SuSE +Source4: boot.xen +Source5: boot.local.xenU +Source6: init.xend +Source7: init.xendomains +Source8: logrotate.conf +Source9: domUloader.py +Source10: xmexample.domUloader +Source11: xmexample.disks +Source12: block-nbd +Source13: block-iscsi +Source14: block-npiv-common.sh +Source15: block-npiv +Source16: block-npiv-vport +Source17: xmclone.sh +Source18: xend-relocation.sh +Source19: init.xen_loop %if %{?with_kmp}0 -Source19: xen_pvdrivers.conf -Source20: kmp_filelist +Source20: xen_pvdrivers.conf +Source21: kmp_filelist %endif -Source21: block-dmmd +Source22: block-dmmd # Xen API remote authentication sources Source23: etc_pam.d_xen-api Source24: xenapiusers @@ -147,10 +148,15 @@ Patch37: 22222-x86-timer-extint.patch Patch38: 22223-vtd-workarounds.patch Patch39: 22231-x86-pv-ucode-msr-intel.patch Patch40: 22232-x86-64-lahf-lm-bios-workaround.patch -Patch41: 22280-kexec.patch -Patch42: 22337-vtd-scan-single-func.patch -Patch43: 22348-vtd-check-secbus-devfn.patch -Patch44: 22369-xend-pci-passthru-fix.patch +Patch41: 22235-lxml-validator.patch +Patch42: 22280-kexec.patch +Patch43: 22337-vtd-scan-single-func.patch +Patch44: 22348-vtd-check-secbus-devfn.patch +Patch45: 22369-xend-pci-passthru-fix.patch +Patch46: 22389-amd-iommu-decls.patch +Patch47: 22416-acpi-check-mwait.patch +Patch48: 22417-vpmu-nehalem.patch +Patch49: 22431-p2m-remove-bug-check.patch # Our patches Patch300: xen-config.diff Patch301: xend-config.diff @@ -250,18 +256,19 @@ Patch440: bdrv_default_rwflag.patch Patch450: xend-domain-lock.patch # Hypervisor and PV driver Patches Patch500: 32on64-extra-mem.patch -Patch501: x86-ioapic-ack-default.patch -Patch502: x86-cpufreq-report.patch -Patch503: dump-exec-state.patch -Patch504: dom-print.patch -Patch505: pvdrv-import-shared-info.patch -Patch506: x86-show-page-walk-early.patch -Patch507: x86-extra-trap-info.patch -Patch508: pvdrv_emulation_control.patch -Patch509: blktap-pv-cdrom.patch -Patch510: pv-driver-build.patch -Patch511: supported_module.diff -Patch512: magic_ioport_compat.patch +Patch501: x86_64-gdt-ldt-fault-filter.patch +Patch502: x86-ioapic-ack-default.patch +Patch503: x86-cpufreq-report.patch +Patch504: dump-exec-state.patch +Patch505: dom-print.patch +Patch506: pvdrv-import-shared-info.patch +Patch507: x86-show-page-walk-early.patch +Patch508: x86-extra-trap-info.patch +Patch509: pvdrv_emulation_control.patch +Patch510: blktap-pv-cdrom.patch +Patch511: pv-driver-build.patch +Patch512: supported_module.diff +Patch513: magic_ioport_compat.patch Patch650: disable_emulated_device.diff Patch651: ioemu-disable-scsi.patch # novell_shim patches @@ -273,32 +280,32 @@ Patch704: hv_apic.patch # Build patch Patch999: tmp_build.patch # FATE 310510 -Patch10001: xenpaging.tools_xenpaging_cleanup.patch -Patch10002: xenpaging.pageout_policy.patch -Patch10003: xenpaging.xs_daemon_close.patch -Patch10004: xenpaging.get_paged_frame.patch -Patch10005: xenpaging.makefile.patch -Patch10010: xenpaging.policy_linear.patch -Patch10011: xenpaging.pagefile.patch -Patch10012: xenpaging.xenpaging_init.patch -Patch10013: xenpaging.mem_paging_tool_qemu_flush_cache.patch -Patch10014: xenpaging.machine_to_phys_mapping.patch -Patch10015: xenpaging.populate_only_if_paged.patch -Patch10017: xenpaging.autostart.patch -Patch10018: xenpaging.signal_handling.patch -Patch10019: xenpaging.MRU_SIZE.patch -Patch10020: xenpaging.guest_remove_page.patch -Patch10021: xenpaging.mem_event_check_ring-free_requests.patch -Patch10022: xenpaging.blacklist.patch -Patch10023: xenpaging.autostart_delay.patch -Patch10024: xenpaging.page_already_populated.patch -Patch10025: xenpaging.notify_policy_only_once.patch -Patch10026: xenpaging.num_pages_equal_max_pages.patch -Patch10027: xenpaging.p2m_mem_paging_populate_if_p2m_ram_paged.patch -Patch10028: xenpaging.HVMCOPY_gfn_paged_out.patch -Patch10029: xenpaging.optimize_p2m_mem_paging_populate.patch -Patch10030: xenpaging.enabled.patch -Patch10040: xenpaging.doc.patch +Patch10001: xenpaging.tools_xenpaging_cleanup.patch +Patch10002: xenpaging.pageout_policy.patch +Patch10003: xenpaging.xs_daemon_close.patch +Patch10004: xenpaging.get_paged_frame.patch +Patch10005: xenpaging.makefile.patch +Patch10010: xenpaging.policy_linear.patch +Patch10011: xenpaging.pagefile.patch +Patch10012: xenpaging.xenpaging_init.patch +Patch10013: xenpaging.mem_paging_tool_qemu_flush_cache.patch +Patch10014: xenpaging.machine_to_phys_mapping.patch +Patch10015: xenpaging.populate_only_if_paged.patch +Patch10017: xenpaging.autostart.patch +Patch10018: xenpaging.signal_handling.patch +Patch10019: xenpaging.MRU_SIZE.patch +Patch10020: xenpaging.guest_remove_page.patch +Patch10021: xenpaging.mem_event_check_ring-free_requests.patch +Patch10022: xenpaging.blacklist.patch +Patch10023: xenpaging.autostart_delay.patch +Patch10024: xenpaging.page_already_populated.patch +Patch10025: xenpaging.notify_policy_only_once.patch +Patch10026: xenpaging.num_pages_equal_max_pages.patch +Patch10027: xenpaging.p2m_mem_paging_populate_if_p2m_ram_paged.patch +Patch10028: xenpaging.HVMCOPY_gfn_paged_out.patch +Patch10029: xenpaging.optimize_p2m_mem_paging_populate.patch +Patch10030: xenpaging.enabled.patch +Patch10040: xenpaging.doc.patch Url: http://www.cl.cam.ac.uk/Research/SRG/netos/xen/ BuildRoot: %{_tmppath}/%{name}-%{version}-build #%define pysite %(python -c "import distutils.sysconfig; print distutils.sysconfig.get_python_lib()") @@ -416,7 +423,7 @@ License: GPLv2+ Summary: Xen Virtualization: Control tools for domain 0 Group: System/Kernel Requires: xen-libs = %{version} -Requires: bridge-utils multipath-tools python python-curses python-openssl python-pam python-xml pyxml +Requires: bridge-utils multipath-tools python python-curses python-openssl python-pam python-xml python-lxml #Requires: ipcalc # subpackage existed in 10.3 Provides: xen-tools-ioemu = 3.2 @@ -631,6 +638,7 @@ Authors: %prep %setup -q -n %xen_build_dir -a 1 +tar xfj %{SOURCE2} -C $RPM_BUILD_DIR/%{xen_build_dir}/tools %patch0 -p1 %patch1 -p1 %patch2 -p1 @@ -676,6 +684,11 @@ Authors: %patch42 -p1 %patch43 -p1 %patch44 -p1 +%patch45 -p1 +%patch46 -p1 +%patch47 -p1 +%patch48 -p1 +%patch49 -p1 %patch300 -p1 %patch301 -p1 %patch302 -p1 @@ -780,6 +793,7 @@ Authors: %patch510 -p1 %patch511 -p1 %patch512 -p1 +%patch513 -p1 %patch650 -p1 %patch651 -p1 %patch700 -p1 @@ -815,6 +829,7 @@ Authors: %patch10030 -p1 %patch10040 -p1 + %build XEN_EXTRAVERSION=%version-%release XEN_EXTRAVERSION=${XEN_EXTRAVERSION#%{xvers}} @@ -845,6 +860,7 @@ for flavor in %flavors_to_build; do cd ../.. done %endif +make -C tools/xen-utils-0.1 XEN_INTREE_BUILD=yes %install test ! -z "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != "/" && rm -rf $RPM_BUILD_ROOT @@ -899,7 +915,7 @@ for flavor in %flavors_to_build; do M=$PWD/obj/$flavor done mkdir -p $RPM_BUILD_ROOT/etc/modprobe.d -install -m644 %SOURCE19 $RPM_BUILD_ROOT/etc/modprobe.d/xen_pvdrivers.conf +install -m644 %SOURCE20 $RPM_BUILD_ROOT/etc/modprobe.d/xen_pvdrivers.conf %endif # stubdom make stubdom @@ -916,7 +932,7 @@ ln -s /usr/lib/xen/bin/stubdompath.sh $RPM_BUILD_ROOT/usr/lib64/xen/bin/stubdomp make -C docs install \ DESTDIR=$RPM_BUILD_ROOT MANDIR=%{_mandir} \ DOCDIR=%{_defaultdocdir}/xen -for name in COPYING %SOURCE2 %SOURCE3 %SOURCE4; do +for name in COPYING %SOURCE3 %SOURCE4 %SOURCE5; do install -m 644 $name $RPM_BUILD_ROOT/%{_defaultdocdir}/xen/ done mkdir -p $RPM_BUILD_ROOT/%{_defaultdocdir}/xen/misc @@ -925,21 +941,21 @@ for name in vtpm.txt crashdb.txt sedf_scheduler_mini-HOWTO.txt xenpaging.txt; do done # init scripts mkdir -p $RPM_BUILD_ROOT/etc/init.d -install %SOURCE5 $RPM_BUILD_ROOT/etc/init.d/xend +install %SOURCE6 $RPM_BUILD_ROOT/etc/init.d/xend ln -s /etc/init.d/xend $RPM_BUILD_ROOT/usr/sbin/rcxend -install %SOURCE6 $RPM_BUILD_ROOT/etc/init.d/xendomains +install %SOURCE7 $RPM_BUILD_ROOT/etc/init.d/xendomains ln -s /etc/init.d/xendomains $RPM_BUILD_ROOT/usr/sbin/rcxendomains mkdir -p $RPM_BUILD_ROOT/etc/modprobe.d -install -m644 %SOURCE18 $RPM_BUILD_ROOT/etc/modprobe.d/xen_loop.conf +install -m644 %SOURCE19 $RPM_BUILD_ROOT/etc/modprobe.d/xen_loop.conf # example config mkdir -p $RPM_BUILD_ROOT/etc/xen/{vm,examples,scripts} mv $RPM_BUILD_ROOT/etc/xen/xmexample* $RPM_BUILD_ROOT/etc/xen/examples rm -f $RPM_BUILD_ROOT/etc/xen/examples/*nbd -install -m644 %SOURCE9 %SOURCE10 $RPM_BUILD_ROOT/etc/xen/examples/ +install -m644 %SOURCE10 %SOURCE11 $RPM_BUILD_ROOT/etc/xen/examples/ install -m644 tools/xentrace/formats $RPM_BUILD_ROOT/etc/xen/examples/xentrace_formats.txt # scripts rm -f $RPM_BUILD_ROOT/etc/xen/scripts/block-*nbd -install -m755 %SOURCE11 %SOURCE12 %SOURCE13 %SOURCE14 %SOURCE15 %SOURCE16 %SOURCE17 %SOURCE21 $RPM_BUILD_ROOT/etc/xen/scripts/ +install -m755 %SOURCE12 %SOURCE13 %SOURCE14 %SOURCE15 %SOURCE16 %SOURCE17 %SOURCE18 %SOURCE22 $RPM_BUILD_ROOT/etc/xen/scripts/ ln -s /etc/xen/scripts/vm-monitor $RPM_BUILD_ROOT/etc/xen/scripts/set-lock # Xen API remote authentication files install -d $RPM_BUILD_ROOT/etc/pam.d @@ -953,7 +969,7 @@ install -m755 %SOURCE25 $RPM_BUILD_ROOT/etc/sysconfig/network/scripts ln -s /etc/sysconfig/network/scripts/xen-updown.sh $RPM_BUILD_ROOT/etc/sysconfig/network/if-up.d/xen ln -s /etc/sysconfig/network/scripts/xen-updown.sh $RPM_BUILD_ROOT/etc/sysconfig/network/if-down.d/xen # logrotate -install -m644 -D %SOURCE7 $RPM_BUILD_ROOT/etc/logrotate.d/xen +install -m644 -D %SOURCE8 $RPM_BUILD_ROOT/etc/logrotate.d/xen # directories mkdir -p $RPM_BUILD_ROOT/var/lib/xenstored mkdir -p $RPM_BUILD_ROOT/var/lib/xen/images @@ -967,12 +983,14 @@ mkdir -p $RPM_BUILD_ROOT/var/lib/xen/xenpaging mkdir -p $RPM_BUILD_ROOT/var/log/xen ln -s /var/lib/xen/images $RPM_BUILD_ROOT/etc/xen/images # Bootloader -install -m755 %SOURCE8 $RPM_BUILD_ROOT/usr/lib/xen/boot/ +install -m755 %SOURCE9 $RPM_BUILD_ROOT/usr/lib/xen/boot/ # udev support mkdir -p $RPM_BUILD_ROOT/etc/udev/rules.d mv $RPM_BUILD_ROOT/etc/udev/rules.d/xen-backend.rules $RPM_BUILD_ROOT/etc/udev/rules.d/40-xen.rules mv $RPM_BUILD_ROOT/etc/udev/rules.d/xend.rules $RPM_BUILD_ROOT/etc/udev/rules.d/40-xend.rules #%find_lang xen-vm # po files are misnamed upstream +# xen utils +make -C tools/xen-utils-0.1 install DESTDIR=$RPM_BUILD_ROOT XEN_INTREE_BUILD=yes # Clean up unpackaged files rm -rf $RPM_BUILD_ROOT/%{_datadir}/doc/xen/qemu/ rm -f $RPM_BUILD_ROOT/%{_datadir}/doc/qemu/qemu-* @@ -1055,6 +1073,7 @@ rm -rf $RPM_BUILD_ROOT/%{_libdir}/debug /usr/sbin/td-util /usr/sbin/vhd-update /usr/sbin/vhd-util +/usr/sbin/xen-list /usr/sbin/gdbsx /usr/sbin/xl %dir %{_libdir}/xen diff --git a/xenpaging.autostart.patch b/xenpaging.autostart.patch index ada2e71..662dfd7 100644 --- a/xenpaging.autostart.patch +++ b/xenpaging.autostart.patch @@ -23,6 +23,8 @@ v2: tools/python/xen/xm/xenapi_create.py | 1 8 files changed, 111 insertions(+) +Index: xen-4.0.1-testing/tools/examples/xmexample.hvm +=================================================================== --- xen-4.0.1-testing.orig/tools/examples/xmexample.hvm +++ xen-4.0.1-testing/tools/examples/xmexample.hvm @@ -127,6 +127,9 @@ disk = [ 'file:/var/lib/xen/images/disk. @@ -35,6 +37,8 @@ v2: #----------------------------------------------------------------------------- # boot on floppy (a), hard disk (c), Network (n) or CD-ROM (d) # default: hard disk, cd-rom, floppy +Index: xen-4.0.1-testing/tools/python/README.XendConfig +=================================================================== --- xen-4.0.1-testing.orig/tools/python/README.XendConfig +++ xen-4.0.1-testing/tools/python/README.XendConfig @@ -120,6 +120,7 @@ otherConfig @@ -45,6 +49,8 @@ v2: image.hvm.display image.hvm.xauthority image.hvm.vncconsole +Index: xen-4.0.1-testing/tools/python/README.sxpcfg +=================================================================== --- xen-4.0.1-testing.orig/tools/python/README.sxpcfg +++ xen-4.0.1-testing/tools/python/README.sxpcfg @@ -51,6 +51,7 @@ image @@ -55,6 +61,8 @@ v2: - display - xauthority - vncconsole +Index: xen-4.0.1-testing/tools/python/xen/xend/XendConfig.py +=================================================================== --- xen-4.0.1-testing.orig/tools/python/xen/xend/XendConfig.py +++ xen-4.0.1-testing/tools/python/xen/xend/XendConfig.py @@ -145,6 +145,7 @@ XENAPI_PLATFORM_CFG_TYPES = { @@ -74,6 +82,8 @@ v2: if 'timer_mode' not in self['platform']: self['platform']['timer_mode'] = 1 if 'viridian' not in self['platform']: +Index: xen-4.0.1-testing/tools/python/xen/xend/XendDomainInfo.py +=================================================================== --- xen-4.0.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py +++ xen-4.0.1-testing/tools/python/xen/xend/XendDomainInfo.py @@ -2442,6 +2442,7 @@ class XendDomainInfo: @@ -96,6 +106,8 @@ v2: else: log.debug("No device model") +Index: xen-4.0.1-testing/tools/python/xen/xend/image.py +=================================================================== --- xen-4.0.1-testing.orig/tools/python/xen/xend/image.py +++ xen-4.0.1-testing/tools/python/xen/xend/image.py @@ -122,12 +122,14 @@ class ImageHandler: @@ -209,6 +221,8 @@ v2: def createDeviceModel(self, restore = False): if self.device_model is None: return +Index: xen-4.0.1-testing/tools/python/xen/xm/create.py +=================================================================== --- xen-4.0.1-testing.orig/tools/python/xen/xm/create.py +++ xen-4.0.1-testing/tools/python/xen/xm/create.py @@ -495,6 +495,10 @@ gopts.var('nfs_root', val="PATH", @@ -230,9 +244,11 @@ v2: 'device_model', 'display', 'fda', 'fdb', 'gfx_passthru', 'guest_os_type', +Index: xen-4.0.1-testing/tools/python/xen/xm/xenapi_create.py +=================================================================== --- xen-4.0.1-testing.orig/tools/python/xen/xm/xenapi_create.py +++ xen-4.0.1-testing/tools/python/xen/xm/xenapi_create.py -@@ -1086,6 +1086,7 @@ class sxp2xml: +@@ -1085,6 +1085,7 @@ class sxp2xml: 'acpi', 'apic', 'boot',