ACK On Mar 9, 2012, at 3:13 AM, santosh nayak wrote: > From: Santosh Nayak <santoshprasadnayak@xxxxxxxxx> > > Use spin_lock_irqsave() for task_state. > > Signed-off-by: Santosh Nayak <santoshprasadnayak@xxxxxxxxx> > --- > drivers/scsi/pm8001/pm8001_hwi.c | 18 ++++++++++-------- > 1 files changed, 10 insertions(+), 8 deletions(-) > > diff --git a/drivers/scsi/pm8001/pm8001_hwi.c b/drivers/scsi/pm8001/pm8001_hwi.c > index 3619f6e..9d82ee5 100644 > --- a/drivers/scsi/pm8001/pm8001_hwi.c > +++ b/drivers/scsi/pm8001/pm8001_hwi.c > @@ -2093,6 +2093,7 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb) > struct ata_task_resp *resp ; > u32 *sata_resp; > struct pm8001_device *pm8001_dev; > + unsigned long flags; > > psataPayload = (struct sata_completion_resp *)(piomb + 4); > status = le32_to_cpu(psataPayload->status); > @@ -2382,26 +2383,26 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb) > ts->stat = SAS_DEV_NO_RESPONSE; > break; > } > - spin_lock_irq(&t->task_state_lock); > + spin_lock_irqsave(&t->task_state_lock, flags); > t->task_state_flags &= ~SAS_TASK_STATE_PENDING; > t->task_state_flags &= ~SAS_TASK_AT_INITIATOR; > t->task_state_flags |= SAS_TASK_STATE_DONE; > if (unlikely((t->task_state_flags & SAS_TASK_STATE_ABORTED))) { > - spin_unlock_irq(&t->task_state_lock); > + spin_unlock_irqrestore(&t->task_state_lock, flags); > PM8001_FAIL_DBG(pm8001_ha, > pm8001_printk("task 0x%p done with io_status 0x%x" > " resp 0x%x stat 0x%x but aborted by upper layer!\n", > t, status, ts->resp, ts->stat)); > pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); > } else if (t->uldd_task) { > - spin_unlock_irq(&t->task_state_lock); > + spin_unlock_irqrestore(&t->task_state_lock, flags); > pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); > mb();/* ditto */ > spin_unlock_irq(&pm8001_ha->lock); > t->task_done(t); > spin_lock_irq(&pm8001_ha->lock); > } else if (!t->uldd_task) { > - spin_unlock_irq(&t->task_state_lock); > + spin_unlock_irqrestore(&t->task_state_lock, flags); > pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); > mb();/*ditto*/ > spin_unlock_irq(&pm8001_ha->lock); > @@ -2423,6 +2424,7 @@ static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha , void *piomb) > u32 tag = le32_to_cpu(psataPayload->tag); > u32 port_id = le32_to_cpu(psataPayload->port_id); > u32 dev_id = le32_to_cpu(psataPayload->device_id); > + unsigned long flags; > > ccb = &pm8001_ha->ccb_info[tag]; > t = ccb->task; > @@ -2593,26 +2595,26 @@ static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha , void *piomb) > ts->stat = SAS_OPEN_TO; > break; > } > - spin_lock_irq(&t->task_state_lock); > + spin_lock_irqsave(&t->task_state_lock, flags); > t->task_state_flags &= ~SAS_TASK_STATE_PENDING; > t->task_state_flags &= ~SAS_TASK_AT_INITIATOR; > t->task_state_flags |= SAS_TASK_STATE_DONE; > if (unlikely((t->task_state_flags & SAS_TASK_STATE_ABORTED))) { > - spin_unlock_irq(&t->task_state_lock); > + spin_unlock_irqrestore(&t->task_state_lock, flags); > PM8001_FAIL_DBG(pm8001_ha, > pm8001_printk("task 0x%p done with io_status 0x%x" > " resp 0x%x stat 0x%x but aborted by upper layer!\n", > t, event, ts->resp, ts->stat)); > pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); > } else if (t->uldd_task) { > - spin_unlock_irq(&t->task_state_lock); > + spin_unlock_irqrestore(&t->task_state_lock, flags); > pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); > mb();/* ditto */ > spin_unlock_irq(&pm8001_ha->lock); > t->task_done(t); > spin_lock_irq(&pm8001_ha->lock); > } else if (!t->uldd_task) { > - spin_unlock_irq(&t->task_state_lock); > + spin_unlock_irqrestore(&t->task_state_lock, flags); > pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); > mb();/*ditto*/ > spin_unlock_irq(&pm8001_ha->lock); -- To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html