On Tue, Oct 27, 2020 at 06:03:13PM +0100, KP Singh wrote: [ ... ] > diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h > index e6ceac3f7d62..bb443c4f3637 100644 > --- a/include/uapi/linux/bpf.h > +++ b/include/uapi/linux/bpf.h > @@ -157,6 +157,7 @@ enum bpf_map_type { > BPF_MAP_TYPE_STRUCT_OPS, > BPF_MAP_TYPE_RINGBUF, > BPF_MAP_TYPE_INODE_STORAGE, > + BPF_MAP_TYPE_TASK_STORAGE, > }; > > /* Note that tracing related programs such as > @@ -3742,6 +3743,42 @@ union bpf_attr { > * Return > * The helper returns **TC_ACT_REDIRECT** on success or > * **TC_ACT_SHOT** on error. > + * > + * void *bpf_task_storage_get(struct bpf_map *map, void *task, void *value, u64 flags) After peeking patch 2, I think the pointer type should be "struct task_struct *task" instead of "void *task". Same for bpf_task_storage_delete(). > + * Description > + * Get a bpf_local_storage from the *task*. > + * > + * Logically, it could be thought of as getting the value from > + * a *map* with *task* as the **key**. From this > + * perspective, the usage is not much different from > + * **bpf_map_lookup_elem**\ (*map*, **&**\ *task*) except this > + * helper enforces the key must be an task_struct and the map must also > + * be a **BPF_MAP_TYPE_TASK_STORAGE**. > + * > + * Underneath, the value is stored locally at *task* instead of > + * the *map*. The *map* is used as the bpf-local-storage > + * "type". The bpf-local-storage "type" (i.e. the *map*) is > + * searched against all bpf_local_storage residing at *task*. > + * > + * An optional *flags* (**BPF_LOCAL_STORAGE_GET_F_CREATE**) can be > + * used such that a new bpf_local_storage will be > + * created if one does not exist. *value* can be used > + * together with **BPF_LOCAL_STORAGE_GET_F_CREATE** to specify > + * the initial value of a bpf_local_storage. If *value* is > + * **NULL**, the new bpf_local_storage will be zero initialized. > + * Return > + * A bpf_local_storage pointer is returned on success. > + * > + * **NULL** if not found or there was an error in adding > + * a new bpf_local_storage. > + * > + * int bpf_task_storage_delete(struct bpf_map *map, void *task) > + * Description > + * Delete a bpf_local_storage from a *task*. > + * Return > + * 0 on success. > + * > + * **-ENOENT** if the bpf_local_storage cannot be found. > */