telemetry: fix build warnings seen when using gcc 9

Message ID 1562077208-15355-1-git-send-email-flavia.musatescu@intel.com (mailing list archive)
State Superseded, archived
Delegated to: Thomas Monjalon
Headers
Series telemetry: fix build warnings seen when using gcc 9 |

Checks

Context Check Description
ci/checkpatch warning coding style issues
ci/intel-Performance-Testing success Performance Testing PASS
ci/mellanox-Performance-Testing success Performance Testing PASS
ci/Intel-compilation fail Compilation issues

Commit Message

Flavia Musatescu July 2, 2019, 2:20 p.m. UTC
  Suppress the unaligned packed member address warnings by extending
the telemetry library build flags with -Wno-address-of-packed-member
option, through the WERROR_FLAGS makefile variable.

With this change additional warnings are turned on to be treated as errors,
which causes the following build issues to be seen:
- no previous prototype [-Werror=missing-prototypes]
- initialization discards ‘const’ qualifier from pointer target type
  [-Werror=discarded-qualifiers]
- old-style function definition [-Werror=old-style-definition]
- variable may be used before its value is set (when using icc compiler).

Fixes: 0fe3a37924d4 ("telemetry: format json response when sending stats")
Fixes: ee5ff0d3297e ("telemetry: add client feature and sockets")
Fixes: 8877ac688b52 ("telemetry: introduce infrastructure")
Fixes: 1b756087db93 ("telemetry: add parser for client socket messages")
Fixes: fff6df7bf58e ("telemetry: fix using ports of different types")
Fixes: 4080e46c8078 ("telemetry: support global metrics")
Cc: stable@dpdk.org

Signed-off-by: Reshma Pattan <reshma.pattan@intel.com>
Signed-off-by: Flavia Musatescu <flavia.musatescu@intel.com>
---
Cc: ciara.power@intel.com
Cc: bruce.richardson@intel.com
Cc: reshma.pattan@intel.com
---
 lib/librte_telemetry/Makefile                    |  2 +-
 lib/librte_telemetry/meson.build                 |  2 +-
 lib/librte_telemetry/rte_telemetry.c             | 19 ++++++------
 lib/librte_telemetry/rte_telemetry_internal.h    |  4 +++
 lib/librte_telemetry/rte_telemetry_parser.c      |  8 ++---
 lib/librte_telemetry/rte_telemetry_parser_test.c | 27 ++++++++--------
 lib/librte_telemetry/rte_telemetry_parser_test.h | 39 ------------------------
 7 files changed, 33 insertions(+), 68 deletions(-)
 delete mode 100644 lib/librte_telemetry/rte_telemetry_parser_test.h
  

Comments

Kevin Traynor Aug. 23, 2019, 10:01 a.m. UTC | #1
On 02/07/2019 15:20, Flavia Musatescu wrote:
> Suppress the unaligned packed member address warnings by extending
> the telemetry library build flags with -Wno-address-of-packed-member
> option, through the WERROR_FLAGS makefile variable.
> 
> With this change additional warnings are turned on to be treated as errors,
> which causes the following build issues to be seen:
> - no previous prototype [-Werror=missing-prototypes]
> - initialization discards ‘const’ qualifier from pointer target type
>   [-Werror=discarded-qualifiers]
> - old-style function definition [-Werror=old-style-definition]
> - variable may be used before its value is set (when using icc compiler).
> 
> Fixes: 0fe3a37924d4 ("telemetry: format json response when sending stats")
> Fixes: ee5ff0d3297e ("telemetry: add client feature and sockets")
> Fixes: 8877ac688b52 ("telemetry: introduce infrastructure")
> Fixes: 1b756087db93 ("telemetry: add parser for client socket messages")
> Fixes: fff6df7bf58e ("telemetry: fix using ports of different types")
> Fixes: 4080e46c8078 ("telemetry: support global metrics")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Reshma Pattan <reshma.pattan@intel.com>
> Signed-off-by: Flavia Musatescu <flavia.musatescu@intel.com>

