x86/init: Add intr_mode_init to x86_init_ops
X86 and XEN initialize interrupt delivery mode in different way. To avoid conditionals, add a new x86_init_ops function which defaults to the standard function and can be overridden by the early XEN platform code. [ tglx: Folded the XEN part which was a separate patch to preserve bisectability ] Signed-off-by: Dou Liyang <douly.fnst@cn.fujitsu.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: yinghai@kernel.org Cc: bhe@redhat.com Link: https://lkml.kernel.org/r/1505293975-26005-10-git-send-email-douly.fnst@cn.fujitsu.com
This commit is contained in:
Родитель
ca7c6076ba
Коммит
34fba3e6b1
|
@ -50,11 +50,13 @@ struct x86_init_resources {
|
|||
* are set up.
|
||||
* @intr_init: interrupt init code
|
||||
* @trap_init: platform specific trap setup
|
||||
* @intr_mode_init: interrupt delivery mode setup
|
||||
*/
|
||||
struct x86_init_irqs {
|
||||
void (*pre_vector_init)(void);
|
||||
void (*intr_init)(void);
|
||||
void (*trap_init)(void);
|
||||
void (*intr_mode_init)(void);
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -2423,7 +2423,7 @@ void __init apic_bsp_setup(bool upmode)
|
|||
#ifdef CONFIG_UP_LATE_INIT
|
||||
void __init up_late_init(void)
|
||||
{
|
||||
apic_intr_mode_init();
|
||||
x86_init.irqs.intr_mode_init();
|
||||
|
||||
if (apic_intr_mode == APIC_PIC)
|
||||
return;
|
||||
|
|
|
@ -1296,7 +1296,7 @@ void __init native_smp_prepare_cpus(unsigned int max_cpus)
|
|||
|
||||
set_cpu_sibling_map(0);
|
||||
|
||||
apic_intr_mode_init();
|
||||
x86_init.irqs.intr_mode_init();
|
||||
|
||||
smp_sanity_check();
|
||||
|
||||
|
|
|
@ -55,6 +55,7 @@ struct x86_init_ops x86_init __initdata = {
|
|||
.pre_vector_init = init_ISA_irqs,
|
||||
.intr_init = native_init_IRQ,
|
||||
.trap_init = x86_init_noop,
|
||||
.intr_mode_init = apic_intr_mode_init
|
||||
},
|
||||
|
||||
.oem = {
|
||||
|
|
|
@ -1230,6 +1230,7 @@ asmlinkage __visible void __init xen_start_kernel(void)
|
|||
x86_platform.get_nmi_reason = xen_get_nmi_reason;
|
||||
|
||||
x86_init.resources.memory_setup = xen_memory_setup;
|
||||
x86_init.irqs.intr_mode_init = x86_init_noop;
|
||||
x86_init.oem.arch_setup = xen_arch_setup;
|
||||
x86_init.oem.banner = xen_banner;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче