On 12/15/2015 09:54 AM, Jitendra Bhivare wrote:
> From: Jitendra <[email protected]>
> 
> Replace lock based tag_state manipulations with atomic operations.
> 
> Signed-off-by: Jitendra <[email protected]>
> ---
>  drivers/scsi/be2iscsi/be.h      |    2 +-
>  drivers/scsi/be2iscsi/be_cmds.c |   26 ++++++++++++--------------
>  2 files changed, 13 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/scsi/be2iscsi/be.h b/drivers/scsi/be2iscsi/be.h
> index cf19bce..419b53f 100644
> --- a/drivers/scsi/be2iscsi/be.h
> +++ b/drivers/scsi/be2iscsi/be.h
> @@ -113,7 +113,7 @@ struct beiscsi_mcc_tag_state {
>  #define MCC_TAG_STATE_COMPLETED 0x00
>  #define MCC_TAG_STATE_RUNNING   0x01
>  #define MCC_TAG_STATE_TIMEOUT   0x02
> -     uint8_t tag_state;
> +     atomic_t tag_state;
>       struct be_dma_mem tag_mem_state;
>  };
>  
> diff --git a/drivers/scsi/be2iscsi/be_cmds.c b/drivers/scsi/be2iscsi/be_cmds.c
> index 6fabded..21c806f 100644
> --- a/drivers/scsi/be2iscsi/be_cmds.c
> +++ b/drivers/scsi/be2iscsi/be_cmds.c
> @@ -164,9 +164,8 @@ int beiscsi_mccq_compl(struct beiscsi_hba *phba,
>       }
>  
>       /* Set MBX Tag state to Active */
> -     mutex_lock(&phba->ctrl.mbox_lock);
> -     phba->ctrl.ptag_state[tag].tag_state = MCC_TAG_STATE_RUNNING;
> -     mutex_unlock(&phba->ctrl.mbox_lock);
> +     atomic_set(&phba->ctrl.ptag_state[tag].tag_state,
> +                     MCC_TAG_STATE_RUNNING);
>  
>       /* wait for the mccq completion */
>       rc = wait_event_interruptible_timeout(
> @@ -178,9 +177,8 @@ int beiscsi_mccq_compl(struct beiscsi_hba *phba,
>       if (rc <= 0) {
>               struct be_dma_mem *tag_mem;
>               /* Set MBX Tag state to timeout */
> -             mutex_lock(&phba->ctrl.mbox_lock);
> -             phba->ctrl.ptag_state[tag].tag_state = MCC_TAG_STATE_TIMEOUT;
> -             mutex_unlock(&phba->ctrl.mbox_lock);
> +             atomic_set(&phba->ctrl.ptag_state[tag].tag_state,
> +                             MCC_TAG_STATE_TIMEOUT);
>  
>               /* Store resource addr to be freed later */
>               tag_mem = &phba->ctrl.ptag_state[tag].tag_mem_state;
> @@ -199,9 +197,8 @@ int beiscsi_mccq_compl(struct beiscsi_hba *phba,
>       } else {
>               rc = 0;
>               /* Set MBX Tag state to completed */
> -             mutex_lock(&phba->ctrl.mbox_lock);
> -             phba->ctrl.ptag_state[tag].tag_state = MCC_TAG_STATE_COMPLETED;
> -             mutex_unlock(&phba->ctrl.mbox_lock);
> +             atomic_set(&phba->ctrl.ptag_state[tag].tag_state,
> +                             MCC_TAG_STATE_COMPLETED);
>       }
>  
>       mcc_tag_response = phba->ctrl.mcc_numtag[tag];
> @@ -373,9 +370,11 @@ int be_mcc_compl_process_isr(struct be_ctrl_info *ctrl,
>       ctrl->mcc_numtag[tag] |= (extd_status & 0x000000FF) << 8;
>       ctrl->mcc_numtag[tag] |= (compl_status & 0x000000FF);
>  
> -     if (ctrl->ptag_state[tag].tag_state == MCC_TAG_STATE_RUNNING) {
> +     if (atomic_read(&ctrl->ptag_state[tag].tag_state) ==
> +             MCC_TAG_STATE_RUNNING) {
>               wake_up_interruptible(&ctrl->mcc_wait[tag]);
> -     } else if (ctrl->ptag_state[tag].tag_state == MCC_TAG_STATE_TIMEOUT) {
> +     } else if (atomic_read(&ctrl->ptag_state[tag].tag_state) ==
> +                     MCC_TAG_STATE_TIMEOUT) {
>               struct be_dma_mem *tag_mem;
>               tag_mem = &ctrl->ptag_state[tag].tag_mem_state;
>  
> @@ -390,9 +389,8 @@ int be_mcc_compl_process_isr(struct be_ctrl_info *ctrl,
>                                           tag_mem->va, tag_mem->dma);
>  
>               /* Change tag state */
> -             mutex_lock(&phba->ctrl.mbox_lock);
> -             ctrl->ptag_state[tag].tag_state = MCC_TAG_STATE_COMPLETED;
> -             mutex_unlock(&phba->ctrl.mbox_lock);
> +             atomic_set(&ctrl->ptag_state[tag].tag_state,
> +                             MCC_TAG_STATE_COMPLETED);
>  
>               /* Free MCC Tag */
>               free_mcc_tag(ctrl, tag);
> 

I think if you only need to get and set a u8 then you can just use a u8
since the operation will be atomic. No need for a atomic_t.
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to