Re: [PATCH] [v6] net: emac: emac gigabit ethernet controller driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wednesday, August 3, 2016 4:24:22 PM CEST Timur Tabi wrote:
> Arnd Bergmann wrote:
> > As I said, this is inherently driver specific. If setting the 64-bit
> > mask fails, the driver itself needs to fall back to the 32-bit mask
> > so it can allocate buffers from ZONE_DMA instead of ZONE_NORMAL.
> 
> I just posted a v7 of my patch, but I forgot to fix the dma_set_mask 
> call.  I'll post a v8 soon, but before I do, what do you think of this:
> 
> /* The EMAC itself is capable of 64-bit DMA, so try that first. */
> ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
> if (ret) {
>          /* Some platforms may restrict the EMAC's address bus to less
>           * then the size of DDR. In this case, we need to try a
>           * smaller mask.  We could try every possible smaller mask,
>           * but that's overkill.  Instead, just fall to 32-bit, which
>           * should always work.
>           */
>          ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
>          if (ret) {
>                  dev_err(&pdev->dev, "could not set DMA mask\n");
>                  return ret;
>          }
> }

This is basically ok, but then I think you should pass GFP_DMA
or GFP_DMA32 to all allocations that the driver does after
the 64-bit mask fails, otherwise you get a significant overhead
in the bounce buffers.

For data that comes from the network stack, we have no choice
and always use bounce buffers for data that is beyond the mask.

	Arnd
--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [Linux for Sparc]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux