函数逻辑报告

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

Source Code:kernel\bpf\hashtab.c Create Date:2022-07-27 14:26:13
Last Modify:2022-05-23 09:15:29 Copyright©Brick
首页 函数Tree
注解内核,赢得工具下载SCCTEnglish

函数名称:__htab_lru_percpu_map_update_elem

函数原型:static int __htab_lru_percpu_map_update_elem(struct bpf_map *map, void *key, void *value, u64 map_flags, bool onallcpus)

返回类型:int

参数:

类型参数名称
struct bpf_map *map
void *key
void *value
u64map_flags
boolonallcpus
1032  htab等于container_of - cast a member of a structure out to the containing structure*@ptr: the pointer to the member.*@type: the type of the container struct this is embedded in.*@member: the name of the member within the struct.(map, structbpf_htab, map)
1033  l_new等于NULL
1040  如果此条件成立可能性小(为编译器优化)(map_flags > update existing element )则返回:负EINVAL
1044  WARN_ON_ONCE(!_read_lock_held() - might we be in RCU read-side critical section?* If CONFIG_DEBUG_LOCK_ALLOC is selected, returns nonzero iff in an RCU* read-side critical section)
1046  key_size等于key_size
1048  hash等于htab_map_hash(key, key_size, hashrnd)
1050  b等于__select_bucket(htab, hash)
1051  head等于head
1058  如果map_flags不等于update existing element
1059  l_new等于prealloc_lru_pop(htab, key, hash)
1060  如果非l_new则返回:负ENOMEM
1065  raw_spin_lock_irqsave( & lock, flags)
1067  l_old等于his lookup function can only be called with bucket lock taken
1069  ret等于check_flags(htab, l_old, map_flags)
1070  如果ret则转到:err
1073  如果l_old
1074  bpf_lru_node_set_ref( & lru_node)
1077  pcpu_copy_value(htab, htab_elem_get_ptr(l_old, key_size), value, onallcpus)
1079  否则
1080  pcpu_copy_value(htab, htab_elem_get_ptr(l_new, key_size), value, onallcpus)
1082  hlist_nulls_add_head_rcu*@n: the element to add to the hash list
1083  l_new = NULL
1085  ret等于0
1086  err :
1087  raw_spin_unlock_irqrestore( & lock, flags)
1088  如果l_newbpf_lru_push_free( & lru, & lru_node)
1090  返回:ret
调用者
名称描述
htab_lru_percpu_map_update_elem
bpf_percpu_hash_update