All of lore.kernel.org
 help / color / mirror / Atom feed
From: tip-bot for Jiang Liu <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: tony.luck@intel.com, benh@kernel.crashing.org, joro@8bytes.org,
	hpa@zytor.com, gregkh@linuxfoundation.org,
	konrad.wilk@oracle.com, prarit@redhat.com, yinghai@kernel.org,
	jiang.liu@linux.intel.com, bhelgaas@google.com,
	linux-kernel@vger.kernel.org, grant.likely@linaro.org,
	tglx@linutronix.de, rdunlap@infradead.org, mingo@kernel.org,
	bp@alien8.de, rjw@rjwysocki.net
Subject: [tip:x86/apic] x86, irq: Protect __clear_irq_vector() with vector_lock
Date: Wed, 5 Nov 2014 08:36:26 -0800	[thread overview]
Message-ID: <tip-85551dd2a8b3b426289faafd2b165afdc324e8d9@git.kernel.org> (raw)
In-Reply-To: <1414397531-28254-8-git-send-email-jiang.liu@linux.intel.com>

Commit-ID:  85551dd2a8b3b426289faafd2b165afdc324e8d9
Gitweb:     http://git.kernel.org/tip/85551dd2a8b3b426289faafd2b165afdc324e8d9
Author:     Jiang Liu <jiang.liu@linux.intel.com>
AuthorDate: Mon, 27 Oct 2014 16:11:58 +0800
Committer:  Thomas Gleixner <tglx@linutronix.de>
CommitDate: Wed, 5 Nov 2014 11:04:46 +0100

x86, irq: Protect __clear_irq_vector() with vector_lock

Function __clear_irq_vector() accesses vector related data structure,
so protect it with vector_lock. Also rename it as clear_irq_vector().

Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Joerg Roedel <joro@8bytes.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Rafael J. Wysocki <rjw@rjwysocki.net>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: Randy Dunlap <rdunlap@infradead.org>
Cc: Yinghai Lu <yinghai@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Grant Likely <grant.likely@linaro.org>
Cc: Prarit Bhargava <prarit@redhat.com>
Link: http://lkml.kernel.org/r/1414397531-28254-8-git-send-email-jiang.liu@linux.intel.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
 arch/x86/kernel/apic/io_apic.c | 19 +++++++++++--------
 1 file changed, 11 insertions(+), 8 deletions(-)

diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
index f629c43..30e9999 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -1349,10 +1349,12 @@ int assign_irq_vector(int irq, struct irq_cfg *cfg, const struct cpumask *mask)
 	return err;
 }
 
-static void __clear_irq_vector(int irq, struct irq_cfg *cfg)
+static void clear_irq_vector(int irq, struct irq_cfg *cfg)
 {
 	int cpu, vector;
+	unsigned long flags;
 
+	raw_spin_lock_irqsave(&vector_lock, flags);
 	BUG_ON(!cfg->vector);
 
 	vector = cfg->vector;
@@ -1362,8 +1364,11 @@ static void __clear_irq_vector(int irq, struct irq_cfg *cfg)
 	cfg->vector = 0;
 	cpumask_clear(cfg->domain);
 
-	if (likely(!cfg->move_in_progress))
+	if (likely(!cfg->move_in_progress)) {
+		raw_spin_unlock_irqrestore(&vector_lock, flags);
 		return;
+	}
+
 	for_each_cpu_and(cpu, cfg->old_domain, cpu_online_mask) {
 		for (vector = FIRST_EXTERNAL_VECTOR; vector < NR_VECTORS; vector++) {
 			if (per_cpu(vector_irq, cpu)[vector] != irq)
@@ -1373,6 +1378,7 @@ static void __clear_irq_vector(int irq, struct irq_cfg *cfg)
 		}
 	}
 	cfg->move_in_progress = 0;
+	raw_spin_unlock_irqrestore(&vector_lock, flags);
 }
 
 void __setup_vector_irq(int cpu)
@@ -1499,7 +1505,7 @@ static void setup_ioapic_irq(unsigned int irq, struct irq_cfg *cfg,
 					 &dest)) {
 		pr_warn("Failed to obtain apicid for ioapic %d, pin %d\n",
 			mpc_ioapic_id(attr->ioapic), attr->ioapic_pin);
-		__clear_irq_vector(irq, cfg);
+		clear_irq_vector(irq, cfg);
 
 		return;
 	}
