[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <00a138f0-3651-5441-7241-5f02956b6c2c@nxp.com>
Date: Mon, 28 Oct 2019 10:55:05 +0000
From: Laurentiu Tudor <laurentiu.tudor@....com>
To: Jonathan Lemon <jlemon@...gsvamp.com>
CC: "hch@....de" <hch@....de>, "joro@...tes.org" <joro@...tes.org>,
Ioana Ciocoi Radulescu <ruxandra.radulescu@....com>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
"iommu@...ts.linux-foundation.org" <iommu@...ts.linux-foundation.org>,
"netdev@...r.kernel.org" <netdev@...r.kernel.org>,
Ioana Ciornei <ioana.ciornei@....com>,
Leo Li <leoyang.li@....com>,
"robin.murphy@....com" <robin.murphy@....com>,
Diana Madalina Craciun <diana.craciun@....com>,
"davem@...emloft.net" <davem@...emloft.net>,
Madalin Bucur <madalin.bucur@....com>
Subject: Re: [PATCH v2 3/3] dpaa2_eth: use new unmap and sync dma api variants
Hi Jonathan,
On 25.10.2019 19:12, Jonathan Lemon wrote:
>
>
> On 24 Oct 2019, at 5:41, Laurentiu Tudor wrote:
>
>> From: Laurentiu Tudor <laurentiu.tudor@....com>
>>
>> Convert this driver to usage of the newly introduced dma unmap and
>> sync DMA APIs. This will get rid of the unsupported direct usage of
>> iommu_iova_to_phys() API.
>>
>> Signed-off-by: Laurentiu Tudor <laurentiu.tudor@....com>
>> ---
>> .../net/ethernet/freescale/dpaa2/dpaa2-eth.c | 40 +++++++------------
>> .../net/ethernet/freescale/dpaa2/dpaa2-eth.h | 1 -
>> 2 files changed, 15 insertions(+), 26 deletions(-)
>>
>> diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
>> b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
>> index 19379bae0144..8c3391e6e598 100644
>> --- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
>> +++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
>> @@ -29,16 +29,6 @@ MODULE_LICENSE("Dual BSD/GPL");
>> MODULE_AUTHOR("Freescale Semiconductor, Inc");
>> MODULE_DESCRIPTION("Freescale DPAA2 Ethernet Driver");
>>
>> -static void *dpaa2_iova_to_virt(struct iommu_domain *domain,
>> - dma_addr_t iova_addr)
>> -{
>> - phys_addr_t phys_addr;
>> -
>> - phys_addr = domain ? iommu_iova_to_phys(domain, iova_addr) :
>> iova_addr;
>> -
>> - return phys_to_virt(phys_addr);
>> -}
>> -
>> static void validate_rx_csum(struct dpaa2_eth_priv *priv,
>> u32 fd_status,
>> struct sk_buff *skb)
>> @@ -85,9 +75,10 @@ static void free_rx_fd(struct dpaa2_eth_priv *priv,
>> sgt = vaddr + dpaa2_fd_get_offset(fd);
>> for (i = 1; i < DPAA2_ETH_MAX_SG_ENTRIES; i++) {
>> addr = dpaa2_sg_get_addr(&sgt[i]);
>> - sg_vaddr = dpaa2_iova_to_virt(priv->iommu_domain, addr);
>> - dma_unmap_page(dev, addr, DPAA2_ETH_RX_BUF_SIZE,
>> - DMA_BIDIRECTIONAL);
>> + sg_vaddr = page_to_virt
>> + (dma_unmap_page_desc(dev, addr,
>> + DPAA2_ETH_RX_BUF_SIZE,
>> + DMA_BIDIRECTIONAL));
>
> This is doing virt -> page -> virt. Why not just have the new
> function return the VA corresponding to the addr, which would
> match the other functions?
I'd really like that as it would get rid of the page_to_virt() calls but
it will break the symmetry with the dma_map_page() API. I'll let the
maintainers decide.
---
Best Regards, Laurentiu
Powered by blists - more mailing lists