[PATCH v2 0/7] add trace support for control message

Chaoyong He chaoyong.he at corigine.com
Tue Jul 9 05:16:37 CEST 2024


> On 7/8/2024 3:45 AM, Chaoyong He wrote:
> > This patch series add trace support for control message send to flower
> > firmware.
> >
> > ---
> > v2: rebase to the latest main branch.
> > ---
> >
> > Chaoyong He (7):
> >   net/nfp: add trace points about port
> >   net/nfp: add trace point about tunnel
> >   net/nfp: add trace point about Qos
> >   net/nfp: refactor to prepare for add flow trace point
> >   net/nfp: add trace point about flow rule
> >   net/nfp: add trace point about flow rule pattern
> >   net/nfp: add trace point about flow rule action
> >
> 
> Still getting some github action errors, can you please check:
> https://github.com/ferruhy/dpdk/actions/runs/9838241137

In short, after some debug, seems we are not using the 'trace' library as its expect, so we decide to abandon this patch series. 

For details:

# The way we debug:
```
/home/hcy/dpdk-next-net-private/build/app/dpdk-testpmd -c 3 --no-huge -m 40 -d build/drivers -a 0:0.0 --vdev ne
```

# The back trace when problem occurs:
```
(gdb) bt
#0  rte_pmd_nfp_trace_cmsg_flow_pattern_meta_tci (cmsg=0x3) at ../drivers/net/nfp/nfp_trace.h:239
#1  0x00007ffff7c81879 in __rte_trace_point_register (
    handle=0x7ffff02c5c98 <__rte_pmd_nfp_trace_cmsg_flow_pattern_meta_tci>,
    name=0x7ffff02b36c0 <__rte_pmd_nfp_trace_cmsg_flow_pattern_meta_tci_name> "pmd.net.nfp.cmsg.flow.pattern.meta_tci", register_fn=0x7ffff029ce8c <rte_pmd_nfp_trace_cmsg_flow_pattern_meta_tci>)
    at ../lib/eal/common/eal_common_trace.c:480
#2  0x00007ffff029eb0f in rte_pmd_nfp_trace_cmsg_flow_pattern_meta_tci_init ()
    at ../drivers/net/nfp/nfp_trace.c:43
#3  0x00007ffff7fd11ae in call_init (env=0x7fffffffdeb0, argv=0x7fffffffde48, argc=12,
    l=<optimized out>) at dl-init.c:70
#4  call_init (l=<optimized out>, argc=12, argv=0x7fffffffde48, env=0x7fffffffdeb0) at dl-init.c:26
#5  0x00007ffff7fd129c in _dl_init (main_map=0x716e10, argc=12, argv=0x7fffffffde48, env=0x7fffffffdeb0)
    at dl-init.c:117
#6  0x00007ffff15cef65 in __GI__dl_catch_exception (exception=<optimized out>, operate=<optimized out>,
    args=<optimized out>) at /usr/src/debug/glibc-2.34-60.el9.x86_64/elf/dl-error-skeleton.c:182
#7  0x00007ffff7fd7cbe in dl_open_worker (a=a at entry=0x7fffffffd730) at dl-open.c:803
#8  0x00007ffff15cef08 in __GI__dl_catch_exception (exception=<optimized out>, operate=<optimized out>,
    args=<optimized out>) at /usr/src/debug/glibc-2.34-60.el9.x86_64/elf/dl-error-skeleton.c:208
#9  0x00007ffff7fd804f in _dl_open (file=<optimized out>, mode=-2147483646,
    caller_dlopen=0x7ffff7c66e15 <eal_dlopen+318>, nsid=-2, argc=12, argv=0x7fffffffde48,
    env=0x7fffffffdeb0) at dl-open.c:879
#10 0x00007ffff14d486c in dlopen_doit (a=a at entry=0x7fffffffd9a0) at dlopen.c:56
#11 0x00007ffff15cef08 in __GI__dl_catch_exception (exception=exception at entry=0x7fffffffd900,
    operate=<optimized out>, args=<optimized out>)
    at /usr/src/debug/glibc-2.34-60.el9.x86_64/elf/dl-error-skeleton.c:208
#12 0x00007ffff15cefd3 in __GI__dl_catch_error (objname=0x7fffffffd958, errstring=0x7fffffffd960,
    mallocedp=0x7fffffffd957, operate=<optimized out>, args=<optimized out>)
    at /usr/src/debug/glibc-2.34-60.el9.x86_64/elf/dl-error-skeleton.c:227
#13 0x00007ffff14d433e in _dlerror_run (operate=operate at entry=0x7ffff14d4810 <dlopen_doit>,
    args=args at entry=0x7fffffffd9a0) at dlerror.c:138
#14 0x00007ffff14d4921 in dlopen_implementation (dl_caller=<optimized out>, mode=<optimized out>,
    file=<optimized out>) at dlopen.c:71
#15 ___dlopen (file=<optimized out>, mode=<optimized out>) at dlopen.c:81
#16 0x00007ffff7c66e15 in eal_dlopen (pathname=0x6439f0 "build/drivers/librte_net_nfp.so")
    at ../lib/eal/common/eal_common_options.c:506
#17 0x00007ffff7c670ff in eal_plugins_init () at ../lib/eal/common/eal_common_options.c:580
#18 0x00007ffff7c8a03c in rte_eal_init (argc=12, argv=0x7fffffffde48) at ../lib/eal/linux/eal.c:1015
#19 0x00000000004bb305 in main (argc=12, argv=0x7fffffffde48) at ../app/test-pmd/testpmd.c:4553
```

