Re: [PATCH v4 1/3] USB: use genalloc for USB HCs with local memory
From: Laurentiu Tudor
Date: Tue May 21 2019 - 07:06:48 EST
On 21.05.2019 11:16, Greg KH wrote:
> On Thu, May 16, 2019 at 02:47:19PM +0300, laurentiu.tudor@xxxxxxx wrote:
>> From: Laurentiu Tudor <laurentiu.tudor@xxxxxxx>
>>
>> For HCs that have local memory, replace the current DMA API usage
>> with a genalloc generic allocator to manage the mappings for these
>> devices.
>> This is in preparation for dropping the existing "coherent" dma
>> mem declaration APIs. Current implementation was relying on a short
>> circuit in the DMA API that in the end, was acting as an allocator
>> for these type of devices.
>>
>> For context, see thread here: https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flkml.org%2Flkml%2F2019%2F4%2F22%2F357&data=02%7C01%7Claurentiu.tudor%40nxp.com%7Cf5242fb28d154ff9653208d6ddc4b41c%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7C636940234237524499&sdata=KEEUP1KH%2BaraWcVKogeYBzrauh%2FFTzGjSxjk%2BuNozjA%3D&reserved=0
>>
>> Signed-off-by: Laurentiu Tudor <laurentiu.tudor@xxxxxxx>
>> ---
>> drivers/usb/core/buffer.c | 15 +++++++++++----
>> drivers/usb/host/ohci-hcd.c | 23 ++++++++++++++++++-----
>> include/linux/usb/hcd.h | 3 +++
>> 3 files changed, 32 insertions(+), 9 deletions(-)
>>
>> diff --git a/drivers/usb/core/buffer.c b/drivers/usb/core/buffer.c
>> index f641342cdec0..22a8f3f5679b 100644
>> --- a/drivers/usb/core/buffer.c
>> +++ b/drivers/usb/core/buffer.c
>> @@ -16,6 +16,7 @@
>> #include <linux/io.h>
>> #include <linux/dma-mapping.h>
>> #include <linux/dmapool.h>
>> +#include <linux/genalloc.h>
>> #include <linux/usb.h>
>> #include <linux/usb/hcd.h>
>>
>> @@ -124,10 +125,12 @@ void *hcd_buffer_alloc(
>> if (size == 0)
>> return NULL;
>>
>> + if (hcd->driver->flags & HCD_LOCAL_MEM)
>> + return gen_pool_dma_alloc(hcd->localmem_pool, size, dma);
>
> Does this patch now break things? hcd->localmem_pool at this point in
> time is NULL, so this call will fail. There's no chance for any host
> controller driver to actually set up this pool in this patch, so is
> bisection broken?
Unfortunately, yes. I could lump the patches together but I think
Christoph suggestion is much better.
> I think you fix this up in later patches, right?
Correct. The last 2 patches update the driver.
> And if so, why do we even need HCD_LOCAL_MEM anymore? Can't we just
> test for the presence of hcd->localmem_pool in order to determine which
> allocation method to use?
Sure. There are a few more places that need updates but no big deal.
---
Best Regards, Laurentiu