Function report | 
Source Code:mm\percpu.c | 
Create Date:2022-07-28 14:27:59 | 
| Last Modify:2022-05-23 13:52:24 | Copyright©Brick | 
| home page | Tree | 
| Annotation kernel can get tool activity | Download SCCT | Chinese | 
Name:pcpu_setup_first_chunk - initialize the first percpu chunk*@ai: pcpu_alloc_info describing how to percpu area is shaped*@base_addr: mapped address* Initialize the first percpu chunk which contains the kernel static* percpu area
Proto:void __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai, void *base_addr)
Type:void
Parameter:
| Type | Parameter | Name | 
|---|---|---|
| const struct pcpu_alloc_info * | ai | |
| void * | base_addr | 
| 2274 | size_sum = static_size + reserved_size + dyn_size | 
| 2317 | alloc_size = 0 if grouping unnecessary * size of group_offsets[0] | 
| 2319 | If Not group_offsets Then panic - halt the system*@fmt: The text string to print* Display a message, then perform cleanups.* This function never returns. | 
| 2323 | alloc_size = 0 if grouping unnecessary * size of group_sizes[0] | 
| 2325 | If Not group_sizes Then panic - halt the system*@fmt: The text string to print* Display a message, then perform cleanups.* This function never returns. | 
| 2329 | alloc_size = Setup number of possible processor ids * size of unit_map[0] | 
| 2330 | unit_map = memblock_alloc(alloc_size, SMP_CACHE_BYTES) | 
| 2331 | If Not unit_map Then panic - halt the system*@fmt: The text string to print* Display a message, then perform cleanups.* This function never returns. | 
| 2335 | alloc_size = Setup number of possible processor ids * size of unit_off[0] | 
| 2336 | unit_off = memblock_alloc(alloc_size, SMP_CACHE_BYTES) | 
| 2337 | If Not unit_off Then panic - halt the system*@fmt: The text string to print* Display a message, then perform cleanups.* This function never returns. | 
| 2344 | cpus with the lowest and highest unit addresses = Places which use this should consider cpumask_var_t. | 
| 2347 | When group < 0 if grouping unnecessary cycle | 
| 2350 | group_offsets[group] = base address offset | 
| 2351 | group_sizes[group] = aligned # of units * unit_size | 
| 2353 | When i < aligned # of units cycle | 
| 2355 | If cpu == Places which use this should consider cpumask_var_t. Then Continue | 
| 2363 | unit_off[cpu] = base address offset + i * unit_size | 
| 2369 | If pcpu_high_unit_cpu == Places which use this should consider cpumask_var_t. || unit_off[cpu] > unit_off[pcpu_high_unit_cpu] Then pcpu_high_unit_cpu = cpu | 
| 2374 | pcpu_nr_units = unit | 
| 2376 | for_each_possible_cpu(cpu) | 
| 2384 | pcpu_group_offsets = group_offsets | 
| 2385 | pcpu_group_sizes = group_sizes | 
| 2386 | pcpu_unit_map = unit_map | 
| 2387 | pcpu_unit_offsets = unit_off | 
| 2392 | pcpu_atom_size = atom_size | 
| 2393 | pcpu_chunk_struct_size = sizeof(structpcpu_chunk) + BITS_TO_LONGS(pcpu_unit_pages) * sizeof(unsignedlong) | 
| 2396 | pcpu_stats_save_ai(ai) | 
| 2402 | pcpu_nr_slots = __pcpu_size_to_slot(pcpu_unit_size) + 2 | 
| 2403 | pcpu_slot = memblock_alloc(pcpu_nr_slots * size of pcpu_slot[0] , SMP_CACHE_BYTES) | 
| 2405 | If Not pcpu_slot Then panic - halt the system*@fmt: The text string to print* Display a message, then perform cleanups.* This function never returns. | 
| 2408 | When i < pcpu_nr_slots cycle Initialization list head | 
| 2420 | dyn_size = dyn_size - static_size - static_size | 
| 2430 | tmp_addr = base_addr + static_size | 
| 2431 | map_size = If reserved_size Else dyn_size | 
| 2435 | If reserved_size Then | 
| 2436 | Optional reserved chunk. This chunk reserves part of the first* chunk and serves it for reserved allocations. When the reserved* region doesn't exist, the following variable is NULL. = chunk | 
| 2438 | tmp_addr = base_addr + static_size + reserved_size | 
| 2445 | The first chunk which always exists. Note that unlike other* chunks, this one can be allocated and mapped in several different* ways and thus often doesn't live in the vmalloc area. = chunk | 
| 2446 | The number of empty populated pages, protected by pcpu_lock. The* reserved chunk doesn't contribute to the count. = # of empty populated pages | 
| 2452 | pcpu_stats_chunk_alloc() | 
| Name | Describe | 
|---|---|
| setup_per_cpu_areas | UP percpu area setup.* UP always uses km-based percpu allocator with identity mapping.* Static percpu variables are indistinguishable from the usual static* variables and don't require any special preparation. | 
| Source code conversion tool public plug-in interface  | X | 
|---|---|
| Support c/c++/esqlc/java Oracle/Informix/Mysql Plug-in can realize: logical Report Code generation and batch code conversion  |