This commit is contained in:
parent
1c73c9b461
commit
793208499f
150
18764-cpu-affinity.patch
Normal file
150
18764-cpu-affinity.patch
Normal 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
21
18780-cpu-affinity.patch
Normal 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
20
18799-cpu-affinity.patch
Normal 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()
|
@ -2,7 +2,7 @@
|
|||||||
Index: xen-3.3.1-testing/xen/include/asm-x86/hvm/hvm_extensions.h
|
Index: xen-3.3.1-testing/xen/include/asm-x86/hvm/hvm_extensions.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /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 @@
|
@@ -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
|
Index: xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/Makefile
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /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 @@
|
@@ -0,0 +1,2 @@
|
||||||
+obj-y += hv_intercept.o
|
+obj-y += hv_intercept.o
|
||||||
+obj-y += hv_hypercall.o
|
+obj-y += hv_hypercall.o
|
||||||
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_errno.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /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 @@
|
@@ -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
|
Index: xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_hypercall.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /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
|
+++ xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_hypercall.c 2008-11-21 10:04:22.000000000 -0700
|
||||||
@@ -0,0 +1,125 @@
|
@@ -0,0 +1,135 @@
|
||||||
+/****************************************************************************
|
+/****************************************************************************
|
||||||
+ |
|
+ |
|
||||||
+ | Copyright (c) [2007, 2008] Novell, Inc.
|
+ | 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/cpumask.h>
|
||||||
+#include <xen/event.h>
|
+#include <xen/event.h>
|
||||||
+#include <xen/domain.h>
|
+#include <xen/domain.h>
|
||||||
|
+#include <xen/hypercall.h>
|
||||||
|
+#include <public/sched.h>
|
||||||
+
|
+
|
||||||
+#include <asm/hvm/hvm_extensions.h>
|
+#include <asm/hvm/hvm_extensions.h>
|
||||||
+#include "hv_shim.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("Printing stats for vcpu ID: %d\n", i);
|
||||||
+
|
+
|
||||||
+ printk("Number of context switches: %lu\n", v->stats.num_switches);
|
+ 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 TPR reads: %lu\n", v->stats.num_tpr_reads);
|
||||||
+ printk("Number of ICR reads: %lu\n", v->stats.num_icr_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);
|
+ 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
|
+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
|
+ * 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 rep_count;
|
||||||
+ unsigned short start_index;
|
+ unsigned short start_index;
|
||||||
+ hv_partition_t *curp = hv_get_current_partition();
|
+ hv_partition_t *curp = hv_get_current_partition();
|
||||||
|
+ hv_vcpu_t *vcpup = &curp->vcpu_state[hv_get_current_vcpu_index()];
|
||||||
+ u64 partition_id;
|
+ 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);
|
+ *ret_val = hv_build_hcall_retval(HV_STATUS_SUCCESS, 0);
|
||||||
+ return;
|
+ return;
|
||||||
+ case HV_SWITCH_VA:
|
+ 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;
|
+ return;
|
||||||
+
|
+
|
||||||
+ default:
|
+ 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
|
Index: xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_hypercall.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /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
|
+++ xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_hypercall.h 2008-11-21 10:02:05.000000000 -0700
|
||||||
@@ -0,0 +1,45 @@
|
@@ -0,0 +1,46 @@
|
||||||
+/****************************************************************************
|
+/****************************************************************************
|
||||||
+ |
|
+ |
|
||||||
+ | Copyright (c) [2007, 2008] Novell, Inc.
|
+ | 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.
|
+ * Hypercall verbs.
|
||||||
+ */
|
+ */
|
||||||
+
|
+
|
||||||
+#define HV_GET_PARTITION_PROPERTY 0x0017
|
+#define HV_GET_PARTITION_PROPERTY 0x0044
|
||||||
+#define HV_SET_PARTITION_PROPERTY 0x0018
|
+#define HV_SET_PARTITION_PROPERTY 0x0045
|
||||||
+#define HV_GET_PARTITION_ID 0x0015
|
+#define HV_GET_PARTITION_ID 0x0046
|
||||||
+#define HV_SWITCH_VA 0x0001
|
+#define HV_SWITCH_VA 0x0001
|
||||||
+#define HV_FLUSH_VA 0x0002
|
+#define HV_FLUSH_VA 0x0002
|
||||||
+#define HV_FLUSH_VA_LIST 0x0003
|
+#define HV_FLUSH_VA_LIST 0x0003
|
||||||
|
+#define HV_NOTIFY_LONG_SPIN_WAIT 0x0008
|
||||||
+
|
+
|
||||||
+#endif /* HV_HYPERCALL_H */
|
+#endif /* HV_HYPERCALL_H */
|
||||||
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_intercept.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /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
|
+++ xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_intercept.c 2008-11-21 10:06:15.000000000 -0700
|
||||||
@@ -0,0 +1,980 @@
|
@@ -0,0 +1,990 @@
|
||||||
+/****************************************************************************
|
+/****************************************************************************
|
||||||
+ |
|
+ |
|
||||||
+ | Copyright (c) [2007, 2008] Novell, Inc.
|
+ | 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
|
+ * If HAP is enabled; the guest should not use TLB flush
|
||||||
+ * related enlightenments.
|
+ * 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
|
+ else
|
||||||
+ /*
|
+ /*
|
||||||
+ * For now disable TLB flush enlightenments.
|
+ * 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
|
+static inline u32
|
||||||
@ -1156,6 +1167,7 @@ Index: xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_intercept.c
|
|||||||
+ * 0x40000004: Imlementation recommendations.
|
+ * 0x40000004: Imlementation recommendations.
|
||||||
+ */
|
+ */
|
||||||
+ *eax = hv_get_recommendations();
|
+ *eax = hv_get_recommendations();
|
||||||
|
+ *ebx = 2047;
|
||||||
+ *ebx = 0; /* Reserved */
|
+ *ebx = 0; /* Reserved */
|
||||||
+ *ecx = 0; /* Reserved */
|
+ *ecx = 0; /* Reserved */
|
||||||
+ *edx = 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 */
|
+ *ecx = 0; /* Reserved */
|
||||||
+ *edx = 0; /* Reserved */
|
+ *edx = 0; /* Reserved */
|
||||||
+ break;
|
+ 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:
|
+ 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
|
Index: xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_shim.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /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
|
+++ xen-3.3.1-testing/xen/arch/x86/hvm/hyperv/hv_shim.h 2008-11-21 10:02:05.000000000 -0700
|
||||||
@@ -0,0 +1,281 @@
|
@@ -0,0 +1,284 @@
|
||||||
+/****************************************************************************
|
+/****************************************************************************
|
||||||
+ |
|
+ |
|
||||||
+ | Copyright (c) [2007, 2008] Novell, Inc.
|
+ | 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_APIC_MSRS (1U<<_USE_APIC_MSRS)
|
||||||
+#define _USE_RESET_MSR 4
|
+#define _USE_RESET_MSR 4
|
||||||
+#define USE_RESET_MSR (1U<<_USE_RESET_MSR)
|
+#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
|
+ * 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 {
|
+typedef struct {
|
||||||
+ u64 num_switches;
|
+ u64 num_switches;
|
||||||
|
+ u64 num_long_spinwaits;
|
||||||
+ u64 num_tpr_reads;
|
+ u64 num_tpr_reads;
|
||||||
+ u64 num_icr_reads;
|
+ u64 num_icr_reads;
|
||||||
+ u64 num_eoi_writes;
|
+ u64 num_eoi_writes;
|
||||||
|
26
tmp_build.patch
Normal file
26
tmp_build.patch
Normal 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)
|
15
xen.changes
15
xen.changes
@ -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
|
Thu Nov 20 19:57:19 CET 2008 - kwolf@suse.de
|
||||||
|
|
||||||
|
21
xen.spec
21
xen.spec
@ -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.
|
# Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||||
#
|
#
|
||||||
@ -37,7 +37,7 @@ BuildRequires: glibc-32bit glibc-devel-32bit
|
|||||||
%if %{?with_kmp}0
|
%if %{?with_kmp}0
|
||||||
BuildRequires: kernel-source kernel-syms module-init-tools xorg-x11
|
BuildRequires: kernel-source kernel-syms module-init-tools xorg-x11
|
||||||
%endif
|
%endif
|
||||||
Version: 3.3.1_18494_02
|
Version: 3.3.1_18494_03
|
||||||
Release: 1
|
Release: 1
|
||||||
License: GPL v2 only
|
License: GPL v2 only
|
||||||
Group: System/Kernel
|
Group: System/Kernel
|
||||||
@ -111,6 +111,9 @@ Patch41: 18745-xend-ioport-irq.patch
|
|||||||
Patch42: 18747-x86-partial-page-ref.patch
|
Patch42: 18747-x86-partial-page-ref.patch
|
||||||
Patch43: 18771-reduce-GDT-switching.patch
|
Patch43: 18771-reduce-GDT-switching.patch
|
||||||
Patch44: 18778-msi-irq-fix.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
|
# Will be fixed in 3.3-testing soon
|
||||||
Patch90: xen-x86-emulate-movnti.patch
|
Patch90: xen-x86-emulate-movnti.patch
|
||||||
# Our patches
|
# Our patches
|
||||||
@ -197,6 +200,7 @@ Patch355: dom-print.patch
|
|||||||
Patch400: hv_tools.patch
|
Patch400: hv_tools.patch
|
||||||
Patch401: hv_xen_base.patch
|
Patch401: hv_xen_base.patch
|
||||||
Patch402: hv_xen_extension.patch
|
Patch402: hv_xen_extension.patch
|
||||||
|
Patch999: tmp_build.patch
|
||||||
Url: http://www.cl.cam.ac.uk/Research/SRG/netos/xen/
|
Url: http://www.cl.cam.ac.uk/Research/SRG/netos/xen/
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
%define pysite %(python -c "import distutils.sysconfig; print distutils.sysconfig.get_python_lib()")
|
%define pysite %(python -c "import distutils.sysconfig; print distutils.sysconfig.get_python_lib()")
|
||||||
@ -573,6 +577,9 @@ Authors:
|
|||||||
%patch42 -p1
|
%patch42 -p1
|
||||||
%patch43 -p1
|
%patch43 -p1
|
||||||
%patch44 -p1
|
%patch44 -p1
|
||||||
|
%patch45 -p1
|
||||||
|
%patch46 -p1
|
||||||
|
%patch47 -p1
|
||||||
%patch90 -p1
|
%patch90 -p1
|
||||||
%patch100 -p1
|
%patch100 -p1
|
||||||
%patch101 -p1
|
%patch101 -p1
|
||||||
@ -654,6 +661,7 @@ Authors:
|
|||||||
%patch401 -p1
|
%patch401 -p1
|
||||||
%patch402 -p1
|
%patch402 -p1
|
||||||
%endif
|
%endif
|
||||||
|
%patch999 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
XEN_EXTRAVERSION=%version-%release
|
XEN_EXTRAVERSION=%version-%release
|
||||||
@ -947,6 +955,7 @@ rm -f $RPM_BUILD_ROOT/%{_libdir}/xen/bin/qemu-dm.debug
|
|||||||
%files tools-domU
|
%files tools-domU
|
||||||
%defattr(-,root,root)
|
%defattr(-,root,root)
|
||||||
/usr/bin/xen-detect
|
/usr/bin/xen-detect
|
||||||
|
/bin/domu-xenstore
|
||||||
/bin/xenstore-*
|
/bin/xenstore-*
|
||||||
|
|
||||||
%files devel
|
%files devel
|
||||||
@ -997,6 +1006,14 @@ rm -f $RPM_BUILD_ROOT/%{_libdir}/xen/bin/qemu-dm.debug
|
|||||||
/sbin/ldconfig
|
/sbin/ldconfig
|
||||||
|
|
||||||
%changelog
|
%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
|
* Thu Nov 20 2008 kwolf@suse.de
|
||||||
- bnc#444731 - Fix data corruption bug (caused by broken x86
|
- bnc#444731 - Fix data corruption bug (caused by broken x86
|
||||||
emulation for movnti instruction)
|
emulation for movnti instruction)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user