Re: [PATCH 03/43] qla2xxx: Use IOCB path to submit Control VP MBX command

2017-12-20 Thread Madhani, Himanshu

> On Dec 20, 2017, at 10:29 AM, Bart Van Assche  wrote:
> 
> On Tue, 2017-12-19 at 22:56 -0800, Himanshu Madhani wrote:
>> @@ -536,7 +541,7 @@ struct sp_name {
>> #define SRB_NVME_CMD 19
>> #define SRB_NVME_LS  20
>> #define SRB_PRLI_CMD 21
>> -
>> +#define SRB_CTRL_VP 22
>> enum {
> 
> Please keep the blank line between the #define block and the enum definition.
> 

Sure

>> +/*
>> + * qla24xx_control_vp
>> + *  Enable a virtual port for given host
>> + *
>> + * Input:
>> + *  ha = adapter block pointer.
>> + *  vhba = virtual adapter (unused)
>> + *  index = index number for enabled VP
>> + *
>> + * Returns:
>> + *  qla2xxx local function return status code.
>> + *
>> + * Context:
>> + *  Kernel context.
>> + */
>> +int
>> +qla24xx_control_vp(scsi_qla_host_t *vha, int cmd)
> 
> Have you considered to use the kernel-doc style for this function header? See
> also https://www.kernel.org/doc/Documentation/kernel-doc-nano-HOWTO.txt.
> 
> Thanks,
> 
> Bart.

Will update to kernel-doc style for the header.

Thanks,
- Himanshu



Re: [PATCH 03/43] qla2xxx: Use IOCB path to submit Control VP MBX command

2017-12-20 Thread Bart Van Assche
On Tue, 2017-12-19 at 22:56 -0800, Himanshu Madhani wrote:
> @@ -536,7 +541,7 @@ struct sp_name {
>  #define SRB_NVME_CMD 19
>  #define SRB_NVME_LS  20
>  #define SRB_PRLI_CMD 21
> -
> +#define SRB_CTRL_VP  22
>  enum {

Please keep the blank line between the #define block and the enum definition.

> +/*
> + * qla24xx_control_vp
> + *   Enable a virtual port for given host
> + *
> + * Input:
> + *   ha = adapter block pointer.
> + *   vhba = virtual adapter (unused)
> + *   index = index number for enabled VP
> + *
> + * Returns:
> + *   qla2xxx local function return status code.
> + *
> + * Context:
> + *   Kernel context.
> + */
> +int
> +qla24xx_control_vp(scsi_qla_host_t *vha, int cmd)

Have you considered to use the kernel-doc style for this function header? See
also https://www.kernel.org/doc/Documentation/kernel-doc-nano-HOWTO.txt.

Thanks,

Bart.

[PATCH 03/43] qla2xxx: Use IOCB path to submit Control VP MBX command

2017-12-19 Thread Himanshu Madhani
From: Quinn Tran 

Use IOCB patch to submit Control VP MBX command to reduce
bottle-neck for mbx interface.

Signed-off-by: Quinn Tran 
Signed-off-by: Himanshu Madhani 
---
 drivers/scsi/qla2xxx/qla_def.h|  9 -
 drivers/scsi/qla2xxx/qla_gs.c |  1 +
 drivers/scsi/qla2xxx/qla_init.c   |  1 +
 drivers/scsi/qla2xxx/qla_inline.h |  1 +
 drivers/scsi/qla2xxx/qla_iocb.c   | 23 +++
 drivers/scsi/qla2xxx/qla_isr.c| 35 
 drivers/scsi/qla2xxx/qla_mbx.c| 77 ---
 drivers/scsi/qla2xxx/qla_mid.c| 85 +++
 8 files changed, 154 insertions(+), 78 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
index 4d65fd973a12..50a570595969 100644
--- a/drivers/scsi/qla2xxx/qla_def.h
+++ b/drivers/scsi/qla2xxx/qla_def.h
@@ -472,6 +472,10 @@ struct srb_iocb {
uint32_t timeout_sec;
struct  list_head   entry;
} nvme;
+   struct {
+   u16 cmd;
+   u16 vp_index;
+   } ctrlvp;
} u;
 
struct timer_list timer;
@@ -507,6 +511,7 @@ enum {
SPCN_PRLI,
SPCN_NVME_LS,
SPCN_NVME_CMD,
+   SPCN_CTRL_VP,
 };
 
 struct sp_name {
@@ -536,7 +541,7 @@ struct sp_name {
 #define SRB_NVME_CMD   19
 #define SRB_NVME_LS20
 #define SRB_PRLI_CMD   21
-
+#define SRB_CTRL_VP22
 enum {
TYPE_SRB,
TYPE_TGT_CMD,
@@ -562,6 +567,8 @@ typedef struct srb {
struct list_head elem;
u32 gen1;   /* scratch */
u32 gen2;   /* scratch */
+   int rc;
+   struct completion comp;
union {
struct srb_iocb iocb_cmd;
struct bsg_job *bsg_job;
diff --git a/drivers/scsi/qla2xxx/qla_gs.c b/drivers/scsi/qla2xxx/qla_gs.c
index 7e88e8289157..6aa6dd74fe86 100644
--- a/drivers/scsi/qla2xxx/qla_gs.c
+++ b/drivers/scsi/qla2xxx/qla_gs.c
@@ -41,6 +41,7 @@ struct sp_name sp_str[] = {
{ SPCN_PRLI, "prli" },
{ SPCN_NVME_LS, "nvme_ls" },
{ SPCN_NVME_CMD, "nvme_cmd" },
+   { SPCN_CTRL_VP, "ctrl_vp" },
 };
 
 const char *sp_to_str(uint16_t cmd)
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index 9d65fbe85e30..24d0f9d419d2 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -135,6 +135,7 @@ qla2x00_async_iocb_timeout(void *data)
case SRB_NACK_PLOGI:
case SRB_NACK_PRLI:
case SRB_NACK_LOGO:
+   case SRB_CTRL_VP:
sp->done(sp, QLA_FUNCTION_TIMEOUT);
break;
}
diff --git a/drivers/scsi/qla2xxx/qla_inline.h 
b/drivers/scsi/qla2xxx/qla_inline.h
index 17d2c20f1f75..4d32426393c7 100644
--- a/drivers/scsi/qla2xxx/qla_inline.h
+++ b/drivers/scsi/qla2xxx/qla_inline.h
@@ -273,6 +273,7 @@ qla2x00_init_timer(srb_t *sp, unsigned long tmo)
sp->u.iocb_cmd.timer.expires = jiffies + tmo * HZ;
add_timer(>u.iocb_cmd.timer);
sp->free = qla2x00_sp_free;
+   init_completion(>comp);
if (IS_QLAFX00(sp->vha->hw) && (sp->type == SRB_FXIOCB_DCMD))
init_completion(>u.iocb_cmd.u.fxiocb.fxiocb_comp);
if (sp->type == SRB_ELS_DCMD)
diff --git a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c
index b5d1423f933d..62b3d0a8a961 100644
--- a/drivers/scsi/qla2xxx/qla_iocb.c
+++ b/drivers/scsi/qla2xxx/qla_iocb.c
@@ -3368,6 +3368,26 @@ qla_nvme_ls(srb_t *sp, struct pt_ls4_request *cmd_pkt)
return rval;
 }
 
+static void
+qla25xx_ctrlvp_iocb(srb_t *sp, struct vp_ctrl_entry_24xx *vce)
+{
+   int map, pos;
+
+   vce->entry_type = VP_CTRL_IOCB_TYPE;
+   vce->handle = sp->handle;
+   vce->entry_count = 1;
+   vce->command = cpu_to_le16(sp->u.iocb_cmd.u.ctrlvp.cmd);
+   vce->vp_count = cpu_to_le16(1);
+
+   /*
+* index map in firmware starts with 1; decrement index
+* this is ok as we never use index 0
+*/
+   map = (sp->u.iocb_cmd.u.ctrlvp.vp_index - 1) / 8;
+   pos = (sp->u.iocb_cmd.u.ctrlvp.vp_index - 1) & 7;
+   vce->vp_idx_map[map] |= 1 << pos;
+}
+
 int
 qla2x00_start_sp(srb_t *sp)
 {
@@ -3446,6 +3466,9 @@ qla2x00_start_sp(srb_t *sp)
case SRB_NACK_LOGO:
qla2x00_send_notify_ack_iocb(sp, pkt);
break;
+   case SRB_CTRL_VP:
+   qla25xx_ctrlvp_iocb(sp, pkt);
+   break;
default:
break;
}
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
index a55bfaa790a3..a265c2d8c9cc 100644
--- a/drivers/scsi/qla2xxx/qla_isr.c
+++ b/drivers/scsi/qla2xxx/qla_isr.c
@@ -1937,6 +1937,37 @@ qla24xx_nvme_iocb_entry(scsi_qla_host_t *vha, struct 
req_que *req, void *tsk)
sp->done(sp, ret);
 }
 
+static void qla_ctrlvp_completed(scsi_qla_host_t