tools/testing/selftests/bpf/progs/task_local_data.bpf.h
Source file repositories/reference/linux-study-clean/tools/testing/selftests/bpf/progs/task_local_data.bpf.h
File Facts
- System
- Linux kernel
- Corpus path
tools/testing/selftests/bpf/progs/task_local_data.bpf.h- Extension
.h- Size
- 6681 bytes
- Lines
- 239
- Domain
- Support Tooling And Documentation
- Bucket
- tools
- Inferred role
- Support Tooling And Documentation: implementation source
- Status
- source implementation candidate
Why This File Exists
Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.
- Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
errno.hbpf/bpf_helpers.h
Detected Declarations
struct tld_metadatastruct tld_meta_ustruct tld_data_ustruct tld_map_valuestruct tld_objectstruct tld_keysfunction func_callfunction tld_object_initfunction bpf_forfunction tld_get_datafunction bpf_for
Annotated Snippet
struct tld_metadata {
char name[TLD_NAME_LEN];
__u16 size;
};
struct tld_meta_u {
__u16 cnt;
__u16 size;
struct tld_metadata metadata[TLD_MAX_DATA_CNT];
};
struct tld_data_u {
__u64 unused;
char data[__PAGE_SIZE - sizeof(__u64)] __attribute__((aligned(8)));
};
struct tld_map_value {
struct tld_data_u __uptr *data;
struct tld_meta_u __uptr *meta;
__u16 start; /* offset of tld_data_u->data in a page */
};
typedef struct tld_uptr_dummy {
struct tld_data_u data[0];
struct tld_meta_u meta[0];
} *tld_uptr_dummy_t;
struct tld_object {
struct tld_map_value *data_map;
struct tld_keys *key_map;
/*
* Force the compiler to generate the actual definition of tld_meta_u
* and tld_data_u in BTF. Without it, tld_meta_u and u_tld_data will
* be BTF_KIND_FWD.
*/
tld_uptr_dummy_t dummy[0];
};
/*
* Map value of tld_key_map for caching keys. Must be defined by the developer.
* Members should be tld_key_t and passed to the 3rd argument of tld_fetch_key().
*/
struct tld_keys;
struct {
__uint(type, BPF_MAP_TYPE_TASK_STORAGE);
__uint(map_flags, BPF_F_NO_PREALLOC);
__type(key, int);
__type(value, struct tld_map_value);
} tld_data_map SEC(".maps");
struct {
__uint(type, BPF_MAP_TYPE_TASK_STORAGE);
__uint(map_flags, BPF_F_NO_PREALLOC);
__type(key, int);
__type(value, struct tld_keys);
} tld_key_map SEC(".maps");
/**
* tld_object_init() - Initialize a tld_object.
*
* @task: The task_struct of the target task
* @tld_obj: A pointer to a tld_object to be initialized
*
* Return 0 on success; -ENODATA if the user space did not initialize task local data
* for the current task through tld_get_data(); -ENOMEM if the creation of tld_key_map
* fails
*/
__attribute__((unused))
static int tld_object_init(struct task_struct *task, struct tld_object *tld_obj)
{
int i;
tld_obj->data_map = bpf_task_storage_get(&tld_data_map, task, 0, 0);
if (!tld_obj->data_map)
return -ENODATA;
bpf_for(i, 0, TLD_KEY_MAP_CREATE_RETRY) {
tld_obj->key_map = bpf_task_storage_get(&tld_key_map, task, 0,
BPF_LOCAL_STORAGE_GET_F_CREATE);
if (likely(tld_obj->key_map))
break;
}
if (!tld_obj->key_map)
return -ENOMEM;
return 0;
}
/*
Annotation
- Immediate include surface: `errno.h`, `bpf/bpf_helpers.h`.
- Detected declarations: `struct tld_metadata`, `struct tld_meta_u`, `struct tld_data_u`, `struct tld_map_value`, `struct tld_object`, `struct tld_keys`, `function func_call`, `function tld_object_init`, `function bpf_for`, `function tld_get_data`.
- Atlas domain: Support Tooling And Documentation / tools.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.