Merge branch 'x86/cleanups' into x86/trampoline
This commit is contained in:
commit
d25e6b0b32
|
@ -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);
|
||||||
|
|
||||||
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
|
||||||
# 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)
|
||||||
|
|
||||||
/* 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)
|
||||||
|
|
||||||
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) {
|
||||||
|
|
|
@ -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)
|
||||||
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)
|
||||||
{
|
{
|
||||||
#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)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
|
|
@ -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;
|
||||||
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)
|
||||||
* 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)
|
||||||
|
|
||||||
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)
|
||||||
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)
|
||||||
|
|
|
@ -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)
|
||||||
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);
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue