Messages in this thread | | | Subject | Re: [PATCH]PCIE AER: PCI access remove spinlock protection in aer_inject | From | Andrew Patterson <> | Date | Thu, 28 Jan 2010 17:13:42 -0700 |
| |
On Thu, 2010-01-28 at 11:34 -0500, Youquan,Song wrote: > Move the PCI configuration access code out of the spin_lock protection because > pci_read_aer already includes spin_lock protection which will replace the PCI > access method if have aer error injected. > > Signed-off-by: Youquan, Song <youquan.song@intel.com> > --- >
I posted a similar patch on the linux-pci mailing list -- details at:
http://www.spinics.net/lists/linux-pci/msg07609.html
This version has already been accepted in the linux-pci tree. I should have cc'd lkml.
Andrew
> > diff --git a/drivers/pci/pcie/aer/aer_inject.c b/drivers/pci/pcie/aer/aer_inject.c > index 8c30a95..953a0b9 100644 > --- a/drivers/pci/pcie/aer/aer_inject.c > +++ b/drivers/pci/pcie/aer/aer_inject.c > @@ -357,6 +357,22 @@ static int aer_inject(struct aer_error_inj *einj) > goto out_put; > } > > + pci_read_config_dword(dev, pos_cap_err + PCI_ERR_COR_MASK, &mask); > + if (einj->cor_status && !(einj->cor_status & ~mask)) { > + ret = -EINVAL; > + printk(KERN_WARNING "The correctable error(s) is masked " > + "by device\n"); > + goto out_put; > + } > + > + pci_read_config_dword(dev, pos_cap_err + PCI_ERR_UNCOR_MASK, &mask); > + if (einj->uncor_status && !(einj->uncor_status & ~mask)) { > + ret = -EINVAL; > + printk(KERN_WARNING "The uncorrectable error(s) is masked " > + "by device\n"); > + goto out_put; > + } > + > spin_lock_irqsave(&inject_lock, flags); > > err = __find_aer_error_by_dev(dev); > @@ -374,24 +390,6 @@ static int aer_inject(struct aer_error_inj *einj) > err->header_log2 = einj->header_log2; > err->header_log3 = einj->header_log3; > > - pci_read_config_dword(dev, pos_cap_err + PCI_ERR_COR_MASK, &mask); > - if (einj->cor_status && !(einj->cor_status & ~mask)) { > - ret = -EINVAL; > - printk(KERN_WARNING "The correctable error(s) is masked " > - "by device\n"); > - spin_unlock_irqrestore(&inject_lock, flags); > - goto out_put; > - } > - > - pci_read_config_dword(dev, pos_cap_err + PCI_ERR_UNCOR_MASK, &mask); > - if (einj->uncor_status && !(einj->uncor_status & ~mask)) { > - ret = -EINVAL; > - printk(KERN_WARNING "The uncorrectable error(s) is masked " > - "by device\n"); > - spin_unlock_irqrestore(&inject_lock, flags); > - goto out_put; > - } > - > rperr = __find_aer_error_by_dev(rpdev); > if (!rperr) { > rperr = rperr_alloc; > -- > To unsubscribe from this list: send the line "unsubscribe linux-pci" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html >
-- Andrew Patterson Hewlett-Packard
| |