• Benjamin Romer's avatar
    [PATCH] x86-64: update IO-APIC dest field to 8-bit for xAPIC · ee4eff6f
    Benjamin Romer authored
    On the Unisys ES7000/ONE system, we encountered a problem where performing
    a kexec reboot or dump on any cell other than cell 0 causes the system
    timer to stop working, resulting in a hang during timer calibration in the
    new kernel.
    
    We traced the problem to one line of code in disable_IO_APIC(), which needs
    to restore the timer's IO-APIC configuration before rebooting.  The code is
    currently using the 4-bit physical destination field, rather than using the
    8-bit logical destination field, and it cuts off the upper 4 bits of the
    timer's APIC ID.  If we change this to use the logical destination field,
    the timer works and we can kexec on the upper cells.  This was tested on
    two different cells (0 and 2) in an ES7000/ONE system.
    
    For reference, the relevant Intel xAPIC spec is kept at
    ftp://download.intel.com/design/chipsets/e8501/datashts/30962001.pdf,
    specifically on page 334.
    Signed-off-by: default avatarBenjamin M Romer <benjamin.romer@unisys.com>
    Signed-off-by: default avatarAndi Kleen <ak@suse.de>
    Cc: Andi Kleen <ak@suse.de>
    Cc: "Eric W. Biederman" <ebiederm@xmission.com>
    Cc: Vivek Goyal <vgoyal@in.ibm.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    ee4eff6f
io_apic.c 53.3 KB