Support any expression as a blob length by using an intermediate variable in the trace point emitter itself.
This also avoids any side effect on the passed variable. Signed-off-by: David Marchand <david.march...@redhat.com> --- lib/eal/include/rte_trace_point.h | 11 +++++---- lib/eal/include/rte_trace_point_register.h | 3 ++- lib/ethdev/ethdev_trace.h | 27 ++++++---------------- 3 files changed, 15 insertions(+), 26 deletions(-) diff --git a/lib/eal/include/rte_trace_point.h b/lib/eal/include/rte_trace_point.h index b24db3b6da..62a972db92 100644 --- a/lib/eal/include/rte_trace_point.h +++ b/lib/eal/include/rte_trace_point.h @@ -392,13 +392,14 @@ do { \ #define rte_trace_point_emit_blob(in, len) \ do { \ + uint8_t size = len; \ if (unlikely(in == NULL)) \ return; \ - if (len > RTE_TRACE_BLOB_LEN_MAX) \ - len = RTE_TRACE_BLOB_LEN_MAX; \ - __rte_trace_point_emit(len, uint8_t); \ - memcpy(mem, in, len); \ - memset(RTE_PTR_ADD(mem, len), 0, RTE_TRACE_BLOB_LEN_MAX - len); \ + if (size > RTE_TRACE_BLOB_LEN_MAX) \ + size = RTE_TRACE_BLOB_LEN_MAX; \ + __rte_trace_point_emit(size, uint8_t); \ + memcpy(mem, in, size); \ + memset(RTE_PTR_ADD(mem, size), 0, RTE_TRACE_BLOB_LEN_MAX - size); \ mem = RTE_PTR_ADD(mem, RTE_TRACE_BLOB_LEN_MAX); \ } while (0) diff --git a/lib/eal/include/rte_trace_point_register.h b/lib/eal/include/rte_trace_point_register.h index 748c931830..cb1015eb88 100644 --- a/lib/eal/include/rte_trace_point_register.h +++ b/lib/eal/include/rte_trace_point_register.h @@ -51,8 +51,9 @@ do { \ #define rte_trace_point_emit_blob(in, len) \ do { \ + uint8_t size = len; \ RTE_SET_USED(in); \ - __rte_trace_point_emit(len, uint8_t); \ + __rte_trace_point_emit(size, uint8_t); \ __rte_trace_point_emit_field(RTE_TRACE_BLOB_LEN_MAX, \ RTE_STR(in)"[" RTE_STR(RTE_TRACE_BLOB_LEN_MAX)"]", \ RTE_STR(uint8_t)); \ diff --git a/lib/ethdev/ethdev_trace.h b/lib/ethdev/ethdev_trace.h index 5951ae2d99..c65b78590a 100644 --- a/lib/ethdev/ethdev_trace.h +++ b/lib/ethdev/ethdev_trace.h @@ -860,10 +860,8 @@ RTE_TRACE_POINT( rte_ethdev_trace_mac_addr_add, RTE_TRACE_POINT_ARGS(uint16_t port_id, const struct rte_ether_addr *addr, uint32_t pool, int ret), - uint8_t len = RTE_ETHER_ADDR_LEN; - rte_trace_point_emit_u16(port_id); - rte_trace_point_emit_blob(addr->addr_bytes, len); + rte_trace_point_emit_blob(addr->addr_bytes, RTE_ETHER_ADDR_LEN); rte_trace_point_emit_u32(pool); rte_trace_point_emit_int(ret); ) @@ -872,20 +870,16 @@ RTE_TRACE_POINT( rte_ethdev_trace_mac_addr_remove, RTE_TRACE_POINT_ARGS(uint16_t port_id, const struct rte_ether_addr *addr), - uint8_t len = RTE_ETHER_ADDR_LEN; - rte_trace_point_emit_u16(port_id); - rte_trace_point_emit_blob(addr->addr_bytes, len); + rte_trace_point_emit_blob(addr->addr_bytes, RTE_ETHER_ADDR_LEN); ) RTE_TRACE_POINT( rte_ethdev_trace_default_mac_addr_set, RTE_TRACE_POINT_ARGS(uint16_t port_id, const struct rte_ether_addr *addr), - uint8_t len = RTE_ETHER_ADDR_LEN; - rte_trace_point_emit_u16(port_id); - rte_trace_point_emit_blob(addr->addr_bytes, len); + rte_trace_point_emit_blob(addr->addr_bytes, RTE_ETHER_ADDR_LEN); ) RTE_TRACE_POINT( @@ -1102,11 +1096,9 @@ RTE_TRACE_POINT( RTE_TRACE_POINT_ARGS(uint16_t port_id, const struct rte_ether_addr *mc_addr_set, uint32_t nb_mc_addr, int ret), - uint8_t len = nb_mc_addr * RTE_ETHER_ADDR_LEN; - rte_trace_point_emit_u16(port_id); rte_trace_point_emit_u32(nb_mc_addr); - rte_trace_point_emit_blob(mc_addr_set, len); + rte_trace_point_emit_blob(mc_addr_set, nb_mc_addr * RTE_ETHER_ADDR_LEN); rte_trace_point_emit_int(ret); ) @@ -1214,13 +1206,10 @@ RTE_TRACE_POINT( rte_ethdev_trace_get_dcb_info, RTE_TRACE_POINT_ARGS(uint16_t port_id, const struct rte_eth_dcb_info *dcb_info, int ret), - uint8_t num_user_priorities = RTE_ETH_DCB_NUM_USER_PRIORITIES; - uint8_t num_tcs = RTE_ETH_DCB_NUM_TCS; - rte_trace_point_emit_u16(port_id); rte_trace_point_emit_u8(dcb_info->nb_tcs); - rte_trace_point_emit_blob(dcb_info->prio_tc, num_user_priorities); - rte_trace_point_emit_blob(dcb_info->tc_bws, num_tcs); + rte_trace_point_emit_blob(dcb_info->prio_tc, RTE_ETH_DCB_NUM_USER_PRIORITIES); + rte_trace_point_emit_blob(dcb_info->tc_bws, RTE_ETH_DCB_NUM_TCS); rte_trace_point_emit_int(ret); ) @@ -2126,10 +2115,8 @@ RTE_TRACE_POINT_FP( rte_eth_trace_macaddr_get, RTE_TRACE_POINT_ARGS(uint16_t port_id, const struct rte_ether_addr *mac_addr), - uint8_t len = RTE_ETHER_ADDR_LEN; - rte_trace_point_emit_u16(port_id); - rte_trace_point_emit_blob(mac_addr->addr_bytes, len); + rte_trace_point_emit_blob(mac_addr->addr_bytes, RTE_ETHER_ADDR_LEN); ) /* Called in loop in examples/ip_pipeline */ -- 2.47.1