Commit d25e6b0b authored by H. Peter Anvin's avatar H. Peter Anvin

Merge branch 'x86/cleanups' into x86/trampoline

parents e44dea35 40ffa937
...@@ -54,7 +54,6 @@ extern struct clock_event_device *global_clock_event; ...@@ -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);
......
...@@ -32,6 +32,5 @@ extern void arch_unregister_cpu(int); ...@@ -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 */
...@@ -121,7 +121,6 @@ obj-$(CONFIG_SWIOTLB) += pci-swiotlb.o ...@@ -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
......
...@@ -343,7 +343,7 @@ void apbt_setup_secondary_clock(void) ...@@ -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
......
...@@ -162,7 +162,7 @@ int __init arch_early_irq_init(void) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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, ...@@ -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) {
......
...@@ -148,7 +148,7 @@ static void __cpuinit amd_k7_smp_check(struct cpuinfo_x86 *c) ...@@ -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;
/* /*
......
...@@ -665,7 +665,7 @@ static void __init early_identify_cpu(struct cpuinfo_x86 *c) ...@@ -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);
} }
......
...@@ -170,7 +170,7 @@ static void __cpuinit intel_smp_check(struct cpuinfo_x86 *c) ...@@ -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;
/* /*
......
...@@ -96,7 +96,6 @@ static void __init nvidia_bugs(int num, int slot, int func) ...@@ -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) ...@@ -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)
{ {
......
...@@ -36,7 +36,7 @@ static int init_one_level2_page(struct kimage *image, pgd_t *pgd, ...@@ -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, ...@@ -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);
......
/* 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);
...@@ -84,7 +84,7 @@ static int __init reboot_setup(char *str) ...@@ -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 */
......
...@@ -124,7 +124,6 @@ unsigned long max_pfn_mapped; ...@@ -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;
......
...@@ -253,7 +253,7 @@ void __init setup_per_cpu_areas(void) ...@@ -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);
} }
......
...@@ -1056,14 +1056,13 @@ int kvm_create_lapic(struct kvm_vcpu *vcpu) ...@@ -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,
......
...@@ -67,7 +67,7 @@ static __init void *alloc_low_page(void) ...@@ -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] ...@@ -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)
......
...@@ -293,7 +293,7 @@ static __ref void *alloc_low_page(unsigned long *phys) ...@@ -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;
} }
......
...@@ -54,8 +54,8 @@ static __init int find_northbridge(void) ...@@ -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) ...@@ -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);
......
...@@ -25,8 +25,6 @@ static inline u32 acpi_pm_read_early(void) ...@@ -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)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment