Merge branch 'x86/cleanups' into x86/trampoline

This commit is contained in:
H. Peter Anvin 2010-10-20 14:22:45 -07:00
commit d25e6b0b32
19 changed files with 21 additions and 99 deletions

View File

@ -54,7 +54,6 @@ extern struct clock_event_device *global_clock_event;
extern unsigned long apbt_quick_calibrate(void); extern unsigned long apbt_quick_calibrate(void);
extern int arch_setup_apbt_irqs(int irq, int trigger, int mask, int cpu); extern int arch_setup_apbt_irqs(int irq, int trigger, int mask, int cpu);
extern void apbt_setup_secondary_clock(void); extern void apbt_setup_secondary_clock(void);
extern unsigned int boot_cpu_id;
extern struct sfi_timer_table_entry *sfi_get_mtmr(int hint); extern struct sfi_timer_table_entry *sfi_get_mtmr(int hint);
extern void sfi_free_mtmr(struct sfi_timer_table_entry *mtmr); extern void sfi_free_mtmr(struct sfi_timer_table_entry *mtmr);

View File

@ -32,6 +32,5 @@ extern void arch_unregister_cpu(int);
DECLARE_PER_CPU(int, cpu_state); DECLARE_PER_CPU(int, cpu_state);
extern unsigned int boot_cpu_id;
#endif /* _ASM_X86_CPU_H */ #endif /* _ASM_X86_CPU_H */

View File

@ -121,7 +121,6 @@ obj-$(CONFIG_SWIOTLB) += pci-swiotlb.o
# 64 bit specific files # 64 bit specific files
ifeq ($(CONFIG_X86_64),y) ifeq ($(CONFIG_X86_64),y)
obj-$(CONFIG_X86_UV) += tlb_uv.o bios_uv.o uv_irq.o uv_sysfs.o uv_time.o obj-$(CONFIG_X86_UV) += tlb_uv.o bios_uv.o uv_irq.o uv_sysfs.o uv_time.o
obj-$(CONFIG_X86_PM_TIMER) += pmtimer_64.o
obj-$(CONFIG_AUDIT) += audit_64.o obj-$(CONFIG_AUDIT) += audit_64.o
obj-$(CONFIG_GART_IOMMU) += pci-gart_64.o aperture_64.o obj-$(CONFIG_GART_IOMMU) += pci-gart_64.o aperture_64.o

View File

