linux_dsm_epyc7002/arch/x86/kernel/apic
Thomas Gleixner fdba46ffb4 x86/apic: Get rid of multi CPU affinity
Setting the interrupt affinity of a single interrupt to multiple CPUs has a
dubious value.

 1) This only works on machines where the APIC uses logical destination
    mode. If the APIC uses physical destination mode then it is already
    restricted to a single CPU

 2) Experiments have shown, that the benefit of multi CPU affinity is close
    to zero and in some test even worse than setting the affinity to a
    single CPU.

    The reason for this is that the delivery targets the APIC with the
    lowest ID first and only if that APIC is busy (servicing an interrupt,
    i.e. ISR is not empty) it hands it over to the next APIC. In the
    conducted tests the vast majority of interrupts ends up on the APIC
    with the lowest ID anyway, so there is no natural spreading of the
    interrupts possible.

Supporting multi CPU affinities adds a lot of complexity to the code, which
can turn the allocation search into a worst case of

    nr_vectors * nr_online_cpus * nr_bits_in_target_mask

As a first step disable it by restricting the vector search to a single
CPU.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Juergen Gross <jgross@suse.com>
Tested-by: Yu Chen <yu.c.chen@intel.com>
Acked-by: Juergen Gross <jgross@suse.com>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Marc Zyngier <marc.zyngier@arm.com>
Cc: Alok Kataria <akataria@vmware.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: Borislav Petkov <bp@alien8.de>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Rui Zhang <rui.zhang@intel.com>
Cc: "K. Y. Srinivasan" <kys@microsoft.com>
Cc: Arjan van de Ven <arjan@linux.intel.com>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Len Brown <lenb@kernel.org>
Link: https://lkml.kernel.org/r/20170913213154.228824430@linutronix.de
2017-09-25 20:51:52 +02:00
..
apic_common.c x86/apic: Get rid of apic->target_cpus 2017-09-25 20:51:51 +02:00
apic_flat_64.c x86/apic: Get rid of apic->target_cpus 2017-09-25 20:51:51 +02:00
apic_noop.c x86/apic: Get rid of apic->target_cpus 2017-09-25 20:51:51 +02:00
apic_numachip.c x86/apic: Get rid of apic->target_cpus 2017-09-25 20:51:51 +02:00
apic.c x86/apic: Move common APIC callbacks 2017-09-25 20:51:50 +02:00
bigsmp_32.c x86/apic: Get rid of apic->target_cpus 2017-09-25 20:51:51 +02:00
htirq.c genirq/irqdomain: Update irq_domain_ops.activate() signature 2017-09-25 20:38:24 +02:00
hw_nmi.c kernel/watchdog: split up config options 2017-07-12 16:26:02 -07:00
io_apic.c x86/apic: Get rid of apic->target_cpus 2017-09-25 20:51:51 +02:00
ipi.c x86/kernel: Audit and remove any unnecessary uses of module.h 2016-07-14 15:06:41 +02:00
Makefile x86/apic: Sanitize 32/64bit APIC callbacks 2017-09-25 20:51:50 +02:00
msi.c x86/msi: Create named irq domains 2017-06-22 18:21:11 +02:00
probe_32.c x86/apic: Get rid of apic->target_cpus 2017-09-25 20:51:51 +02:00
probe_64.c x86/apic: Remove duplicated include from probe_64.c 2016-07-19 16:02:31 +02:00
vector.c x86/apic: Get rid of multi CPU affinity 2017-09-25 20:51:52 +02:00
x2apic_cluster.c x86/apic: Get rid of apic->target_cpus 2017-09-25 20:51:51 +02:00
x2apic_phys.c x86/apic: Get rid of apic->target_cpus 2017-09-25 20:51:51 +02:00
x2apic_uv_x.c x86/apic: Get rid of apic->target_cpus 2017-09-25 20:51:51 +02:00
x2apic.h x86/apic: Sanitize return value of apic.set_apic_id() 2017-09-25 20:51:48 +02:00