lkml.org 
[lkml]   [2012]   [Mar]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] [SCSI] pm8001: Use spin_lock_irqsave() for task_state.
    Date
    From: Santosh Nayak <santoshprasadnayak@gmail.com>

    Use spin_lock_irqsave() for task_state.

    Signed-off-by: Santosh Nayak <santoshprasadnayak@gmail.com>
    ---
    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);
    --
    1.7.4.4


    \
     
     \ /
      Last update: 2012-03-09 09:17    [W:0.043 / U:7.460 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site