# The logic which cause the problem:
```
int
__rte_trace_point_register(rte_trace_point_t *handle, const char *name,
		void (*register_fn)(void))
{
	struct trace_point *tp;
	uint16_t sz;

	/* Sanity checks of arguments */
	if (name == NULL || register_fn == NULL || handle == NULL) {
		trace_err("invalid arguments");
		rte_errno = EINVAL;
		goto fail;
	}

	/* Check the size of the trace point object */
	RTE_PER_LCORE(trace_point_sz) = 0;
	register_fn();                         // <---------- Here, call with empty parameter list
	if (RTE_PER_LCORE(trace_point_sz) == 0) {
		trace_err("missing rte_trace_emit_header() in register fn");
		rte_errno = EBADF;
		goto fail;
	}
	
	...
}
```

```
RTE_TRACE_POINT(
	rte_pmd_nfp_trace_cmsg_flow_meta,
	RTE_TRACE_POINT_ARGS(void *cmsg),           // <--- Here, we need a parameter

	struct nfp_fl_rule_metadata *meta = cmsg;
	rte_trace_point_emit_u8(meta->key_len);
	rte_trace_point_emit_u8(meta->mask_len);
	rte_trace_point_emit_u8(meta->act_len);
	rte_trace_point_emit_u8(meta->flags);
	rte_trace_point_emit_u32(meta->host_ctx_id);
	rte_trace_point_emit_u64(meta->host_cookie);
	rte_trace_point_emit_u64(meta->flow_version);
	rte_trace_point_emit_u32(meta->shortcut);
)
```

# Somehow, seems it get the parameter from the `rdi` register:
```
(gdb) info reg
rax            0x7ffff029ce8c      140737222659724
rbx            0x7ffff02c29d8      140737222814168
rcx            0x7ffff1246a40      140737239083584
rdx            0x7ffff124a000      140737239097344
rsi            0x7ffff12489e0      140737239091680
rdi            0x3                 3
rbp            0x7fffffffd390      0x7fffffffd390
rsp            0x7fffffffd370      0x7fffffffd370
r8             0x0                 0
r9             0x0                 0
r10            0x8000              32768
r11            0x7ffff1633c80      140737243200640
r12            0x7fffffffde48      140737488346696
r13            0x7fffffffdeb0      140737488346800
r14            0x7ffff02c2a98      140737222814360
r15            0x0                 0
rip            0x7ffff029ce98      0x7ffff029ce98 <rte_pmd_nfp_trace_cmsg_flow_pattern_meta_tci+12>
eflags         0x202               [ IF ]
cs             0x33                51
ss             0x2b                43
ds             0x0                 0
es             0x0                 0
fs             0x0                 0
gs             0x0                 0
k0             0x2107c             135292
k1             0xfefe0000          4278059008
k2             0xffffbfff          4294950911
k3             0x0                 0
k4             0x0                 0
k5             0x0                 0
k6             0x0                 0
k7             0x0                 0
```

# And the value in `rdi` register are never changed:
```
(gdb) frame 19
#19 0x00000000004bb305 in main (argc=12, argv=0x7fffffffde48) at ../app/test-pmd/testpmd.c:4553
4553            diag = rte_eal_init(argc, argv);
(gdb) info reg
rax            0x7ffff029ce8c      140737222659724
rbx            0x0                 0
rcx            0x7ffff1246a40      140737239083584
rdx            0x7ffff124a000      140737239097344
rsi            0x7ffff12489e0      140737239091680
rdi            0x3                 3
rbp            0x7fffffffdd30      0x7fffffffdd30
rsp            0x7fffffffdc30      0x7fffffffdc30
r8             0x0                 0
r9             0x0                 0
r10            0x8000              32768
r11            0x7ffff1633c80      140737243200640
r12            0x7fffffffde48      140737488346696
r13            0x4bb19c            4960668
r14            0x526ae0            5401312
r15            0x7ffff7ffd000      140737354125312
rip            0x4bb305            0x4bb305 <main+361>
eflags         0x202               [ IF ]
cs             0x33                51
ss             0x2b                43
ds             0x0                 0
es             0x0                 0
fs             0x0                 0
gs             0x0                 0
k0             0x2107c             135292
k1             0xfefe0000          4278059008
k2             0xffffbfff          4294950911
k3             0x0                 0
k4             0x0                 0
k5             0x0                 0
k6             0x0                 0
k7             0x0                 0
```


More information about the dev mailing list