> 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@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@entry=0x7fffffffd9a0) at dlopen.c:56 #11 0x00007ffff15cef08 in __GI__dl_catch_exception (exception=exception@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@entry=0x7ffff14d4810 <dlopen_doit>, args=args@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 ```