PCI/switchtec: Move check event ID from mask_event() to switchtec_event_isr()
authorWesley Sheng <wesley.sheng@microchip.com>
Mon, 6 Jan 2020 19:03:30 +0000 (12:03 -0700)
committerBjorn Helgaas <bhelgaas@google.com>
Wed, 15 Jan 2020 17:00:36 +0000 (11:00 -0600)
The event ID check doesn't depend on anything in the mask_all_events() to
mask_event() path.  Do it in switchtec_event_isr() to avoid the CSR read in
mask_event().

Link: https://lore.kernel.org/r/20200106190337.2428-6-logang@deltatee.com
Signed-off-by: Wesley Sheng <wesley.sheng@microchip.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/switch/switchtec.c

index 231499d..05d4cb4 100644 (file)
@@ -1180,10 +1180,6 @@ static int mask_event(struct switchtec_dev *stdev, int eid, int idx)
        if (!(hdr & SWITCHTEC_EVENT_OCCURRED && hdr & SWITCHTEC_EVENT_EN_IRQ))
                return 0;
 
-       if (eid == SWITCHTEC_IOCTL_EVENT_LINK_STATE ||
-           eid == SWITCHTEC_IOCTL_EVENT_MRPC_COMP)
-               return 0;
-
        dev_dbg(&stdev->dev, "%s: %d %d %x\n", __func__, eid, idx, hdr);
        hdr &= ~(SWITCHTEC_EVENT_EN_IRQ | SWITCHTEC_EVENT_OCCURRED);
        iowrite32(hdr, hdr_reg);
@@ -1230,8 +1226,13 @@ static irqreturn_t switchtec_event_isr(int irq, void *dev)
 
        check_link_state_events(stdev);
 
-       for (eid = 0; eid < SWITCHTEC_IOCTL_MAX_EVENTS; eid++)
+       for (eid = 0; eid < SWITCHTEC_IOCTL_MAX_EVENTS; eid++) {
+               if (eid == SWITCHTEC_IOCTL_EVENT_LINK_STATE ||
+                   eid == SWITCHTEC_IOCTL_EVENT_MRPC_COMP)
+                       continue;
+
                event_count += mask_all_events(stdev, eid);
+       }
 
        if (event_count) {
                atomic_inc(&stdev->event_cnt);