mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-12 07:37:31 -04:00
PCI/IOV: Serialize sysfs sriov_numvfs reads vs writes
[ Upstream commit 35ff867b76576e32f34c698ccd11343f7d616204 ] When sriov_numvfs is being updated, we call the driver->sriov_configure() function, which may enable VFs and call probe functions, which may make new devices visible. This all happens before before sriov_numvfs_store() updates sriov->num_VFs, so previously, concurrent sysfs reads of sriov_numvfs returned stale values. Serialize the sysfs read vs the write so the read returns the correct num_VFs value. [bhelgaas: hold device_lock instead of checking mutex_is_locked()] Link: https://bugzilla.kernel.org/show_bug.cgi?id=202991 Link: https://lore.kernel.org/r/20190911072736.32091-1-pierre.cregut@orange.com Signed-off-by: Pierre Crégut <pierre.cregut@orange.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
a34a9a4c31
commit
bdb830d101
1 changed files with 7 additions and 1 deletions
|
|
@ -253,8 +253,14 @@ static ssize_t sriov_numvfs_show(struct device *dev,
|
|||
char *buf)
|
||||
{
|
||||
struct pci_dev *pdev = to_pci_dev(dev);
|
||||
u16 num_vfs;
|
||||
|
||||
return sprintf(buf, "%u\n", pdev->sriov->num_VFs);
|
||||
/* Serialize vs sriov_numvfs_store() so readers see valid num_VFs */
|
||||
device_lock(&pdev->dev);
|
||||
num_vfs = pdev->sriov->num_VFs;
|
||||
device_unlock(&pdev->dev);
|
||||
|
||||
return sprintf(buf, "%u\n", num_vfs);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Reference in a new issue