On Wed, Mar 29, 2017 at 11:06:53AM +0300, Felipe Balbi wrote: > > Hi, > > Peter Chen <hzpeterchen@xxxxxxxxx> writes: > >> > According to xHCI ch4.20 Scratchpad Buffers > >> > A Scratchpad Buffer is a PAGESIZE block of system memory > >> > located on a PAGESIZE boundary > >> > ... > >> > Software clears the Scratchpad Buffer to ‘0’ > >> > > >> > So, we need to use dma pool for PAGESIZE boundary buffer, and zeroed > >> > its region using dma_pool_zalloc. > >> > >> you're doing two separate things here... > >> > >> > Signed-off-by: Peter Chen <peter.chen@xxxxxxx> > >> > --- > >> > drivers/usb/host/xhci-mem.c | 21 +++++++++++++++------ > >> > drivers/usb/host/xhci.h | 1 + > >> > 2 files changed, 16 insertions(+), 6 deletions(-) > >> > > >> > diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c > >> > index 22a03b7..56aa0a6 100644 > >> > --- a/drivers/usb/host/xhci-mem.c > >> > +++ b/drivers/usb/host/xhci-mem.c > >> > @@ -1710,12 +1710,18 @@ static int scratchpad_alloc(struct xhci_hcd *xhci, gfp_t flags) > >> > goto fail_sp3; > >> > > >> > xhci->dcbaa->dev_context_ptrs[0] = cpu_to_le64(xhci->scratchpad->sp_dma); > >> > + > >> > + xhci->scratchpad_pool = dma_pool_create("xhci scratchpad buffer pool", > >> > + dev, xhci->page_size, > >> > + xhci->page_size, xhci->page_size); > >> > >> adding a DMA pool here, and ... > >> > >> > + if (!xhci->scratchpad_pool) > >> > + goto fail_sp4; > >> > + > >> > for (i = 0; i < num_sp; i++) { > >> > dma_addr_t dma; > >> > - void *buf = dma_alloc_coherent(dev, xhci->page_size, &dma, > >> > - flags); > >> > + void *buf = dma_pool_zalloc(xhci->scratchpad_pool, flags, &dma); > >> > >> ... fixing a possible bug here. > >> > > > > I know it is two things, but after the dma pool is introduced, we need a > > new API to allocate memory, do you want to me use dma_pool_alloc first, > > then, change it to use dma_pool_zalloc at another patch? I am ok to do > > that. > > the other way around. First you patch dma_alloc_coherent() to > dma_zalloc_coherent() and that could go in during the -rc and possibly > get a stable tag, since spec requires kernel to zero the memory area. > > -- > balbi In fact, it fixes two things at spec, the other thing is the scratchpad buffer needs to be page_size boundary. I will send these two fixes first. -- Best Regards, Peter Chen -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html