mirror of
https://github.com/torvalds/linux.git
synced 2026-05-26 08:02:27 +02:00
dma-direct: fix use of max_pfn
Calculate the correct physical address of the last byte of memory. Since max_pfn is in fact "the PFN of the first page after the highest system RAM in physical address space", the highest address that might be used for a DMA buffer is one byte below max_pfn << PAGE_SHIFT. This fix is unlikely to make any difference in practice. It's just that the current formula is slightly confusing. Signed-off-by: Petr Tesarik <ptesarik@suse.com> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> Link: https://lore.kernel.org/r/20260410113506.262579-1-ptesarik@suse.com
This commit is contained in:
parent
254f49634e
commit
22d0213e55
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user