attempt container-of, broken, missing use of uplink... took that out. ptr computations are naive, and wrong. Deeper prob is lack of _ddebug_vec, with header and descs in same struct. maybe. builtin_state looks right in debugger --- lib/dynamic_debug.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index 194367bc13fb..11fea1f818a7 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -173,8 +173,25 @@ static struct ddebug_class_map *ddebug_find_valid_class(struct ddebug_table cons return NULL; } -static inline struct _ddebug_site * _ddebug_map_site(const struct _ddebug *desc) +/* + * mapping from desc to site is multi-step: + * - _index back to &descs[0] + * - container-of to get header struct above + * - ._uplink field, pointing to _ddebug_info (for builtins, loadables) + * - di->sites[desc->_map] + */ +static struct _ddebug_site * _ddebug_map_site(const struct _ddebug *desc) { + struct _ddebug_info *di; + struct _ddebug const *d0 = desc - desc->_index * sizeof(struct _ddebug); + + di = (struct _ddebug_info *) d0; + + v3pr_info("map_site idx:%d map:%d %s.%s di:%px site:%px ds:%px\n", + desc->_index, desc->_map, + desc->site->_modname, desc->site->_function, + di, desc->site, &di->sites[desc->_map]); + return desc->site; } #define _desc_field(desc, _fld) (desc ? (_ddebug_map_site(desc)->_fld) : "_na_") @@ -866,7 +883,7 @@ static char *__dynamic_emit_prefix(const struct _ddebug *desc, char *buf) return buf; } -static inline char *dynamic_emit_prefix(struct _ddebug *desc, char *buf) +char *dynamic_emit_prefix(struct _ddebug *desc, char *buf) { if (unlikely(desc->flags & _DPRINTK_FLAGS_INCL_ANY)) return __dynamic_emit_prefix(desc, buf); -- 2.37.2