CC: kbuild-...@lists.01.org
CC: linux-ker...@vger.kernel.org
TO: Sreekanth Reddy <sreekanth.re...@broadcom.com>
CC: "Martin K. Petersen" <martin.peter...@oracle.com>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   d567f5db412ed52de0b3b3efca4a451263de6108
commit: b64845a7d4039ab9667bafff9d7bb59365f17c0f scsi: mpi3mr: Detect async 
reset that occurred in firmware
date:   8 weeks ago
:::::: branch date: 6 hours ago
:::::: commit date: 8 weeks ago
config: s390-randconfig-m031-20220214 
(https://download.01.org/0day-ci/archive/20220215/202202150735.enek3kks-...@intel.com/config)
compiler: s390-linux-gcc (GCC) 11.2.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <l...@intel.com>
Reported-by: Dan Carpenter <dan.carpen...@oracle.com>

New smatch warnings:
drivers/scsi/mpi3mr/mpi3mr_fw.c:1209 mpi3mr_issue_reset() error: uninitialized 
symbol 'host_diagnostic'.

Old smatch warnings:
drivers/scsi/mpi3mr/mpi3mr_fw.c:1691 mpi3mr_create_op_reply_q() error: we 
previously assumed 'op_reply_q->q_segments' could be null (see line 1662)
drivers/scsi/mpi3mr/mpi3mr_fw.c:1796 mpi3mr_create_op_req_q() error: we 
previously assumed 'op_req_q->q_segments' could be null (see line 1769)

vim +/host_diagnostic +1209 drivers/scsi/mpi3mr/mpi3mr_fw.c

824a156633dfdb Kashyap Desai   2021-05-20  1167  
824a156633dfdb Kashyap Desai   2021-05-20  1168  /**
824a156633dfdb Kashyap Desai   2021-05-20  1169   * mpi3mr_issue_reset - Issue 
reset to the controller
824a156633dfdb Kashyap Desai   2021-05-20  1170   * @mrioc: Adapter reference
824a156633dfdb Kashyap Desai   2021-05-20  1171   * @reset_type: Reset type
824a156633dfdb Kashyap Desai   2021-05-20  1172   * @reset_reason: Reset reason 
code
824a156633dfdb Kashyap Desai   2021-05-20  1173   *
f061178e076210 Kashyap Desai   2021-05-20  1174   * Unlock the host diagnostic 
registers and write the specific
f061178e076210 Kashyap Desai   2021-05-20  1175   * reset type to that, wait 
for reset acknowledgment from the
f061178e076210 Kashyap Desai   2021-05-20  1176   * controller, if the reset is 
not successful retry for the
f061178e076210 Kashyap Desai   2021-05-20  1177   * predefined number of times.
824a156633dfdb Kashyap Desai   2021-05-20  1178   *
824a156633dfdb Kashyap Desai   2021-05-20  1179   * Return: 0 on success, 
non-zero on failure.
824a156633dfdb Kashyap Desai   2021-05-20  1180   */
824a156633dfdb Kashyap Desai   2021-05-20  1181  static int 
mpi3mr_issue_reset(struct mpi3mr_ioc *mrioc, u16 reset_type,
824a156633dfdb Kashyap Desai   2021-05-20  1182         u32 reset_reason)
824a156633dfdb Kashyap Desai   2021-05-20  1183  {
f061178e076210 Kashyap Desai   2021-05-20  1184         int retval = -1;
b64845a7d4039a Sreekanth Reddy 2021-12-20  1185         u8 unlock_retry_count = 
0;
b64845a7d4039a Sreekanth Reddy 2021-12-20  1186         u32 host_diagnostic, 
ioc_status, ioc_config;
b64845a7d4039a Sreekanth Reddy 2021-12-20  1187         u32 timeout = 
MPI3MR_RESET_ACK_TIMEOUT * 10;
f061178e076210 Kashyap Desai   2021-05-20  1188  
f061178e076210 Kashyap Desai   2021-05-20  1189         if ((reset_type != 
MPI3_SYSIF_HOST_DIAG_RESET_ACTION_SOFT_RESET) &&
f061178e076210 Kashyap Desai   2021-05-20  1190             (reset_type != 
MPI3_SYSIF_HOST_DIAG_RESET_ACTION_DIAG_FAULT))
b64845a7d4039a Sreekanth Reddy 2021-12-20  1191                 return retval;
f061178e076210 Kashyap Desai   2021-05-20  1192         if 
(mrioc->unrecoverable)
b64845a7d4039a Sreekanth Reddy 2021-12-20  1193                 return retval;
b64845a7d4039a Sreekanth Reddy 2021-12-20  1194         if (reset_reason == 
MPI3MR_RESET_FROM_FIRMWARE) {
b64845a7d4039a Sreekanth Reddy 2021-12-20  1195                 retval = 0;
b64845a7d4039a Sreekanth Reddy 2021-12-20  1196                 return retval;
b64845a7d4039a Sreekanth Reddy 2021-12-20  1197         }
b64845a7d4039a Sreekanth Reddy 2021-12-20  1198  
b64845a7d4039a Sreekanth Reddy 2021-12-20  1199         ioc_info(mrioc, "%s 
reset due to %s(0x%x)\n",
b64845a7d4039a Sreekanth Reddy 2021-12-20  1200             
mpi3mr_reset_type_name(reset_type),
b64845a7d4039a Sreekanth Reddy 2021-12-20  1201             
mpi3mr_reset_rc_name(reset_reason), reset_reason);
b64845a7d4039a Sreekanth Reddy 2021-12-20  1202  
f061178e076210 Kashyap Desai   2021-05-20  1203         
mpi3mr_clear_reset_history(mrioc);
f061178e076210 Kashyap Desai   2021-05-20  1204         do {
f061178e076210 Kashyap Desai   2021-05-20  1205                 ioc_info(mrioc,
f061178e076210 Kashyap Desai   2021-05-20  1206                     "Write 
magic sequence to unlock host diag register (retry=%d)\n",
f061178e076210 Kashyap Desai   2021-05-20  1207                     
++unlock_retry_count);
f061178e076210 Kashyap Desai   2021-05-20  1208                 if 
(unlock_retry_count >= MPI3MR_HOSTDIAG_UNLOCK_RETRY_COUNT) {
b64845a7d4039a Sreekanth Reddy 2021-12-20 @1209                         
ioc_err(mrioc,
b64845a7d4039a Sreekanth Reddy 2021-12-20  1210                             "%s 
reset failed due to unlock failure, host_diagnostic(0x%08x)\n",
b64845a7d4039a Sreekanth Reddy 2021-12-20  1211                             
mpi3mr_reset_type_name(reset_type),
b64845a7d4039a Sreekanth Reddy 2021-12-20  1212                             
host_diagnostic);
f061178e076210 Kashyap Desai   2021-05-20  1213                         
mrioc->unrecoverable = 1;
b64845a7d4039a Sreekanth Reddy 2021-12-20  1214                         return 
retval;
f061178e076210 Kashyap Desai   2021-05-20  1215                 }
f061178e076210 Kashyap Desai   2021-05-20  1216  
f061178e076210 Kashyap Desai   2021-05-20  1217                 
writel(MPI3_SYSIF_WRITE_SEQUENCE_KEY_VALUE_FLUSH,
f061178e076210 Kashyap Desai   2021-05-20  1218                     
&mrioc->sysif_regs->write_sequence);
f061178e076210 Kashyap Desai   2021-05-20  1219                 
writel(MPI3_SYSIF_WRITE_SEQUENCE_KEY_VALUE_1ST,
f061178e076210 Kashyap Desai   2021-05-20  1220                     
&mrioc->sysif_regs->write_sequence);
f061178e076210 Kashyap Desai   2021-05-20  1221                 
writel(MPI3_SYSIF_WRITE_SEQUENCE_KEY_VALUE_2ND,
f061178e076210 Kashyap Desai   2021-05-20  1222                     
&mrioc->sysif_regs->write_sequence);
f061178e076210 Kashyap Desai   2021-05-20  1223                 
writel(MPI3_SYSIF_WRITE_SEQUENCE_KEY_VALUE_3RD,
f061178e076210 Kashyap Desai   2021-05-20  1224                     
&mrioc->sysif_regs->write_sequence);
f061178e076210 Kashyap Desai   2021-05-20  1225                 
writel(MPI3_SYSIF_WRITE_SEQUENCE_KEY_VALUE_4TH,
f061178e076210 Kashyap Desai   2021-05-20  1226                     
&mrioc->sysif_regs->write_sequence);
f061178e076210 Kashyap Desai   2021-05-20  1227                 
writel(MPI3_SYSIF_WRITE_SEQUENCE_KEY_VALUE_5TH,
f061178e076210 Kashyap Desai   2021-05-20  1228                     
&mrioc->sysif_regs->write_sequence);
f061178e076210 Kashyap Desai   2021-05-20  1229                 
writel(MPI3_SYSIF_WRITE_SEQUENCE_KEY_VALUE_6TH,
f061178e076210 Kashyap Desai   2021-05-20  1230                     
&mrioc->sysif_regs->write_sequence);
f061178e076210 Kashyap Desai   2021-05-20  1231                 
usleep_range(1000, 1100);
f061178e076210 Kashyap Desai   2021-05-20  1232                 host_diagnostic 
= readl(&mrioc->sysif_regs->host_diagnostic);
f061178e076210 Kashyap Desai   2021-05-20  1233                 ioc_info(mrioc,
f061178e076210 Kashyap Desai   2021-05-20  1234                     "wrote 
magic sequence: retry_count(%d), host_diagnostic(0x%08x)\n",
f061178e076210 Kashyap Desai   2021-05-20  1235                     
unlock_retry_count, host_diagnostic);
f061178e076210 Kashyap Desai   2021-05-20  1236         } while 
(!(host_diagnostic & MPI3_SYSIF_HOST_DIAG_DIAG_WRITE_ENABLE));
f061178e076210 Kashyap Desai   2021-05-20  1237  
f061178e076210 Kashyap Desai   2021-05-20  1238         writel(reset_reason, 
&mrioc->sysif_regs->scratchpad[0]);
f061178e076210 Kashyap Desai   2021-05-20  1239         writel(host_diagnostic 
| reset_type,
f061178e076210 Kashyap Desai   2021-05-20  1240             
&mrioc->sysif_regs->host_diagnostic);
b64845a7d4039a Sreekanth Reddy 2021-12-20  1241         switch (reset_type) {
b64845a7d4039a Sreekanth Reddy 2021-12-20  1242         case 
MPI3_SYSIF_HOST_DIAG_RESET_ACTION_SOFT_RESET:
f061178e076210 Kashyap Desai   2021-05-20  1243                 do {
f061178e076210 Kashyap Desai   2021-05-20  1244                         
ioc_status = readl(&mrioc->sysif_regs->ioc_status);
f061178e076210 Kashyap Desai   2021-05-20  1245                         
ioc_config =
f061178e076210 Kashyap Desai   2021-05-20  1246                             
readl(&mrioc->sysif_regs->ioc_configuration);
b64845a7d4039a Sreekanth Reddy 2021-12-20  1247                         if 
((ioc_status & MPI3_SYSIF_IOC_STATUS_RESET_HISTORY)
b64845a7d4039a Sreekanth Reddy 2021-12-20  1248                             && 
mpi3mr_soft_reset_success(ioc_status, ioc_config)
b64845a7d4039a Sreekanth Reddy 2021-12-20  1249                             ) {
b64845a7d4039a Sreekanth Reddy 2021-12-20  1250                                 
mpi3mr_clear_reset_history(mrioc);
f061178e076210 Kashyap Desai   2021-05-20  1251                                 
retval = 0;
f061178e076210 Kashyap Desai   2021-05-20  1252                                 
break;
f061178e076210 Kashyap Desai   2021-05-20  1253                         }
f061178e076210 Kashyap Desai   2021-05-20  1254                         
msleep(100);
f061178e076210 Kashyap Desai   2021-05-20  1255                 } while 
(--timeout);
b64845a7d4039a Sreekanth Reddy 2021-12-20  1256                 
mpi3mr_print_fault_info(mrioc);
b64845a7d4039a Sreekanth Reddy 2021-12-20  1257                 break;
b64845a7d4039a Sreekanth Reddy 2021-12-20  1258         case 
MPI3_SYSIF_HOST_DIAG_RESET_ACTION_DIAG_FAULT:
f061178e076210 Kashyap Desai   2021-05-20  1259                 do {
f061178e076210 Kashyap Desai   2021-05-20  1260                         
ioc_status = readl(&mrioc->sysif_regs->ioc_status);
f061178e076210 Kashyap Desai   2021-05-20  1261                         if 
(mpi3mr_diagfault_success(mrioc, ioc_status)) {
f061178e076210 Kashyap Desai   2021-05-20  1262                                 
retval = 0;
f061178e076210 Kashyap Desai   2021-05-20  1263                                 
break;
f061178e076210 Kashyap Desai   2021-05-20  1264                         }
f061178e076210 Kashyap Desai   2021-05-20  1265                         
msleep(100);
f061178e076210 Kashyap Desai   2021-05-20  1266                 } while 
(--timeout);
b64845a7d4039a Sreekanth Reddy 2021-12-20  1267                 break;
b64845a7d4039a Sreekanth Reddy 2021-12-20  1268         default:
b64845a7d4039a Sreekanth Reddy 2021-12-20  1269                 break;
b64845a7d4039a Sreekanth Reddy 2021-12-20  1270         }
b64845a7d4039a Sreekanth Reddy 2021-12-20  1271  
f061178e076210 Kashyap Desai   2021-05-20  1272         
writel(MPI3_SYSIF_WRITE_SEQUENCE_KEY_VALUE_2ND,
f061178e076210 Kashyap Desai   2021-05-20  1273             
&mrioc->sysif_regs->write_sequence);
f061178e076210 Kashyap Desai   2021-05-20  1274  
f061178e076210 Kashyap Desai   2021-05-20  1275         ioc_config = 
readl(&mrioc->sysif_regs->ioc_configuration);
b64845a7d4039a Sreekanth Reddy 2021-12-20  1276         ioc_status = 
readl(&mrioc->sysif_regs->ioc_status);
f061178e076210 Kashyap Desai   2021-05-20  1277         ioc_info(mrioc,
b64845a7d4039a Sreekanth Reddy 2021-12-20  1278             
"ioc_status/ioc_onfig after %s reset is (0x%x)/(0x%x)\n",
f061178e076210 Kashyap Desai   2021-05-20  1279             
(!retval)?"successful":"failed", ioc_status,
f061178e076210 Kashyap Desai   2021-05-20  1280             ioc_config);
b64845a7d4039a Sreekanth Reddy 2021-12-20  1281         if (retval)
b64845a7d4039a Sreekanth Reddy 2021-12-20  1282                 
mrioc->unrecoverable = 1;
f061178e076210 Kashyap Desai   2021-05-20  1283         return retval;
824a156633dfdb Kashyap Desai   2021-05-20  1284  }
824a156633dfdb Kashyap Desai   2021-05-20  1285  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org
_______________________________________________
kbuild mailing list -- kbuild@lists.01.org
To unsubscribe send an email to kbuild-le...@lists.01.org

Reply via email to