OBS User unknown 2008-11-25 14:57:48 +00:00 committed by Git OBS Bridge
parent 1c73c9b461
commit 793208499f
7 changed files with 295 additions and 22 deletions

150
18764-cpu-affinity.patch Normal file
View File

@ -0,0 +1,150 @@
# HG changeset patch
# User Keir Fraser <keir.fraser@citrix.com>
# Date 1226401587 0
# Node ID 76e90ac5067ef71f60b68ea0515f7f0466be5dca
# Parent beade55d67fc2c81adaaa552804e0b66dc25becb
xend: Restore CPU affinity on domain resume.
Move affinity-setting logic into its own function and call from
relevant places.
From: Jiri Denemark <jdenemar@redhat.com>
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
Index: xen-3.3.1-testing/tools/python/xen/xend/XendDomainInfo.py
===================================================================
--- xen-3.3.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py
+++ xen-3.3.1-testing/tools/python/xen/xend/XendDomainInfo.py
@@ -476,6 +476,7 @@ class XendDomainInfo:
if state in (DOM_STATE_SUSPENDED, DOM_STATE_HALTED):
try:
self._constructDomain()
+ self._setCPUAffinity()
self._storeVmDetails()
self._createChannels()
self._createDevices()
@@ -2123,6 +2124,64 @@ class XendDomainInfo:
raise XendError(str(exn))
+ def _setCPUAffinity(self):
+ """ Repin domain vcpus if a restricted cpus list is provided
+ """
+
+ def has_cpus():
+ if self.info['cpus'] is not None:
+ for c in self.info['cpus']:
+ if c:
+ return True
+ return False
+
+ if has_cpus():
+ for v in range(0, self.info['VCPUs_max']):
+ if self.info['cpus'][v]:
+ xc.vcpu_setaffinity(self.domid, v, self.info['cpus'][v])
+ else:
+ def find_relaxed_node(node_list):
+ import sys
+ nr_nodes = info['nr_nodes']
+ if node_list is None:
+ node_list = range(0, nr_nodes)
+ nodeload = [0]
+ nodeload = nodeload * nr_nodes
+ from xen.xend import XendDomain
+ doms = XendDomain.instance().list('all')
+ for dom in filter (lambda d: d.domid != self.domid, doms):
+ cpuinfo = dom.getVCPUInfo()
+ for vcpu in sxp.children(cpuinfo, 'vcpu'):
+ if sxp.child_value(vcpu, 'online') == 0: continue
+ cpumap = list(sxp.child_value(vcpu,'cpumap'))
+ for i in range(0, nr_nodes):
+ node_cpumask = info['node_to_cpu'][i]
+ for j in node_cpumask:
+ if j in cpumap:
+ nodeload[i] += 1
+ break
+ for i in range(0, nr_nodes):
+ if len(info['node_to_cpu'][i]) > 0 and i in node_list:
+ nodeload[i] = int(nodeload[i] * 16 / len(info['node_to_cpu'][i]))
+ else:
+ nodeload[i] = sys.maxint
+ index = nodeload.index( min(nodeload) )
+ return index
+
+ info = xc.physinfo()
+ if info['nr_nodes'] > 1:
+ node_memory_list = info['node_to_memory']
+ needmem = self.image.getRequiredAvailableMemory(self.info['memory_dynamic_max']) / 1024
+ candidate_node_list = []
+ for i in range(0, info['nr_nodes']):
+ if node_memory_list[i] >= needmem and len(info['node_to_cpu'][i]) > 0:
+ candidate_node_list.append(i)
+ index = find_relaxed_node(candidate_node_list)
+ cpumask = info['node_to_cpu'][index]
+ for v in range(0, self.info['VCPUs_max']):
+ xc.vcpu_setaffinity(self.domid, v, cpumask)
+
+
def _initDomain(self):
log.debug('XendDomainInfo.initDomain: %s %s',
self.domid,
@@ -2142,58 +2201,7 @@ class XendDomainInfo:
# repin domain vcpus if a restricted cpus list is provided
# this is done prior to memory allocation to aide in memory
# distribution for NUMA systems.
- def has_cpus():
- if self.info['cpus'] is not None:
- for c in self.info['cpus']:
- if c:
- return True
- return False
-
- if has_cpus():
- for v in range(0, self.info['VCPUs_max']):
- if self.info['cpus'][v]:
- xc.vcpu_setaffinity(self.domid, v, self.info['cpus'][v])
- else:
- def find_relaxed_node(node_list):
- import sys
- nr_nodes = info['nr_nodes']
- if node_list is None:
- node_list = range(0, nr_nodes)
- nodeload = [0]
- nodeload = nodeload * nr_nodes
- from xen.xend import XendDomain
- doms = XendDomain.instance().list('all')
- for dom in filter (lambda d: d.domid != self.domid, doms):
- cpuinfo = dom.getVCPUInfo()
- for vcpu in sxp.children(cpuinfo, 'vcpu'):
- if sxp.child_value(vcpu, 'online') == 0: continue
- cpumap = list(sxp.child_value(vcpu,'cpumap'))
- for i in range(0, nr_nodes):
- node_cpumask = info['node_to_cpu'][i]
- for j in node_cpumask:
- if j in cpumap:
- nodeload[i] += 1
- break
- for i in range(0, nr_nodes):
- if len(info['node_to_cpu'][i]) > 0 and i in node_list:
- nodeload[i] = int(nodeload[i] * 16 / len(info['node_to_cpu'][i]))
- else:
- nodeload[i] = sys.maxint
- index = nodeload.index( min(nodeload) )
- return index
-
- info = xc.physinfo()
- if info['nr_nodes'] > 1:
- node_memory_list = info['node_to_memory']
- needmem = self.image.getRequiredAvailableMemory(self.info['memory_dynamic_max']) / 1024
- candidate_node_list = []
- for i in range(0, info['nr_nodes']):
- if node_memory_list[i] >= needmem and len(info['node_to_cpu'][i]) > 0:
- candidate_node_list.append(i)
- index = find_relaxed_node(candidate_node_list)
- cpumask = info['node_to_cpu'][index]
- for v in range(0, self.info['VCPUs_max']):
- xc.vcpu_setaffinity(self.domid, v, cpumask)
+ self._setCPUAffinity()
# Use architecture- and image-specific calculations to determine
# the various headrooms necessary, given the raw configured

21
18780-cpu-affinity.patch Normal file
View File

@ -0,0 +1,21 @@
# HG changeset patch
# User Keir Fraser <keir.fraser@citrix.com>
# Date 1226672871 0
# Node ID 85198c4d4da516000d002f66fded65f11ef64ab6
# Parent 3ba83def85a234d49ac426f46100dc2a6bcda761
Fix to save CPU affinity for xm save/restore
Signed-off-by: Masaki Kanno <kanno.masaki@jp.fujitsu.com>
Index: xen-3.3.1-testing/tools/python/xen/xend/XendConfig.py
===================================================================
--- xen-3.3.1-testing.orig/tools/python/xen/xend/XendConfig.py
+++ xen-3.3.1-testing/tools/python/xen/xend/XendConfig.py
@@ -1026,8 +1026,6 @@ class XendConfig(dict):
sxpr.append([name, s])
for xenapi, legacy in XENAPI_CFG_TO_LEGACY_CFG.items():
- if legacy in ('cpus'): # skip this
- continue
if self.has_key(xenapi) and self[xenapi] not in (None, []):
if type(self[xenapi]) == bool:
# convert booleans to ints before making an sxp item

20
18799-cpu-affinity.patch Normal file
View File

@ -0,0 +1,20 @@
Index: xen-3.3.1-testing/tools/python/xen/xend/XendDomainInfo.py
===================================================================
--- xen-3.3.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py
+++ xen-3.3.1-testing/tools/python/xen/xend/XendDomainInfo.py
@@ -476,7 +476,14 @@ class XendDomainInfo:
if state in (DOM_STATE_SUSPENDED, DOM_STATE_HALTED):
try:
self._constructDomain()
- self._setCPUAffinity()
+
+ try:
+ self._setCPUAffinity()
+ except:
+ # usually a CPU we want to set affinity to does not exist
+ # we just ignore it so that the domain can still be restored
+ log.warn("Cannot restore CPU affinity")
+
self._storeVmDetails()
self._createChannels()
self._createDevices()

View File

@ -2,7 +2,7 @@
Index: xen-3.3.1-testing/xen/include/asm-x86/hvm/hvm_extensions.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ xen-3.3.1-testing/xen/include/asm-x86/hvm/hvm_extensions.h 2008-10-07 20:55:01.000000000 -0600
+++ xen-3.3.1-testing/xen/include/asm-x86/hvm/hvm_extensions.h 2008-11-21 10:02:05.000000000 -0700
@@ -0,0 +1,165 @@
+/****************************************************************************
+ |
@ -172,14 +172,14 @@ Index: xen-3.3.1-testing/xen/include/asm-x86/hvm/hvm_extensions.h
Index: xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/Makefile
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/Makefile 2008-10-07 20:55:01.000000000 -0600
+++ xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/Makefile 2008-11-21 10:02:05.000000000 -0700
@@ -0,0 +1,2 @@
+obj-y += hv_intercept.o
+obj-y += hv_hypercall.o
Index: xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_errno.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_errno.h 2008-10-07 20:55:01.000000000 -0600
+++ xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_errno.h 2008-11-21 10:02:05.000000000 -0700
@@ -0,0 +1,62 @@
+/****************************************************************************
+ |
@ -246,8 +246,8 @@ Index: xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_errno.h
Index: xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_hypercall.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_hypercall.c 2008-10-07 20:55:01.000000000 -0600
@@ -0,0 +1,125 @@
+++ xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_hypercall.c 2008-11-21 10:04:22.000000000 -0700
@@ -0,0 +1,135 @@
+/****************************************************************************
+ |
+ | Copyright (c) [2007, 2008] Novell, Inc.
@ -284,6 +284,8 @@ Index: xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_hypercall.c
+#include <xen/cpumask.h>
+#include <xen/event.h>
+#include <xen/domain.h>
+#include <xen/hypercall.h>
+#include <public/sched.h>
+
+#include <asm/hvm/hvm_extensions.h>
+#include "hv_shim.h"
@ -299,6 +301,7 @@ Index: xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_hypercall.c
+ printk("Printing stats for vcpu ID: %d\n", i);
+
+ printk("Number of context switches: %lu\n", v->stats.num_switches);
+ printk("Number of long spin waits: %lu\n", v->stats.num_long_spinwaits);
+ printk("Number of TPR reads: %lu\n", v->stats.num_tpr_reads);
+ printk("Number of ICR reads: %lu\n", v->stats.num_icr_reads);
+ printk("Number of Eoi writes: %lu\n", v->stats.num_eoi_writes);
@ -308,10 +311,8 @@ Index: xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_hypercall.c
+}
+
+static int
+hv_switch_va(paddr_t input)
+hv_switch_va(hv_vcpu_t *vcpup, paddr_t input)
+{
+ hv_partition_t *curp = hv_get_current_partition();
+ hv_vcpu_t *vcpup = &curp->vcpu_state[hv_get_current_vcpu_index()];
+
+ /*
+ * XXXKYS: the spec sys the asID is passed via memory at offset 0 of
@ -335,6 +336,7 @@ Index: xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_hypercall.c
+ unsigned short rep_count;
+ unsigned short start_index;
+ hv_partition_t *curp = hv_get_current_partition();
+ hv_vcpu_t *vcpup = &curp->vcpu_state[hv_get_current_vcpu_index()];
+ u64 partition_id;
+
+
@ -363,7 +365,15 @@ Index: xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_hypercall.c
+ *ret_val = hv_build_hcall_retval(HV_STATUS_SUCCESS, 0);
+ return;
+ case HV_SWITCH_VA:
+ *ret_val = hv_build_hcall_retval(hv_switch_va(input), 0);
+ *ret_val = hv_build_hcall_retval(hv_switch_va(vcpup, input), 0);
+ return;
+
+ case HV_NOTIFY_LONG_SPIN_WAIT:
+#ifdef HV_STATS
+ vcpup->stats.num_long_spinwaits++;
+#endif
+ do_sched_op_compat(SCHEDOP_yield, 0);
+ *ret_val = hv_build_hcall_retval(HV_STATUS_SUCCESS, 0);
+ return;
+
+ default:
@ -376,8 +386,8 @@ Index: xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_hypercall.c
Index: xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_hypercall.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_hypercall.h 2008-10-07 20:55:01.000000000 -0600
@@ -0,0 +1,45 @@
+++ xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_hypercall.h 2008-11-21 10:02:05.000000000 -0700
@@ -0,0 +1,46 @@
+/****************************************************************************
+ |
+ | Copyright (c) [2007, 2008] Novell, Inc.
@ -415,19 +425,20 @@ Index: xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_hypercall.h
+ * Hypercall verbs.
+ */
+
+#define HV_GET_PARTITION_PROPERTY 0x0017
+#define HV_SET_PARTITION_PROPERTY 0x0018
+#define HV_GET_PARTITION_ID 0x0015
+#define HV_GET_PARTITION_PROPERTY 0x0044
+#define HV_SET_PARTITION_PROPERTY 0x0045
+#define HV_GET_PARTITION_ID 0x0046
+#define HV_SWITCH_VA 0x0001
+#define HV_FLUSH_VA 0x0002
+#define HV_FLUSH_VA_LIST 0x0003
+#define HV_NOTIFY_LONG_SPIN_WAIT 0x0008
+
+#endif /* HV_HYPERCALL_H */
Index: xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_intercept.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_intercept.c 2008-10-07 21:19:25.000000000 -0600
@@ -0,0 +1,980 @@
+++ xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_intercept.c 2008-11-21 10:06:15.000000000 -0700
@@ -0,0 +1,990 @@
+/****************************************************************************
+ |
+ | Copyright (c) [2007, 2008] Novell, Inc.
@ -661,12 +672,12 @@ Index: xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_intercept.c
+ * If HAP is enabled; the guest should not use TLB flush
+ * related enlightenments.
+ */
+ return (USE_CSWITCH_HCALL | USE_APIC_MSRS | USE_RESET_MSR);
+ return (USE_CSWITCH_HCALL | USE_APIC_MSRS | USE_RESET_MSR | USE_RELAXED_TIMING);
+ else
+ /*
+ * For now disable TLB flush enlightenments.
+ */
+ return (USE_CSWITCH_HCALL | USE_APIC_MSRS | USE_RESET_MSR);
+ return (USE_CSWITCH_HCALL | USE_APIC_MSRS | USE_RESET_MSR | USE_RELAXED_TIMING);
+}
+
+static inline u32
@ -1156,6 +1167,7 @@ Index: xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_intercept.c
+ * 0x40000004: Imlementation recommendations.
+ */
+ *eax = hv_get_recommendations();
+ *ebx = 2047;
+ *ebx = 0; /* Reserved */
+ *ecx = 0; /* Reserved */
+ *edx = 0; /* Reserved */
@ -1171,6 +1183,15 @@ Index: xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_intercept.c
+ *ecx = 0; /* Reserved */
+ *edx = 0; /* Reserved */
+ break;
+ case 6:
+ /*
+ * Implementation hardware features; for now set them all to zero.
+ */
+ *eax = 0;
+ *ebx = 0; /* Reserved */
+ *ecx = 0; /* Reserved */
+ *edx = 0; /* Reserved */
+ break;
+
+ default:
+ /*
@ -1411,8 +1432,8 @@ Index: xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_intercept.c
Index: xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_shim.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_shim.h 2008-10-07 20:55:01.000000000 -0600
@@ -0,0 +1,281 @@
+++ xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_shim.h 2008-11-21 10:02:05.000000000 -0700
@@ -0,0 +1,284 @@
+/****************************************************************************
+ |
+ | Copyright (c) [2007, 2008] Novell, Inc.
@ -1536,6 +1557,8 @@ Index: xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_shim.h
+#define USE_APIC_MSRS (1U<<_USE_APIC_MSRS)
+#define _USE_RESET_MSR 4
+#define USE_RESET_MSR (1U<<_USE_RESET_MSR)
+#define _USE_RELAXED_TIMING 5
+#define USE_RELAXED_TIMING (1U<<_USE_RELAXED_TIMING)
+
+/*
+ * Supported Synthetic MSRs. 0.83 HyperV spec, section 3.4
@ -1584,6 +1607,7 @@ Index: xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_shim.h
+
+typedef struct {
+ u64 num_switches;
+ u64 num_long_spinwaits;
+ u64 num_tpr_reads;
+ u64 num_icr_reads;
+ u64 num_eoi_writes;

26
tmp_build.patch Normal file
View File

@ -0,0 +1,26 @@
Index: xen-3.3.1-testing/tools/xenstore/Makefile
===================================================================
--- xen-3.3.1-testing.orig/tools/xenstore/Makefile
+++ xen-3.3.1-testing/tools/xenstore/Makefile
@@ -60,6 +60,7 @@ $(CLIENTS_DOMU): xenstore
xenstore: xenstore_client.o $(LIBXENSTORE)
$(CC) $(CFLAGS) $(LDFLAGS) $< -L. -lxenstore $(SOCKET_LIBS) -o $@
+ $(CC) $(CFLAGS) $(LDFLAGS) -Wl,--build-id=uuid $< -L. -lxenstore $(SOCKET_LIBS) -o domu-$@
xenstore-control: xenstore_control.o $(LIBXENSTORE)
$(CC) $(CFLAGS) $(LDFLAGS) $< -L. -lxenstore $(SOCKET_LIBS) -o $@
@@ -108,10 +109,11 @@ install: all
$(INSTALL_PROG) xenstore-control $(DESTDIR)$(BINDIR)
$(INSTALL_PROG) xenstore $(DESTDIR)/usr/bin
set -e ; for c in $(CLIENTS) ; do \
- ln -f $(DESTDIR)/usr/bin/xenstore $(DESTDIR)/usr/bin/$${c} ; \
+ ln -fs /usr/bin/xenstore $(DESTDIR)/usr/bin/$${c} ; \
done
+ $(INSTALL_PROG) domu-xenstore $(DESTDIR)/bin
for client in $(CLIENTS_DOMU); do \
- $(INSTALL_PROG) $$client $(DESTDIR)/bin/$${client/domu-}; \
+ ln -fs /bin/domu-xenstore $(DESTDIR)/bin/$${client/domu-}; \
done
$(INSTALL_DIR) $(DESTDIR)$(LIBDIR)
$(INSTALL_PROG) libxenstore.so.$(MAJOR).$(MINOR) $(DESTDIR)$(LIBDIR)

View File

@ -1,3 +1,18 @@
-------------------------------------------------------------------
Tue Nov 25 15:09:12 CET 2008 - kwolf@suse.de
- Fix the build. Build system seems to be unhappy about having two
copies of the xenstore binary (this is not a proper fix in fact
as the build error says the two files are not identical - they
are hardlinks, so this seems unlikely to be the real cause).
tmp_build.patch
-------------------------------------------------------------------
Mon Nov 24 14:24:06 MST 2008 - jfehlig@novell.com
- bnc#448364 - Fix cpu affinity on save/restore/migrate
-------------------------------------------------------------------
Thu Nov 20 19:57:19 CET 2008 - kwolf@suse.de

View File

@ -1,5 +1,5 @@
#
# spec file for package xen (Version 3.3.1_18494_02)
# spec file for package xen (Version 3.3.1_18494_03)
#
# Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
@ -37,7 +37,7 @@ BuildRequires: glibc-32bit glibc-devel-32bit
%if %{?with_kmp}0
BuildRequires: kernel-source kernel-syms module-init-tools xorg-x11
%endif
Version: 3.3.1_18494_02
Version: 3.3.1_18494_03
Release: 1
License: GPL v2 only
Group: System/Kernel
@ -111,6 +111,9 @@ Patch41: 18745-xend-ioport-irq.patch
Patch42: 18747-x86-partial-page-ref.patch
Patch43: 18771-reduce-GDT-switching.patch
Patch44: 18778-msi-irq-fix.patch
Patch45: 18764-cpu-affinity.patch
Patch46: 18780-cpu-affinity.patch
Patch47: 18799-cpu-affinity.patch
# Will be fixed in 3.3-testing soon
Patch90: xen-x86-emulate-movnti.patch
# Our patches
@ -197,6 +200,7 @@ Patch355: dom-print.patch
Patch400: hv_tools.patch
Patch401: hv_xen_base.patch
Patch402: hv_xen_extension.patch
Patch999: tmp_build.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()")
@ -573,6 +577,9 @@ Authors:
%patch42 -p1
%patch43 -p1
%patch44 -p1
%patch45 -p1
%patch46 -p1
%patch47 -p1
%patch90 -p1
%patch100 -p1
%patch101 -p1
@ -654,6 +661,7 @@ Authors:
%patch401 -p1
%patch402 -p1
%endif
%patch999 -p1
%build
XEN_EXTRAVERSION=%version-%release
@ -947,6 +955,7 @@ rm -f $RPM_BUILD_ROOT/%{_libdir}/xen/bin/qemu-dm.debug
%files tools-domU
%defattr(-,root,root)
/usr/bin/xen-detect
/bin/domu-xenstore
/bin/xenstore-*
%files devel
@ -997,6 +1006,14 @@ rm -f $RPM_BUILD_ROOT/%{_libdir}/xen/bin/qemu-dm.debug
/sbin/ldconfig
%changelog
* Tue Nov 25 2008 kwolf@suse.de
- Fix the build. Build system seems to be unhappy about having two
copies of the xenstore binary (this is not a proper fix in fact
as the build error says the two files are not identical - they
are hardlinks, so this seems unlikely to be the real cause).
tmp_build.patch
* Mon Nov 24 2008 jfehlig@novell.com
- bnc#448364 - Fix cpu affinity on save/restore/migrate
* Thu Nov 20 2008 kwolf@suse.de
- bnc#444731 - Fix data corruption bug (caused by broken x86
emulation for movnti instruction)