cgv_node
private(CGV_TREE) struct bpf_rb_root cgv_tree __contains(cgv_node, rb_node);
struct cgv_node __kptr *node;
struct cgv_node *cgc_a, *cgc_b;
cgc_a = container_of(a, struct cgv_node, rb_node);
cgc_b = container_of(b, struct cgv_node, rb_node);
static void cgrp_cap_budget(struct cgv_node *cgv_node, struct fcg_cgrp_ctx *cgc)
cvtime = cgv_node->cvtime + delta;
cgv_node->cvtime = cvtime;
struct cgv_node *cgv_node;
cgv_node = bpf_kptr_xchg(&stash->node, NULL);
if (!cgv_node) {
cgrp_cap_budget(cgv_node, cgc);
bpf_rbtree_add(&cgv_tree, &cgv_node->rb_node, cgv_node_less);
struct cgv_node *cgv_node;
cgv_node = container_of(rb_node, struct cgv_node, rb_node);
cgid = cgv_node->cgid;
if (time_before(cvtime_now, cgv_node->cvtime))
cvtime_now = cgv_node->cvtime;
cgv_node->cvtime += cgrp_slice_ns * FCG_HWEIGHT_ONE / (cgc->hweight ?: 1);
cgrp_cap_budget(cgv_node, cgc);
bpf_rbtree_add(&cgv_tree, &cgv_node->rb_node, cgv_node_less);
bpf_rbtree_add(&cgv_tree, &cgv_node->rb_node, cgv_node_less);
cgv_node = bpf_kptr_xchg(&stash->node, cgv_node);
if (cgv_node) {
bpf_obj_drop(cgv_node);
struct cgv_node *cgv_node;
cgv_node = bpf_obj_new(struct cgv_node);
if (!cgv_node) {
cgv_node->cgid = cgid;
cgv_node->cvtime = cvtime_now;
cgv_node = bpf_kptr_xchg(&stash->node, cgv_node);
if (cgv_node) {
bpf_obj_drop(cgv_node);