All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 3/3] drivers/usb/gadget: Drop NULL test on list_entry result
@ 2009-07-12  7:43 ` Julia Lawall
  0 siblings, 0 replies; 4+ messages in thread
From: Julia Lawall @ 2009-07-12  7:43 UTC (permalink / raw)
  To: dahlmann.thomas, linux-geode, gregkh, jirislaby, linux-kernel,
	kernel-janitors

From: Julia Lawall <julia@diku.dk>

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>

---
 drivers/usb/gadget/amd5536udc.c     |   56 +++++++++-----------
 1 files changed, 25 insertions(+), 31 deletions(-)

diff --git a/drivers/usb/gadget/amd5536udc.c b/drivers/usb/gadget/amd5536udc.c
index 826f3ad..85f7aa9 100644
--- a/drivers/usb/gadget/amd5536udc.c
+++ b/drivers/usb/gadget/amd5536udc.c
@@ -2379,40 +2379,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);
 				}
 			}
 		}

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 3/3] drivers/usb/gadget: Drop NULL test on list_entry result
@ 2009-07-12  7:43 ` Julia Lawall
  0 siblings, 0 replies; 4+ messages in thread
From: Julia Lawall @ 2009-07-12  7:43 UTC (permalink / raw)
  To: dahlmann.thomas, linux-geode, gregkh, jirislaby, linux-kernel,
	kernel-janitors

From: Julia Lawall <julia@diku.dk>

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>

---
 drivers/usb/gadget/amd5536udc.c     |   56 +++++++++-----------
 1 files changed, 25 insertions(+), 31 deletions(-)

diff --git a/drivers/usb/gadget/amd5536udc.c b/drivers/usb/gadget/amd5536udc.c
index 826f3ad..85f7aa9 100644
--- a/drivers/usb/gadget/amd5536udc.c
+++ b/drivers/usb/gadget/amd5536udc.c
@@ -2379,40 +2379,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);
 				}
 			}
 		}

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 3/3] drivers/usb/gadget: Drop NULL test on list_entry
  2009-07-12  7:43 ` Julia Lawall
@ 2009-08-15 19:35   ` Thomas Dahlmann
  -1 siblings, 0 replies; 4+ messages in thread
From: Thomas Dahlmann @ 2009-08-14 19:32 UTC (permalink / raw)
  To: Julia Lawall
  Cc: linux-geode, gregkh, jirislaby, linux-kernel, kernel-janitors

Thanks!

Applied.

Julia Lawall schrieb:
> From: Julia Lawall <julia@diku.dk>
>
> 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>
>
> ---
>  drivers/usb/gadget/amd5536udc.c     |   56 +++++++++-----------
>  1 files changed, 25 insertions(+), 31 deletions(-)
>
> diff --git a/drivers/usb/gadget/amd5536udc.c b/drivers/usb/gadget/amd5536udc.c
> index 826f3ad..85f7aa9 100644
> --- a/drivers/usb/gadget/amd5536udc.c
> +++ b/drivers/usb/gadget/amd5536udc.c
> @@ -2379,40 +2379,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);
>  				}
>  			}
>  		}
>   


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 3/3] drivers/usb/gadget: Drop NULL test on list_entry result
@ 2009-08-15 19:35   ` Thomas Dahlmann
  0 siblings, 0 replies; 4+ messages in thread
From: Thomas Dahlmann @ 2009-08-15 19:35 UTC (permalink / raw)
  To: Julia Lawall
  Cc: linux-geode, gregkh, jirislaby, linux-kernel, kernel-janitors

Thanks!

Applied.

Julia Lawall schrieb:
> From: Julia Lawall <julia@diku.dk>
>
> 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>
>
> ---
>  drivers/usb/gadget/amd5536udc.c     |   56 +++++++++-----------
>  1 files changed, 25 insertions(+), 31 deletions(-)
>
> diff --git a/drivers/usb/gadget/amd5536udc.c b/drivers/usb/gadget/amd5536udc.c
> index 826f3ad..85f7aa9 100644
> --- a/drivers/usb/gadget/amd5536udc.c
> +++ b/drivers/usb/gadget/amd5536udc.c
> @@ -2379,40 +2379,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);
>  				}
>  			}
>  		}
>   


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2009-08-14 19:32 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-07-12  7:43 [PATCH 3/3] drivers/usb/gadget: Drop NULL test on list_entry result Julia Lawall
2009-07-12  7:43 ` Julia Lawall
2009-08-14 19:32 ` [PATCH 3/3] drivers/usb/gadget: Drop NULL test on list_entry Thomas Dahlmann
2009-08-15 19:35   ` [PATCH 3/3] drivers/usb/gadget: Drop NULL test on list_entry result Thomas Dahlmann

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.