serial: 8250_exar: Clear interrupts before registering handler
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Mon, 19 Feb 2024 15:04:59 +0000 (17:04 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 2 Mar 2024 20:52:06 +0000 (21:52 +0100)
While now there is no issue if IRQ is fired before we clearing
the interrupts as the handler does the same, but strictly speaking
it might be problematic if IRQ handler wants to do something more.

Move clearing interrupt code to be called before registering the
IRQ handler.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://lore.kernel.org/r/20240219150627.2101198-4-andriy.shevchenko@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/8250/8250_exar.c

index 5687b21b328d3859b04b3fdc70136821d4eb8fa5..9ab30d974e293369e17134fb3fe64c02905e2d39 100644 (file)
@@ -713,14 +713,14 @@ exar_pci_probe(struct pci_dev *pcidev, const struct pci_device_id *ent)
        uart.port.irq = pci_irq_vector(pcidev, 0);
        uart.port.dev = &pcidev->dev;
 
+       /* Clear interrupts */
+       exar_misc_clear(priv);
+
        rc = devm_request_irq(&pcidev->dev, uart.port.irq, exar_misc_handler,
                         IRQF_SHARED, "exar_uart", priv);
        if (rc)
                return rc;
 
-       /* Clear interrupts */
-       exar_misc_clear(priv);
-
        for (i = 0; i < nr_ports && i < maxnr; i++) {
                rc = board->setup(priv, pcidev, &uart, i);
                if (rc) {