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)) {
|
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user