From: Tyler Retzlaff <roretzla@linux.microsoft.com>
MSVC does not support VLAs, replace VLAs with standard C arrays
or alloca(). alloca() is available for all toolchain/platform
combinations officially supported by DPDK.
Signed-off-by: Tyler Retzlaff <roretzla@linux.microsoft.com>
---
drivers/common/mlx5/mlx5_common.h | 4 ++--
drivers/common/mlx5/mlx5_devx_cmds.c | 7 +++----
2 files changed, 5 insertions(+), 6 deletions(-)
@@ -125,10 +125,10 @@ mlx5_fp_debug_enabled(void)
/* Allocate a buffer on the stack and fill it with a printf format string. */
#define MKSTR(name, ...) \
int mkstr_size_##name = snprintf(NULL, 0, "" __VA_ARGS__); \
- char name[mkstr_size_##name + 1]; \
+ char *name = alloca(mkstr_size_##name + 1); \
\
memset(name, 0, mkstr_size_##name + 1); \
- snprintf(name, sizeof(name), "" __VA_ARGS__)
+ snprintf(name, mkstr_size_##name + 1, "" __VA_ARGS__)
enum {
PCI_VENDOR_ID_MELLANOX = 0x15b3,
@@ -284,10 +284,9 @@ mlx5_devx_cmd_flow_counter_query(struct mlx5_devx_obj *dcs,
void *cmd_comp,
uint64_t async_id)
{
- int out_len = MLX5_ST_SZ_BYTES(query_flow_counter_out) +
- MLX5_ST_SZ_BYTES(traffic_counter);
- uint32_t out[out_len];
+ uint32_t out[MLX5_ST_SZ_BYTES(query_flow_counter_out) + MLX5_ST_SZ_BYTES(traffic_counter)];
uint32_t in[MLX5_ST_SZ_DW(query_flow_counter_in)] = {0};
+ const int out_len = RTE_DIM(out);
void *stats;
int rc;
@@ -346,7 +345,7 @@ mlx5_devx_cmd_mkey_create(void *ctx,
int klm_num = attr->klm_num;
int in_size_dw = MLX5_ST_SZ_DW(create_mkey_in) +
(klm_num ? RTE_ALIGN(klm_num, 4) : 0) * MLX5_ST_SZ_DW(klm);
- uint32_t in[in_size_dw];
+ uint32_t *in = alloca(sizeof(uint32_t) * in_size_dw);
uint32_t out[MLX5_ST_SZ_DW(create_mkey_out)] = {0};
void *mkc;
struct mlx5_devx_obj *mkey = mlx5_malloc(MLX5_MEM_ZERO, sizeof(*mkey),