@ -343,7 +343,7 @@ void apbt_setup_secondary_clock(void)
/* Don't register boot CPU clockevent */ /* Don't register boot CPU clockevent */
cpu = smp_processor_id(); cpu = smp_processor_id();
if (cpu == boot_cpu_id) if (!cpu)
return; return;
/* /*
* We need to calculate the scaled math multiplication factor for * We need to calculate the scaled math multiplication factor for

View File

@ -162,7 +162,7 @@ int __init arch_early_irq_init(void)
cfg = irq_cfgx; cfg = irq_cfgx;
count = ARRAY_SIZE(irq_cfgx); count = ARRAY_SIZE(irq_cfgx);
node= cpu_to_node(boot_cpu_id); node = cpu_to_node(0);
for (i = 0; i < count; i++) { for (i = 0; i < count; i++) {
desc = irq_to_desc(i); desc = irq_to_desc(i);
@ -1488,7 +1488,7 @@ static void __init setup_IO_APIC_irqs(void)
int notcon = 0; int notcon = 0;
struct irq_desc *desc; struct irq_desc *desc;
struct irq_cfg *cfg; struct irq_cfg *cfg;
int node = cpu_to_node(boot_cpu_id); int node = cpu_to_node(0);
apic_printk(APIC_VERBOSE, KERN_DEBUG "init IO_APIC IRQs\n"); apic_printk(APIC_VERBOSE, KERN_DEBUG "init IO_APIC IRQs\n");
@ -1553,7 +1553,7 @@ static void __init setup_IO_APIC_irqs(void)
void setup_IO_APIC_irq_extra(u32 gsi) void setup_IO_APIC_irq_extra(u32 gsi)
{ {
int apic_id = 0, pin, idx, irq; int apic_id = 0, pin, idx, irq;
int node = cpu_to_node(boot_cpu_id); int node = cpu_to_node(0);
struct irq_desc *desc; struct irq_desc *desc;
struct irq_cfg *cfg; struct irq_cfg *cfg;
@ -2932,7 +2932,7 @@ static inline void __init check_timer(void)
{ {
struct irq_desc *desc = irq_to_desc(0); struct irq_desc *desc = irq_to_desc(0);
struct irq_cfg *cfg = desc->chip_data; struct irq_cfg *cfg = desc->chip_data;
int node = cpu_to_node(boot_cpu_id); int node = cpu_to_node(0);
int apic1, pin1, apic2, pin2; int apic1, pin1, apic2, pin2;
unsigned long flags; unsigned long flags;
int no_pin1 = 0; int no_pin1 = 0;
@ -3286,7 +3286,7 @@ unsigned int create_irq_nr(unsigned int irq_want, int node)
int create_irq(void) int create_irq(void)
{ {
int node = cpu_to_node(boot_cpu_id); int node = cpu_to_node(0);
unsigned int irq_want; unsigned int irq_want;
int irq; int irq;
@ -3908,7 +3908,7 @@ static int __io_apic_set_pci_routing(struct device *dev, int irq,
if (dev) if (dev)
node = dev_to_node(dev); node = dev_to_node(dev);
else else
node = cpu_to_node(boot_cpu_id); node = cpu_to_node(0);
desc = irq_to_desc_alloc_node(irq, node); desc = irq_to_desc_alloc_node(irq, node);
if (!desc) { if (!desc) {

View File

@ -148,7 +148,7 @@ static void __cpuinit amd_k7_smp_check(struct cpuinfo_x86 *c)
{ {
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
/* calling is from identify_secondary_cpu() ? */ /* calling is from identify_secondary_cpu() ? */
if (c->cpu_index == boot_cpu_id) if (!c->cpu_index)
return; return;
/* /*

View File

@ -665,7 +665,7 @@ static void __init early_identify_cpu(struct cpuinfo_x86 *c)
this_cpu->c_early_init(c); this_cpu->c_early_init(c);
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
c->cpu_index = boot_cpu_id; c->cpu_index = 0;
#endif #endif
filter_cpuid_features(c, false); filter_cpuid_features(c, false);
} }

View File

@ -170,7 +170,7 @@ static void __cpuinit intel_smp_check(struct cpuinfo_x86 *c)
{ {
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
/* calling is from identify_secondary_cpu() ? */ /* calling is from identify_secondary_cpu() ? */
if (c->cpu_index == boot_cpu_id) if (!c->cpu_index)
return; return;
/* /*

View File

@ -96,7 +96,6 @@ static void __init nvidia_bugs(int num, int slot, int func)
} }
#if defined(CONFIG_ACPI) && defined(CONFIG_X86_IO_APIC)
#if defined(CONFIG_ACPI) && defined(CONFIG_X86_IO_APIC) #if defined(CONFIG_ACPI) && defined(CONFIG_X86_IO_APIC)
static u32 __init ati_ixp4x0_rev(int num, int slot, int func) static u32 __init ati_ixp4x0_rev(int num, int slot, int func)
{ {
@ -115,7 +114,6 @@ static u32 __init ati_ixp4x0_rev(int num, int slot, int func)
d &= 0xff; d &= 0xff;
return d; return d;
} }
#endif
static void __init ati_bugs(int num, int slot, int func) static void __init ati_bugs(int num, int slot, int func)
{ {

View File

@ -36,7 +36,7 @@ static int init_one_level2_page(struct kimage *image, pgd_t *pgd,
if (!page) if (!page)
goto out; goto out;
pud = (pud_t *)page_address(page); pud = (pud_t *)page_address(page);
memset(pud, 0, PAGE_SIZE); clear_page(pud);
set_pgd(pgd, __pgd(__pa(pud) | _KERNPG_TABLE)); set_pgd(pgd, __pgd(__pa(pud) | _KERNPG_TABLE));
} }
pud = pud_offset(pgd, addr); pud = pud_offset(pgd, addr);
@ -45,7 +45,7 @@ static int init_one_level2_page(struct kimage *image, pgd_t *pgd,
if (!page) if (!page)
goto out; goto out;
pmd = (pmd_t *)page_address(page); pmd = (pmd_t *)page_address(page);
memset(pmd, 0, PAGE_SIZE); clear_page(pmd);
set_pud(pud, __pud(__pa(pmd) | _KERNPG_TABLE)); set_pud(pud, __pud(__pa(pmd) | _KERNPG_TABLE));
} }
pmd = pmd_offset(pud, addr); pmd = pmd_offset(pud, addr);

View File

@ -1,69 +0,0 @@
/* Ported over from i386 by AK, original copyright was:
*
* (C) Dominik Brodowski <linux@brodo.de> 2003
*
* Driver to use the Power Management Timer (PMTMR) available in some
* southbridges as primary timing source for the Linux kernel.
*
* Based on parts of linux/drivers/acpi/hardware/hwtimer.c, timer_pit.c,
* timer_hpet.c, and on Arjan van de Ven's implementation for 2.4.
*
* This file is licensed under the GPL v2.
*
* Dropped all the hardware bug workarounds for now. Hopefully they
* are not needed on 64bit chipsets.
*/
#include <linux/jiffies.h>
#include <linux/kernel.h>
#include <linux/time.h>
#include <linux/init.h>
#include <linux/cpumask.h>
#include <linux/acpi_pmtmr.h>
#include <asm/io.h>
#include <asm/proto.h>
#include <asm/msr.h>
#include <asm/vsyscall.h>
static inline u32 cyc2us(u32 cycles)
{
/* The Power Management Timer ticks at 3.579545 ticks per microsecond.
* 1 / PM_TIMER_FREQUENCY == 0.27936511 =~ 286/1024 [error: 0.024%]
*
* Even with HZ = 100, delta is at maximum 35796 ticks, so it can
* easily be multiplied with 286 (=0x11E) without having to fear
* u32 overflows.
*/
cycles *= 286;
return (cycles >> 10);
}
static unsigned pmtimer_wait_tick(void)
{
u32 a, b;
for (a = b = inl(pmtmr_ioport) & ACPI_PM_MASK;
a == b;
b = inl(pmtmr_ioport) & ACPI_PM_MASK)
cpu_relax();
return b;
}
/* note: wait time is rounded up to one tick */
void pmtimer_wait(unsigned us)
{
u32 a, b;
a = pmtimer_wait_tick();
do {
b = inl(pmtmr_ioport);
cpu_relax();
} while (cyc2us(b - a) < us);
}
static int __init nopmtimer_setup(char *s)
{
pmtmr_ioport = 0;
return 1;
}
__setup("nopmtimer", nopmtimer_setup);

