From: David Brownell <david-b@pacbell.net>
To: Pete Zaitcev <zaitcev@redhat.com>
Cc: greg@kroah.com, arjanv@redhat.com, jgarzik@redhat.com,
tburke@redhat.com, linux-kernel@vger.kernel.org,
stern@rowland.harvard.edu, mdharm-usb@one-eyed-alien.net,
oliver@neukum.org
Subject: Re: drivers/block/ub.c
Date: Mon, 28 Jun 2004 08:05:10 -0700 [thread overview]
Message-ID: <40E033A6.60502@pacbell.net> (raw)
In-Reply-To: <20040627164327.06b74845@lembas.zaitcev.lan>
Pete Zaitcev wrote:
>>>+ * This is a serious infraction, caused by a deficiency in the
>>>+ * USB sg interface (usb_sg_wait()). ...
>>
>>Well, out with it then -- what deficiency would that be? :)
>
>
> There is no way to submit a URB and give page, offset, length as arguments.
Or a kitchen sink, either. Just map(page,offset) --> dma_addr
and pass that address, with the length ... no point in changing
the URB calls just for one driver. Especially when that driver
has so many other options already available, including your three:
> 0. Use bounce buffers and submit with kernel virtual address as argument.
> 1. Map everything yourself with "generic" DMA, then use URB_NO_TRANSFER_DMA_MAP.
> This includes reading the DMA mask from the controller device, and falling
> back if it is zero.
By "generic" presumably you really mean usb_buffer_map_sg()?
Remember, the "generic" DMA calls don't take arbitrary devices,
unless arch/platform code first gets modified to understand
that type of device. Only certain kinds of devices ... and
"usb devices" for some reason aren't on those lists.
That call is what's used inside the usb_sg_init() code. It solves
several nice-to-have-solved problems. You might even be able to
use sg_init just to allocate and init the URBs you'll submit, if
you're keen on minimizing your re-use of existing code.
If you only submit one URB at a time, and an IOMMU doesn't turn
your sglist into one dma buffer, you'd surely achieve your goal
of low performance. I've usually seen at most 10 MByte/sec with
that approach, vs more than 30 MByte/sec if the queue only empties
when there's no more data to transfer.
> 2. usb_sg_wait, which takes sg list but does not allow to submit anything
> and must be called from a process.
That doesn't make sense. But what you said later starts to: you want
to have "submit" separate from "wait" (or more likely, intercept a
final completion callback instead of having to wait_for_completion).
Pretty much like that comment in usb_sg_wait() describes as an
alternate implementation of the same notion ... :)
> Regardin #2 you say that ``that code isn't "very fresh and buggy", having
> been in use with all USB-Storage devices for over a year and a half'' and
> yet I observe that fairly serious fixes were applied just this week.
I have a hard time calling any bug "serious" when only one person even
manages to report the problem in that amount of time. "Very...buggy"
is arrant nonsense, if one hard-to-trigger bug is your entire proof.
> The hacking required to create usb_sg_submit() and have it sharing the
> backend with usb_sg_wait is conceptually trivial. But it must be a
> separate project. If it were started a year ago then I'd be happy to use
> that API now. As it is, no way.
So, the basic "deficiency" is that it's not a separate project?
Still doesn't make sense to me.
- Dave
next prev parent reply other threads:[~2004-06-28 15:05 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-06-26 20:06 drivers/block/ub.c Pete Zaitcev
2004-06-26 20:12 ` drivers/block/ub.c Matthew Dharm
2004-06-27 2:08 ` drivers/block/ub.c Pete Zaitcev
2004-06-27 3:30 ` drivers/block/ub.c Matthew Dharm
2004-07-12 0:10 ` [usb-storage] drivers/block/ub.c Pat LaVarre
2004-06-26 20:35 ` drivers/block/ub.c Oliver Neukum
2004-06-26 21:41 ` drivers/block/ub.c David S. Miller
2004-06-26 21:56 ` drivers/block/ub.c Oliver Neukum
2004-06-26 22:07 ` drivers/block/ub.c David S. Miller
2004-06-26 22:36 ` drivers/block/ub.c Oliver Neukum
2004-06-26 23:20 ` drivers/block/ub.c David S. Miller
2004-06-27 4:31 ` drivers/block/ub.c Oliver Neukum
2004-06-27 6:34 ` drivers/block/ub.c David S. Miller
2004-06-27 10:42 ` drivers/block/ub.c Oliver Neukum
2004-06-27 21:26 ` drivers/block/ub.c David S. Miller
2004-06-28 14:15 ` drivers/block/ub.c Scott Wood
2004-06-28 20:25 ` drivers/block/ub.c David S. Miller
2004-06-28 20:48 ` drivers/block/ub.c Scott Wood
2004-06-28 20:58 ` drivers/block/ub.c David S. Miller
2004-06-28 20:50 ` drivers/block/ub.c Matthew Dharm
2004-06-28 20:59 ` drivers/block/ub.c David S. Miller
2004-06-28 21:01 ` drivers/block/ub.c Pete Zaitcev
2004-06-28 23:52 ` drivers/block/ub.c Matthew Dharm
2004-06-28 20:57 ` drivers/block/ub.c Oliver Neukum
2004-06-28 21:03 ` drivers/block/ub.c David S. Miller
2004-06-28 21:18 ` drivers/block/ub.c Scott Wood
2004-06-28 22:22 ` drivers/block/ub.c David S. Miller
2004-06-28 22:31 ` drivers/block/ub.c Scott Wood
2004-06-28 22:40 ` drivers/block/ub.c Roland Dreier
2004-06-29 1:54 ` drivers/block/ub.c Robert White
2004-06-29 2:15 ` drivers/block/ub.c David S. Miller
2004-06-29 2:49 ` drivers/block/ub.c Robert White
2004-06-29 18:31 ` drivers/block/ub.c Andy Isaacson
2004-07-05 10:01 ` drivers/block/ub.c Roman Zippel
2004-06-29 7:12 ` drivers/block/ub.c Vojtech Pavlik
2004-06-29 1:39 ` drivers/block/ub.c Robert White
2004-06-29 17:02 ` drivers/block/ub.c Kurt Garloff
2004-06-26 22:54 ` drivers/block/ub.c Andries Brouwer
2004-06-26 22:59 ` drivers/block/ub.c Oliver Neukum
2004-06-26 23:08 ` drivers/block/ub.c Andries Brouwer
2004-06-27 5:04 ` drivers/block/ub.c Oliver Neukum
2004-06-27 14:08 ` drivers/block/ub.c Andries Brouwer
2004-06-27 14:24 ` drivers/block/ub.c Oliver Neukum
2004-06-27 15:19 ` drivers/block/ub.c Alan Stern
2004-06-27 15:45 ` drivers/block/ub.c Andries Brouwer
2004-06-28 23:58 ` drivers/block/ub.c Jeff Garzik
2004-06-28 0:10 ` drivers/block/ub.c Pete Zaitcev
2004-06-28 16:01 ` drivers/block/ub.c Alan Stern
2004-06-27 15:23 ` drivers/block/ub.c Andries Brouwer
2004-06-27 16:11 ` drivers/block/ub.c Oliver Neukum
2004-06-26 22:46 ` drivers/block/ub.c Oliver Neukum
2004-06-27 3:52 ` drivers/block/ub.c Alan Stern
2004-06-27 4:05 ` drivers/block/ub.c Alan Stern
2004-06-27 5:02 ` drivers/block/ub.c Greg KH
2004-06-27 15:23 ` drivers/block/ub.c Alan Stern
2004-06-27 20:29 ` drivers/block/ub.c Pete Zaitcev
2004-06-27 21:03 ` drivers/block/ub.c Matthew Dharm
2004-06-28 15:40 ` drivers/block/ub.c Alan Stern
2004-06-28 16:42 ` drivers/block/ub.c Oliver Neukum
2004-06-28 19:50 ` drivers/block/ub.c Alan Stern
2004-06-27 5:35 ` drivers/block/ub.c Matthew Dharm
2004-06-27 15:28 ` drivers/block/ub.c Alan Stern
2004-06-27 22:56 ` drivers/block/ub.c David Brownell
2004-06-27 23:43 ` drivers/block/ub.c Pete Zaitcev
2004-06-28 15:05 ` David Brownell [this message]
2004-06-28 15:56 ` drivers/block/ub.c Alan Stern
2004-06-28 16:23 ` drivers/block/ub.c David Brownell
2004-06-28 16:46 ` drivers/block/ub.c Oliver Neukum
2004-06-28 17:13 ` drivers/block/ub.c David Brownell
[not found] ` <mailman.1088290201.14081.linux-kernel2news@redhat.com>
2004-06-27 23:57 ` drivers/block/ub.c Pete Zaitcev
2004-06-29 11:05 ` drivers/block/ub.c Jeff Garzik
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=40E033A6.60502@pacbell.net \
--to=david-b@pacbell.net \
--cc=arjanv@redhat.com \
--cc=greg@kroah.com \
--cc=jgarzik@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mdharm-usb@one-eyed-alien.net \
--cc=oliver@neukum.org \
--cc=stern@rowland.harvard.edu \
--cc=tburke@redhat.com \
--cc=zaitcev@redhat.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