Re: [PATCH 3/3] Storvsc: Select channel based on available percentage of ring buffer to write

From: kbuild test robot
Date: Sat Mar 24 2018 - 02:01:08 EST


Hi Long,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on v4.16-rc6]
[cannot apply to linus/master net-next/master net/master next-20180323]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url: https://github.com/0day-ci/linux/commits/Long-Li/Vmbus-Add-function-to-report-available-ring-buffer-to-write-in-total-ring-size-percentage/20180324-124431
config: x86_64-rhel (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64

All warnings (new ones prefixed by >>):

drivers//scsi/storvsc_drv.c: In function 'storvsc_do_io':
>> drivers//scsi/storvsc_drv.c:1402:1: warning: the frame size of 2064 bytes is larger than 2048 bytes [-Wframe-larger-than=]
}
^

vim +1402 drivers//scsi/storvsc_drv.c

d86adf48 drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2016-12-14 1287
d86adf48 drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2016-12-14 1288
c1b3d067 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1289 static int storvsc_do_io(struct hv_device *device,
d86adf48 drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2016-12-14 1290 struct storvsc_cmd_request *request, u16 q_num)
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1291 {
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1292 struct storvsc_device *stor_device;
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1293 struct vstor_packet *vstor_packet;
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1294 struct vmbus_channel *outgoing_channel, *channel;
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1295 int ret = 0;
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1296 struct cpumask alloced_mask, other_numa_mask;
d86adf48 drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2016-12-14 1297 int tgt_cpu;
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1298
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1299 vstor_packet = &request->vstor_packet;
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1300 stor_device = get_out_stor_device(device);
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1301
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1302 if (!stor_device)
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1303 return -ENODEV;
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1304
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1305
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1306 request->device = device;
6f94d5de drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2013-06-04 1307 /*
6f94d5de drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2013-06-04 1308 * Select an an appropriate channel to send the request out.
6f94d5de drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2013-06-04 1309 */
d86adf48 drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2016-12-14 1310 if (stor_device->stor_chns[q_num] != NULL) {
d86adf48 drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2016-12-14 1311 outgoing_channel = stor_device->stor_chns[q_num];
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1312 if (outgoing_channel->target_cpu == q_num) {
d86adf48 drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2016-12-14 1313 /*
d86adf48 drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2016-12-14 1314 * Ideally, we want to pick a different channel if
d86adf48 drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2016-12-14 1315 * available on the same NUMA node.
d86adf48 drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2016-12-14 1316 */
d86adf48 drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2016-12-14 1317 cpumask_and(&alloced_mask, &stor_device->alloced_cpus,
d86adf48 drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2016-12-14 1318 cpumask_of_node(cpu_to_node(q_num)));
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1319
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1320 for_each_cpu_wrap(tgt_cpu, &alloced_mask, q_num + 1) {
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1321 if (tgt_cpu == q_num)
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1322 continue;
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1323 channel = stor_device->stor_chns[tgt_cpu];
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1324 if (hv_get_avail_to_write_percent(
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1325 &channel->outbound)
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1326 > ring_avail_percent_lowater) {
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1327 outgoing_channel = channel;
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1328 goto found_channel;
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1329 }
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1330 }
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1331
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1332 /*
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1333 * All the othe channels on the same NUMA node are
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1334 * busy. Try to use the channel with the current CPU
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1335 */
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1336 if (hv_get_avail_to_write_percent(
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1337 &outgoing_channel->outbound)
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1338 > ring_avail_percent_lowater)
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1339 goto found_channel;
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1340
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1341 /*
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1342 * If we reach here, all the channels on the current
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1343 * NUMA node are busy. Try to find a channel in
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1344 * other NUMA nodes
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1345 */
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1346 cpumask_andnot(&other_numa_mask,
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1347 &stor_device->alloced_cpus,
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1348 cpumask_of_node(cpu_to_node(q_num)));
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1349
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1350 for_each_cpu(tgt_cpu, &other_numa_mask) {
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1351 channel = stor_device->stor_chns[tgt_cpu];
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1352 if (hv_get_avail_to_write_percent(
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1353 &channel->outbound)
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1354 > ring_avail_percent_lowater) {
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1355 outgoing_channel = channel;
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1356 goto found_channel;
d86adf48 drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2016-12-14 1357 }
d86adf48 drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2016-12-14 1358 }
d86adf48 drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2016-12-14 1359 }
d86adf48 drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2016-12-14 1360 } else {
d86adf48 drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2016-12-14 1361 outgoing_channel = get_og_chn(stor_device, q_num);
d86adf48 drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2016-12-14 1362 }
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1363
e75adf20 drivers/scsi/storvsc_drv.c Long Li 2018-03-22 1364 found_channel:
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1365 vstor_packet->flags |= REQUEST_COMPLETION_FLAG;
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1366
8b612fa2 drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2013-06-04 1367 vstor_packet->vm_srb.length = (sizeof(struct vmscsi_request) -
8b612fa2 drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2013-06-04 1368 vmscsi_size_delta);
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1369
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1370
8b612fa2 drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2013-06-04 1371 vstor_packet->vm_srb.sense_info_length = sense_buffer_size;
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1372
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1373
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1374 vstor_packet->vm_srb.data_transfer_length =
be0cf6ca drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2015-03-27 1375 request->payload->range.len;
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1376
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1377 vstor_packet->operation = VSTOR_OPERATION_EXECUTE_SRB;
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1378
be0cf6ca drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2015-03-27 1379 if (request->payload->range.len) {
be0cf6ca drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2015-03-27 1380
be0cf6ca drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2015-03-27 1381 ret = vmbus_sendpacket_mpb_desc(outgoing_channel,
be0cf6ca drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2015-03-27 1382 request->payload, request->payload_sz,
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1383 vstor_packet,
8b612fa2 drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2013-06-04 1384 (sizeof(struct vstor_packet) -
8b612fa2 drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2013-06-04 1385 vmscsi_size_delta),
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1386 (unsigned long)request);
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1387 } else {
0147dabc drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2015-03-27 1388 ret = vmbus_sendpacket(outgoing_channel, vstor_packet,
8b612fa2 drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2013-06-04 1389 (sizeof(struct vstor_packet) -
8b612fa2 drivers/scsi/storvsc_drv.c K. Y. Srinivasan 2013-06-04 1390 vmscsi_size_delta),
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1391 (unsigned long)request,
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1392 VM_PKT_DATA_INBAND,
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1393 VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED);
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1394 }
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1395
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1396 if (ret != 0)
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1397 return ret;
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1398
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1399 atomic_inc(&stor_device->num_outstanding_req);
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1400
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1401 return ret;
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 @1402 }
8dcf37d4 drivers/staging/hv/storvsc_drv.c K. Y. Srinivasan 2011-08-27 1403

:::::: The code at line 1402 was first introduced by commit
:::::: 8dcf37d446f103d55b96beddb100db6a0ad8d0ba Staging: hv: storvsc: Include storvsc.c in storvsc_drv.c

:::::: TO: K. Y. Srinivasan <kys@xxxxxxxxxxxxx>
:::::: CC: Greg Kroah-Hartman <gregkh@xxxxxxx>

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

Attachment: .config.gz
Description: application/gzip