]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
misc: pci_endpoint_test: Re-init completion for every test
authorDamien Le Moal <dlemoal@kernel.org>
Sat, 15 Apr 2023 02:35:40 +0000 (11:35 +0900)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 11 Aug 2023 09:33:45 +0000 (11:33 +0200)
commit fb620ae73b70c2f57b9d3e911fc24c024ba2324f upstream.

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
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/misc/pci_endpoint_test.c

index 953af49dd38a531f7b9f8b45d734f2ab07b6fd74..60cf07497e7bab4c3d21371130adba33ce7ca0ec 100644 (file)
@@ -425,6 +425,10 @@ static long pci_endpoint_test_ioctl(struct file *file, unsigned int cmd,
        struct pci_endpoint_test *test = to_endpoint_test(file->private_data);
 
        mutex_lock(&test->mutex);
+
+       reinit_completion(&test->irq_raised);
+       test->last_irq = -ENODATA;
+
        switch (cmd) {
        case PCITEST_BAR:
                bar = arg;