mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 12:42:02 +00:00
firewire: ohci: optimize iso context checks in the interrupt handler
When the isochRx/isochTx bit is clear, we do not need to read the corresponding iso interrupt event register. Signed-off-by: Clemens Ladisch <clemens@ladisch.de> Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
This commit is contained in:
parent
5b06db166c
commit
2dd5bed593
@ -1813,22 +1813,28 @@ static irqreturn_t irq_handler(int irq, void *data)
|
||||
if (event & OHCI1394_respTxComplete)
|
||||
tasklet_schedule(&ohci->at_response_ctx.tasklet);
|
||||
|
||||
iso_event = reg_read(ohci, OHCI1394_IsoRecvIntEventClear);
|
||||
reg_write(ohci, OHCI1394_IsoRecvIntEventClear, iso_event);
|
||||
if (event & OHCI1394_isochRx) {
|
||||
iso_event = reg_read(ohci, OHCI1394_IsoRecvIntEventClear);
|
||||
reg_write(ohci, OHCI1394_IsoRecvIntEventClear, iso_event);
|
||||
|
||||
while (iso_event) {
|
||||
i = ffs(iso_event) - 1;
|
||||
tasklet_schedule(&ohci->ir_context_list[i].context.tasklet);
|
||||
iso_event &= ~(1 << i);
|
||||
while (iso_event) {
|
||||
i = ffs(iso_event) - 1;
|
||||
tasklet_schedule(
|
||||
&ohci->ir_context_list[i].context.tasklet);
|
||||
iso_event &= ~(1 << i);
|
||||
}
|
||||
}
|
||||
|
||||
iso_event = reg_read(ohci, OHCI1394_IsoXmitIntEventClear);
|
||||
reg_write(ohci, OHCI1394_IsoXmitIntEventClear, iso_event);
|
||||
if (event & OHCI1394_isochTx) {
|
||||
iso_event = reg_read(ohci, OHCI1394_IsoXmitIntEventClear);
|
||||
reg_write(ohci, OHCI1394_IsoXmitIntEventClear, iso_event);
|
||||
|
||||
while (iso_event) {
|
||||
i = ffs(iso_event) - 1;
|
||||
tasklet_schedule(&ohci->it_context_list[i].context.tasklet);
|
||||
iso_event &= ~(1 << i);
|
||||
while (iso_event) {
|
||||
i = ffs(iso_event) - 1;
|
||||
tasklet_schedule(
|
||||
&ohci->it_context_list[i].context.tasklet);
|
||||
iso_event &= ~(1 << i);
|
||||
}
|
||||
}
|
||||
|
||||
if (unlikely(event & OHCI1394_regAccessFail))
|
||||
|
Loading…
Reference in New Issue
Block a user