On Tue, Feb 25, 2025 at 7:18 AM Louis Chauvet <louis.chauvet@xxxxxxxxxxx> wrote: > > > > Le 25/01/2025 à 07:45, Jim Cromie a écrit : > > add for_subvec() macro to encapsulate a for-loop pattern thats used > > repeatedly to iterate over a boxed.vector of N elements. > > > > Signed-off-by: Jim Cromie <jim.cromie@xxxxxxxxx> > > Hi Jim, > > Do you think it is possible to move this patch earlier in the series, so > you can use it when introducing class_users. > Yup. :-) > Reviewed-by: Louis Chauvet <louis.chauvet@xxxxxxxxxxx> > > Thanks, > Louis Chauvet > > > --- > > lib/dynamic_debug.c | 30 ++++++++++++++++++++++-------- > > 1 file changed, 22 insertions(+), 8 deletions(-) > > > > diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c > > index 6bca0c6727d4..08b6e4e7489f 100644 > > --- a/lib/dynamic_debug.c > > +++ b/lib/dynamic_debug.c > > @@ -158,20 +158,34 @@ static void vpr_info_dq(const struct ddebug_query *query, const char *msg) > > _dt->num_class_users); \ > > }) > > > > +/* > > + * simplify a repeated for-loop pattern walking N steps in a T _vec > > + * member inside a struct _box. It expects int i and T *_sp to be > > + * declared in the caller. > > + * @_i: caller provided counter. > > + * @_sp: cursor into _vec, to examine each item. > > + * @_box: ptr to a struct containing @_vec member > > + * @_vec: name of a sub-struct member in _box, with array-ref and length > > + */ > > +#define for_subvec(_i, _sp, _box, _vec) \ > > + for ((_i) = 0, (_sp) = (_box)->_vec; \ > > + (_i) < (_box)->num_##_vec; \ > > + (_i)++, (_sp)++) > > + > > static int ddebug_find_valid_class(struct ddebug_table const *dt, const char *class_string) > > { > > struct ddebug_class_map *map; > > struct ddebug_class_user *cli; > > int i, idx; > > > > - for (i = 0, map = dt->classes; i < dt->num_classes; i++, map++) { > > + for_subvec(i, map, dt, classes) { > > idx = match_string(map->class_names, map->length, class_string); > > if (idx >= 0) { > > vpr_dt_info(dt, "good-class: %s.%s ", map->mod_name, class_string); > > return idx + map->base; > > } > > } > > - for (i = 0, cli = dt->class_users; i < dt->num_class_users; i++, cli++) { > > + for_subvec(i, cli, dt, class_users) { > > idx = match_string(cli->map->class_names, cli->map->length, class_string); > > if (idx >= 0) { > > vpr_dt_info(dt, "class-ref: %s -> %s.%s ", > > @@ -1190,7 +1204,7 @@ static void ddebug_apply_params(const struct ddebug_class_map *cm, const char *m > > if (cm->mod) { > > vpr_cm_info(cm, "loaded classmap: %s", modnm); > > /* ifdef protects the cm->mod->kp deref */ > > - for (i = 0, kp = cm->mod->kp; i < cm->mod->num_kp; i++, kp++) > > + for_subvec(i, kp, cm->mod, kp) > > ddebug_match_apply_kparam(kp, cm, modnm); > > } > > #endif > > @@ -1212,7 +1226,7 @@ static void ddebug_attach_module_classes(struct ddebug_table *dt, > > struct ddebug_class_map *cm; > > int i, nc = 0; > > > > - for (i = 0, cm = di->classes; i < di->num_classes; i++, cm++) { > > + for_subvec(i, cm, di, classes) { > > if (!strcmp(cm->mod_name, dt->mod_name)) { > > vpr_cm_info(cm, "classes[%d]:", i); > > if (!nc++) > > @@ -1225,7 +1239,7 @@ static void ddebug_attach_module_classes(struct ddebug_table *dt, > > vpr_info("module:%s attached %d classes\n", dt->mod_name, nc); > > dt->num_classes = nc; > > > > - for (i = 0, cm = dt->classes; i < dt->num_classes; i++, cm++) > > + for_subvec(i, cm, dt, classes) > > ddebug_apply_params(cm, cm->mod_name); > > } > > > > @@ -1245,7 +1259,7 @@ static void ddebug_attach_user_module_classes(struct ddebug_table *dt, > > * module's refs, save to dt. For loadables, this is the > > * whole array. > > */ > > - for (i = 0, cli = di->class_users; i < di->num_class_users; i++, cli++) { > > + for_subvec(i, cli, di, class_users) { > > if (WARN_ON_ONCE(!cli || !cli->map || !cli->mod_name)) > > continue; > > if (!strcmp(cli->mod_name, dt->mod_name)) { > > @@ -1261,7 +1275,7 @@ static void ddebug_attach_user_module_classes(struct ddebug_table *dt, > > dt->num_class_users = nc; > > > > /* now iterate dt */ > > - for (i = 0, cli = dt->class_users; i < dt->num_class_users; i++, cli++) > > + for_subvec(i, cli, di, class_users) > > ddebug_apply_params(cli->map, cli->mod_name); > > > > vpr_dt_info(dt, "attach-client-module: "); > > @@ -1299,7 +1313,7 @@ static int ddebug_add_module(struct _ddebug_info *di, const char *modname) > > > > INIT_LIST_HEAD(&dt->link); > > > > - for (i = 0, iter = di->descs; i < di->num_descs; i++, iter++) > > + for_subvec(i, iter, di, descs) > > if (iter->class_id != _DPRINTK_CLASS_DFLT) > > class_ct++; > > > > -- > Louis Chauvet, Bootlin > Embedded Linux and Kernel engineering > https://bootlin.com >