linux-scsi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/3] efct fixes & improvements
@ 2021-09-14 10:55 Dmitry Bogdanov
  2021-09-14 10:55 ` [PATCH 1/3] scsi: efct: add state in nport sm trace printout Dmitry Bogdanov
                   ` (4 more replies)
  0 siblings, 5 replies; 9+ messages in thread
From: Dmitry Bogdanov @ 2021-09-14 10:55 UTC (permalink / raw)
  To: Martin Petersen, target-devel
  Cc: linux-scsi, linux, James Smart, Dmitry Bogdanov

This patchset contains fixes of some isues that were found during
evaluation of Emulex HBA as a target.

This patchset is intended for scsi-queue.

Dmitry Bogdanov (3):
  scsi: efct: add state in nport sm trace printout
  scsi: efct: fix nport free
  scsi: efct: decrease area under spinlock

 drivers/scsi/elx/efct/efct_scsi.c  | 3 +--
 drivers/scsi/elx/libefc/efc.h      | 2 +-
 drivers/scsi/elx/libefc/efc_cmds.c | 7 ++++++-
 drivers/scsi/elx/libefc/efclib.h   | 1 +
 4 files changed, 9 insertions(+), 4 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 1/3] scsi: efct: add state in nport sm trace printout
  2021-09-14 10:55 [PATCH 0/3] efct fixes & improvements Dmitry Bogdanov
@ 2021-09-14 10:55 ` Dmitry Bogdanov
  2021-09-15 12:45   ` Ram Kishore Vegesna
  2021-09-14 10:55 ` [PATCH 2/3] scsi: efct: fix nport free Dmitry Bogdanov
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 9+ messages in thread
From: Dmitry Bogdanov @ 2021-09-14 10:55 UTC (permalink / raw)
  To: Martin Petersen, target-devel
  Cc: linux-scsi, linux, James Smart, Dmitry Bogdanov

Similar to other state machine traces and to make debug easier add the
state name to nport sm trace printout.

Signed-off-by: Dmitry Bogdanov <d.bogdanov@yadro.com>
---
 drivers/scsi/elx/libefc/efc.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/elx/libefc/efc.h b/drivers/scsi/elx/libefc/efc.h
index 927016283f41..468ff3cc9c00 100644
--- a/drivers/scsi/elx/libefc/efc.h
+++ b/drivers/scsi/elx/libefc/efc.h
@@ -47,6 +47,6 @@ enum efc_scsi_del_target_reason {
 
 #define nport_sm_trace(nport) \
 	efc_log_debug(nport->efc, \
-		"[%s] %-20s\n", nport->display_name, efc_sm_event_name(evt)) \
+		"[%s]  %-20s %-20s\n", nport->display_name, __func__, efc_sm_event_name(evt)) \
 
 #endif /* __EFC_H__ */
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 2/3] scsi: efct: fix nport free
  2021-09-14 10:55 [PATCH 0/3] efct fixes & improvements Dmitry Bogdanov
  2021-09-14 10:55 ` [PATCH 1/3] scsi: efct: add state in nport sm trace printout Dmitry Bogdanov
