| 函数逻辑报告 | 
| Source Code: kernel\bpf\hashtab.c | Create Date:2022-07-27 14:25:13 | 
| Last Modify:2022-05-23 09:15:29 | Copyright©Brick | 
| 首页 | 函数Tree | 
| 注解内核,赢得工具 | 下载SCCT | English | 
函数名称:htab_map_alloc
函数原型:static struct bpf_map *htab_map_alloc(union bpf_attr *attr)
返回类型:struct bpf_map
参数:
| 类型 | 参数 | 名称 | 
|---|---|---|
| union bpf_attr * | attr | 
| 297 | percpu等于 one of enum bpf_map_type 恒等于BPF_MAP_TYPE_PERCPU_HASH或 one of enum bpf_map_type 恒等于BPF_MAP_TYPE_LRU_PERCPU_HASH | 
| 299 | lru等于 one of enum bpf_map_type 恒等于BPF_MAP_TYPE_LRU_HASH或 one of enum bpf_map_type 恒等于BPF_MAP_TYPE_LRU_PERCPU_HASH | 
| 316 | bpf_map_init_from_attr( & map, attr) | 
| 318 | 如果percpu_lru则 | 
| 335 | 如果percpu则 size of each element in bytes 加等于*的长度 | 
| 342 | 如果 number of hash buckets 恒等于0或 number of hash buckets 大于U32_MAX除sizeof(structbucket)则转到:free_htab | 
| 346 | cost等于 number of hash buckets 乘sizeof(structbucket)加 size of each element in bytes 乘max_entries | 
| 352 | 否则cost加等于 size of each element in bytes 乘num_possible_cpus() | 
| 356 | err等于bpf_map_charge_init( & memory, cost) | 
| 361 | buckets等于bpf_map_area_alloc( number of hash buckets * sizeof(structbucket), numa_node) | 
| 364 | 如果非buckets则转到:free_charge | 
| 367 | 如果map_flags按位与Zero-initialize hash function seed. This should only be used for testing. 则hashrnd等于0 | 
| 369 | 否则hashrnd等于get_random_int() | 
| 372 | 以i小于 number of hash buckets 循环 | 
| 373 | INIT_HLIST_NULLS_HEAD( & head, i) | 
| 374 | raw_spin_lock_init( & lock) | 
| 377 | 如果prealloc则 | 
| 378 | err等于prealloc_init(htab) | 
| 379 | 如果err则转到:free_buckets | 
| 386 | err等于alloc_extra_elems(htab) | 
| 387 | 如果err则转到:free_prealloc | 
| 392 | 返回:map | 
| 394 | free_prealloc : | 
| 395 | prealloc_destroy(htab) | 
| 396 | free_buckets : | 
| 397 | bpf_map_area_free(buckets) | 
| 398 | free_charge : | 
| 399 | bpf_map_charge_finish( & memory) | 
| 400 | free_htab : | 
| 402 | 返回:错误号 | 
| 名称 | 描述 | 
|---|---|
| htab_of_map_alloc | 
| 源代码转换工具 开放的插件接口 | X | 
|---|---|
| 支持:c/c++/esqlc/java Oracle/Informix/Mysql 插件可实现:逻辑报告 代码生成和批量转换代码 |