From a2f9d031026b6219483b2b63a2ef4cf7e28d44ed Mon Sep 17 00:00:00 2001 From: Konrad Rzeszutek Wilk Date: Wed, 4 Jan 2012 14:23:56 -0500 Subject: [PATCH] --- yaml --- r: 293977 b: refs/heads/master c: a96d627abaac899e8bfaf18fd0578b228c9c752f h: refs/heads/master i: 293975: a121ff0571c867613928f6e73e89f420c7aca880 v: v3 --- [refs] | 2 +- trunk/drivers/pci/pci.c | 25 +++++++++++++++++++++++++ trunk/include/linux/pci.h | 1 + 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 3ca020e926e4..b29db8121e39 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 8605c6844fb9bdf55471bb87c3ac62d44eb34e04 +refs/heads/master: a96d627abaac899e8bfaf18fd0578b228c9c752f diff --git a/trunk/drivers/pci/pci.c b/trunk/drivers/pci/pci.c index 97fff785e97e..192be5dbde56 100644 --- a/trunk/drivers/pci/pci.c +++ b/trunk/drivers/pci/pci.c @@ -3162,6 +3162,31 @@ int __pci_reset_function(struct pci_dev *dev) } EXPORT_SYMBOL_GPL(__pci_reset_function); +/** + * __pci_reset_function_locked - reset a PCI device function while holding + * the @dev mutex lock. + * @dev: PCI device to reset + * + * Some devices allow an individual function to be reset without affecting + * other functions in the same device. The PCI device must be responsive + * to PCI config space in order to use this function. + * + * The device function is presumed to be unused and the caller is holding + * the device mutex lock when this function is called. + * Resetting the device will make the contents of PCI configuration space + * random, so any caller of this must be prepared to reinitialise the + * device including MSI, bus mastering, BARs, decoding IO and memory spaces, + * etc. + * + * Returns 0 if the device function was successfully reset or negative if the + * device doesn't support resetting a single function. + */ +int __pci_reset_function_locked(struct pci_dev *dev) +{ + return pci_dev_reset(dev, 1); +} +EXPORT_SYMBOL_GPL(__pci_reset_function_locked); + /** * pci_probe_reset_function - check whether the device can be safely reset * @dev: PCI device to reset diff --git a/trunk/include/linux/pci.h b/trunk/include/linux/pci.h index a16b1df3deff..65c2d8a32b23 100644 --- a/trunk/include/linux/pci.h +++ b/trunk/include/linux/pci.h @@ -817,6 +817,7 @@ int pcie_set_readrq(struct pci_dev *dev, int rq); int pcie_get_mps(struct pci_dev *dev); int pcie_set_mps(struct pci_dev *dev, int mps); int __pci_reset_function(struct pci_dev *dev); +int __pci_reset_function_locked(struct pci_dev *dev); int pci_reset_function(struct pci_dev *dev); void pci_update_resource(struct pci_dev *dev, int resno); int __must_check pci_assign_resource(struct pci_dev *dev, int i);