From: David Brownell <david-b@pacbell.net>
To: Robert Hancock <hancockrwd@gmail.com>
Cc: Greg KH <greg@kroah.com>,
"linux-kernel" <linux-kernel@vger.kernel.org>,
"Linux-usb" <linux-usb@vger.kernel.org>
Subject: Re: [PATCH 2.6.34] ehci-hcd: add option to enable 64-bit DMA support
Date: Sat, 20 Feb 2010 00:07:59 -0800 [thread overview]
Message-ID: <201002200008.00048.david-b@pacbell.net> (raw)
In-Reply-To: <51f3faa71002192315ia84786eo1138bf9ab3417f2d@mail.gmail.com>
On Friday 19 February 2010, Robert Hancock wrote:
> > That's a good summary of the high points. Testing was potentially an
> > issue, but it never quite got that far. So I have no idea if there are
> > systems where EHCI advertises 64-bit DMA support but that support is
> > broken (e.g. "Yet Another Hardware Mechanism MS-Windows Ignores", so that
> > only Linux would ever trip over the relevant BIOS breakage).
>
> According to one Microsoft page I saw, Windows XP did not implement
> the 64-bit addressing feature in EHCI. I haven't found any information
> on whether any newer Windows versions do or not.
Note that it's pure speculation on my part whether or not any such
BIOS setup is needed. One would hope it wouldn't be required ...
but then engineers have been known to create all sorts of options
that require tweaking ... and trigger errors when the options aren't
stroked in the right way.
> > I won't attempt to go into details, but I recall a few basic issues:
> >
> > * Not all clients or implementors of the "dma mask" mechanism agreed
> > on what it was supposed to achieve. Few, for example, really used
> > it as a mask ... and it rarely affects allocation of buffers that
> > will later get used for DMA.
> >
> > * Confusing semantics for the various types of DMA restriction which
> > hardware may impose, and upper layers in driver stacks would thus
> > need (in some cases) to cope with.
>
> I think this is pretty well nailed down at this point. I suspect the
> confusion partly comes from the expectation that driver code should be
> able to use dma_supported to test a particular mask against what a
> device had been configured for. This function is really meant for use
> in arch code, not for drivers.
If so, that suggests a minor hole in the DMA interface, since drivers
do need such info.
As you note, mask manipulation can be done in drivers ... but on the flip
side, such things are a bit error prone and deserve API wrappers. (Plus,
there's the whole confusion about whether it's really a "mask", where a
given bit flags whether that address line is valid. Seems more like using
a bitstring of N ones as a representation of N, where only N matters.)
> > * How to pass such restrictions up the driver stack ... as for example
> > that NETIF_* flag. ISTR there was some block layer issue too, but
> > at this remove I can't remember any details at all. (If networking
> > and the block layer can use 64-bit DMA, I can't imagine many other
> > subsystems would deliver wins as big.) For example, how would one
> > pass up the knowledge that a driver for a particular USB peripheral
> > across a few hubs) can do DMA to/from address 0x1234567890abcdef, but
> > the same driver can't do that for an otherwise identical peripheral
> > connected through a different HCD?
>
> I think this logic is also in place, for the most part. The DMA mask
> from the HCD appears to be propagated into the USB device, and then
> into the interface objects.
Yeah, I recall thinking about that stuff way back when... intended to
set that up correctly. IT was at least partially tested.
> For usb-storage, the SCSI layer
> automatically sets the bounce limit based on the device passed into
> it, so the right thing gets done. The networking layer seems like it
> would need explicit handling in the drivers - I think basically a
> check if the device interface's DMA mask was set to DMA_BIT_MASK(64)
> and if so, set the HIGHDMA flag.
Another example of how roundabout all that stuff is. "64" being the
relevant number, in contrast to something less. So if for example the
DMA address bus width is 48 bits, things will be strange.
I wonder why the two layers don't adopt the same approach ... seemingly
they're making different assumptions about driver behavior, suggesting
that one of them may well be overly optimistic.
- Dave
next prev parent reply other threads:[~2010-02-20 8:08 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-02-18 3:10 [PATCH 2.6.34] ehci-hcd: add option to enable 64-bit DMA support Robert Hancock
2010-02-18 4:26 ` Greg KH
2010-02-18 5:13 ` Robert Hancock
2010-02-18 5:22 ` Greg KH
2010-02-19 0:33 ` Robert Hancock
2010-02-19 0:47 ` Greg KH
2010-02-19 3:46 ` Robert Hancock
2010-02-19 3:54 ` Greg KH
2010-02-20 1:30 ` Robert Hancock
2010-02-20 4:26 ` Greg KH
2010-02-20 5:39 ` David Brownell
2010-02-20 7:15 ` Robert Hancock
2010-02-20 8:07 ` David Brownell [this message]
2010-02-20 18:13 ` Robert Hancock
2010-02-23 6:48 ` Yuhong Bao
2010-02-24 0:26 ` Robert Hancock
2010-02-25 2:28 ` Tejun Heo
2010-02-25 2:41 ` Yuhong Bao
2010-02-25 2:58 ` Tejun Heo
2010-02-25 3:15 ` Yuhong Bao
2010-02-25 3:29 ` Tejun Heo
2010-02-25 4:03 ` Oliver Neukum
2010-02-25 5:25 ` Tejun Heo
2010-02-25 16:14 ` Greg KH
2010-02-25 23:15 ` Robert Hancock
2010-02-25 23:25 ` Greg KH
2010-02-26 7:01 ` Oliver Neukum
2010-02-24 3:53 ` SB600 64-bit DMA BIOS misconfiguration (formerly RE: [PATCH 2.6.34] ehci-hcd: add option to enable 64-bit DMA support) Yuhong Bao
2010-02-24 3:53 ` Yuhong Bao
2010-02-24 4:30 ` Robert Hancock
2010-02-24 4:30 ` Robert Hancock
2010-02-24 4:33 ` Yuhong Bao
2010-02-24 4:33 ` Yuhong Bao
2010-02-24 13:30 ` Huang, Shane
2010-02-24 13:30 ` Huang, Shane
2010-02-23 6:28 ` [PATCH 2.6.34] ehci-hcd: add option to enable 64-bit DMA support Yuhong Bao
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=201002200008.00048.david-b@pacbell.net \
--to=david-b@pacbell.net \
--cc=greg@kroah.com \
--cc=hancockrwd@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.