@ 2021-09-14 10:55 ` Dmitry Bogdanov
  2021-09-15 12:51   ` Ram Kishore Vegesna
  2021-09-14 10:55 ` [PATCH 3/3] scsi: efct: decrease area under spinlock Dmitry Bogdanov
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 9+ messages in thread
From: Dmitry Bogdanov @ 2021-09-14 10:55 UTC (permalink / raw)
  To: Martin Petersen, target-devel
  Cc: linux-scsi, linux, James Smart, Dmitry Bogdanov

nport_free for an empty nport hangs the state machine waiting for mbox
completion if nport is not yet attached thinking that it is attaching
right now.
Add a check for nport attaching state and complete nport free.

Signed-off-by: Dmitry Bogdanov <d.bogdanov@yadro.com>
---
 drivers/scsi/elx/libefc/efc_cmds.c | 7 ++++++-
 drivers/scsi/elx/libefc/efclib.h   | 1 +
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/elx/libefc/efc_cmds.c b/drivers/scsi/elx/libefc/efc_cmds.c
index 37e6697d86b8..f8665d48904a 100644
--- a/drivers/scsi/elx/libefc/efc_cmds.c
+++ b/drivers/scsi/elx/libefc/efc_cmds.c
@@ -249,6 +249,7 @@ efc_nport_attach_reg_vpi_cb(struct efc *efc, int status, u8 *mqe,
 {
 	struct efc_nport *nport = arg;
 
+	nport->attaching = false;
 	if (efc_nport_get_mbox_status(nport, mqe, status)) {
 		efc_nport_free_resources(nport, EFC_EVT_NPORT_ATTACH_FAIL, mqe);
 		return -EIO;
@@ -286,6 +287,8 @@ efc_cmd_nport_attach(struct efc *efc, struct efc_nport *nport, u32 fc_id)
 	if (rc) {
 		efc_log_err(efc, "REG_VPI command failure\n");
 		efc_nport_free_resources(nport, EFC_EVT_NPORT_ATTACH_FAIL, buf);
+	} else {
+		nport->attaching = true;
 	}
 
 	return rc;
@@ -302,8 +305,10 @@ efc_cmd_nport_free(struct efc *efc, struct efc_nport *nport)
 	/* Issue the UNREG_VPI command to free the assigned VPI context */
 	if (nport->attached)
 		efc_nport_free_unreg_vpi(nport);
-	else
+	else if (nport->attaching)
 		nport->free_req_pending = true;
+	else
+		efc_sm_post_event(&nport->sm, EFC_EVT_NPORT_FREE_OK, NULL);
 
 	return 0;
 }
diff --git a/drivers/scsi/elx/libefc/efclib.h b/drivers/scsi/elx/libefc/efclib.h
index ee291cabf7e0..dde20891c2dd 100644
--- a/drivers/scsi/elx/libefc/efclib.h
+++ b/drivers/scsi/elx/libefc/efclib.h
@@ -142,6 +142,7 @@ struct efc_nport {
 	bool			is_vport;
 	bool			free_req_pending;
 	bool			attached;
+	bool			attaching;
 	bool			p2p_winner;
 	struct efc_domain	*domain;
 	u64			wwpn;
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 3/3] scsi: efct: decrease area under spinlock
  2021-09-14 10:55 [PATCH 0/3] efct fixes & improvements Dmitry Bogdanov
  2021-09-14 10:55 ` [PATCH 1/3] scsi: efct: add state in nport sm trace printout Dmitry Bogdanov
  2021-09-14 10:55 ` [PATCH 2/3] scsi: efct: fix nport free Dmitry Bogdanov
@ 2021-09-14 10:55 ` Dmitry Bogdanov
  2021-09-15 12:51   ` Ram Kishore Vegesna
  2021-09-22  4:05 ` [PATCH 0/3] efct fixes & improvements Martin K. Petersen
  2021-09-29  4:20 ` Martin K. Petersen
  4 siblings, 1 reply; 9+ messages in thread
From: Dmitry Bogdanov @ 2021-09-14 10:55 UTC (permalink / raw)
  To: Martin Petersen, target-devel
  Cc: linux-scsi, linux, James Smart, Dmitry Bogdanov, Roman Bolshakov

Under session level spinlock node->active_ios_lock in
efct_scsi_io_alloc() there is a getting other spinlock of port level.
That lead to competition between sessions and even between IOs in the
same session due too much instructions under spinlock.

This change reduces spinlock area just to active_ios list for which
active_ios_lock is intended.
Spinlock CPU usage is decreased from 18% down to 13% in efct driver.
IOPS are increased from 220 kIOPS upto 264 kIOPS for one lun on my setup.

Reviewed-by: Roman Bolshakov <r.bolshakov@yadro.com>
Signed-off-by: Dmitry Bogdanov <d.bogdanov@yadro.com>
---
 drivers/scsi/elx/efct/efct_scsi.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/scsi/elx/efct/efct_scsi.c b/drivers/scsi/elx/efct/efct_scsi.c
index 40fb3a724c76..8535bb7eabd8 100644
--- a/drivers/scsi/elx/efct/efct_scsi.c
+++ b/drivers/scsi/elx/efct/efct_scsi.c
@@ -38,8 +38,6 @@ efct_scsi_io_alloc(struct efct_node *node)
 
 	xport = efct->xport;
 
-	spin_lock_irqsave(&node->active_ios_lock, flags);
-
 	io = efct_io_pool_io_alloc(efct->xport->io_pool);
 	if (!io) {
 		efc_log_err(efct, "IO alloc Failed\n");
@@ -66,6 +64,7 @@ efct_scsi_io_alloc(struct efct_node *node)
 
 	/* Add to node's active_ios list */
 	INIT_LIST_HEAD(&io->list_entry);
+	spin_lock_irqsave(&node->active_ios_lock, flags);
 	list_add(&io->list_entry, &node->active_ios);
 
 	spin_unlock_irqrestore(&node->active_ios_lock, flags);
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/3] scsi: efct: add state in nport sm trace printout
  2021-09-14 10:55 ` [PATCH 1/3] scsi: efct: add state in nport sm trace printout Dmitry Bogdanov
