* Re: [PATCH 5/6] dma-mapping: Allow batched DMA sync operations if supported by the arch [not found] <20251219053658.84978-6-21cnbao@gmail.com> @ 2025-12-20 17:37 ` kernel test robot 2025-12-21 5:15 ` Barry Song 2025-12-22 12:43 ` kernel test robot 1 sibling, 1 reply; 3+ messages in thread From: kernel test robot @ 2025-12-20 17:37 UTC (permalink / raw) To: Barry Song, catalin.marinas, m.szyprowski, robin.murphy, will Cc: llvm, oe-kbuild-all, ada.coupriediaz, anshuman.khandual, ardb, iommu, linux-arm-kernel, linux-kernel, maz, ryan.roberts, surenb, v-songbaohua, zhengtangquan Hi Barry, kernel test robot noticed the following build errors: [auto build test ERROR on linus/master] [also build test ERROR on next-20251219] [cannot apply to arm64/for-next/core v6.16-rc1] [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/Barry-Song/arm64-Provide-dcache_by_myline_op_nosync-helper/20251219-195810 base: linus/master patch link: https://lore.kernel.org/r/20251219053658.84978-6-21cnbao%40gmail.com patch subject: [PATCH 5/6] dma-mapping: Allow batched DMA sync operations if supported by the arch config: x86_64-kexec (https://download.01.org/0day-ci/archive/20251220/202512201836.f6KX6WMH-lkp@intel.com/config) compiler: clang version 20.1.8 (https://github.com/llvm/llvm-project 87f0227cb60147a26a1eeb4fb06e3b505e9c7261) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251220/202512201836.f6KX6WMH-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/202512201836.f6KX6WMH-lkp@intel.com/ All errors (new ones prefixed by >>): >> kernel/dma/direct.c:456:4: error: call to undeclared function 'dma_direct_unmap_phys_batch_add'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] 456 | dma_direct_unmap_phys_batch_add(dev, sg->dma_address, | ^ kernel/dma/direct.c:456:4: note: did you mean 'dma_direct_unmap_phys'? kernel/dma/direct.h:188:20: note: 'dma_direct_unmap_phys' declared here 188 | static inline void dma_direct_unmap_phys(struct device *dev, dma_addr_t addr, | ^ >> kernel/dma/direct.c:484:22: error: call to undeclared function 'dma_direct_map_phys_batch_add'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] 484 | sg->dma_address = dma_direct_map_phys_batch_add(dev, sg_phys(sg), | ^ 2 errors generated. vim +/dma_direct_unmap_phys_batch_add +456 kernel/dma/direct.c 439 440 /* 441 * Unmaps segments, except for ones marked as pci_p2pdma which do not 442 * require any further action as they contain a bus address. 443 */ 444 void dma_direct_unmap_sg(struct device *dev, struct scatterlist *sgl, 445 int nents, enum dma_data_direction dir, unsigned long attrs) 446 { 447 struct scatterlist *sg; 448 int i; 449 bool need_sync = false; 450 451 for_each_sg(sgl, sg, nents, i) { 452 if (sg_dma_is_bus_address(sg)) { 453 sg_dma_unmark_bus_address(sg); 454 } else { 455 need_sync = true; > 456 dma_direct_unmap_phys_batch_add(dev, sg->dma_address, 457 sg_dma_len(sg), dir, attrs); 458 } 459 } 460 if (need_sync && !dev_is_dma_coherent(dev)) 461 arch_sync_dma_batch_flush(); 462 } 463 #endif 464 465 int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl, int nents, 466 enum dma_data_direction dir, unsigned long attrs) 467 { 468 struct pci_p2pdma_map_state p2pdma_state = {}; 469 struct scatterlist *sg; 470 int i, ret; 471 bool need_sync = false; 472 473 for_each_sg(sgl, sg, nents, i) { 474 switch (pci_p2pdma_state(&p2pdma_state, dev, sg_page(sg))) { 475 case PCI_P2PDMA_MAP_THRU_HOST_BRIDGE: 476 /* 477 * Any P2P mapping that traverses the PCI host bridge 478 * must be mapped with CPU physical address and not PCI 479 * bus addresses. 480 */ 481 break; 482 case PCI_P2PDMA_MAP_NONE: 483 need_sync = true; > 484 sg->dma_address = dma_direct_map_phys_batch_add(dev, sg_phys(sg), 485 sg->length, dir, attrs); 486 if (sg->dma_address == DMA_MAPPING_ERROR) { 487 ret = -EIO; 488 goto out_unmap; 489 } 490 break; 491 case PCI_P2PDMA_MAP_BUS_ADDR: 492 sg->dma_address = pci_p2pdma_bus_addr_map( 493 p2pdma_state.mem, sg_phys(sg)); 494 sg_dma_len(sg) = sg->length; 495 sg_dma_mark_bus_address(sg); 496 continue; 497 default: 498 ret = -EREMOTEIO; 499 goto out_unmap; 500 } 501 sg_dma_len(sg) = sg->length; 502 } 503 504 if (need_sync && !dev_is_dma_coherent(dev)) 505 arch_sync_dma_batch_flush(); 506 return nents; 507 508 out_unmap: 509 dma_direct_unmap_sg(dev, sgl, i, dir, attrs | DMA_ATTR_SKIP_CPU_SYNC); 510 return ret; 511 } 512 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 5/6] dma-mapping: Allow batched DMA sync operations if supported by the arch 2025-12-20 17:37 ` [PATCH 5/6] dma-mapping: Allow batched DMA sync operations if supported by the arch kernel test robot @ 2025-12-21 5:15 ` Barry Song 0 siblings, 0 replies; 3+ messages in thread From: Barry Song @ 2025-12-21 5:15 UTC (permalink / raw) To: lkp Cc: 21cnbao, ada.coupriediaz, anshuman.khandual, ardb, catalin.marinas, iommu, linux-arm-kernel, linux-kernel, llvm, m.szyprowski, maz, oe-kbuild-all, robin.murphy, ryan.roberts, surenb, v-songbaohua, will, zhengtangquan > > All errors (new ones prefixed by >>): > > >> kernel/dma/direct.c:456:4: error: call to undeclared function 'dma_direct_unmap_phys_batch_add'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] > 456 | dma_direct_unmap_phys_batch_add(dev, sg->dma_address, > | ^ > kernel/dma/direct.c:456:4: note: did you mean 'dma_direct_unmap_phys'? > kernel/dma/direct.h:188:20: note: 'dma_direct_unmap_phys' declared here > 188 | static inline void dma_direct_unmap_phys(struct device *dev, dma_addr_t addr, > | ^ > >> kernel/dma/direct.c:484:22: error: call to undeclared function 'dma_direct_map_phys_batch_add'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] > 484 | sg->dma_address = dma_direct_map_phys_batch_add(dev, sg_phys(sg), > | ^ > 2 errors generated. > > Thanks very much for the report. Can you please check if the below diff fix the build issue? From 5541aa1efa19777e435c9f3cca7cd2c6a490d9f1 Mon Sep 17 00:00:00 2001 From: Barry Song <v-songbaohua@oppo.com> Date: Sun, 21 Dec 2025 13:09:36 +0800 Subject: [PATCH] kernel/dma: Fix build errors for dma_direct_map_phys Reported-by: kernel test robot <lkp@intel.com> Closes: https://lore.kernel.org/oe-kbuild-all/202512201836.f6KX6WMH-lkp@intel.com/ Signed-off-by: Barry Song <v-songbaohua@oppo.com> --- kernel/dma/direct.h | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/kernel/dma/direct.h b/kernel/dma/direct.h index a211bab26478..bcc398b5aa6b 100644 --- a/kernel/dma/direct.h +++ b/kernel/dma/direct.h @@ -138,8 +138,7 @@ static inline dma_addr_t __dma_direct_map_phys(struct device *dev, return DMA_MAPPING_ERROR; } -#ifdef CONFIG_ARCH_WANT_BATCHED_DMA_SYNC -static inline dma_addr_t dma_direct_map_phys_batch_add(struct device *dev, +static inline dma_addr_t dma_direct_map_phys(struct device *dev, phys_addr_t phys, size_t size, enum dma_data_direction dir, unsigned long attrs) { @@ -147,13 +146,13 @@ static inline dma_addr_t dma_direct_map_phys_batch_add(struct device *dev, if (dma_addr != DMA_MAPPING_ERROR && !dev_is_dma_coherent(dev) && !(attrs & (DMA_ATTR_SKIP_CPU_SYNC | DMA_ATTR_MMIO))) - arch_sync_dma_for_device_batch_add(phys, size, dir); + arch_sync_dma_for_device(phys, size, dir); return dma_addr; } -#endif -static inline dma_addr_t dma_direct_map_phys(struct device *dev, +#ifdef CONFIG_ARCH_WANT_BATCHED_DMA_SYNC +static inline dma_addr_t dma_direct_map_phys_batch_add(struct device *dev, phys_addr_t phys, size_t size, enum dma_data_direction dir, unsigned long attrs) { @@ -161,13 +160,20 @@ static inline dma_addr_t dma_direct_map_phys(struct device *dev, if (dma_addr != DMA_MAPPING_ERROR && !dev_is_dma_coherent(dev) && !(attrs & (DMA_ATTR_SKIP_CPU_SYNC | DMA_ATTR_MMIO))) - arch_sync_dma_for_device(phys, size, dir); + arch_sync_dma_for_device_batch_add(phys, size, dir); return dma_addr; } +#else +static inline dma_addr_t dma_direct_map_phys_batch_add(struct device *dev, + phys_addr_t phys, size_t size, enum dma_data_direction dir, + unsigned long attrs) +{ + return dma_direct_map_phys(dev, phys, size, dir, attrs); +} +#endif -#ifdef CONFIG_ARCH_WANT_BATCHED_DMA_SYNC -static inline void dma_direct_unmap_phys_batch_add(struct device *dev, dma_addr_t addr, +static inline void dma_direct_unmap_phys(struct device *dev, dma_addr_t addr, size_t size, enum dma_data_direction dir, unsigned long attrs) { phys_addr_t phys; @@ -178,14 +184,14 @@ static inline void dma_direct_unmap_phys_batch_add(struct device *dev, dma_addr_ phys = dma_to_phys(dev, addr); if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC)) - dma_direct_sync_single_for_cpu_batch_add(dev, addr, size, dir); + dma_direct_sync_single_for_cpu(dev, addr, size, dir); swiotlb_tbl_unmap_single(dev, phys, size, dir, attrs | DMA_ATTR_SKIP_CPU_SYNC); } -#endif -static inline void dma_direct_unmap_phys(struct device *dev, dma_addr_t addr, +#ifdef CONFIG_ARCH_WANT_BATCHED_DMA_SYNC +static inline void dma_direct_unmap_phys_batch_add(struct device *dev, dma_addr_t addr, size_t size, enum dma_data_direction dir, unsigned long attrs) { phys_addr_t phys; @@ -196,9 +202,17 @@ static inline void dma_direct_unmap_phys(struct device *dev, dma_addr_t addr, phys = dma_to_phys(dev, addr); if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC)) - dma_direct_sync_single_for_cpu(dev, addr, size, dir); + dma_direct_sync_single_for_cpu_batch_add(dev, addr, size, dir); swiotlb_tbl_unmap_single(dev, phys, size, dir, attrs | DMA_ATTR_SKIP_CPU_SYNC); } +#else +static inline void dma_direct_unmap_phys_batch_add(struct device *dev, dma_addr_t addr, + size_t size, enum dma_data_direction dir, unsigned long attrs) +{ + dma_direct_unmap_phys(dev, addr, size, dir, attrs); +} +#endif + #endif /* _KERNEL_DMA_DIRECT_H */ -- 2.39.3 (Apple Git-146) Thanks Barry ^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH 5/6] dma-mapping: Allow batched DMA sync operations if supported by the arch [not found] <20251219053658.84978-6-21cnbao@gmail.com> 2025-12-20 17:37 ` [PATCH 5/6] dma-mapping: Allow batched DMA sync operations if supported by the arch kernel test robot @ 2025-12-22 12:43 ` kernel test robot 1 sibling, 0 replies; 3+ messages in thread From: kernel test robot @ 2025-12-22 12:43 UTC (permalink / raw) To: Barry Song, catalin.marinas, m.szyprowski, robin.murphy, will Cc: llvm, oe-kbuild-all, ada.coupriediaz, anshuman.khandual, ardb, iommu, linux-arm-kernel, linux-kernel, maz, ryan.roberts, surenb, v-songbaohua, zhengtangquan Hi Barry, kernel test robot noticed the following build errors: [auto build test ERROR on linus/master] [also build test ERROR on v6.19-rc2 next-20251219] [cannot apply to arm64/for-next/core] [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/Barry-Song/arm64-Provide-dcache_by_myline_op_nosync-helper/20251219-195810 base: linus/master patch link: https://lore.kernel.org/r/20251219053658.84978-6-21cnbao%40gmail.com patch subject: [PATCH 5/6] dma-mapping: Allow batched DMA sync operations if supported by the arch config: i386-buildonly-randconfig-006-20251222 (https://download.01.org/0day-ci/archive/20251222/202512222029.Dd6Vs1Eg-lkp@intel.com/config) compiler: clang version 20.1.8 (https://github.com/llvm/llvm-project 87f0227cb60147a26a1eeb4fb06e3b505e9c7261) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251222/202512222029.Dd6Vs1Eg-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/202512222029.Dd6Vs1Eg-lkp@intel.com/ All errors (new ones prefixed by >>): >> kernel/dma/direct.c:456:4: error: call to undeclared function 'dma_direct_unmap_phys_batch_add'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] 456 | dma_direct_unmap_phys_batch_add(dev, sg->dma_address, | ^ kernel/dma/direct.c:456:4: note: did you mean 'dma_direct_unmap_phys'? kernel/dma/direct.h:188:20: note: 'dma_direct_unmap_phys' declared here 188 | static inline void dma_direct_unmap_phys(struct device *dev, dma_addr_t addr, | ^ >> kernel/dma/direct.c:484:22: error: call to undeclared function 'dma_direct_map_phys_batch_add'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] 484 | sg->dma_address = dma_direct_map_phys_batch_add(dev, sg_phys(sg), | ^ 2 errors generated. vim +/dma_direct_unmap_phys_batch_add +456 kernel/dma/direct.c 439 440 /* 441 * Unmaps segments, except for ones marked as pci_p2pdma which do not 442 * require any further action as they contain a bus address. 443 */ 444 void dma_direct_unmap_sg(struct device *dev, struct scatterlist *sgl, 445 int nents, enum dma_data_direction dir, unsigned long attrs) 446 { 447 struct scatterlist *sg; 448 int i; 449 bool need_sync = false; 450 451 for_each_sg(sgl, sg, nents, i) { 452 if (sg_dma_is_bus_address(sg)) { 453 sg_dma_unmark_bus_address(sg); 454 } else { 455 need_sync = true; > 456 dma_direct_unmap_phys_batch_add(dev, sg->dma_address, 457 sg_dma_len(sg), dir, attrs); 458 } 459 } 460 if (need_sync && !dev_is_dma_coherent(dev)) 461 arch_sync_dma_batch_flush(); 462 } 463 #endif 464 465 int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl, int nents, 466 enum dma_data_direction dir, unsigned long attrs) 467 { 468 struct pci_p2pdma_map_state p2pdma_state = {}; 469 struct scatterlist *sg; 470 int i, ret; 471 bool need_sync = false; 472 473 for_each_sg(sgl, sg, nents, i) { 474 switch (pci_p2pdma_state(&p2pdma_state, dev, sg_page(sg))) { 475 case PCI_P2PDMA_MAP_THRU_HOST_BRIDGE: 476 /* 477 * Any P2P mapping that traverses the PCI host bridge 478 * must be mapped with CPU physical address and not PCI 479 * bus addresses. 480 */ 481 break; 482 case PCI_P2PDMA_MAP_NONE: 483 need_sync = true; > 484 sg->dma_address = dma_direct_map_phys_batch_add(dev, sg_phys(sg), 485 sg->length, dir, attrs); 486 if (sg->dma_address == DMA_MAPPING_ERROR) { 487 ret = -EIO; 488 goto out_unmap; 489 } 490 break; 491 case PCI_P2PDMA_MAP_BUS_ADDR: 492 sg->dma_address = pci_p2pdma_bus_addr_map( 493 p2pdma_state.mem, sg_phys(sg)); 494 sg_dma_len(sg) = sg->length; 495 sg_dma_mark_bus_address(sg); 496 continue; 497 default: 498 ret = -EREMOTEIO; 499 goto out_unmap; 500 } 501 sg_dma_len(sg) = sg->length; 502 } 503 504 if (need_sync && !dev_is_dma_coherent(dev)) 505 arch_sync_dma_batch_flush(); 506 return nents; 507 508 out_unmap: 509 dma_direct_unmap_sg(dev, sgl, i, dir, attrs | DMA_ATTR_SKIP_CPU_SYNC); 510 return ret; 511 } 512 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-12-22 12:43 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20251219053658.84978-6-21cnbao@gmail.com>
2025-12-20 17:37 ` [PATCH 5/6] dma-mapping: Allow batched DMA sync operations if supported by the arch kernel test robot
2025-12-21 5:15 ` Barry Song
2025-12-22 12:43 ` 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