diff options
author | Stefan Richter <stefanr@s5r6.in-berlin.de> | 2007-12-16 14:53:13 -0500 |
---|---|---|
committer | Stefan Richter <stefanr@s5r6.in-berlin.de> | 2008-01-30 16:22:21 -0500 |
commit | 85c5798b09e9248f29edbc42f10b99842661e85c (patch) | |
tree | 061993f037fc6122fae5efe5729613e15f9eba76 /drivers/ieee1394/ohci1394.c | |
parent | 4e6343a10b6afb5b036db35c4a0f0aa1333232e1 (diff) |
ieee1394: ohci1394: don't schedule IT tasklets on IR events
Bug noted by Pieter Palmers: Isochronous transmit tasklets were
scheduled on isochronous receive events, in addition to the proper
isochronous receive tasklets.
http://marc.info/?l=linux1394-devel&m=119783196222802
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Diffstat (limited to 'drivers/ieee1394/ohci1394.c')
-rw-r--r-- | drivers/ieee1394/ohci1394.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/ieee1394/ohci1394.c b/drivers/ieee1394/ohci1394.c index 372c5c16eb31..969de2a2d633 100644 --- a/drivers/ieee1394/ohci1394.c +++ b/drivers/ieee1394/ohci1394.c | |||
@@ -2126,10 +2126,14 @@ static void ohci_schedule_iso_tasklets(struct ti_ohci *ohci, | |||
2126 | list_for_each_entry(t, &ohci->iso_tasklet_list, link) { | 2126 | list_for_each_entry(t, &ohci->iso_tasklet_list, link) { |
2127 | mask = 1 << t->context; | 2127 | mask = 1 << t->context; |
2128 | 2128 | ||
2129 | if (t->type == OHCI_ISO_TRANSMIT && tx_event & mask) | 2129 | if (t->type == OHCI_ISO_TRANSMIT) { |
2130 | tasklet_schedule(&t->tasklet); | 2130 | if (tx_event & mask) |
2131 | else if (rx_event & mask) | 2131 | tasklet_schedule(&t->tasklet); |
2132 | tasklet_schedule(&t->tasklet); | 2132 | } else { |
2133 | /* OHCI_ISO_RECEIVE or OHCI_ISO_MULTICHANNEL_RECEIVE */ | ||
2134 | if (rx_event & mask) | ||
2135 | tasklet_schedule(&t->tasklet); | ||
2136 | } | ||
2133 | } | 2137 | } |
2134 | 2138 | ||
2135 | spin_unlock_irqrestore(&ohci->iso_tasklet_list_lock, flags); | 2139 | spin_unlock_irqrestore(&ohci->iso_tasklet_list_lock, flags); |