[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] Fix up CPU allocation and topology reporting.
# HG changeset patch # User kaf24@xxxxxxxxxxxxxxxxxxxx # Node ID e92dd21483bd0cddffda387e9f34ad369a1864f1 # Parent 3048761dc368746c973ddf5daa1a73a334b99b2c Fix up CPU allocation and topology reporting. Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx> diff -r 3048761dc368 -r e92dd21483bd xen/arch/x86/dom0_ops.c --- a/xen/arch/x86/dom0_ops.c Fri Feb 24 18:16:15 2006 +++ b/xen/arch/x86/dom0_ops.c Fri Feb 24 18:16:52 2006 @@ -181,10 +181,13 @@ { dom0_physinfo_t *pi = &op->u.physinfo; - pi->threads_per_core = smp_num_siblings; - pi->cores_per_socket = boot_cpu_data.x86_max_cores; + pi->threads_per_core = + cpus_weight(cpu_sibling_map[0]); + pi->cores_per_socket = + cpus_weight(cpu_core_map[0]) / pi->threads_per_core; pi->sockets_per_node = - num_online_cpus() / (pi->threads_per_core * pi->cores_per_socket); + num_online_cpus() / cpus_weight(cpu_core_map[0]); + pi->nr_nodes = 1; pi->total_pages = total_pages; pi->free_pages = avail_domheap_pages(); diff -r 3048761dc368 -r e92dd21483bd xen/arch/x86/setup.c --- a/xen/arch/x86/setup.c Fri Feb 24 18:16:15 2006 +++ b/xen/arch/x86/setup.c Fri Feb 24 18:16:52 2006 @@ -437,11 +437,7 @@ set_in_cr4(X86_CR4_OSXMMEXCPT); if ( opt_nosmp ) - { max_cpus = 0; - smp_num_siblings = 1; - boot_cpu_data.x86_max_cores = 1; - } smp_prepare_cpus(max_cpus); diff -r 3048761dc368 -r e92dd21483bd xen/common/dom0_ops.c --- a/xen/common/dom0_ops.c Fri Feb 24 18:16:15 2006 +++ b/xen/common/dom0_ops.c Fri Feb 24 18:16:52 2006 @@ -165,6 +165,7 @@ domid_t dom; struct vcpu *v; unsigned int i, cnt[NR_CPUS] = { 0 }; + cpumask_t cpu_exclude_map; static domid_t rover = 0; dom = op->u.createdomain.domain; @@ -195,18 +196,29 @@ read_lock(&domlist_lock); for_each_domain ( d ) for_each_vcpu ( d, v ) - cnt[v->processor]++; + if ( !test_bit(_VCPUF_down, &v->vcpu_flags) ) + cnt[v->processor]++; read_unlock(&domlist_lock); /* - * If we're on a HT system, we only use the first HT for dom0, other - * domains will all share the second HT of each CPU. Since dom0 is on - * CPU 0, we favour high numbered CPUs in the event of a tie. + * If we're on a HT system, we only auto-allocate to a non-primary HT. + * We favour high numbered CPUs in the event of a tie. */ - pro = smp_num_siblings - 1; - for ( i = pro; i < num_online_cpus(); i += smp_num_siblings ) + pro = first_cpu(cpu_sibling_map[0]); + if ( cpus_weight(cpu_sibling_map[0]) > 1 ) + pro = next_cpu(pro, cpu_sibling_map[0]); + cpu_exclude_map = cpu_sibling_map[0]; + for_each_online_cpu ( i ) + { + if ( cpu_isset(i, cpu_exclude_map) ) + continue; + if ( (i == first_cpu(cpu_sibling_map[i])) && + (cpus_weight(cpu_sibling_map[i]) > 1) ) + continue; + cpus_or(cpu_exclude_map, cpu_exclude_map, cpu_sibling_map[i]); if ( cnt[i] <= cnt[pro] ) pro = i; + } ret = -ENOMEM; if ( (d = domain_create(dom, pro)) == NULL ) _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |