Messages in this thread Patch in this message |  | | From | Jim Cromie <> | Subject | [RFC PATCH v6 30/34] dyndbg: split/copy ._index into 2 new fields: ._back, ._map | Date | Sat, 29 May 2021 14:00:25 -0600 |
| |
In order to do: __dyndbgs[-N].site->__dyndbg_sites[N]
._index had 2 jobs: provide index back to __dyndbgs[0] provide index out to __dyndbg_sites[N]
So rename ._index to ._back & ._map, adjust ddebug_add_module() to init both fields identically, and replace other ._index's with the "correct" replacement.
NOTES:
._map is a better name better than ._out. Since ._map is a separate field, it can map arbitrarily. It now maps ddebugs->sites 1->1, but it can/will-soon map N->1; all a function's pr_debugs will share a single _ddebug_site, and we can reclaim redundant rows.
The "correct" choice of ._map/._back cannot be tested properly now, since ._map == ._back. Once N->1 is done, we can re-define SITE_CHK and validate (or correct) the ._map/._back choices made here.
No functional changes.
Signed-off-by: Jim Cromie <jim.cromie@gmail.com> --- include/linux/dynamic_debug.h | 6 ++++-- lib/dynamic_debug.c | 35 ++++++++++++++++++----------------- 2 files changed, 22 insertions(+), 19 deletions(-)
diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h index b2189ff94fda..fe70dda704d2 100644 --- a/include/linux/dynamic_debug.h +++ b/include/linux/dynamic_debug.h @@ -51,7 +51,8 @@ struct _ddebug { /* format is always needed, lineno shares word with flags */ const char *format; const unsigned lineno:18; - unsigned _index:14; + unsigned _back:14; + unsigned _map:14; /* * The flags field controls the behaviour at the callsite. * The bits here are changed dynamically when the user @@ -95,7 +96,8 @@ union _ddebug_header { union _ddebug_site_header *site; const char *format; const unsigned lineno:18; - unsigned _index:14; + unsigned _back:14; + unsigned _map:14; unsigned int flags:8; }; }; diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index 0e2e082b487b..524303a04462 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -148,39 +148,39 @@ static void vpr_info_dq(const struct ddebug_query *query, const char *msg) static struct _ddebug_site *ddebug_site_get(struct _ddebug *dp) { - union _ddebug_header *dh = (union _ddebug_header *) (dp - dp->_index); + union _ddebug_header *dh = (union _ddebug_header *) (dp - dp->_back); if (!is_dyndbg_header_pair(dh, dh->site)) - v3pr_info("get: header fail on %d-%d\n", dp->_index, dp->lineno); + v3pr_info("get: header fail on %d-%d\n", dp->_back, dp->lineno); #ifdef SITE_CHK if (dp >= __start___dyndbg && dp < __stop___dyndbg) { v5pr_info("get: %s is builtin: %d %s:%s:%d\n", - dh->site[dp->_index].modname, dp->_index, - dh->site[dp->_index].filename, - dh->site[dp->_index].function, dp->lineno); + dh->site[dp->_map].modname, dp->_back, + dh->site[dp->_map].filename, + dh->site[dp->_map].function, dp->lineno); - BUG_ON(dp != &__start___dyndbg[dp->_index]); + BUG_ON(dp != &__start___dyndbg[dp->_back]); - BUG_ON(!(dp->_index == (dp - dh) && - dp->_index == (dp - __start___dyndbg) && - dp->_index == (&__start___dyndbg_sites[dp->_index] + BUG_ON(!(dp->_back == (dp - dh) && + dp->_back == (dp - __start___dyndbg) && + dp->_back == (&__start___dyndbg_sites[dp->_back] - &__start___dyndbg_sites[0]))); if (dp->site) - BUG_ON(&__start___dyndbg_sites[dp->_index] != dp->site); + BUG_ON(&__start___dyndbg_sites[dp->_map] != dp->site); } else { v4pr_info("get: %s is loaded: %d %s:%s:%d\n", - dh->site[dp->_index].modname, dp->_index, - dh->site[dp->_index].filename, - dh->site[dp->_index].function, dp->lineno); + dh->site[dp->_map].modname, dp->_back, + dh->site[dp->_map].filename, + dh->site[dp->_map].function, dp->lineno); } if (dp->site) - BUG_ON(&dh->site[dp->_index] != dp->site); + BUG_ON(&dh->site[dp->_map] != dp->site); return dp->site; #else - return (struct _ddebug_site *) &dh->site[dp->_index]; + return (struct _ddebug_site *) &dh->site[dp->_map]; #endif } static inline void ddebug_site_put(struct _ddebug *dp) @@ -1108,8 +1108,9 @@ static int __ddebug_add_module(struct _ddebug *tab, struct _ddebug_site *sites, dt->sites = sites; for (i = 0; i < numdbgs; i++) { - tab[i]._index = base + i; - v3pr_info(" %d %d %s.%s.%d\n", i, tab[i]._index, + tab[i]._back = base + i; + tab[i]._map = base + i; + v3pr_info(" %d %d %d %s.%s.%d\n", i, tab[i]._back, tab[i]._map, modname, sites[i].function, tab[i].lineno); } -- 2.31.1
|  |