PCI/switchtec: Move check event ID from mask_event() to switchtec_event_isr()
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>
This commit is contained in:
parent
7501a02a9d
commit
2085747d53
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue