On Mon, May 21, 2018 at 10:01:33AM +0800, Andy Green wrote: > /projects/lagopus/src/dpdk/build/include/rte_ethdev.h: > In function 'rte_eth_rx_burst': > /projects/lagopus/src/dpdk/build/include/rte_ethdev.h: > 3836:18: warning: conversion to 'int16_t' {aka 'short > int'} from 'uint16_t' {aka 'short unsigned int'} may > change the sign of the result [-Wsign-conversion] > int16_t nb_rx = (*dev->rx_pkt_burst)(dev->data-> > rx_queues[queue_id], > ^ > /projects/lagopus/src/dpdk/build/include/rte_ethdev.h: > 3844:50: warning: conversion to 'uint16_t' {aka 'short > unsigned int'} from 'int16_t' {aka 'short int'} may > change the sign of the result [-Wsign-conversion] > nb_rx = cb->fn.rx(port_id, queue_id, rx_pkts, nb_rx, > ^~~~~ > /projects/lagopus/src/dpdk/build/include/rte_ethdev.h: > 3844:12: warning: conversion to 'int16_t' {aka 'short > int'} from 'uint16_t' {aka 'short unsigned int'} may > change the sign of the result [-Wsign-conversion] > nb_rx = cb->fn.rx(port_id, queue_id, rx_pkts, nb_rx, > ^~ > /projects/lagopus/src/dpdk/build/include/rte_ethdev.h: > 3851:9: warning: conversion to 'uint16_t' {aka 'short > unsigned int'} from 'int16_t' {aka 'short int'} may > change the sign of the result [-Wsign-conversion] > return nb_rx; > ^~~~~ > > The second part of the patch is solved by its own basic > block because it is inside a preprocessor conditional. > > Bringing the declaration of the var to the top of the > function would require that also being given its own > preprocessor conditional, or a (void)var to avoid an > unused var warning. The basic block is no worse than > those imho. > > Signed-off-by: Andy Green <a...@warmcat.com> > --- > lib/librte_ethdev/rte_ethdev.h | 25 +++++++++++++++---------- > 1 file changed, 15 insertions(+), 10 deletions(-) > > diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h > index d52c1bed9..4d059a2a7 100644 > --- a/lib/librte_ethdev/rte_ethdev.h > +++ b/lib/librte_ethdev/rte_ethdev.h > @@ -3823,6 +3823,7 @@ rte_eth_rx_burst(uint16_t port_id, uint16_t queue_id, > struct rte_mbuf **rx_pkts, const uint16_t nb_pkts) > { > struct rte_eth_dev *dev = &rte_eth_devices[port_id]; > + uint16_t nb_rx; > > #ifdef RTE_LIBRTE_ETHDEV_DEBUG > RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, 0); > @@ -3833,18 +3834,22 @@ rte_eth_rx_burst(uint16_t port_id, uint16_t queue_id, > return 0; > } > #endif > - int16_t nb_rx = (*dev->rx_pkt_burst)(dev->data->rx_queues[queue_id], > - rx_pkts, nb_pkts); > + nb_rx = (*dev->rx_pkt_burst)(dev->data->rx_queues[queue_id], > + rx_pkts, nb_pkts); > > #ifdef RTE_ETHDEV_RXTX_CALLBACKS > - struct rte_eth_rxtx_callback *cb = dev->post_rx_burst_cbs[queue_id]; > - > - if (unlikely(cb != NULL)) { > - do { > - nb_rx = cb->fn.rx(port_id, queue_id, rx_pkts, nb_rx, > - nb_pkts, cb->param); > - cb = cb->next; > - } while (cb != NULL); > + { > + struct rte_eth_rxtx_callback *cb = > + dev->post_rx_burst_cbs[queue_id]; > + > + if (unlikely(cb != NULL)) { > + do { > + nb_rx = cb->fn.rx(port_id, queue_id, > + rx_pkts, nb_rx, > + nb_pkts, cb->param); > + cb = cb->next; > + } while (cb != NULL); > + } > }
I think you can eliminate these extra brackets by moving the cb declaration inside the if body: if (unlikely(dev->post_rx_burst_cbs[queue_id] != NULL)) {$ struct rte_eth_rxtx_callback *cb = dev->post_rx_burst_cbs[queue_id]; do {$ nb_rx = cb->fn.rx(port_id, queue_id, rx_pkts, nb_rx,$ nb_pkts, cb->param);$ cb = cb->next;$ } while (cb != NULL);$ } /Bruce