[dpdk-dev,4/4] eal: add assert macro for debug

Message ID 4685487.eCM9t2Cvuq@xps13 (mailing list archive)
State Not Applicable, archived
Headers

Commit Message

Thomas Monjalon April 22, 2016, 9:14 p.m. UTC
  2016-04-22 12:51, Yuanhan Liu:
> On Fri, Apr 22, 2016 at 03:44:00PM +0200, Thomas Monjalon wrote:
> > --- a/drivers/net/vmxnet3/vmxnet3_rxtx.c
> > +++ b/drivers/net/vmxnet3/vmxnet3_rxtx.c
> > @@ -662,8 +662,8 @@ vmxnet3_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
> >  
> >  		PMD_RX_LOG(DEBUG, "rxd idx: %d ring idx: %d.", idx, ring_idx);
> >  
> > -		VMXNET3_ASSERT(rcd->len <= rxd->len);
> > -		VMXNET3_ASSERT(rbi->m);
> > +		RTE_ASSERT(rcd->len <= rxd->len);
> > +		RTE_ASSERT(rbi->m);
> 
> Seems this piece of code introduces a build error:
> 
>     drivers/net/vmxnet3/vmxnet3_rxtx.c: In function ‘vmxnet3_recv_pkts’:
>     drivers/net/vmxnet3/vmxnet3_rxtx.c:635:18: error: variable ‘rxd’ set but not used
>       Vmxnet3_RxDesc *rxd;
>                       ^

Indeed it can be seen with gcc when debug is disabled.
It can be fixed this way:
  

Comments

Yuanhan Liu April 22, 2016, 10:08 p.m. UTC | #1
On Fri, Apr 22, 2016 at 11:14:35PM +0200, Thomas Monjalon wrote:
> 2016-04-22 12:51, Yuanhan Liu:
> > On Fri, Apr 22, 2016 at 03:44:00PM +0200, Thomas Monjalon wrote:
> > > --- a/drivers/net/vmxnet3/vmxnet3_rxtx.c
> > > +++ b/drivers/net/vmxnet3/vmxnet3_rxtx.c
> > > @@ -662,8 +662,8 @@ vmxnet3_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
> > >  
> > >  		PMD_RX_LOG(DEBUG, "rxd idx: %d ring idx: %d.", idx, ring_idx);
> > >  
> > > -		VMXNET3_ASSERT(rcd->len <= rxd->len);
> > > -		VMXNET3_ASSERT(rbi->m);
> > > +		RTE_ASSERT(rcd->len <= rxd->len);
> > > +		RTE_ASSERT(rbi->m);
> > 
> > Seems this piece of code introduces a build error:
> > 
> >     drivers/net/vmxnet3/vmxnet3_rxtx.c: In function ‘vmxnet3_recv_pkts’:
> >     drivers/net/vmxnet3/vmxnet3_rxtx.c:635:18: error: variable ‘rxd’ set but not used
> >       Vmxnet3_RxDesc *rxd;
> >                       ^
> 
> Indeed it can be seen with gcc when debug is disabled.
> It can be fixed this way:
> 
> --- a/drivers/net/vmxnet3/vmxnet3_rxtx.c
> +++ b/drivers/net/vmxnet3/vmxnet3_rxtx.c
> @@ -658,6 +658,7 @@ vmxnet3_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
>                 idx = rcd->rxdIdx;
>                 ring_idx = (uint8_t)((rcd->rqID == rxq->qid1) ? 0 : 1);
>                 rxd = (Vmxnet3_RxDesc *)rxq->cmd_ring[ring_idx].base + idx;
> +               RTE_SET_USED(rxd); /* used only for assert when enabled */

How about adding the __rte_unused tag at where we declare it?

	--yliu
  
Stephen Hemminger April 22, 2016, 10:42 p.m. UTC | #2
On Fri, 22 Apr 2016 15:08:50 -0700
Yuanhan Liu <yuanhan.liu@linux.intel.com> wrote:

