diff options
| author | Randy Dunlap <randy.dunlap@oracle.com> | 2007-07-09 11:55:54 -0700 | 
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2007-07-11 16:02:11 -0700 | 
| commit | 694625c0b322905d6892fad873029f764cd4823f (patch) | |
| tree | c48ac2c0095f2ac4044bd12b27ea318eb6156c73 | |
| parent | f5609d7e679db3f29433f56e1f2e397a2f815288 (diff) | |
PCI: add pci_try_set_mwi
As suggested by Andrew, add pci_try_set_mwi(), which does not require
return-value checking.
- add pci_try_set_mwi() without __must_check
- make it return 0 on success, errno if the "try" failed or error
- review callers
Signed-off-by: Randy Dunlap <randy.dunlap@oracle.com>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
| -rw-r--r-- | Documentation/pci.txt | 5 | ||||
| -rw-r--r-- | drivers/ata/pata_cs5530.c | 2 | ||||
| -rw-r--r-- | drivers/ide/pci/cs5530.c | 2 | ||||
| -rw-r--r-- | drivers/net/cassini.c | 4 | ||||
| -rw-r--r-- | drivers/net/starfire.c | 2 | ||||
| -rw-r--r-- | drivers/net/tulip/tulip_core.c | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/prism54/islpci_hotplug.c | 3 | ||||
| -rw-r--r-- | drivers/pci/pci.c | 28 | ||||
| -rw-r--r-- | drivers/scsi/lpfc/lpfc_init.c | 5 | ||||
| -rw-r--r-- | drivers/usb/gadget/net2280.c | 2 | ||||
| -rw-r--r-- | include/linux/pci.h | 1 | 
11 files changed, 38 insertions, 18 deletions
| diff --git a/Documentation/pci.txt b/Documentation/pci.txt index 7d3da30ff0b4..7754f5aea4e9 100644 --- a/Documentation/pci.txt +++ b/Documentation/pci.txt @@ -296,7 +296,10 @@ If the PCI device can use the PCI Memory-Write-Invalidate transaction,  call pci_set_mwi().  This enables the PCI_COMMAND bit for Mem-Wr-Inval  and also ensures that the cache line size register is set correctly.  Check the return value of pci_set_mwi() as not all architectures -or chip-sets may support Memory-Write-Invalidate. +or chip-sets may support Memory-Write-Invalidate.  Alternatively, +if Mem-Wr-Inval would be nice to have but is not required, call +pci_try_set_mwi() to have the system do its best effort at enabling +Mem-Wr-Inval.  3.2 Request MMIO/IOP resources diff --git a/drivers/ata/pata_cs5530.c b/drivers/ata/pata_cs5530.c index 3fca5898642b..68f150a1e2f4 100644 --- a/drivers/ata/pata_cs5530.c +++ b/drivers/ata/pata_cs5530.c @@ -266,7 +266,7 @@ static int cs5530_init_chip(void)  	}  	pci_set_master(cs5530_0); -	pci_set_mwi(cs5530_0); +	pci_try_set_mwi(cs5530_0);  	/*  	 * Set PCI CacheLineSize to 16-bytes: diff --git a/drivers/ide/pci/cs5530.c b/drivers/ide/pci/cs5530.c index 1eec1f308d16..b5c00d15a704 100644 --- a/drivers/ide/pci/cs5530.c +++ b/drivers/ide/pci/cs5530.c @@ -236,7 +236,7 @@ static unsigned int __devinit init_chipset_cs5530 (struct pci_dev *dev, const ch  	 */  	pci_set_master(cs5530_0); -	pci_set_mwi(cs5530_0); +	pci_try_set_mwi(cs5530_0);  	/*  	 * Set PCI CacheLineSize to 16-bytes: diff --git a/drivers/net/cassini.c b/drivers/net/cassini.c index 805924fc077a..f6e4030c73d1 100644 --- a/drivers/net/cassini.c +++ b/drivers/net/cassini.c @@ -4917,13 +4917,13 @@ static int __devinit cas_init_one(struct pci_dev *pdev,  	pci_cmd &= ~PCI_COMMAND_SERR;  	pci_cmd |= PCI_COMMAND_PARITY;  	pci_write_config_word(pdev, PCI_COMMAND, pci_cmd); -	if (pci_set_mwi(pdev)) +	if (pci_try_set_mwi(pdev))  		printk(KERN_WARNING PFX "Could not enable MWI for %s\n",  		       pci_name(pdev));  	/*  	 * On some architectures, the default cache line size set -	 * by pci_set_mwi reduces perforamnce.  We have to increase +	 * by pci_try_set_mwi reduces perforamnce.  We have to increase  	 * it for this case.  To start, we'll print some configuration  	 * data.  	 */ diff --git a/drivers/net/starfire.c b/drivers/net/starfire.c index 786d4b9c07ec..2f69d5c5dfa6 100644 --- a/drivers/net/starfire.c +++ b/drivers/net/starfire.c @@ -740,7 +740,7 @@ static int __devinit starfire_init_one(struct pci_dev *pdev,  	pci_set_master(pdev);  	/* enable MWI -- it vastly improves Rx performance on sparc64 */ -	pci_set_mwi(pdev); +	pci_try_set_mwi(pdev);  #ifdef ZEROCOPY  	/* Starfire can do TCP/UDP checksumming */ diff --git a/drivers/net/tulip/tulip_core.c b/drivers/net/tulip/tulip_core.c index 1a9e911b86a2..7dcd138b0fed 100644 --- a/drivers/net/tulip/tulip_core.c +++ b/drivers/net/tulip/tulip_core.c @@ -1155,7 +1155,7 @@ static void __devinit tulip_mwi_config (struct pci_dev *pdev,  	/* set or disable MWI in the standard PCI command bit.  	 * Check for the case where  mwi is desired but not available  	 */ -	if (csr0 & MWI)	pci_set_mwi(pdev); +	if (csr0 & MWI)	pci_try_set_mwi(pdev);  	else		pci_clear_mwi(pdev);  	/* read result from hardware (in case bit refused to enable) */ diff --git a/drivers/net/wireless/prism54/islpci_hotplug.c b/drivers/net/wireless/prism54/islpci_hotplug.c index 25d6c80c9bab..af2e4f2405f2 100644 --- a/drivers/net/wireless/prism54/islpci_hotplug.c +++ b/drivers/net/wireless/prism54/islpci_hotplug.c @@ -166,8 +166,7 @@ prism54_probe(struct pci_dev *pdev, const struct pci_device_id *id)  	pci_set_master(pdev);  	/* enable MWI */ -	if (!pci_set_mwi(pdev)) -		printk(KERN_INFO "%s: pci_set_mwi(pdev) succeeded\n", DRV_NAME); +	pci_try_set_mwi(pdev);  	/* setup the network device interface and its structure */  	if (!(ndev = islpci_setup(pdev))) { diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index d9fc1bd1f3e8..35fa30aa3065 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -1186,6 +1186,11 @@ int pci_set_mwi(struct pci_dev *dev)  	return 0;  } +int pci_try_set_mwi(struct pci_dev *dev) +{ +	return 0; +} +  void pci_clear_mwi(struct pci_dev *dev)  {  } @@ -1242,9 +1247,7 @@ pci_set_cacheline_size(struct pci_dev *dev)   * pci_set_mwi - enables memory-write-invalidate PCI transaction   * @dev: the PCI device for which MWI is enabled   * - * Enables the Memory-Write-Invalidate transaction in %PCI_COMMAND, - * and then calls @pcibios_set_mwi to do the needed arch specific - * operations or a generic mwi-prep function. + * Enables the Memory-Write-Invalidate transaction in %PCI_COMMAND.   *   * RETURNS: An appropriate -ERRNO error value on error, or zero for success.   */ @@ -1260,7 +1263,8 @@ pci_set_mwi(struct pci_dev *dev)  	pci_read_config_word(dev, PCI_COMMAND, &cmd);  	if (! (cmd & PCI_COMMAND_INVALIDATE)) { -		pr_debug("PCI: Enabling Mem-Wr-Inval for device %s\n", pci_name(dev)); +		pr_debug("PCI: Enabling Mem-Wr-Inval for device %s\n", +			pci_name(dev));  		cmd |= PCI_COMMAND_INVALIDATE;  		pci_write_config_word(dev, PCI_COMMAND, cmd);  	} @@ -1269,6 +1273,21 @@ pci_set_mwi(struct pci_dev *dev)  }  /** + * pci_try_set_mwi - enables memory-write-invalidate PCI transaction + * @dev: the PCI device for which MWI is enabled + * + * Enables the Memory-Write-Invalidate transaction in %PCI_COMMAND. + * Callers are not required to check the return value. + * + * RETURNS: An appropriate -ERRNO error value on error, or zero for success. + */ +int pci_try_set_mwi(struct pci_dev *dev) +{ +	int rc = pci_set_mwi(dev); +	return rc; +} + +/**   * pci_clear_mwi - disables Memory-Write-Invalidate for device dev   * @dev: the PCI device to disable   * @@ -1600,6 +1619,7 @@ EXPORT_SYMBOL(pci_release_selected_regions);  EXPORT_SYMBOL(pci_request_selected_regions);  EXPORT_SYMBOL(pci_set_master);  EXPORT_SYMBOL(pci_set_mwi); +EXPORT_SYMBOL(pci_try_set_mwi);  EXPORT_SYMBOL(pci_clear_mwi);  EXPORT_SYMBOL_GPL(pci_intx);  EXPORT_SYMBOL(pci_set_dma_mask); diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c index dcb4ba0ecee1..955b2e48d041 100644 --- a/drivers/scsi/lpfc/lpfc_init.c +++ b/drivers/scsi/lpfc/lpfc_init.c @@ -1578,10 +1578,7 @@ lpfc_pci_probe_one(struct pci_dev *pdev, const struct pci_device_id *pid)  	INIT_LIST_HEAD(&phba->fc_nodes);  	pci_set_master(pdev); -	retval = pci_set_mwi(pdev); -	if (retval) -		dev_printk(KERN_WARNING, &pdev->dev, -			   "Warning: pci_set_mwi returned %d\n", retval); +	pci_try_set_mwi(pdev);  	if (pci_set_dma_mask(phba->pcidev, DMA_64BIT_MASK) != 0)  		if (pci_set_dma_mask(phba->pcidev, DMA_32BIT_MASK) != 0) diff --git a/drivers/usb/gadget/net2280.c b/drivers/usb/gadget/net2280.c index d975ecf18e00..00fda334dc72 100644 --- a/drivers/usb/gadget/net2280.c +++ b/drivers/usb/gadget/net2280.c @@ -2964,7 +2964,7 @@ static int net2280_probe (struct pci_dev *pdev, const struct pci_device_id *id)  			, &dev->pci->pcimstctl);  	/* erratum 0115 shouldn't appear: Linux inits PCI_LATENCY_TIMER */  	pci_set_master (pdev); -	pci_set_mwi (pdev); +	pci_try_set_mwi (pdev);  	/* ... also flushes any posted pci writes */  	dev->chiprev = get_idx_reg (dev->regs, REG_CHIPREV) & 0xffff; diff --git a/include/linux/pci.h b/include/linux/pci.h index a6657b7f245d..a5602e26f4dd 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -545,6 +545,7 @@ void pci_set_master(struct pci_dev *dev);  int pci_set_pcie_reset_state(struct pci_dev *dev, enum pcie_reset_state state);  #define HAVE_PCI_SET_MWI  int __must_check pci_set_mwi(struct pci_dev *dev); +int pci_try_set_mwi(struct pci_dev *dev);  void pci_clear_mwi(struct pci_dev *dev);  void pci_intx(struct pci_dev *dev, int enable);  void pci_msi_off(struct pci_dev *dev); | 
