• Yinghai Lu's avatar
    x86: irq: Get correct available vectors for cpu disable · ac2a5539
    Yinghai Lu authored
    check_irq_vectors_for_cpu_disable() can overestimate the number of
    available interrupt vectors, so the check for cpu down succeeds, but
    the actual cpu removal fails.
    
    It iterates from FIRST_EXTERNAL_VECTOR to NR_VECTORS, which is wrong
    because the systems vectors are not taken into account.
    
    Limit the search to first_system_vector instead of NR_VECTORS.
    
    The second indicator for vector availability the used_vectors bitmap
    is not taken into account at all. So system vectors,
    e.g. IA32_SYSCALL_VECTOR (0x80) and IRQ_MOVE_CLEANUP_VECTOR (0x20),
    are accounted as available.
    
    Add a check for the used_vectors bitmap and do not account vectors
    which are marked there.
    
    [ tglx: Simplified code. Rewrote changelog and code comments. ]
    Signed-off-by: default avatarYinghai Lu <yinghai@kernel.org>
    Acked-by: default avatarPrarit Bhargava <prarit@redhat.com>
    Cc: Seiji Aguchi <seiji.aguchi@hds.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: K. Y. Srinivasan <kys@microsoft.com>
    Cc: Steven Rostedt (Red Hat) <rostedt@goodmis.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: "Elliott, Robert (Server Storage)" <Elliott@hp.com>
    Cc: x86@kernel.org
    Link: http://lkml.kernel.org/r/1400160305-17774-2-git-send-email-prarit@redhat.comSigned-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    ac2a5539
irq.c 12.4 KB