View File

@ -84,7 +84,7 @@ static int __init reboot_setup(char *str)
} }
/* we will leave sorting out the final value /* we will leave sorting out the final value
when we are ready to reboot, since we might not when we are ready to reboot, since we might not
have set up boot_cpu_id or smp_num_cpu */ have detected BSP APIC ID or smp_num_cpu */
break; break;
#endif /* CONFIG_SMP */ #endif /* CONFIG_SMP */

View File

@ -124,7 +124,6 @@ unsigned long max_pfn_mapped;
RESERVE_BRK(dmi_alloc, 65536); RESERVE_BRK(dmi_alloc, 65536);
#endif #endif
unsigned int boot_cpu_id __read_mostly;
static __initdata unsigned long _brk_start = (unsigned long)__brk_base; static __initdata unsigned long _brk_start = (unsigned long)__brk_base;
unsigned long _brk_end = (unsigned long)__brk_base; unsigned long _brk_end = (unsigned long)__brk_base;

View File

@ -253,7 +253,7 @@ void __init setup_per_cpu_areas(void)
* Up to this point, the boot CPU has been using .init.data * Up to this point, the boot CPU has been using .init.data
* area. Reload any changed state for the boot CPU. * area. Reload any changed state for the boot CPU.
*/ */
if (cpu == boot_cpu_id) if (!cpu)
switch_to_new_gdt(cpu); switch_to_new_gdt(cpu);
} }

View File

