basically, reorder the elements to minimize data fetches.

1- move format and line-number check code to the top of the function,
   since they don't use/check site info.

2- test site pointer:
   If its null, we return early, skipping 3:
      If the query tests against missing site info, fail the match.
      otherwize site matches.

3- rest of function (checking site vs query) is unchanged.

ddebug_match_site ignores module, because it's tested already
by the caller, where it is known from debug_tables.

Signed-off-by: Jim Cromie <jim.cro...@gmail.com>
---
 lib/dynamic_debug.c | 41 +++++++++++++++++++++++++----------------
 1 file changed, 25 insertions(+), 16 deletions(-)

diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
index 9cff9db15937..da732e0c56e3 100644
--- a/lib/dynamic_debug.c
+++ b/lib/dynamic_debug.c
@@ -145,21 +145,7 @@ static void vpr_info_dq(const struct ddebug_query *query, 
const char *msg)
 static int ddebug_match_site(const struct ddebug_query *query,
                             const struct _ddebug *dp)
 {
-       struct _ddebug_site *dc = dp->site;
-
-       /* match against the source filename */
-       if (query->filename &&
-           !match_wildcard(query->filename, dc->filename) &&
-           !match_wildcard(query->filename,
-                           kbasename(dc->filename)) &&
-           !match_wildcard(query->filename,
-                           trim_prefix(dc->filename)))
-               return false;
-
-       /* match against the function */
-       if (query->function &&
-           !match_wildcard(query->function, dc->function))
-               return false;
+       struct _ddebug_site *dc;
 
        /* match against the format */
        if (query->format) {
@@ -181,6 +167,29 @@ static int ddebug_match_site(const struct ddebug_query 
*query,
            dp->lineno > query->last_lineno)
                return false;
 
+       dc = dp->site;
+       if (!dc) {
+               /* site info has been dropped, so query cannot test these 
fields */
+               if (query->filename || query->function)
+                       return false;
+               else
+                       return true;
+       }
+
+       /* match against the source filename */
+       if (query->filename &&
+           !match_wildcard(query->filename, dc->filename) &&
+           !match_wildcard(query->filename,
+                           kbasename(dc->filename)) &&
+           !match_wildcard(query->filename,
+                           trim_prefix(dc->filename)))
+               return false;
+
+       /* match against the function */
+       if (query->function &&
+           !match_wildcard(query->function, dc->function))
+               return false;
+
        return true;
 }
 
@@ -210,7 +219,7 @@ static int ddebug_change(const struct ddebug_query *query,
 
                for (i = 0; i < dt->num_ddebugs; i++) {
                        struct _ddebug *dp = &dt->ddebugs[i];
-                       struct _ddebug_site *dc = dp->site;
+                       struct _ddebug_site *dc;
 
                        if (!ddebug_match_site(query, dp))
                                continue;
-- 
2.29.2

Reply via email to