tree: https://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git for-next head: 46ded13dd3821d96fee65f0cef4bd8f0184607ab commit: e8a04ec2098f2880995a9d8aa6580e6a7cb04824 [88/112] scsi: qlogicfas408: make Ml_pcmd() a void function config: x86_64-randconfig-a014-20210526 (attached as .config) compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 99155e913e9bad5f7f8a247f8bb3a3ff3da74af1) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install x86_64 cross compiling tool for clang build # apt-get install binutils-x86-64-linux-gnu # https://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git/commit/?id=e8a04ec2098f2880995a9d8aa6580e6a7cb04824 git remote add mkp-scsi https://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git git fetch --no-tags mkp-scsi for-next git checkout e8a04ec2098f2880995a9d8aa6580e6a7cb04824 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot All warnings (new ones prefixed by >>): >> drivers/scsi/qlogicfas408.c:410:21: warning: variable 'result' is uninitialized when used here [-Wuninitialized] set_host_byte(cmd, result); ^~~~~~ drivers/scsi/qlogicfas408.c:263:21: note: initialize the variable 'result' to silence this warning unsigned int result; /* ultimate return result */ ^ = 0 1 warning generated. vim +/result +410 drivers/scsi/qlogicfas408.c 254 255 /* 256 * Process scsi command - usually after interrupt 257 */ 258 259 static void ql_pcmd(struct scsi_cmnd *cmd) 260 { 261 unsigned int i, j; 262 unsigned long k; 263 unsigned int result; /* ultimate return result */ 264 unsigned int status; /* scsi returned status */ 265 unsigned int message; /* scsi returned message */ 266 unsigned int phase; /* recorded scsi phase */ 267 unsigned int reqlen; /* total length of transfer */ 268 char *buf; 269 struct qlogicfas408_priv *priv = get_priv_by_cmd(cmd); 270 int qbase = priv->qbase; 271 int int_type = priv->int_type; 272 273 rtrc(1) 274 j = inb(qbase + 6); 275 i = inb(qbase + 5); 276 if (i == 0x20) { 277 set_host_byte(cmd, DID_NO_CONNECT); 278 return; 279 } 280 i |= inb(qbase + 5); /* the 0x10 bit can be set after the 0x08 */ 281 if (i != 0x18) { 282 printk(KERN_ERR "Ql:Bad Interrupt status:%02x\n", i); 283 ql_zap(priv); 284 set_host_byte(cmd, DID_BAD_INTR); 285 return; 286 } 287 j &= 7; /* j = inb( qbase + 7 ) >> 5; */ 288 289 /* correct status is supposed to be step 4 */ 290 /* it sometimes returns step 3 but with 0 bytes left to send */ 291 /* We can try stuffing the FIFO with the max each time, but we will get a 292 sequence of 3 if any bytes are left (but we do flush the FIFO anyway */ 293 294 if (j != 3 && j != 4) { 295 printk(KERN_ERR "Ql:Bad sequence for command %d, int %02X, cmdleft = %d\n", 296 j, i, inb(qbase + 7) & 0x1f); 297 ql_zap(priv); 298 set_host_byte (cmd, DID_ERROR); 299 return; 300 } 301 302 if (inb(qbase + 7) & 0x1f) /* if some bytes in fifo */ 303 outb(1, qbase + 3); /* clear fifo */ 304 /* note that request_bufflen is the total xfer size when sg is used */ 305 reqlen = scsi_bufflen(cmd); 306 /* note that it won't work if transfers > 16M are requested */ 307 if (reqlen && !((phase = inb(qbase + 4)) & 6)) { /* data phase */ 308 struct scatterlist *sg; 309 rtrc(2) 310 outb(reqlen, qbase); /* low-mid xfer cnt */ 311 outb(reqlen >> 8, qbase + 1); /* low-mid xfer cnt */ 312 outb(reqlen >> 16, qbase + 0xe); /* high xfer cnt */ 313 outb(0x90, qbase + 3); /* command do xfer */ 314 /* PIO pseudo DMA to buffer or sglist */ 315 REG1; 316 317 scsi_for_each_sg(cmd, sg, scsi_sg_count(cmd), i) { 318 if (priv->qabort) { 319 REG0; 320 set_host_byte(cmd, 321 priv->qabort == 1 ? 322 DID_ABORT : DID_RESET); 323 } 324 buf = sg_virt(sg); 325 if (ql_pdma(priv, phase, buf, sg->length)) 326 break; 327 } 328 REG0; 329 rtrc(2); 330 /* 331 * Wait for irq (split into second state of irq handler 332 * if this can take time) 333 */ 334 if ((k = ql_wai(priv))) { 335 set_host_byte(cmd, k); 336 return; 337 } 338 k = inb(qbase + 5); /* should be 0x10, bus service */ 339 } 340 341 /* 342 * Enter Status (and Message In) Phase 343 */ 344 345 k = jiffies + WATCHDOG; 346 347 while (time_before(jiffies, k) && !priv->qabort && 348 !(inb(qbase + 4) & 6)) 349 cpu_relax(); /* wait for status phase */ 350 351 if (time_after_eq(jiffies, k)) { 352 ql_zap(priv); 353 set_host_byte(cmd, DID_TIME_OUT); 354 return; 355 } 356 357 /* FIXME: timeout ?? */ 358 while (inb(qbase + 5)) 359 cpu_relax(); /* clear pending ints */ 360 361 if (priv->qabort) { 362 set_host_byte(cmd, 363 priv->qabort == 1 ? DID_ABORT : DID_RESET); 364 return; 365 } 366 367 outb(0x11, qbase + 3); /* get status and message */ 368 if ((k = ql_wai(priv))) { 369 set_host_byte(cmd, k); 370 return; 371 } 372 i = inb(qbase + 5); /* get chip irq stat */ 373 j = inb(qbase + 7) & 0x1f; /* and bytes rec'd */ 374 status = inb(qbase + 2); 375 message = inb(qbase + 2); 376 377 /* 378 * Should get function complete int if Status and message, else 379 * bus serv if only status 380 */ 381 if (!((i == 8 && j == 2) || (i == 0x10 && j == 1))) { 382 printk(KERN_ERR "Ql:Error during status phase, int=%02X, %d bytes recd\n", i, j); 383 set_host_byte(cmd, DID_ERROR); 384 } 385 outb(0x12, qbase + 3); /* done, disconnect */ 386 rtrc(1); 387 if ((k = ql_wai(priv))) { 388 set_host_byte(cmd, k); 389 return; 390 } 391 392 /* 393 * Should get bus service interrupt and disconnect interrupt 394 */ 395 396 i = inb(qbase + 5); /* should be bus service */ 397 while (!priv->qabort && ((i & 0x20) != 0x20)) { 398 barrier(); 399 cpu_relax(); 400 i |= inb(qbase + 5); 401 } 402 rtrc(0); 403 404 if (priv->qabort) { 405 set_host_byte(cmd, 406 priv->qabort == 1 ? DID_ABORT : DID_RESET); 407 return; 408 } 409 > 410 set_host_byte(cmd, result); 411 set_msg_byte(cmd, message); 412 set_status_byte(cmd, status); 413 return; 414 } 415 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org