* [leon-rdma:dma-split-v1 17/17] drivers/vfio/pci/mlx5/cmd.c:368:22: error: use of undeclared identifier 'page_list'
@ 2024-04-30 17:29 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2024-04-30 17:29 UTC (permalink / raw)
To: Leon Romanovsky; +Cc: llvm, oe-kbuild-all
tree: https://git.kernel.org/pub/scm/linux/kernel/git/leon/linux-rdma.git dma-split-v1
head: b66ed91ccee0e8e645a07f54f0e39fe9ff4f03c9
commit: b66ed91ccee0e8e645a07f54f0e39fe9ff4f03c9 [17/17] vfio/mlx5: Convert vfio to use DMA link API
config: s390-defconfig (https://download.01.org/0day-ci/archive/20240501/202405010138.kzo9DCkJ-lkp@intel.com/config)
compiler: clang version 19.0.0git (https://github.com/llvm/llvm-project 37ae4ad0eef338776c7e2cffb3896153d43dcd90)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240501/202405010138.kzo9DCkJ-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/202405010138.kzo9DCkJ-lkp@intel.com/
All errors (new ones prefixed by >>):
In file included from drivers/vfio/pci/mlx5/cmd.h:10:
In file included from include/linux/vfio_pci_core.h:12:
In file included from include/linux/pci.h:37:
In file included from include/linux/device.h:32:
In file included from include/linux/device/driver.h:21:
In file included from include/linux/module.h:19:
In file included from include/linux/elf.h:6:
In file included from arch/s390/include/asm/elf.h:173:
In file included from arch/s390/include/asm/mmu_context.h:11:
In file included from arch/s390/include/asm/pgalloc.h:18:
In file included from include/linux/mm.h:2210:
include/linux/vmstat.h:508:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
508 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
| ~~~~~~~~~~~~~~~~~~~~~ ^
509 | item];
| ~~~~
include/linux/vmstat.h:515:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
515 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
| ~~~~~~~~~~~~~~~~~~~~~ ^
516 | NR_VM_NUMA_EVENT_ITEMS +
| ~~~~~~~~~~~~~~~~~~~~~~
include/linux/vmstat.h:522:36: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion]
522 | return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_"
| ~~~~~~~~~~~ ^ ~~~
include/linux/vmstat.h:527:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
527 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
| ~~~~~~~~~~~~~~~~~~~~~ ^
528 | NR_VM_NUMA_EVENT_ITEMS +
| ~~~~~~~~~~~~~~~~~~~~~~
include/linux/vmstat.h:536:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
536 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
| ~~~~~~~~~~~~~~~~~~~~~ ^
537 | NR_VM_NUMA_EVENT_ITEMS +
| ~~~~~~~~~~~~~~~~~~~~~~
In file included from drivers/vfio/pci/mlx5/cmd.c:6:
In file included from drivers/vfio/pci/mlx5/cmd.h:10:
In file included from include/linux/vfio_pci_core.h:12:
In file included from include/linux/pci.h:39:
In file included from include/linux/io.h:13:
In file included from arch/s390/include/asm/io.h:78:
include/asm-generic/io.h:547:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
547 | val = __raw_readb(PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:560:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
560 | val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr));
| ~~~~~~~~~~ ^
include/uapi/linux/byteorder/big_endian.h:37:59: note: expanded from macro '__le16_to_cpu'
37 | #define __le16_to_cpu(x) __swab16((__force __u16)(__le16)(x))
| ^
include/uapi/linux/swab.h:102:54: note: expanded from macro '__swab16'
102 | #define __swab16(x) (__u16)__builtin_bswap16((__u16)(x))
| ^
In file included from drivers/vfio/pci/mlx5/cmd.c:6:
In file included from drivers/vfio/pci/mlx5/cmd.h:10:
In file included from include/linux/vfio_pci_core.h:12:
In file included from include/linux/pci.h:39:
In file included from include/linux/io.h:13:
In file included from arch/s390/include/asm/io.h:78:
include/asm-generic/io.h:573:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
573 | val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr));
| ~~~~~~~~~~ ^
include/uapi/linux/byteorder/big_endian.h:35:59: note: expanded from macro '__le32_to_cpu'
35 | #define __le32_to_cpu(x) __swab32((__force __u32)(__le32)(x))
| ^
include/uapi/linux/swab.h:115:54: note: expanded from macro '__swab32'
115 | #define __swab32(x) (__u32)__builtin_bswap32((__u32)(x))
| ^
In file included from drivers/vfio/pci/mlx5/cmd.c:6:
In file included from drivers/vfio/pci/mlx5/cmd.h:10:
In file included from include/linux/vfio_pci_core.h:12:
In file included from include/linux/pci.h:39:
In file included from include/linux/io.h:13:
In file included from arch/s390/include/asm/io.h:78:
include/asm-generic/io.h:584:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
584 | __raw_writeb(value, PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:594:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
594 | __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:604:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
604 | __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:692:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
692 | readsb(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:700:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
700 | readsw(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:708:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
708 | readsl(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:717:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
717 | writesb(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:726:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
726 | writesw(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:735:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
735 | writesl(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
>> drivers/vfio/pci/mlx5/cmd.c:368:22: error: use of undeclared identifier 'page_list'
368 | dma_get_memory_type(page_list[0], &type);
| ^
>> drivers/vfio/pci/mlx5/cmd.c:374:2: error: use of undeclared identifier 'mtt'
374 | mtt = (__be64 *)MLX5_ADDR_OF(create_mkey_in, mkey_in, klm_pas_mtt);
| ^
drivers/vfio/pci/mlx5/cmd.c:378:22: error: use of undeclared identifier 'mtt'
378 | addr = be64_to_cpu(mtt[i]);
| ^
include/linux/byteorder/generic.h:93:21: note: expanded from macro 'be64_to_cpu'
93 | #define be64_to_cpu __be64_to_cpu
| ^
>> drivers/vfio/pci/mlx5/cmd.c:534:3: error: use of undeclared identifier 'to_fill'
534 | to_fill = min_t(unsigned int, to_alloc,
| ^
17 warnings and 4 errors generated.
vim +/page_list +368 drivers/vfio/pci/mlx5/cmd.c
356
357 static void unregister_dma_pages(struct mlx5_core_dev *mdev, u32 npages,
358 u32 *mkey_in, struct dma_iova_attrs *iova)
359 {
360 struct dma_memory_type type = {};
361 struct dma_iova_state state = {};
362 dma_addr_t addr;
363 bool use_iova;
364 int i;
365
366 WARN_ON_ONCE(iova->dir == DMA_NONE);
367
> 368 dma_get_memory_type(page_list[0], &type);
369 state.iova = iova;
370 state.type = &type;
371
372 use_iova = dma_can_use_iova(&state, PAGE_SIZE);
373
> 374 mtt = (__be64 *)MLX5_ADDR_OF(create_mkey_in, mkey_in, klm_pas_mtt);
375 if (use_iova)
376 dma_start_range(&state, false);
377 for (i = npages - 1; i >= 0; i--) {
378 addr = be64_to_cpu(mtt[i]);
379 if (use_iova)
380 dma_unlink_range(&state, addr, PAGE_SIZE);
381 else
382 dma_unmap_page_attrs(iova->dev, addr, PAGE_SIZE,
383 iova->dir, iova->attrs);
384 }
385 if (use_iova)
386 dma_end_range(&state, false);
387 dma_free_iova(iova);
388 }
389
390 static int register_dma_pages(struct mlx5_core_dev *mdev, u32 npages,
391 struct page **page_list, u32 *mkey_in,
392 struct dma_iova_attrs *iova)
393 {
394 struct dma_memory_type type = {};
395 struct dma_iova_state state = {};
396 dma_addr_t addr;
397 bool use_iova;
398 __be64 *mtt;
399 int i, err;
400
401 WARN_ON_ONCE(iova->dir == DMA_NONE);
402
403 iova->dev = mdev->device;
404 iova->size = npages * PAGE_SIZE;
405 err = dma_alloc_iova(iova);
406 if (err)
407 return err;
408
409 /*
410 * All VFIO pages are of the same type, and it is enough
411 * to check one page only
412 */
413 dma_get_memory_type(page_list[0], &type);
414 state.iova = iova;
415 state.type = &type;
416
417 use_iova = dma_can_use_iova(&state, PAGE_SIZE);
418
419 mtt = (__be64 *)MLX5_ADDR_OF(create_mkey_in, mkey_in, klm_pas_mtt);
420 if (use_iova)
421 dma_start_range(&state, true);
422 for (i = 0; i < npages; i++) {
423 if (use_iova)
424 addr = dma_link_range(&state, page_list[i],
425 i * PAGE_SIZE, PAGE_SIZE);
426 else
427 addr = dma_map_page_attrs(iova->dev, page_list[i], 0,
428 PAGE_SIZE, iova->dir,
429 iova->attrs);
430 if (dma_mapping_error(mdev->device, addr))
431 goto error;
432
433 *mtt++ = cpu_to_be64(addr);
434 }
435 if (use_iova)
436 dma_end_range(&state, true);
437
438 return 0;
439
440 error:
441 unregister_dma_pages(mdev, i, mkey_in, iova);
442 return -ENOMEM;
443 }
444
445 static int mlx5vf_dma_data_buffer(struct mlx5_vhca_data_buffer *buf)
446 {
447 struct mlx5vf_pci_core_device *mvdev = buf->migf->mvdev;
448 struct mlx5_core_dev *mdev = mvdev->mdev;
449 int ret;
450
451 lockdep_assert_held(&mvdev->state_mutex);
452 if (mvdev->mdev_detach)
453 return -ENOTCONN;
454
455 if (buf->mkey_in || !buf->npages)
456 return -EINVAL;
457
458 buf->mkey_in = alloc_mkey_in(buf->npages, buf->migf->pdn);
459 if (!buf->mkey_in)
460 return -ENOMEM;
461
462 ret = register_dma_pages(mdev, buf->npages, buf->page_list,
463 buf->mkey_in, &buf->iova);
464 if (ret)
465 goto err_register_dma;
466
467 ret = create_mkey(mdev, buf->npages, buf->mkey_in, &buf->mkey);
468 if (ret)
469 goto err_create_mkey;
470
471 return 0;
472
473 err_create_mkey:
474 unregister_dma_pages(mdev, buf->npages, buf->mkey_in, &buf->iova);
475 err_register_dma:
476 kvfree(buf->mkey_in);
477 return ret;
478 }
479
480 static void free_page_list(u32 npages, struct page **page_list)
481 {
482 int i;
483
484 /* Undo alloc_pages_bulk_array() */
485 for (i = npages - 1; i >= 0; i--)
486 __free_page(page_list[i]);
487
488 kvfree(page_list);
489 }
490
491 void mlx5vf_free_data_buffer(struct mlx5_vhca_data_buffer *buf)
492 {
493 struct mlx5vf_pci_core_device *mvdev = buf->migf->mvdev;
494 struct mlx5_core_dev *mdev = mvdev->mdev;
495
496 lockdep_assert_held(&mvdev->state_mutex);
497 WARN_ON(mvdev->mdev_detach);
498
499 if (buf->mkey_in) {
500 mlx5_core_destroy_mkey(mdev, buf->mkey);
501 unregister_dma_pages(mdev, buf->npages, buf->mkey_in, &buf->iova);
502 kvfree(buf->mkey_in);
503 }
504
505 free_page_list(buf->npages, buf->page_list);
506 kfree(buf);
507 }
508
509 static int mlx5vf_add_migration_pages(struct mlx5_vhca_data_buffer *buf,
510 unsigned int npages)
511 {
512 unsigned int to_alloc = npages;
513 size_t old_size, new_size;
514 struct page **page_list;
515 unsigned long filled;
516
517 old_size = buf->npages * sizeof(*buf->page_list);
518 new_size = old_size + to_alloc * sizeof(*buf->page_list);
519 page_list = kvrealloc(buf->page_list, old_size, new_size,
520 GFP_KERNEL_ACCOUNT | __GFP_ZERO);
521 if (!page_list)
522 return -ENOMEM;
523
524 buf->page_list = page_list;
525
526 do {
527 filled = alloc_pages_bulk_array(GFP_KERNEL_ACCOUNT, to_alloc,
528 buf->page_list + buf->npages);
529 if (!filled)
530 return -ENOMEM;
531
532 to_alloc -= filled;
533 buf->npages += filled;
> 534 to_fill = min_t(unsigned int, to_alloc,
535 PAGE_SIZE / sizeof(*buf->page_list));
536 } while (to_alloc > 0);
537
538 return 0;
539 }
540
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2024-04-30 17:29 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-04-30 17:29 [leon-rdma:dma-split-v1 17/17] drivers/vfio/pci/mlx5/cmd.c:368:22: error: use of undeclared identifier 'page_list' kernel test robot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox