1050 lines · 28.0 KB · C
RawDownload
	if (unlikely(id >= smap->n_buckets))		return -E2BIG; 	old_bucket = xchg(&smap->buckets[id], NULL);	if (old_bucket) {		pcpu_freelist_push(&smap->freelist, &old_bucket->fnode);		return 0;	} else {		return -ENOENT;	}} /* Called when map->refcnt goes to zero, either from workqueue or from syscall */static void stack_map_free(struct bpf_map *map){	struct bpf_stack_map *smap = container_of(map, struct bpf_stack_map, map); 	bpf_map_area_free(smap->elems);	pcpu_freelist_destroy(&smap->freelist);	bpf_map_area_free(smap);	put_callchain_buffers();} static u64 stack_map_mem_usage(const struct bpf_map *map){	struct bpf_stack_map *smap = container_of(map, struct bpf_stack_map, map);	u64 value_size = map->value_size;	u64 n_buckets = smap->n_buckets;	u64 enties = map->max_entries;	u64 usage = sizeof(*smap); 	usage += n_buckets * sizeof(struct stack_map_bucket *);	usage += enties * (sizeof(struct stack_map_bucket) + value_size);	return usage;} BTF_ID_LIST_SINGLE(stack_trace_map_btf_ids, struct, bpf_stack_map)const struct bpf_map_ops stack_trace_map_ops = {	.map_meta_equal = bpf_map_meta_equal,	.map_alloc = stack_map_alloc,	.map_free = stack_map_free,	.map_get_next_key = stack_map_get_next_key,	.map_lookup_elem = stack_map_lookup_elem,	.map_lookup_and_delete_elem = stack_map_lookup_and_delete_elem,	.map_update_elem = stack_map_update_elem,	.map_delete_elem = stack_map_delete_elem,	.map_check_btf = map_check_no_btf,	.map_mem_usage = stack_map_mem_usage,	.map_btf_id = &stack_trace_map_btf_ids[0],};

Lines 1001–1050 of 1050. Previous lines