@ 2021-09-15 12:45   ` Ram Kishore Vegesna
  0 siblings, 0 replies; 9+ messages in thread
From: Ram Kishore Vegesna @ 2021-09-15 12:45 UTC (permalink / raw)
  To: Dmitry Bogdanov
  Cc: Martin Petersen, target-devel, linux-scsi, linux, James Smart

[-- Attachment #1: Type: text/plain, Size: 1756 bytes --]

Looks good. Thanks.

Reviewed-by: Ram Vegesna <ram.vegesna@broadcom.com>

On Tue, Sep 14, 2021 at 4:25 PM Dmitry Bogdanov <d.bogdanov@yadro.com> wrote:
>
> Similar to other state machine traces and to make debug easier add the
> state name to nport sm trace printout.
>
> Signed-off-by: Dmitry Bogdanov <d.bogdanov@yadro.com>
> ---
>  drivers/scsi/elx/libefc/efc.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/scsi/elx/libefc/efc.h b/drivers/scsi/elx/libefc/efc.h
> index 927016283f41..468ff3cc9c00 100644
> --- a/drivers/scsi/elx/libefc/efc.h
> +++ b/drivers/scsi/elx/libefc/efc.h
> @@ -47,6 +47,6 @@ enum efc_scsi_del_target_reason {
>
>  #define nport_sm_trace(nport) \
>         efc_log_debug(nport->efc, \
> -               "[%s] %-20s\n", nport->display_name, efc_sm_event_name(evt)) \
> +               "[%s]  %-20s %-20s\n", nport->display_name, __func__, efc_sm_event_name(evt)) \
>
>  #endif /* __EFC_H__ */
> --
> 2.25.1
>

-- 
This electronic communication and the information and any files transmitted 
with it, or attached to it, are confidential and are intended solely for 
the use of the individual or entity to whom it is addressed and may contain 
information that is confidential, legally privileged, protected by privacy 
laws, or otherwise restricted from disclosure to anyone else. If you are 
not the intended recipient or the person responsible for delivering the 
e-mail to the intended recipient, you are hereby notified that any use, 
copying, distributing, dissemination, forwarding, printing, or copying of 
this e-mail is strictly prohibited. If you received this e-mail in error, 
please return the e-mail to the sender, delete it from your computer, and 
destroy any printed copy of it.

[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4214 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/3] scsi: efct: fix nport free
  2021-09-14 10:55 ` [PATCH 2/3] scsi: efct: fix nport free Dmitry Bogdanov
