From 3291abb5a2a5f24c109ab74e6aad0545927333a7 Mon Sep 17 00:00:00 2001 From: Andy Green Date: Tue, 22 May 2018 09:24:47 +0800 Subject: [PATCH] ethdev: fix type and scope of variables in Rx burst GCC 8.1 warned: In function 'rte_eth_rx_burst': 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], ^ 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, ^~~~~ 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, ^~ 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. Fixes: 467465d86df1 ("ethdev: add packet count parameter to Rx callback") Fixes: 4dc294158cac ("ethdev: support optional Rx and Tx callbacks") Cc: stable@dpdk.org Signed-off-by: Andy Green Acked-by: Bruce Richardson --- lib/librte_ethdev/rte_ethdev.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h index d52c1bed9c..584af85ad0 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,13 +3834,14 @@ 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(dev->post_rx_burst_cbs[queue_id] != 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); -- 2.20.1