Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965481AbbDWOtB (ORCPT ); Thu, 23 Apr 2015 10:49:01 -0400 Received: from iolanthe.rowland.org ([192.131.102.54]:52983 "HELO iolanthe.rowland.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S1758187AbbDWOs7 (ORCPT ); Thu, 23 Apr 2015 10:48:59 -0400 Date: Thu, 23 Apr 2015 10:48:58 -0400 (EDT) From: Alan Stern X-X-Sender: stern@iolanthe.rowland.org To: Johan Hovold cc: Greg Kroah-Hartman , Felipe Balbi , , , Stephen Warren , Thierry Reding , Alexandre Courbot , Subject: Re: [PATCH v2 2/3] USB: ehci-tegra: fix inefficient copy of unaligned buffers In-Reply-To: <1429798012-21916-3-git-send-email-johan@kernel.org> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1704 Lines: 50 On Thu, 23 Apr 2015, Johan Hovold wrote: > Make sure only to copy any actual data rather than the whole buffer, > when releasing the temporary buffer used for unaligned non-isochronous > transfers. > > Compile-tested only. > > Signed-off-by: Johan Hovold > --- > drivers/usb/host/ehci-tegra.c | 12 +++++++++--- > 1 file changed, 9 insertions(+), 3 deletions(-) > > diff --git a/drivers/usb/host/ehci-tegra.c b/drivers/usb/host/ehci-tegra.c > index ff9af29b4e9f..4031b372008e 100644 > --- a/drivers/usb/host/ehci-tegra.c > +++ b/drivers/usb/host/ehci-tegra.c > @@ -304,6 +304,7 @@ struct dma_aligned_buffer { > static void free_dma_aligned_buffer(struct urb *urb) > { > struct dma_aligned_buffer *temp; > + size_t length; > > if (!(urb->transfer_flags & URB_ALIGNED_TEMP_BUFFER)) > return; > @@ -311,9 +312,14 @@ static void free_dma_aligned_buffer(struct urb *urb) > temp = container_of(urb->transfer_buffer, > struct dma_aligned_buffer, data); > > - if (usb_urb_dir_in(urb)) > - memcpy(temp->old_xfer_buffer, temp->data, > - urb->transfer_buffer_length); > + if (usb_urb_dir_in(urb)) { > + if (usb_pipeisoc(urb->pipe)) > + length = urb->transfer_buffer_length; > + else > + length = urb->actual_length; > + > + memcpy(temp->old_xfer_buffer, temp->data, length); > + } > urb->transfer_buffer = temp->old_xfer_buffer; > kfree(temp->kmalloc_ptr); Acked-by: Alan Stern -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/