root/drivers/net/ethernet/mellanox/mlx5/core/diag/fs_tracepoint.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /*
   2  * Copyright (c) 2017, Mellanox Technologies. All rights reserved.
   3  *
   4  * This software is available to you under a choice of one of two
   5  * licenses.  You may choose to be licensed under the terms of the GNU
   6  * General Public License (GPL) Version 2, available from the file
   7  * COPYING in the main directory of this source tree, or the
   8  * OpenIB.org BSD license below:
   9  *
  10  *     Redistribution and use in source and binary forms, with or
  11  *     without modification, are permitted provided that the following
  12  *     conditions are met:
  13  *
  14  *      - Redistributions of source code must retain the above
  15  *        copyright notice, this list of conditions and the following
  16  *        disclaimer.
  17  *
  18  *      - Redistributions in binary form must reproduce the above
  19  *        copyright notice, this list of conditions and the following
  20  *        disclaimer in the documentation and/or other materials
  21  *        provided with the distribution.
  22  *
  23  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  24  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  25  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  26  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  27  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  28  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  29  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  30  * SOFTWARE.
  31  */
  32 
  33 #if !defined(_MLX5_FS_TP_) || defined(TRACE_HEADER_MULTI_READ)
  34 #define _MLX5_FS_TP_
  35 
  36 #include <linux/tracepoint.h>
  37 #include <linux/trace_seq.h>
  38 #include "../fs_core.h"
  39 
  40 #undef TRACE_SYSTEM
  41 #define TRACE_SYSTEM mlx5
  42 
  43 #define __parse_fs_hdrs(match_criteria_enable, mouter, mmisc, minner, vouter, \
  44                         vinner, vmisc)                                        \
  45         parse_fs_hdrs(p, match_criteria_enable, mouter, mmisc, minner, vouter,\
  46                       vinner, vmisc)
  47 
  48 const char *parse_fs_hdrs(struct trace_seq *p,
  49                           u8 match_criteria_enable,
  50                           const u32 *mask_outer,
  51                           const u32 *mask_misc,
  52                           const u32 *mask_inner,
  53                           const u32 *value_outer,
  54                           const u32 *value_misc,
  55                           const u32 *value_inner);
  56 
  57 #define __parse_fs_dst(dst, counter_id) \
  58         parse_fs_dst(p, (const struct mlx5_flow_destination *)dst, counter_id)
  59 
  60 const char *parse_fs_dst(struct trace_seq *p,
  61                          const struct mlx5_flow_destination *dst,
  62                          u32 counter_id);
  63 
  64 TRACE_EVENT(mlx5_fs_add_ft,
  65             TP_PROTO(const struct mlx5_flow_table *ft),
  66             TP_ARGS(ft),
  67             TP_STRUCT__entry(
  68                 __field(const struct mlx5_flow_table *, ft)
  69                 __field(u32, id)
  70                 __field(u32, level)
  71                 __field(u32, type)
  72             ),
  73             TP_fast_assign(
  74                            __entry->ft = ft;
  75                            __entry->id = ft->id;
  76                            __entry->level = ft->level;
  77                            __entry->type = ft->type;
  78             ),
  79             TP_printk("ft=%p id=%u level=%u type=%u \n",
  80                       __entry->ft, __entry->id, __entry->level, __entry->type)
  81             );
  82 
  83 TRACE_EVENT(mlx5_fs_del_ft,
  84             TP_PROTO(const struct mlx5_flow_table *ft),
  85             TP_ARGS(ft),
  86             TP_STRUCT__entry(
  87                 __field(const struct mlx5_flow_table *, ft)
  88                 __field(u32, id)
  89             ),
  90             TP_fast_assign(
  91                            __entry->ft = ft;
  92                            __entry->id = ft->id;
  93 
  94             ),
  95             TP_printk("ft=%p id=%u\n",
  96                       __entry->ft, __entry->id)
  97             );
  98 
  99 TRACE_EVENT(mlx5_fs_add_fg,
 100             TP_PROTO(const struct mlx5_flow_group *fg),
 101             TP_ARGS(fg),
 102             TP_STRUCT__entry(
 103                 __field(const struct mlx5_flow_group *, fg)
 104                 __field(const struct mlx5_flow_table *, ft)
 105                 __field(u32, start_index)
 106                 __field(u32, end_index)
 107                 __field(u32, id)
 108                 __field(u8, mask_enable)
 109                 __array(u32, mask_outer, MLX5_ST_SZ_DW(fte_match_set_lyr_2_4))
 110                 __array(u32, mask_inner, MLX5_ST_SZ_DW(fte_match_set_lyr_2_4))
 111                 __array(u32, mask_misc, MLX5_ST_SZ_DW(fte_match_set_misc))
 112             ),
 113             TP_fast_assign(
 114                            __entry->fg = fg;
 115                            fs_get_obj(__entry->ft, fg->node.parent);
 116                            __entry->start_index = fg->start_index;
 117                            __entry->end_index = fg->start_index + fg->max_ftes;
 118                            __entry->id = fg->id;
 119                            __entry->mask_enable = fg->mask.match_criteria_enable;
 120                            memcpy(__entry->mask_outer,
 121                                   MLX5_ADDR_OF(fte_match_param,
 122                                                &fg->mask.match_criteria,
 123                                                outer_headers),
 124                                   sizeof(__entry->mask_outer));
 125                            memcpy(__entry->mask_inner,
 126                                   MLX5_ADDR_OF(fte_match_param,
 127                                                &fg->mask.match_criteria,
 128                                                inner_headers),
 129                                   sizeof(__entry->mask_inner));
 130                            memcpy(__entry->mask_misc,
 131                                   MLX5_ADDR_OF(fte_match_param,
 132                                                &fg->mask.match_criteria,
 133                                                misc_parameters),
 134                                   sizeof(__entry->mask_misc));
 135 
 136             ),
 137             TP_printk("fg=%p ft=%p id=%u start=%u end=%u bit_mask=%02x %s\n",
 138                       __entry->fg, __entry->ft, __entry->id,
 139                       __entry->start_index, __entry->end_index,
 140                       __entry->mask_enable,
 141                       __parse_fs_hdrs(__entry->mask_enable,
 142                                       __entry->mask_outer,
 143                                       __entry->mask_misc,
 144                                       __entry->mask_inner,
 145                                       __entry->mask_outer,
 146                                       __entry->mask_misc,
 147                                       __entry->mask_inner))
 148             );
 149 
 150 TRACE_EVENT(mlx5_fs_del_fg,
 151             TP_PROTO(const struct mlx5_flow_group *fg),
 152             TP_ARGS(fg),
 153             TP_STRUCT__entry(
 154                 __field(const struct mlx5_flow_group *, fg)
 155                 __field(u32, id)
 156             ),
 157             TP_fast_assign(
 158                            __entry->fg = fg;
 159                            __entry->id = fg->id;
 160 
 161             ),
 162             TP_printk("fg=%p id=%u\n",
 163                       __entry->fg, __entry->id)
 164             );
 165 
 166 #define ACTION_FLAGS \
 167         {MLX5_FLOW_CONTEXT_ACTION_ALLOW,         "ALLOW"},\
 168         {MLX5_FLOW_CONTEXT_ACTION_DROP,          "DROP"},\
 169         {MLX5_FLOW_CONTEXT_ACTION_FWD_DEST,      "FWD"},\
 170         {MLX5_FLOW_CONTEXT_ACTION_COUNT,         "CNT"},\
 171         {MLX5_FLOW_CONTEXT_ACTION_PACKET_REFORMAT, "REFORMAT"},\
 172         {MLX5_FLOW_CONTEXT_ACTION_DECAP,         "DECAP"},\
 173         {MLX5_FLOW_CONTEXT_ACTION_MOD_HDR,       "MOD_HDR"},\
 174         {MLX5_FLOW_CONTEXT_ACTION_VLAN_PUSH,     "VLAN_PUSH"},\
 175         {MLX5_FLOW_CONTEXT_ACTION_VLAN_POP,      "VLAN_POP"},\
 176         {MLX5_FLOW_CONTEXT_ACTION_VLAN_PUSH_2,   "VLAN_PUSH_2"},\
 177         {MLX5_FLOW_CONTEXT_ACTION_VLAN_POP_2,    "VLAN_POP_2"},\
 178         {MLX5_FLOW_CONTEXT_ACTION_FWD_NEXT_PRIO, "NEXT_PRIO"}
 179 
 180 TRACE_EVENT(mlx5_fs_set_fte,
 181             TP_PROTO(const struct fs_fte *fte, int new_fte),
 182             TP_ARGS(fte, new_fte),
 183             TP_STRUCT__entry(
 184                 __field(const struct fs_fte *, fte)
 185                 __field(const struct mlx5_flow_group *, fg)
 186                 __field(u32, group_index)
 187                 __field(u32, index)
 188                 __field(u32, action)
 189                 __field(u32, flow_tag)
 190                 __field(u32, flow_source)
 191                 __field(u8,  mask_enable)
 192                 __field(int, new_fte)
 193                 __array(u32, mask_outer, MLX5_ST_SZ_DW(fte_match_set_lyr_2_4))
 194                 __array(u32, mask_inner, MLX5_ST_SZ_DW(fte_match_set_lyr_2_4))
 195                 __array(u32, mask_misc, MLX5_ST_SZ_DW(fte_match_set_misc))
 196                 __array(u32, value_outer, MLX5_ST_SZ_DW(fte_match_set_lyr_2_4))
 197                 __array(u32, value_inner, MLX5_ST_SZ_DW(fte_match_set_lyr_2_4))
 198                 __array(u32, value_misc, MLX5_ST_SZ_DW(fte_match_set_misc))
 199             ),
 200             TP_fast_assign(
 201                            __entry->fte = fte;
 202                            __entry->new_fte = new_fte;
 203                            fs_get_obj(__entry->fg, fte->node.parent);
 204                            __entry->group_index = __entry->fg->id;
 205                            __entry->index = fte->index;
 206                            __entry->action = fte->action.action;
 207                            __entry->mask_enable = __entry->fg->mask.match_criteria_enable;
 208                            __entry->flow_tag = fte->flow_context.flow_tag;
 209                            __entry->flow_source = fte->flow_context.flow_source;
 210                            memcpy(__entry->mask_outer,
 211                                   MLX5_ADDR_OF(fte_match_param,
 212                                                &__entry->fg->mask.match_criteria,
 213                                                outer_headers),
 214                                   sizeof(__entry->mask_outer));
 215                            memcpy(__entry->mask_inner,
 216                                   MLX5_ADDR_OF(fte_match_param,
 217                                                &__entry->fg->mask.match_criteria,
 218                                                inner_headers),
 219                                   sizeof(__entry->mask_inner));
 220                            memcpy(__entry->mask_misc,
 221                                   MLX5_ADDR_OF(fte_match_param,
 222                                                &__entry->fg->mask.match_criteria,
 223                                                misc_parameters),
 224                                   sizeof(__entry->mask_misc));
 225                            memcpy(__entry->value_outer,
 226                                   MLX5_ADDR_OF(fte_match_param,
 227                                                &fte->val,
 228                                                outer_headers),
 229                                   sizeof(__entry->value_outer));
 230                            memcpy(__entry->value_inner,
 231                                   MLX5_ADDR_OF(fte_match_param,
 232                                                &fte->val,
 233                                                inner_headers),
 234                                   sizeof(__entry->value_inner));
 235                            memcpy(__entry->value_misc,
 236                                   MLX5_ADDR_OF(fte_match_param,
 237                                                &fte->val,
 238                                                misc_parameters),
 239                                   sizeof(__entry->value_misc));
 240 
 241             ),
 242             TP_printk("op=%s fte=%p fg=%p index=%u group_index=%u action=<%s> flow_tag=%x %s\n",
 243                       __entry->new_fte ? "add" : "set",
 244                       __entry->fte, __entry->fg, __entry->index,
 245                       __entry->group_index, __print_flags(__entry->action, "|",
 246                                                           ACTION_FLAGS),
 247                       __entry->flow_tag,
 248                       __parse_fs_hdrs(__entry->mask_enable,
 249                                       __entry->mask_outer,
 250                                       __entry->mask_misc,
 251                                       __entry->mask_inner,
 252                                       __entry->value_outer,
 253                                       __entry->value_misc,
 254                                       __entry->value_inner))
 255             );
 256 
 257 TRACE_EVENT(mlx5_fs_del_fte,
 258             TP_PROTO(const struct fs_fte *fte),
 259             TP_ARGS(fte),
 260             TP_STRUCT__entry(
 261                 __field(const struct fs_fte *, fte)
 262                 __field(u32, index)
 263             ),
 264             TP_fast_assign(
 265                            __entry->fte = fte;
 266                            __entry->index = fte->index;
 267 
 268             ),
 269             TP_printk("fte=%p index=%u\n",
 270                       __entry->fte, __entry->index)
 271             );
 272 
 273 TRACE_EVENT(mlx5_fs_add_rule,
 274             TP_PROTO(const struct mlx5_flow_rule *rule),
 275             TP_ARGS(rule),
 276             TP_STRUCT__entry(
 277                 __field(const struct mlx5_flow_rule *, rule)
 278                 __field(const struct fs_fte *, fte)
 279                 __field(u32, sw_action)
 280                 __field(u32, index)
 281                 __field(u32, counter_id)
 282                 __array(u8, destination, sizeof(struct mlx5_flow_destination))
 283             ),
 284             TP_fast_assign(
 285                            __entry->rule = rule;
 286                            fs_get_obj(__entry->fte, rule->node.parent);
 287                            __entry->index = __entry->fte->dests_size - 1;
 288                            __entry->sw_action = rule->sw_action;
 289                            memcpy(__entry->destination,
 290                                   &rule->dest_attr,
 291                                   sizeof(__entry->destination));
 292                            if (rule->dest_attr.type &
 293                                MLX5_FLOW_DESTINATION_TYPE_COUNTER)
 294                                 __entry->counter_id =
 295                                         rule->dest_attr.counter_id;
 296             ),
 297             TP_printk("rule=%p fte=%p index=%u sw_action=<%s> [dst] %s\n",
 298                       __entry->rule, __entry->fte, __entry->index,
 299                       __print_flags(__entry->sw_action, "|", ACTION_FLAGS),
 300                       __parse_fs_dst(__entry->destination, __entry->counter_id))
 301             );
 302 
 303 TRACE_EVENT(mlx5_fs_del_rule,
 304             TP_PROTO(const struct mlx5_flow_rule *rule),
 305             TP_ARGS(rule),
 306             TP_STRUCT__entry(
 307                 __field(const struct mlx5_flow_rule *, rule)
 308                 __field(const struct fs_fte *, fte)
 309             ),
 310             TP_fast_assign(
 311                            __entry->rule = rule;
 312                            fs_get_obj(__entry->fte, rule->node.parent);
 313             ),
 314             TP_printk("rule=%p fte=%p\n",
 315                       __entry->rule, __entry->fte)
 316             );
 317 #endif
 318 
 319 #undef TRACE_INCLUDE_PATH
 320 #define TRACE_INCLUDE_PATH ./diag
 321 #undef TRACE_INCLUDE_FILE
 322 #define TRACE_INCLUDE_FILE fs_tracepoint
 323 #include <trace/define_trace.h>

/* [<][>][^][v][top][bottom][index][help] */