From: Jim Cromie <jim.cromie@gmail.com>
To: linux-kernel@vger.kernel.org, jbaron@akamai.com,
gregkh@linuxfoundation.org, dri-devel@lists.freedesktop.org,
amd-gfx@lists.freedesktop.org,
intel-gvt-dev@lists.freedesktop.org,
intel-gfx@lists.freedesktop.org
Cc: lb@semihalf.com, linux@rasmusvillemoes.dk, joe@perches.com,
mcgrof@kernel.org, daniel.vetter@ffwll.ch, jani.nikula@intel.com,
ville.syrjala@linux.intel.com, seanpaul@chromium.org,
robdclark@gmail.com, groeck@google.com, yanivt@google.com,
bleung@google.com, rostedt@goodmis.org,
linux-doc@vger.kernel.org, Jim Cromie <jim.cromie@gmail.com>
Subject: [PATCH v7c 15/24] dyndbg: refactor ddebug_classparam_clamp_input
Date: Wed, 18 Oct 2023 11:05:55 -0600 [thread overview]
Message-ID: <20231018170604.569042-16-jim.cromie@gmail.com> (raw)
In-Reply-To: <20231018170604.569042-1-jim.cromie@gmail.com>
Extract input validation code, from param_set_dyndbg_module_classes()
(the sys-node >handler) to new: ddebug_classparam_clamp_input(kp),
call it from former. It takes kernel-param arg, so it can complain
about "foo: bad input".
Reuse ddparam_clamp_input(kp) in ddebug_sync_classbits(),
to validate inputs from parent's params, just like our own.
To support that reuse, alter ddebug_sync_classbits() and caller to
pass kp instead of kp->arg.
Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
---
lib/dynamic_debug.c | 70 ++++++++++++++++++++++++++++++---------------
1 file changed, 47 insertions(+), 23 deletions(-)
diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
index c9517d403e06..a6ee142668bf 100644
--- a/lib/dynamic_debug.c
+++ b/lib/dynamic_debug.c
@@ -653,6 +653,30 @@ static int ddebug_apply_class_bitmap(const struct ddebug_class_param *dcp,
#define CLASSMAP_BITMASK(width) ((1UL << (width)) - 1)
+static void ddebug_class_param_clamp_input(unsigned long *inrep, const struct kernel_param *kp)
+{
+ const struct ddebug_class_param *dcp = kp->arg;
+ const struct ddebug_class_map *map = dcp->map;
+
+ switch (map->map_type) {
+ case DD_CLASS_TYPE_DISJOINT_BITS:
+ /* expect bits. mask and warn if too many */
+ if (*inrep & ~CLASSMAP_BITMASK(map->length)) {
+ pr_warn("%s: input: 0x%lx exceeds mask: 0x%lx, masking\n",
+ KP_NAME(kp), *inrep, CLASSMAP_BITMASK(map->length));
+ *inrep &= CLASSMAP_BITMASK(map->length);
+ }
+ break;
+ case DD_CLASS_TYPE_LEVEL_NUM:
+ /* input is bitpos, of highest verbosity to be enabled */
+ if (*inrep > map->length) {
+ pr_warn("%s: level:%ld exceeds max:%d, clamping\n",
+ KP_NAME(kp), *inrep, map->length);
+ *inrep = map->length;
+ }
+ break;
+ }
+}
static int param_set_dyndbg_module_classes(const char *instr,
const struct kernel_param *kp,
const char *modnm)
@@ -671,26 +695,15 @@ static int param_set_dyndbg_module_classes(const char *instr,
pr_err("expecting numeric input, not: %s > %s\n", instr, KP_NAME(kp));
return -EINVAL;
}
+ ddebug_class_param_clamp_input(&inrep, kp);
switch (map->map_type) {
case DD_CLASS_TYPE_DISJOINT_BITS:
- /* expect bits. mask and warn if too many */
- if (inrep & ~CLASSMAP_BITMASK(map->length)) {
- pr_warn("%s: input: 0x%lx exceeds mask: 0x%lx, masking\n",
- KP_NAME(kp), inrep, CLASSMAP_BITMASK(map->length));
- inrep &= CLASSMAP_BITMASK(map->length);
- }
v2pr_info("bits:0x%lx > %s.%s\n", inrep, modnm ?: "*", KP_NAME(kp));
totct += ddebug_apply_class_bitmap(dcp, &inrep, *dcp->bits, modnm);
*dcp->bits = inrep;
break;
case DD_CLASS_TYPE_LEVEL_NUM:
- /* input is bitpos, of highest verbosity to be enabled */
- if (inrep > map->length) {
- pr_warn("%s: level:%ld exceeds max:%d, clamping\n",
- KP_NAME(kp), inrep, map->length);
- inrep = map->length;
- }
old_bits = CLASSMAP_BITMASK(*dcp->lvl);
new_bits = CLASSMAP_BITMASK(inrep);
v2pr_info("lvl:%ld bits:0x%lx > %s\n", inrep, new_bits, KP_NAME(kp));
@@ -1157,16 +1170,27 @@ static const char * const ddebug_classmap_typenames[] = {
ddebug_classmap_typenames[_cm->map_type]); \
})
-static void ddebug_sync_classbits(const struct ddebug_class_param *dcp, const char *modname)
+static void ddebug_sync_classbits(const struct kernel_param *kp, const char *modname)
{
- /* clamp initial bitvec, mask off hi-bits */
- if (*dcp->bits & ~CLASSMAP_BITMASK(dcp->map->length)) {
- *dcp->bits &= CLASSMAP_BITMASK(dcp->map->length);
- v2pr_info("preset classbits: %lx\n", *dcp->bits);
+ struct ddebug_class_param *dcp = kp->arg;
+ unsigned long new_bits;
+
+ ddebug_class_param_clamp_input(dcp->bits, kp);
+
+ switch (dcp->map->map_type) {
+ case DD_CLASS_TYPE_DISJOINT_BITS:
+ v2pr_info(" %s: classbits: 0x%lx\n", KP_NAME(kp), *dcp->bits);
+ ddebug_apply_class_bitmap(dcp, dcp->bits, 0UL, modname);
+ break;
+ case DD_CLASS_TYPE_LEVEL_NUM:
+ new_bits = CLASSMAP_BITMASK(*dcp->lvl);
+ v2pr_info(" %s: lvl:%ld bits:0x%lx\n", KP_NAME(kp), *dcp->lvl, new_bits);
+ ddebug_apply_class_bitmap(dcp, &new_bits, 0UL, modname);
+ break;
+ default:
+ pr_err("bad map type %d\n", dcp->map->map_type);
+ return;
}
- /* force class'd prdbgs (in USEr module) to match (DEFINEr module) class-param */
- ddebug_apply_class_bitmap(dcp, dcp->bits, ~0, modname);
- ddebug_apply_class_bitmap(dcp, dcp->bits, 0, modname);
}
static void ddebug_match_apply_kparam(const struct kernel_param *kp,
@@ -1181,9 +1205,9 @@ static void ddebug_match_apply_kparam(const struct kernel_param *kp,
dcp = (struct ddebug_class_param *)kp->arg;
if (map == dcp->map) {
- v2pr_info("found kp:%s =0x%lx", kp->name, *dcp->bits);
- vpr_cm_info(map, "mapped to:");
- ddebug_sync_classbits(dcp, modnm);
+ v2pr_info(" found kp:%s =0x%lx", kp->name, *dcp->bits);
+ vpr_cm_info(map, " mapped to:");
+ ddebug_sync_classbits(kp, modnm);
}
}
--
2.41.0
next prev parent reply other threads:[~2023-10-18 17:07 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-18 17:05 [PATCH v7c 00/24] fix DRM_USE_DYNAMIC_DEBUG=y regression Jim Cromie
2023-10-18 17:05 ` [PATCH v7c 01/24] test-dyndbg: fixup CLASSMAP usage error Jim Cromie
2023-10-18 17:05 ` [PATCH v7c 02/24] dyndbg: reword "class unknown," to "class:_UNKNOWN_" Jim Cromie
2023-10-18 17:05 ` [PATCH v7c 03/24] dyndbg: make ddebug_class_param union members same size Jim Cromie
2023-10-18 17:05 ` [PATCH v7c 04/24] dyndbg: replace classmap list with a vector Jim Cromie
2023-10-18 17:05 ` [PATCH v7c 05/24] dyndbg: ddebug_apply_class_bitmap - add module arg, select on it Jim Cromie
2023-10-18 17:05 ` [PATCH v7c 06/24] dyndbg: split param_set_dyndbg_classes to module/wrapper fns Jim Cromie
2023-10-18 17:05 ` [PATCH v7c 07/24] dyndbg: drop NUM_TYPE_ARRAY Jim Cromie
2023-10-18 17:05 ` [PATCH v7c 08/24] dyndbg: reduce verbose/debug clutter Jim Cromie
2023-10-18 17:05 ` [PATCH v7c 09/24] dyndbg: silence debugs with no-change updates Jim Cromie
2023-10-18 17:05 ` [PATCH v7c 10/24] dyndbg: tighten ddebug_class_name() 1st arg type Jim Cromie
2023-10-18 17:05 ` [PATCH v7c 11/24] dyndbg: tighten fn-sig of ddebug_apply_class_bitmap Jim Cromie
2023-10-18 17:05 ` [PATCH v7c 12/24] dyndbg: reduce verbose=3 messages in ddebug_add_module Jim Cromie
2023-10-18 17:05 ` [PATCH v7c 13/24] dyndbg-API: remove DD_CLASS_TYPE_(DISJOINT|LEVEL)_NAMES and code Jim Cromie
2023-10-18 17:05 ` [PATCH v7c 14/24] dyndbg-API: fix CONFIG_DRM_USE_DYNAMIC_DEBUG regression Jim Cromie
2023-10-18 17:05 ` Jim Cromie [this message]
2023-10-18 17:05 ` [PATCH v7c 16/24] dyndbg-API: promote DYNDBG_CLASSMAP_PARAM to API Jim Cromie
2023-10-18 17:05 ` [PATCH v7c 17/24] dyndbg-doc: add classmap info to howto Jim Cromie
2023-10-18 17:05 ` [PATCH v7c 18/24] dyndbg: reserve flag bit _DPRINTK_FLAGS_PREFIX_CACHED Jim Cromie
2023-10-18 17:05 ` [PATCH v7c 19/24] dyndbg: add _DPRINTK_FLAGS_INCL_LOOKUP Jim Cromie
2023-10-18 17:06 ` [PATCH v7c 20/24] dyndbg: refactor *dynamic_emit_prefix Jim Cromie
2023-10-18 17:06 ` [PATCH v7c 21/24] dyndbg: change WARN_ON to WARN_ON_ONCE Jim Cromie
2023-10-18 17:06 ` [PATCH v7c 22/24] drm: use correct ccflags-y spelling Jim Cromie
2023-10-18 17:06 ` [PATCH v7c 23/24] drm-drivers: DRM_CLASSMAP_USE in 2nd batch of drivers, helpers Jim Cromie
2023-10-18 17:06 ` [PATCH v7c 24/24] drm: restore CONFIG_DRM_USE_DYNAMIC_DEBUG un-BROKEN Jim Cromie
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231018170604.569042-16-jim.cromie@gmail.com \
--to=jim.cromie@gmail.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=bleung@google.com \
--cc=daniel.vetter@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=gregkh@linuxfoundation.org \
--cc=groeck@google.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-gvt-dev@lists.freedesktop.org \
--cc=jani.nikula@intel.com \
--cc=jbaron@akamai.com \
--cc=joe@perches.com \
--cc=lb@semihalf.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@rasmusvillemoes.dk \
--cc=mcgrof@kernel.org \
--cc=robdclark@gmail.com \
--cc=rostedt@goodmis.org \
--cc=seanpaul@chromium.org \
--cc=ville.syrjala@linux.intel.com \
--cc=yanivt@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox