diff options
Diffstat (limited to 'drivers/pci/pci.c')
| -rw-r--r-- | drivers/pci/pci.c | 45 | 
1 files changed, 21 insertions, 24 deletions
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index cb1dd5f4988..5ea587e59e4 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -12,6 +12,7 @@  #include <linux/init.h>  #include <linux/pci.h>  #include <linux/pm.h> +#include <linux/slab.h>  #include <linux/module.h>  #include <linux/spinlock.h>  #include <linux/string.h> @@ -2576,18 +2577,17 @@ EXPORT_SYMBOL_GPL(pci_reset_function);   */  int pcix_get_max_mmrbc(struct pci_dev *dev)  { -	int err, cap; +	int cap;  	u32 stat;  	cap = pci_find_capability(dev, PCI_CAP_ID_PCIX);  	if (!cap)  		return -EINVAL; -	err = pci_read_config_dword(dev, cap + PCI_X_STATUS, &stat); -	if (err) +	if (pci_read_config_dword(dev, cap + PCI_X_STATUS, &stat))  		return -EINVAL; -	return (stat & PCI_X_STATUS_MAX_READ) >> 12; +	return 512 << ((stat & PCI_X_STATUS_MAX_READ) >> 21);  }  EXPORT_SYMBOL(pcix_get_max_mmrbc); @@ -2600,18 +2600,17 @@ EXPORT_SYMBOL(pcix_get_max_mmrbc);   */  int pcix_get_mmrbc(struct pci_dev *dev)  { -	int ret, cap; -	u32 cmd; +	int cap; +	u16 cmd;  	cap = pci_find_capability(dev, PCI_CAP_ID_PCIX);  	if (!cap)  		return -EINVAL; -	ret = pci_read_config_dword(dev, cap + PCI_X_CMD, &cmd); -	if (!ret) -		ret = 512 << ((cmd & PCI_X_CMD_MAX_READ) >> 2); +	if (pci_read_config_word(dev, cap + PCI_X_CMD, &cmd)) +		return -EINVAL; -	return ret; +	return 512 << ((cmd & PCI_X_CMD_MAX_READ) >> 2);  }  EXPORT_SYMBOL(pcix_get_mmrbc); @@ -2626,28 +2625,27 @@ EXPORT_SYMBOL(pcix_get_mmrbc);   */  int pcix_set_mmrbc(struct pci_dev *dev, int mmrbc)  { -	int cap, err = -EINVAL; -	u32 stat, cmd, v, o; +	int cap; +	u32 stat, v, o; +	u16 cmd;  	if (mmrbc < 512 || mmrbc > 4096 || !is_power_of_2(mmrbc)) -		goto out; +		return -EINVAL;  	v = ffs(mmrbc) - 10;  	cap = pci_find_capability(dev, PCI_CAP_ID_PCIX);  	if (!cap) -		goto out; +		return -EINVAL; -	err = pci_read_config_dword(dev, cap + PCI_X_STATUS, &stat); -	if (err) -		goto out; +	if (pci_read_config_dword(dev, cap + PCI_X_STATUS, &stat)) +		return -EINVAL;  	if (v > (stat & PCI_X_STATUS_MAX_READ) >> 21)  		return -E2BIG; -	err = pci_read_config_dword(dev, cap + PCI_X_CMD, &cmd); -	if (err) -		goto out; +	if (pci_read_config_word(dev, cap + PCI_X_CMD, &cmd)) +		return -EINVAL;  	o = (cmd & PCI_X_CMD_MAX_READ) >> 2;  	if (o != v) { @@ -2657,10 +2655,10 @@ int pcix_set_mmrbc(struct pci_dev *dev, int mmrbc)  		cmd &= ~PCI_X_CMD_MAX_READ;  		cmd |= v << 2; -		err = pci_write_config_dword(dev, cap + PCI_X_CMD, cmd); +		if (pci_write_config_word(dev, cap + PCI_X_CMD, cmd)) +			return -EIO;  	} -out: -	return err; +	return 0;  }  EXPORT_SYMBOL(pcix_set_mmrbc); @@ -3023,7 +3021,6 @@ EXPORT_SYMBOL(pcim_pin_device);  EXPORT_SYMBOL(pci_disable_device);  EXPORT_SYMBOL(pci_find_capability);  EXPORT_SYMBOL(pci_bus_find_capability); -EXPORT_SYMBOL(pci_register_set_vga_state);  EXPORT_SYMBOL(pci_release_regions);  EXPORT_SYMBOL(pci_request_regions);  EXPORT_SYMBOL(pci_request_regions_exclusive);  |