On Thu, Jul 7, 2011 at 2:14 PM, Clemens Ladisch clemens@ladisch.de wrote:
Daniel Mack wrote:
I have to revisit an issue we've discussed in length around a year ago and which still remains unsolved. I've been getting feedback from more users of my driver snd-usb-caiaq who report the issue found in bug #15580 in the kernel bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=15580
Let me quickly summarize the current state of this issue as I see it.
The problem seems to be that certain 64bit chipsets can't deal with the fact that an URB's transfer_buffer is allocated with kmalloc(GFP_KERNEL). The effect is that kmalloc() is very likely to hand out memory which is not addressable by devices that are connected via 32bit PCI busses, such as EHCI controllers. In theory, DMA bounce buffers should be installed in such cases, or the IOMMU would be in charge to re-map these buffers to suitable locations, but for at least two people who have reported the issue, this obviously fails.
The problem is that snd-usb-caiaq modifies the URB buffer after submission.
Hmm, no, it doesn't. I know I stated that once, but I confused the implementation of the Linux driver with the approach I chose for the Mac OS X driver code. Sorry about that.
The driver simply copies audio material to its output URB and calls usb_submit_urb(). The URB buffer is not touched after that call.
Daniel