Commit 8e045a31 authored by Stefan Richter's avatar Stefan Richter

firewire: sbp2: replace some spin_lock_irqsave by spin_lock_irq

Users of card->lock        Calling context
------------------------------------------------------------------------
sbp2_status_write          AR-req handler, tasklet
complete_transaction       AR-resp or AT-req handler, tasklet
sbp2_send_orb              among else scsi host .queuecommand, which may
                           be called in some sort of atomic context
sbp2_cancel_orbs           sbp2_send_management_orb/
                               sbp2_{login,reconnect,remove},
                               worklet or process
                           sbp2_scsi_abort, scsi eh thread
sbp2_allow_block           sbp2_login, worklet
sbp2_conditionally_block   among else complete_command_orb, tasklet
sbp2_conditionally_unblock sbp2_{login,reconnect}, worklet
sbp2_unblock               sbp2_{login,remove}, worklet or process

Drop the IRQ flags saving from sbp2_cancel_orbs,
sbp2_conditionally_unblock, and sbp2_unblock.
It was already omitted in sbp2_allow_block.
Signed-off-by: default avatarStefan Richter <stefanr@s5r6.in-berlin.de>
parent 0765cbd3
...@@ -524,13 +524,12 @@ static int sbp2_cancel_orbs(struct sbp2_logical_unit *lu) ...@@ -524,13 +524,12 @@ static int sbp2_cancel_orbs(struct sbp2_logical_unit *lu)
struct fw_device *device = target_parent_device(lu->tgt); struct fw_device *device = target_parent_device(lu->tgt);
struct sbp2_orb *orb, *next; struct sbp2_orb *orb, *next;
struct list_head list; struct list_head list;
unsigned long flags;
int retval = -ENOENT; int retval = -ENOENT;
INIT_LIST_HEAD(&list); INIT_LIST_HEAD(&list);
spin_lock_irqsave(&device->card->lock, flags); spin_lock_irq(&device->card->lock);
list_splice_init(&lu->orb_list, &list); list_splice_init(&lu->orb_list, &list);
spin_unlock_irqrestore(&device->card->lock, flags); spin_unlock_irq(&device->card->lock);
list_for_each_entry_safe(orb, next, &list, link) { list_for_each_entry_safe(orb, next, &list, link) {
retval = 0; retval = 0;
...@@ -737,15 +736,14 @@ static void sbp2_conditionally_unblock(struct sbp2_logical_unit *lu) ...@@ -737,15 +736,14 @@ static void sbp2_conditionally_unblock(struct sbp2_logical_unit *lu)
struct fw_card *card = target_parent_device(tgt)->card; struct fw_card *card = target_parent_device(tgt)->card;
struct Scsi_Host *shost = struct Scsi_Host *shost =
container_of((void *)tgt, struct Scsi_Host, hostdata[0]); container_of((void *)tgt, struct Scsi_Host, hostdata[0]);
unsigned long flags;
bool unblock = false; bool unblock = false;
spin_lock_irqsave(&card->lock, flags); spin_lock_irq(&card->lock);
if (lu->blocked && lu->generation == card->generation) { if (lu->blocked && lu->generation == card->generation) {
lu->blocked = false; lu->blocked = false;
unblock = --tgt->blocked == 0; unblock = --tgt->blocked == 0;
} }
spin_unlock_irqrestore(&card->lock, flags); spin_unlock_irq(&card->lock);
if (unblock) if (unblock)
scsi_unblock_requests(shost); scsi_unblock_requests(shost);
...@@ -762,11 +760,10 @@ static void sbp2_unblock(struct sbp2_target *tgt) ...@@ -762,11 +760,10 @@ static void sbp2_unblock(struct sbp2_target *tgt)
struct fw_card *card = target_parent_device(tgt)->card; struct fw_card *card = target_parent_device(tgt)->card;
struct Scsi_Host *shost = struct Scsi_Host *shost =
container_of((void *)tgt, struct Scsi_Host, hostdata[0]); container_of((void *)tgt, struct Scsi_Host, hostdata[0]);
unsigned long flags;
spin_lock_irqsave(&card->lock, flags); spin_lock_irq(&card->lock);
++tgt->dont_block; ++tgt->dont_block;
spin_unlock_irqrestore(&card->lock, flags); spin_unlock_irq(&card->lock);
scsi_unblock_requests(shost); scsi_unblock_requests(shost);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment