Re: [PATCH v2 3/3] dpaa2_eth: use new unmap and sync dma api variants

From: Laurentiu Tudor
Date: Mon Oct 28 2019 - 06:55:11 EST


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@xxxxxxx>
>>
>> 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@xxxxxxx>
>> ---
>> Â.../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