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: Julia Lawall <julia@diku.dk> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
d12b85e7de
commit
058e698b63
|
@ -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)) {
|
||||
req = list_entry(ep->queue.next,
|
||||
struct udc_request, queue);
|
||||
if (req) {
|
||||
/*
|
||||
* length bytes transfered
|
||||
* check dma done of last desc. in PPBDU mode
|
||||
*/
|
||||
if (use_dma_ppb_du) {
|
||||
td = udc_get_last_dma_desc(req);
|
||||
if (td) {
|
||||
dma_done =
|
||||
AMD_GETBITS(td->status,
|
||||
UDC_DMA_IN_STS_BS);
|
||||
/* don't care DMA done */
|
||||
req->req.actual =
|
||||
req->req.length;
|
||||
}
|
||||
} else {
|
||||
/* assume all bytes transferred */
|
||||
/*
|
||||
* length bytes transfered
|
||||
* check dma done of last desc. in PPBDU mode
|
||||
*/
|
||||
if (use_dma_ppb_du) {
|
||||
td = udc_get_last_dma_desc(req);
|
||||
if (td) {
|
||||
dma_done =
|
||||
AMD_GETBITS(td->status,
|
||||
UDC_DMA_IN_STS_BS);
|
||||
/* don't care DMA done */
|
||||
req->req.actual = req->req.length;
|
||||
}
|
||||
} else {
|
||||
/* assume all bytes transferred */
|
||||
req->req.actual = req->req.length;
|
||||
}
|
||||
|
||||
if (req->req.actual == req->req.length) {
|
||||
/* complete req */
|
||||
complete_req(ep, req, 0);
|
||||
req->dma_going = 0;
|
||||
/* further request available ? */
|
||||
if (list_empty(&ep->queue)) {
|
||||
/* disable interrupt */
|
||||
tmp = readl(
|
||||
&dev->regs->ep_irqmsk);
|
||||
tmp |= AMD_BIT(ep->num);
|
||||
writel(tmp,
|
||||
&dev->regs->ep_irqmsk);
|
||||
}
|
||||
|
||||
if (req->req.actual == req->req.length) {
|
||||
/* complete req */
|
||||
complete_req(ep, req, 0);
|
||||
req->dma_going = 0;
|
||||
/* further request available ? */
|
||||
if (list_empty(&ep->queue)) {
|
||||
/* disable interrupt */
|
||||
tmp = readl(&dev->regs->ep_irqmsk);
|
||||
tmp |= AMD_BIT(ep->num);
|
||||
writel(tmp, &dev->regs->ep_irqmsk);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue