From: kernel test robot <lkp@intel.com>
To: Luis Chamberlain <mcgrof@kernel.org>,
vkoul@kernel.org, chenxiang66@hisilicon.com,
m.szyprowski@samsung.com, robin.murphy@arm.com, leon@kernel.org,
jgg@nvidia.com, alex.williamson@redhat.com,
joel.granados@kernel.org
Cc: llvm@lists.linux.dev, oe-kbuild-all@lists.linux.dev,
iommu@lists.linux.dev, dmaengine@vger.kernel.org,
linux-block@vger.kernel.org, gost.dev@samsung.com,
mcgrof@kernel.org
Subject: Re: [PATCH 6/6] dma-mapping: benchmark: add IOVA support
Date: Wed, 21 May 2025 19:58:22 +0800 [thread overview]
Message-ID: <202505211909.CzQtqtu8-lkp@intel.com> (raw)
In-Reply-To: <20250520223913.3407136-7-mcgrof@kernel.org>
Hi Luis,
kernel test robot noticed the following build warnings:
[auto build test WARNING on linus/master]
[also build test WARNING on v6.15-rc7 next-20250516]
[cannot apply to vkoul-dmaengine/next shuah-kselftest/next shuah-kselftest/fixes sysctl/sysctl-next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Luis-Chamberlain/fake-dma-add-fake-dma-engine-driver/20250521-064035
base: linus/master
patch link: https://lore.kernel.org/r/20250520223913.3407136-7-mcgrof%40kernel.org
patch subject: [PATCH 6/6] dma-mapping: benchmark: add IOVA support
config: hexagon-randconfig-002-20250521 (https://download.01.org/0day-ci/archive/20250521/202505211909.CzQtqtu8-lkp@intel.com/config)
compiler: clang version 21.0.0git (https://github.com/llvm/llvm-project f819f46284f2a79790038e1f6649172789734ae8)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250521/202505211909.CzQtqtu8-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202505211909.CzQtqtu8-lkp@intel.com/
All warnings (new ones prefixed by >>):
kernel/dma/map_benchmark.c:60:25: error: variable has incomplete type 'struct dma_iova_state'
60 | struct dma_iova_state iova_state;
| ^
kernel/dma/map_benchmark.c:60:10: note: forward declaration of 'struct dma_iova_state'
60 | struct dma_iova_state iova_state;
| ^
kernel/dma/map_benchmark.c:76:8: error: call to undeclared function 'dma_iova_try_alloc'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
76 | if (!dma_iova_try_alloc(map->dev, &iova_state, phys, size)) {
| ^
kernel/dma/map_benchmark.c:88:9: error: call to undeclared function 'dma_iova_link'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
88 | ret = dma_iova_link(map->dev, &iova_state, phys, 0, size, dir, 0);
| ^
kernel/dma/map_benchmark.c:94:4: error: call to undeclared function 'dma_iova_free'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
94 | dma_iova_free(map->dev, &iova_state);
| ^
kernel/dma/map_benchmark.c:101:9: error: call to undeclared function 'dma_iova_sync'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
101 | ret = dma_iova_sync(map->dev, &iova_state, 0, size);
| ^
kernel/dma/map_benchmark.c:107:4: error: call to undeclared function 'dma_iova_unlink'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
107 | dma_iova_unlink(map->dev, &iova_state, 0, size, dir, 0);
| ^
kernel/dma/map_benchmark.c:108:4: error: call to undeclared function 'dma_iova_free'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
108 | dma_iova_free(map->dev, &iova_state);
| ^
kernel/dma/map_benchmark.c:118:3: error: call to undeclared function 'dma_iova_destroy'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
118 | dma_iova_destroy(map->dev, &iova_state, size, dir, 0);
| ^
>> kernel/dma/map_benchmark.c:340:23: warning: variable 'iova_threads' set but not used [-Wunused-but-set-variable]
340 | int regular_threads, iova_threads;
| ^
1 warning and 8 errors generated.
vim +/iova_threads +340 kernel/dma/map_benchmark.c
334
335 static int do_streaming_iova_benchmark(struct map_benchmark_data *map)
336 {
337 struct task_struct **tsk;
338 int threads = map->bparam.threads;
339 int node = map->bparam.node;
> 340 int regular_threads, iova_threads;
341 u64 loops, iova_loops;
342 int ret = 0;
343 int i;
344
345 tsk = kmalloc_array(threads * 2, sizeof(*tsk), GFP_KERNEL);
346 if (!tsk)
347 return -ENOMEM;
348
349 get_device(map->dev);
350
351 /* Split threads between regular and IOVA testing */
352 regular_threads = threads / 2;
353 iova_threads = threads - regular_threads;
354
355 /* Create streaming DMA threads */
356 for (i = 0; i < regular_threads; i++) {
357 tsk[i] = kthread_create_on_node(benchmark_thread_streaming, map,
358 node, "dma-streaming-benchmark/%d", i);
359 if (IS_ERR(tsk[i])) {
360 pr_err("create dma_map thread failed\n");
361 ret = PTR_ERR(tsk[i]);
362 while (--i >= 0)
363 kthread_stop(tsk[i]);
364 goto out;
365 }
366
367 if (node != NUMA_NO_NODE)
368 kthread_bind_mask(tsk[i], cpumask_of_node(node));
369 }
370
371 /* Create IOVA DMA threads */
372 for (i = regular_threads; i < threads; i++) {
373 tsk[i] = kthread_create_on_node(benchmark_thread_iova, map,
374 node, "dma-iova-benchmark/%d", i - regular_threads);
375 if (IS_ERR(tsk[i])) {
376 pr_err("create dma_iova thread failed\n");
377 ret = PTR_ERR(tsk[i]);
378 while (--i >= 0)
379 kthread_stop(tsk[i]);
380 goto out;
381 }
382
383 if (node != NUMA_NO_NODE)
384 kthread_bind_mask(tsk[i], cpumask_of_node(node));
385 }
386
387 /* Clear previous benchmark values */
388 atomic64_set(&map->sum_map_100ns, 0);
389 atomic64_set(&map->sum_unmap_100ns, 0);
390 atomic64_set(&map->sum_sq_map, 0);
391 atomic64_set(&map->sum_sq_unmap, 0);
392 atomic64_set(&map->loops, 0);
393
394 atomic64_set(&map->sum_iova_alloc_100ns, 0);
395 atomic64_set(&map->sum_iova_link_100ns, 0);
396 atomic64_set(&map->sum_iova_sync_100ns, 0);
397 atomic64_set(&map->sum_iova_destroy_100ns, 0);
398 atomic64_set(&map->sum_sq_iova_alloc, 0);
399 atomic64_set(&map->sum_sq_iova_link, 0);
400 atomic64_set(&map->sum_sq_iova_sync, 0);
401 atomic64_set(&map->sum_sq_iova_destroy, 0);
402 atomic64_set(&map->iova_loops, 0);
403
404 /* Start all threads */
405 for (i = 0; i < threads; i++) {
406 get_task_struct(tsk[i]);
407 wake_up_process(tsk[i]);
408 }
409
410 msleep_interruptible(map->bparam.seconds * 1000);
411
412 /* Stop all threads */
413 for (i = 0; i < threads; i++) {
414 int kthread_ret = kthread_stop_put(tsk[i]);
415 if (kthread_ret)
416 ret = kthread_ret;
417 }
418
419 if (ret)
420 goto out;
421
422 /* Calculate streaming DMA statistics */
423 loops = atomic64_read(&map->loops);
424 if (loops > 0) {
425 u64 map_variance, unmap_variance;
426 u64 sum_map = atomic64_read(&map->sum_map_100ns);
427 u64 sum_unmap = atomic64_read(&map->sum_unmap_100ns);
428 u64 sum_sq_map = atomic64_read(&map->sum_sq_map);
429 u64 sum_sq_unmap = atomic64_read(&map->sum_sq_unmap);
430
431 map->bparam.avg_map_100ns = div64_u64(sum_map, loops);
432 map->bparam.avg_unmap_100ns = div64_u64(sum_unmap, loops);
433
434 map_variance = div64_u64(sum_sq_map, loops) -
435 map->bparam.avg_map_100ns * map->bparam.avg_map_100ns;
436 unmap_variance = div64_u64(sum_sq_unmap, loops) -
437 map->bparam.avg_unmap_100ns * map->bparam.avg_unmap_100ns;
438 map->bparam.map_stddev = int_sqrt64(map_variance);
439 map->bparam.unmap_stddev = int_sqrt64(unmap_variance);
440 }
441
442 /* Calculate IOVA statistics */
443 iova_loops = atomic64_read(&map->iova_loops);
444 if (iova_loops > 0) {
445 u64 alloc_variance, link_variance, sync_variance, destroy_variance;
446 u64 sum_alloc = atomic64_read(&map->sum_iova_alloc_100ns);
447 u64 sum_link = atomic64_read(&map->sum_iova_link_100ns);
448 u64 sum_sync = atomic64_read(&map->sum_iova_sync_100ns);
449 u64 sum_destroy = atomic64_read(&map->sum_iova_destroy_100ns);
450
451 map->bparam.avg_iova_alloc_100ns = div64_u64(sum_alloc, iova_loops);
452 map->bparam.avg_iova_link_100ns = div64_u64(sum_link, iova_loops);
453 map->bparam.avg_iova_sync_100ns = div64_u64(sum_sync, iova_loops);
454 map->bparam.avg_iova_destroy_100ns = div64_u64(sum_destroy, iova_loops);
455
456 alloc_variance = div64_u64(atomic64_read(&map->sum_sq_iova_alloc), iova_loops) -
457 map->bparam.avg_iova_alloc_100ns * map->bparam.avg_iova_alloc_100ns;
458 link_variance = div64_u64(atomic64_read(&map->sum_sq_iova_link), iova_loops) -
459 map->bparam.avg_iova_link_100ns * map->bparam.avg_iova_link_100ns;
460 sync_variance = div64_u64(atomic64_read(&map->sum_sq_iova_sync), iova_loops) -
461 map->bparam.avg_iova_sync_100ns * map->bparam.avg_iova_sync_100ns;
462 destroy_variance = div64_u64(atomic64_read(&map->sum_sq_iova_destroy), iova_loops) -
463 map->bparam.avg_iova_destroy_100ns * map->bparam.avg_iova_destroy_100ns;
464
465 map->bparam.iova_alloc_stddev = int_sqrt64(alloc_variance);
466 map->bparam.iova_link_stddev = int_sqrt64(link_variance);
467 map->bparam.iova_sync_stddev = int_sqrt64(sync_variance);
468 map->bparam.iova_destroy_stddev = int_sqrt64(destroy_variance);
469 }
470
471 out:
472 put_device(map->dev);
473 kfree(tsk);
474 return ret;
475 }
476
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
next prev parent reply other threads:[~2025-05-21 11:58 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-20 22:39 [PATCH 0/6] dma: fake-dma and IOVA tests Luis Chamberlain
2025-05-20 22:39 ` [PATCH 1/6] fake-dma: add fake dma engine driver Luis Chamberlain
2025-05-21 14:20 ` Robin Murphy
2025-05-21 17:07 ` Luis Chamberlain
2025-05-22 11:18 ` Marek Szyprowski
2025-05-22 16:59 ` Luis Chamberlain
2025-05-22 19:38 ` Luis Chamberlain
2025-05-21 23:40 ` kernel test robot
2025-05-20 22:39 ` [PATCH 2/6] dmatest: split dmatest_func() into helpers Luis Chamberlain
2025-05-20 22:39 ` [PATCH 3/6] dmatest: move printing to its own routine Luis Chamberlain
2025-05-21 14:41 ` Robin Murphy
2025-05-21 17:10 ` Luis Chamberlain
2025-05-21 22:26 ` kernel test robot
2025-05-20 22:39 ` [PATCH 4/6] dmatest: add IOVA tests Luis Chamberlain
2025-05-20 22:39 ` [PATCH 5/6] dma-mapping: benchmark: move validation parameters into a helper Luis Chamberlain
2025-05-20 22:39 ` [PATCH 6/6] dma-mapping: benchmark: add IOVA support Luis Chamberlain
2025-05-21 11:58 ` kernel test robot [this message]
2025-05-21 16:08 ` Robin Murphy
2025-05-21 17:17 ` Luis Chamberlain
2025-05-21 11:17 ` [PATCH 0/6] dma: fake-dma and IOVA tests Leon Romanovsky
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202505211909.CzQtqtu8-lkp@intel.com \
--to=lkp@intel.com \
--cc=alex.williamson@redhat.com \
--cc=chenxiang66@hisilicon.com \
--cc=dmaengine@vger.kernel.org \
--cc=gost.dev@samsung.com \
--cc=iommu@lists.linux.dev \
--cc=jgg@nvidia.com \
--cc=joel.granados@kernel.org \
--cc=leon@kernel.org \
--cc=linux-block@vger.kernel.org \
--cc=llvm@lists.linux.dev \
--cc=m.szyprowski@samsung.com \
--cc=mcgrof@kernel.org \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=robin.murphy@arm.com \
--cc=vkoul@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).