Thread (64 messages) 64 messages, 9 authors, 2013-05-13

[PATCH v2] mm: dmapool: use provided gfp flags for all dma_alloc_coherent() calls

From: andrew@lunn.ch (Andrew Lunn)
Date: 2013-01-29 11:02:54
Also in: linux-mm, lkml

Now I activated the debug messages in em28xx. From the messages I
see no correlation of the pool exhaustion and lost sync. Also I
cannot see any error messages from the em28xx driver.
I see a lot of init_isoc/stop_urbs (maybe EPG scan?) without
draining the coherent pool (checked with 'cat
/debug/dma-api/num_free_entries', which gave stable numbers), but
after half an hour there are only init_isoc messages without
corresponding stop_urbs messages and num_free_entries decreased
until coherent pool exhaustion.
Hi Soeren

em28xx_stop_urbs() is only called by em28xx_stop_streaming().

em28xx_stop_streaming() is only called by em28xx_stop_feed()
when 0 == dvb->nfeeds.

em28xx_stop_feed()and em28xx_start_feed() look O.K, dvb->nfeeds is
protected by a mutex etc.

Now, em28xx_init_isoc() is also called by buffer_prepare(). This uses
em28xx_alloc_isoc() to do the actual allocation, and that function
sets up the urb such that on completion the function
em28xx_irq_callback() is called.

It looks like there might be issues here:

Once the data has been copied out, it resubmits the urb:

       urb->status = usb_submit_urb(urb, GFP_ATOMIC);
        if (urb->status) {
                em28xx_isocdbg("urb resubmit failed (error=%i)\n",
                               urb->status);
        }
  
However, if the ubs_submit_urb fails, it looks like the urb is lost.

If you look at other code submitting urbs you have this pattern:

               rc = usb_submit_urb(isoc_bufs->urb[i], GFP_ATOMIC);
                if (rc) {
                        em28xx_err("submit of urb %i failed (error=%i)\n", i,
                                   rc);
                        em28xx_uninit_isoc(dev, mode);
                        return rc;
                }
 
Do you have your build such that you would see "urb resubmit failed"
in your logs? Are there any?

     Andrew
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help