lkml.org 
[lkml]   [2005]   [May]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [patch 1/1] Do not enforce unique IO_APIC_ID for Xeon processors in EM64T mode (x86_64)
    On Wed, May 11, 2005 at 02:10:03AM -0500, Protasevich, Natalie wrote:
    > I tried the following patch:
    >
    > --- io_apic.c.orig 2005-05-11 03:42:40.000000000 -0400
    > +++ io_apic.c 2005-05-11 03:44:28.000000000 -0400
    > @@ -2427,12 +2427,13 @@ int __init io_apic_get_unique_id (int io
    > physid_mask_t tmp;
    > unsigned long flags;
    > int i = 0;
    > + static int no_ioapic_check;
    >
    > /* Don't check I/O APIC IDs for some xAPIC systems. They have
    > * no meaning without the serial APIC bus.
    > */
    >
    > - if (NO_IOAPIC_CHECK)
    > + if (no_ioapic_check)
    > return apic_id;
    >
    > /*
    > @@ -2449,6 +2450,13 @@ int __init io_apic_get_unique_id (int io
    > reg_00.raw = io_apic_read(ioapic, 0);
    > spin_unlock_irqrestore(&ioapic_lock, flags);
    >
    > + if ((boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) &&
    > + (boot_cpu_data.x86 == 15)) {
    > + if (reg_00.bits.delivery_type)
    > + no_ioapic_check = 1;
    > + return apic_id;
    > + }
    > +
    > if (apic_id >= get_physical_broadcast()) {
    > printk(KERN_WARNING "IOAPIC[%d]: Invalid apic_id %d,
    > trying "
    > "%d\n", ioapic, apic_id, reg_00.bits.ID);
    >
    >
    > To my surprise, it didn't work, and when I dumped the I/O APIC registers
    > it turned out that on ES7000 the parallel delivery bit wasn't set!
    >
    > <7>.... register #00: A4000000
    > <7>....... : physical APIC id: A4
    > <7>....... : Delivery Type: 0
    > <7>....... : LTS : 0
    > <7>.... register #01: 00170004
    > <7>....... : max redirection entries: 0017
    > <7>....... : PRQ implemented: 0
    > <7>....... : IO APIC version: 0004
    >
    > Version number was not 0x11 as James mentioned, it was 4, and I couldn't
    > find anything documented on the I/O xAPIC versioning.
    >
    > Looks like the need in the unique id can only be keyed of the local APIC
    > id, and probably it is a good idea to keep the NO_IOAPIC_CHECK for
    > subarchs that can override the heuristics?

    I prefer not to do that. How about a simple

    if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL && boot_cpu_data.x86 < 15)
    /* do uniqueness check */
    else
    /* don't do it */

    ?

    Rationale is that P4s and newer and systems not from Intel don't have serial
    APIC busses and don't need this uniqueness check.

    -Andi
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-05-11 13:26    [W:0.042 / U:64.820 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site