Skip to content

Commit

Permalink
msi: Remove msi_lock.
Browse files Browse the repository at this point in the history
With the removal of msi_lookup_irq all of the functions using msi_lock
operated on a single device and none of them could reasonably be
called on that device at the same time. 

Since what little synchronization that needs to happen needs to happen
outside of the msi functions, msi_lock could never be contended and as
such is useless and just complicates the code.

Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Acked-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Eric W. Biederman authored and Greg Kroah-Hartman committed Feb 7, 2007
1 parent ded86d8 commit d40f540
Showing 1 changed file with 0 additions and 20 deletions.
20 changes: 0 additions & 20 deletions drivers/pci/msi.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
#include "pci.h"
#include "msi.h"

static DEFINE_SPINLOCK(msi_lock);
static struct msi_desc* msi_desc[NR_IRQS] = { [0 ... NR_IRQS-1] = NULL };
static struct kmem_cache* msi_cachep;

Expand Down Expand Up @@ -196,11 +195,7 @@ static struct msi_desc* alloc_msi_entry(void)

static void attach_msi_entry(struct msi_desc *entry, int irq)
{
unsigned long flags;

spin_lock_irqsave(&msi_lock, flags);
msi_desc[irq] = entry;
spin_unlock_irqrestore(&msi_lock, flags);
}

static int create_msi_irq(void)
Expand Down Expand Up @@ -672,7 +667,6 @@ void pci_disable_msi(struct pci_dev* dev)
struct msi_desc *entry;
int pos, default_irq;
u16 control;
unsigned long flags;

if (!pci_msi_enable)
return;
Expand All @@ -693,21 +687,17 @@ void pci_disable_msi(struct pci_dev* dev)

disable_msi_mode(dev, pos, PCI_CAP_ID_MSI);

spin_lock_irqsave(&msi_lock, flags);
entry = msi_desc[dev->first_msi_irq];
if (!entry || !entry->dev || entry->msi_attrib.type != PCI_CAP_ID_MSI) {
spin_unlock_irqrestore(&msi_lock, flags);
return;
}
if (irq_has_action(dev->first_msi_irq)) {
spin_unlock_irqrestore(&msi_lock, flags);
printk(KERN_WARNING "PCI: %s: pci_disable_msi() called without "
"free_irq() on MSI irq %d\n",
pci_name(dev), dev->first_msi_irq);
BUG_ON(irq_has_action(dev->first_msi_irq));
} else {
default_irq = entry->msi_attrib.default_irq;
spin_unlock_irqrestore(&msi_lock, flags);
msi_free_irq(dev, dev->first_msi_irq);

/* Restore dev->irq to its default pin-assertion irq */
Expand All @@ -721,14 +711,11 @@ static int msi_free_irq(struct pci_dev* dev, int irq)
struct msi_desc *entry;
int head, entry_nr, type;
void __iomem *base;
unsigned long flags;

arch_teardown_msi_irq(irq);

spin_lock_irqsave(&msi_lock, flags);
entry = msi_desc[irq];
if (!entry || entry->dev != dev) {
spin_unlock_irqrestore(&msi_lock, flags);
return -EINVAL;
}
type = entry->msi_attrib.type;
Expand All @@ -739,7 +726,6 @@ static int msi_free_irq(struct pci_dev* dev, int irq)
msi_desc[entry->link.tail]->link.head = entry->link.head;
entry->dev = NULL;
msi_desc[irq] = NULL;
spin_unlock_irqrestore(&msi_lock, flags);

destroy_msi_irq(irq);

Expand Down Expand Up @@ -817,7 +803,6 @@ int pci_enable_msix(struct pci_dev* dev, struct msix_entry *entries, int nvec)
void pci_disable_msix(struct pci_dev* dev)
{
int irq, head, tail = 0, warning = 0;
unsigned long flags;
int pos;
u16 control;

Expand All @@ -841,9 +826,7 @@ void pci_disable_msix(struct pci_dev* dev)

irq = head = dev->first_msi_irq;
while (head != tail) {
spin_lock_irqsave(&msi_lock, flags);
tail = msi_desc[irq]->link.tail;
spin_unlock_irqrestore(&msi_lock, flags);
if (irq_has_action(irq))
warning = 1;
else if (irq != head) /* Release MSI-X irq */
Expand Down Expand Up @@ -872,7 +855,6 @@ void pci_disable_msix(struct pci_dev* dev)
void msi_remove_pci_irq_vectors(struct pci_dev* dev)
{
int pos;
unsigned long flags;

if (!pci_msi_enable || !dev)
return;
Expand All @@ -894,10 +876,8 @@ void msi_remove_pci_irq_vectors(struct pci_dev* dev)

irq = head = dev->first_msi_irq;
while (head != tail) {
spin_lock_irqsave(&msi_lock, flags);
tail = msi_desc[irq]->link.tail;
base = msi_desc[irq]->mask_base;
spin_unlock_irqrestore(&msi_lock, flags);
if (irq_has_action(irq))
warning = 1;
else if (irq != head) /* Release MSI-X irq */
Expand Down

0 comments on commit d40f540

Please sign in to comment.