Message ID | 20171106195530.17408-3-himanshu.madhani@cavium.com (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
Hi Anil,
I love your patch! Yet something to improve:
[auto build test ERROR on scsi/for-next]
[also build test ERROR on v4.14-rc8 next-20171106]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Himanshu-Madhani/qla2xxx-Add-FC-NVMe-Target-support/20171107-153645
base: https://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git for-next
config: xtensa-allmodconfig (attached as .config)
compiler: xtensa-linux-gcc (GCC) 4.9.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
make.cross ARCH=xtensa
Note: the linux-review/Himanshu-Madhani/qla2xxx-Add-FC-NVMe-Target-support/20171107-153645 HEAD 9c5e24e821aa40552221b3103bc914bc4cd42293 builds fine.
It only hurts bisectibility.
All errors (new ones prefixed by >>):
In file included from drivers/scsi//qla2xxx/qla_nvmet.c:14:0:
drivers/scsi//qla2xxx/qla_nvmet.h:31:25: error: field 'nvme_cmd_iu' has incomplete type
struct atio7_nvme_cmnd nvme_cmd_iu;
^
drivers/scsi//qla2xxx/qla_nvmet.c: In function 'qlt_nvmet_ls_done':
drivers/scsi//qla2xxx/qla_nvmet.c:48:46: error: 'struct <anonymous>' has no member named 'cmd'
struct qla_nvmet_cmd *tgt_cmd = nvme->u.nvme.cmd;
^
drivers/scsi//qla2xxx/qla_nvmet.c:55:47: error: 'struct <anonymous>' has no member named 'cmd'
sp, sp->vha, nvme->u.nvme.desc, nvme->u.nvme.cmd);
^
drivers/scsi//qla2xxx/qla_nvmet.c: In function 'qla_nvmet_ls_rsp':
drivers/scsi//qla2xxx/qla_nvmet.c:92:13: error: 'SRB_NVMET_LS' undeclared (first use in this function)
sp->type = SRB_NVMET_LS;
^
drivers/scsi//qla2xxx/qla_nvmet.c:92:13: note: each undeclared identifier is reported only once for each function it appears in
drivers/scsi//qla2xxx/qla_nvmet.c:100:14: error: 'struct <anonymous>' has no member named 'exchange_address'
nvme->u.nvme.exchange_address = tgt_cmd->atio.u.pt_ls4.exchange_address;
^
drivers/scsi//qla2xxx/qla_nvmet.c:100:49: error: 'union <anonymous>' has no member named 'pt_ls4'
nvme->u.nvme.exchange_address = tgt_cmd->atio.u.pt_ls4.exchange_address;
^
drivers/scsi//qla2xxx/qla_nvmet.c:101:14: error: 'struct <anonymous>' has no member named 'nport_handle'
nvme->u.nvme.nport_handle = tgt_cmd->atio.u.pt_ls4.nport_handle;
^
drivers/scsi//qla2xxx/qla_nvmet.c:101:45: error: 'union <anonymous>' has no member named 'pt_ls4'
nvme->u.nvme.nport_handle = tgt_cmd->atio.u.pt_ls4.nport_handle;
^
drivers/scsi//qla2xxx/qla_nvmet.c:102:14: error: 'struct <anonymous>' has no member named 'vp_index'
nvme->u.nvme.vp_index = tgt_cmd->atio.u.pt_ls4.vp_index;
^
drivers/scsi//qla2xxx/qla_nvmet.c:102:41: error: 'union <anonymous>' has no member named 'pt_ls4'
nvme->u.nvme.vp_index = tgt_cmd->atio.u.pt_ls4.vp_index;
^
drivers/scsi//qla2xxx/qla_nvmet.c:104:14: error: 'struct <anonymous>' has no member named 'cmd'
nvme->u.nvme.cmd = tgt_cmd; /* To be freed */
^
drivers/scsi//qla2xxx/qla_nvmet.c: In function 'qla_nvmet_fcp_abort':
drivers/scsi//qla2xxx/qla_nvmet.c:168:13: error: 'SRB_NVMET_SEND_ABTS' undeclared (first use in this function)
sp->type = SRB_NVMET_SEND_ABTS;
^
drivers/scsi//qla2xxx/qla_nvmet.c: In function 'qla_nvmet_create_targetport':
drivers/scsi//qla2xxx/qla_nvmet.c:226:9: error: 'ql_dbg_nvme' undeclared (first use in this function)
ql_dbg(ql_dbg_nvme, vha, 0xe081,
^
drivers/scsi//qla2xxx/qla_nvmet.c:236:10: error: 'struct scsi_qla_host' has no member named 'targetport'
&vha->targetport);
^
drivers/scsi//qla2xxx/qla_nvmet.c:243:41: error: 'struct scsi_qla_host' has no member named 'targetport'
tport = (struct qla_nvmet_tgtport *)vha->targetport->private;
^
drivers/scsi//qla2xxx/qla_nvmet.c: In function 'qla_nvmet_delete':
>> drivers/scsi//qla2xxx/qla_nvmet.c:261:17: error: 'volatile struct <anonymous>' has no member named 'nvmet_enabled'
if (!vha->flags.nvmet_enabled)
^
drivers/scsi//qla2xxx/qla_nvmet.c:263:9: error: 'struct scsi_qla_host' has no member named 'targetport'
if (vha->targetport) {
^
drivers/scsi//qla2xxx/qla_nvmet.c:264:42: error: 'struct scsi_qla_host' has no member named 'targetport'
tport = (struct qla_nvmet_tgtport *)vha->targetport->private;
^
drivers/scsi//qla2xxx/qla_nvmet.c:266:10: error: 'ql_dbg_nvme' undeclared (first use in this function)
ql_dbg(ql_dbg_nvme, vha, 0xe083,
^
drivers/scsi//qla2xxx/qla_nvmet.c:269:37: error: 'struct scsi_qla_host' has no member named 'targetport'
nvmet_fc_unregister_targetport(vha->targetport);
^
drivers/scsi//qla2xxx/qla_nvmet.c:272:3: error: implicit declaration of function 'nvmet_release_sessions' [-Werror=implicit-function-declaration]
nvmet_release_sessions(vha);
^
drivers/scsi//qla2xxx/qla_nvmet.c: In function 'qla_nvmet_handle_ls':
drivers/scsi//qla2xxx/qla_nvmet.c:300:2: error: implicit declaration of function 'qla_nvmet_find_sess_by_s_id' [-Werror=implicit-function-declaration]
sess = qla_nvmet_find_sess_by_s_id(vha, look_up_sid);
^
drivers/scsi//qla2xxx/qla_nvmet.c:300:7: warning: assignment makes pointer from integer without a cast
sess = qla_nvmet_find_sess_by_s_id(vha, look_up_sid);
^
drivers/scsi//qla2xxx/qla_nvmet.c:308:10: error: 'ql_dbg_nvme' undeclared (first use in this function)
ql_dbg(ql_dbg_nvme, vha, 0xe084,
^
drivers/scsi//qla2xxx/qla_nvmet.c:316:25: error: 'union <anonymous>' has no member named 'pt_ls4'
memcpy(&tgt_cmd->atio.u.pt_ls4, pt_ls4, sizeof(struct pt_ls4_rx_unsol));
^
drivers/scsi//qla2xxx/qla_nvmet.c:327:31: error: 'struct scsi_qla_host' has no member named 'targetport'
ret = nvmet_fc_rcv_ls_req(vha->targetport,
^
drivers/scsi//qla2xxx/qla_nvmet.c: In function 'qla_nvmet_process_cmd':
drivers/scsi//qla2xxx/qla_nvmet.c:360:32: error: 'struct scsi_qla_host' has no member named 'targetport'
ret = nvmet_fc_rcv_fcp_req(vha->targetport, &tgt_cmd->cmd.fcp_req,
^
drivers/scsi//qla2xxx/qla_nvmet.c: In function 'qla_nvmet_handle_abts':
drivers/scsi//qla2xxx/qla_nvmet.c:400:28: error: 'struct scsi_qla_host' has no member named 'targetport'
nvmet_fc_rcv_fcp_abort(vha->targetport, &cmd->cmd.fcp_req);
^
drivers/scsi//qla2xxx/qla_nvmet.c: In function 'qla_nvmet_send_resp_ctio':
drivers/scsi//qla2xxx/qla_nvmet.c:456:34: error: 'union <anonymous>' has no member named 'nvme_isp27'
struct fcp_hdr *fchdr = &atio->u.nvme_isp27.fcp_hdr;
^
drivers/scsi//qla2xxx/qla_nvmet.c:477:13: error: 'SRB_NVMET_FCP' undeclared (first use in this function)
sp->type = SRB_NVMET_FCP;
^
drivers/scsi//qla2xxx/qla_nvmet.c:481:23: error: 'struct <anonymous>' has no member named 'cmd'
sp->u.iocb_cmd.u.nvme.cmd = cmd;
^
drivers/scsi//qla2xxx/qla_nvmet.c:485:10: error: 'ql_dbg_nvme' undeclared (first use in this function)
ql_dbg(ql_dbg_nvme, vha, 0x3067,
^
drivers/scsi//qla2xxx/qla_nvmet.c:501:31: error: 'union <anonymous>' has no member named 'nvme_isp27'
ctio->exchange_addr = atio->u.nvme_isp27.exchange_addr;
^
drivers/scsi//qla2xxx/qla_nvmet.c:505:19: error: 'union <anonymous>' has no member named 'nvme_isp27'
c_flags = atio->u.nvme_isp27.attr << 9;
^
drivers/scsi//qla2xxx/qla_nvmet.c: In function 'qla_nvmet_send_abts_ctio':
drivers/scsi//qla2xxx/qla_nvmet.c:731:13: error: 'SRB_NVMET_ABTS' undeclared (first use in this function)
sp->type = SRB_NVMET_ABTS;
^
drivers/scsi//qla2xxx/qla_nvmet.c:737:10: error: 'ql_dbg_nvme' undeclared (first use in this function)
ql_dbg(ql_dbg_nvme, vha, 0x3067,
^
cc1: some warnings being treated as errors
vim +261 drivers/scsi//qla2xxx/qla_nvmet.c
3465c5ae Anil Gurumurthy 2017-11-06 197
3465c5ae Anil Gurumurthy 2017-11-06 198 static struct nvmet_fc_target_template qla_nvmet_fc_transport = {
3465c5ae Anil Gurumurthy 2017-11-06 199 .targetport_delete = qla_nvmet_targetport_delete,
3465c5ae Anil Gurumurthy 2017-11-06 200 .xmt_ls_rsp = qla_nvmet_ls_rsp,
3465c5ae Anil Gurumurthy 2017-11-06 201 .fcp_op = qla_nvmet_fcp_op,
3465c5ae Anil Gurumurthy 2017-11-06 202 .fcp_abort = qla_nvmet_fcp_abort,
3465c5ae Anil Gurumurthy 2017-11-06 203 .fcp_req_release = qla_nvmet_fcp_req_release,
3465c5ae Anil Gurumurthy 2017-11-06 204 .max_hw_queues = 8,
3465c5ae Anil Gurumurthy 2017-11-06 205 .max_sgl_segments = 128,
3465c5ae Anil Gurumurthy 2017-11-06 206 .max_dif_sgl_segments = 64,
3465c5ae Anil Gurumurthy 2017-11-06 207 .dma_boundary = 0xFFFFFFFF,
3465c5ae Anil Gurumurthy 2017-11-06 208 .target_features = NVMET_FCTGTFEAT_READDATA_RSP |
3465c5ae Anil Gurumurthy 2017-11-06 209 NVMET_FCTGTFEAT_CMD_IN_ISR |
3465c5ae Anil Gurumurthy 2017-11-06 210 NVMET_FCTGTFEAT_OPDONE_IN_ISR,
3465c5ae Anil Gurumurthy 2017-11-06 211 .target_priv_sz = sizeof(struct nvme_private),
3465c5ae Anil Gurumurthy 2017-11-06 212 };
3465c5ae Anil Gurumurthy 2017-11-06 213 #endif
3465c5ae Anil Gurumurthy 2017-11-06 214 /*
3465c5ae Anil Gurumurthy 2017-11-06 215 * qla_nvmet_create_targetport -
3465c5ae Anil Gurumurthy 2017-11-06 216 * Create a targetport. Registers the template with the nvme-t
3465c5ae Anil Gurumurthy 2017-11-06 217 * layer
3465c5ae Anil Gurumurthy 2017-11-06 218 */
3465c5ae Anil Gurumurthy 2017-11-06 219 int qla_nvmet_create_targetport(struct scsi_qla_host *vha)
3465c5ae Anil Gurumurthy 2017-11-06 220 {
3465c5ae Anil Gurumurthy 2017-11-06 221 #if IS_ENABLED(CONFIG_NVME_TARGET_FC)
3465c5ae Anil Gurumurthy 2017-11-06 222 struct nvmet_fc_port_info pinfo;
3465c5ae Anil Gurumurthy 2017-11-06 223 struct qla_nvmet_tgtport *tport;
3465c5ae Anil Gurumurthy 2017-11-06 224 int error = 0;
3465c5ae Anil Gurumurthy 2017-11-06 225
3465c5ae Anil Gurumurthy 2017-11-06 226 ql_dbg(ql_dbg_nvme, vha, 0xe081,
3465c5ae Anil Gurumurthy 2017-11-06 227 "Creating target port for :%p\n", vha);
3465c5ae Anil Gurumurthy 2017-11-06 228
3465c5ae Anil Gurumurthy 2017-11-06 229 memset(&pinfo, 0, (sizeof(struct nvmet_fc_port_info)));
3465c5ae Anil Gurumurthy 2017-11-06 230 pinfo.node_name = wwn_to_u64(vha->node_name);
3465c5ae Anil Gurumurthy 2017-11-06 231 pinfo.port_name = wwn_to_u64(vha->port_name);
3465c5ae Anil Gurumurthy 2017-11-06 232 pinfo.port_id = vha->d_id.b24;
3465c5ae Anil Gurumurthy 2017-11-06 233
3465c5ae Anil Gurumurthy 2017-11-06 234 error = nvmet_fc_register_targetport(&pinfo,
3465c5ae Anil Gurumurthy 2017-11-06 235 &qla_nvmet_fc_transport, &vha->hw->pdev->dev,
3465c5ae Anil Gurumurthy 2017-11-06 @236 &vha->targetport);
3465c5ae Anil Gurumurthy 2017-11-06 237
3465c5ae Anil Gurumurthy 2017-11-06 238 if (error) {
3465c5ae Anil Gurumurthy 2017-11-06 239 ql_dbg(ql_dbg_nvme, vha, 0xe082,
3465c5ae Anil Gurumurthy 2017-11-06 240 "Cannot register NVME transport:%d\n", error);
3465c5ae Anil Gurumurthy 2017-11-06 241 return error;
3465c5ae Anil Gurumurthy 2017-11-06 242 }
3465c5ae Anil Gurumurthy 2017-11-06 243 tport = (struct qla_nvmet_tgtport *)vha->targetport->private;
3465c5ae Anil Gurumurthy 2017-11-06 244 tport->vha = vha;
3465c5ae Anil Gurumurthy 2017-11-06 245 ql_dbg(ql_dbg_nvme, vha, 0xe082,
3465c5ae Anil Gurumurthy 2017-11-06 246 " Registered NVME transport:%p WWPN:%llx\n",
3465c5ae Anil Gurumurthy 2017-11-06 247 tport, pinfo.port_name);
3465c5ae Anil Gurumurthy 2017-11-06 248 #endif
3465c5ae Anil Gurumurthy 2017-11-06 249 return 0;
3465c5ae Anil Gurumurthy 2017-11-06 250 }
3465c5ae Anil Gurumurthy 2017-11-06 251
3465c5ae Anil Gurumurthy 2017-11-06 252 /*
3465c5ae Anil Gurumurthy 2017-11-06 253 * qla_nvmet_delete -
3465c5ae Anil Gurumurthy 2017-11-06 254 * Delete a targetport.
3465c5ae Anil Gurumurthy 2017-11-06 255 */
3465c5ae Anil Gurumurthy 2017-11-06 256 int qla_nvmet_delete(struct scsi_qla_host *vha)
3465c5ae Anil Gurumurthy 2017-11-06 257 {
3465c5ae Anil Gurumurthy 2017-11-06 258 #if IS_ENABLED(CONFIG_NVME_TARGET_FC)
3465c5ae Anil Gurumurthy 2017-11-06 259 struct qla_nvmet_tgtport *tport;
3465c5ae Anil Gurumurthy 2017-11-06 260
3465c5ae Anil Gurumurthy 2017-11-06 @261 if (!vha->flags.nvmet_enabled)
3465c5ae Anil Gurumurthy 2017-11-06 262 return 0;
3465c5ae Anil Gurumurthy 2017-11-06 263 if (vha->targetport) {
3465c5ae Anil Gurumurthy 2017-11-06 264 tport = (struct qla_nvmet_tgtport *)vha->targetport->private;
3465c5ae Anil Gurumurthy 2017-11-06 265
3465c5ae Anil Gurumurthy 2017-11-06 266 ql_dbg(ql_dbg_nvme, vha, 0xe083,
3465c5ae Anil Gurumurthy 2017-11-06 267 "Deleting target port :%p\n", tport);
3465c5ae Anil Gurumurthy 2017-11-06 268 init_completion(&tport->tport_del);
3465c5ae Anil Gurumurthy 2017-11-06 269 nvmet_fc_unregister_targetport(vha->targetport);
3465c5ae Anil Gurumurthy 2017-11-06 270 wait_for_completion_timeout(&tport->tport_del, 5);
3465c5ae Anil Gurumurthy 2017-11-06 271
3465c5ae Anil Gurumurthy 2017-11-06 272 nvmet_release_sessions(vha);
3465c5ae Anil Gurumurthy 2017-11-06 273 }
3465c5ae Anil Gurumurthy 2017-11-06 274 #endif
3465c5ae Anil Gurumurthy 2017-11-06 275 return 0;
3465c5ae Anil Gurumurthy 2017-11-06 276 }
3465c5ae Anil Gurumurthy 2017-11-06 277
:::::: The code at line 261 was first introduced by commit
:::::: 3465c5aeb3161f2f168841ded707571ffe38d136 qla2xxx_nvmet: Add files for FC-NVMe Target support
:::::: TO: Anil Gurumurthy <anil.gurumurthy@cavium.com>
:::::: CC: 0day robot <fengguang.wu@intel.com>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
Hi Anil, I love your patch! Yet something to improve: [auto build test ERROR on scsi/for-next] [also build test ERROR on v4.14-rc8 next-20171106] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Himanshu-Madhani/qla2xxx-Add-FC-NVMe-Target-support/20171107-153645 base: https://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git for-next config: i386-randconfig-x001-201745 (attached as .config) compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901 reproduce: # save the attached .config to linux build tree make ARCH=i386 Note: the linux-review/Himanshu-Madhani/qla2xxx-Add-FC-NVMe-Target-support/20171107-153645 HEAD 9c5e24e821aa40552221b3103bc914bc4cd42293 builds fine. It only hurts bisectibility. All error/warnings (new ones prefixed by >>): In file included from drivers/scsi/qla2xxx/qla_nvmet.c:14:0: drivers/scsi/qla2xxx/qla_nvmet.h:31:25: error: field 'nvme_cmd_iu' has incomplete type struct atio7_nvme_cmnd nvme_cmd_iu; ^~~~~~~~~~~ drivers/scsi/qla2xxx/qla_nvmet.c: In function 'qlt_nvmet_ls_done': >> drivers/scsi/qla2xxx/qla_nvmet.c:48:46: error: 'struct <anonymous>' has no member named 'cmd' struct qla_nvmet_cmd *tgt_cmd = nvme->u.nvme.cmd; ^ drivers/scsi/qla2xxx/qla_nvmet.c:55:47: error: 'struct <anonymous>' has no member named 'cmd' sp, sp->vha, nvme->u.nvme.desc, nvme->u.nvme.cmd); ^ drivers/scsi/qla2xxx/qla_nvmet.c: In function 'qla_nvmet_ls_rsp': >> drivers/scsi/qla2xxx/qla_nvmet.c:92:13: error: 'SRB_NVMET_LS' undeclared (first use in this function) sp->type = SRB_NVMET_LS; ^~~~~~~~~~~~ drivers/scsi/qla2xxx/qla_nvmet.c:92:13: note: each undeclared identifier is reported only once for each function it appears in >> drivers/scsi/qla2xxx/qla_nvmet.c:100:14: error: 'struct <anonymous>' has no member named 'exchange_address' nvme->u.nvme.exchange_address = tgt_cmd->atio.u.pt_ls4.exchange_address; ^ >> drivers/scsi/qla2xxx/qla_nvmet.c:100:49: error: 'union <anonymous>' has no member named 'pt_ls4' nvme->u.nvme.exchange_address = tgt_cmd->atio.u.pt_ls4.exchange_address; ^ >> drivers/scsi/qla2xxx/qla_nvmet.c:101:14: error: 'struct <anonymous>' has no member named 'nport_handle' nvme->u.nvme.nport_handle = tgt_cmd->atio.u.pt_ls4.nport_handle; ^ drivers/scsi/qla2xxx/qla_nvmet.c:101:45: error: 'union <anonymous>' has no member named 'pt_ls4' nvme->u.nvme.nport_handle = tgt_cmd->atio.u.pt_ls4.nport_handle; ^ >> drivers/scsi/qla2xxx/qla_nvmet.c:102:14: error: 'struct <anonymous>' has no member named 'vp_index' nvme->u.nvme.vp_index = tgt_cmd->atio.u.pt_ls4.vp_index; ^ drivers/scsi/qla2xxx/qla_nvmet.c:102:41: error: 'union <anonymous>' has no member named 'pt_ls4' nvme->u.nvme.vp_index = tgt_cmd->atio.u.pt_ls4.vp_index; ^ drivers/scsi/qla2xxx/qla_nvmet.c:104:14: error: 'struct <anonymous>' has no member named 'cmd' nvme->u.nvme.cmd = tgt_cmd; /* To be freed */ ^ drivers/scsi/qla2xxx/qla_nvmet.c: In function 'qla_nvmet_fcp_abort': >> drivers/scsi/qla2xxx/qla_nvmet.c:168:13: error: 'SRB_NVMET_SEND_ABTS' undeclared (first use in this function) sp->type = SRB_NVMET_SEND_ABTS; ^~~~~~~~~~~~~~~~~~~ drivers/scsi/qla2xxx/qla_nvmet.c: In function 'qla_nvmet_create_targetport': >> drivers/scsi/qla2xxx/qla_nvmet.c:226:9: error: 'ql_dbg_nvme' undeclared (first use in this function) ql_dbg(ql_dbg_nvme, vha, 0xe081, ^~~~~~~~~~~ >> drivers/scsi/qla2xxx/qla_nvmet.c:236:10: error: 'struct scsi_qla_host' has no member named 'targetport' &vha->targetport); ^~ drivers/scsi/qla2xxx/qla_nvmet.c:243:41: error: 'struct scsi_qla_host' has no member named 'targetport' tport = (struct qla_nvmet_tgtport *)vha->targetport->private; ^~ drivers/scsi/qla2xxx/qla_nvmet.c: In function 'qla_nvmet_delete': >> drivers/scsi/qla2xxx/qla_nvmet.c:261:17: error: 'volatile struct <anonymous>' has no member named 'nvmet_enabled'; did you mean 'nvme_enabled'? if (!vha->flags.nvmet_enabled) ^ drivers/scsi/qla2xxx/qla_nvmet.c:263:9: error: 'struct scsi_qla_host' has no member named 'targetport' if (vha->targetport) { ^~ drivers/scsi/qla2xxx/qla_nvmet.c:264:42: error: 'struct scsi_qla_host' has no member named 'targetport' tport = (struct qla_nvmet_tgtport *)vha->targetport->private; ^~ drivers/scsi/qla2xxx/qla_nvmet.c:266:10: error: 'ql_dbg_nvme' undeclared (first use in this function) ql_dbg(ql_dbg_nvme, vha, 0xe083, ^~~~~~~~~~~ drivers/scsi/qla2xxx/qla_nvmet.c:269:37: error: 'struct scsi_qla_host' has no member named 'targetport' nvmet_fc_unregister_targetport(vha->targetport); ^~ >> drivers/scsi/qla2xxx/qla_nvmet.c:272:3: error: implicit declaration of function 'nvmet_release_sessions' [-Werror=implicit-function-declaration] nvmet_release_sessions(vha); ^~~~~~~~~~~~~~~~~~~~~~ drivers/scsi/qla2xxx/qla_nvmet.c: In function 'qla_nvmet_handle_ls': >> drivers/scsi/qla2xxx/qla_nvmet.c:300:9: error: implicit declaration of function 'qla_nvmet_find_sess_by_s_id' [-Werror=implicit-function-declaration] sess = qla_nvmet_find_sess_by_s_id(vha, look_up_sid); ^~~~~~~~~~~~~~~~~~~~~~~~~~~ >> drivers/scsi/qla2xxx/qla_nvmet.c:300:7: warning: assignment makes pointer from integer without a cast [-Wint-conversion] sess = qla_nvmet_find_sess_by_s_id(vha, look_up_sid); ^ drivers/scsi/qla2xxx/qla_nvmet.c:308:10: error: 'ql_dbg_nvme' undeclared (first use in this function) ql_dbg(ql_dbg_nvme, vha, 0xe084, ^~~~~~~~~~~ In file included from arch/x86/include/asm/string.h:2:0, from include/linux/string.h:18, from include/linux/scatterlist.h:4, from drivers/scsi/qla2xxx/qla_nvmet.c:8: drivers/scsi/qla2xxx/qla_nvmet.c:316:25: error: 'union <anonymous>' has no member named 'pt_ls4' memcpy(&tgt_cmd->atio.u.pt_ls4, pt_ls4, sizeof(struct pt_ls4_rx_unsol)); ^ arch/x86/include/asm/string_32.h:184:42: note: in definition of macro 'memcpy' #define memcpy(t, f, n) __builtin_memcpy(t, f, n) ^ drivers/scsi/qla2xxx/qla_nvmet.c:327:31: error: 'struct scsi_qla_host' has no member named 'targetport' ret = nvmet_fc_rcv_ls_req(vha->targetport, ^~ drivers/scsi/qla2xxx/qla_nvmet.c: In function 'qla_nvmet_process_cmd': drivers/scsi/qla2xxx/qla_nvmet.c:360:32: error: 'struct scsi_qla_host' has no member named 'targetport' ret = nvmet_fc_rcv_fcp_req(vha->targetport, &tgt_cmd->cmd.fcp_req, ^~ drivers/scsi/qla2xxx/qla_nvmet.c: In function 'qla_nvmet_handle_abts': drivers/scsi/qla2xxx/qla_nvmet.c:400:28: error: 'struct scsi_qla_host' has no member named 'targetport' nvmet_fc_rcv_fcp_abort(vha->targetport, &cmd->cmd.fcp_req); ^~ drivers/scsi/qla2xxx/qla_nvmet.c: In function 'qla_nvmet_send_resp_ctio': >> drivers/scsi/qla2xxx/qla_nvmet.c:456:34: error: 'union <anonymous>' has no member named 'nvme_isp27' struct fcp_hdr *fchdr = &atio->u.nvme_isp27.fcp_hdr; ^ >> drivers/scsi/qla2xxx/qla_nvmet.c:477:13: error: 'SRB_NVMET_FCP' undeclared (first use in this function) sp->type = SRB_NVMET_FCP; ^~~~~~~~~~~~~ drivers/scsi/qla2xxx/qla_nvmet.c:481:23: error: 'struct <anonymous>' has no member named 'cmd' sp->u.iocb_cmd.u.nvme.cmd = cmd; ^ drivers/scsi/qla2xxx/qla_nvmet.c:485:10: error: 'ql_dbg_nvme' undeclared (first use in this function) ql_dbg(ql_dbg_nvme, vha, 0x3067, ^~~~~~~~~~~ drivers/scsi/qla2xxx/qla_nvmet.c:501:31: error: 'union <anonymous>' has no member named 'nvme_isp27' ctio->exchange_addr = atio->u.nvme_isp27.exchange_addr; ^ drivers/scsi/qla2xxx/qla_nvmet.c:505:19: error: 'union <anonymous>' has no member named 'nvme_isp27' c_flags = atio->u.nvme_isp27.attr << 9; ^ drivers/scsi/qla2xxx/qla_nvmet.c: In function 'qla_nvmet_send_abts_ctio': >> drivers/scsi/qla2xxx/qla_nvmet.c:731:13: error: 'SRB_NVMET_ABTS' undeclared (first use in this function) sp->type = SRB_NVMET_ABTS; ^~~~~~~~~~~~~~ drivers/scsi/qla2xxx/qla_nvmet.c:737:10: error: 'ql_dbg_nvme' undeclared (first use in this function) ql_dbg(ql_dbg_nvme, vha, 0x3067, ^~~~~~~~~~~ cc1: some warnings being treated as errors vim +48 drivers/scsi/qla2xxx/qla_nvmet.c 3465c5ae Anil Gurumurthy 2017-11-06 12 3465c5ae Anil Gurumurthy 2017-11-06 13 #include "qla_nvme.h" 3465c5ae Anil Gurumurthy 2017-11-06 @14 #include "qla_nvmet.h" 3465c5ae Anil Gurumurthy 2017-11-06 15 3465c5ae Anil Gurumurthy 2017-11-06 16 #if IS_ENABLED(CONFIG_NVME_TARGET_FC) 3465c5ae Anil Gurumurthy 2017-11-06 17 static void qla_nvmet_send_resp_ctio(struct qla_qpair *qpair, 3465c5ae Anil Gurumurthy 2017-11-06 18 struct qla_nvmet_cmd *cmd, struct nvmefc_tgt_fcp_req *rsp); 3465c5ae Anil Gurumurthy 2017-11-06 19 static void qla_nvmet_send_abts_ctio(struct scsi_qla_host *vha, 3465c5ae Anil Gurumurthy 2017-11-06 20 struct abts_recv_from_24xx *abts, bool flag); 3465c5ae Anil Gurumurthy 2017-11-06 21 3465c5ae Anil Gurumurthy 2017-11-06 22 /* 3465c5ae Anil Gurumurthy 2017-11-06 23 * qla_nvmet_targetport_delete - 3465c5ae Anil Gurumurthy 2017-11-06 24 * Invoked by the nvmet to indicate that the target port has 3465c5ae Anil Gurumurthy 2017-11-06 25 * been deleted 3465c5ae Anil Gurumurthy 2017-11-06 26 */ 3465c5ae Anil Gurumurthy 2017-11-06 27 static void 3465c5ae Anil Gurumurthy 2017-11-06 28 qla_nvmet_targetport_delete(struct nvmet_fc_target_port *targetport) 3465c5ae Anil Gurumurthy 2017-11-06 29 { 3465c5ae Anil Gurumurthy 2017-11-06 30 struct qla_nvmet_tgtport *tport = targetport->private; 3465c5ae Anil Gurumurthy 2017-11-06 31 3465c5ae Anil Gurumurthy 2017-11-06 32 complete(&tport->tport_del); 3465c5ae Anil Gurumurthy 2017-11-06 33 } 3465c5ae Anil Gurumurthy 2017-11-06 34 #endif 3465c5ae Anil Gurumurthy 2017-11-06 35 3465c5ae Anil Gurumurthy 2017-11-06 36 #if IS_ENABLED(CONFIG_NVME_TARGET_FC) 3465c5ae Anil Gurumurthy 2017-11-06 37 /* 3465c5ae Anil Gurumurthy 2017-11-06 38 * qlt_nvmet_ls_done - 3465c5ae Anil Gurumurthy 2017-11-06 39 * Invoked by the firmware interface to indicate the completion 3465c5ae Anil Gurumurthy 2017-11-06 40 * of an LS cmd 3465c5ae Anil Gurumurthy 2017-11-06 41 * Free all associated resources of the LS cmd 3465c5ae Anil Gurumurthy 2017-11-06 42 */ 3465c5ae Anil Gurumurthy 2017-11-06 43 static void qlt_nvmet_ls_done(void *ptr, int res) 3465c5ae Anil Gurumurthy 2017-11-06 44 { 3465c5ae Anil Gurumurthy 2017-11-06 45 struct srb *sp = ptr; 3465c5ae Anil Gurumurthy 2017-11-06 46 struct srb_iocb *nvme = &sp->u.iocb_cmd; 3465c5ae Anil Gurumurthy 2017-11-06 47 struct nvmefc_tgt_ls_req *rsp = nvme->u.nvme.desc; 3465c5ae Anil Gurumurthy 2017-11-06 @48 struct qla_nvmet_cmd *tgt_cmd = nvme->u.nvme.cmd; 3465c5ae Anil Gurumurthy 2017-11-06 49 3465c5ae Anil Gurumurthy 2017-11-06 50 ql_log(ql_log_info, sp->vha, 0x11000, 3465c5ae Anil Gurumurthy 2017-11-06 51 "Done with NVME LS4 req\n"); 3465c5ae Anil Gurumurthy 2017-11-06 52 3465c5ae Anil Gurumurthy 2017-11-06 53 ql_log(ql_log_info, sp->vha, 0x11001, 3465c5ae Anil Gurumurthy 2017-11-06 54 "sp: %p vha: %p, rsp: %p, cmd: %p\n", 3465c5ae Anil Gurumurthy 2017-11-06 @55 sp, sp->vha, nvme->u.nvme.desc, nvme->u.nvme.cmd); 3465c5ae Anil Gurumurthy 2017-11-06 56 3465c5ae Anil Gurumurthy 2017-11-06 57 rsp->done(rsp); 3465c5ae Anil Gurumurthy 2017-11-06 58 /* Free tgt_cmd */ 3465c5ae Anil Gurumurthy 2017-11-06 59 kfree(tgt_cmd->buf); 3465c5ae Anil Gurumurthy 2017-11-06 60 kfree(tgt_cmd); 3465c5ae Anil Gurumurthy 2017-11-06 61 qla2x00_rel_sp(sp); 3465c5ae Anil Gurumurthy 2017-11-06 62 } 3465c5ae Anil Gurumurthy 2017-11-06 63 3465c5ae Anil Gurumurthy 2017-11-06 64 /* 3465c5ae Anil Gurumurthy 2017-11-06 65 * qla_nvmet_ls_rsp - 3465c5ae Anil Gurumurthy 2017-11-06 66 * Invoked by the nvme-t to complete the LS req. 3465c5ae Anil Gurumurthy 2017-11-06 67 * Prepare and send a response CTIO to the firmware. 3465c5ae Anil Gurumurthy 2017-11-06 68 */ 3465c5ae Anil Gurumurthy 2017-11-06 69 static int 3465c5ae Anil Gurumurthy 2017-11-06 70 qla_nvmet_ls_rsp(struct nvmet_fc_target_port *tgtport, 3465c5ae Anil Gurumurthy 2017-11-06 71 struct nvmefc_tgt_ls_req *rsp) 3465c5ae Anil Gurumurthy 2017-11-06 72 { 3465c5ae Anil Gurumurthy 2017-11-06 73 struct qla_nvmet_cmd *tgt_cmd = 3465c5ae Anil Gurumurthy 2017-11-06 74 container_of(rsp, struct qla_nvmet_cmd, cmd.ls_req); 3465c5ae Anil Gurumurthy 2017-11-06 75 struct scsi_qla_host *vha = tgt_cmd->vha; 3465c5ae Anil Gurumurthy 2017-11-06 76 struct srb_iocb *nvme; 3465c5ae Anil Gurumurthy 2017-11-06 77 int rval = QLA_FUNCTION_FAILED; 3465c5ae Anil Gurumurthy 2017-11-06 78 srb_t *sp; 3465c5ae Anil Gurumurthy 2017-11-06 79 3465c5ae Anil Gurumurthy 2017-11-06 80 ql_log(ql_log_info, vha, 0x11002, 3465c5ae Anil Gurumurthy 2017-11-06 81 "Dumping the NVMET-LS response buffer\n"); 3465c5ae Anil Gurumurthy 2017-11-06 82 ql_dump_buffer(ql_dbg_disc + ql_dbg_buffer, vha, 0x2075, 3465c5ae Anil Gurumurthy 2017-11-06 83 (uint8_t *)rsp->rspbuf, rsp->rsplen); 3465c5ae Anil Gurumurthy 2017-11-06 84 3465c5ae Anil Gurumurthy 2017-11-06 85 /* Alloc SRB structure */ 3465c5ae Anil Gurumurthy 2017-11-06 86 sp = qla2x00_get_sp(vha, NULL, GFP_ATOMIC); 3465c5ae Anil Gurumurthy 2017-11-06 87 if (!sp) { 3465c5ae Anil Gurumurthy 2017-11-06 88 ql_log(ql_log_info, vha, 0x11003, "Failed to allocate SRB\n"); 3465c5ae Anil Gurumurthy 2017-11-06 89 return -ENOMEM; 3465c5ae Anil Gurumurthy 2017-11-06 90 } 3465c5ae Anil Gurumurthy 2017-11-06 91 3465c5ae Anil Gurumurthy 2017-11-06 @92 sp->type = SRB_NVMET_LS; 3465c5ae Anil Gurumurthy 2017-11-06 93 sp->done = qlt_nvmet_ls_done; 3465c5ae Anil Gurumurthy 2017-11-06 94 sp->vha = vha; 3465c5ae Anil Gurumurthy 2017-11-06 95 sp->fcport = tgt_cmd->fcport; 3465c5ae Anil Gurumurthy 2017-11-06 96 3465c5ae Anil Gurumurthy 2017-11-06 97 nvme = &sp->u.iocb_cmd; 3465c5ae Anil Gurumurthy 2017-11-06 98 nvme->u.nvme.rsp_dma = rsp->rspdma; 3465c5ae Anil Gurumurthy 2017-11-06 99 nvme->u.nvme.rsp_len = rsp->rsplen; 3465c5ae Anil Gurumurthy 2017-11-06 @100 nvme->u.nvme.exchange_address = tgt_cmd->atio.u.pt_ls4.exchange_address; 3465c5ae Anil Gurumurthy 2017-11-06 @101 nvme->u.nvme.nport_handle = tgt_cmd->atio.u.pt_ls4.nport_handle; 3465c5ae Anil Gurumurthy 2017-11-06 @102 nvme->u.nvme.vp_index = tgt_cmd->atio.u.pt_ls4.vp_index; 3465c5ae Anil Gurumurthy 2017-11-06 103 3465c5ae Anil Gurumurthy 2017-11-06 @104 nvme->u.nvme.cmd = tgt_cmd; /* To be freed */ 3465c5ae Anil Gurumurthy 2017-11-06 105 nvme->u.nvme.desc = rsp; /* Call back to nvmet */ 3465c5ae Anil Gurumurthy 2017-11-06 106 3465c5ae Anil Gurumurthy 2017-11-06 107 rval = qla2x00_start_sp(sp); 3465c5ae Anil Gurumurthy 2017-11-06 108 if (rval != QLA_SUCCESS) { 3465c5ae Anil Gurumurthy 2017-11-06 109 ql_log(ql_log_warn, vha, 0x11004, 3465c5ae Anil Gurumurthy 2017-11-06 110 "qla2x00_start_sp failed = %d\n", rval); 3465c5ae Anil Gurumurthy 2017-11-06 111 return rval; 3465c5ae Anil Gurumurthy 2017-11-06 112 } 3465c5ae Anil Gurumurthy 2017-11-06 113 3465c5ae Anil Gurumurthy 2017-11-06 114 return 0; 3465c5ae Anil Gurumurthy 2017-11-06 115 } 3465c5ae Anil Gurumurthy 2017-11-06 116 3465c5ae Anil Gurumurthy 2017-11-06 117 /* 3465c5ae Anil Gurumurthy 2017-11-06 118 * qla_nvmet_fcp_op - 3465c5ae Anil Gurumurthy 2017-11-06 119 * Invoked by the nvme-t to complete the IO. 3465c5ae Anil Gurumurthy 2017-11-06 120 * Prepare and send a response CTIO to the firmware. 3465c5ae Anil Gurumurthy 2017-11-06 121 */ 3465c5ae Anil Gurumurthy 2017-11-06 122 static int 3465c5ae Anil Gurumurthy 2017-11-06 123 qla_nvmet_fcp_op(struct nvmet_fc_target_port *tgtport, 3465c5ae Anil Gurumurthy 2017-11-06 124 struct nvmefc_tgt_fcp_req *rsp) 3465c5ae Anil Gurumurthy 2017-11-06 125 { 3465c5ae Anil Gurumurthy 2017-11-06 126 struct qla_nvmet_cmd *tgt_cmd = 3465c5ae Anil Gurumurthy 2017-11-06 127 container_of(rsp, struct qla_nvmet_cmd, cmd.fcp_req); 3465c5ae Anil Gurumurthy 2017-11-06 128 struct scsi_qla_host *vha = tgt_cmd->vha; 3465c5ae Anil Gurumurthy 2017-11-06 129 3465c5ae Anil Gurumurthy 2017-11-06 130 /* Prepare and send CTIO 82h */ 3465c5ae Anil Gurumurthy 2017-11-06 131 qla_nvmet_send_resp_ctio(vha->qpair, tgt_cmd, rsp); 3465c5ae Anil Gurumurthy 2017-11-06 132 3465c5ae Anil Gurumurthy 2017-11-06 133 return 0; 3465c5ae Anil Gurumurthy 2017-11-06 134 } 3465c5ae Anil Gurumurthy 2017-11-06 135 /* 3465c5ae Anil Gurumurthy 2017-11-06 136 * qla_nvmet_fcp_abort_done 3465c5ae Anil Gurumurthy 2017-11-06 137 * free up the used resources 3465c5ae Anil Gurumurthy 2017-11-06 138 */ 3465c5ae Anil Gurumurthy 2017-11-06 139 static void qla_nvmet_fcp_abort_done(void *ptr, int res) 3465c5ae Anil Gurumurthy 2017-11-06 140 { 3465c5ae Anil Gurumurthy 2017-11-06 141 srb_t *sp = ptr; 3465c5ae Anil Gurumurthy 2017-11-06 142 3465c5ae Anil Gurumurthy 2017-11-06 143 qla2x00_rel_sp(sp); 3465c5ae Anil Gurumurthy 2017-11-06 144 } 3465c5ae Anil Gurumurthy 2017-11-06 145 3465c5ae Anil Gurumurthy 2017-11-06 146 /* 3465c5ae Anil Gurumurthy 2017-11-06 147 * qla_nvmet_fcp_abort - 3465c5ae Anil Gurumurthy 2017-11-06 148 * Invoked by the nvme-t to abort an IO 3465c5ae Anil Gurumurthy 2017-11-06 149 * Send an abort to the firmware 3465c5ae Anil Gurumurthy 2017-11-06 150 */ 3465c5ae Anil Gurumurthy 2017-11-06 151 static void 3465c5ae Anil Gurumurthy 2017-11-06 152 qla_nvmet_fcp_abort(struct nvmet_fc_target_port *tgtport, 3465c5ae Anil Gurumurthy 2017-11-06 153 struct nvmefc_tgt_fcp_req *req) 3465c5ae Anil Gurumurthy 2017-11-06 154 { 3465c5ae Anil Gurumurthy 2017-11-06 155 struct qla_nvmet_cmd *tgt_cmd = 3465c5ae Anil Gurumurthy 2017-11-06 156 container_of(req, struct qla_nvmet_cmd, cmd.fcp_req); 3465c5ae Anil Gurumurthy 2017-11-06 157 struct scsi_qla_host *vha = tgt_cmd->vha; 3465c5ae Anil Gurumurthy 2017-11-06 158 struct qla_hw_data *ha = vha->hw; 3465c5ae Anil Gurumurthy 2017-11-06 159 srb_t *sp; 3465c5ae Anil Gurumurthy 2017-11-06 160 3465c5ae Anil Gurumurthy 2017-11-06 161 /* Alloc SRB structure */ 3465c5ae Anil Gurumurthy 2017-11-06 162 sp = qla2x00_get_sp(vha, NULL, GFP_KERNEL); 3465c5ae Anil Gurumurthy 2017-11-06 163 if (!sp) { 3465c5ae Anil Gurumurthy 2017-11-06 164 ql_log(ql_log_info, vha, 0x11005, "Failed to allocate SRB\n"); 3465c5ae Anil Gurumurthy 2017-11-06 165 return; 3465c5ae Anil Gurumurthy 2017-11-06 166 } 3465c5ae Anil Gurumurthy 2017-11-06 167 3465c5ae Anil Gurumurthy 2017-11-06 @168 sp->type = SRB_NVMET_SEND_ABTS; 3465c5ae Anil Gurumurthy 2017-11-06 169 sp->done = qla_nvmet_fcp_abort_done; 3465c5ae Anil Gurumurthy 2017-11-06 170 sp->vha = vha; 3465c5ae Anil Gurumurthy 2017-11-06 171 sp->fcport = tgt_cmd->fcport; 3465c5ae Anil Gurumurthy 2017-11-06 172 3465c5ae Anil Gurumurthy 2017-11-06 173 ha->isp_ops->abort_command(sp); 3465c5ae Anil Gurumurthy 2017-11-06 174 3465c5ae Anil Gurumurthy 2017-11-06 175 } 3465c5ae Anil Gurumurthy 2017-11-06 176 3465c5ae Anil Gurumurthy 2017-11-06 177 /* 3465c5ae Anil Gurumurthy 2017-11-06 178 * qla_nvmet_fcp_req_release - 3465c5ae Anil Gurumurthy 2017-11-06 179 * Delete the cmd from the list and free the cmd 3465c5ae Anil Gurumurthy 2017-11-06 180 */ 3465c5ae Anil Gurumurthy 2017-11-06 181 3465c5ae Anil Gurumurthy 2017-11-06 182 static void 3465c5ae Anil Gurumurthy 2017-11-06 183 qla_nvmet_fcp_req_release(struct nvmet_fc_target_port *tgtport, 3465c5ae Anil Gurumurthy 2017-11-06 184 struct nvmefc_tgt_fcp_req *rsp) 3465c5ae Anil Gurumurthy 2017-11-06 185 { 3465c5ae Anil Gurumurthy 2017-11-06 186 struct qla_nvmet_cmd *tgt_cmd = 3465c5ae Anil Gurumurthy 2017-11-06 187 container_of(rsp, struct qla_nvmet_cmd, cmd.fcp_req); 3465c5ae Anil Gurumurthy 2017-11-06 188 scsi_qla_host_t *vha = tgt_cmd->vha; 3465c5ae Anil Gurumurthy 2017-11-06 189 unsigned long flags; 3465c5ae Anil Gurumurthy 2017-11-06 190 3465c5ae Anil Gurumurthy 2017-11-06 191 spin_lock_irqsave(&vha->cmd_list_lock, flags); 3465c5ae Anil Gurumurthy 2017-11-06 192 list_del(&tgt_cmd->cmd_list); 3465c5ae Anil Gurumurthy 2017-11-06 193 spin_unlock_irqrestore(&vha->cmd_list_lock, flags); 3465c5ae Anil Gurumurthy 2017-11-06 194 3465c5ae Anil Gurumurthy 2017-11-06 195 kfree(tgt_cmd); 3465c5ae Anil Gurumurthy 2017-11-06 196 } 3465c5ae Anil Gurumurthy 2017-11-06 197 3465c5ae Anil Gurumurthy 2017-11-06 198 static struct nvmet_fc_target_template qla_nvmet_fc_transport = { 3465c5ae Anil Gurumurthy 2017-11-06 199 .targetport_delete = qla_nvmet_targetport_delete, 3465c5ae Anil Gurumurthy 2017-11-06 200 .xmt_ls_rsp = qla_nvmet_ls_rsp, 3465c5ae Anil Gurumurthy 2017-11-06 201 .fcp_op = qla_nvmet_fcp_op, 3465c5ae Anil Gurumurthy 2017-11-06 202 .fcp_abort = qla_nvmet_fcp_abort, 3465c5ae Anil Gurumurthy 2017-11-06 203 .fcp_req_release = qla_nvmet_fcp_req_release, 3465c5ae Anil Gurumurthy 2017-11-06 204 .max_hw_queues = 8, 3465c5ae Anil Gurumurthy 2017-11-06 205 .max_sgl_segments = 128, 3465c5ae Anil Gurumurthy 2017-11-06 206 .max_dif_sgl_segments = 64, 3465c5ae Anil Gurumurthy 2017-11-06 207 .dma_boundary = 0xFFFFFFFF, 3465c5ae Anil Gurumurthy 2017-11-06 208 .target_features = NVMET_FCTGTFEAT_READDATA_RSP | 3465c5ae Anil Gurumurthy 2017-11-06 209 NVMET_FCTGTFEAT_CMD_IN_ISR | 3465c5ae Anil Gurumurthy 2017-11-06 210 NVMET_FCTGTFEAT_OPDONE_IN_ISR, 3465c5ae Anil Gurumurthy 2017-11-06 211 .target_priv_sz = sizeof(struct nvme_private), 3465c5ae Anil Gurumurthy 2017-11-06 212 }; 3465c5ae Anil Gurumurthy 2017-11-06 213 #endif 3465c5ae Anil Gurumurthy 2017-11-06 214 /* 3465c5ae Anil Gurumurthy 2017-11-06 215 * qla_nvmet_create_targetport - 3465c5ae Anil Gurumurthy 2017-11-06 216 * Create a targetport. Registers the template with the nvme-t 3465c5ae Anil Gurumurthy 2017-11-06 217 * layer 3465c5ae Anil Gurumurthy 2017-11-06 218 */ 3465c5ae Anil Gurumurthy 2017-11-06 219 int qla_nvmet_create_targetport(struct scsi_qla_host *vha) 3465c5ae Anil Gurumurthy 2017-11-06 220 { 3465c5ae Anil Gurumurthy 2017-11-06 221 #if IS_ENABLED(CONFIG_NVME_TARGET_FC) 3465c5ae Anil Gurumurthy 2017-11-06 222 struct nvmet_fc_port_info pinfo; 3465c5ae Anil Gurumurthy 2017-11-06 223 struct qla_nvmet_tgtport *tport; 3465c5ae Anil Gurumurthy 2017-11-06 224 int error = 0; 3465c5ae Anil Gurumurthy 2017-11-06 225 3465c5ae Anil Gurumurthy 2017-11-06 @226 ql_dbg(ql_dbg_nvme, vha, 0xe081, 3465c5ae Anil Gurumurthy 2017-11-06 227 "Creating target port for :%p\n", vha); 3465c5ae Anil Gurumurthy 2017-11-06 228 3465c5ae Anil Gurumurthy 2017-11-06 229 memset(&pinfo, 0, (sizeof(struct nvmet_fc_port_info))); 3465c5ae Anil Gurumurthy 2017-11-06 230 pinfo.node_name = wwn_to_u64(vha->node_name); 3465c5ae Anil Gurumurthy 2017-11-06 231 pinfo.port_name = wwn_to_u64(vha->port_name); 3465c5ae Anil Gurumurthy 2017-11-06 232 pinfo.port_id = vha->d_id.b24; 3465c5ae Anil Gurumurthy 2017-11-06 233 3465c5ae Anil Gurumurthy 2017-11-06 234 error = nvmet_fc_register_targetport(&pinfo, 3465c5ae Anil Gurumurthy 2017-11-06 235 &qla_nvmet_fc_transport, &vha->hw->pdev->dev, 3465c5ae Anil Gurumurthy 2017-11-06 @236 &vha->targetport); 3465c5ae Anil Gurumurthy 2017-11-06 237 3465c5ae Anil Gurumurthy 2017-11-06 238 if (error) { 3465c5ae Anil Gurumurthy 2017-11-06 239 ql_dbg(ql_dbg_nvme, vha, 0xe082, 3465c5ae Anil Gurumurthy 2017-11-06 240 "Cannot register NVME transport:%d\n", error); 3465c5ae Anil Gurumurthy 2017-11-06 241 return error; 3465c5ae Anil Gurumurthy 2017-11-06 242 } 3465c5ae Anil Gurumurthy 2017-11-06 243 tport = (struct qla_nvmet_tgtport *)vha->targetport->private; 3465c5ae Anil Gurumurthy 2017-11-06 244 tport->vha = vha; 3465c5ae Anil Gurumurthy 2017-11-06 245 ql_dbg(ql_dbg_nvme, vha, 0xe082, 3465c5ae Anil Gurumurthy 2017-11-06 246 " Registered NVME transport:%p WWPN:%llx\n", 3465c5ae Anil Gurumurthy 2017-11-06 247 tport, pinfo.port_name); 3465c5ae Anil Gurumurthy 2017-11-06 248 #endif 3465c5ae Anil Gurumurthy 2017-11-06 249 return 0; 3465c5ae Anil Gurumurthy 2017-11-06 250 } 3465c5ae Anil Gurumurthy 2017-11-06 251 :::::: The code at line 48 was first introduced by commit :::::: 3465c5aeb3161f2f168841ded707571ffe38d136 qla2xxx_nvmet: Add files for FC-NVMe Target support :::::: TO: Anil Gurumurthy <anil.gurumurthy@cavium.com> :::::: CC: 0day robot <fengguang.wu@intel.com> --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
diff --git a/drivers/scsi/qla2xxx/Kconfig b/drivers/scsi/qla2xxx/Kconfig index 036cc3f217b1..f1539d8b68ef 100644 --- a/drivers/scsi/qla2xxx/Kconfig +++ b/drivers/scsi/qla2xxx/Kconfig @@ -3,6 +3,7 @@ config SCSI_QLA_FC depends on PCI && SCSI depends on SCSI_FC_ATTRS depends on NVME_FC || !NVME_FC + depends on NVME_TARGET_FC || !NVME_TARGET_FC select FW_LOADER select BTREE ---help--- diff --git a/drivers/scsi/qla2xxx/Makefile b/drivers/scsi/qla2xxx/Makefile index 0b767a0bb308..5b6838ac57bb 100644 --- a/drivers/scsi/qla2xxx/Makefile +++ b/drivers/scsi/qla2xxx/Makefile @@ -1,6 +1,7 @@ qla2xxx-y := qla_os.o qla_init.o qla_mbx.o qla_iocb.o qla_isr.o qla_gs.o \ qla_dbg.o qla_sup.o qla_attr.o qla_mid.o qla_dfs.o qla_bsg.o \ - qla_nx.o qla_mr.o qla_nx2.o qla_target.o qla_tmpl.o qla_nvme.o + qla_nx.o qla_mr.o qla_nx2.o qla_target.o qla_tmpl.o qla_nvme.o \ + qla_nvmet.o obj-$(CONFIG_SCSI_QLA_FC) += qla2xxx.o obj-$(CONFIG_TCM_QLA2XXX) += tcm_qla2xxx.o