mirror of
https://github.com/torvalds/linux.git
synced 2026-05-25 23:52:08 +02:00
dma-mapping fixes for Linux 7.1
Two minor updates for the DMA-mapping code, mainly fixing some rare corner cases (Petr Tesarik, Jianpeng Chang). -----BEGIN PGP SIGNATURE----- iHUEABYIAB0WIQSrngzkoBtlA8uaaJ+Jp1EFxbsSRAUCag/+/AAKCRCJp1EFxbsS RC9gAP4qM5M9S2WrUJBCoeQrhUrQajNBXN1HV3N+hncHcgkCUwEA2nJq1oETLONH UI4HDrtEBIUEXQgPWEmCj7krN5IYOw0= =I4my -----END PGP SIGNATURE----- Merge tag 'dma-mapping-7.1-2026-05-22' of git://git.kernel.org/pub/scm/linux/kernel/git/mszyprowski/linux Pull dma-mapping fixes from Marek Szyprowski: "Two minor updates for the DMA-mapping code, mainly fixing some rare corner cases (Petr Tesarik, Jianpeng Chang)" * tag 'dma-mapping-7.1-2026-05-22' of git://git.kernel.org/pub/scm/linux/kernel/git/mszyprowski/linux: dma-mapping: move dma_map_resource() sanity check into debug code dma-direct: fix use of max_pfn
This commit is contained in:
commit
1c04dcd891
|
|
@ -1251,7 +1251,14 @@ void debug_dma_map_phys(struct device *dev, phys_addr_t phys, size_t size,
|
|||
entry->direction = direction;
|
||||
entry->map_err_type = MAP_ERR_NOT_CHECKED;
|
||||
|
||||
if (!(attrs & DMA_ATTR_MMIO)) {
|
||||
if (attrs & DMA_ATTR_MMIO) {
|
||||
unsigned long pfn = PHYS_PFN(phys);
|
||||
|
||||
if (pfn_valid(pfn) && !PageReserved(pfn_to_page(pfn)))
|
||||
err_printk(dev, entry,
|
||||
"dma_map_resource called for RAM address %pa\n",
|
||||
&phys);
|
||||
} else {
|
||||
check_for_stack(dev, phys);
|
||||
|
||||
if (!PhysHighMem(phys))
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ static inline struct page *dma_direct_to_page(struct device *dev,
|
|||
|
||||
u64 dma_direct_get_required_mask(struct device *dev)
|
||||
{
|
||||
phys_addr_t phys = (phys_addr_t)(max_pfn - 1) << PAGE_SHIFT;
|
||||
phys_addr_t phys = ((phys_addr_t)max_pfn << PAGE_SHIFT) - 1;
|
||||
u64 max_dma = phys_to_dma_direct(dev, phys);
|
||||
|
||||
return (1ULL << (fls64(max_dma) - 1)) * 2 - 1;
|
||||
|
|
@ -553,7 +553,7 @@ int dma_direct_mmap(struct device *dev, struct vm_area_struct *vma,
|
|||
|
||||
int dma_direct_supported(struct device *dev, u64 mask)
|
||||
{
|
||||
u64 min_mask = (max_pfn - 1) << PAGE_SHIFT;
|
||||
u64 min_mask = ((u64)max_pfn << PAGE_SHIFT) - 1;
|
||||
|
||||
/*
|
||||
* Because 32-bit DMA masks are so common we expect every architecture
|
||||
|
|
|
|||
|
|
@ -365,10 +365,6 @@ EXPORT_SYMBOL(dma_unmap_sg_attrs);
|
|||
dma_addr_t dma_map_resource(struct device *dev, phys_addr_t phys_addr,
|
||||
size_t size, enum dma_data_direction dir, unsigned long attrs)
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_DMA_API_DEBUG) &&
|
||||
WARN_ON_ONCE(pfn_valid(PHYS_PFN(phys_addr))))
|
||||
return DMA_MAPPING_ERROR;
|
||||
|
||||
return dma_map_phys(dev, phys_addr, size, dir, attrs | DMA_ATTR_MMIO);
|
||||
}
|
||||
EXPORT_SYMBOL(dma_map_resource);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user