diff options
author | Stefan Richter <stefanr@s5r6.in-berlin.de> | 2007-08-25 08:40:42 (GMT) |
---|---|---|
committer | Stefan Richter <stefanr@s5r6.in-berlin.de> | 2007-10-16 22:00:02 (GMT) |
commit | 1b34e97441384d527c438a6ee597bfc800373bce (patch) | |
tree | 2a4bacf54f5615babbf31a850ccc31781620c375 | |
parent | 930e4b7fe3b4e1c4e14b9c22e4c9c74dc8db75f3 (diff) | |
download | linux-1b34e97441384d527c438a6ee597bfc800373bce.tar.xz |
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>
-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 238730f..7ecc154 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, orb->rcode = rcode; if (orb->rcode != RCODE_COMPLETE) { list_del(&orb->link); + spin_unlock_irqrestore(&card->lock, flags); orb->callback(orb, NULL); + } else { + spin_unlock_irqrestore(&card->lock, flags); } - spin_unlock_irqrestore(&card->lock, flags); - kref_put(&orb->kref, free_orb); } |