Re: drivers/scsi/lpfc/lpfc_ct.c:3258:42: sparse: sparse: incorrect type in assignment (different base types)

From: Justin Tee
Date: Mon Oct 16 2023 - 13:48:41 EST


Hi,

This has already been fixed on the latest master branch with the following:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6e8a669e61af80d69d5ee16e0ddf3160178a63bc&h=master

Thanks,
Justin


On Sun, Oct 15, 2023 at 2:23 PM kernel test robot <lkp@xxxxxxxxx> wrote:
>
> tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
> head: fbe1bf1e5ff1e3b298420d7a8434983ef8d72bd1
> commit: 045c58c87560b2f9e44fe84e62ce68625a937fa7 scsi: lpfc: Rework FDMI attribute registration for unintential padding
> date: 1 year, 1 month ago
> config: i386-randconfig-062-20231016 (https://download.01.org/0day-ci/archive/20231016/202310160545.Ki0maVw0-lkp@xxxxxxxxx/config)
> compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231016/202310160545.Ki0maVw0-lkp@xxxxxxxxx/reproduce)
>
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@xxxxxxxxx>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202310160545.Ki0maVw0-lkp@xxxxxxxxx/
>
> sparse warnings: (new ones prefixed by >>)
> drivers/scsi/lpfc/lpfc_ct.c:3581:15: sparse: sparse: cast to restricted __be16
> drivers/scsi/lpfc/lpfc_ct.c:3590:20: sparse: sparse: cast to restricted __be16
> drivers/scsi/lpfc/lpfc_ct.c:3609:17: sparse: sparse: cast to restricted __be32
> drivers/scsi/lpfc/lpfc_ct.c:3609:17: sparse: sparse: cast to restricted __be32
> drivers/scsi/lpfc/lpfc_ct.c:3609:17: sparse: sparse: cast to restricted __be32
> drivers/scsi/lpfc/lpfc_ct.c:3609:17: sparse: sparse: cast to restricted __be32
> drivers/scsi/lpfc/lpfc_ct.c:3624:42: sparse: sparse: cast to restricted __be32
> drivers/scsi/lpfc/lpfc_ct.c:3638:17: sparse: sparse: cast to restricted __be32
> drivers/scsi/lpfc/lpfc_ct.c:3638:17: sparse: sparse: cast to restricted __be32
> drivers/scsi/lpfc/lpfc_ct.c:3638:17: sparse: sparse: cast to restricted __be32
> drivers/scsi/lpfc/lpfc_ct.c:3638:17: sparse: sparse: cast to restricted __be32
> drivers/scsi/lpfc/lpfc_ct.c:198:25: sparse: sparse: cast to restricted __le32
> drivers/scsi/lpfc/lpfc_ct.c:199:24: sparse: sparse: cast to restricted __le32
> drivers/scsi/lpfc/lpfc_ct.c:202:22: sparse: sparse: cast to restricted __le32
> drivers/scsi/lpfc/lpfc_ct.c:212:45: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] CmdRsp:16 @@ got restricted __be16 [usertype] @@
> drivers/scsi/lpfc/lpfc_ct.c:212:45: sparse: expected unsigned int [usertype] CmdRsp:16
> drivers/scsi/lpfc/lpfc_ct.c:212:45: sparse: got restricted __be16 [usertype]
> drivers/scsi/lpfc/lpfc_ct.c:510:32: sparse: sparse: cast to restricted __be16
> drivers/scsi/lpfc/lpfc_ct.c:511:32: sparse: sparse: cast to restricted __be16
> drivers/scsi/lpfc/lpfc_ct.c:531:32: sparse: sparse: cast to restricted __le32
> drivers/scsi/lpfc/lpfc_ct.c:532:33: sparse: sparse: cast to restricted __le32
> drivers/scsi/lpfc/lpfc_ct.c:534:30: sparse: sparse: cast to restricted __le32
> drivers/scsi/lpfc/lpfc_ct.c:880:33: sparse: sparse: cast to restricted __be32
> drivers/scsi/lpfc/lpfc_ct.c:882:40: sparse: sparse: restricted __be32 degrades to integer
> drivers/scsi/lpfc/lpfc_ct.c:1032:21: sparse: sparse: restricted __be16 degrades to integer
> drivers/scsi/lpfc/lpfc_ct.c:1047:28: sparse: sparse: cast to restricted __be16
> drivers/scsi/lpfc/lpfc_ct.c:1251:21: sparse: sparse: restricted __be16 degrades to integer
> drivers/scsi/lpfc/lpfc_ct.c:1266:28: sparse: sparse: cast to restricted __be16
> drivers/scsi/lpfc/lpfc_ct.c:1369:15: sparse: sparse: cast to restricted __be32
> drivers/scsi/lpfc/lpfc_ct.c:1395:21: sparse: sparse: cast to restricted __be16
> drivers/scsi/lpfc/lpfc_ct.c:1518:15: sparse: sparse: cast to restricted __be32
> drivers/scsi/lpfc/lpfc_ct.c:1534:30: sparse: sparse: cast to restricted __be32
> drivers/scsi/lpfc/lpfc_ct.c:1535:30: sparse: sparse: cast to restricted __be32
> drivers/scsi/lpfc/lpfc_ct.c:1623:19: sparse: sparse: cast to restricted __be16
> drivers/scsi/lpfc/lpfc_ct.c:1685:21: sparse: sparse: cast to restricted __be16
> drivers/scsi/lpfc/lpfc_ct.c:1706:21: sparse: sparse: cast to restricted __be16
> drivers/scsi/lpfc/lpfc_ct.c:1727:21: sparse: sparse: cast to restricted __be16
> drivers/scsi/lpfc/lpfc_ct.c:1748:21: sparse: sparse: cast to restricted __be16
> drivers/scsi/lpfc/lpfc_ct.c:1781:21: sparse: sparse: cast to restricted __be16
> drivers/scsi/lpfc/lpfc_ct.c:1951:25: sparse: sparse: cast to restricted __le32
> drivers/scsi/lpfc/lpfc_ct.c:1952:24: sparse: sparse: cast to restricted __le32
> drivers/scsi/lpfc/lpfc_ct.c:1976:22: sparse: sparse: cast to restricted __le32
> drivers/scsi/lpfc/lpfc_ct.c:1987:52: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] CmdRsp:16 @@ got restricted __be16 [usertype] @@
> drivers/scsi/lpfc/lpfc_ct.c:1987:52: sparse: expected unsigned int [usertype] CmdRsp:16
> drivers/scsi/lpfc/lpfc_ct.c:1987:52: sparse: got restricted __be16 [usertype]
> drivers/scsi/lpfc/lpfc_ct.c:1999:52: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] CmdRsp:16 @@ got restricted __be16 [usertype] @@
> drivers/scsi/lpfc/lpfc_ct.c:1999:52: sparse: expected unsigned int [usertype] CmdRsp:16
> drivers/scsi/lpfc/lpfc_ct.c:1999:52: sparse: got restricted __be16 [usertype]
> drivers/scsi/lpfc/lpfc_ct.c:2011:52: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] CmdRsp:16 @@ got restricted __be16 [usertype] @@
> drivers/scsi/lpfc/lpfc_ct.c:2011:52: sparse: expected unsigned int [usertype] CmdRsp:16
> drivers/scsi/lpfc/lpfc_ct.c:2011:52: sparse: got restricted __be16 [usertype]
> drivers/scsi/lpfc/lpfc_ct.c:2013:38: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] PortId @@ got restricted __be32 [usertype] @@
> drivers/scsi/lpfc/lpfc_ct.c:2013:38: sparse: expected unsigned int [usertype] PortId
> drivers/scsi/lpfc/lpfc_ct.c:2013:38: sparse: got restricted __be32 [usertype]
> drivers/scsi/lpfc/lpfc_ct.c:2018:52: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] CmdRsp:16 @@ got restricted __be16 [usertype] @@
> drivers/scsi/lpfc/lpfc_ct.c:2018:52: sparse: expected unsigned int [usertype] CmdRsp:16
> drivers/scsi/lpfc/lpfc_ct.c:2018:52: sparse: got restricted __be16 [usertype]
> drivers/scsi/lpfc/lpfc_ct.c:2020:38: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] PortId @@ got restricted __be32 [usertype] @@
> drivers/scsi/lpfc/lpfc_ct.c:2020:38: sparse: expected unsigned int [usertype] PortId
> drivers/scsi/lpfc/lpfc_ct.c:2020:38: sparse: got restricted __be32 [usertype]
> drivers/scsi/lpfc/lpfc_ct.c:2026:52: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] CmdRsp:16 @@ got restricted __be16 [usertype] @@
> drivers/scsi/lpfc/lpfc_ct.c:2026:52: sparse: expected unsigned int [usertype] CmdRsp:16
> drivers/scsi/lpfc/lpfc_ct.c:2026:52: sparse: got restricted __be16 [usertype]
> drivers/scsi/lpfc/lpfc_ct.c:2060:52: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] CmdRsp:16 @@ got restricted __be16 [usertype] @@
> drivers/scsi/lpfc/lpfc_ct.c:2060:52: sparse: expected unsigned int [usertype] CmdRsp:16
> drivers/scsi/lpfc/lpfc_ct.c:2060:52: sparse: got restricted __be16 [usertype]
> drivers/scsi/lpfc/lpfc_ct.c:2062:38: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] PortId @@ got restricted __be32 [usertype] @@
> drivers/scsi/lpfc/lpfc_ct.c:2062:38: sparse: expected unsigned int [usertype] PortId
> drivers/scsi/lpfc/lpfc_ct.c:2062:38: sparse: got restricted __be32 [usertype]
> drivers/scsi/lpfc/lpfc_ct.c:2070:52: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] CmdRsp:16 @@ got restricted __be16 [usertype] @@
> drivers/scsi/lpfc/lpfc_ct.c:2070:52: sparse: expected unsigned int [usertype] CmdRsp:16
> drivers/scsi/lpfc/lpfc_ct.c:2070:52: sparse: got restricted __be16 [usertype]
> drivers/scsi/lpfc/lpfc_ct.c:2072:39: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] PortId @@ got restricted __be32 [usertype] @@
> drivers/scsi/lpfc/lpfc_ct.c:2072:39: sparse: expected unsigned int [usertype] PortId
> drivers/scsi/lpfc/lpfc_ct.c:2072:39: sparse: got restricted __be32 [usertype]
> drivers/scsi/lpfc/lpfc_ct.c:2081:52: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] CmdRsp:16 @@ got restricted __be16 [usertype] @@
> drivers/scsi/lpfc/lpfc_ct.c:2081:52: sparse: expected unsigned int [usertype] CmdRsp:16
> drivers/scsi/lpfc/lpfc_ct.c:2081:52: sparse: got restricted __be16 [usertype]
> drivers/scsi/lpfc/lpfc_ct.c:2093:52: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] CmdRsp:16 @@ got restricted __be16 [usertype] @@
> drivers/scsi/lpfc/lpfc_ct.c:2093:52: sparse: expected unsigned int [usertype] CmdRsp:16
> drivers/scsi/lpfc/lpfc_ct.c:2093:52: sparse: got restricted __be16 [usertype]
> drivers/scsi/lpfc/lpfc_ct.c:2095:41: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] port_id @@ got restricted __be32 [usertype] @@
> drivers/scsi/lpfc/lpfc_ct.c:2095:41: sparse: expected unsigned int [usertype] port_id
> drivers/scsi/lpfc/lpfc_ct.c:2095:41: sparse: got restricted __be32 [usertype]
> drivers/scsi/lpfc/lpfc_ct.c:2100:52: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] CmdRsp:16 @@ got restricted __be16 [usertype] @@
> drivers/scsi/lpfc/lpfc_ct.c:2100:52: sparse: expected unsigned int [usertype] CmdRsp:16
> drivers/scsi/lpfc/lpfc_ct.c:2100:52: sparse: got restricted __be16 [usertype]
> drivers/scsi/lpfc/lpfc_ct.c:2102:38: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] PortId @@ got restricted __be32 [usertype] @@
> drivers/scsi/lpfc/lpfc_ct.c:2102:38: sparse: expected unsigned int [usertype] PortId
> drivers/scsi/lpfc/lpfc_ct.c:2102:38: sparse: got restricted __be32 [usertype]
> drivers/scsi/lpfc/lpfc_ct.c:2264:17: sparse: sparse: cast to restricted __be16
> drivers/scsi/lpfc/lpfc_ct.c:2264:17: sparse: sparse: cast to restricted __be16
> drivers/scsi/lpfc/lpfc_ct.c:2280:16: sparse: sparse: cast to restricted __be16
> drivers/scsi/lpfc/lpfc_ct.c:2281:25: sparse: sparse: restricted __be16 degrades to integer
> drivers/scsi/lpfc/lpfc_ct.c:3113:5: sparse: sparse: symbol 'lpfc_fdmi_hba_action' was not declared. Should it be static?
> drivers/scsi/lpfc/lpfc_ct.c:3137:5: sparse: sparse: symbol 'lpfc_fdmi_port_action' was not declared. Should it be static?
> drivers/scsi/lpfc/lpfc_ct.c:3241:44: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] CmdRsp:16 @@ got restricted __be16 [usertype] @@
> drivers/scsi/lpfc/lpfc_ct.c:3241:44: sparse: expected unsigned int [usertype] CmdRsp:16
> drivers/scsi/lpfc/lpfc_ct.c:3241:44: sparse: got restricted __be16 [usertype]
> >> drivers/scsi/lpfc/lpfc_ct.c:3258:42: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] EntryCnt @@ got restricted __be32 [usertype] @@
> drivers/scsi/lpfc/lpfc_ct.c:3258:42: sparse: expected unsigned int [usertype] EntryCnt
> drivers/scsi/lpfc/lpfc_ct.c:3258:42: sparse: got restricted __be32 [usertype]
> drivers/scsi/lpfc/lpfc_ct.c:3293:30: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] EntryCnt @@ got restricted __be32 [usertype] @@
> drivers/scsi/lpfc/lpfc_ct.c:3293:30: sparse: expected unsigned int [usertype] EntryCnt
> drivers/scsi/lpfc/lpfc_ct.c:3293:30: sparse: got restricted __be32 [usertype]
> drivers/scsi/lpfc/lpfc_ct.c:3353:34: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] EntryCnt @@ got restricted __be32 [usertype] @@
> drivers/scsi/lpfc/lpfc_ct.c:3353:34: sparse: expected unsigned int [usertype] EntryCnt
> drivers/scsi/lpfc/lpfc_ct.c:3353:34: sparse: got restricted __be32 [usertype]
> drivers/scsi/lpfc/lpfc_ct.c:3397:42: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] Size:16 @@ got restricted __be16 [usertype] @@
> drivers/scsi/lpfc/lpfc_ct.c:3397:42: sparse: expected unsigned int [usertype] Size:16
> drivers/scsi/lpfc/lpfc_ct.c:3397:42: sparse: got restricted __be16 [usertype]
> drivers/scsi/lpfc/lpfc_ct.c:3532:34: sparse: sparse: cast to restricted __be32
> drivers/scsi/lpfc/lpfc_ct.c:3736:44: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] CmdRsp:16 @@ got restricted __be16 [usertype] @@
> drivers/scsi/lpfc/lpfc_ct.c:3736:44: sparse: expected unsigned int [usertype] CmdRsp:16
> drivers/scsi/lpfc/lpfc_ct.c:3736:44: sparse: got restricted __be16 [usertype]
> drivers/scsi/lpfc/lpfc_ct.c:3744:34: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] PortID @@ got restricted __be32 [usertype] @@
> drivers/scsi/lpfc/lpfc_ct.c:3744:34: sparse: expected unsigned int [usertype] PortID
> drivers/scsi/lpfc/lpfc_ct.c:3744:34: sparse: got restricted __be32 [usertype]
> drivers/scsi/lpfc/lpfc_ct.c:3747:36: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] no_of_objects @@ got restricted __be32 [usertype] @@
> drivers/scsi/lpfc/lpfc_ct.c:3747:36: sparse: expected unsigned int [usertype] no_of_objects
> drivers/scsi/lpfc/lpfc_ct.c:3747:36: sparse: got restricted __be32 [usertype]
> drivers/scsi/lpfc/lpfc_ct.c:3756:34: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] PortID @@ got restricted __be32 [usertype] @@
> drivers/scsi/lpfc/lpfc_ct.c:3756:34: sparse: expected unsigned int [usertype] PortID
> drivers/scsi/lpfc/lpfc_ct.c:3756:34: sparse: got restricted __be32 [usertype]
> drivers/scsi/lpfc/lpfc_ct.c:3763:34: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] PortID @@ got restricted __be32 [usertype] @@
> drivers/scsi/lpfc/lpfc_ct.c:3763:34: sparse: expected unsigned int [usertype] PortID
> drivers/scsi/lpfc/lpfc_ct.c:3763:34: sparse: got restricted __be32 [usertype]
> drivers/scsi/lpfc/lpfc_ct.c:3766:36: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] no_of_objects @@ got restricted __be32 [usertype] @@
> drivers/scsi/lpfc/lpfc_ct.c:3766:36: sparse: expected unsigned int [usertype] no_of_objects
> drivers/scsi/lpfc/lpfc_ct.c:3766:36: sparse: got restricted __be32 [usertype]
> drivers/scsi/lpfc/lpfc_ct.c:3778:34: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] PortID @@ got restricted __be32 [usertype] @@
> drivers/scsi/lpfc/lpfc_ct.c:3778:34: sparse: expected unsigned int [usertype] PortID
> drivers/scsi/lpfc/lpfc_ct.c:3778:34: sparse: got restricted __be32 [usertype]
> drivers/scsi/lpfc/lpfc_ct.c:3789:42: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] Size:16 @@ got restricted __be16 [usertype] @@
> drivers/scsi/lpfc/lpfc_ct.c:3789:42: sparse: expected unsigned int [usertype] Size:16
> drivers/scsi/lpfc/lpfc_ct.c:3789:42: sparse: got restricted __be16 [usertype]
>
> vim +3258 drivers/scsi/lpfc/lpfc_ct.c
>
> 4258e98ee3862c James Smart 2015-12-16 3165
> 4258e98ee3862c James Smart 2015-12-16 3166 /**
> 4258e98ee3862c James Smart 2015-12-16 3167 * lpfc_fdmi_cmd - Build and send a FDMI cmd to the specified NPort
> 4258e98ee3862c James Smart 2015-12-16 3168 * @vport: pointer to a host virtual N_Port data structure.
> 4258e98ee3862c James Smart 2015-12-16 3169 * @ndlp: ndlp to send FDMI cmd to (if NULL use FDMI_DID)
> 6265bc4a41cd86 Lee Jones 2020-07-21 3170 * @cmdcode: FDMI command to send
> 6265bc4a41cd86 Lee Jones 2020-07-21 3171 * @new_mask: Mask of HBA or PORT Attributes to send
> 4258e98ee3862c James Smart 2015-12-16 3172 *
> 4258e98ee3862c James Smart 2015-12-16 3173 * Builds and sends a FDMI command using the CT subsystem.
> 4258e98ee3862c James Smart 2015-12-16 3174 */
> 4258e98ee3862c James Smart 2015-12-16 3175 int
> 4258e98ee3862c James Smart 2015-12-16 3176 lpfc_fdmi_cmd(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
> 4258e98ee3862c James Smart 2015-12-16 3177 int cmdcode, uint32_t new_mask)
> 4258e98ee3862c James Smart 2015-12-16 3178 {
> 4258e98ee3862c James Smart 2015-12-16 3179 struct lpfc_hba *phba = vport->phba;
> d8cdd33a66dc8c James Smart 2022-09-11 3180 struct lpfc_dmabuf *rq, *rsp;
> 4258e98ee3862c James Smart 2015-12-16 3181 struct lpfc_sli_ct_request *CtReq;
> d8cdd33a66dc8c James Smart 2022-09-11 3182 struct ulp_bde64_le *bde;
> 4258e98ee3862c James Smart 2015-12-16 3183 uint32_t bit_pos;
> 045c58c87560b2 James Smart 2022-09-11 3184 uint32_t size, addsz;
> 4258e98ee3862c James Smart 2015-12-16 3185 uint32_t rsp_size;
> 4258e98ee3862c James Smart 2015-12-16 3186 uint32_t mask;
> 4258e98ee3862c James Smart 2015-12-16 3187 struct lpfc_fdmi_reg_hba *rh;
> 4258e98ee3862c James Smart 2015-12-16 3188 struct lpfc_fdmi_port_entry *pe;
> 2649809cd1b432 James Smart 2022-09-11 3189 struct lpfc_fdmi_reg_portattr *pab = NULL, *base = NULL;
> 4258e98ee3862c James Smart 2015-12-16 3190 struct lpfc_fdmi_attr_block *ab = NULL;
> 045c58c87560b2 James Smart 2022-09-11 3191 int (*func)(struct lpfc_vport *vport, void *attrbuf);
> 045c58c87560b2 James Smart 2022-09-11 3192 void (*cmpl)(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
> 045c58c87560b2 James Smart 2022-09-11 3193 struct lpfc_iocbq *rspiocb);
> 4258e98ee3862c James Smart 2015-12-16 3194
> 307e338097dc32 James Smart 2020-11-15 3195 if (!ndlp)
> 4258e98ee3862c James Smart 2015-12-16 3196 return 0;
> 4258e98ee3862c James Smart 2015-12-16 3197
> 4258e98ee3862c James Smart 2015-12-16 3198 cmpl = lpfc_cmpl_ct_disc_fdmi; /* called from discovery */
> 4258e98ee3862c James Smart 2015-12-16 3199
> 4258e98ee3862c James Smart 2015-12-16 3200 /* fill in BDEs for command */
> 4258e98ee3862c James Smart 2015-12-16 3201 /* Allocate buffer for command payload */
> d8cdd33a66dc8c James Smart 2022-09-11 3202 rq = kmalloc(sizeof(*rq), GFP_KERNEL);
> d8cdd33a66dc8c James Smart 2022-09-11 3203 if (!rq)
> 4258e98ee3862c James Smart 2015-12-16 3204 goto fdmi_cmd_exit;
> 4258e98ee3862c James Smart 2015-12-16 3205
> d8cdd33a66dc8c James Smart 2022-09-11 3206 rq->virt = lpfc_mbuf_alloc(phba, 0, &rq->phys);
> d8cdd33a66dc8c James Smart 2022-09-11 3207 if (!rq->virt)
> d8cdd33a66dc8c James Smart 2022-09-11 3208 goto fdmi_cmd_free_rq;
> 4258e98ee3862c James Smart 2015-12-16 3209
> 4258e98ee3862c James Smart 2015-12-16 3210 /* Allocate buffer for Buffer ptr list */
> d8cdd33a66dc8c James Smart 2022-09-11 3211 rsp = kmalloc(sizeof(*rsp), GFP_KERNEL);
> d8cdd33a66dc8c James Smart 2022-09-11 3212 if (!rsp)
> d8cdd33a66dc8c James Smart 2022-09-11 3213 goto fdmi_cmd_free_rqvirt;
> 4258e98ee3862c James Smart 2015-12-16 3214
> d8cdd33a66dc8c James Smart 2022-09-11 3215 rsp->virt = lpfc_mbuf_alloc(phba, 0, &rsp->phys);
> d8cdd33a66dc8c James Smart 2022-09-11 3216 if (!rsp->virt)
> d8cdd33a66dc8c James Smart 2022-09-11 3217 goto fdmi_cmd_free_rsp;
> 4258e98ee3862c James Smart 2015-12-16 3218
> d8cdd33a66dc8c James Smart 2022-09-11 3219 INIT_LIST_HEAD(&rq->list);
> d8cdd33a66dc8c James Smart 2022-09-11 3220 INIT_LIST_HEAD(&rsp->list);
> 4258e98ee3862c James Smart 2015-12-16 3221
> 2649809cd1b432 James Smart 2022-09-11 3222 /* mbuf buffers are 1K in length - aka LPFC_BPL_SIZE */
> 2649809cd1b432 James Smart 2022-09-11 3223 memset(rq->virt, 0, LPFC_BPL_SIZE);
> 2649809cd1b432 James Smart 2022-09-11 3224 rsp_size = LPFC_BPL_SIZE;
> 2649809cd1b432 James Smart 2022-09-11 3225
> 4258e98ee3862c James Smart 2015-12-16 3226 /* FDMI request */
> 4258e98ee3862c James Smart 2015-12-16 3227 lpfc_printf_vlog(vport, KERN_INFO, LOG_DISCOVERY,
> de3ec318fee323 James Smart 2022-05-05 3228 "0218 FDMI Request x%x mask x%x Data: x%x x%x x%x\n",
> de3ec318fee323 James Smart 2022-05-05 3229 cmdcode, new_mask, vport->fdmi_port_mask,
> de3ec318fee323 James Smart 2022-05-05 3230 vport->fc_flag, vport->port_state);
> de3ec318fee323 James Smart 2022-05-05 3231
> d8cdd33a66dc8c James Smart 2022-09-11 3232 CtReq = (struct lpfc_sli_ct_request *)rq->virt;
> 4258e98ee3862c James Smart 2015-12-16 3233
> 4258e98ee3862c James Smart 2015-12-16 3234 /* First populate the CT_IU preamble */
> 4258e98ee3862c James Smart 2015-12-16 3235 CtReq->RevisionId.bits.Revision = SLI_CT_REVISION;
> 4258e98ee3862c James Smart 2015-12-16 3236 CtReq->RevisionId.bits.InId = 0;
> 4258e98ee3862c James Smart 2015-12-16 3237
> 4258e98ee3862c James Smart 2015-12-16 3238 CtReq->FsType = SLI_CT_MANAGEMENT_SERVICE;
> 4258e98ee3862c James Smart 2015-12-16 3239 CtReq->FsSubType = SLI_CT_FDMI_Subtypes;
> 4258e98ee3862c James Smart 2015-12-16 3240
> 4258e98ee3862c James Smart 2015-12-16 3241 CtReq->CommandResponse.bits.CmdRsp = cpu_to_be16(cmdcode);
> 2649809cd1b432 James Smart 2022-09-11 3242
> 4258e98ee3862c James Smart 2015-12-16 3243 size = 0;
> 4258e98ee3862c James Smart 2015-12-16 3244
> 4258e98ee3862c James Smart 2015-12-16 3245 /* Next fill in the specific FDMI cmd information */
> 4258e98ee3862c James Smart 2015-12-16 3246 switch (cmdcode) {
> 4258e98ee3862c James Smart 2015-12-16 3247 case SLI_MGMT_RHAT:
> 4258e98ee3862c James Smart 2015-12-16 3248 case SLI_MGMT_RHBA:
> 2649809cd1b432 James Smart 2022-09-11 3249 rh = (struct lpfc_fdmi_reg_hba *)&CtReq->un;
> 4258e98ee3862c James Smart 2015-12-16 3250 /* HBA Identifier */
> 4258e98ee3862c James Smart 2015-12-16 3251 memcpy(&rh->hi.PortName, &phba->pport->fc_sparam.portName,
> 4258e98ee3862c James Smart 2015-12-16 3252 sizeof(struct lpfc_name));
> 2649809cd1b432 James Smart 2022-09-11 3253 size += sizeof(struct lpfc_fdmi_hba_ident);
> 4258e98ee3862c James Smart 2015-12-16 3254
> 4258e98ee3862c James Smart 2015-12-16 3255 if (cmdcode == SLI_MGMT_RHBA) {
> 4258e98ee3862c James Smart 2015-12-16 3256 /* Registered Port List */
> 4258e98ee3862c James Smart 2015-12-16 3257 /* One entry (port) per adapter */
> 4258e98ee3862c James Smart 2015-12-16 @3258 rh->rpl.EntryCnt = cpu_to_be32(1);
> 4cb9e1ddaa145b James Smart 2020-01-27 3259 memcpy(&rh->rpl.pe.PortName,
> 4cb9e1ddaa145b James Smart 2020-01-27 3260 &phba->pport->fc_sparam.portName,
> 4258e98ee3862c James Smart 2015-12-16 3261 sizeof(struct lpfc_name));
> 2649809cd1b432 James Smart 2022-09-11 3262 size += sizeof(struct lpfc_fdmi_reg_port_list);
> 4258e98ee3862c James Smart 2015-12-16 3263 }
> 2649809cd1b432 James Smart 2022-09-11 3264
> 4258e98ee3862c James Smart 2015-12-16 3265 ab = (struct lpfc_fdmi_attr_block *)((uint8_t *)rh + size);
> 4258e98ee3862c James Smart 2015-12-16 3266 ab->EntryCnt = 0;
> 2649809cd1b432 James Smart 2022-09-11 3267 size += FOURBYTES; /* add length of EntryCnt field */
> 2649809cd1b432 James Smart 2022-09-11 3268
> 4258e98ee3862c James Smart 2015-12-16 3269 bit_pos = 0;
> 4258e98ee3862c James Smart 2015-12-16 3270 if (new_mask)
> 4258e98ee3862c James Smart 2015-12-16 3271 mask = new_mask;
> 4258e98ee3862c James Smart 2015-12-16 3272 else
> 4258e98ee3862c James Smart 2015-12-16 3273 mask = vport->fdmi_hba_mask;
> 4258e98ee3862c James Smart 2015-12-16 3274
> 4258e98ee3862c James Smart 2015-12-16 3275 /* Mask will dictate what attributes to build in the request */
> 4258e98ee3862c James Smart 2015-12-16 3276 while (mask) {
> 4258e98ee3862c James Smart 2015-12-16 3277 if (mask & 0x1) {
> 4258e98ee3862c James Smart 2015-12-16 3278 func = lpfc_fdmi_hba_action[bit_pos];
> 045c58c87560b2 James Smart 2022-09-11 3279 addsz = func(vport, ((uint8_t *)rh + size));
> 045c58c87560b2 James Smart 2022-09-11 3280 if (addsz) {
> 4258e98ee3862c James Smart 2015-12-16 3281 ab->EntryCnt++;
> 045c58c87560b2 James Smart 2022-09-11 3282 size += addsz;
> 045c58c87560b2 James Smart 2022-09-11 3283 }
> 2649809cd1b432 James Smart 2022-09-11 3284 /* check if another attribute fits */
> 045c58c87560b2 James Smart 2022-09-11 3285 if ((size + FDMI_MAX_ATTRLEN) >
> 4258e98ee3862c James Smart 2015-12-16 3286 (LPFC_BPL_SIZE - LPFC_CT_PREAMBLE))
> 4258e98ee3862c James Smart 2015-12-16 3287 goto hba_out;
> 4258e98ee3862c James Smart 2015-12-16 3288 }
> 4258e98ee3862c James Smart 2015-12-16 3289 mask = mask >> 1;
> 4258e98ee3862c James Smart 2015-12-16 3290 bit_pos++;
> 4258e98ee3862c James Smart 2015-12-16 3291 }
> 4258e98ee3862c James Smart 2015-12-16 3292 hba_out:
> 4258e98ee3862c James Smart 2015-12-16 3293 ab->EntryCnt = cpu_to_be32(ab->EntryCnt);
> 4258e98ee3862c James Smart 2015-12-16 3294 /* Total size */
> 2649809cd1b432 James Smart 2022-09-11 3295 size += GID_REQUEST_SZ - 4;
> 4258e98ee3862c James Smart 2015-12-16 3296 break;
> 4258e98ee3862c James Smart 2015-12-16 3297
> 4258e98ee3862c James Smart 2015-12-16 3298 case SLI_MGMT_RPRT:
> de3ec318fee323 James Smart 2022-05-05 3299 if (vport->port_type != LPFC_PHYSICAL_PORT) {
> de3ec318fee323 James Smart 2022-05-05 3300 ndlp = lpfc_findnode_did(phba->pport, FDMI_DID);
> de3ec318fee323 James Smart 2022-05-05 3301 if (!ndlp)
> de3ec318fee323 James Smart 2022-05-05 3302 return 0;
> de3ec318fee323 James Smart 2022-05-05 3303 }
> de3ec318fee323 James Smart 2022-05-05 3304 fallthrough;
> 4258e98ee3862c James Smart 2015-12-16 3305 case SLI_MGMT_RPA:
> 2649809cd1b432 James Smart 2022-09-11 3306 /* Store base ptr right after preamble */
> 2649809cd1b432 James Smart 2022-09-11 3307 base = (struct lpfc_fdmi_reg_portattr *)&CtReq->un;
> 2649809cd1b432 James Smart 2022-09-11 3308
> 4258e98ee3862c James Smart 2015-12-16 3309 if (cmdcode == SLI_MGMT_RPRT) {
> 2649809cd1b432 James Smart 2022-09-11 3310 rh = (struct lpfc_fdmi_reg_hba *)base;
> 4258e98ee3862c James Smart 2015-12-16 3311 /* HBA Identifier */
> 4258e98ee3862c James Smart 2015-12-16 3312 memcpy(&rh->hi.PortName,
> 4258e98ee3862c James Smart 2015-12-16 3313 &phba->pport->fc_sparam.portName,
> 4258e98ee3862c James Smart 2015-12-16 3314 sizeof(struct lpfc_name));
> 4258e98ee3862c James Smart 2015-12-16 3315 pab = (struct lpfc_fdmi_reg_portattr *)
> 2649809cd1b432 James Smart 2022-09-11 3316 ((uint8_t *)base + sizeof(struct lpfc_name));
> 2649809cd1b432 James Smart 2022-09-11 3317 size += sizeof(struct lpfc_name);
> 2649809cd1b432 James Smart 2022-09-11 3318 } else {
> 2649809cd1b432 James Smart 2022-09-11 3319 pab = base;
> 4258e98ee3862c James Smart 2015-12-16 3320 }
> 4258e98ee3862c James Smart 2015-12-16 3321
> 4258e98ee3862c James Smart 2015-12-16 3322 memcpy((uint8_t *)&pab->PortName,
> 4258e98ee3862c James Smart 2015-12-16 3323 (uint8_t *)&vport->fc_sparam.portName,
> 4258e98ee3862c James Smart 2015-12-16 3324 sizeof(struct lpfc_name));
> 4258e98ee3862c James Smart 2015-12-16 3325 pab->ab.EntryCnt = 0;
> 2649809cd1b432 James Smart 2022-09-11 3326 /* add length of name and EntryCnt field */
> 2649809cd1b432 James Smart 2022-09-11 3327 size += sizeof(struct lpfc_name) + FOURBYTES;
> 2649809cd1b432 James Smart 2022-09-11 3328
> 4258e98ee3862c James Smart 2015-12-16 3329 bit_pos = 0;
> 4258e98ee3862c James Smart 2015-12-16 3330 if (new_mask)
> 4258e98ee3862c James Smart 2015-12-16 3331 mask = new_mask;
> 4258e98ee3862c James Smart 2015-12-16 3332 else
> 4258e98ee3862c James Smart 2015-12-16 3333 mask = vport->fdmi_port_mask;
> 4258e98ee3862c James Smart 2015-12-16 3334
> 4258e98ee3862c James Smart 2015-12-16 3335 /* Mask will dictate what attributes to build in the request */
> 4258e98ee3862c James Smart 2015-12-16 3336 while (mask) {
> 4258e98ee3862c James Smart 2015-12-16 3337 if (mask & 0x1) {
> 4258e98ee3862c James Smart 2015-12-16 3338 func = lpfc_fdmi_port_action[bit_pos];
> 045c58c87560b2 James Smart 2022-09-11 3339 addsz = func(vport, ((uint8_t *)base + size));
> 045c58c87560b2 James Smart 2022-09-11 3340 if (addsz) {
> 76b2c34aeb947a James Smart 2015-04-07 3341 pab->ab.EntryCnt++;
> 045c58c87560b2 James Smart 2022-09-11 3342 size += addsz;
> 045c58c87560b2 James Smart 2022-09-11 3343 }
> 2649809cd1b432 James Smart 2022-09-11 3344 /* check if another attribute fits */
> 045c58c87560b2 James Smart 2022-09-11 3345 if ((size + FDMI_MAX_ATTRLEN) >
> 4258e98ee3862c James Smart 2015-12-16 3346 (LPFC_BPL_SIZE - LPFC_CT_PREAMBLE))
> 4258e98ee3862c James Smart 2015-12-16 3347 goto port_out;
> 4258e98ee3862c James Smart 2015-12-16 3348 }
> 4258e98ee3862c James Smart 2015-12-16 3349 mask = mask >> 1;
> 4258e98ee3862c James Smart 2015-12-16 3350 bit_pos++;
> 4258e98ee3862c James Smart 2015-12-16 3351 }
> 76b2c34aeb947a James Smart 2015-04-07 3352 port_out:
> 76b2c34aeb947a James Smart 2015-04-07 3353 pab->ab.EntryCnt = cpu_to_be32(pab->ab.EntryCnt);
> 2649809cd1b432 James Smart 2022-09-11 3354 size += GID_REQUEST_SZ - 4;
> dea3101e0a5c89 James Bottomley 2005-04-17 3355 break;
> dea3101e0a5c89 James Bottomley 2005-04-17 3356
> 76b2c34aeb947a James Smart 2015-04-07 3357 case SLI_MGMT_GHAT:
> 76b2c34aeb947a James Smart 2015-04-07 3358 case SLI_MGMT_GRPL:
> 76b2c34aeb947a James Smart 2015-04-07 3359 rsp_size = FC_MAX_NS_RSP;
> df561f6688fef7 Gustavo A. R. Silva 2020-08-23 3360 fallthrough;
> dea3101e0a5c89 James Bottomley 2005-04-17 3361 case SLI_MGMT_DHBA:
> 76b2c34aeb947a James Smart 2015-04-07 3362 case SLI_MGMT_DHAT:
> 2649809cd1b432 James Smart 2022-09-11 3363 pe = (struct lpfc_fdmi_port_entry *)&CtReq->un;
> dea3101e0a5c89 James Bottomley 2005-04-17 3364 memcpy((uint8_t *)&pe->PortName,
> 2e0fef85e098f6 James Smart 2007-06-17 3365 (uint8_t *)&vport->fc_sparam.portName,
> dea3101e0a5c89 James Bottomley 2005-04-17 3366 sizeof(struct lpfc_name));
> dea3101e0a5c89 James Bottomley 2005-04-17 3367 size = GID_REQUEST_SZ - 4 + sizeof(struct lpfc_name);
> dea3101e0a5c89 James Bottomley 2005-04-17 3368 break;
> dea3101e0a5c89 James Bottomley 2005-04-17 3369
> 76b2c34aeb947a James Smart 2015-04-07 3370 case SLI_MGMT_GPAT:
> 76b2c34aeb947a James Smart 2015-04-07 3371 case SLI_MGMT_GPAS:
> 76b2c34aeb947a James Smart 2015-04-07 3372 rsp_size = FC_MAX_NS_RSP;
> df561f6688fef7 Gustavo A. R. Silva 2020-08-23 3373 fallthrough;
> dea3101e0a5c89 James Bottomley 2005-04-17 3374 case SLI_MGMT_DPRT:
> de3ec318fee323 James Smart 2022-05-05 3375 if (vport->port_type != LPFC_PHYSICAL_PORT) {
> de3ec318fee323 James Smart 2022-05-05 3376 ndlp = lpfc_findnode_did(phba->pport, FDMI_DID);
> de3ec318fee323 James Smart 2022-05-05 3377 if (!ndlp)
> de3ec318fee323 James Smart 2022-05-05 3378 return 0;
> de3ec318fee323 James Smart 2022-05-05 3379 }
> de3ec318fee323 James Smart 2022-05-05 3380 fallthrough;
> 76b2c34aeb947a James Smart 2015-04-07 3381 case SLI_MGMT_DPA:
> 2649809cd1b432 James Smart 2022-09-11 3382 pe = (struct lpfc_fdmi_port_entry *)&CtReq->un;
> dea3101e0a5c89 James Bottomley 2005-04-17 3383 memcpy((uint8_t *)&pe->PortName,
> 2e0fef85e098f6 James Smart 2007-06-17 3384 (uint8_t *)&vport->fc_sparam.portName,
> dea3101e0a5c89 James Bottomley 2005-04-17 3385 sizeof(struct lpfc_name));
> dea3101e0a5c89 James Bottomley 2005-04-17 3386 size = GID_REQUEST_SZ - 4 + sizeof(struct lpfc_name);
> dea3101e0a5c89 James Bottomley 2005-04-17 3387 break;
> 76b2c34aeb947a James Smart 2015-04-07 3388 case SLI_MGMT_GRHL:
> 76b2c34aeb947a James Smart 2015-04-07 3389 size = GID_REQUEST_SZ - 4;
> 76b2c34aeb947a James Smart 2015-04-07 3390 break;
> 76b2c34aeb947a James Smart 2015-04-07 3391 default:
> 76b2c34aeb947a James Smart 2015-04-07 3392 lpfc_printf_vlog(vport, KERN_WARNING, LOG_DISCOVERY,
> 76b2c34aeb947a James Smart 2015-04-07 3393 "0298 FDMI cmdcode x%x not supported\n",
> 76b2c34aeb947a James Smart 2015-04-07 3394 cmdcode);
> d8cdd33a66dc8c James Smart 2022-09-11 3395 goto fdmi_cmd_free_rspvirt;
> dea3101e0a5c89 James Bottomley 2005-04-17 3396 }
> 76b2c34aeb947a James Smart 2015-04-07 3397 CtReq->CommandResponse.bits.Size = cpu_to_be16(rsp_size);
> dea3101e0a5c89 James Bottomley 2005-04-17 3398
> d8cdd33a66dc8c James Smart 2022-09-11 3399 bde = (struct ulp_bde64_le *)rsp->virt;
> d8cdd33a66dc8c James Smart 2022-09-11 3400 bde->addr_high = cpu_to_le32(putPaddrHigh(rq->phys));
> d8cdd33a66dc8c James Smart 2022-09-11 3401 bde->addr_low = cpu_to_le32(putPaddrLow(rq->phys));
> d8cdd33a66dc8c James Smart 2022-09-11 3402 bde->type_size = cpu_to_le32(ULP_BDE64_TYPE_BDE_64 <<
> d8cdd33a66dc8c James Smart 2022-09-11 3403 ULP_BDE64_TYPE_SHIFT);
> d8cdd33a66dc8c James Smart 2022-09-11 3404 bde->type_size |= cpu_to_le32(size);
> dea3101e0a5c89 James Bottomley 2005-04-17 3405
> 76b2c34aeb947a James Smart 2015-04-07 3406 /*
> 76b2c34aeb947a James Smart 2015-04-07 3407 * The lpfc_ct_cmd/lpfc_get_req shall increment ndlp reference count
> e47c9093531d34 James Smart 2008-02-08 3408 * to hold ndlp reference for the corresponding callback function.
> e47c9093531d34 James Smart 2008-02-08 3409 */
> d8cdd33a66dc8c James Smart 2022-09-11 3410 if (!lpfc_ct_cmd(vport, rq, rsp, ndlp, cmpl, rsp_size, 0))
> dea3101e0a5c89 James Bottomley 2005-04-17 3411 return 0;
> dea3101e0a5c89 James Bottomley 2005-04-17 3412
> d8cdd33a66dc8c James Smart 2022-09-11 3413 fdmi_cmd_free_rspvirt:
> d8cdd33a66dc8c James Smart 2022-09-11 3414 lpfc_mbuf_free(phba, rsp->virt, rsp->phys);
> d8cdd33a66dc8c James Smart 2022-09-11 3415 fdmi_cmd_free_rsp:
> d8cdd33a66dc8c James Smart 2022-09-11 3416 kfree(rsp);
> d8cdd33a66dc8c James Smart 2022-09-11 3417 fdmi_cmd_free_rqvirt:
> d8cdd33a66dc8c James Smart 2022-09-11 3418 lpfc_mbuf_free(phba, rq->virt, rq->phys);
> d8cdd33a66dc8c James Smart 2022-09-11 3419 fdmi_cmd_free_rq:
> d8cdd33a66dc8c James Smart 2022-09-11 3420 kfree(rq);
> dea3101e0a5c89 James Bottomley 2005-04-17 3421 fdmi_cmd_exit:
> dea3101e0a5c89 James Bottomley 2005-04-17 3422 /* Issue FDMI request failed */
> e8b62011d88d6f James Smart 2007-08-02 3423 lpfc_printf_vlog(vport, KERN_INFO, LOG_DISCOVERY,
> e8b62011d88d6f James Smart 2007-08-02 3424 "0244 Issue FDMI request failed Data: x%x\n",
> e8b62011d88d6f James Smart 2007-08-02 3425 cmdcode);
> dea3101e0a5c89 James Bottomley 2005-04-17 3426 return 1;
> dea3101e0a5c89 James Bottomley 2005-04-17 3427 }
> dea3101e0a5c89 James Bottomley 2005-04-17 3428
>
> :::::: The code at line 3258 was first introduced by commit
> :::::: 4258e98ee3862ca7036654b43c839ab7668043e0 lpfc: Modularize and cleanup FDMI code in driver
>
> :::::: TO: James Smart <james.smart@xxxxxxxxxxxxx>
> :::::: CC: Martin K. Petersen <martin.petersen@xxxxxxxxxx>
>
> --
> 0-DAY CI Kernel Test Service
> https://github.com/intel/lkp-tests/wiki

--
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: smime.p7s
Description: S/MIME Cryptographic Signature