drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_dbg.c
Source file repositories/reference/linux-study-clean/drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_dbg.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/net/ethernet/mellanox/mlx5/core/steering/sws/dr_dbg.c- Extension
.c- Size
- 30669 bytes
- Lines
- 1188
- Domain
- Driver Families
- Bucket
- drivers/net
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/debugfs.hlinux/hex.hlinux/kernel.hlinux/seq_file.hlinux/version.hdr_types.h
Detected Declarations
enum dr_dump_rec_typefunction mlx5dr_dbg_dump_data_init_new_bufffunction mlx5dr_dbg_create_dump_datafunction mlx5dr_dbg_destroy_dump_datafunction list_for_each_entry_safefunction mlx5dr_dbg_dump_data_printfunction mlx5dr_dbg_tbl_addfunction mlx5dr_dbg_tbl_delfunction mlx5dr_dbg_rule_addfunction mlx5dr_dbg_rule_delfunction dr_dump_icm_to_idxfunction dr_dump_hex_printfunction dr_dump_rule_action_memfunction dr_dump_rule_memfunction dr_dump_rule_rx_txfunction dr_dump_rulefunction list_for_each_entryfunction dr_dump_matcher_maskfunction dr_dump_matcher_builderfunction dr_dump_matcher_rx_txfunction dr_dump_matcherfunction dr_dump_matcher_allfunction list_for_each_entryfunction dr_dump_table_rx_txfunction dr_dump_tablefunction dr_dump_table_allfunction list_for_each_entryfunction dr_dump_send_ringfunction dr_dump_domain_info_flex_parserfunction dr_dump_domain_info_capsfunction xa_for_eachfunction dr_dump_domain_infofunction dr_dump_domainfunction dr_dump_domain_allfunction list_for_each_entryfunction dr_dump_startfunction dr_dump_nextfunction dr_dump_stopfunction dr_dump_showfunction mlx5dr_dbg_init_dumpfunction mlx5dr_dbg_uninit_dump
Annotated Snippet
if (ptrn_arg) {
for (i = 0; i < action->rewrite->num_of_actions; i++) {
ret = snprintf(buff, MLX5DR_DEBUG_DUMP_BUFF_LENGTH,
",0x%016llx",
be64_to_cpu(((__be64 *)rewrite_data)[i]));
if (ret < 0)
return ret;
ret = mlx5dr_dbg_dump_data_print(file, buff, ret);
if (ret)
return ret;
}
}
ret = snprintf(buff, MLX5DR_DEBUG_DUMP_BUFF_LENGTH, "\n");
if (ret < 0)
return ret;
ret = mlx5dr_dbg_dump_data_print(file, buff, ret);
if (ret)
return ret;
break;
}
case DR_ACTION_TYP_VPORT:
ret = snprintf(buff, MLX5DR_DEBUG_DUMP_BUFF_LENGTH,
"%d,0x%llx,0x%llx,0x%x\n",
DR_DUMP_REC_TYPE_ACTION_VPORT, action_id, rule_id,
action->vport->caps->num);
if (ret < 0)
return ret;
ret = mlx5dr_dbg_dump_data_print(file, buff, ret);
if (ret)
return ret;
break;
case DR_ACTION_TYP_TNL_L2_TO_L2:
ret = snprintf(buff, MLX5DR_DEBUG_DUMP_BUFF_LENGTH,
"%d,0x%llx,0x%llx\n",
DR_DUMP_REC_TYPE_ACTION_DECAP_L2, action_id,
rule_id);
if (ret < 0)
return ret;
ret = mlx5dr_dbg_dump_data_print(file, buff, ret);
if (ret)
return ret;
break;
case DR_ACTION_TYP_TNL_L3_TO_L2:
ret = snprintf(buff, MLX5DR_DEBUG_DUMP_BUFF_LENGTH,
"%d,0x%llx,0x%llx,0x%x\n",
DR_DUMP_REC_TYPE_ACTION_DECAP_L3, action_id,
rule_id,
(action->rewrite->ptrn && action->rewrite->arg) ?
mlx5dr_arg_get_obj_id(action->rewrite->arg) :
action->rewrite->index);
if (ret < 0)
return ret;
ret = mlx5dr_dbg_dump_data_print(file, buff, ret);
if (ret)
return ret;
break;
case DR_ACTION_TYP_L2_TO_TNL_L2:
ret = snprintf(buff, MLX5DR_DEBUG_DUMP_BUFF_LENGTH,
"%d,0x%llx,0x%llx,0x%x\n",
DR_DUMP_REC_TYPE_ACTION_ENCAP_L2, action_id,
rule_id, action->reformat->id);
if (ret < 0)
return ret;
ret = mlx5dr_dbg_dump_data_print(file, buff, ret);
if (ret)
return ret;
break;
case DR_ACTION_TYP_L2_TO_TNL_L3:
ret = snprintf(buff, MLX5DR_DEBUG_DUMP_BUFF_LENGTH,
"%d,0x%llx,0x%llx,0x%x\n",
DR_DUMP_REC_TYPE_ACTION_ENCAP_L3, action_id,
rule_id, action->reformat->id);
if (ret < 0)
return ret;
ret = mlx5dr_dbg_dump_data_print(file, buff, ret);
if (ret)
return ret;
break;
case DR_ACTION_TYP_POP_VLAN:
ret = snprintf(buff, MLX5DR_DEBUG_DUMP_BUFF_LENGTH,
"%d,0x%llx,0x%llx\n",
DR_DUMP_REC_TYPE_ACTION_POP_VLAN, action_id,
rule_id);
Annotation
- Immediate include surface: `linux/debugfs.h`, `linux/hex.h`, `linux/kernel.h`, `linux/seq_file.h`, `linux/version.h`, `dr_types.h`.
- Detected declarations: `enum dr_dump_rec_type`, `function mlx5dr_dbg_dump_data_init_new_buff`, `function mlx5dr_dbg_create_dump_data`, `function mlx5dr_dbg_destroy_dump_data`, `function list_for_each_entry_safe`, `function mlx5dr_dbg_dump_data_print`, `function mlx5dr_dbg_tbl_add`, `function mlx5dr_dbg_tbl_del`, `function mlx5dr_dbg_rule_add`, `function mlx5dr_dbg_rule_del`.
- Atlas domain: Driver Families / drivers/net.
- Implementation status: source implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.