lkml.org 
[lkml]   [2019]   [Oct]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 066/185] x86/apic: Soft disable APIC before initializing it
    Date
    From: Thomas Gleixner <tglx@linutronix.de>

    [ Upstream commit 2640da4cccf5cc613bf26f0998b9e340f4b5f69c ]

    If the APIC was already enabled on entry of setup_local_APIC() then
    disabling it soft via the SPIV register makes a lot of sense.

    That masks all LVT entries and brings it into a well defined state.

    Otherwise previously enabled LVTs which are not touched in the setup
    function stay unmasked and might surprise the just booting kernel.

    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lkml.kernel.org/r/20190722105219.068290579@linutronix.de
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/x86/kernel/apic/apic.c | 8 ++++++++
    1 file changed, 8 insertions(+)

    diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
    index f8f9cfded97d3..ea2de324ab021 100644
    --- a/arch/x86/kernel/apic/apic.c
    +++ b/arch/x86/kernel/apic/apic.c
    @@ -1384,6 +1384,14 @@ void setup_local_APIC(void)
    return;
    }

    + /*
    + * If this comes from kexec/kcrash the APIC might be enabled in
    + * SPIV. Soft disable it before doing further initialization.
    + */
    + value = apic_read(APIC_SPIV);
    + value &= ~APIC_SPIV_APIC_ENABLED;
    + apic_write(APIC_SPIV, value);
    +
    #ifdef CONFIG_X86_32
    /* Pound the ESR really hard over the head with a big hammer - mbligh */
    if (lapic_is_integrated() && apic->disable_esr) {
    --
    2.20.1


    \
     
     \ /
      Last update: 2019-10-03 19:33    [W:4.231 / U:0.064 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site