[PATCH] Fix uses of dma_max_pfn() when converting to a limiting address
James Bottomley
James.Bottomley at HansenPartnership.com
Thu Feb 13 13:07:01 EST 2014
On Thu, 2014-02-13 at 17:11 +0000, Russell King - ARM Linux wrote:
> On Thu, Feb 13, 2014 at 08:58:10AM -0800, James Bottomley wrote:
> > This doesn't really look like the right fix. You replaced dev->dma_mask
> > with a calculation on dev_max_pfn(). Since dev->dma_mask is always u64
> > and dev_max_pfn is supposed to be returning the pfn of the dma_mask, it
> > should unconditionally be 64 bits as well. Either that or it should
> > return dma_addr_t.
>
> My reasoning is that PFNs in the system are always of type "unsigned long"
> and therefore a function returning a pfn should have that type. If we
> overflow a PFN fitting in an unsigned long, we have lots of places which
> need fixing.
It's not intuitive to people who need the dma mask that they're supposed
to use dma_max_pfn() << PAGE_SHIFT but now they have to worry about the
casting and, if they don't get it right, nothing will warn or tell them.
what about a new macro, say dma_max_mask(dev) that just returns
(u64)dma_max_pfn() << PAGE_SHIFT?
James
More information about the linux-arm-kernel
mailing list