diff options
author | Stefan Richter <stefanr@s5r6.in-berlin.de> | 2007-08-25 04:40:42 -0400 |
---|---|---|
committer | Stefan Richter <stefanr@s5r6.in-berlin.de> | 2007-10-16 18:00:02 -0400 |
commit | 1b34e97441384d527c438a6ee597bfc800373bce (patch) | |
tree | 2a4bacf54f5615babbf31a850ccc31781620c375 /drivers/firewire/fw-sbp2.c | |
parent | 930e4b7fe3b4e1c4e14b9c22e4c9c74dc8db75f3 (diff) |
firewire: fw-sbp2: always enable IRQs before calling command ORB callback
On IOMMU-less noncoherent architectures, orb->callback will memcpy the
whole SCSI command buffer for READ-like SCSI commands. It is therefore
friendlier to enable IRQs before the call, like before patch "Add
ref-counting for sbp2 orbs".
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Acked-by: Kristian Høgsberg <krh@redhat.com>
Diffstat (limited to 'drivers/firewire/fw-sbp2.c')
-rw-r--r-- | drivers/firewire/fw-sbp2.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/firewire/fw-sbp2.c b/drivers/firewire/fw-sbp2.c index 238730f75db1..7ecc154a8274 100644 --- a/drivers/firewire/fw-sbp2.c +++ b/drivers/firewire/fw-sbp2.c | |||
@@ -361,11 +361,12 @@ complete_transaction(struct fw_card *card, int rcode, | |||
361 | orb->rcode = rcode; | 361 | orb->rcode = rcode; |
362 | if (orb->rcode != RCODE_COMPLETE) { | 362 | if (orb->rcode != RCODE_COMPLETE) { |
363 | list_del(&orb->link); | 363 | list_del(&orb->link); |
364 | spin_unlock_irqrestore(&card->lock, flags); | ||
364 | orb->callback(orb, NULL); | 365 | orb->callback(orb, NULL); |
366 | } else { | ||
367 | spin_unlock_irqrestore(&card->lock, flags); | ||
365 | } | 368 | } |
366 | 369 | ||
367 | spin_unlock_irqrestore(&card->lock, flags); | ||
368 | |||
369 | kref_put(&orb->kref, free_orb); | 370 | kref_put(&orb->kref, free_orb); |
370 | } | 371 | } |
371 | 372 | ||