diff options
author | Benoît Ganne <bganne@cisco.com> | 2021-03-04 14:31:03 +0100 |
---|---|---|
committer | Damjan Marion <dmarion@me.com> | 2021-05-01 11:42:37 +0000 |
commit | f89bbbe300dad7bc479db535e7822199f98aca30 (patch) | |
tree | 1163eeac010375a962fcda8c2e0c7a7046161bf1 /src/vnet/util/trajectory.c | |
parent | c8983241b9d93d2c3b60b0705efbc3cdee54c534 (diff) |
vlib: refactor trajectory trace debug feature
trajectory trace has been broken for a while because we used to save the
buffer trajectory in a vector pointed to in opaque2. This does not work
well when opaque2 is copied (eg. because of a clone) as 2 buffers end up
sharing the same vector.
This dedicates a full cacheline in the buffer metadata instead when
trajectory is compiled in. No dynamic allocation, no sharing, no tears.
Type: refactor
Change-Id: I6a028ca1b48d38f393a36979e5e452c2dd48ad3f
Signed-off-by: Benoît Ganne <bganne@cisco.com>
Diffstat (limited to 'src/vnet/util/trajectory.c')
-rw-r--r-- | src/vnet/util/trajectory.c | 99 |
1 files changed, 0 insertions, 99 deletions
diff --git a/src/vnet/util/trajectory.c b/src/vnet/util/trajectory.c deleted file mode 100644 index 2538c7ee64a..00000000000 --- a/src/vnet/util/trajectory.c +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (c) 2017 Cisco and/or its affiliates. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** \file - * Buffer trace trajectory utilities - */ - -#include <vnet/vnet.h> - -/** - * Dump a trajectory trace, reasonably easy to call from gdb - */ -void -vnet_dump_trajectory_trace (vlib_main_t * vm, u32 bi) -{ -#if VLIB_BUFFER_TRACE_TRAJECTORY > 0 - vlib_node_main_t *vnm = &vm->node_main; - vlib_buffer_t *b; - u16 *trace; - u8 i; - - b = vlib_get_buffer (vm, bi); - - trace = vnet_buffer2 (b)->trajectory_trace; - - fformat (stderr, "Context trace for bi %d b 0x%llx, visited %d\n", - bi, b, vec_len (trace)); - - for (i = 0; i < vec_len (trace); i++) - { - u32 node_index; - - node_index = trace[i]; - - if (node_index >= vec_len (vnm->nodes)) - { - fformat (stderr, "Skip bogus node index %d\n", node_index); - continue; - } - - fformat (stderr, "%v (%d)\n", vnm->nodes[node_index]->name, node_index); - } -#else - fformat (stderr, "in vlib/buffers.h, " - "#define VLIB_BUFFER_TRACE_TRAJECTORY 1\n"); - -#endif -} - -#if VLIB_BUFFER_TRACE_TRAJECTORY > 0 - -void -init_trajectory_trace (vlib_buffer_t * b) -{ - if (!clib_mem_is_vec (vnet_buffer2 (b)->trajectory_trace)) - { - vnet_buffer2 (b)->trajectory_trace = 0; - vec_validate (vnet_buffer2 (b)->trajectory_trace, 7); - } - _vec_len (vnet_buffer2 (b)->trajectory_trace) = 0; -} - -void -add_trajectory_trace (vlib_buffer_t * b, u32 node_index) -{ - vec_add1 (vnet_buffer2 (b)->trajectory_trace, (u16) node_index); -} - -static clib_error_t * -trajectory_trace_init (vlib_main_t * vm) -{ - vlib_buffer_trace_trajectory_cb = add_trajectory_trace; - vlib_buffer_trace_trajectory_init_cb = init_trajectory_trace; - return 0; -} - -VLIB_INIT_FUNCTION (trajectory_trace_init); - -#endif - -/* - * fd.io coding-style-patch-verification: ON - * - * Local Variables: - * eval: (c-set-style "gnu") - * End: - */ |