From: Mauro Carvalho Chehab <mchehab@s-opensource.com>
To: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Oliver Neukum <oneukum@suse.com>,
David Mosberger <davidm@egauge.net>,
Jaejoong Kim <climbbb.kim@gmail.com>,
Mauro Carvalho Chehab <mchehab@infradead.org>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
linux-rpi-kernel@lists.infradead.org,
Jonathan Corbet <corbet@lwn.net>,
Wolfram Sang <wsa-dev@sang-engineering.com>,
John Youn <johnyoun@synopsys.com>, Roger Quadros <rogerq@ti.com>,
Linux Doc Mailing List <linux-doc@vger.kernel.org>,
Linux Media Mailing List <linux-media@vger.kernel.org>,
linux-usb@vger.kernel.org
Subject: Re: [PATCH 22/22] usb: document that URB transfer_buffer should be aligned
Date: Thu, 30 Mar 2017 09:37:16 -0300 [thread overview]
Message-ID: <20170330093716.175c2ebe@vento.lan> (raw)
In-Reply-To: <6163606.hRdPdWigB9@avalon>
Em Thu, 30 Mar 2017 15:05:30 +0300
Laurent Pinchart <laurent.pinchart@ideasonboard.com> escreveu:
> Hi Mauro,
>
> On Thursday 30 Mar 2017 07:28:00 Mauro Carvalho Chehab wrote:
> > Em Thu, 30 Mar 2017 12:34:32 +0300 Laurent Pinchart escreveu:
> > > On Thursday 30 Mar 2017 10:11:31 Oliver Neukum wrote:
> > >> Am Donnerstag, den 30.03.2017, 01:15 +0300 schrieb Laurent Pinchart:
> > >>>> + may also override PAD bytes at the end of the
> > >>>> ``transfer_buffer``, up to the
> > >>>> + size of the CPU word.
> > >>>
> > >>> "May" is quite weak here. If some host controller drivers require
> > >>> buffers to be aligned, then it's an API requirement, and all buffers
> > >>> must be aligned. I'm not even sure I would mention that some host
> > >>> drivers require it, I think we should just state that the API requires
> > >>> buffers to be aligned.
> > >>
> > >> That effectively changes the API. Many network drivers are written with
> > >> the assumption that any contiguous buffer is valid. In fact you could
> > >> argue that those drivers are buggy and must use bounce buffers in those
> > >> cases.
> >
> > Blaming the dwc2 driver was my first approach, but such patch got nacked ;)
> >
> > Btw, the dwc2 driver has a routine that creates a temporary buffer if the
> > buffer pointer is not DWORD aligned. My first approach were to add
> > a logic there to also use the temporary buffer if the buffer size is
> > not DWORD aligned:
> > https://patchwork.linuxtv.org/patch/40093/
> >
> > While debugging this issue, I saw *a lot* of network-generated URB
> > traffic from RPi3 Ethernet port drivers that were using non-aligned
> > buffers and were subject to the temporary buffer conversion.
> >
> > My understanding here is that having a temporary bounce buffer sucks,
> > as the performance and latency are affected. So, I see the value of
> > adding this constraint to the API, pushing the task of getting
> > aligned buffers to the USB drivers,
>
> This could however degrade performances when the HCD can handle unaligned
> buffers.
No, it won't degrade performance out there, except if the driver
would need to do double buffering due to such constraint.
It will just waste memory.
>
> > but you're right: that means a lot of work, as all USB drivers should be
> > reviewed.
>
> If we decide in the end to push the constraint on the USB device driver side,
> then the dwc2 HCD driver should return an error when the buffer isn't
> correctly aligned.
Yeah, with such constraint, either the HCD drivers or the USB core
should complain.
There is another option: to add a field, filled by te USB driver,
telling the core that the buffer is aligned, e. g. drivers would
be doing something like:
urb->transfer_buffer_align = 4;
Something similar could be filled by the HCD driver:
hc_driver->transfer_buffer_align = 4;
The core will then check if the alignment required by the HCD driver
is compatible with the buffer alignment ensured by the USB driver.
If it doesn't, then the core would create a temporary buffer for the
transfers.
No idea about how easy/hard would be to implement something like
that.
In such case, it could make sense to generate a warning that
the driver should be fixed, or that the performance would
decrease due to double-buffering.
Thanks,
Mauro
next prev parent reply other threads:[~2017-03-30 12:37 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-29 18:54 [PATCH 01/22] driver-api/basics.rst: add device table header Mauro Carvalho Chehab
2017-03-29 18:54 ` [PATCH 02/22] docs-rst: convert usb docbooks to ReST Mauro Carvalho Chehab
2017-03-30 7:48 ` Markus Heiser
2017-03-30 8:21 ` Jani Nikula
2017-03-30 9:20 ` Markus Heiser
2017-03-30 10:12 ` Mauro Carvalho Chehab
2017-03-30 11:17 ` Markus Heiser
2017-03-30 11:35 ` Markus Heiser
2017-03-30 12:10 ` Mauro Carvalho Chehab
2017-03-31 14:46 ` Jonathan Corbet
2017-03-29 18:54 ` [PATCH 03/22] usb.rst: Enrich its ReST representation Mauro Carvalho Chehab
2017-03-29 18:54 ` [PATCH 04/22] gadget.rst: Enrich its ReST representation and add kernel-doc tag Mauro Carvalho Chehab
2017-03-30 7:01 ` Jani Nikula
2017-03-30 7:04 ` Jani Nikula
2017-03-30 9:29 ` Mauro Carvalho Chehab
2017-03-30 8:45 ` Mauro Carvalho Chehab
2017-03-29 18:54 ` [PATCH 05/22] writing_usb_driver.rst: Enrich its ReST representation Mauro Carvalho Chehab
2017-03-29 18:54 ` [PATCH 06/22] writing_musb_glue_layer.rst: " Mauro Carvalho Chehab
2017-03-29 18:54 ` [PATCH 07/22] usb/anchors.txt: convert to ReST and add to driver-api book Mauro Carvalho Chehab
2017-03-29 18:54 ` [PATCH 08/22] usb/bulk-streams.txt: " Mauro Carvalho Chehab
2017-03-29 18:54 ` [PATCH 09/22] usb/callbacks.txt: " Mauro Carvalho Chehab
2017-03-29 18:54 ` [PATCH 10/22] usb/power-management.txt: " Mauro Carvalho Chehab
2017-03-29 18:54 ` [PATCH 11/22] usb/dma.txt: " Mauro Carvalho Chehab
2017-03-29 18:54 ` [PATCH 12/22] error-codes.rst: " Mauro Carvalho Chehab
2017-03-29 18:54 ` [PATCH 13/22] usb/hotplug.txt: " Mauro Carvalho Chehab
2017-03-29 18:54 ` [PATCH 14/22] usb/persist.txt: " Mauro Carvalho Chehab
2017-03-29 18:54 ` [PATCH 15/22] usb/URB.txt: convert to ReST and update it Mauro Carvalho Chehab
2017-03-29 18:54 ` [PATCH 16/22] usb/gadget.rst: remove unused kernel-doc tags Mauro Carvalho Chehab
2017-03-29 18:54 ` [PATCH 17/22] usb.rst: get rid of some Sphinx errors Mauro Carvalho Chehab
2017-03-29 18:54 ` [PATCH 18/22] usb: get rid of some ReST doc build errors Mauro Carvalho Chehab
2017-03-29 18:54 ` [PATCH 19/22] usb: composite.h: fix two warnings when building docs Mauro Carvalho Chehab
2017-03-29 18:54 ` [PATCH 20/22] usb: gadget.h: be consistent at kernel doc macros Mauro Carvalho Chehab
2017-03-29 18:54 ` [PATCH 21/22] docs-rst: fix usb cross-references Mauro Carvalho Chehab
2017-03-29 18:54 ` [PATCH 22/22] usb: document that URB transfer_buffer should be aligned Mauro Carvalho Chehab
2017-03-29 22:15 ` Laurent Pinchart
2017-03-30 1:06 ` Mauro Carvalho Chehab
2017-03-30 9:38 ` Laurent Pinchart
2017-03-30 10:51 ` Mauro Carvalho Chehab
2017-03-30 8:11 ` Oliver Neukum
2017-03-30 9:34 ` Laurent Pinchart
2017-03-30 10:28 ` Mauro Carvalho Chehab
2017-03-30 11:07 ` David Laight
2017-03-30 12:05 ` Laurent Pinchart
2017-03-30 12:37 ` Mauro Carvalho Chehab [this message]
2017-03-30 12:56 ` Oliver Neukum
2017-03-30 14:26 ` Alan Stern
2017-03-30 15:45 ` Mauro Carvalho Chehab
2017-03-30 15:55 ` Alan Stern
2017-03-30 20:16 ` Laurent Pinchart
2017-03-30 20:57 ` Oliver Neukum
2017-03-31 14:07 ` Alan Stern
2017-03-31 1:26 ` [PATCH 01/22] driver-api/basics.rst: add device table header kbuild test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170330093716.175c2ebe@vento.lan \
--to=mchehab@s-opensource.com \
--cc=climbbb.kim@gmail.com \
--cc=corbet@lwn.net \
--cc=davidm@egauge.net \
--cc=gregkh@linuxfoundation.org \
--cc=johnyoun@synopsys.com \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-rpi-kernel@lists.infradead.org \
--cc=linux-usb@vger.kernel.org \
--cc=mchehab@infradead.org \
--cc=mchehab@kernel.org \
--cc=oneukum@suse.com \
--cc=rogerq@ti.com \
--cc=wsa-dev@sang-engineering.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox