Message ID | 1516365462-14708-7-git-send-email-suganath-prabu.subramani@broadcom.com (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
Hi Suganath, I love your patch! Perhaps something to improve: [auto build test WARNING on scsi/for-next] [also build test WARNING on v4.15-rc8 next-20180119] [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/Suganath-Prabu-S/mpt3sas-Add-PCI-device-ID-for-Andromeda/20180121-002454 base: https://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git for-next reproduce: # apt-get install sparse make ARCH=x86_64 allmodconfig make C=1 CF=-D__CHECK_ENDIAN__ sparse warnings: (new ones prefixed by >>) drivers/scsi/mpt3sas/mpt3sas_base.c:148:35: sparse: cast removes address space of expression drivers/scsi/mpt3sas/mpt3sas_base.c:151:16: sparse: cast from restricted __le32 drivers/scsi/mpt3sas/mpt3sas_base.c:151:16: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned int val @@ got restrunsigned int val @@ drivers/scsi/mpt3sas/mpt3sas_base.c:151:16: expected unsigned int val drivers/scsi/mpt3sas/mpt3sas_base.c:151:16: got restricted __le32 <noident> drivers/scsi/mpt3sas/mpt3sas_base.c:151:36: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile @@ got @@ drivers/scsi/mpt3sas/mpt3sas_base.c:151:36: expected void volatile drivers/scsi/mpt3sas/mpt3sas_base.c:151:36: got void drivers/scsi/mpt3sas/mpt3sas_base.c:169:24: sparse: cast from restricted __le32 drivers/scsi/mpt3sas/mpt3sas_base.c:169:24: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned int val @@ got restrunsigned int val @@ drivers/scsi/mpt3sas/mpt3sas_base.c:169:24: expected unsigned int val drivers/scsi/mpt3sas/mpt3sas_base.c:169:24: got restricted __le32 <noident> drivers/scsi/mpt3sas/mpt3sas_base.c:169:64: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile @@ got @@ drivers/scsi/mpt3sas/mpt3sas_base.c:169:64: expected void volatile drivers/scsi/mpt3sas/mpt3sas_base.c:169:64: got void COPYING CREDITS Documentation Kbuild Kconfig MAINTAINERS Makefile README arch block certs crypto drivers firmware fs include init ipc kernel lib mm net samples scripts security sound tools usr virt drivers/scsi/mpt3sas/mpt3sas_base.c:186:24: sparse: cast from restricted __le32 drivers/scsi/mpt3sas/mpt3sas_base.c:186:24: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned int val @@ got restrunsigned int val @@ drivers/scsi/mpt3sas/mpt3sas_base.c:186:24: expected unsigned int val drivers/scsi/mpt3sas/mpt3sas_base.c:186:24: got restricted __le32 <noident> drivers/scsi/mpt3sas/mpt3sas_base.c:186:64: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile @@ got @@ drivers/scsi/mpt3sas/mpt3sas_base.c:186:64: expected void volatile drivers/scsi/mpt3sas/mpt3sas_base.c:186:64: got void COPYING CREDITS Documentation Kbuild Kconfig MAINTAINERS Makefile README arch block certs crypto drivers firmware fs include init ipc kernel lib mm net samples scripts security sound tools usr virt drivers/scsi/mpt3sas/mpt3sas_base.c:206:24: sparse: cast removes address space of expression drivers/scsi/mpt3sas/mpt3sas_base.c:359:24: sparse: undefined identifier 'mpt3sas_scsih_scsi_lookup_get' drivers/scsi/mpt3sas/mpt3sas_base.c:1208:42: sparse: incorrect type in assignment (different base types) @@ expected unsigned short Event @@ got short Event @@ drivers/scsi/mpt3sas/mpt3sas_base.c:1209:49: sparse: incorrect type in assignment (different base types) @@ expected unsigned int EventContext @@ got ed int EventContext @@ >> drivers/scsi/mpt3sas/mpt3sas_base.c:1404:75: sparse: incorrect type in argument 2 (different base types) @@ expected restricted __le32 reply @@ got unsigned int [unsrestricted __le32 reply @@ drivers/scsi/mpt3sas/mpt3sas_base.c:1430:64: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile @@ got oid volatile @@ drivers/scsi/mpt3sas/mpt3sas_base.c:1479:52: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile @@ got oid volatile @@ drivers/scsi/mpt3sas/mpt3sas_base.c:3011:32: sparse: cast removes address space of expression drivers/scsi/mpt3sas/mpt3sas_base.c:3359:26: sparse: cast removes address space of expression drivers/scsi/mpt3sas/mpt3sas_base.c:3303:26: sparse: incorrect type in initializer (different base types) @@ expected unsigned long long data_out @@ got g long data_out @@ drivers/scsi/mpt3sas/mpt3sas_base.c:3326:16: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned long val @@ got restunsigned long val @@ drivers/scsi/mpt3sas/mpt3sas_base.c:3326:16: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned long val @@ got restunsigned long val @@ drivers/scsi/mpt3sas/mpt3sas_base.c:3443:34: sparse: cast removes address space of expression drivers/scsi/mpt3sas/mpt3sas_base.c:3303:26: sparse: incorrect type in initializer (different base types) @@ expected unsigned long long data_out @@ got g long data_out @@ drivers/scsi/mpt3sas/mpt3sas_base.c:3326:16: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned long val @@ got restunsigned long val @@ drivers/scsi/mpt3sas/mpt3sas_base.c:3326:16: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned long val @@ got restunsigned long val @@ drivers/scsi/mpt3sas/mpt3sas_base.c:3512:34: sparse: cast removes address space of expression drivers/scsi/mpt3sas/mpt3sas_base.c:3303:26: sparse: incorrect type in initializer (different base types) @@ expected unsigned long long data_out @@ got g long data_out @@ drivers/scsi/mpt3sas/mpt3sas_base.c:3326:16: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned long val @@ got restunsigned long val @@ drivers/scsi/mpt3sas/mpt3sas_base.c:3552:16: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned int val @@ got restrunsigned int val @@ drivers/scsi/mpt3sas/mpt3sas_base.c:3574:16: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned int val @@ got restrunsigned int val @@ drivers/scsi/mpt3sas/mpt3sas_base.c:3597:16: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned int val @@ got restrunsigned int val @@ drivers/scsi/mpt3sas/mpt3sas_base.c:3618:16: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned int val @@ got restrunsigned int val @@ drivers/scsi/mpt3sas/mpt3sas_base.c:3639:16: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned int val @@ got restrunsigned int val @@ drivers/scsi/mpt3sas/mpt3sas_base.c:5091:24: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned int val @@ got restrunsigned int val @@ drivers/scsi/mpt3sas/mpt3sas_base.c:5112:20: sparse: cast to restricted __le16 drivers/scsi/mpt3sas/mpt3sas_base.c:5121:20: sparse: cast to restricted __le16 drivers/scsi/mpt3sas/mpt3sas_base.c:5135:36: sparse: cast to restricted __le16 drivers/scsi/mpt3sas/mpt3sas_base.c:6274:59: sparse: incorrect type in argument 2 (different base types) @@ expected restricted __le32 reply @@ got unsigned int [unsrestricted __le32 reply @@ drivers/scsi/mpt3sas/mpt3sas_base.c:6319:55: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile @@ got oid volatile @@ drivers/scsi/mpt3sas/mpt3sas_base.c:359:53: sparse: call with no type! drivers/scsi/mpt3sas/mpt3sas_base.c: In function '_clone_sg_entries': drivers/scsi/mpt3sas/mpt3sas_base.c:359:10: error: implicit declaration of function 'mpt3sas_scsih_scsi_lookup_get'; did you mean scmd = mpt3sas_scsih_scsi_lookup_get(ioc, smid); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ mpt3sas_scsih_issue_locked_tm drivers/scsi/mpt3sas/mpt3sas_base.c:359:8: warning: assignment makes pointer from integer without a cast scmd = mpt3sas_scsih_scsi_lookup_get(ioc, smid); ^ cc1: some warnings being treated as errors vim +1404 drivers/scsi/mpt3sas/mpt3sas_base.c 1311 1312 /** 1313 * _base_interrupt - MPT adapter (IOC) specific interrupt handler. 1314 * @irq: irq number (not used) 1315 * @bus_id: bus identifier cookie == pointer to MPT_ADAPTER structure 1316 * @r: pt_regs pointer (not used) 1317 * 1318 * Return IRQ_HANDLE if processed, else IRQ_NONE. 1319 */ 1320 static irqreturn_t 1321 _base_interrupt(int irq, void *bus_id) 1322 { 1323 struct adapter_reply_queue *reply_q = bus_id; 1324 union reply_descriptor rd; 1325 u32 completed_cmds; 1326 u8 request_desript_type; 1327 u16 smid; 1328 u8 cb_idx; 1329 u32 reply; 1330 u8 msix_index = reply_q->msix_index; 1331 struct MPT3SAS_ADAPTER *ioc = reply_q->ioc; 1332 Mpi2ReplyDescriptorsUnion_t *rpf; 1333 u8 rc; 1334 1335 if (ioc->mask_interrupts) 1336 return IRQ_NONE; 1337 1338 if (!atomic_add_unless(&reply_q->busy, 1, 1)) 1339 return IRQ_NONE; 1340 1341 rpf = &reply_q->reply_post_free[reply_q->reply_post_host_index]; 1342 request_desript_type = rpf->Default.ReplyFlags 1343 & MPI2_RPY_DESCRIPT_FLAGS_TYPE_MASK; 1344 if (request_desript_type == MPI2_RPY_DESCRIPT_FLAGS_UNUSED) { 1345 atomic_dec(&reply_q->busy); 1346 return IRQ_NONE; 1347 } 1348 1349 completed_cmds = 0; 1350 cb_idx = 0xFF; 1351 do { 1352 rd.word = le64_to_cpu(rpf->Words); 1353 if (rd.u.low == UINT_MAX || rd.u.high == UINT_MAX) 1354 goto out; 1355 reply = 0; 1356 smid = le16_to_cpu(rpf->Default.DescriptorTypeDependent1); 1357 if (request_desript_type == 1358 MPI25_RPY_DESCRIPT_FLAGS_FAST_PATH_SCSI_IO_SUCCESS || 1359 request_desript_type == 1360 MPI2_RPY_DESCRIPT_FLAGS_SCSI_IO_SUCCESS || 1361 request_desript_type == 1362 MPI26_RPY_DESCRIPT_FLAGS_PCIE_ENCAPSULATED_SUCCESS) { 1363 cb_idx = _base_get_cb_idx(ioc, smid); 1364 if ((likely(cb_idx < MPT_MAX_CALLBACKS)) && 1365 (likely(mpt_callbacks[cb_idx] != NULL))) { 1366 rc = mpt_callbacks[cb_idx](ioc, smid, 1367 msix_index, 0); 1368 if (rc) 1369 mpt3sas_base_free_smid(ioc, smid); 1370 } 1371 } else if (request_desript_type == 1372 MPI2_RPY_DESCRIPT_FLAGS_ADDRESS_REPLY) { 1373 reply = le32_to_cpu( 1374 rpf->AddressReply.ReplyFrameAddress); 1375 if (reply > ioc->reply_dma_max_address || 1376 reply < ioc->reply_dma_min_address) 1377 reply = 0; 1378 if (smid) { 1379 cb_idx = _base_get_cb_idx(ioc, smid); 1380 if ((likely(cb_idx < MPT_MAX_CALLBACKS)) && 1381 (likely(mpt_callbacks[cb_idx] != NULL))) { 1382 rc = mpt_callbacks[cb_idx](ioc, smid, 1383 msix_index, reply); 1384 if (reply) 1385 _base_display_reply_info(ioc, 1386 smid, msix_index, reply); 1387 if (rc) 1388 mpt3sas_base_free_smid(ioc, 1389 smid); 1390 } 1391 } else { 1392 _base_async_event(ioc, msix_index, reply); 1393 } 1394 1395 /* reply free queue handling */ 1396 if (reply) { 1397 ioc->reply_free_host_index = 1398 (ioc->reply_free_host_index == 1399 (ioc->reply_free_queue_depth - 1)) ? 1400 0 : ioc->reply_free_host_index + 1; 1401 ioc->reply_free[ioc->reply_free_host_index] = 1402 cpu_to_le32(reply); 1403 if (ioc->is_mcpu_endpoint) > 1404 _base_clone_reply_to_sys_mem(ioc, reply, 1405 ioc->reply_free_host_index); 1406 writel(ioc->reply_free_host_index, 1407 &ioc->chip->ReplyFreeHostIndex); 1408 } 1409 } 1410 1411 rpf->Words = cpu_to_le64(ULLONG_MAX); 1412 reply_q->reply_post_host_index = 1413 (reply_q->reply_post_host_index == 1414 (ioc->reply_post_queue_depth - 1)) ? 0 : 1415 reply_q->reply_post_host_index + 1; 1416 request_desript_type = 1417 reply_q->reply_post_free[reply_q->reply_post_host_index]. 1418 Default.ReplyFlags & MPI2_RPY_DESCRIPT_FLAGS_TYPE_MASK; 1419 completed_cmds++; 1420 /* Update the reply post host index after continuously 1421 * processing the threshold number of Reply Descriptors. 1422 * So that FW can find enough entries to post the Reply 1423 * Descriptors in the reply descriptor post queue. 1424 */ 1425 if (completed_cmds > ioc->hba_queue_depth/3) { 1426 if (ioc->combined_reply_queue) { 1427 writel(reply_q->reply_post_host_index | 1428 ((msix_index & 7) << 1429 MPI2_RPHI_MSIX_INDEX_SHIFT), 1430 ioc->replyPostRegisterIndex[msix_index/8]); 1431 } else { 1432 writel(reply_q->reply_post_host_index | 1433 (msix_index << 1434 MPI2_RPHI_MSIX_INDEX_SHIFT), 1435 &ioc->chip->ReplyPostHostIndex); 1436 } 1437 completed_cmds = 1; 1438 } 1439 if (request_desript_type == MPI2_RPY_DESCRIPT_FLAGS_UNUSED) 1440 goto out; 1441 if (!reply_q->reply_post_host_index) 1442 rpf = reply_q->reply_post_free; 1443 else 1444 rpf++; 1445 } while (1); 1446 1447 out: 1448 1449 if (!completed_cmds) { 1450 atomic_dec(&reply_q->busy); 1451 return IRQ_NONE; 1452 } 1453 1454 if (ioc->is_warpdrive) { 1455 writel(reply_q->reply_post_host_index, 1456 ioc->reply_post_host_index[msix_index]); 1457 atomic_dec(&reply_q->busy); 1458 return IRQ_HANDLED; 1459 } 1460 1461 /* Update Reply Post Host Index. 1462 * For those HBA's which support combined reply queue feature 1463 * 1. Get the correct Supplemental Reply Post Host Index Register. 1464 * i.e. (msix_index / 8)th entry from Supplemental Reply Post Host 1465 * Index Register address bank i.e replyPostRegisterIndex[], 1466 * 2. Then update this register with new reply host index value 1467 * in ReplyPostIndex field and the MSIxIndex field with 1468 * msix_index value reduced to a value between 0 and 7, 1469 * using a modulo 8 operation. Since each Supplemental Reply Post 1470 * Host Index Register supports 8 MSI-X vectors. 1471 * 1472 * For other HBA's just update the Reply Post Host Index register with 1473 * new reply host index value in ReplyPostIndex Field and msix_index 1474 * value in MSIxIndex field. 1475 */ 1476 if (ioc->combined_reply_queue) 1477 writel(reply_q->reply_post_host_index | ((msix_index & 7) << 1478 MPI2_RPHI_MSIX_INDEX_SHIFT), 1479 ioc->replyPostRegisterIndex[msix_index/8]); 1480 else 1481 writel(reply_q->reply_post_host_index | (msix_index << 1482 MPI2_RPHI_MSIX_INDEX_SHIFT), 1483 &ioc->chip->ReplyPostHostIndex); 1484 atomic_dec(&reply_q->busy); 1485 return IRQ_HANDLED; 1486 } 1487 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c index 0248058..fa13916 100644 --- a/drivers/scsi/mpt3sas/mpt3sas_base.c +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c @@ -126,6 +126,32 @@ module_param_call(mpt3sas_fwfault_debug, _scsih_set_fwfault_debug, param_get_int, &mpt3sas_fwfault_debug, 0644); /** + * _base_clone_reply_to_sys_mem - copies reply to reply free iomem + * in BAR0 space. + * + * @ioc: per adapter object + * @reply: reply message frame(lower 32bit addr) + * @index: System request message index. + * + * @Returns - Nothing + */ +static void +_base_clone_reply_to_sys_mem(struct MPT3SAS_ADAPTER *ioc, U32 reply, + u32 index) +{ + /* + * 256 is offset within sys register. + * 256 offset MPI frame starts. Max MPI frame supported is 32. + * 32 * 128 = 4K. From here, Clone of reply free for mcpu starts + */ + u16 cmd_credit = ioc->facts.RequestCredit + 1; + void *reply_free_iomem = (void *)ioc->chip + MPI_FRAME_START_OFFSET + + (cmd_credit * ioc->request_sz) + (index * sizeof(u32)); + + writel(cpu_to_le32(reply), reply_free_iomem); +} + +/** * _base_clone_mpi_to_sys_mem - Writes/copies MPI frames * to system/BAR0 region. * @@ -1396,6 +1422,9 @@ _base_interrupt(int irq, void *bus_id) 0 : ioc->reply_free_host_index + 1; ioc->reply_free[ioc->reply_free_host_index] = cpu_to_le32(reply); + if (ioc->is_mcpu_endpoint) + _base_clone_reply_to_sys_mem(ioc, reply, + ioc->reply_free_host_index); writel(ioc->reply_free_host_index, &ioc->chip->ReplyFreeHostIndex); } @@ -6244,8 +6273,11 @@ _base_make_ioc_operational(struct MPT3SAS_ADAPTER *ioc) /* initialize Reply Free Queue */ for (i = 0, reply_address = (u32)ioc->reply_dma ; i < ioc->reply_free_queue_depth ; i++, reply_address += - ioc->reply_sz) + ioc->reply_sz) { ioc->reply_free[i] = cpu_to_le32(reply_address); + if (ioc->is_mcpu_endpoint) + _base_clone_reply_to_sys_mem(ioc, reply_address, i); + } /* initialize reply queues */ if (ioc->is_driver_loading)
If the posted request has an error of any type, the IOC writes a Reply message into a host-based system reply message frame. This functions clone it in the BAR0 mapped region. Signed-off-by: Suganath Prabu S <suganath-prabu.subramani@broadcom.com> --- drivers/scsi/mpt3sas/mpt3sas_base.c | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-)