[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] x86: Remove non-CONFIG_HOTPLUG_CPU code, and general cleanup.
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1258027158 0 # Node ID c983b21e75d22fbf68b4a356dbe25fa8f8374366 # Parent 08a7d164db9a67bb3ce8044a6174522438e960cd x86: Remove non-CONFIG_HOTPLUG_CPU code, and general cleanup. Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx> --- xen/arch/x86/cpu/common.c | 2 xen/arch/x86/irq.c | 32 +++--- xen/arch/x86/setup.c | 4 xen/arch/x86/smpboot.c | 212 ++++++++++++++++++---------------------------- xen/include/asm-x86/smp.h | 7 - 5 files changed, 102 insertions(+), 155 deletions(-) diff -r 08a7d164db9a -r c983b21e75d2 xen/arch/x86/cpu/common.c --- a/xen/arch/x86/cpu/common.c Thu Nov 12 11:43:21 2009 +0000 +++ b/xen/arch/x86/cpu/common.c Thu Nov 12 11:59:18 2009 +0000 @@ -615,10 +615,8 @@ void __cpuinit cpu_init(void) #undef CD } -#ifdef CONFIG_HOTPLUG_CPU void __cpuinit cpu_uninit(void) { int cpu = raw_smp_processor_id(); cpu_clear(cpu, cpu_initialized); } -#endif diff -r 08a7d164db9a -r c983b21e75d2 xen/arch/x86/irq.c --- a/xen/arch/x86/irq.c Thu Nov 12 11:43:21 2009 +0000 +++ b/xen/arch/x86/irq.c Thu Nov 12 11:59:18 2009 +0000 @@ -7,6 +7,7 @@ #include <xen/config.h> #include <xen/init.h> +#include <xen/delay.h> #include <xen/errno.h> #include <xen/event.h> #include <xen/irq.h> @@ -1638,10 +1639,6 @@ static int __init setup_dump_irqs(void) } __initcall(setup_dump_irqs); -#ifdef CONFIG_HOTPLUG_CPU -#include <asm/mach-generic/mach_apic.h> -#include <xen/delay.h> - /* A cpu has been removed from cpu_online_mask. Re-set irq affinities. */ void fixup_irqs(void) { @@ -1650,19 +1647,23 @@ void fixup_irqs(void) struct irq_desc *desc; irq_guest_action_t *action; struct pending_eoi *peoi; - for(irq = 0; irq < nr_irqs; irq++ ) { + + for ( irq = 0; irq < nr_irqs; irq++ ) + { int break_affinity = 0; int set_affinity = 1; cpumask_t affinity; - if (irq == 2) + + if ( irq == 2 ) continue; + desc = irq_to_desc(irq); - /* interrupt's are disabled at this point */ + spin_lock(&desc->lock); affinity = desc->affinity; - if (!desc->action || - cpus_equal(affinity, cpu_online_map)) { + if ( !desc->action || cpus_equal(affinity, cpu_online_map) ) + { spin_unlock(&desc->lock); continue; } @@ -1674,22 +1675,22 @@ void fixup_irqs(void) affinity = cpu_online_map; } - if (desc->handler->disable) + if ( desc->handler->disable ) desc->handler->disable(irq); - if (desc->handler->set_affinity) + if ( desc->handler->set_affinity ) desc->handler->set_affinity(irq, affinity); - else if (!(warned++)) + else if ( !(warned++) ) set_affinity = 0; - if (desc->handler->enable) + if ( desc->handler->enable ) desc->handler->enable(irq); spin_unlock(&desc->lock); - if (break_affinity && set_affinity) + if ( break_affinity && set_affinity ) printk("Broke affinity for irq %i\n", irq); - else if (!set_affinity) + else if ( !set_affinity ) printk("Cannot set affinity for irq %i\n", irq); } @@ -1714,4 +1715,3 @@ void fixup_irqs(void) peoi[sp].ready = 1; flush_ready_eoi(); } -#endif diff -r 08a7d164db9a -r c983b21e75d2 xen/arch/x86/setup.c --- a/xen/arch/x86/setup.c Thu Nov 12 11:43:21 2009 +0000 +++ b/xen/arch/x86/setup.c Thu Nov 12 11:59:18 2009 +0000 @@ -483,10 +483,6 @@ void __init __start_xen(unsigned long mb asm volatile ( "mov %%cr4,%0" : "=r" (this_cpu(cr4)) ); smp_prepare_boot_cpu(); - -#ifdef CONFIG_HOTPLUG_CPU - prefill_possible_map(); -#endif /* We initialise the serial devices very early so we can get debugging. */ ns16550.io_base = 0x3f8; diff -r 08a7d164db9a -r c983b21e75d2 xen/arch/x86/smpboot.c --- a/xen/arch/x86/smpboot.c Thu Nov 12 11:43:21 2009 +0000 +++ b/xen/arch/x86/smpboot.c Thu Nov 12 11:59:18 2009 +0000 @@ -58,7 +58,6 @@ #include <xen/stop_machine.h> #include <acpi/cpufreq/processor_perf.h> -#define set_kernel_exec(x, y) (0) #define setup_trampoline() (bootsym_phys(trampoline_realmode_entry)) /* Set if we find a B stepping CPU */ @@ -82,7 +81,7 @@ cpumask_t cpu_callin_map; cpumask_t cpu_callin_map; cpumask_t cpu_callout_map; EXPORT_SYMBOL(cpu_callout_map); -cpumask_t cpu_possible_map; +cpumask_t cpu_possible_map = CPU_MASK_ALL; EXPORT_SYMBOL(cpu_possible_map); static cpumask_t smp_commenced_mask; @@ -491,8 +490,8 @@ void __devinit start_secondary(void *unu set_processor_id(cpu); set_current(idle_vcpu[cpu]); this_cpu(curr_vcpu) = idle_vcpu[cpu]; - if ( cpu_has_efer ) - rdmsrl(MSR_EFER, this_cpu(efer)); + if ( cpu_has_efer ) + rdmsrl(MSR_EFER, this_cpu(efer)); asm volatile ( "mov %%cr4,%0" : "=r" (this_cpu(cr4)) ); percpu_traps_init(); @@ -521,11 +520,11 @@ void __devinit start_secondary(void *unu set_cpu_sibling_map(raw_smp_processor_id()); wmb(); - /* Initlize vector_irq for BSPs */ - lock_vector_lock(); - __setup_vector_irq(smp_processor_id()); + /* Initlize vector_irq for BSPs */ + lock_vector_lock(); + __setup_vector_irq(smp_processor_id()); cpu_set(smp_processor_id(), cpu_online_map); - unlock_vector_lock(); + unlock_vector_lock(); per_cpu(cpu_state, smp_processor_id()) = CPU_ONLINE; @@ -767,10 +766,8 @@ wakeup_secondary_cpu(int phys_apicid, un do { Dprintk("+"); udelay(100); - if ( !x2apic_enabled ) - send_status = apic_read(APIC_ICR) & APIC_ICR_BUSY; - else - send_status = 0; /* We go out of the loop dirctly. */ + send_status = (x2apic_enabled ? 0 : + apic_read(APIC_ICR) & APIC_ICR_BUSY); } while (send_status && (timeout++ < 1000)); /* @@ -837,7 +834,7 @@ static int __devinit do_boot_cpu(int api struct vcpu *v; struct desc_struct *gdt; #ifdef __x86_64__ - struct page_info *page; + struct page_info *page; #endif /* @@ -963,11 +960,11 @@ static int __devinit do_boot_cpu(int api cpu_clear(cpu, cpu_initialized); /* was set by cpu_init() */ cpucount--; - /* Mark the CPU as non-present */ - spin_lock(&cpu_add_remove_lock); + /* Mark the CPU as non-present */ + spin_lock(&cpu_add_remove_lock); x86_cpu_to_apicid[cpu] = BAD_APICID; cpu_clear(cpu, cpu_present_map); - spin_unlock(&cpu_add_remove_lock); + spin_unlock(&cpu_add_remove_lock); } else { } @@ -978,7 +975,6 @@ static int __devinit do_boot_cpu(int api return boot_error; } -#ifdef CONFIG_HOTPLUG_CPU static void idle_task_exit(void) { /* Give up lazy state borrowed by this idle vcpu */ @@ -1021,7 +1017,6 @@ exit: exit: return ret; } -#endif /* * Cycle through the processors sending APIC IPIs to boot each. @@ -1120,8 +1115,8 @@ static void __init smp_boot_cpus(unsigne kicked = 1; - for_each_present_cpu ( cpu ) - { + for_each_present_cpu ( cpu ) + { apicid = x86_cpu_to_apicid[cpu]; /* @@ -1130,11 +1125,11 @@ static void __init smp_boot_cpus(unsigne if ((apicid == boot_cpu_apicid) || (apicid == BAD_APICID)) continue; - if (!check_apicid_present(apicid)) - { - dprintk(XENLOG_WARNING, "Present CPU has valid apicid\n"); + if (!check_apicid_present(apicid)) { + dprintk(XENLOG_WARNING, + "Present CPU has valid apicid\n"); continue; - } + } if (max_cpus <= cpucount+1) continue; @@ -1233,7 +1228,6 @@ void __devinit smp_prepare_boot_cpu(void per_cpu(cpu_state, smp_processor_id()) = CPU_ONLINE; } -#ifdef CONFIG_HOTPLUG_CPU static void remove_siblinginfo(int cpu) { @@ -1318,7 +1312,7 @@ void __cpu_die(unsigned int cpu) static int take_cpu_down(void *unused) { - return __cpu_disable(); + return __cpu_disable(); } int cpu_down(unsigned int cpu) @@ -1357,8 +1351,8 @@ int cpu_down(unsigned int cpu) cpu_mcheck_distribute_cmci(); out: - if (!err) - send_guest_global_virq(dom0, VIRQ_PCPU_STATE); + if (!err) + send_guest_global_virq(dom0, VIRQ_PCPU_STATE); spin_unlock(&cpu_add_remove_lock); return err; } @@ -1379,8 +1373,8 @@ int cpu_up(unsigned int cpu) goto out; out: - if (!err) - send_guest_global_virq(dom0, VIRQ_PCPU_STATE); + if (!err) + send_guest_global_virq(dom0, VIRQ_PCPU_STATE); spin_unlock(&cpu_add_remove_lock); return err; } @@ -1436,99 +1430,72 @@ void enable_nonboot_cpus(void) smpboot_restore_warm_reset_vector(); } -int prefill_possible_map(void) -{ - int i; - - for (i = 0; i < NR_CPUS; i++) - cpu_set(i, cpu_possible_map); - return 0; -} - int cpu_add(uint32_t apic_id, uint32_t acpi_id, uint32_t pxm) { - int cpu = -1; + int cpu = -1; #ifndef CONFIG_ACPI - return -ENOSYS; + return -ENOSYS; #endif - dprintk(XENLOG_DEBUG, "cpu_add apic_id %x acpi_id %x pxm %x\n", - apic_id, acpi_id, pxm); - - if ( acpi_id > MAX_MADT_ENTRIES || apic_id > MAX_APICS || pxm > 256 ) - return -EINVAL; - - /* Detect if the cpu has been added before */ - if ( x86_acpiid_to_apicid[acpi_id] != 0xff) - { - if (x86_acpiid_to_apicid[acpi_id] != apic_id) - return -EINVAL; - else - return -EEXIST; - } - - if ( physid_isset(apic_id, phys_cpu_present_map) ) - return -EEXIST; + dprintk(XENLOG_DEBUG, "cpu_add apic_id %x acpi_id %x pxm %x\n", + apic_id, acpi_id, pxm); + + if ( acpi_id > MAX_MADT_ENTRIES || apic_id > MAX_APICS || pxm > 256 ) + return -EINVAL; + + /* Detect if the cpu has been added before */ + if ( x86_acpiid_to_apicid[acpi_id] != 0xff) + { + if (x86_acpiid_to_apicid[acpi_id] != apic_id) + return -EINVAL; + else + return -EEXIST; + } + + if ( physid_isset(apic_id, phys_cpu_present_map) ) + return -EEXIST; spin_lock(&cpu_add_remove_lock); - cpu = mp_register_lapic(apic_id, 1); - - if (cpu < 0) - { - spin_unlock(&cpu_add_remove_lock); - return cpu; - } - - x86_acpiid_to_apicid[acpi_id] = apic_id; - - if ( !srat_disabled() ) - { - int node; - - node = setup_node(pxm); - if (node < 0) - { - dprintk(XENLOG_WARNING, "Setup node failed for pxm %x\n", pxm); - x86_acpiid_to_apicid[acpi_id] = 0xff; - mp_unregister_lapic(apic_id, cpu); - spin_unlock(&cpu_add_remove_lock); - return node; - } - apicid_to_node[apic_id] = node; - } - - srat_detect_node(cpu); - numa_add_cpu(cpu); - spin_unlock(&cpu_add_remove_lock); - dprintk(XENLOG_INFO, "Add CPU %x with index %x\n", apic_id, cpu); - return cpu; -} - - -#else /* ... !CONFIG_HOTPLUG_CPU */ -int __cpu_disable(void) -{ - return -ENOSYS; -} - -void __cpu_die(unsigned int cpu) -{ - /* We said "no" in __cpu_disable */ - BUG(); -} - -int cpu_add(uint32_t apic_id, uint32_t acpi_id, uint32_t pxm) -{ - return -ENOSYS; -} -#endif /* CONFIG_HOTPLUG_CPU */ + cpu = mp_register_lapic(apic_id, 1); + + if (cpu < 0) + { + spin_unlock(&cpu_add_remove_lock); + return cpu; + } + + x86_acpiid_to_apicid[acpi_id] = apic_id; + + if ( !srat_disabled() ) + { + int node; + + node = setup_node(pxm); + if (node < 0) + { + dprintk(XENLOG_WARNING, + "Setup node failed for pxm %x\n", pxm); + x86_acpiid_to_apicid[acpi_id] = 0xff; + mp_unregister_lapic(apic_id, cpu); + spin_unlock(&cpu_add_remove_lock); + return node; + } + apicid_to_node[apic_id] = node; + } + + srat_detect_node(cpu); + numa_add_cpu(cpu); + spin_unlock(&cpu_add_remove_lock); + dprintk(XENLOG_INFO, "Add CPU %x with index %x\n", apic_id, cpu); + return cpu; +} + int __devinit __cpu_up(unsigned int cpu) { -#ifdef CONFIG_HOTPLUG_CPU - int ret=0; + int ret = 0; /* * We do warm boot only on cpus that had booted earlier @@ -1543,7 +1510,6 @@ int __devinit __cpu_up(unsigned int cpu) if (ret) return -EIO; -#endif /* In case one didn't come up */ if (!cpu_isset(cpu, cpu_callin_map)) { @@ -1573,12 +1539,6 @@ void __init smp_cpus_done(unsigned int m #endif mtrr_save_state(); mtrr_aps_sync_end(); -#ifndef CONFIG_HOTPLUG_CPU - /* - * Disable executability of the SMP trampoline: - */ - set_kernel_exec((unsigned long)trampoline_base, trampoline_exec); -#endif } void __init smp_intr_init(void) @@ -1598,14 +1558,14 @@ void __init smp_intr_init(void) for (seridx = 0; seridx < 2; seridx++) { if ((irq = serial_irq(seridx)) < 0) continue; - irq_vector[irq] = FIRST_HIPRIORITY_VECTOR + seridx + 1; - per_cpu(vector_irq, cpu)[FIRST_HIPRIORITY_VECTOR + seridx + 1] = irq; - irq_cfg[irq].vector = FIRST_HIPRIORITY_VECTOR + seridx + 1; - irq_cfg[irq].domain = (cpumask_t)CPU_MASK_ALL; - } - - /* IPI for cleanuping vectors after irq move */ - set_intr_gate(IRQ_MOVE_CLEANUP_VECTOR, irq_move_cleanup_interrupt); + irq_vector[irq] = FIRST_HIPRIORITY_VECTOR + seridx + 1; + per_cpu(vector_irq, cpu)[FIRST_HIPRIORITY_VECTOR + seridx + 1] = irq; + irq_cfg[irq].vector = FIRST_HIPRIORITY_VECTOR + seridx + 1; + irq_cfg[irq].domain = (cpumask_t)CPU_MASK_ALL; + } + + /* IPI for cleanuping vectors after irq move */ + set_intr_gate(IRQ_MOVE_CLEANUP_VECTOR, irq_move_cleanup_interrupt); /* IPI for event checking. */ set_intr_gate(EVENT_CHECK_VECTOR, event_check_interrupt); diff -r 08a7d164db9a -r c983b21e75d2 xen/include/asm-x86/smp.h --- a/xen/include/asm-x86/smp.h Thu Nov 12 11:43:21 2009 +0000 +++ b/xen/include/asm-x86/smp.h Thu Nov 12 11:59:18 2009 +0000 @@ -58,7 +58,6 @@ DECLARE_PER_CPU(int, cpu_state); DECLARE_PER_CPU(int, cpu_state); extern spinlock_t(cpu_add_remove_lock); -#ifdef CONFIG_HOTPLUG_CPU #define cpu_is_offline(cpu) unlikely(!cpu_online(cpu)) extern int cpu_down(unsigned int cpu); extern int cpu_up(unsigned int cpu); @@ -66,13 +65,7 @@ extern void cpu_uninit(void); extern void cpu_uninit(void); extern void disable_nonboot_cpus(void); extern void enable_nonboot_cpus(void); -int prefill_possible_map(void); int cpu_add(uint32_t apic_id, uint32_t acpi_id, uint32_t pxm); -#else -static inline int cpu_is_offline(int cpu) {return 0;} -static inline void disable_nonboot_cpus(void) {} -static inline void enable_nonboot_cpus(void) {} -#endif /* * This function is needed by all SMP systems. It must _always_ be valid _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |