Hi Quinn, FYI, the error/warning still remains. tree: https://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git misc head: 9b5ac8ab4e8bf5636d1d425aee68ddf45af12057 commit: dd30706e73b70d67e88fdaca688db7a3374fd5de [61/294] scsi: qla2xxx: edif: Add key update config: i386-randconfig-a002-20210829 (attached as .config) compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 4e1a164d7bd53653f79decc121afe784d2fde0a7) 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 # https://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git/commit/?id=dd30706e73b70d67e88fdaca688db7a3374fd5de git remote add scsi https://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git git fetch --no-tags scsi misc git checkout dd30706e73b70d67e88fdaca688db7a3374fd5de # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=i386 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@xxxxxxxxx> All warnings (new ones prefixed by >>): clang-14: warning: optimization flag '-falign-jumps=0' is not supported [-Wignored-optimization-argument] In file included from drivers/scsi/qla2xxx/qla_edif.c:6: In file included from drivers/scsi/qla2xxx/qla_def.h:12: In file included from include/linux/module.h:14: In file included from include/linux/buildid.h:5: In file included from include/linux/mm_types.h:9: In file included from include/linux/spinlock.h:51: In file included from include/linux/preempt.h:78: In file included from arch/x86/include/asm/preempt.h:7: In file included from include/linux/thread_info.h:60: arch/x86/include/asm/thread_info.h:172:13: warning: calling '__builtin_frame_address' with a nonzero argument is unsafe [-Wframe-address] oldframe = __builtin_frame_address(1); ^~~~~~~~~~~~~~~~~~~~~~~~~~ arch/x86/include/asm/thread_info.h:174:11: warning: calling '__builtin_frame_address' with a nonzero argument is unsafe [-Wframe-address] frame = __builtin_frame_address(2); ^~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/scsi/qla2xxx/qla_edif.c:463:6: warning: no previous prototype for function 'qla2x00_release_all_sadb' [-Wmissing-prototypes] void qla2x00_release_all_sadb(struct scsi_qla_host *vha, struct fc_port *fcport) ^ drivers/scsi/qla2xxx/qla_edif.c:463:1: note: declare 'static' if the function is not intended to be used outside of this translation unit void qla2x00_release_all_sadb(struct scsi_qla_host *vha, struct fc_port *fcport) ^ static >> drivers/scsi/qla2xxx/qla_edif.c:1105:44: warning: taking address of packed member 'port_id' of class or structure 'qla_sa_update_frame' may result in an unaligned pointer value [-Waddress-of-packed-member] fcport = qla2x00_find_fcport_by_pid(vha, &sa_frame.port_id); ^~~~~~~~~~~~~~~~ 4 warnings generated. vim +1105 drivers/scsi/qla2xxx/qla_edif.c 1067 1068 int 1069 qla24xx_sadb_update(struct bsg_job *bsg_job) 1070 { 1071 struct fc_bsg_reply *bsg_reply = bsg_job->reply; 1072 struct Scsi_Host *host = fc_bsg_to_shost(bsg_job); 1073 scsi_qla_host_t *vha = shost_priv(host); 1074 fc_port_t *fcport = NULL; 1075 srb_t *sp = NULL; 1076 struct edif_list_entry *edif_entry = NULL; 1077 int found = 0; 1078 int rval = 0; 1079 int result = 0; 1080 struct qla_sa_update_frame sa_frame; 1081 struct srb_iocb *iocb_cmd; 1082 1083 ql_dbg(ql_dbg_edif + ql_dbg_verbose, vha, 0x911d, 1084 "%s entered, vha: 0x%p\n", __func__, vha); 1085 1086 sg_copy_to_buffer(bsg_job->request_payload.sg_list, 1087 bsg_job->request_payload.sg_cnt, &sa_frame, 1088 sizeof(struct qla_sa_update_frame)); 1089 1090 /* Check if host is online */ 1091 if (!vha->flags.online) { 1092 ql_log(ql_log_warn, vha, 0x70a1, "Host is not online\n"); 1093 rval = -EIO; 1094 SET_DID_STATUS(bsg_reply->result, DID_ERROR); 1095 goto done; 1096 } 1097 1098 if (vha->e_dbell.db_flags != EDB_ACTIVE) { 1099 ql_log(ql_log_warn, vha, 0x70a1, "App not started\n"); 1100 rval = -EIO; 1101 SET_DID_STATUS(bsg_reply->result, DID_ERROR); 1102 goto done; 1103 } 1104 > 1105 fcport = qla2x00_find_fcport_by_pid(vha, &sa_frame.port_id); 1106 if (fcport) { 1107 found = 1; 1108 if (sa_frame.flags == QLA_SA_UPDATE_FLAGS_TX_KEY) 1109 fcport->edif.tx_bytes = 0; 1110 if (sa_frame.flags == QLA_SA_UPDATE_FLAGS_RX_KEY) 1111 fcport->edif.rx_bytes = 0; 1112 } 1113 1114 if (!found) { 1115 ql_dbg(ql_dbg_edif, vha, 0x70a3, "Failed to find port= %06x\n", 1116 sa_frame.port_id.b24); 1117 rval = -EINVAL; 1118 SET_DID_STATUS(bsg_reply->result, DID_TARGET_FAILURE); 1119 goto done; 1120 } 1121 1122 /* make sure the nport_handle is valid */ 1123 if (fcport->loop_id == FC_NO_LOOP_ID) { 1124 ql_dbg(ql_dbg_edif, vha, 0x70e1, 1125 "%s: %8phN lid=FC_NO_LOOP_ID, spi: 0x%x, DS %d, returning NO_CONNECT\n", 1126 __func__, fcport->port_name, sa_frame.spi, 1127 fcport->disc_state); 1128 rval = -EINVAL; 1129 SET_DID_STATUS(bsg_reply->result, DID_NO_CONNECT); 1130 goto done; 1131 } 1132 1133 /* allocate and queue an sa_ctl */ 1134 result = qla24xx_check_sadb_avail_slot(bsg_job, fcport, &sa_frame); 1135 1136 /* failure of bsg */ 1137 if (result == INVALID_EDIF_SA_INDEX) { 1138 ql_dbg(ql_dbg_edif, vha, 0x70e1, 1139 "%s: %8phN, skipping update.\n", 1140 __func__, fcport->port_name); 1141 rval = -EINVAL; 1142 SET_DID_STATUS(bsg_reply->result, DID_ERROR); 1143 goto done; 1144 1145 /* rx delete failure */ 1146 } else if (result == RX_DELETE_NO_EDIF_SA_INDEX) { 1147 ql_dbg(ql_dbg_edif, vha, 0x70e1, 1148 "%s: %8phN, skipping rx delete.\n", 1149 __func__, fcport->port_name); 1150 SET_DID_STATUS(bsg_reply->result, DID_OK); 1151 goto done; 1152 } 1153 1154 ql_dbg(ql_dbg_edif, vha, 0x70e1, 1155 "%s: %8phN, sa_index in sa_frame: %d flags %xh\n", 1156 __func__, fcport->port_name, sa_frame.fast_sa_index, 1157 sa_frame.flags); 1158 1159 /* looking for rx index and delete */ 1160 if (((sa_frame.flags & SAU_FLG_TX) == 0) && 1161 (sa_frame.flags & SAU_FLG_INV)) { 1162 uint16_t nport_handle = fcport->loop_id; 1163 uint16_t sa_index = sa_frame.fast_sa_index; 1164 1165 /* 1166 * make sure we have an existing rx key, otherwise just process 1167 * this as a straight delete just like TX 1168 * This is NOT a normal case, it indicates an error recovery or key cleanup 1169 * by the ipsec code above us. 1170 */ 1171 edif_entry = qla_edif_list_find_sa_index(fcport, fcport->loop_id); 1172 if (!edif_entry) { 1173 ql_dbg(ql_dbg_edif, vha, 0x911d, 1174 "%s: WARNING: no active sa_index for nport_handle 0x%x, forcing delete for sa_index 0x%x\n", 1175 __func__, fcport->loop_id, sa_index); 1176 goto force_rx_delete; 1177 } 1178 1179 /* 1180 * if we have a forced delete for rx, remove the sa_index from the edif list 1181 * and proceed with normal delete. The rx delay timer should not be running 1182 */ 1183 if ((sa_frame.flags & SAU_FLG_FORCE_DELETE) == SAU_FLG_FORCE_DELETE) { 1184 qla_edif_list_delete_sa_index(fcport, edif_entry); 1185 ql_dbg(ql_dbg_edif, vha, 0x911d, 1186 "%s: FORCE DELETE flag found for nport_handle 0x%x, sa_index 0x%x, forcing DELETE\n", 1187 __func__, fcport->loop_id, sa_index); 1188 kfree(edif_entry); 1189 goto force_rx_delete; 1190 } 1191 1192 /* 1193 * delayed rx delete 1194 * 1195 * if delete_sa_index is not invalid then there is already 1196 * a delayed index in progress, return bsg bad status 1197 */ 1198 if (edif_entry->delete_sa_index != INVALID_EDIF_SA_INDEX) { 1199 struct edif_sa_ctl *sa_ctl; 1200 1201 ql_dbg(ql_dbg_edif, vha, 0x911d, 1202 "%s: delete for lid 0x%x, delete_sa_index %d is pending\n", 1203 __func__, edif_entry->handle, edif_entry->delete_sa_index); 1204 1205 /* free up the sa_ctl that was allocated with the sa_index */ 1206 sa_ctl = qla_edif_find_sa_ctl_by_index(fcport, sa_index, 1207 (sa_frame.flags & SAU_FLG_TX)); 1208 if (sa_ctl) { 1209 ql_dbg(ql_dbg_edif, vha, 0x3063, 1210 "%s: freeing sa_ctl for index %d\n", 1211 __func__, sa_ctl->index); 1212 qla_edif_free_sa_ctl(fcport, sa_ctl, sa_ctl->index); 1213 } 1214 1215 /* release the sa_index */ 1216 ql_dbg(ql_dbg_edif, vha, 0x3063, 1217 "%s: freeing sa_index %d, nph: 0x%x\n", 1218 __func__, sa_index, nport_handle); 1219 qla_edif_sadb_delete_sa_index(fcport, nport_handle, sa_index); 1220 1221 rval = -EINVAL; 1222 SET_DID_STATUS(bsg_reply->result, DID_ERROR); 1223 goto done; 1224 } 1225 1226 fcport->edif.rekey_cnt++; 1227 1228 /* configure and start the rx delay timer */ 1229 edif_entry->fcport = fcport; 1230 edif_entry->timer.expires = jiffies + RX_DELAY_DELETE_TIMEOUT * HZ; 1231 1232 ql_dbg(ql_dbg_edif, vha, 0x911d, 1233 "%s: adding timer, entry: %p, delete sa_index %d, lid 0x%x to edif_list\n", 1234 __func__, edif_entry, sa_index, nport_handle); 1235 1236 /* 1237 * Start the timer when we queue the delayed rx delete. 1238 * This is an activity timer that goes off if we have not 1239 * received packets with the new sa_index 1240 */ 1241 add_timer(&edif_entry->timer); 1242 1243 /* 1244 * sa_delete for rx key with an active rx key including this one 1245 * add the delete rx sa index to the hash so we can look for it 1246 * in the rsp queue. Do this after making any changes to the 1247 * edif_entry as part of the rx delete. 1248 */ 1249 1250 ql_dbg(ql_dbg_edif, vha, 0x911d, 1251 "%s: delete sa_index %d, lid 0x%x to edif_list. bsg done ptr %p\n", 1252 __func__, sa_index, nport_handle, bsg_job); 1253 1254 edif_entry->delete_sa_index = sa_index; 1255 1256 bsg_job->reply_len = sizeof(struct fc_bsg_reply); 1257 bsg_reply->result = DID_OK << 16; 1258 1259 goto done; 1260 1261 /* 1262 * rx index and update 1263 * add the index to the list and continue with normal update 1264 */ 1265 } else if (((sa_frame.flags & SAU_FLG_TX) == 0) && 1266 ((sa_frame.flags & SAU_FLG_INV) == 0)) { 1267 /* sa_update for rx key */ 1268 uint32_t nport_handle = fcport->loop_id; 1269 uint16_t sa_index = sa_frame.fast_sa_index; 1270 int result; 1271 1272 /* 1273 * add the update rx sa index to the hash so we can look for it 1274 * in the rsp queue and continue normally 1275 */ 1276 1277 ql_dbg(ql_dbg_edif, vha, 0x911d, 1278 "%s: adding update sa_index %d, lid 0x%x to edif_list\n", 1279 __func__, sa_index, nport_handle); 1280 1281 result = qla_edif_list_add_sa_update_index(fcport, sa_index, 1282 nport_handle); 1283 if (result) { 1284 ql_dbg(ql_dbg_edif, vha, 0x911d, 1285 "%s: SA_UPDATE failed to add new sa index %d to list for lid 0x%x\n", 1286 __func__, sa_index, nport_handle); 1287 } 1288 } 1289 if (sa_frame.flags & SAU_FLG_GMAC_MODE) 1290 fcport->edif.aes_gmac = 1; 1291 else 1292 fcport->edif.aes_gmac = 0; 1293 1294 force_rx_delete: 1295 /* 1296 * sa_update for both rx and tx keys, sa_delete for tx key 1297 * immediately process the request 1298 */ 1299 sp = qla2x00_get_sp(vha, fcport, GFP_KERNEL); 1300 if (!sp) { 1301 rval = -ENOMEM; 1302 SET_DID_STATUS(bsg_reply->result, DID_IMM_RETRY); 1303 goto done; 1304 } 1305 1306 sp->type = SRB_SA_UPDATE; 1307 sp->name = "bsg_sa_update"; 1308 sp->u.bsg_job = bsg_job; 1309 /* sp->free = qla2x00_bsg_sp_free; */ 1310 sp->free = qla2x00_rel_sp; 1311 sp->done = qla2x00_bsg_job_done; 1312 iocb_cmd = &sp->u.iocb_cmd; 1313 iocb_cmd->u.sa_update.sa_frame = sa_frame; 1314 1315 rval = qla2x00_start_sp(sp); 1316 if (rval != QLA_SUCCESS) { 1317 ql_log(ql_dbg_edif, vha, 0x70e3, 1318 "qla2x00_start_sp failed=%d.\n", rval); 1319 1320 qla2x00_rel_sp(sp); 1321 rval = -EIO; 1322 SET_DID_STATUS(bsg_reply->result, DID_IMM_RETRY); 1323 goto done; 1324 } 1325 1326 ql_dbg(ql_dbg_edif, vha, 0x911d, 1327 "%s: %s sent, hdl=%x, portid=%06x.\n", 1328 __func__, sp->name, sp->handle, fcport->d_id.b24); 1329 1330 fcport->edif.rekey_cnt++; 1331 bsg_job->reply_len = sizeof(struct fc_bsg_reply); 1332 SET_DID_STATUS(bsg_reply->result, DID_OK); 1333 1334 return 0; 1335 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx
Attachment:
.config.gz
Description: application/gzip