[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v1 08/16] kmsan: convert kmsan_handle_dma to use physical addresses
On Thu, Aug 07, 2025 at 09:21:15AM -0300, Jason Gunthorpe wrote: > On Mon, Aug 04, 2025 at 03:42:42PM +0300, Leon Romanovsky wrote: > > From: Leon Romanovsky <leonro@xxxxxxxxxx> > > > > Convert the KMSAN DMA handling function from page-based to physical > > address-based interface. > > > > The refactoring renames kmsan_handle_dma() parameters from accepting > > (struct page *page, size_t offset, size_t size) to (phys_addr_t phys, > > size_t size). A PFN_VALID check is added to prevent KMSAN operations > > on non-page memory, preventing from non struct page backed address, > > > > As part of this change, support for highmem addresses is implemented > > using kmap_local_page() to handle both lowmem and highmem regions > > properly. All callers throughout the codebase are updated to use the > > new phys_addr_t based interface. > > Use the function Matthew pointed at kmap_local_pfn() > > Maybe introduce the kmap_local_phys() he suggested too. At this point it gives nothing. > > > /* Helper function to handle DMA data transfers. */ > > -void kmsan_handle_dma(struct page *page, size_t offset, size_t size, > > +void kmsan_handle_dma(phys_addr_t phys, size_t size, > > enum dma_data_direction dir) > > { > > u64 page_offset, to_go, addr; > > + struct page *page; > > + void *kaddr; > > > > - if (PageHighMem(page)) > > + if (!pfn_valid(PHYS_PFN(phys))) > > return; > > Not needed, the caller must pass in a phys that is kmap > compatible. Maybe just leave a comment. FWIW today this is also not > checking for P2P or DEVICE non-kmap struct pages either, so it should > be fine without checks. It is not true as we will call to kmsan_handle_dma() unconditionally in dma_map_phys(). The reason to it is that kmsan_handle_dma() is guarded with debug kconfig options and cost of pfn_valid() can be accommodated in that case. It gives more clean DMA code. 155 dma_addr_t dma_map_phys(struct device *dev, phys_addr_t phys, size_t size, 156 enum dma_data_direction dir, unsigned long attrs) 157 { <...> 187 188 kmsan_handle_dma(phys, size, dir); 189 trace_dma_map_phys(dev, phys, addr, size, dir, attrs); 190 debug_dma_map_phys(dev, phys, size, dir, addr, attrs); 191 192 return addr; 193 } 194 EXPORT_SYMBOL_GPL(dma_map_phys); So let's keep this patch as is. Thanks
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |