All of lore.kernel.org
 help / color / mirror / Atom feed
From: tip-bot for Thomas Gleixner <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: bhelgaas@google.com, hpa@zytor.com, linux-kernel@vger.kernel.org,
	tglx@linutronix.de, mingo@kernel.org, rusty@rustcorp.com.au,
	peterz@infradead.org, jiang.liu@linux.intel.com
Subject: [tip:x86/apic] x86/irq: Protect smp_cleanup_move
Date: Wed, 5 Aug 2015 15:19:26 -0700	[thread overview]
Message-ID: <tip-df54c4934e030e73cb6a7bd6713f697350dabd0b@git.kernel.org> (raw)
In-Reply-To: <20150802203609.222975294@linutronix.de>

Commit-ID:  df54c4934e030e73cb6a7bd6713f697350dabd0b
Gitweb:     http://git.kernel.org/tip/df54c4934e030e73cb6a7bd6713f697350dabd0b
Author:     Thomas Gleixner <tglx@linutronix.de>
AuthorDate: Sun, 2 Aug 2015 20:38:23 +0000
Committer:  Thomas Gleixner <tglx@linutronix.de>
CommitDate: Thu, 6 Aug 2015 00:14:58 +0200

x86/irq: Protect smp_cleanup_move

smp_cleanup_move fiddles without protection in the interrupt
descriptors and the vector array. A concurrent irq setup/teardown or
affinity setting can pull the rug under that operation.

Add proper locking.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Jiang Liu <jiang.liu@linux.intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Link: http://lkml.kernel.org/r/20150802203609.222975294@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
 arch/x86/kernel/apic/vector.c | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/arch/x86/kernel/apic/vector.c b/arch/x86/kernel/apic/vector.c
index f47069e..63d58b0 100644
--- a/arch/x86/kernel/apic/vector.c
+++ b/arch/x86/kernel/apic/vector.c
@@ -539,6 +539,9 @@ asmlinkage __visible void smp_irq_move_cleanup_interrupt(void)
 
 	entering_ack_irq();
 
+	/* Prevent vectors vanishing under us */
+	raw_spin_lock(&vector_lock);
+
 	me = smp_processor_id();
 	for (vector = FIRST_EXTERNAL_VECTOR; vector < NR_VECTORS; vector++) {
 		int irq;
@@ -546,6 +549,7 @@ asmlinkage __visible void smp_irq_move_cleanup_interrupt(void)
 		struct irq_desc *desc;
 		struct apic_chip_data *data;
 
+	retry:
 		irq = __this_cpu_read(vector_irq[vector]);
 
 		if (irq <= VECTOR_UNDEFINED)
@@ -555,12 +559,16 @@ asmlinkage __visible void smp_irq_move_cleanup_interrupt(void)
 		if (!desc)
 			continue;
 
+		if (!raw_spin_trylock(&desc->lock)) {
+			raw_spin_unlock(&vector_lock);
+			cpu_relax();
+			raw_spin_lock(&vector_lock);
+			goto retry;
+		}
+
 		data = apic_chip_data(&desc->irq_data);
 		if (!data)
-			continue;
-
-		raw_spin_lock(&desc->lock);
-
+			goto unlock;
 		/*
 		 * Check if the irq migration is in progress. If so, we
 		 * haven't received the cleanup request yet for this irq.
@@ -589,6 +597,8 @@ unlock:
 		raw_spin_unlock(&desc->lock);
 	}
 
+	raw_spin_unlock(&vector_lock);
+
 	exiting_irq();
 }
 

  reply	other threads:[~2015-08-05 22:20 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-02 20:38 [patch 0/7] x86: Store irq descriptor in vector array Thomas Gleixner
2015-08-02 20:38 ` [patch 1/7] x86/irq: Protect smp_cleanup_move Thomas Gleixner
2015-08-05 22:19   ` tip-bot for Thomas Gleixner [this message]
2015-08-02 20:38 ` [patch 3/7] x86/irq: Replace numeric constant Thomas Gleixner
2015-08-05 22:19   ` [tip:x86/apic] " tip-bot for Thomas Gleixner
2015-08-02 20:38 ` [patch 2/7] x86/lguest: Do not setup unused irq vectors Thomas Gleixner
2015-08-03  2:47   ` Rusty Russell
2015-08-03  9:40     ` Thomas Gleixner
2015-08-04  4:27       ` Rusty Russell
2015-08-04  4:32         ` [PATCH 1/2] x86/lguest: clean up lguest_setup_irq Rusty Russell
2015-08-04  4:32           ` [PATCH 2/2] x86/lguest: Do not setup unused irq vectors Rusty Russell
2015-08-05 22:19             ` [tip:x86/apic] " tip-bot for Thomas Gleixner
2015-08-05 22:18           ` [tip:x86/apic] x86/lguest: Clean up lguest_setup_irq tip-bot for Rusty Russell
2015-08-02 20:38 ` [patch 4/7] x86/irq: Rename VECTOR_UNDEFINED to VECTOR_UNUSED Thomas Gleixner
2015-08-05 22:20   ` [tip:x86/apic] " tip-bot for Thomas Gleixner
2015-08-02 20:38 ` [patch 5/7] x86/irq: Get rid of an indentation level Thomas Gleixner
2015-08-05 22:20   ` [tip:x86/apic] " tip-bot for Thomas Gleixner
2015-08-02 20:38 ` [patch 6/7] genirq: Provide irq_desc_has_action Thomas Gleixner
2015-08-05 22:20   ` [tip:x86/apic] " tip-bot for Thomas Gleixner
2015-08-02 20:38 ` [patch 7/7] x86/irq: Store irq descriptor in vector array Thomas Gleixner
2015-08-05 22:21   ` [tip:x86/apic] " tip-bot for Thomas Gleixner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=tip-df54c4934e030e73cb6a7bd6713f697350dabd0b@git.kernel.org \
    --to=tipbot@zytor.com \
    --cc=bhelgaas@google.com \
    --cc=hpa@zytor.com \
    --cc=jiang.liu@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=peterz@infradead.org \
    --cc=rusty@rustcorp.com.au \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.