Lines Matching full:query
122 static void vpr_info_dq(const struct ddebug_query *query, const char *msg) in vpr_info_dq() argument
127 if (query->format) { in vpr_info_dq()
128 fmtlen = strlen(query->format); in vpr_info_dq()
129 while (fmtlen && query->format[fmtlen - 1] == '\n') in vpr_info_dq()
135 query->function ?: "", in vpr_info_dq()
136 query->filename ?: "", in vpr_info_dq()
137 query->module ?: "", in vpr_info_dq()
138 fmtlen, query->format ?: "", in vpr_info_dq()
139 query->first_lineno, query->last_lineno); in vpr_info_dq()
143 * Search the tables for _ddebug's which match the given `query' and
148 static int ddebug_change(const struct ddebug_query *query, in ddebug_change() argument
162 if (query->module && in ddebug_change()
163 !match_wildcard(query->module, dt->mod_name)) in ddebug_change()
170 if (query->filename && in ddebug_change()
171 !match_wildcard(query->filename, dp->filename) && in ddebug_change()
172 !match_wildcard(query->filename, in ddebug_change()
174 !match_wildcard(query->filename, in ddebug_change()
179 if (query->function && in ddebug_change()
180 !match_wildcard(query->function, dp->function)) in ddebug_change()
184 if (query->format) { in ddebug_change()
185 if (*query->format == '^') { in ddebug_change()
188 p = strstr(dp->format, query->format+1); in ddebug_change()
191 } else if (!strstr(dp->format, query->format)) in ddebug_change()
196 if (query->first_lineno && in ddebug_change()
197 dp->lineno < query->first_lineno) in ddebug_change()
199 if (query->last_lineno && in ddebug_change()
200 dp->lineno > query->last_lineno) in ddebug_change()
226 pr_info("no matches for query\n"); in ddebug_change()
307 static int parse_linerange(struct ddebug_query *query, const char *first) in parse_linerange() argument
311 if (query->first_lineno || query->last_lineno) { in parse_linerange()
317 if (parse_lineno(first, &query->first_lineno) < 0) in parse_linerange()
321 if (parse_lineno(last, &query->last_lineno) < 0) in parse_linerange()
325 if (query->last_lineno == 0) in parse_linerange()
326 query->last_lineno = UINT_MAX; in parse_linerange()
328 if (query->last_lineno < query->first_lineno) { in parse_linerange()
330 query->last_lineno, in parse_linerange()
331 query->first_lineno); in parse_linerange()
335 query->last_lineno = query->first_lineno; in parse_linerange()
337 vpr_info("parsed line %d-%d\n", query->first_lineno, in parse_linerange()
338 query->last_lineno); in parse_linerange()
356 * Parse words[] as a ddebug query specification, which is a series
371 struct ddebug_query *query, const char *modname) in ddebug_parse_query() argument
388 rc = check_set(&query->function, arg, "func"); in ddebug_parse_query()
390 if (check_set(&query->filename, arg, "file")) in ddebug_parse_query()
394 fline = strchr(query->filename, ':'); in ddebug_parse_query()
400 if (check_set(&query->function, fline, "func")) in ddebug_parse_query()
403 if (parse_linerange(query, fline)) in ddebug_parse_query()
407 rc = check_set(&query->module, arg, "module"); in ddebug_parse_query()
412 rc = check_set(&query->format, arg, "format"); in ddebug_parse_query()
414 if (parse_linerange(query, arg)) in ddebug_parse_query()
423 if (!query->module && modname) in ddebug_parse_query()
426 * not given in the query itself in ddebug_parse_query()
428 query->module = modname; in ddebug_parse_query()
430 vpr_info_dq(query, "parsed"); in ddebug_parse_query()
492 struct ddebug_query query = {}; in ddebug_exec_query() local
502 /* check flags 1st (last arg) so query is pairs of spec,val */ in ddebug_exec_query()
507 if (ddebug_parse_query(words, nwords-1, &query, modname)) { in ddebug_exec_query()
508 pr_err("query parse failed\n"); in ddebug_exec_query()
512 nfound = ddebug_change(&query, &modifiers); in ddebug_exec_query()
513 vpr_info_dq(&query, nfound ? "applied" : "no-match"); in ddebug_exec_query()
518 /* handle multiple queries in query string, continue on error, return
520 in param (for boot arg) or perhaps in query string.
522 static int ddebug_exec_queries(char *query, const char *modname) in ddebug_exec_queries() argument
527 for (i = 0; query; query = split) { in ddebug_exec_queries()
528 split = strpbrk(query, ";\n"); in ddebug_exec_queries()
532 query = skip_spaces(query); in ddebug_exec_queries()
533 if (!query || !*query || *query == '#') in ddebug_exec_queries()
536 vpr_info("query %d: \"%s\"\n", i, query); in ddebug_exec_queries()
538 rc = ddebug_exec_query(query, modname); in ddebug_exec_queries()
965 return 0; /* query failure shouldnt stop module load */ in ddebug_dyndbg_param_cb()