task_comm: 通过handle引用该ion_buffer的最后一个client所属进程 node:ion device通过plist管理所有的ion_heap type:ion heap类型 ops:ion heap的操作 id:ion heap id同时也表示优先级,id越小优先级越高,参考plist free_list:deferred free list free_list_size:size of deferred free list waitqueue:queue to...
不同type的heap需要不同的method例如ion_system_heap.c/ion_cma_heap.c去分配; 相同type的heap则需要使用heapid来进行区分 enum ion_heap_ids { INVALID_HEAP_ID = -1, ION_CP_MM_HEAP_ID = 8, ION_SECURE_HEAP_ID = 9, ION_SECURE_DISPLAY_HEAP_ID = 10, ION_SPSS_HEAP_ID = 13, /* Secure ...
heap类型:由于ION可以使⽤多种memory分配机制,例如物理连续和不连续的,所以ION使⽤enum ion_heap_type表⽰。[html]view plaincopy 1. /** 2. * enum ion_heap_types - list of all possible types of heaps 3. * @ION_HEAP_TYPE_SYSTEM: memory allocated via vmalloc 4. * @ION_HEAP_...
假如选中的heap为system heap(ION_HEAP_TYPE_SYSTEM),那么接下来会调用它的allocate函数: static struct ion_heap_ops system_heap_ops = {.allocate= ion_system_heap_allocate,.free= ion_system_heap_free,.map_kernel= ion_heap_map_kernel,.unmap_kernel= ion_heap_unmap_kernel,.map_user= ion_heap_m...
ionAllocData.align = sysconf(_SC_PAGESIZE);#ifdefNEW_ION_HEAPionAllocData.heap_id_mask = #elseionAllocData.heap_mask = #endifION_HEAP(ION_IOMMU_HEAP_ID) |ION_HEAP(ION_SYSTEM_CONTIG_HEAP_ID); result = ioctl(mem_info.ion_fd, ION_IOC_ALLOC, &ionAllocData);if(result){ ...
ION_HEAP_TYPE_CHUNK:对应⽂件ion_chunk_heap.c ION分配(以system heap为例)⽤户层打开/dev/ion,并通过ioctl调⽤传递分配内存需要的参数,主要是:struct ion_allocation_data { __u64 len; //需要分配的字节数 __u32 heap_id_mask; //需要从哪个heap中分配,heap id是在每个heap添加到ion dev...
1 system contig heap 与 system heap 从代码中我们看到system contig heap与system heap同属一个文件中,ion_system_heap.c 相同点:它们都是根据用户传递的字节len,转换成order,从buddy中申请内存页 不同点: contig heap申请的是连续内存页,最大能到order 10(受限于buddy)。而system heap就只能通过order 8/4/...
ION分配(以system heap为例) 用户层打开/dev/ion,并通过ioctl调用传递分配内存需要的参数,主要是: struct ion_allocation_data { __u64 len; //需要分配的字节数 __u32 heap_id_mask; //需要从哪个heap中分配,heap id是在每个heap添加到ion dev时自动增长的,从0开始。
.unmap_iommu = ion_system_heap_unmap_iommu, }; Heap ID: 同一种type的heap上当然可以分为若该干个chunk供用户使用,所以ION又使用ID来区分了。例如在type为ION_HEAP_TYPE_CARVEOUT的heap上,audio和display部分都需要使用,ION就用ID来区分。 Heap id用enumion_heap_ids表示。
从代码中我们看到system contig heap与system heap同属一个文件中,ion_system_heap.c 相同点:它们都是根据用户传递的字节len,转换成order,从buddy中申请内存页 不同点: contig heap申请的是连续内存页,最大能到order 10(受限于buddy)。而system heap就只能通过order 8/4/0三种拼凑出来,凑够用户需要的内存 ...