Lines Matching full:scc
61 /* For state @st look for a topmost frame with frame_insn_idx() in some SCC,
63 * call sites leading to this frame and SCC id.
66 * void foo() { A: loop {... SCC#1 ...}; }
67 * void bar() { B: loop { C: foo(); ... SCC#2 ... }
68 * D: loop { E: foo(); ... SCC#3 ... } }
71 * @callchain at (A) would be either (F,SCC#2) or (F,SCC#3) depending
78 u32 i, scc, insn_idx; in compute_scc_callchain() local
83 scc = env->insn_aux_data[insn_idx].scc; in compute_scc_callchain()
84 if (scc) { in compute_scc_callchain()
85 callchain->scc = scc; in compute_scc_callchain()
100 struct bpf_scc_info *info = env->scc_info[callchain->scc]; in scc_visit_lookup()
121 u32 scc, num_visits; in scc_visit_alloc() local
124 scc = callchain->scc; in scc_visit_alloc()
125 info = env->scc_info[scc]; in scc_visit_alloc()
128 info = kvrealloc(env->scc_info[scc], new_sz, GFP_KERNEL_ACCOUNT); in scc_visit_alloc()
131 env->scc_info[scc] = info; in scc_visit_alloc()
139 /* Form a string '(callsite#1,callsite#2,...,scc)' in env->tmp_str_buf */
152 delta += snprintf(buf + delta, TMP_STR_BUF_LEN - delta, "%u)", callchain->scc); in format_callchain()
156 /* If callchain for @st exists (@st is in some SCC), ensure that
174 verbose(env, "SCC enter %s\n", format_callchain(env, callchain)); in maybe_enter_scc()
181 /* If callchain for @st exists (@st is in some SCC), make it empty:
195 * If path traversal stops inside an SCC, corresponding bpf_scc_visit in maybe_exit_scc()
200 * of any SCC. in maybe_exit_scc()
207 verifier_bug(env, "scc exit: no visit info for call chain %s", in maybe_exit_scc()
216 verbose(env, "SCC exit %s\n", format_callchain(env, callchain)); in maybe_exit_scc()
235 verifier_bug(env, "add backedge: no SCC in verification path, insn_idx %d", in add_scc_backedge()
246 verbose(env, "SCC backedge %s\n", format_callchain(env, callchain)); in add_scc_backedge()
256 * if state @st is in some SCC and not all execution paths starting at this
257 * SCC are fully explored.
1437 * whether the current verifier state is entering an SCC. If so, an in bpf_is_state_visited()
1439 * entering the SCC is recorded as the entry state. in bpf_is_state_visited()
1441 * - This instance is associated not with the SCC itself, but with a in bpf_is_state_visited()
1443 * the SCC and the SCC id. See `compute_scc_callchain()`. in bpf_is_state_visited()
1455 * this SCC visit have been explored. `propagate_backedges()` is then in bpf_is_state_visited()
1466 * void foo() { loop { ... SCC#1 ... } } in bpf_is_state_visited()
1473 * Here, there are two distinct callchains leading to SCC#1: in bpf_is_state_visited()
1474 * - (A, SCC#1) in bpf_is_state_visited()
1475 * - (C, SCC#1) in bpf_is_state_visited()
1486 * SCC#1, but SCC#1 would only be exited once the exploration of in bpf_is_state_visited()