From: Greg KH <gr...@kr...> - 2005-12-15 23:03:48
|
On Fri, Dec 16, 2005 at 01:23:32AM +0300, Vitaly Wool wrote: > Greg KH wrote: > > >On Thu, Dec 15, 2005 at 09:47:42AM +0300, Vitaly Wool wrote: > > > > > >>David Brownell wrote: > >> > >> > >> > >>>No, "stupid drivers will suffer"; nothing new. Just observe > >>>how the ads7846 touchscreen driver does small async transfers. > >>> > >>> > >>> > >>> > >>One cannot allocate memory in interrupt context, so the way to go is > >>allocating it on stack, thus the buffer is not DMA-safe. > >>Making it DMA-safe in thread that does the very message processing is a > >>good way of overcoming this. > >>Using preallocated buffer is not a good way, since it may well be > >>already used by another interrupt or not yet processed by the worker > >>thread (or tasklet, or whatever). > >> > >> > > > >Yes it is a good way. That's the way USB currently works in the kernel, > >and it works just fine. It keeps the rules simple and everyone knows > >what needs to be done. > > > > > Looking at my usbnet stuff, I can't share that opinion :-/ > Are you really ready to lower the performance and quality of service > just for approach uniformity? What performance issues? As an example, USB has this rule, and we can saturate a 480Mbit line with a _userspace_ driver (loads of memcopy calles involved there.) > And, can you please point me out the examples of devices behind USB bus > that need to write registers from an interrupt context? usb to serial drivers need to allocate buffers for their write functions as they can be called in irq context from a tty line dicipline, which causes a USB packet to be dynamically created and sent to the USB core. I also think the USB network and ATM drivers have these requirements too, just search for GFP_ATOMIC in the drivers/usb/ directory to find these instances. Anyway, this is my last response about this issue. Please consider it over. thanks, greg k-h |