@ 2021-09-15 12:51   ` Ram Kishore Vegesna
  0 siblings, 0 replies; 9+ messages in thread
From: Ram Kishore Vegesna @ 2021-09-15 12:51 UTC (permalink / raw)
  To: Dmitry Bogdanov
  Cc: Martin Petersen, target-devel, linux-scsi, linux, James Smart

[-- Attachment #1: Type: text/plain, Size: 3341 bytes --]

On Tue, Sep 14, 2021 at 4:25 PM Dmitry Bogdanov <d.bogdanov@yadro.com> wrote:
>
> nport_free for an empty nport hangs the state machine waiting for mbox
> completion if nport is not yet attached thinking that it is attaching
> right now.
> Add a check for nport attaching state and complete nport free.
>
> Signed-off-by: Dmitry Bogdanov <d.bogdanov@yadro.com>
> ---
>  drivers/scsi/elx/libefc/efc_cmds.c | 7 ++++++-
>  drivers/scsi/elx/libefc/efclib.h   | 1 +
>  2 files changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/scsi/elx/libefc/efc_cmds.c b/drivers/scsi/elx/libefc/efc_cmds.c
> index 37e6697d86b8..f8665d48904a 100644
> --- a/drivers/scsi/elx/libefc/efc_cmds.c
> +++ b/drivers/scsi/elx/libefc/efc_cmds.c
> @@ -249,6 +249,7 @@ efc_nport_attach_reg_vpi_cb(struct efc *efc, int status, u8 *mqe,
>  {
>         struct efc_nport *nport = arg;
>
> +       nport->attaching = false;
>         if (efc_nport_get_mbox_status(nport, mqe, status)) {
>                 efc_nport_free_resources(nport, EFC_EVT_NPORT_ATTACH_FAIL, mqe);
>                 return -EIO;
> @@ -286,6 +287,8 @@ efc_cmd_nport_attach(struct efc *efc, struct efc_nport *nport, u32 fc_id)
>         if (rc) {
>                 efc_log_err(efc, "REG_VPI command failure\n");
>                 efc_nport_free_resources(nport, EFC_EVT_NPORT_ATTACH_FAIL, buf);
> +       } else {
> +               nport->attaching = true;
>         }
>
>         return rc;
> @@ -302,8 +305,10 @@ efc_cmd_nport_free(struct efc *efc, struct efc_nport *nport)
>         /* Issue the UNREG_VPI command to free the assigned VPI context */
>         if (nport->attached)
>                 efc_nport_free_unreg_vpi(nport);
> -       else
> +       else if (nport->attaching)
>                 nport->free_req_pending = true;
> +       else
> +               efc_sm_post_event(&nport->sm, EFC_EVT_NPORT_FREE_OK, NULL);
>
>         return 0;
>  }
> diff --git a/drivers/scsi/elx/libefc/efclib.h b/drivers/scsi/elx/libefc/efclib.h
> index ee291cabf7e0..dde20891c2dd 100644
> --- a/drivers/scsi/elx/libefc/efclib.h
> +++ b/drivers/scsi/elx/libefc/efclib.h
> @@ -142,6 +142,7 @@ struct efc_nport {
>         bool                    is_vport;
>         bool                    free_req_pending;
>         bool                    attached;
> +       bool                    attaching;
>         bool                    p2p_winner;
>         struct efc_domain       *domain;
>         u64                     wwpn;
> --
> 2.25.1
>
Looks good. Thanks.

Reviewed-by: Ram Vegesna <ram.vegesna@broadcom.com>

-- 
This electronic communication and the information and any files transmitted 
with it, or attached to it, are confidential and are intended solely for 
the use of the individual or entity to whom it is addressed and may contain 
information that is confidential, legally privileged, protected by privacy 
laws, or otherwise restricted from disclosure to anyone else. If you are 
not the intended recipient or the person responsible for delivering the 
e-mail to the intended recipient, you are hereby notified that any use, 
copying, distributing, dissemination, forwarding, printing, or copying of 
this e-mail is strictly prohibited. If you received this e-mail in error, 
please return the e-mail to the sender, delete it from your computer, and 
destroy any printed copy of it.

[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4214 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 3/3] scsi: efct: decrease area under spinlock
  2021-09-14 10:55 ` [PATCH 3/3] scsi: efct: decrease area under spinlock Dmitry Bogdanov
