> On Nov 14, 2018, at 4:06 AM, Shahaf Shuler <shah...@mellanox.com> wrote: > > Adding Koh, see below > > Tuesday, November 13, 2018 9:11 PM, Ali Alnubani: >> Subject: [PATCH 2/2] net/mlx5: fix initialization of struct members >> >> This patch fixes compilation errors with meson and the clang compiler caused >> by some of the struct members not being initialized. >> >> ``` >> ../drivers/net/mlx5/mlx5_mr.c:345:37: error: missing field 'end' >> initializer [-Werror,-Wmissing-field-initializers] >> struct mlx5_mr_cache entry = { 0, }; >> ^ >> ../drivers/net/mlx5/mlx5_mr.c:389:36: error: missing field 'end' >> initializer [-Werror,-Wmissing-field-initializers] >> struct mlx5_mr_cache ret = { 0, }; >> ^ >> ../drivers/net/mlx5/mlx5_mr.c:691:35: error: missing field 'end' >> initializer [-Werror,-Wmissing-field-initializers] >> struct mlx5_mr_cache ret = { 0, }; >> ^ ``` >> >> The compilation errors reproduce with >> clang version 3.4.2 (tags/RELEASE_34/dot2-final) on RHEL. >> >> Fixes: e1114ff6a5ab ("net/mlx5: support e-switch flow count action") >> Fixes: db48f9db5d9f ("net/mlx5: support new flow counter API") >> Fixes: 974f1e7ef146 ("net/mlx5: add new memory region support") >> Fixes: 65c9d24170c9 ("net/mlx5: enable loopback by configured mode") >> Fixes: 87011737b715 ("mlx5: add software counters") >> Cc: sta...@dpdk.org >> >> Signed-off-by: Ali Alnubani <alia...@mellanox.com> > > [...] > >> diff --git a/drivers/net/mlx5/mlx5_mr.c b/drivers/net/mlx5/mlx5_mr.c index >> f4b15d3f6..435eaeee2 100644 >> --- a/drivers/net/mlx5/mlx5_mr.c >> +++ b/drivers/net/mlx5/mlx5_mr.c >> @@ -342,8 +342,9 @@ mr_insert_dev_cache(struct rte_eth_dev *dev, >> struct mlx5_mr *mr) >> DRV_LOG(DEBUG, "port %u inserting MR(%p) to global cache", >> dev->data->port_id, (void *)mr); >> for (n = 0; n < mr->ms_bmp_n; ) { >> - struct mlx5_mr_cache entry = { 0, }; >> + struct mlx5_mr_cache entry; >> >> + memset(&entry, 0, sizeof(entry)); >> /* Find a contiguous chunk and advance the index. */ >> n = mr_find_next_chunk(mr, &entry, n); >> if (!entry.end) >> @@ -386,8 +387,9 @@ mr_lookup_dev_list(struct rte_eth_dev *dev, struct >> mlx5_mr_cache *entry, >> if (mr->ms_n == 0) >> continue; >> for (n = 0; n < mr->ms_bmp_n; ) { >> - struct mlx5_mr_cache ret = { 0, }; >> + struct mlx5_mr_cache ret; >> >> + memset(&ret, 0, sizeof(ret)); > > do you have concerns about the performance w/ this extra memset?
For the three funcs modified with memset here are all slow-paths for the MR. It is safe for performance. Thanks, Yongseok > >> n = mr_find_next_chunk(mr, &ret, n); >> if (addr >= ret.start && addr < ret.end) { >> /* Found. */ >> @@ -688,8 +690,9 @@ mlx5_mr_create(struct rte_eth_dev *dev, struct >> mlx5_mr_cache *entry, >> */ >> for (n = 0; n < ms_n; ++n) { >> uintptr_t start; >> - struct mlx5_mr_cache ret = { 0, }; >> + struct mlx5_mr_cache ret; >> >> + memset(&ret, 0, sizeof(ret)); >> start = data_re.start + n * msl->page_sz; >> /* Exclude memsegs already registered by other MRs. */ >> if (mr_lookup_dev(dev, &ret, start) == UINT32_MAX) { diff -- >> git a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c index >> eef485021..b27fc4798 100644 >> --- a/drivers/net/mlx5/mlx5_rxq.c >> +++ b/drivers/net/mlx5/mlx5_rxq.c >> @@ -1782,7 +1782,7 @@ mlx5_hrxq_new(struct rte_eth_dev *dev, >> struct mlx5_ind_table_ibv *ind_tbl; >> struct ibv_qp *qp; >> #ifdef HAVE_IBV_DEVICE_TUNNEL_SUPPORT >> - struct mlx5dv_qp_init_attr qp_init_attr = {0}; >> + struct mlx5dv_qp_init_attr qp_init_attr; >> #endif >> int err; >> >> @@ -1795,6 +1795,7 @@ mlx5_hrxq_new(struct rte_eth_dev *dev, >> return NULL; >> } >> #ifdef HAVE_IBV_DEVICE_TUNNEL_SUPPORT >> + memset(&qp_init_attr, 0, sizeof(qp_init_attr)); >> if (tunnel) { >> qp_init_attr.comp_mask = >> >> MLX5DV_QP_INIT_ATTR_MASK_QP_CREATE_FLAGS; >> diff --git a/drivers/net/mlx5/mlx5_stats.c b/drivers/net/mlx5/mlx5_stats.c >> index a14d1e491..fccb9af0d 100644 >> --- a/drivers/net/mlx5/mlx5_stats.c >> +++ b/drivers/net/mlx5/mlx5_stats.c >> @@ -354,10 +354,11 @@ int >> mlx5_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats) { >> struct priv *priv = dev->data->dev_private; >> - struct rte_eth_stats tmp = {0}; >> + struct rte_eth_stats tmp; >> unsigned int i; >> unsigned int idx; >> >> + memset(&tmp, 0, sizeof(tmp)); >> /* Add software counters. */ >> for (i = 0; (i != priv->rxqs_n); ++i) { >> struct mlx5_rxq_data *rxq = (*priv->rxqs)[i]; >> -- >> 2.11.0 >