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? > 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