diff options
author | Damien Le Moal <dlemoal@kernel.org> | 2023-04-15 05:35:40 +0300 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2023-06-23 23:03:34 +0300 |
commit | fb620ae73b70c2f57b9d3e911fc24c024ba2324f (patch) | |
tree | a2d3149033142ee827a006fcfe7b4222696135f7 /drivers/misc/pci_endpoint_test.c | |
parent | f61b7634a3249d12b9daa36ffbdb9965b6f24c6c (diff) | |
download | linux-fb620ae73b70c2f57b9d3e911fc24c024ba2324f.tar.xz |
misc: pci_endpoint_test: Re-init completion for every test
The irq_raised completion used to detect the end of a test case is
initialized when the test device is probed, but never reinitialized again
before a test case. As a result, the irq_raised completion synchronization
is effective only for the first ioctl test case executed. Any subsequent
call to wait_for_completion() by another ioctl() call will immediately
return, potentially too early, leading to false positive failures.
Fix this by reinitializing the irq_raised completion before starting a new
ioctl() test command.
Link: https://lore.kernel.org/r/20230415023542.77601-16-dlemoal@kernel.org
Fixes: 2c156ac71c6b ("misc: Add host side PCI driver for PCI test function device")
Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Manivannan Sadhasivam <mani@kernel.org>
Cc: stable@vger.kernel.org
Diffstat (limited to 'drivers/misc/pci_endpoint_test.c')
-rw-r--r-- | drivers/misc/pci_endpoint_test.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/misc/pci_endpoint_test.c b/drivers/misc/pci_endpoint_test.c index 01235236e9bc..24efe3b88a1f 100644 --- a/drivers/misc/pci_endpoint_test.c +++ b/drivers/misc/pci_endpoint_test.c @@ -729,6 +729,10 @@ static long pci_endpoint_test_ioctl(struct file *file, unsigned int cmd, struct pci_dev *pdev = test->pdev; mutex_lock(&test->mutex); + + reinit_completion(&test->irq_raised); + test->last_irq = -ENODATA; + switch (cmd) { case PCITEST_BAR: bar = arg; |