Hi Laurentiu,

> I took your code, added the missing mapping and placed it in a patch. 
> Please see attached (compile tested only).

Thanks! Unfortunately, the OHCI fails with errors such as

        usb 1-1: device descriptor read/64, error -12

that I tracked down to the calls

           hub_port_init
        -> usb_control_msg
        -> usb_internal_control_msg
        -> usb_start_wait_urb
        -> usb_submit_urb
        -> usb_hcd_submit_urb
        -> hcd->driver->urb_enqueue
        -> ohci_urb_enqueue
        -> ed_get
        -> ed_alloc
        -> dma_pool_zalloc
        -> dma_pool_alloc
        -> pool_alloc_page,

which returns NULL. Then I noticed

        /* pool_alloc_page() might sleep, so temporarily drop &pool->lock */

that might be a problem considering that the HCD handles pool memory in
IRQ handlers, for instance:

           do_IRQ
        -> generic_handle_irq
        -> handle_level_irq
        -> handle_irq_event
        -> handle_irq_event_percpu
        -> __handle_irq_event_percpu
        -> usb_hcd_irq
        -> ohci_irq
        -> ohci_work
        -> finish_urb
        -> __usb_hcd_giveback_urb
        -> usb_hcd_unmap_urb_for_dma
        -> hcd_buffer_free

Also, DMA_BUFFER_SIZE in ohci-ps2.c is only 256 KiB in total. Is the new
pool implementation at least as efficient as the previous one?

Fredrik

Reply via email to