]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
scsi: lpfc: Enlarge nvmet asynchronous receive buffer counts
authorJames Smart <jsmart2021@gmail.com>
Mon, 9 Apr 2018 21:24:24 +0000 (14:24 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 18 Apr 2018 23:34:02 +0000 (19:34 -0400)
Under large io load, the current sizing of asynchronous buffer counts
could be exceeded, indicated by a 2885 log message:

  2885 Port Status Event: port status reg 0x81800000, port smphr
      reg 0xc000, error 1=0x52004a01, error 2=0x0

Enlarge the async receive queue size.  Allow for a configurable number
of buffers to be posted to each RQ, using the new attribute
lpfc_nvmet_mrq_post.

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <james.smart@broadcom.com>
Reviewed-by: Hannes Reinecke <hare@suse.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/lpfc/lpfc.h
drivers/scsi/lpfc/lpfc_attr.c
drivers/scsi/lpfc/lpfc_nvmet.h
drivers/scsi/lpfc/lpfc_sli.c

index 2b47c69c1732bf061226415ac193e328f4317227..20b249a649dd67626303b3be9370222a572df6d0 100644 (file)
@@ -782,6 +782,7 @@ struct lpfc_hba {
        uint32_t cfg_nvme_oas;
        uint32_t cfg_nvme_embed_cmd;
        uint32_t cfg_nvme_io_channel;
+       uint32_t cfg_nvmet_mrq_post;
        uint32_t cfg_nvmet_mrq;
        uint32_t cfg_enable_nvmet;
        uint32_t cfg_nvme_enable_fb;
index 3a6b1be18886fe5813c483dda3283b9214133fb8..15f921d8ea566ce703bf826fa04b74f12f2fdf97 100644 (file)
@@ -3423,6 +3423,15 @@ LPFC_ATTR_R(nvmet_mrq,
            LPFC_NVMET_MRQ_AUTO, LPFC_NVMET_MRQ_AUTO, LPFC_NVMET_MRQ_MAX,
            "Specify number of RQ pairs for processing NVMET cmds");
 
+/*
+ * lpfc_nvmet_mrq_post: Specify number of RQ buffer to initially post
+ * to each NVMET RQ. Range 64 to 2048, default is 512.
+ */
+LPFC_ATTR_R(nvmet_mrq_post,
+           LPFC_NVMET_RQE_DEF_POST, LPFC_NVMET_RQE_MIN_POST,
+           LPFC_NVMET_RQE_DEF_COUNT,
+           "Specify number of RQ buffers to initially post");
+
 /*
  * lpfc_enable_fc4_type: Defines what FC4 types are supported.
  * Supported Values:  1 - register just FCP
@@ -5353,6 +5362,7 @@ struct device_attribute *lpfc_hba_attrs[] = {
        &dev_attr_lpfc_suppress_rsp,
        &dev_attr_lpfc_nvme_io_channel,
        &dev_attr_lpfc_nvmet_mrq,
+       &dev_attr_lpfc_nvmet_mrq_post,
        &dev_attr_lpfc_nvme_enable_fb,
        &dev_attr_lpfc_nvmet_fb_size,
        &dev_attr_lpfc_enable_bg,
@@ -6403,6 +6413,7 @@ lpfc_get_cfgparam(struct lpfc_hba *phba)
 
        lpfc_enable_fc4_type_init(phba, lpfc_enable_fc4_type);
        lpfc_nvmet_mrq_init(phba, lpfc_nvmet_mrq);
+       lpfc_nvmet_mrq_post_init(phba, lpfc_nvmet_mrq_post);
 
        /* Initialize first burst. Target vs Initiator are different. */
        lpfc_nvme_enable_fb_init(phba, lpfc_nvme_enable_fb);
index c1bcef3f103c3482fbe3331c9204ac8ceb0279ff..81f520abfd6424b075c77f4a995a82704143889e 100644 (file)
  ********************************************************************/
 
 #define LPFC_NVMET_DEFAULT_SEGS                (64 + 1)        /* 256K IOs */
-#define LPFC_NVMET_RQE_DEF_COUNT       512
-#define LPFC_NVMET_SUCCESS_LEN 12
+#define LPFC_NVMET_RQE_MIN_POST                128
+#define LPFC_NVMET_RQE_DEF_POST                512
+#define LPFC_NVMET_RQE_DEF_COUNT       2048
+#define LPFC_NVMET_SUCCESS_LEN         12
 
 #define LPFC_NVMET_MRQ_OFF             0xffff
 #define LPFC_NVMET_MRQ_AUTO            0
index cb17e2b2be8187458c07d2656709dde8aad43b6e..e0a8c800819582d5b128972a52ca8335d4a674e3 100644 (file)
@@ -7199,7 +7199,7 @@ lpfc_sli4_hba_setup(struct lpfc_hba *phba)
                        lpfc_post_rq_buffer(
                                phba, phba->sli4_hba.nvmet_mrq_hdr[i],
                                phba->sli4_hba.nvmet_mrq_data[i],
-                               LPFC_NVMET_RQE_DEF_COUNT, i);
+                               phba->cfg_nvmet_mrq_post, i);
                }
        }