Re: [PATCH v3 5/7] ARM: dma: Use dma_pfn_offset for dma address translation

From: Santosh Shilimkar
Date: Mon May 05 2014 - 17:44:13 EST


On Monday 05 May 2014 03:50 PM, Russell King - ARM Linux wrote:
> On Fri, May 02, 2014 at 11:05:16AM -0400, Santosh Shilimkar wrote:
>> On Friday 02 May 2014 10:58 AM, Russell King - ARM Linux wrote:
>>> On Thu, Apr 24, 2014 at 11:30:05AM -0400, Santosh Shilimkar wrote:
>>>> static inline void *dma_to_virt(struct device *dev, dma_addr_t addr)
>>>> {
>>>> - return (void *)__bus_to_virt((unsigned long)addr);
>>>> + if (!dev)
>>>> + return (void *)__bus_to_virt((unsigned long)addr);
>>>> + else
>>>> + return (void *)__bus_to_virt(__pfn_to_bus(dma_to_pfn(dev, addr)));
>>>
>>> This is quite horrendous. There's easier ways to do this... I assume
>>> you haven't looked at the assembler resulting from this at all with
>>> stuff like the p2v patching enabled?
>>>
>> I haven't. Will check.
>
> if (dev) {
> unsigned long pfn = dma_to_pfn(dev, addr);
>
> return phys_to_virt(__pfn_to_phys(pfn));
> }
>
> return (void *)__bus_to_virt((unsigned long)addr);
>
Thanks a lot Russell. Updated patch below for archive records.