Re: [PATCH 03/24] wd33c93: use SCSI status

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Hannes,

I love your patch! Perhaps something to improve:

[auto build test WARNING on mkp-scsi/for-next]
[also build test WARNING on v5.4-rc4 next-20191021]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url:    https://github.com/0day-ci/linux/commits/Hannes-Reinecke/scsi-Revamp-result-values/20191022-004918
base:   https://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git for-next
config: m68k-multi_defconfig (attached as .config)
compiler: m68k-linux-gcc (GCC) 7.4.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
        GCC_VERSION=7.4.0 make.cross ARCH=m68k 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@xxxxxxxxx>

All warnings (new ones prefixed by >>):

   drivers/scsi/wd33c93.c: In function 'wd33c93_intr':
>> drivers/scsi/wd33c93.c:1297:19: warning: passing argument 1 of 'set_host_byte' makes pointer from integer without a cast [-Wint-conversion]
        set_host_byte(cmd->result, DID_ERROR);
                      ^~~
   In file included from drivers/scsi/wd33c93.c:79:0:
   include/scsi/scsi_cmnd.h:315:20: note: expected 'struct scsi_cmnd *' but argument is of type 'int'
    static inline void set_host_byte(struct scsi_cmnd *cmd, char status)
                       ^~~~~~~~~~~~~

vim +/set_host_byte +1297 drivers/scsi/wd33c93.c

  1200	
  1201		case CSR_SDP:
  1202			DB(DB_INTR, printk("SDP"))
  1203			    hostdata->state = S_RUNNING_LEVEL2;
  1204			write_wd33c93(regs, WD_COMMAND_PHASE, 0x41);
  1205			write_wd33c93_cmd(regs, WD_CMD_SEL_ATN_XFER);
  1206			spin_unlock_irqrestore(&hostdata->lock, flags);
  1207			break;
  1208	
  1209		case CSR_XFER_DONE | PHS_MESS_OUT:
  1210		case CSR_UNEXP | PHS_MESS_OUT:
  1211		case CSR_SRV_REQ | PHS_MESS_OUT:
  1212			DB(DB_INTR, printk("MSG_OUT="))
  1213	
  1214	/* To get here, we've probably requested MESSAGE_OUT and have
  1215	 * already put the correct bytes in outgoing_msg[] and filled
  1216	 * in outgoing_len. We simply send them out to the SCSI bus.
  1217	 * Sometimes we get MESSAGE_OUT phase when we're not expecting
  1218	 * it - like when our SDTR message is rejected by a target. Some
  1219	 * targets send the REJECT before receiving all of the extended
  1220	 * message, and then seem to go back to MESSAGE_OUT for a byte
  1221	 * or two. Not sure why, or if I'm doing something wrong to
  1222	 * cause this to happen. Regardless, it seems that sending
  1223	 * NOP messages in these situations results in no harm and
  1224	 * makes everyone happy.
  1225	 */
  1226			    if (hostdata->outgoing_len == 0) {
  1227				hostdata->outgoing_len = 1;
  1228				hostdata->outgoing_msg[0] = NOP;
  1229			}
  1230			transfer_pio(regs, hostdata->outgoing_msg,
  1231				     hostdata->outgoing_len, DATA_OUT_DIR, hostdata);
  1232			DB(DB_INTR, printk("%02x", hostdata->outgoing_msg[0]))
  1233			    hostdata->outgoing_len = 0;
  1234			hostdata->state = S_CONNECTED;
  1235			spin_unlock_irqrestore(&hostdata->lock, flags);
  1236			break;
  1237	
  1238		case CSR_UNEXP_DISC:
  1239	
  1240	/* I think I've seen this after a request-sense that was in response
  1241	 * to an error condition, but not sure. We certainly need to do
  1242	 * something when we get this interrupt - the question is 'what?'.
  1243	 * Let's think positively, and assume some command has finished
  1244	 * in a legal manner (like a command that provokes a request-sense),
  1245	 * so we treat it as a normal command-complete-disconnect.
  1246	 */
  1247	
  1248	/* Make sure that reselection is enabled at this point - it may
  1249	 * have been turned off for the command that just completed.
  1250	 */
  1251	
  1252			write_wd33c93(regs, WD_SOURCE_ID, SRCID_ER);
  1253			if (cmd == NULL) {
  1254				printk(" - Already disconnected! ");
  1255				hostdata->state = S_UNCONNECTED;
  1256				spin_unlock_irqrestore(&hostdata->lock, flags);
  1257				return;
  1258			}
  1259			DB(DB_INTR, printk("UNEXP_DISC"))
  1260			    hostdata->connected = NULL;
  1261			hostdata->busy[cmd->device->id] &= ~(1 << (cmd->device->lun & 0xff));
  1262			hostdata->state = S_UNCONNECTED;
  1263			if (cmd->cmnd[0] == REQUEST_SENSE && cmd->SCp.Status != SAM_STAT_GOOD)
  1264				set_host_byte(cmd, DID_ERROR);
  1265			else
  1266				cmd->result = cmd->SCp.Status | (cmd->SCp.Message << 8);
  1267			cmd->scsi_done(cmd);
  1268	
  1269	/* We are no longer connected to a target - check to see if
  1270	 * there are commands waiting to be executed.
  1271	 */
  1272			/* look above for comments on scsi_done() */
  1273			spin_unlock_irqrestore(&hostdata->lock, flags);
  1274			wd33c93_execute(instance);
  1275			break;
  1276	
  1277		case CSR_DISC:
  1278	
  1279	/* Make sure that reselection is enabled at this point - it may
  1280	 * have been turned off for the command that just completed.
  1281	 */
  1282	
  1283			write_wd33c93(regs, WD_SOURCE_ID, SRCID_ER);
  1284			DB(DB_INTR, printk("DISC"))
  1285			    if (cmd == NULL) {
  1286				printk(" - Already disconnected! ");
  1287				hostdata->state = S_UNCONNECTED;
  1288			}
  1289			switch (hostdata->state) {
  1290			case S_PRE_CMP_DISC:
  1291				hostdata->connected = NULL;
  1292				hostdata->busy[cmd->device->id] &= ~(1 << (cmd->device->lun & 0xff));
  1293				hostdata->state = S_UNCONNECTED;
  1294				DB(DB_INTR, printk(":%d", cmd->SCp.Status));
  1295				if (cmd->cmnd[0] == REQUEST_SENSE
  1296				    && cmd->SCp.Status != SAM_STAT_GOOD)
> 1297					set_host_byte(cmd->result, DID_ERROR);
  1298				else
  1299					cmd->result =
  1300					    cmd->SCp.Status | (cmd->SCp.Message << 8);
  1301				cmd->scsi_done(cmd);
  1302				break;
  1303			case S_PRE_TMP_DISC:
  1304			case S_RUNNING_LEVEL2:
  1305				cmd->host_scribble = (uchar *) hostdata->disconnected_Q;
  1306				hostdata->disconnected_Q = cmd;
  1307				hostdata->connected = NULL;
  1308				hostdata->state = S_UNCONNECTED;
  1309	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux