Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 163719
b: refs/heads/master
c: 736deca
h: refs/heads/master
i:
  163717: 48f7b59
  163715: aad3b9b
  163711: cd5a55b
v: v3
  • Loading branch information
Thomas Gleixner committed Aug 31, 2009
1 parent 68aee9e commit 0ceb103
Show file tree
Hide file tree
Showing 12 changed files with 43 additions and 29 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: f1d7062a235d057e5d85ed2860bef609e0160cde
refs/heads/master: 736decac643e8982655e22ac7f0e5e61c5b7f9bd
5 changes: 2 additions & 3 deletions trunk/arch/x86/include/asm/apic.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,6 @@ static inline void default_inquire_remote_apic(int apicid)
*/
#ifdef CONFIG_PARAVIRT
#include <asm/paravirt.h>
#else
#define setup_boot_clock setup_boot_APIC_clock
#define setup_secondary_clock setup_secondary_APIC_clock
#endif

#ifdef CONFIG_X86_64
Expand Down Expand Up @@ -245,6 +242,8 @@ static inline void lapic_shutdown(void) { }
static inline void init_apic_mappings(void) { }
static inline void disable_local_APIC(void) { }
static inline void apic_disable(void) { }
# define setup_boot_APIC_clock x86_init_noop
# define setup_secondary_APIC_clock x86_init_noop
#endif /* !CONFIG_X86_LOCAL_APIC */

#ifdef CONFIG_X86_64
Expand Down
12 changes: 0 additions & 12 deletions trunk/arch/x86/include/asm/paravirt.h
Original file line number Diff line number Diff line change
Expand Up @@ -333,18 +333,6 @@ static inline void slow_down_io(void)
#endif
}

#ifdef CONFIG_X86_LOCAL_APIC
static inline void setup_boot_clock(void)
{
PVOP_VCALL0(pv_apic_ops.setup_boot_clock);
}

static inline void setup_secondary_clock(void)
{
PVOP_VCALL0(pv_apic_ops.setup_secondary_clock);
}
#endif

