• Thomas Gleixner's avatar
    x86/vector: Use correct per cpu variable in free_moved_vector() · 0696d059
    Thomas Gleixner authored
    free_moved_vector() accesses the per cpu vector array with this_cpu_write()
    to clear the vector. The function has two call sites:
    
     1) The vector cleanup IPI
     2) The force_complete_move() code path
    
    For #1 this_cpu_write() is correct as it runs on the CPU on which the
    vector needs to be freed.
    
    For #2 this_cpu_write() is wrong because the function is called from an
    outgoing CPU which is not necessarily the CPU on which the previous vector
    needs to be freed. As a result it sets the vector on the outgoing CPU to
    NULL, which is pointless as that CPU does not handle interrupts
    anymore. What's worse is that it leaves the vector on the previous target
    CPU in place which later on triggers the BUG_ON(vector) in the vector
    allocation code when the vector gets reused. That's possible because the
    bitmap allocator entry of that CPU is freed correctly.
    
    Always use the CPU to which the vector was associated and clear the vector
    entry on that CPU. Fixup the tracepoint as well so it tracks on which CPU
    the vector gets removed.
    
    Fixes: 69cde000 ("x86/vector: Use matrix allocator for vector assignment")
    Reported-by: default avatarPetri Latvala <petri.latvala@intel.com>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: Juergen Gross <jgross@suse.com>
    Cc: Tony Luck <tony.luck@intel.com>
    Cc: Len Brown <lenb@kernel.org>
    Cc: Marc Zyngier <marc.zyngier@arm.com>
    Cc: Joerg Roedel <joro@8bytes.org>
    Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Rui Zhang <rui.zhang@intel.com>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
    Cc: "K. Y. Srinivasan" <kys@microsoft.com>
    Cc: Arjan van de Ven <arjan@linux.intel.com>
    Cc: Alok Kataria <akataria@vmware.com>
    Cc: Dan Williams <dan.j.williams@intel.com>
    Cc: Yu Chen <yu.c.chen@intel.com>
    Link: https://lkml.kernel.org/r/alpine.DEB.2.20.1710161614430.1973@nanos
    0696d059
vector.c 31.2 KB