Skip to content

Commit

Permalink
firewire: ohci: flush AT contexts after bus reset - addendum
Browse files Browse the repository at this point in the history
Add comments
  - on why bus_reset_tasklet flushes AT queues,
  - that commit 76f73ca can possibly be reverted now.

Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Acked-by: Jarod Wilson <jarod@redhat.com>
  • Loading branch information
Stefan Richter committed Jan 4, 2011
1 parent 82b662d commit 78dec56
Showing 1 changed file with 7 additions and 0 deletions.
7 changes: 7 additions & 0 deletions drivers/firewire/ohci.c
Original file line number Diff line number Diff line change
Expand Up @@ -1336,6 +1336,8 @@ static int at_context_queue_packet(struct context *ctx,
* some controllers (like a JMicron JMB381 PCI-e) misbehave and wind
* up stalling out. So we just bail out in software and try again
* later, and everyone is happy.
* FIXME: Test of IntEvent.busReset may no longer be necessary since we
* flush AT queues in bus_reset_tasklet.
* FIXME: Document how the locking works.
*/
if (ohci->generation != packet->generation ||
Expand Down Expand Up @@ -1750,6 +1752,11 @@ static void bus_reset_tasklet(unsigned long data)

spin_unlock_irqrestore(&ohci->lock, flags);

/*
* Per OHCI 1.2 draft, clause 7.2.3.3, hardware may leave unsent
* packets in the AT queues and software needs to drain them.
* Some OHCI 1.1 controllers (JMicron) apparently require this too.
*/
at_context_flush(&ohci->at_request_ctx);
at_context_flush(&ohci->at_response_ctx);

Expand Down

0 comments on commit 78dec56

Please sign in to comment.