> On Fri, Apr 22, 2016 at 11:14:35PM +0200, Thomas Monjalon wrote:
> > 2016-04-22 12:51, Yuanhan Liu:
> > > On Fri, Apr 22, 2016 at 03:44:00PM +0200, Thomas Monjalon wrote:
> > > > --- a/drivers/net/vmxnet3/vmxnet3_rxtx.c
> > > > +++ b/drivers/net/vmxnet3/vmxnet3_rxtx.c
> > > > @@ -662,8 +662,8 @@ vmxnet3_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
> > > >  
> > > >  		PMD_RX_LOG(DEBUG, "rxd idx: %d ring idx: %d.", idx, ring_idx);
> > > >  
> > > > -		VMXNET3_ASSERT(rcd->len <= rxd->len);
> > > > -		VMXNET3_ASSERT(rbi->m);
> > > > +		RTE_ASSERT(rcd->len <= rxd->len);
> > > > +		RTE_ASSERT(rbi->m);
> > > 
> > > Seems this piece of code introduces a build error:
> > > 
> > >     drivers/net/vmxnet3/vmxnet3_rxtx.c: In function ‘vmxnet3_recv_pkts’:
> > >     drivers/net/vmxnet3/vmxnet3_rxtx.c:635:18: error: variable ‘rxd’ set but not used
> > >       Vmxnet3_RxDesc *rxd;
> > >                       ^
> > 
> > Indeed it can be seen with gcc when debug is disabled.
> > It can be fixed this way:
> > 
> > --- a/drivers/net/vmxnet3/vmxnet3_rxtx.c
> > +++ b/drivers/net/vmxnet3/vmxnet3_rxtx.c
> > @@ -658,6 +658,7 @@ vmxnet3_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
> >                 idx = rcd->rxdIdx;
> >                 ring_idx = (uint8_t)((rcd->rqID == rxq->qid1) ? 0 : 1);
> >                 rxd = (Vmxnet3_RxDesc *)rxq->cmd_ring[ring_idx].base + idx;
> > +               RTE_SET_USED(rxd); /* used only for assert when enabled */
> 
> How about adding the __rte_unused tag at where we declare it?
> 
> 	--yliu

Why not just kill the useless assert's all together? They really only helped during the short
time developer is debugging this code.
  
Thomas Monjalon April 29, 2016, 9:04 a.m. UTC | #3
2016-04-22 15:42, Stephen Hemminger:
> On Fri, 22 Apr 2016 15:08:50 -0700
> Yuanhan Liu <yuanhan.liu@linux.intel.com> wrote:
> > On Fri, Apr 22, 2016 at 11:14:35PM +0200, Thomas Monjalon wrote:
> > >                 rxd = (Vmxnet3_RxDesc *)rxq->cmd_ring[ring_idx].base + idx;
> > > +               RTE_SET_USED(rxd); /* used only for assert when enabled */
> > 
> > How about adding the __rte_unused tag at where we declare it?

It is not really unused.
And adding a SET_USED line allows to put a comment in the context
below the assignment.

> Why not just kill the useless assert's all together? They really only helped
> during the short time developer is debugging this code.

They also provide some kind of comments and can help when refactoring.
Anyway, removing the assert would deserve another patch.
  

Patch

--- a/drivers/net/vmxnet3/vmxnet3_rxtx.c
+++ b/drivers/net/vmxnet3/vmxnet3_rxtx.c
@@ -658,6 +658,7 @@  vmxnet3_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
                idx = rcd->rxdIdx;
                ring_idx = (uint8_t)((rcd->rqID == rxq->qid1) ? 0 : 1);
                rxd = (Vmxnet3_RxDesc *)rxq->cmd_ring[ring_idx].base + idx;
+               RTE_SET_USED(rxd); /* used only for assert when enabled */
                rbi = rxq->cmd_ring[ring_idx].buf_info + idx;
 
                PMD_RX_LOG(DEBUG, "rxd idx: %d ring idx: %d.", idx, ring_idx);