net: ethernet: ti: cpdma: fix desc re-queuing
authorGrygorii Strashko <grygorii.strashko@ti.com>
Fri, 6 Jan 2017 20:07:30 +0000 (14:07 -0600)
committerDavid S. Miller <davem@davemloft.net>
Sun, 8 Jan 2017 01:48:14 +0000 (20:48 -0500)
The currently processing cpdma descriptor with EOQ flag set may
contain two values in Next Descriptor Pointer field:
- valid pointer: means CPDMA missed addition of new desc in queue;
- null: no more descriptors in queue.
In the later case, it's not required to write to HDP register, but now
CPDMA does it.

Hence, add additional check for Next Descriptor Pointer != null in
cpdma_chan_process() function before writing in HDP register.

Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/ti/davinci_cpdma.c

index d6f0ded7dafc85cf728fc1e68714a5b20df3f097..a53b38455a2f49763b758174f07602bdc8fb2426 100644 (file)
@@ -1159,7 +1159,7 @@ static int __cpdma_chan_process(struct cpdma_chan *chan)
        chan->count--;
        chan->stats.good_dequeue++;
 
-       if (status & CPDMA_DESC_EOQ) {
+       if ((status & CPDMA_DESC_EOQ) && chan->head) {
                chan->stats.requeue++;
                chan_write(chan, hdp, desc_phys(pool, chan->head));
        }