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()
311 static int parse_linerange(struct ddebug_query *query, const char *first) in parse_linerange() argument
315 if (query->first_lineno || query->last_lineno) { in parse_linerange()
321 if (parse_lineno(first, &query->first_lineno) < 0) in parse_linerange()
325 if (parse_lineno(last, &query->last_lineno) < 0) in parse_linerange()
329 if (query->last_lineno == 0) in parse_linerange()
330 query->last_lineno = UINT_MAX; in parse_linerange()
332 if (query->last_lineno < query->first_lineno) { in parse_linerange()
334 query->last_lineno, in parse_linerange()
335 query->first_lineno); in parse_linerange()
339 query->last_lineno = query->first_lineno; in parse_linerange()
341 vpr_info("parsed line %d-%d\n", query->first_lineno, in parse_linerange()
342 query->last_lineno); in parse_linerange()
360 * Parse words[] as a ddebug query specification, which is a series
375 struct ddebug_query *query, const char *modname) in ddebug_parse_query() argument
392 rc = check_set(&query->function, arg, "func"); in ddebug_parse_query()
394 if (check_set(&query->filename, arg, "file")) in ddebug_parse_query()
398 fline = strchr(query->filename, ':'); in ddebug_parse_query()
404 if (check_set(&query->function, fline, "func")) in ddebug_parse_query()
407 if (parse_linerange(query, fline)) in ddebug_parse_query()
411 rc = check_set(&query->module, arg, "module"); in ddebug_parse_query()
416 rc = check_set(&query->format, arg, "format"); in ddebug_parse_query()
418 if (parse_linerange(query, arg)) in ddebug_parse_query()
427 if (!query->module && modname) in ddebug_parse_query()
430 * not given in the query itself in ddebug_parse_query()
432 query->module = modname; in ddebug_parse_query()
434 vpr_info_dq(query, "parsed"); in ddebug_parse_query()
496 struct ddebug_query query = {}; in ddebug_exec_query() local
506 /* check flags 1st (last arg) so query is pairs of spec,val */ in ddebug_exec_query()
511 if (ddebug_parse_query(words, nwords-1, &query, modname)) { in ddebug_exec_query()
512 pr_err("query parse failed\n"); in ddebug_exec_query()
516 nfound = ddebug_change(&query, &modifiers); in ddebug_exec_query()
517 vpr_info_dq(&query, nfound ? "applied" : "no-match"); in ddebug_exec_query()
522 /* handle multiple queries in query string, continue on error, return
524 in param (for boot arg) or perhaps in query string.
526 static int ddebug_exec_queries(char *query, const char *modname) in ddebug_exec_queries() argument
531 for (i = 0; query; query = split) { in ddebug_exec_queries()
532 split = strpbrk(query, ";\n"); in ddebug_exec_queries()
536 query = skip_spaces(query); in ddebug_exec_queries()
537 if (!query || !*query || *query == '#') in ddebug_exec_queries()
540 vpr_info("query %d: \"%s\"\n", i, query); in ddebug_exec_queries()
542 rc = ddebug_exec_query(query, modname); in ddebug_exec_queries()
969 return 0; /* query failure shouldnt stop module load */ in ddebug_dyndbg_param_cb()