lkml.org 
[lkml]   [2012]   [Apr]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[ 66/78] Revert "x86/ioapic: Add register level checks to detect bogus io-apic entries"
    3.3-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    This reverts commit a998dc2fa76f496d2944f0602b920d1d10d7467d
    [73d63d038ee9f769f5e5b46792d227fe20e442c5 upstream]

    It causes problems, so needs to be reverted from 3.2-stable for now.

    Reported-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Cc: Jon Dufresne <jon@jondufresne.org>
    Cc: Suresh Siddha <suresh.b.siddha@intel.com>
    Cc: <yinghai@kernel.org>
    Cc: Josh Boyer <jwboyer@redhat.com>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: Teck Choon Giam <giamteckchoon@gmail.com>
    Cc: Ben Guthro <ben@guthro.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    arch/x86/kernel/apic/io_apic.c | 40 ++++++++--------------------------------
    1 file changed, 8 insertions(+), 32 deletions(-)

    --- a/arch/x86/kernel/apic/io_apic.c
    +++ b/arch/x86/kernel/apic/io_apic.c
    @@ -3967,36 +3967,18 @@ int mp_find_ioapic_pin(int ioapic, u32 g
    static __init int bad_ioapic(unsigned long address)
    {
    if (nr_ioapics >= MAX_IO_APICS) {
    - pr_warn("WARNING: Max # of I/O APICs (%d) exceeded (found %d), skipping\n",
    - MAX_IO_APICS, nr_ioapics);
    + printk(KERN_WARNING "WARNING: Max # of I/O APICs (%d) exceeded "
    + "(found %d), skipping\n", MAX_IO_APICS, nr_ioapics);
    return 1;
    }
    if (!address) {
    - pr_warn("WARNING: Bogus (zero) I/O APIC address found in table, skipping!\n");
    + printk(KERN_WARNING "WARNING: Bogus (zero) I/O APIC address"
    + " found in table, skipping!\n");
    return 1;
    }
    return 0;
    }

    -static __init int bad_ioapic_register(int idx)
    -{
    - union IO_APIC_reg_00 reg_00;
    - union IO_APIC_reg_01 reg_01;
    - union IO_APIC_reg_02 reg_02;
    -
    - reg_00.raw = io_apic_read(idx, 0);
    - reg_01.raw = io_apic_read(idx, 1);
    - reg_02.raw = io_apic_read(idx, 2);
    -
    - if (reg_00.raw == -1 && reg_01.raw == -1 && reg_02.raw == -1) {
    - pr_warn("I/O APIC 0x%x registers return all ones, skipping!\n",
    - mpc_ioapic_addr(idx));
    - return 1;
    - }
    -
    - return 0;
    -}
    -
    void __init mp_register_ioapic(int id, u32 address, u32 gsi_base)
    {
    int idx = 0;
    @@ -4013,12 +3995,6 @@ void __init mp_register_ioapic(int id, u
    ioapics[idx].mp_config.apicaddr = address;

    set_fixmap_nocache(FIX_IO_APIC_BASE_0 + idx, address);
    -
    - if (bad_ioapic_register(idx)) {
    - clear_fixmap(FIX_IO_APIC_BASE_0 + idx);
    - return;
    - }
    -
    ioapics[idx].mp_config.apicid = io_apic_unique_id(id);
    ioapics[idx].mp_config.apicver = io_apic_get_version(idx);

    @@ -4039,10 +4015,10 @@ void __init mp_register_ioapic(int id, u
    if (gsi_cfg->gsi_end >= gsi_top)
    gsi_top = gsi_cfg->gsi_end + 1;

    - pr_info("IOAPIC[%d]: apic_id %d, version %d, address 0x%x, GSI %d-%d\n",
    - idx, mpc_ioapic_id(idx),
    - mpc_ioapic_ver(idx), mpc_ioapic_addr(idx),
    - gsi_cfg->gsi_base, gsi_cfg->gsi_end);
    + printk(KERN_INFO "IOAPIC[%d]: apic_id %d, version %d, address 0x%x, "
    + "GSI %d-%d\n", idx, mpc_ioapic_id(idx),
    + mpc_ioapic_ver(idx), mpc_ioapic_addr(idx),
    + gsi_cfg->gsi_base, gsi_cfg->gsi_end);

    nr_ioapics++;
    }



    \
     
     \ /
      Last update: 2012-04-12 01:37    [W:0.031 / U:16.064 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site