Commit 058e698b authored by Julia Lawall's avatar Julia Lawall Committed by Greg Kroah-Hartman

USB: gadget: Drop NULL test on list_entry result

list_entry, which is an alias for container_of, cannot return NULL, as
there is no way to add a NULL value to a doubly linked list.

A simplified version of the semantic match that findds this problem is as
follows:
(http://www.emn.fr/x-info/coccinelle/)

// <smpl>
@r@
expression x,E;
statement S1,S2;
position p,p1;
@@

*x = list_entry@p(...)
... when != x = E
*if@p1 (x == NULL) S1 else S2
// </smpl>
Signed-off-by: default avatarJulia Lawall <julia@diku.dk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent d12b85e7
...@@ -2378,40 +2378,34 @@ static irqreturn_t udc_data_in_isr(struct udc *dev, int ep_ix) ...@@ -2378,40 +2378,34 @@ static irqreturn_t udc_data_in_isr(struct udc *dev, int ep_ix)
if (!ep->cancel_transfer && !list_empty(&ep->queue)) { if (!ep->cancel_transfer && !list_empty(&ep->queue)) {
req = list_entry(ep->queue.next, req = list_entry(ep->queue.next,
struct udc_request, queue); struct udc_request, queue);
if (req) { /*
/* * length bytes transfered
* length bytes transfered * check dma done of last desc. in PPBDU mode
* check dma done of last desc. in PPBDU mode */
*/ if (use_dma_ppb_du) {
if (use_dma_ppb_du) { td = udc_get_last_dma_desc(req);
td = udc_get_last_dma_desc(req); if (td) {
if (td) { dma_done =
dma_done = AMD_GETBITS(td->status,
AMD_GETBITS(td->status, UDC_DMA_IN_STS_BS);
UDC_DMA_IN_STS_BS); /* don't care DMA done */
/* don't care DMA done */
req->req.actual =
req->req.length;
}
} else {
/* assume all bytes transferred */
req->req.actual = req->req.length; req->req.actual = req->req.length;
} }
} else {
/* assume all bytes transferred */
req->req.actual = req->req.length;
}
if (req->req.actual == req->req.length) { if (req->req.actual == req->req.length) {
/* complete req */ /* complete req */
complete_req(ep, req, 0); complete_req(ep, req, 0);
req->dma_going = 0; req->dma_going = 0;
/* further request available ? */ /* further request available ? */
if (list_empty(&ep->queue)) { if (list_empty(&ep->queue)) {
/* disable interrupt */ /* disable interrupt */
tmp = readl( tmp = readl(&dev->regs->ep_irqmsk);
&dev->regs->ep_irqmsk); tmp |= AMD_BIT(ep->num);
tmp |= AMD_BIT(ep->num); writel(tmp, &dev->regs->ep_irqmsk);
writel(tmp,
&dev->regs->ep_irqmsk);
}
} }
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment