# HG changeset patch
# User emellor@xxxxxxxxxxxxxxxxxxxxxx
# Node ID 009eb32c0ae47ee021b82932f02b382f56a9519b
# Parent 210a5b625e30067c8f340452aa1020aa44325124
# Parent 5e111356ba17602f474e36da6571de490157981a
Merged.
diff -r 210a5b625e30 -r 009eb32c0ae4
linux-2.6-xen-sparse/arch/xen/kernel/reboot.c
--- a/linux-2.6-xen-sparse/arch/xen/kernel/reboot.c Tue Nov 15 18:08:11 2005
+++ b/linux-2.6-xen-sparse/arch/xen/kernel/reboot.c Tue Nov 15 18:09:30 2005
@@ -188,7 +188,7 @@
xenbus_resume();
#ifdef CONFIG_SMP
- for_each_present_cpu(i)
+ for_each_cpu(i)
vcpu_prepare(i);
out_reenable_cpus:
diff -r 210a5b625e30 -r 009eb32c0ae4
linux-2.6-xen-sparse/arch/xen/kernel/smpboot.c
--- a/linux-2.6-xen-sparse/arch/xen/kernel/smpboot.c Tue Nov 15 18:08:11 2005
+++ b/linux-2.6-xen-sparse/arch/xen/kernel/smpboot.c Tue Nov 15 18:09:30 2005
@@ -277,6 +277,18 @@
#ifdef CONFIG_HOTPLUG_CPU
+/*
+ * Initialize cpu_present_map late to skip SMP boot code in init/main.c.
+ * But do it early enough to catch critical for_each_present_cpu() loops
+ * in i386-specific code.
+ */
+static int __init initialize_cpu_present_map(void)
+{
+ cpu_present_map = cpu_possible_map;
+ return 0;
+}
+core_initcall(initialize_cpu_present_map);
+
static void vcpu_hotplug(unsigned int cpu)
{
int err;
@@ -293,7 +305,6 @@
}
if (strcmp(state, "online") == 0) {
- cpu_set(cpu, cpu_present_map);
(void)cpu_up(cpu);
} else if (strcmp(state, "offline") == 0) {
(void)cpu_down(cpu);
diff -r 210a5b625e30 -r 009eb32c0ae4 tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py Tue Nov 15 18:08:11 2005
+++ b/tools/python/xen/xend/XendDomainInfo.py Tue Nov 15 18:09:30 2005
@@ -437,10 +437,18 @@
defaultInfo('on_crash', lambda: "restart")
defaultInfo('cpu', lambda: None)
defaultInfo('cpu_weight', lambda: 1.0)
- defaultInfo('vcpus', lambda: int(1))
-
- self.info['vcpus'] = int(self.info['vcpus'])
-
+
+ # some domains don't have a config file (e.g. dom0 )
+ # to set number of vcpus so we derive available cpus
+ # from max_vcpu_id which is present for running domains.
+ if not self.infoIsSet('vcpus') and self.infoIsSet('max_vcpu_id'):
+ avail = int(self.info['max_vcpu_id'])+1
+ else:
+ avail = int(1)
+
+ defaultInfo('vcpus', lambda: avail)
+ defaultInfo('online_vcpus', lambda: self.info['vcpus'])
+ defaultInfo('max_vcpu_id', lambda: self.info['vcpus']-1)
defaultInfo('vcpu_avail', lambda: (1 << self.info['vcpus']) - 1)
defaultInfo('memory', lambda: 0)
@@ -927,6 +935,7 @@
if self.infoIsSet('cpu_time'):
sxpr.append(['cpu_time', self.info['cpu_time']/1e9])
sxpr.append(['vcpus', self.info['vcpus']])
+ sxpr.append(['online_vcpus', self.info['online_vcpus']])
if self.infoIsSet('start_time'):
up_time = time.time() - self.info['start_time']
@@ -943,16 +952,13 @@
def getVCPUInfo(self):
try:
- def filter_cpumap(map, max):
- return filter(lambda x: x >= 0, map[0:max])
-
# We include the domain name and ID, to help xm.
sxpr = ['domain',
['domid', self.domid],
['name', self.info['name']],
- ['vcpu_count', self.info['vcpus']]]
-
- for i in range(0, self.info['vcpus']):
+ ['vcpu_count', self.info['online_vcpus']]]
+
+ for i in range(0, self.info['max_vcpu_id']+1):
info = xc.vcpu_getinfo(self.domid, i)
sxpr.append(['vcpu',
@@ -962,8 +968,7 @@
['running', info['running']],
['cpu_time', info['cpu_time'] / 1e9],
['cpu', info['cpu']],
- ['cpumap', filter_cpumap(info['cpumap'],
- self.info['vcpus'])]])
+ ['cpumap', info['cpumap']]])
return sxpr
diff -r 210a5b625e30 -r 009eb32c0ae4 tools/python/xen/xm/main.py
--- a/tools/python/xen/xm/main.py Tue Nov 15 18:08:11 2005
+++ b/tools/python/xen/xm/main.py Tue Nov 15 18:09:30 2005
@@ -260,13 +260,13 @@
return t(sxp.child_value(info, n, d))
return {
- 'dom' : get_info('domid', int, -1),
- 'name' : get_info('name', str, '??'),
- 'mem' : get_info('memory', int, 0),
- 'vcpus' : get_info('vcpus', int, 0),
- 'state' : get_info('state', str, '??'),
- 'cpu_time' : get_info('cpu_time', float, 0),
- 'ssidref' : get_info('ssidref', int, 0),
+ 'dom' : get_info('domid', int, -1),
+ 'name' : get_info('name', str, '??'),
+ 'mem' : get_info('memory', int, 0),
+ 'vcpus' : get_info('online_vcpus', int, 0),
+ 'state' : get_info('state', str, '??'),
+ 'cpu_time' : get_info('cpu_time', float, 0),
+ 'ssidref' : get_info('ssidref', int, 0),
}
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|