lkml.org 
[lkml]   [2008]   [Jun]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH 11/15] x86: move enabling of io_apic to prepare_cpus
    Maciej W. Rozycki wrote:
    > On Mon, 9 Jun 2008, Glauber Costa wrote:
    >
    >> Do it, instead of keeping in io_apic_32.c. This is the way x86_64
    >> already does.
    >
    > This change looks wrong -- is native_smp_prepare_cpus() at all run on
    > !CONFIG_SMP? I don't think so. You have to do this differently.
    >
    > Maciej

    How about this one instead?

    This one does enable_IO_APIC in the init_uniprocessor too, and should
    account for the !smp case.
    From 87f8366012e1dc3cf7212e241b0aa552d7825338 Mon Sep 17 00:00:00 2001
    From: Glauber Costa <gcosta@redhat.com>
    Date: Wed, 28 May 2008 17:04:12 -0300
    Subject: [PATCH] x86: move enabling of io_apic to prepare_cpus

    Do it, instead of keeping in io_apic_32.c. This is the way x86_64 already does.

    Signed-off-by: Glauber Costa <gcosta@redhat.com>
    ---
    arch/x86/kernel/apic_32.c | 3 +++
    arch/x86/kernel/io_apic_32.c | 4 ++--
    arch/x86/kernel/smpboot.c | 2 +-
    include/asm-x86/hw_irq.h | 2 --
    4 files changed, 6 insertions(+), 5 deletions(-)

    diff --git a/arch/x86/kernel/apic_32.c b/arch/x86/kernel/apic_32.c
    index fa8cf79..8385dc6 100644
    --- a/arch/x86/kernel/apic_32.c
    +++ b/arch/x86/kernel/apic_32.c
    @@ -1273,6 +1273,9 @@ int __init APIC_init_uniprocessor(void)
    setup_local_APIC();

    #ifdef CONFIG_X86_IO_APIC
    + if (!skip_ioapic_setup && nr_ioapics)
    + enable_IO_APIC();
    +
    if (!smp_found_config || skip_ioapic_setup || !nr_ioapics)
    #endif
    localise_nmi_watchdog();
    diff --git a/arch/x86/kernel/io_apic_32.c b/arch/x86/kernel/io_apic_32.c
    index 7fc071f..fa4f0a0 100644
    --- a/arch/x86/kernel/io_apic_32.c
    +++ b/arch/x86/kernel/io_apic_32.c
    @@ -1606,7 +1606,7 @@ void /*__init*/ print_PIC(void)

    #endif /* 0 */

    -static void __init enable_IO_APIC(void)
    +void __init enable_IO_APIC(void)
    {
    union IO_APIC_reg_01 reg_01;
    int i8259_apic, i8259_pin;
    @@ -2295,7 +2295,7 @@ void __init setup_IO_APIC(void)
    for (i = first_system_vector; i < NR_VECTORS; i++)
    set_bit(i, used_vectors);

    - enable_IO_APIC();
    + /* calling enable_IO_APIC() is moved to setup_local_APIC for BP */

    if (acpi_ioapic)
    io_apic_irqs = ~0; /* all IRQs go through IOAPIC */
    diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
    index f5ac5b2..e537c7b 100644
    --- a/arch/x86/kernel/smpboot.c
    +++ b/arch/x86/kernel/smpboot.c
    @@ -1175,7 +1175,7 @@ void __init native_smp_prepare_cpus(unsigned int max_cpus)
    */
    setup_local_APIC();

    -#ifdef CONFIG_X86_64
    +#ifdef CONFIG_X86_IO_APIC
    /*
    * Enable IO APIC before setting up error vector
    */
    diff --git a/include/asm-x86/hw_irq.h b/include/asm-x86/hw_irq.h
    index 18f067c..4c81d1b 100644
    --- a/include/asm-x86/hw_irq.h
    +++ b/include/asm-x86/hw_irq.h
    @@ -67,9 +67,7 @@ extern void print_IO_APIC(void);
    extern int IO_APIC_get_PCI_irq_vector(int bus, int slot, int fn);
    extern void setup_ioapic_dest(void);

    -#ifdef CONFIG_X86_64
    extern void enable_IO_APIC(void);
    -#endif

    /* IPI functions */
    extern void send_IPI_self(int vector);
    --
    1.5.4.5
    \
     
     \ /
      Last update: 2008-06-09 21:51    [W:0.231 / U:90.984 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site