@ 2021-09-15 12:51   ` Ram Kishore Vegesna
  0 siblings, 0 replies; 9+ messages in thread
From: Ram Kishore Vegesna @ 2021-09-15 12:51 UTC (permalink / raw)
  To: Dmitry Bogdanov
  Cc: Martin Petersen, target-devel, linux-scsi, linux, James Smart,
	Roman Bolshakov

[-- Attachment #1: Type: text/plain, Size: 2527 bytes --]

On Tue, Sep 14, 2021 at 4:25 PM Dmitry Bogdanov <d.bogdanov@yadro.com> wrote:
>
> Under session level spinlock node->active_ios_lock in
> efct_scsi_io_alloc() there is a getting other spinlock of port level.
> That lead to competition between sessions and even between IOs in the
> same session due too much instructions under spinlock.
>
> This change reduces spinlock area just to active_ios list for which
> active_ios_lock is intended.
> Spinlock CPU usage is decreased from 18% down to 13% in efct driver.
> IOPS are increased from 220 kIOPS upto 264 kIOPS for one lun on my setup.
>
> Reviewed-by: Roman Bolshakov <r.bolshakov@yadro.com>
> Signed-off-by: Dmitry Bogdanov <d.bogdanov@yadro.com>
> ---
>  drivers/scsi/elx/efct/efct_scsi.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/drivers/scsi/elx/efct/efct_scsi.c b/drivers/scsi/elx/efct/efct_scsi.c
> index 40fb3a724c76..8535bb7eabd8 100644
> --- a/drivers/scsi/elx/efct/efct_scsi.c
> +++ b/drivers/scsi/elx/efct/efct_scsi.c
> @@ -38,8 +38,6 @@ efct_scsi_io_alloc(struct efct_node *node)
>
>         xport = efct->xport;
>
> -       spin_lock_irqsave(&node->active_ios_lock, flags);
> -
>         io = efct_io_pool_io_alloc(efct->xport->io_pool);
>         if (!io) {
>                 efc_log_err(efct, "IO alloc Failed\n");
> @@ -66,6 +64,7 @@ efct_scsi_io_alloc(struct efct_node *node)
>
>         /* Add to node's active_ios list */
>         INIT_LIST_HEAD(&io->list_entry);
> +       spin_lock_irqsave(&node->active_ios_lock, flags);
>         list_add(&io->list_entry, &node->active_ios);
>
>         spin_unlock_irqrestore(&node->active_ios_lock, flags);
> --
> 2.25.1
>
Looks good. Thanks.

Reviewed-by: Ram Vegesna <ram.vegesna@broadcom.com>

-- 
This electronic communication and the information and any files transmitted 
with it, or attached to it, are confidential and are intended solely for 
the use of the individual or entity to whom it is addressed and may contain 
information that is confidential, legally privileged, protected by privacy 
laws, or otherwise restricted from disclosure to anyone else. If you are 
not the intended recipient or the person responsible for delivering the 
e-mail to the intended recipient, you are hereby notified that any use, 
copying, distributing, dissemination, forwarding, printing, or copying of 
this e-mail is strictly prohibited. If you received this e-mail in error, 
please return the e-mail to the sender, delete it from your computer, and 
destroy any printed copy of it.

[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4214 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 0/3] efct fixes & improvements
  2021-09-14 10:55 [PATCH 0/3] efct fixes & improvements Dmitry Bogdanov
                   ` (2 preceding siblings ...)
  2021-09-14 10:55 ` [PATCH 3/3] scsi: efct: decrease area under spinlock Dmitry Bogdanov
@ 2021-09-22  4:05 ` Martin K. Petersen
  2021-09-29  4:20 ` Martin K. Petersen
  4 siblings, 0 replies; 9+ messages in thread
From: Martin K. Petersen @ 2021-09-22  4:05 UTC (permalink / raw)
  To: Dmitry Bogdanov
  Cc: Martin Petersen, target-devel, linux-scsi, linux, James Smart


Dmitry,

> This patchset contains fixes of some isues that were found during
> evaluation of Emulex HBA as a target.

Applied to 5.16/scsi-staging, thanks!

-- 
Martin K. Petersen	Oracle Linux Engineering

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 0/3] efct fixes & improvements
  2021-09-14 10:55 [PATCH 0/3] efct fixes & improvements Dmitry Bogdanov
                   ` (3 preceding siblings ...)
  2021-09-22  4:05 ` [PATCH 0/3] efct fixes & improvements Martin K. Petersen
@ 2021-09-29  4:20 ` Martin K. Petersen
  4 siblings, 0 replies; 9+ messages in thread
From: Martin K. Petersen @ 2021-09-29  4:20 UTC (permalink / raw)
  To: Dmitry Bogdanov, target-devel
  Cc: Martin K . Petersen, linux-scsi, linux, James Smart

On Tue, 14 Sep 2021 13:55:36 +0300, Dmitry Bogdanov wrote:

> This patchset contains fixes of some isues that were found during
> evaluation of Emulex HBA as a target.
> 
> This patchset is intended for scsi-queue.
> 
> Dmitry Bogdanov (3):
>   scsi: efct: add state in nport sm trace printout
>   scsi: efct: fix nport free
>   scsi: efct: decrease area under spinlock
> 
> [...]

Applied to 5.16/scsi-queue, thanks!

[1/3] scsi: efct: add state in nport sm trace printout
      https://git.kernel.org/mkp/scsi/c/8d4efd0040e5
[2/3] scsi: efct: fix nport free
      https://git.kernel.org/mkp/scsi/c/ee3dce9f3842
[3/3] scsi: efct: decrease area under spinlock
      https://git.kernel.org/mkp/scsi/c/e76b7c5e25a1

-- 
Martin K. Petersen	Oracle Linux Engineering

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2021-09-29  4:20 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-14 10:55 [PATCH 0/3] efct fixes & improvements Dmitry Bogdanov
2021-09-14 10:55 ` [PATCH 1/3] scsi: efct: add state in nport sm trace printout Dmitry Bogdanov
2021-09-15 12:45   ` Ram Kishore Vegesna
2021-09-14 10:55 ` [PATCH 2/3] scsi: efct: fix nport free Dmitry Bogdanov
2021-09-15 12:51   ` Ram Kishore Vegesna
2021-09-14 10:55 ` [PATCH 3/3] scsi: efct: decrease area under spinlock Dmitry Bogdanov
2021-09-15 12:51   ` Ram Kishore Vegesna
2021-09-22  4:05 ` [PATCH 0/3] efct fixes & improvements Martin K. Petersen
2021-09-29  4:20 ` Martin K. Petersen

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).