Function report |
Source Code:mm\z3fold.c |
Create Date:2022-07-28 16:30:06 |
| Last Modify:2020-03-12 14:18:49 | Copyright©Brick |
| home page | Tree |
| Annotation kernel can get tool activity | Download SCCT | Chinese |
Name:z3fold_alloc() - allocates a region of a given size*@pool: z3fold pool from which to allocate*@size: size in bytes of the desired allocation*@gfp: gfp flags used if the pool needs to grow*@handle: handle of the new allocation* This function will attempt
Proto:static int z3fold_alloc(struct z3fold_pool *pool, size_t size, gfp_t gfp, unsigned long *handle)
Type:int
Parameter:
| Type | Parameter | Name |
|---|---|---|
| struct z3fold_pool * | pool | |
| size_t | size | |
| gfp_t | gfp | |
| unsigned long * | handle |
| 1093 | struct z3fold_header * zhdr = NULL |
| 1096 | can_sleep = gfpflags_allow_blocking(gfp) |
| 1104 | If size > PAGE_SIZE - ZHDR_SIZE_ALIGNED - CHUNK_SIZE Then bud = HEADLESS |
| 1106 | Else |
| 1107 | retry : |
| 1109 | If zhdr Then |
| 1110 | If first_chunks == 0 Then |
| 1111 | If middle_chunks != 0 && chunks >= start_middle Then bud = LAST |
| 1116 | Else if last_chunks == 0 Then bud = LAST |
| 1118 | Else if middle_chunks == 0 Then bud = MIDDLE |
| 1120 | Else |
| 1124 | Else Unlock a z3fold page |
| 1126 | pr_err("No free chunks in unbuddied\n") |
| 1127 | WARN_ON(1) |
| 1128 | Go to retry |
| 1130 | page = virt_to_page(kaddr) returns a valid pointer if and only if* virt_addr_valid(kaddr) returns true.(zhdr) |
| 1131 | Go to found |
| 1136 | page = NULL |
| 1137 | If can_sleep Then |
| 1138 | spin_lock( & stale_lock) |
| 1146 | If zhdr Then |
| 1148 | spin_unlock( & stale_lock) |
| 1151 | Else |
| 1152 | spin_unlock( & stale_lock) |
| 1155 | If Not page Then page = alloc_page(gfp) |
| 1162 | If Not zhdr Then |
| 1163 | __free_page(page) |
| 1164 | Return -ENOMEM |
| 1166 | atomic64_inc( & pages_nr) |
| 1170 | Go to headless |
| 1172 | If can_sleep Then |
| 1174 | __SetPageMovable(page, i_mapping) |
| 1176 | Else |
| 1177 | If Return true if the page was successfully locked Then |
| 1178 | __SetPageMovable(page, i_mapping) |
| 1182 | Lock a z3fold page |
| 1184 | found : |
| 1185 | If bud == FIRST Then first_chunks = chunks |
| 1187 | Else if bud == LAST Then last_chunks = chunks |
| 1189 | Else |
| 1190 | middle_chunks = chunks |
| 1191 | start_middle = first_chunks + ZHDR_CHUNKS |
| 1195 | headless : |
| 1198 | If Not list_empty - tests whether a list is empty*@head: the list to test. Then deletes entry from list |
| 1203 | handle = encode_handle(zhdr, bud) |
| 1204 | spin_unlock( & lock) |
| 1205 | If bud != HEADLESS Then Unlock a z3fold page |
| 1208 | Return 0 |
| Name | Describe |
|---|---|
| z3fold_zpool_malloc |
| 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 |