#ifdef CONFIG_SMP
static inline void startup_ipi_hook(int phys_apicid, unsigned long start_eip,
unsigned long start_esp)
Expand Down
3 changes: 0 additions & 3 deletions trunk/arch/x86/include/asm/paravirt_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -218,9 +218,6 @@ struct pv_irq_ops {

struct pv_apic_ops {
#ifdef CONFIG_X86_LOCAL_APIC
void (*setup_boot_clock)(void);
void (*setup_secondary_clock)(void);

void (*startup_ipi_hook)(int phys_apicid,
unsigned long start_eip,
unsigned long start_esp);
Expand Down
19 changes: 19 additions & 0 deletions trunk/arch/x86/include/asm/x86_init.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,15 @@ struct x86_init_paging {
void (*pagetable_setup_done)(pgd_t *base);
};

/**
* struct x86_init_timers - platform specific timer setup
* @setup_perpcu_clockev: set up the per cpu clock event device for the
* boot cpu
*/
struct x86_init_timers {
void (*setup_percpu_clockev)(void);
};

/**
* struct x86_init_ops - functions for platform specific setup
*
Expand All @@ -88,9 +97,19 @@ struct x86_init_ops {
struct x86_init_irqs irqs;
struct x86_init_oem oem;
struct x86_init_paging paging;
struct x86_init_timers timers;
};

/**
* struct x86_cpuinit_ops - platform specific cpu hotplug setups
* @setup_percpu_clockev: set up the per cpu clock event device
*/
struct x86_cpuinit_ops {
void (*setup_percpu_clockev)(void);
};

extern struct x86_init_ops x86_init;
extern struct x86_cpuinit_ops x86_cpuinit;

extern void x86_init_noop(void);
extern void x86_init_uint_noop(unsigned int unused);
Expand Down
3 changes: 2 additions & 1 deletion trunk/arch/x86/kernel/apic/apic.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
#include <linux/mm.h>

#include <asm/perf_counter.h>
#include <asm/x86_init.h>
#include <asm/pgalloc.h>
#include <asm/atomic.h>
#include <asm/mpspec.h>
Expand Down Expand Up @@ -1701,7 +1702,7 @@ int __init APIC_init_uniprocessor(void)
localise_nmi_watchdog();
#endif

setup_boot_clock();
x86_init.timers.setup_percpu_clockev();
#ifdef CONFIG_X86_64
check_nmi_watchdog();
#endif
Expand Down
5 changes: 4 additions & 1 deletion trunk/arch/x86/kernel/kvmclock.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
#include <asm/msr.h>
#include <asm/apic.h>
#include <linux/percpu.h>

#include <asm/x86_init.h>
#include <asm/reboot.h>

#define KVM_SCALE 22
Expand Down Expand Up @@ -187,7 +189,8 @@ void __init kvmclock_init(void)
pv_time_ops.sched_clock = kvm_clock_read;
pv_time_ops.get_tsc_khz = kvm_get_tsc_khz;
#ifdef CONFIG_X86_LOCAL_APIC
pv_apic_ops.setup_secondary_clock = kvm_setup_secondary_clock;
x86_cpuinit.setup_percpu_clockev =
kvm_setup_secondary_clock;
#endif
#ifdef CONFIG_SMP
smp_ops.smp_prepare_boot_cpu = kvm_smp_prepare_boot_cpu;
Expand Down
2 changes: 0 additions & 2 deletions trunk/arch/x86/kernel/paravirt.c
Original file line number Diff line number Diff line change
Expand Up @@ -387,8 +387,6 @@ struct pv_cpu_ops pv_cpu_ops = {

struct pv_apic_ops pv_apic_ops = {
#ifdef CONFIG_X86_LOCAL_APIC
.setup_boot_clock = setup_boot_APIC_clock,
.setup_secondary_clock = setup_secondary_APIC_clock,
.startup_ipi_hook = paravirt_nop,
#endif
};
Expand Down
4 changes: 2 additions & 2 deletions trunk/arch/x86/kernel/smpboot.c
Original file line number Diff line number Diff line change
Expand Up @@ -323,7 +323,7 @@ notrace static void __cpuinit start_secondary(void *unused)
/* enable local interrupts */
local_irq_enable();

setup_secondary_clock();
x86_cpuinit.setup_percpu_clockev();

wmb();
cpu_idle();
Expand Down Expand Up @@ -1112,7 +1112,7 @@ void __init native_smp_prepare_cpus(unsigned int max_cpus)

printk(KERN_INFO "CPU%d: ", 0);
print_cpu_info(&cpu_data(0));
setup_boot_clock();
x86_init.timers.setup_percpu_clockev();

if (is_uv_system())
uv_system_init();
Expand Down
4 changes: 2 additions & 2 deletions trunk/arch/x86/kernel/vmi_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -821,8 +821,8 @@ static inline int __init activate_vmi(void)
pv_time_ops.get_wallclock = vmi_get_wallclock;
pv_time_ops.set_wallclock = vmi_set_wallclock;
#ifdef CONFIG_X86_LOCAL_APIC
pv_apic_ops.setup_boot_clock = vmi_time_bsp_init;
pv_apic_ops.setup_secondary_clock = vmi_time_ap_init;
x86_init.timers.setup_percpu_clockev = vmi_time_bsp_init;
x86_cpuinit.setup_percpu_clockev = vmi_time_ap_init;
#endif
pv_time_ops.sched_clock = vmi_sched_clock;
pv_time_ops.get_tsc_khz = vmi_tsc_khz;
Expand Down
9 changes: 9 additions & 0 deletions trunk/arch/x86/kernel/x86_init.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include <asm/paravirt.h>
#include <asm/mpspec.h>
#include <asm/setup.h>
#include <asm/apic.h>
#include <asm/e820.h>
#include <asm/irq.h>

Expand Down Expand Up @@ -54,4 +55,12 @@ struct __initdata x86_init_ops x86_init = {
.pagetable_setup_start = native_pagetable_setup_start,
.pagetable_setup_done = native_pagetable_setup_done,
},

.timers = {
.setup_percpu_clockev = setup_boot_APIC_clock,
},
};

__cpuinitdata struct x86_cpuinit_ops x86_cpuinit = {
.setup_percpu_clockev = setup_secondary_APIC_clock,
};
4 changes: 2 additions & 2 deletions trunk/arch/x86/xen/enlighten.c
Original file line number Diff line number Diff line change
Expand Up @@ -912,8 +912,6 @@ static const struct pv_cpu_ops xen_cpu_ops __initdata = {

static const struct pv_apic_ops xen_apic_ops __initdata = {
#ifdef CONFIG_X86_LOCAL_APIC
.setup_boot_clock = paravirt_nop,
.setup_secondary_clock = paravirt_nop,
.startup_ipi_hook = paravirt_nop,
#endif
};
Expand Down Expand Up @@ -979,6 +977,8 @@ asmlinkage void __init xen_start_kernel(void)
x86_init.resources.memory_setup = xen_memory_setup;
x86_init.oem.arch_setup = xen_arch_setup;
x86_init.oem.banner = xen_banner;
x86_init.timers.setup_percpu_clockev = x86_init_noop;
x86_cpuinit.setup_percpu_clockev = x86_init_noop;

#ifdef CONFIG_X86_64
/*
Expand Down

0 comments on commit 0ceb103

Please sign in to comment.