Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider: - [Medium] drm/amdkfd: dma_map_page() fails on DAX ZONE_DEVICE pages with DMA_API_DEBUG --
commit 0eacef2f328edc8a87aa6b82601cf66a9676e3be Author: Matthew Krebs <[email protected]> drm/amdkfd: Only take the VRAM path for KFD device pages in svm_range_dma_map_dev This commit restricts the VRAM mapping branch in svm_range_dma_map_dev() to device-private and device-coherent pages so that other ZONE_DEVICE pages, such as fsdax and device-dax mappings, are DMA mapped instead of dereferencing a potentially NULL prange->svm_bo. > diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c > b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c > index ed5e3318877be..354184829e1d6 100644 > --- a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c > +++ b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c > @@ -180,7 +180,12 @@ svm_range_dma_map_dev(struct amdgpu_device *adev, struct > svm_range *prange, > dma_unmap_page(dev, addr[i], PAGE_SIZE, dir); > > page = hmm_pfn_to_page(hmm_pfns[i]); > - if (is_zone_device_page(page)) { > + /* > + * Only KFD's own VRAM pages (device private or device coherent) > + * take the VRAM path. Other ZONE_DEVICE pages, such as fsdax or > + * device-dax memory, are system memory and are DMA mapped > below. > + */ > + if (is_device_private_page(page) || > is_device_coherent_page(page)) { [Severity: Medium] When fsdax (MEMORY_DEVICE_FS_DAX) or device-dax (MEMORY_DEVICE_GENERIC) pages skip this branch in drivers/gpu/drm/amd/amdkfd/kfd_svm.c:svm_range_dma_map_dev(), they fall through to dma_map_page(): drivers/gpu/drm/amd/amdkfd/kfd_svm.c:svm_range_dma_map_dev() { ... if (is_device_private_page(page) || is_device_coherent_page(page)) { ... continue; } addr[i] = dma_map_page(dev, page, 0, PAGE_SIZE, dir); ... } In kernel/dma/mapping.c:dma_map_page_attrs(), all ZONE_DEVICE pages are rejected when CONFIG_DMA_API_DEBUG is enabled: kernel/dma/mapping.c:dma_map_page_attrs() { ... if (IS_ENABLED(CONFIG_DMA_API_DEBUG) && WARN_ON_ONCE(is_zone_device_page(page))) return DMA_MAPPING_ERROR; ... } Won't mapping a fsdax or device-dax range through the KFD SVM ioctl (kfd_ioctl_svm() -> svm_ioctl() -> svm_range_set_attr() -> svm_range_validate_and_map() -> svm_range_dma_map() -> svm_range_dma_map_dev()) trigger this WARN_ON_ONCE() and fail with -ENOMEM when CONFIG_DMA_API_DEBUG is enabled? Should svm_range_dma_map_dev() and its unmap path use dma_map_phys() and dma_unmap_phys() (similar to hmm_dma_map_pfn() in mm/hmm.c) instead of dma_map_page() and dma_unmap_page() when mapping non-VRAM ZONE_DEVICE pages? -- Sashiko AI review ยท https://sashiko.dev/#/patchset/[email protected]?part=1
