Re: USB transfer_buffer allocations on 64bit systems

From: Robert Hancock
Date: Thu Apr 08 2010 - 20:01:38 EST


On 04/07/2010 06:33 PM, Greg KH wrote:
On Wed, Apr 07, 2010 at 03:13:11PM -0400, Alan Stern wrote:
On Wed, 7 Apr 2010, Takashi Iwai wrote:

Ok, I'll write some dummies for usb_malloc() and usb_zalloc() which
will just call kmalloc() with GFP_DMA32 for now.

Can't we provide only zalloc() variant? Zero'ing doesn't cost much,
and the buffer allocation shouldn't be called too often.

Linus specifically requested us to avoid using kzalloc in usbfs. I
can't find the message in the email archives, but Greg KH should be
able to confirm it.

As long as we're imitating kmalloc for one use, we might as well make
it available to all.

And while at it,
usb_alloc_buffer() will be renamed to usb_alloc_consistent().

Most of recent functions are named with "coherent".

Yes, the terminology got a little confused between the PCI and DMA
realms. I agree, "coherent" is better.

BTW, although some EHCI controllers may support 64-bit DMA, the driver
contains this:

if (HCC_64BIT_ADDR(hcc_params)) {
ehci_writel(ehci, 0,&ehci->regs->segment);
#if 0
// this is deeply broken on almost all architectures
if (!dma_set_mask(hcd->self.controller, DMA_BIT_MASK(64)))
ehci_info(ehci, "enabled 64bit DMA\n");
#endif
}

I don't know if the comment is still true, but until the "#if 0" is
removed, ehci-hcd won't make use of 64-bit DMA.

I think someone tried to remove it recently, but I wouldn't let them :)

What a mess, hopefully xhci will just take over and save the world from
this whole thing...

True.. except for the fact that the xhci driver currently doesn't do 64-bit DMA either, nor does it support MSI even though the HW supports it (surprisingly enough the NEC Windows driver does, MSI-X even). At this point only Intel likely knows how to do this properly, though, since AFAICS the spec isn't publicly available yet.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/