linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH V2] x86: Add irq spillover warning
@ 2019-08-22 14:34 Neil Horman
  2019-08-28 12:46 ` Thomas Gleixner
  2019-08-28 12:50 ` [tip: x86/apic] x86/apic/vector: Warn when vector space exhaustion breaks affinity tip-bot2 for Neil Horman
  0 siblings, 2 replies; 3+ messages in thread
From: Neil Horman @ 2019-08-22 14:34 UTC (permalink / raw)
  To: linux-kernel
  Cc: x86, Neil Horman, djuran, Thomas Gleixner, Ingo Molnar,
	Borislav Petkov, H. Peter Anvin

On Intel hardware, cpus are limited in the number of irqs they can
have affined to them (currently 240), based on section 10.5.2 of:
https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-3a-part-1-manual.pdf

assign_irq_vector_any_locked() will attempt to honor the affining
request, but if the 240 vector limitation documented above is crossed, a
new mask will be selected that is potentially outside the requested cpu
set silently.  This can lead to unexpected behavior for administrators.

Mitigate this problem by checking the affinity mask after its been
assigned in activate_reserved so that adminstrators get a logged warning
about the change.

Tested successfully by the reporter

Change Notes:
V1->V2)
	* Moved the check for this condition to activate_reserved from
do_IRQ, taking it out of the hot path (request by tglx@lintronix.de)

Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
Reported-by: djuran@redhat.com
CC: Thomas Gleixner <tglx@linutronix.de>
CC: Ingo Molnar <mingo@redhat.com>
CC: Borislav Petkov <bp@alien8.de>
CC: "H. Peter Anvin" <hpa@zytor.com>
CC: x86@kernel.org
---
 arch/x86/kernel/apic/vector.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/arch/x86/kernel/apic/vector.c b/arch/x86/kernel/apic/vector.c
index fdacb864c3dd..b8ed0406d41f 100644
--- a/arch/x86/kernel/apic/vector.c
+++ b/arch/x86/kernel/apic/vector.c
@@ -398,6 +398,16 @@ static int activate_reserved(struct irq_data *irqd)
 		if (!irqd_can_reserve(irqd))
 			apicd->can_reserve = false;
 	}
+
+	/*
+	 * Check to ensure that the effective affinity mask is a subset
+	 * the user supplied affinity mask, and warn the user if it is not
+	 */
+	if (!cpumask_subset(irq_data_get_effective_affinity_mask(irqd),
+	     irq_data_get_affinity_mask(irqd)))
+		pr_warn("irq %d has been assigned to a cpu outside of its user affinity mask\n",
+			irqd->irq);
+
 	return ret;
 }
 
-- 
2.21.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2019-08-28 12:50 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-08-22 14:34 [PATCH V2] x86: Add irq spillover warning Neil Horman
2019-08-28 12:46 ` Thomas Gleixner
2019-08-28 12:50 ` [tip: x86/apic] x86/apic/vector: Warn when vector space exhaustion breaks affinity tip-bot2 for Neil Horman

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).