Hi Flavio, in the 18.11. stable branch, I had "fixed" the gcc9 warnings
in telemetry with 2ae7bca9594d ("mk: disable packed member pointer
warning for telemetry")

This patch in 18.11 branch is causing the following build error:

/root/lts/dpdk-18.11/lib/librte_telemetry/rte_telemetry.c:1822:13:
error: initialization discards ‘const’ qualifier from pointer target
type [-Werror=discarded-qualifiers]
  .opt_str = "--telemetry",
             ^~~~~~~~~~~~~

I'm inclined to just keep the existing existing patch in stable and not
apply this one. Or if you want to do a backport for 18.11 branch that is
ok too. WDYT?
  
Flavia Musatescu Aug. 23, 2019, 4:07 p.m. UTC | #2
On 23/08/2019 11:01, Kevin Traynor wrote:
> On 02/07/2019 15:20, Flavia Musatescu wrote:
>> Suppress the unaligned packed member address warnings by extending
>> the telemetry library build flags with -Wno-address-of-packed-member
>> option, through the WERROR_FLAGS makefile variable.
>>
>> With this change additional warnings are turned on to be treated as errors,
>> which causes the following build issues to be seen:
>> - no previous prototype [-Werror=missing-prototypes]
>> - initialization discards ‘const’ qualifier from pointer target type
>>    [-Werror=discarded-qualifiers]
>> - old-style function definition [-Werror=old-style-definition]
>> - variable may be used before its value is set (when using icc compiler).
>>
>> Fixes: 0fe3a37924d4 ("telemetry: format json response when sending stats")
>> Fixes: ee5ff0d3297e ("telemetry: add client feature and sockets")
>> Fixes: 8877ac688b52 ("telemetry: introduce infrastructure")
>> Fixes: 1b756087db93 ("telemetry: add parser for client socket messages")
>> Fixes: fff6df7bf58e ("telemetry: fix using ports of different types")
>> Fixes: 4080e46c8078 ("telemetry: support global metrics")
>> Cc: stable@dpdk.org
>>
>> Signed-off-by: Reshma Pattan <reshma.pattan@intel.com>
>> Signed-off-by: Flavia Musatescu <flavia.musatescu@intel.com>
> Hi Flavio, in the 18.11. stable branch, I had "fixed" the gcc9 warnings
> in telemetry with 2ae7bca9594d ("mk: disable packed member pointer
> warning for telemetry")
>
> This patch in 18.11 branch is causing the following build error:
>
> /root/lts/dpdk-18.11/lib/librte_telemetry/rte_telemetry.c:1822:13:
> error: initialization discards ‘const’ qualifier from pointer target
> type [-Werror=discarded-qualifiers]
>    .opt_str = "--telemetry",
>               ^~~~~~~~~~~~~
>
> I'm inclined to just keep the existing existing patch in stable and not
> apply this one. Or if you want to do a backport for 18.11 branch that is
> ok too. WDYT?

Hi Kevin,

I will backport the patch for 18.11. Thanks
  

Patch

diff --git a/lib/librte_telemetry/Makefile b/lib/librte_telemetry/Makefile
index 1a05069..1b3fe05 100644
--- a/lib/librte_telemetry/Makefile
+++ b/lib/librte_telemetry/Makefile
@@ -7,7 +7,7 @@  include $(RTE_SDK)/mk/rte.vars.mk
 LIB = librte_telemetry.a
 
 CFLAGS += -O3
-CFLAGS += -I$(SRCDIR)
+CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
 CFLAGS += -DALLOW_EXPERIMENTAL_API
 
 LDLIBS += -lrte_eal -lrte_ethdev
diff --git a/lib/librte_telemetry/meson.build b/lib/librte_telemetry/meson.build
index cafb26f..44792bc 100644
--- a/lib/librte_telemetry/meson.build
+++ b/lib/librte_telemetry/meson.build
@@ -2,7 +2,7 @@ 
 # Copyright(c) 2018 Intel Corporation
 
 sources = files('rte_telemetry.c', 'rte_telemetry_parser.c', 'rte_telemetry_parser_test.c')
-headers = files('rte_telemetry.h', 'rte_telemetry_internal.h', 'rte_telemetry_parser.h', 'rte_telemetry_parser_test.h')
+headers = files('rte_telemetry.h', 'rte_telemetry_internal.h', 'rte_telemetry_parser.h')
 deps += ['metrics', 'ethdev']
 cflags += '-DALLOW_EXPERIMENTAL_API'
 
diff --git a/lib/librte_telemetry/rte_telemetry.c b/lib/librte_telemetry/rte_telemetry.c
index 9819b22..861fd7a 100644
--- a/lib/librte_telemetry/rte_telemetry.c
+++ b/lib/librte_telemetry/rte_telemetry.c
@@ -18,7 +18,6 @@ 
 #include "rte_telemetry.h"
 #include "rte_telemetry_internal.h"
 #include "rte_telemetry_parser.h"
-#include "rte_telemetry_parser_test.h"
 #include "rte_telemetry_socket_tests.h"
 
 #define BUF_SIZE 1024
@@ -32,13 +31,13 @@ 
 static telemetry_impl *static_telemetry;
 
 struct telemetry_message_test {
-	char *test_name;
+	const char *test_name;
 	int (*test_func_ptr)(struct telemetry_impl *telemetry, int fd);
 };
 
 struct json_data {
 	char *status_code;
-	char *data;
+	const char *data;
 	int port;
 	char *stat_name;
 	int stat_value;
@@ -137,7 +136,7 @@  rte_telemetry_update_metrics_ethdev(struct telemetry_impl *telemetry,
 	return 0;
 }
 
-int32_t
+static int32_t
 rte_telemetry_write_to_socket(struct telemetry_impl *telemetry,
 	const char *json_string)
 {
@@ -721,7 +720,7 @@  rte_telemetry_initial_accept(struct telemetry_impl *telemetry)
 	struct driver_index {
 		const void *dev_ops;
 		int reg_index;
-	} drv_idx[RTE_MAX_ETHPORTS];
+	} drv_idx[RTE_MAX_ETHPORTS] = {{0}};
 	int nb_drv_idx = 0;
 	uint16_t pid;
 	int ret;
@@ -971,7 +970,7 @@  rte_telemetry_create_socket(struct telemetry_impl *telemetry)
 }
 
 int32_t
-rte_telemetry_init()
+rte_telemetry_init(void)
 {
 	int ret;
 	pthread_attr_t attr;
@@ -1256,7 +1255,7 @@  rte_telemetry_parse_client_message(struct telemetry_impl *telemetry, char *buf)
 	return -1;
 }
 
-int32_t
+static int32_t
 rte_telemetry_dummy_client_socket(const char *valid_client_path)
 {
 	int sockfd = socket(AF_UNIX, SOCK_SEQPACKET, 0);
@@ -1731,8 +1730,8 @@  rte_telemetry_json_contents_test(struct telemetry_impl *telemetry, int fd)
 	int ret;
 	char buf[BUF_SIZE];
 	int fail_count = 0;
-	char *status = "Status Error: Invalid Argument 404";
-	char *data = "null";
+	const char *status = "Status Error: Invalid Argument 404";
+	const char *data = "null";
 	struct json_data *data_struct;
 	const char *invalid_contents = "{\"action\":0,\"command\":"
 	"\"ports_stats_values_by_name\",\"data\":{\"ports\""
@@ -1788,7 +1787,7 @@  rte_telemetry_json_empty_test(struct telemetry_impl *telemetry, int fd)
 	char buf[BUF_SIZE];
 	int fail_count = 0;
 	const char *status = "Status Error: Invalid Argument 404";
-	char *data = "null";
+	const char *data = "null";
 	struct json_data *data_struct;
 	const char *empty_json  = "{}";
 	int buffer_read = 0;
diff --git a/lib/librte_telemetry/rte_telemetry_internal.h b/lib/librte_telemetry/rte_telemetry_internal.h
index ce1ee88..3f8dbc2 100644
--- a/lib/librte_telemetry/rte_telemetry_internal.h
+++ b/lib/librte_telemetry/rte_telemetry_internal.h
@@ -105,4 +105,8 @@  rte_telemetry_socket_messaging_testing(int index, int socket);
 int32_t
 rte_telemetry_send_global_stats_values(struct telemetry_encode_param *ep,
 	struct telemetry_impl *telemetry);
+
+int32_t
+rte_telemetry_parser_test(struct telemetry_impl *telemetry);
+
 #endif
diff --git a/lib/librte_telemetry/rte_telemetry_parser.c b/lib/librte_telemetry/rte_telemetry_parser.c
index e3cc19f..9601323 100644
--- a/lib/librte_telemetry/rte_telemetry_parser.c
+++ b/lib/librte_telemetry/rte_telemetry_parser.c
@@ -18,7 +18,7 @@ 
 typedef int (*command_func)(struct telemetry_impl *, int, json_t *);
 
 struct rte_telemetry_command {
-	char *text;
+	const char *text;
 	command_func fn;
 } command;
 
@@ -252,7 +252,7 @@  rte_telemetry_stat_names_to_ids(struct telemetry_impl *telemetry,
 	return -1;
 }
 
-int32_t
+static int32_t
 rte_telemetry_command_ports_all_stat_values(struct telemetry_impl *telemetry,
 	 int action, json_t *data)
 {
@@ -356,7 +356,7 @@  rte_telemetry_command_ports_all_stat_values(struct telemetry_impl *telemetry,
 	return -1;
 }
 
-int32_t
+static int32_t
 rte_telemetry_command_global_stat_values(struct telemetry_impl *telemetry,
 	 int action, json_t *data)
 {
@@ -443,7 +443,7 @@  rte_telemetry_command_global_stat_values(struct telemetry_impl *telemetry,
 	return -1;
 }
 
-int32_t
+static int32_t
 rte_telemetry_command_ports_stats_values_by_name(struct telemetry_impl
 	*telemetry, int action, json_t *data)
 {
diff --git a/lib/librte_telemetry/rte_telemetry_parser_test.c b/lib/librte_telemetry/rte_telemetry_parser_test.c
index 5fe93fa..23ec7a7 100644
--- a/lib/librte_telemetry/rte_telemetry_parser_test.c
+++ b/lib/librte_telemetry/rte_telemetry_parser_test.c
@@ -16,6 +16,7 @@ 
 #include <rte_string_fns.h>
 
 #include "rte_telemetry_parser.h"
+#include "rte_telemetry_internal.h"
 
 enum choices {
 	INV_ACTION_VAL,
@@ -31,7 +32,7 @@  enum choices {
 
 #define TEST_CLIENT "/var/run/dpdk/test_client"
 
-int32_t
+static int32_t
 rte_telemetry_create_test_socket(struct telemetry_impl *telemetry,
 	const char *test_client_path)
 {
@@ -82,7 +83,7 @@  rte_telemetry_create_test_socket(struct telemetry_impl *telemetry,
 	return 0;
 }
 
-int32_t
+static int32_t
 rte_telemetry_format_port_stat_ids(int *port_ids, int num_port_ids,
 	const char * const *stat_names, int num_stat_names, json_t **data)
 {
@@ -165,8 +166,8 @@  rte_telemetry_format_port_stat_ids(int *port_ids, int num_port_ids,
 	return -1;
 }
 
-int32_t
-rte_telemetry_create_json_request(int action, char *command,
+static int32_t
+rte_telemetry_create_json_request(int action, const char *command,
 	const char *client_path, int *port_ids, int num_port_ids,
 	const char * const *stat_names, int num_stat_names, char **request,
 	int inv_choice)
@@ -262,13 +263,13 @@  rte_telemetry_create_json_request(int action, char *command,
 	return -1;
 }
 
-int32_t
+static int32_t
 rte_telemetry_send_get_ports_and_stats_request(struct telemetry_impl *telemetry,
-	int action_choice, char *command_choice, int inv_choice)
+	int action_choice, const char *command_choice, int inv_choice)
 {
 	int ret;
 	char *request;
-	char *client_path_data = NULL;
+	const char *client_path_data = NULL;
 
 	if (telemetry == NULL) {
 		TELEMETRY_LOG_ERR("Telemetry argument has not been initialised");
@@ -302,7 +303,7 @@  rte_telemetry_send_get_ports_and_stats_request(struct telemetry_impl *telemetry,
 	return 0;
 }
 
-int32_t
+static int32_t
 rte_telemetry_send_get_ports_details_request(struct telemetry_impl *telemetry,
 	int action_choice, int *port_ids, int num_port_ids, int inv_choice)
 {
@@ -313,7 +314,7 @@  rte_telemetry_send_get_ports_details_request(struct telemetry_impl *telemetry,
 		return -EINVAL;
 	}
 
-	char *command = "ports_details";
+	const char *command = "ports_details";
 
 	if (inv_choice == INV_ACTION_VAL)
 		action_choice = -1;
@@ -342,7 +343,7 @@  rte_telemetry_send_get_ports_details_request(struct telemetry_impl *telemetry,
 	return 0;
 }
 
-int32_t
+static int32_t
 rte_telemetry_send_stats_values_by_name_request(struct telemetry_impl
 	*telemetry, int action_choice, int *port_ids, int num_port_ids,
 	const char * const *stat_names, int num_stat_names,
@@ -350,7 +351,7 @@  rte_telemetry_send_stats_values_by_name_request(struct telemetry_impl
 {
 	int ret;
 	char *request;
-	char *command = "ports_stats_values_by_name";
+	const char *command = "ports_stats_values_by_name";
 
 	if (telemetry == NULL) {
 		TELEMETRY_LOG_ERR("Telemetry argument has not been initialised");
@@ -386,7 +387,7 @@  rte_telemetry_send_stats_values_by_name_request(struct telemetry_impl
 	return 0;
 }
 
-int32_t
+static int32_t
 rte_telemetry_send_unreg_request(struct telemetry_impl *telemetry,
 	int action_choice, const char *client_path, int inv_choice)
 {
@@ -398,7 +399,7 @@  rte_telemetry_send_unreg_request(struct telemetry_impl *telemetry,
 		return -EINVAL;
 	}
 
-	char *command = "clients";
+	const char *command = "clients";
 
 	if (inv_choice == INV_ACTION_VAL)
 		action_choice = -1;
diff --git a/lib/librte_telemetry/rte_telemetry_parser_test.h b/lib/librte_telemetry/rte_telemetry_parser_test.h
deleted file mode 100644
index 6ada852..0000000
--- a/lib/librte_telemetry/rte_telemetry_parser_test.h
+++ /dev/null
@@ -1,39 +0,0 @@ 
-/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2018 Intel Corporation
- */
-
-#ifndef _RTE_TELEMETRY_PARSER_TEST_H_
-#define _RTE_TELEMETRY_PARSER_TEST_H_
-
-int32_t
-rte_telemetry_parser_test(struct telemetry_impl *telemetry);
-
-int32_t
-rte_telemetry_format_port_stat_ids(int *port_ids, int num_port_ids,
-	const char * const stat_names, int num_stat_names, json_t **data);
-
-int32_t
-rte_telemetry_create_json_request(int action, char *command,
-	const char *client_path, int *port_ids, int num_port_ids,
-	const char * const stat_names, int num_stat_names, char **request,
-	int inv_choice);
-
-int32_t
-rte_telemetry_send_get_ports_and_stats_request(struct telemetry_impl *telemetry,
-	int action_choice, char *command_choice, int inv_choice);
-
-int32_t
-rte_telemetry_send_get_ports_details_request(struct telemetry_impl *telemetry,
-	int action_choice, int *port_ids, int num_port_ids, int inv_choice);
-
-int32_t
-rte_telemetry_send_stats_values_by_name_request(struct telemetry_impl
-	*telemetry, int action_choice, int *port_ids, int num_port_ids,
-	const char * const stat_names, int num_stat_names,
-	int inv_choice);
-
-int32_t
-rte_telemetry_send_unreg_request(int action_choice, const char *client_path,
-	int inv_choice);
-
-#endif