tree: https://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git misc head: 16a628faa63c8149d9a8f433e5c6548f6cff98e4 commit: 2439bec3bf084ab6cbc69a66797a4612042be6ca [327/330] scsi: storvsc: Spread interrupts when picking a channel for I/O requests config: x86_64-randconfig-s1-02071932 (attached as .config) compiler: gcc-6 (Debian 6.4.0-9) 6.4.0 20171026 reproduce: git checkout 2439bec3bf084ab6cbc69a66797a4612042be6ca # save the attached .config to linux build tree make ARCH=x86_64 All errors (new ones prefixed by >>): drivers//scsi/storvsc_drv.c: In function 'storvsc_do_io': >> drivers//scsi/storvsc_drv.c:1313:4: error: implicit declaration of function 'for_each_cpu_wrap' [-Werror=implicit-function-declaration] for_each_cpu_wrap(tgt_cpu, &alloced_mask, ^~~~~~~~~~~~~~~~~ drivers//scsi/storvsc_drv.c:1314:40: error: expected ';' before '{' token outgoing_channel->target_cpu + 1) { ^ cc1: some warnings being treated as errors vim +/for_each_cpu_wrap +1313 drivers//scsi/storvsc_drv.c 1280 1281 1282 static int storvsc_do_io(struct hv_device *device, 1283 struct storvsc_cmd_request *request, u16 q_num) 1284 { 1285 struct storvsc_device *stor_device; 1286 struct vstor_packet *vstor_packet; 1287 struct vmbus_channel *outgoing_channel; 1288 int ret = 0; 1289 struct cpumask alloced_mask; 1290 int tgt_cpu; 1291 1292 vstor_packet = &request->vstor_packet; 1293 stor_device = get_out_stor_device(device); 1294 1295 if (!stor_device) 1296 return -ENODEV; 1297 1298 1299 request->device = device; 1300 /* 1301 * Select an an appropriate channel to send the request out. 1302 */ 1303 1304 if (stor_device->stor_chns[q_num] != NULL) { 1305 outgoing_channel = stor_device->stor_chns[q_num]; 1306 if (outgoing_channel->target_cpu == smp_processor_id()) { 1307 /* 1308 * Ideally, we want to pick a different channel if 1309 * available on the same NUMA node. 1310 */ 1311 cpumask_and(&alloced_mask, &stor_device->alloced_cpus, 1312 cpumask_of_node(cpu_to_node(q_num))); > 1313 for_each_cpu_wrap(tgt_cpu, &alloced_mask, 1314 outgoing_channel->target_cpu + 1) { 1315 if (tgt_cpu != outgoing_channel->target_cpu) { 1316 outgoing_channel = 1317 stor_device->stor_chns[tgt_cpu]; 1318 break; 1319 } 1320 } 1321 } 1322 } else { 1323 outgoing_channel = get_og_chn(stor_device, q_num); 1324 } 1325 1326 1327 vstor_packet->flags |= REQUEST_COMPLETION_FLAG; 1328 1329 vstor_packet->vm_srb.length = (sizeof(struct vmscsi_request) - 1330 vmscsi_size_delta); 1331 1332 1333 vstor_packet->vm_srb.sense_info_length = sense_buffer_size; 1334 1335 1336 vstor_packet->vm_srb.data_transfer_length = 1337 request->payload->range.len; 1338 1339 vstor_packet->operation = VSTOR_OPERATION_EXECUTE_SRB; 1340 1341 if (request->payload->range.len) { 1342 1343 ret = vmbus_sendpacket_mpb_desc(outgoing_channel, 1344 request->payload, request->payload_sz, 1345 vstor_packet, 1346 (sizeof(struct vstor_packet) - 1347 vmscsi_size_delta), 1348 (unsigned long)request); 1349 } else { 1350 ret = vmbus_sendpacket(outgoing_channel, vstor_packet, 1351 (sizeof(struct vstor_packet) - 1352 vmscsi_size_delta), 1353 (unsigned long)request, 1354 VM_PKT_DATA_INBAND, 1355 VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); 1356 } 1357 1358 if (ret != 0) 1359 return ret; 1360 1361 atomic_inc(&stor_device->num_outstanding_req); 1362 1363 return ret; 1364 } 1365 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Attachment:
.config.gz
Description: application/gzip