@ -1056,14 +1056,13 @@ int kvm_create_lapic(struct kvm_vcpu *vcpu)
vcpu->arch.apic = apic; vcpu->arch.apic = apic;
apic->regs_page = alloc_page(GFP_KERNEL); apic->regs_page = alloc_page(GFP_KERNEL|__GFP_ZERO);
if (apic->regs_page == NULL) { if (apic->regs_page == NULL) {
printk(KERN_ERR "malloc apic regs error for vcpu %x\n", printk(KERN_ERR "malloc apic regs error for vcpu %x\n",
vcpu->vcpu_id); vcpu->vcpu_id);
goto nomem_free_apic; goto nomem_free_apic;
} }
apic->regs = page_address(apic->regs_page); apic->regs = page_address(apic->regs_page);
memset(apic->regs, 0, PAGE_SIZE);
apic->vcpu = vcpu; apic->vcpu = vcpu;
hrtimer_init(&apic->lapic_timer.timer, CLOCK_MONOTONIC, hrtimer_init(&apic->lapic_timer.timer, CLOCK_MONOTONIC,

View File

@ -67,7 +67,7 @@ static __init void *alloc_low_page(void)
panic("alloc_low_page: ran out of memory"); panic("alloc_low_page: ran out of memory");
adr = __va(pfn * PAGE_SIZE); adr = __va(pfn * PAGE_SIZE);
memset(adr, 0, PAGE_SIZE); clear_page(adr);
return adr; return adr;
} }
@ -558,7 +558,7 @@ char swsusp_pg_dir[PAGE_SIZE]
static inline void save_pg_dir(void) static inline void save_pg_dir(void)
{ {
memcpy(swsusp_pg_dir, swapper_pg_dir, PAGE_SIZE); copy_page(swsusp_pg_dir, swapper_pg_dir);
} }
#else /* !CONFIG_ACPI_SLEEP */ #else /* !CONFIG_ACPI_SLEEP */
static inline void save_pg_dir(void) static inline void save_pg_dir(void)

View File

@ -293,7 +293,7 @@ static __ref void *alloc_low_page(unsigned long *phys)
panic("alloc_low_page: ran out of memory"); panic("alloc_low_page: ran out of memory");
adr = early_memremap(pfn * PAGE_SIZE, PAGE_SIZE); adr = early_memremap(pfn * PAGE_SIZE, PAGE_SIZE);
memset(adr, 0, PAGE_SIZE); clear_page(adr);
*phys = pfn * PAGE_SIZE; *phys = pfn * PAGE_SIZE;
return adr; return adr;
} }

View File

@ -54,8 +54,8 @@ static __init int find_northbridge(void)
static __init void early_get_boot_cpu_id(void) static __init void early_get_boot_cpu_id(void)
{ {
/* /*
* need to get boot_cpu_id so can use that to create apicid_to_node * need to get the APIC ID of the BSP so can use that to
* in k8_scan_nodes() * create apicid_to_node in k8_scan_nodes()
*/ */
#ifdef CONFIG_X86_MPPARSE #ifdef CONFIG_X86_MPPARSE
/* /*
@ -212,7 +212,7 @@ int __init k8_scan_nodes(void)
bits = boot_cpu_data.x86_coreid_bits; bits = boot_cpu_data.x86_coreid_bits;
cores = (1<<bits); cores = (1<<bits);
apicid_base = 0; apicid_base = 0;
/* need to get boot_cpu_id early for system with apicid lifting */ /* get the APIC ID of the BSP early for systems with apicid lifting */
early_get_boot_cpu_id(); early_get_boot_cpu_id();
if (boot_cpu_physical_apicid > 0) { if (boot_cpu_physical_apicid > 0) {
pr_info("BSP APIC ID: %02x\n", boot_cpu_physical_apicid); pr_info("BSP APIC ID: %02x\n", boot_cpu_physical_apicid);

View File

@ -25,8 +25,6 @@ static inline u32 acpi_pm_read_early(void)
return acpi_pm_read_verified() & ACPI_PM_MASK; return acpi_pm_read_verified() & ACPI_PM_MASK;
} }
extern void pmtimer_wait(unsigned);
#else #else
static inline u32 acpi_pm_read_early(void) static inline u32 acpi_pm_read_early(void)