drivers/scsi/hisi_sas/hisi_sas_v3_hw.c:2168:43: sparse: sparse: restricted __le32 degrades to integer

From: kernel test robot
Date: Sun Apr 16 2023 - 00:32:12 EST


tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 3e7bb4f2461710b70887704af7f175383251088e
commit: 62413199cd6d2906c121c2dfa3d7b82fd05f08db scsi: hisi_sas: Modify v3 HW SSP underflow error processing
date: 1 year, 2 months ago
config: ia64-randconfig-s043-20230416 (https://download.01.org/0day-ci/archive/20230416/202304161254.NztCVZIO-lkp@xxxxxxxxx/config)
compiler: ia64-linux-gcc (GCC) 12.1.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.4-39-gce1a6720-dirty
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=62413199cd6d2906c121c2dfa3d7b82fd05f08db
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout 62413199cd6d2906c121c2dfa3d7b82fd05f08db
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=ia64 olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=ia64 SHELL=/bin/bash drivers/scsi/hisi_sas/

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Link: https://lore.kernel.org/oe-kbuild-all/202304161254.NztCVZIO-lkp@xxxxxxxxx/

sparse warnings: (new ones prefixed by >>)
>> drivers/scsi/hisi_sas/hisi_sas_v3_hw.c:2168:43: sparse: sparse: restricted __le32 degrades to integer
drivers/scsi/hisi_sas/hisi_sas_v3_hw.c:2169:46: sparse: sparse: restricted __le32 degrades to integer
drivers/scsi/hisi_sas/hisi_sas_v3_hw.c:4427:35: sparse: sparse: incorrect type in argument 4 (different base types) @@ expected restricted __le32 [usertype] *[assigned] ptr @@ got unsigned int * @@
drivers/scsi/hisi_sas/hisi_sas_v3_hw.c:4427:35: sparse: expected restricted __le32 [usertype] *[assigned] ptr
drivers/scsi/hisi_sas/hisi_sas_v3_hw.c:4427:35: sparse: got unsigned int *

vim +2168 drivers/scsi/hisi_sas/hisi_sas_v3_hw.c

2144
2145 static bool
2146 slot_err_v3_hw(struct hisi_hba *hisi_hba, struct sas_task *task,
2147 struct hisi_sas_slot *slot)
2148 {
2149 struct task_status_struct *ts = &task->task_status;
2150 struct hisi_sas_complete_v3_hdr *complete_queue =
2151 hisi_hba->complete_hdr[slot->cmplt_queue];
2152 struct hisi_sas_complete_v3_hdr *complete_hdr =
2153 &complete_queue[slot->cmplt_queue_slot];
2154 struct hisi_sas_err_record_v3 *record =
2155 hisi_sas_status_buf_addr_mem(slot);
2156 u32 dma_rx_err_type = le32_to_cpu(record->dma_rx_err_type);
2157 u32 trans_tx_fail_type = le32_to_cpu(record->trans_tx_fail_type);
2158 u32 dw3 = le32_to_cpu(complete_hdr->dw3);
2159
2160 switch (task->task_proto) {
2161 case SAS_PROTOCOL_SSP:
2162 if (dma_rx_err_type & RX_DATA_LEN_UNDERFLOW_MSK) {
2163 /*
2164 * If returned response frame is incorrect because of data underflow,
2165 * but I/O information has been written to the host memory, we examine
2166 * response IU.
2167 */
> 2168 if (!(complete_hdr->dw0 & CMPLT_HDR_RSPNS_GOOD_MSK) &&
2169 (complete_hdr->dw0 & CMPLT_HDR_RSPNS_XFRD_MSK))
2170 return false;
2171
2172 ts->residual = trans_tx_fail_type;
2173 ts->stat = SAS_DATA_UNDERRUN;
2174 } else if (dw3 & CMPLT_HDR_IO_IN_TARGET_MSK) {
2175 ts->stat = SAS_QUEUE_FULL;
2176 slot->abort = 1;
2177 } else {
2178 ts->stat = SAS_OPEN_REJECT;
2179 ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
2180 }
2181 break;
2182 case SAS_PROTOCOL_SATA:
2183 case SAS_PROTOCOL_STP:
2184 case SAS_PROTOCOL_SATA | SAS_PROTOCOL_STP:
2185 if (dma_rx_err_type & RX_DATA_LEN_UNDERFLOW_MSK) {
2186 ts->residual = trans_tx_fail_type;
2187 ts->stat = SAS_DATA_UNDERRUN;
2188 } else if (dw3 & CMPLT_HDR_IO_IN_TARGET_MSK) {
2189 ts->stat = SAS_PHY_DOWN;
2190 slot->abort = 1;
2191 } else {
2192 ts->stat = SAS_OPEN_REJECT;
2193 ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
2194 }
2195 hisi_sas_sata_done(task, slot);
2196 break;
2197 case SAS_PROTOCOL_SMP:
2198 ts->stat = SAS_SAM_STAT_CHECK_CONDITION;
2199 break;
2200 default:
2201 break;
2202 }
2203 return true;
2204 }
2205

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests