]> git.itanic.dy.fi Git - linux-stable/commitdiff
net/mlx5: fw_tracer, Add support for unrecognized string
authorShay Drory <shayd@nvidia.com>
Tue, 17 Jan 2023 13:24:19 +0000 (15:24 +0200)
committerSaeed Mahameed <saeedm@nvidia.com>
Wed, 8 Feb 2023 00:29:56 +0000 (16:29 -0800)
In case FW is publishing a string which isn't found in the driver's
string DBs, keep the string as raw data.

Signed-off-by: Shay Drory <shayd@nvidia.com>
Reviewed-by: Moshe Shemesh <moshe@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
drivers/net/ethernet/mellanox/mlx5/core/diag/fw_tracer.c
drivers/net/ethernet/mellanox/mlx5/core/diag/fw_tracer.h

index 46f1e866bf644491310bae551a6aa47ccfd51ad2..f7864d51d4c450d7b42181b52dd17b247e81b81a 100644 (file)
@@ -465,6 +465,7 @@ static void poll_trace(struct mlx5_fw_tracer *tracer,
 
        tracer_event->event_id = MLX5_GET(tracer_event, trace, event_id);
        tracer_event->lost_event = MLX5_GET(tracer_event, trace, lost);
+       tracer_event->out = trace;
 
        switch (tracer_event->event_id) {
        case TRACER_EVENT_TYPE_TIMESTAMP:
@@ -587,6 +588,26 @@ void mlx5_tracer_print_trace(struct tracer_string_format *str_frmt,
        mlx5_tracer_clean_message(str_frmt);
 }
 
+static int mlx5_tracer_handle_raw_string(struct mlx5_fw_tracer *tracer,
+                                        struct tracer_event *tracer_event)
+{
+       struct tracer_string_format *cur_string;
+
+       cur_string = mlx5_tracer_message_insert(tracer, tracer_event);
+       if (!cur_string)
+               return -1;
+
+       cur_string->event_id = tracer_event->event_id;
+       cur_string->timestamp = tracer_event->string_event.timestamp;
+       cur_string->lost = tracer_event->lost_event;
+       cur_string->string = "0x%08x%08x";
+       cur_string->num_of_params = 2;
+       cur_string->params[0] = upper_32_bits(*tracer_event->out);
+       cur_string->params[1] = lower_32_bits(*tracer_event->out);
+       list_add_tail(&cur_string->list, &tracer->ready_strings_list);
+       return 0;
+}
+
 static int mlx5_tracer_handle_string_trace(struct mlx5_fw_tracer *tracer,
                                           struct tracer_event *tracer_event)
 {
@@ -595,7 +616,7 @@ static int mlx5_tracer_handle_string_trace(struct mlx5_fw_tracer *tracer,
        if (tracer_event->string_event.tdsn == 0) {
                cur_string = mlx5_tracer_get_string(tracer, tracer_event);
                if (!cur_string)
-                       return -1;
+                       return mlx5_tracer_handle_raw_string(tracer, tracer_event);
 
                cur_string->num_of_params = mlx5_tracer_get_num_of_params(cur_string->string);
                cur_string->last_param_num = 0;
@@ -610,7 +631,7 @@ static int mlx5_tracer_handle_string_trace(struct mlx5_fw_tracer *tracer,
                if (!cur_string) {
                        pr_debug("%s Got string event for unknown string tmsn: %d\n",
                                 __func__, tracer_event->string_event.tmsn);
-                       return -1;
+                       return mlx5_tracer_handle_raw_string(tracer, tracer_event);
                }
                cur_string->last_param_num += 1;
                if (cur_string->last_param_num > TRACER_MAX_PARAMS) {
index 873c1eb38e4922aad9377fefeda770480ce2ff83..5c548bb74f07b60b0fc2b42ffd1dc6420a023e66 100644 (file)
@@ -166,6 +166,7 @@ struct tracer_event {
                struct tracer_string_event string_event;
                struct tracer_timestamp_event timestamp_event;
        };
+       u64 *out;
 };
 
 struct mlx5_ifc_tracer_event_bits {