On Wednesday 16 August 2006 1:57 pm, Alan Stern wrote:
> +     hcd->self.uses_dma = (dev->dma_mask &&
> +                     dma_supported(dev, *dev->dma_mask));

That does look bizarre, given the variety of often-buggy implementations
of dma_supported() ... the ones looking at dev->dma_mask often ignore the
second parameter (assuming no devices have address range restrictions),
and many others ignore the first one (assuming all devices support DMA)!!

But more to the point, dma_supported() is defined to test whether the
specified device supports a given range of addresses, 0..SecondParam.
And I'm unaware of a portable way to choose that parameter to indicate
to "all kernel memory defined as DMA-safe", which is what the USB stack
cares about.

So I think it is far more correct to say

        hcd->self.uses_dma = (dev->dma_mask != NULL);

Another way of putting it is that dma_supported() is badly misnamed;
it should be dma_supports_address_range() instead, accepting that the
range specifications are weak at best since they were designed only
to handle restrictions like "N-bit addresses" rather than real-world
restrictions like "only addresses from 0x01000000-0x02000000 work".

- Dave


-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to