--- title: pmap_bootstrap --- flowchart TD R_BEGIN("Begin") R_GETMMAP["Get Memory Map entry"] R_MMAP_LAST{"Last Item ?"} R_END("End") subgraph "entry to pmap_block" C_BEGIN("Begin Proc") C_IS_FREE{"Is entry free?"} C_END("End Proc") C_OVERLAP_KERNEL{"entry overlap kernel?"} C_REMOVE_KRESERVED["Remove Kernel Memory from entry"] C_MEMORY_SIZE_EXCEED{"Is entry size larger than 0x0x7f80000 ?"} C_MEMORY_SPLIT["Split entry"] C_MEMORY_LAST["Is last ?"] C_BEGIN-->C_IS_FREE C_IS_FREE--No-->C_END C_IS_FREE--Yes-->C_OVERLAP_KERNEL C_OVERLAP_KERNEL--Yes-->C_REMOVE_KRESERVED C_REMOVE_KRESERVED-->C_MEMORY_SIZE_EXCEED C_OVERLAP_KERNEL--No-->C_MEMORY_SIZE_EXCEED C_MEMORY_SIZE_EXCEED--Yes-->C_MEMORY_SPLIT C_MEMORY_SPLIT-->C_MEMORY_LAST C_MEMORY_LAST--Yes-->C_END end subgraph "create & store pmap_block" D_BEGIN("Begin Proc") D_BOOSTRAP_EXIST{"Bootstrap pmap_block exist?"} D_SETUP_BOOTSTRAP["Setup bootstrap pmap"] D_END("End Proc") D_SET_HEAD_BOOTSTRAP["Set bootstrap as Head"] D_SEARCH_FREE_PAGE["Search free page in Head->bitmap"] D_FREE_PAGE_FOUND{"Free Page found ?"} D_HEAD_NEXT_NULL{"Head->next == NULL?"} D_HEAD_NEXT["Set Head to Head->next"] D_CREATE_PMAP["Create new pmap_block in free page"] D_APPEND_PMAP["Append pmap_block at end of linked list"] D_BEGIN-->D_BOOSTRAP_EXIST D_BOOSTRAP_EXIST--No-->D_SETUP_BOOTSTRAP D_SETUP_BOOTSTRAP-->D_END D_BOOSTRAP_EXIST--Yes-->D_SET_HEAD_BOOTSTRAP D_SET_HEAD_BOOTSTRAP-->D_SEARCH_FREE_PAGE D_SEARCH_FREE_PAGE-->D_FREE_PAGE_FOUND D_FREE_PAGE_FOUND--No-->D_HEAD_NEXT_NULL D_HEAD_NEXT_NULL--No-->D_HEAD_NEXT D_HEAD_NEXT-->D_SEARCH_FREE_PAGE D_FREE_PAGE_FOUND--Yes-->D_CREATE_PMAP D_CREATE_PMAP-->D_APPEND_PMAP D_APPEND_PMAP-->D_END end R_BEGIN-->R_GETMMAP R_GETMMAP-->R_MMAP_LAST R_MMAP_LAST--Yes-->R_END R_MMAP_LAST--No-->C_BEGIN C_MEMORY_SIZE_EXCEED--No-->D_BEGIN D_END--Try get next-->C_MEMORY_LAST C_MEMORY_LAST--No-->D_BEGIN C_END--Try get next entry-->R_MMAP_LAST style R_BEGIN fill:#6CA300 style R_END fill:#A30000 style C_BEGIN fill:#6CA300 style C_END fill:#A30000 style D_BEGIN fill:#6CA300 style D_END fill:#A30000