@@ -1513,7 +1519,7 @@ static void setup_ioapic_irq(unsigned int irq, struct irq_cfg *cfg,
 	if (x86_io_apic_ops.setup_entry(irq, &entry, dest, cfg->vector, attr)) {
 		pr_warn("Failed to setup ioapic entry for ioapic  %d, pin %d\n",
 			mpc_ioapic_id(attr->ioapic), attr->ioapic_pin);
-		__clear_irq_vector(irq, cfg);
+		clear_irq_vector(irq, cfg);
 
 		return;
 	}
@@ -3083,12 +3089,9 @@ int arch_setup_hwirq(unsigned int irq, int node)
 void arch_teardown_hwirq(unsigned int irq)
 {
 	struct irq_cfg *cfg = irq_cfg(irq);
-	unsigned long flags;
 
 	free_remapped_irq(irq);
-	raw_spin_lock_irqsave(&vector_lock, flags);
-	__clear_irq_vector(irq, cfg);
-	raw_spin_unlock_irqrestore(&vector_lock, flags);
+	clear_irq_vector(irq, cfg);
 	free_irq_cfg(irq, cfg);
 }
 

  reply	other threads:[~2014-11-05 16:37 UTC|newest]

Thread overview: 84+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-27  8:11 [Patch Part1 v3 00/20] Prepare for enabling hierarchy irqdomain on x86 Jiang Liu
2014-10-27  8:11 ` [Patch Part1 v3 01/20] ACPI, irq, x86: Get rid of special handling of GSI for ACPI SCI Jiang Liu
2014-11-05 16:34   ` [tip:x86/apic] " tip-bot for Jiang Liu
2014-11-05 17:12   ` tip-bot for Jiang Liu
2014-12-19 14:05   ` [tip:x86/apic] x86, irq, acpi: " tip-bot for Jiang Liu
2014-10-27  8:11 ` [Patch Part1 v3 02/20] x86, irq, ACPI: Fix building warning of unused code Jiang Liu
2014-11-05 16:34   ` [tip:x86/apic] " tip-bot for Jiang Liu
2014-11-05 17:13   ` tip-bot for Jiang Liu
2014-12-19 14:01   ` tip-bot for Jiang Liu
2014-10-27  8:11 ` [Patch Part1 v3 03/20] x86, irq: Kill fourth parameter of IO_APIC_get_PCI_irq_vector() Jiang Liu
2014-11-05 16:35   ` [tip:x86/apic] x86, irq: Kill useless parameter 'irq_attr' " tip-bot for Jiang Liu
2014-11-05 17:13   ` tip-bot for Jiang Liu
2014-12-19 14:06   ` tip-bot for Jiang Liu
2014-10-27  8:11 ` [Patch Part1 v3 04/20] x86, irq: Convert irq_2_pin list to generic list Jiang Liu
2014-11-05 16:35   ` [tip:x86/apic] " tip-bot for Yinghai Lu
2014-11-05 17:13   ` tip-bot for Yinghai Lu
2014-12-19 14:06   ` tip-bot for Yinghai Lu
2014-10-27  8:11 ` [Patch Part1 v3 05/20] x86, irq: Refine hw_irq.h to prepare for irqdomain support Jiang Liu
2014-11-05 16:35   ` [tip:x86/apic] " tip-bot for Jiang Liu
2014-11-05 17:13   ` tip-bot for Jiang Liu
2014-12-19 14:06   ` tip-bot for Jiang Liu
2014-10-27  8:11 ` [Patch Part1 v3 06/20] x86, irq: Rename local APIC related functions in io_apic.c as apic_xxx() Jiang Liu
2014-11-05 16:36   ` [tip:x86/apic] " tip-bot for Jiang Liu
2014-11-05 17:14   ` tip-bot for Jiang Liu
2014-12-19 14:07   ` tip-bot for Jiang Liu
2014-10-27  8:11 ` [Patch Part1 v3 07/20] x86, irq: Protect __clear_irq_vector() with vector_lock Jiang Liu
2014-11-05 16:36   ` tip-bot for Jiang Liu [this message]
2014-11-05 17:14   ` [tip:x86/apic] " tip-bot for Jiang Liu
2014-12-19 14:07   ` tip-bot for Jiang Liu
2014-10-27  8:11 ` [Patch Part1 v3 08/20] x86, irq: Introduce helpers to access struct irq_cfg Jiang Liu
2014-11-05 16:36   ` [tip:x86/apic] " tip-bot for Jiang Liu
2014-11-05 17:14   ` tip-bot for Jiang Liu
2014-12-19 14:07   ` tip-bot for Jiang Liu
2014-10-27  8:12 ` [Patch Part1 v3 09/20] x86, irq: Move local APIC related code from io_apic.c into vector.c Jiang Liu
2014-11-05 16:37   ` [tip:x86/apic] " tip-bot for Jiang Liu
2014-11-05 17:14   ` tip-bot for Jiang Liu
2014-12-19 14:08   ` tip-bot for Jiang Liu
2014-10-27  8:12 ` [Patch Part1 v3 10/20] x86, irq: Replace printk(KERN_LVL) with pr_lvl() utilities Jiang Liu
2014-11-05 16:37   ` [tip:x86/apic] " tip-bot for Jiang Liu
2014-11-05 16:47     ` Joe Perches
2014-11-05 17:15   ` tip-bot for Jiang Liu
2014-12-19 14:08   ` tip-bot for Jiang Liu
2014-10-27  8:12 ` [Patch Part1 v3 11/20] x86, irq: Move PCI MSI related code from io_apic.c into msi.c Jiang Liu
2014-11-05 16:38   ` [tip:x86/apic] " tip-bot for Jiang Liu
2014-11-05 17:15   ` tip-bot for Jiang Liu
2014-12-19 14:08   ` tip-bot for Jiang Liu
2014-10-27  8:12 ` [Patch Part1 v3 12/20] x86, irq: Move HT IRQ related code from io_apic.c into htirq.c Jiang Liu
2014-11-05 16:38   ` [tip:x86/apic] " tip-bot for Jiang Liu
2014-11-05 17:16   ` tip-bot for Jiang Liu
2014-12-19 14:09   ` tip-bot for Jiang Liu
2014-10-27  8:12 ` [Patch Part1 v3 13/20] x86, irq: Move IOAPIC related declarations from hw_irq.h into io_apic.h Jiang Liu
2014-11-05 16:38   ` [tip:x86/apic] " tip-bot for Jiang Liu
2014-11-05 17:16   ` tip-bot for Jiang Liu
2014-12-19 14:09   ` tip-bot for Jiang Liu
2014-10-27  8:12 ` [Patch Part1 v3 14/20] x86, irq: Move IRQ initialization routines from io_apic.c into vector.c Jiang Liu
2014-11-05 16:38   ` [tip:x86/apic] " tip-bot for Jiang Liu
2014-11-05 17:16   ` tip-bot for Jiang Liu
2014-12-19 14:09   ` tip-bot for Jiang Liu
2014-10-27  8:12 ` [Patch Part1 v3 15/20] x86, irq: Make MSI and HT_IRQ indepenent of X86_IO_APIC Jiang Liu
2014-11-05 16:39   ` [tip:x86/apic] " tip-bot for Jiang Liu
2014-11-05 17:16   ` tip-bot for Jiang Liu
2014-12-19 14:10   ` tip-bot for Jiang Liu
2014-10-27  8:12 ` [Patch Part1 v3 16/20] x86, irq: Use helpers to access irq_cfg data structure associated with IRQ Jiang Liu
2014-11-05 16:39   ` [tip:x86/apic] " tip-bot for Jiang Liu
2014-11-05 17:17   ` tip-bot for Jiang Liu
2014-12-19 14:10   ` tip-bot for Jiang Liu
2014-10-27  8:12 ` [Patch Part1 v3 17/20] x86: irq_remapping: " Jiang Liu
2014-11-05 16:39   ` [tip:x86/apic] " tip-bot for Jiang Liu
2014-11-05 17:17   ` tip-bot for Jiang Liu
2014-12-19 14:10   ` tip-bot for Jiang Liu
     [not found] ` <1414397531-28254-1-git-send-email-jiang.liu-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2014-10-27  8:12   ` [Patch Part1 v3 18/20] iommu/vt-d: " Jiang Liu
2014-10-27  8:12     ` Jiang Liu
2014-11-05 16:39     ` [tip:x86/apic] " tip-bot for Jiang Liu
2014-11-05 17:17     ` tip-bot for Jiang Liu
2014-12-19 14:11     ` tip-bot for Jiang Liu
2014-10-27  8:12   ` [Patch Part1 v3 19/20] iommu/amd: " Jiang Liu
2014-10-27  8:12     ` Jiang Liu
2014-11-05 16:40     ` [tip:x86/apic] " tip-bot for Jiang Liu
2014-11-05 17:17     ` tip-bot for Jiang Liu
2014-12-19 14:11     ` tip-bot for Jiang Liu
2014-10-27  8:12 ` [Patch Part1 v3 20/20] x86, irq: Fix link error of undefined reference to send_cleanup_vector Jiang Liu
2014-11-05 16:34   ` [tip:x86/apic] x86, irq: Provide empty send_cleanup_vector() stub for UP builds tip-bot for Jiang Liu
2014-11-05 17:12   ` tip-bot for Jiang Liu
2014-12-19 14:00   ` tip-bot for Jiang Liu

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-85551dd2a8b3b426289faafd2b165afdc324e8d9@git.kernel.org \
    --to=tipbot@zytor.com \
    --cc=benh@kernel.crashing.org \
    --cc=bhelgaas@google.com \
    --cc=bp@alien8.de \
    --cc=grant.likely@linaro.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=hpa@zytor.com \
    --cc=jiang.liu@linux.intel.com \
    --cc=joro@8bytes.org \
    --cc=konrad.wilk@oracle.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=prarit@redhat.com \
    --cc=rdunlap@infradead.org \
    --cc=rjw@rjwysocki.net \
    --cc=tglx@linutronix.de \
    --cc=tony.luck@intel.com \
    --cc=yinghai@kernel.org \
    /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.