linux-scsi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Mike Christie <michaelc@cs.wisc.edu>
To: Jitendra Bhivare <jitendra.bhivare@avagotech.com>,
	linux-scsi@vger.kernel.org
Subject: Re: [PATCH 03/15] be2iscsi: Fix to use atomic operations for tag_state
Date: Sun, 20 Dec 2015 01:44:38 -0600	[thread overview]
Message-ID: <56765C66.5080204@cs.wisc.edu> (raw)
In-Reply-To: <1450194906-12925-4-git-send-email-jitendra.bhivare@avagotech.com>

On 12/15/2015 09:54 AM, Jitendra Bhivare wrote:
> From: Jitendra <jitendra.bhivare@avagotech.com>
> 
> Replace lock based tag_state manipulations with atomic operations.
> 
> Signed-off-by: Jitendra <jitendra.bhivare@avagotech.com>
> ---
>  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.

  parent reply	other threads:[~2015-12-20  7:44 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-15 15:54 [PATCH 00/15] be2iscsi: driver update 11.0.0.0 Jitendra Bhivare
2015-12-15 15:54 ` [PATCH 01/15] be2iscsi: Fix soft lockup in mgmt_get_all_if_id path using bmbx Jitendra Bhivare
2015-12-18  8:58   ` Hannes Reinecke
2015-12-15 15:54 ` [PATCH 02/15] be2iscsi: Fix mbox synchronization replacing spinlock with mutex Jitendra Bhivare
2015-12-18  8:59   ` Hannes Reinecke
2015-12-20  7:35   ` Mike Christie
2015-12-20  7:47     ` Mike Christie
2015-12-15 15:54 ` [PATCH 03/15] be2iscsi: Fix to use atomic operations for tag_state Jitendra Bhivare
2015-12-18  8:59   ` Hannes Reinecke
2015-12-20  7:44   ` Mike Christie [this message]
2015-12-20  9:01     ` Mike Christie
2015-12-20 10:13       ` Mike Christie
2015-12-21  4:47         ` Jitendra Bhivare
2015-12-15 15:54 ` [PATCH 04/15] be2iscsi: Fix to synchronize tag allocation using spin_lock Jitendra Bhivare
2015-12-18  8:59   ` Hannes Reinecke
2015-12-15 15:54 ` [PATCH 05/15] be2iscsi: Set mbox timeout to 30s Jitendra Bhivare
2015-12-18  9:00   ` Hannes Reinecke
2015-12-15 15:54 ` [PATCH 06/15] be2iscsi: Added return value check for mgmt_get_all_if_id Jitendra Bhivare
2015-12-18  9:00   ` Hannes Reinecke
2015-12-15 15:54 ` [PATCH 07/15] be2iscsi: Fix to remove shutdown entry point Jitendra Bhivare
2015-12-18  9:01   ` Hannes Reinecke
2015-12-15 15:54 ` [PATCH 08/15] be2iscsi: Fix VLAN support for IPv6 network Jitendra Bhivare
2015-12-18  9:01   ` Hannes Reinecke
2015-12-15 15:55 ` [PATCH 09/15] be2iscsi: Fix to handle misconfigured optics events Jitendra Bhivare
2015-12-18  9:02   ` Hannes Reinecke
2015-12-15 15:55 ` [PATCH 10/15] be2iscsi: Add FW config validation Jitendra Bhivare
2015-12-18  9:03   ` Hannes Reinecke
2015-12-21  2:57     ` Jitendra Bhivare
2015-12-21  3:59     ` Jitendra Bhivare
2015-12-15 15:55 ` [PATCH 11/15] be2iscsi: Fix return value for MCC completion Jitendra Bhivare
2015-12-18  9:04   ` Hannes Reinecke
2015-12-15 15:55 ` [PATCH 12/15] be2iscsi: Fix IOPOLL implementation Jitendra Bhivare
2015-12-18  9:04   ` Hannes Reinecke
2015-12-15 15:55 ` [PATCH 13/15] be2iscsi: Fix to process 25G link speed info from FW Jitendra Bhivare
2015-12-18  9:07   ` Hannes Reinecke
     [not found]     ` <CAOA9gs36+ozeo=ZtqHYMvznwMSG6wKnG_zLOp__=wnKMkKv0CA@mail.gmail.com>
2015-12-21  7:13       ` Hannes Reinecke
2015-12-15 15:55 ` [PATCH 14/15] be2iscsi: Fix WRB leak in login/logout path Jitendra Bhivare
2015-12-18  9:08   ` Hannes Reinecke
2015-12-15 15:55 ` [PATCH 15/15] be2iscsi: Update the driver version Jitendra Bhivare
2015-12-18  9:08   ` Hannes Reinecke
2015-12-18  9:11 ` [PATCH 00/15] be2iscsi: driver update 11.0.0.0 Hannes Reinecke

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=56765C66.5080204@cs.wisc.edu \
    --to=michaelc@cs.wisc.edu \
    --cc=jitendra.bhivare@avagotech.com \
    --cc=linux-scsi@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).