| Function report | 
| Source Code: mm\page_alloc.c | Create Date:2022-07-28 15:05:25 | 
| Last Modify:2020-03-12 14:18:49 | Copyright©Brick | 
| home page | Tree | 
| Annotation kernel can get tool activity | Download SCCT | Chinese | 
Name:get_page_from_freelist goes through the zonelist trying to allocate* a page.
Proto:static struct page *get_page_from_freelist(gfp_t gfp_mask, unsigned int order, int alloc_flags, const struct alloc_context *ac)
Type:struct page
Parameter:
| Type | Parameter | Name | 
|---|---|---|
| gfp_t | gfp_mask | |
| unsigned int | order | |
| int | alloc_flags | |
| const struct alloc_context * | ac | 
| 3574 | struct pglist_data * last_pgdat_dirty_limit = NULL | 
| 3577 | retry : | 
| 3582 | no_fallback = alloc_flags & ALLOC_NOFRAGMENT | 
| 3583 | z = preferred_zoneref | 
| 3589 | If cpusets_enabled() && alloc_flags & check for correct cpuset && Not __cpuset_zone_allowed(zone, gfp_mask) Then Continue | 
| 3612 | If spread_dirty_pages Then | 
| 3613 | If last_pgdat_dirty_limit == zone_pgdat Then Continue | 
| 3617 | last_pgdat_dirty_limit = zone_pgdat | 
| 3618 | Continue | 
| 3622 | If no_fallback && nr_online_nodes > 1 && zone != Pointer to actual zone Then | 
| 3631 | local_nid = zone_to_nid(Pointer to actual zone ) | 
| 3632 | If zone_to_nid(zone) != local_nid Then | 
| 3633 | alloc_flags &= ~ALLOC_NOFRAGMENT | 
| 3634 | Go to retry | 
| 3638 | mark = wmark_pages(zone, alloc_flags & Mask to get the watermark bits ) | 
| 3639 | If Not zone_watermark_fast(zone, order, mark, ac_classzone_idx(ac), alloc_flags) Then | 
| 3655 | If alloc_flags & don't check watermarks at all Then Go to try_this_zone | 
| 3658 | If Node reclaim mode* If non-zero call node_reclaim when the number of free pages falls below* the watermarks. == 0 || Not zone_allows_reclaim(Pointer to actual zone , zone) Then Continue | 
| 3662 | ret = node_reclaim(zone_pgdat, gfp_mask, order) | 
| 3664 | Case ret == NODE_RECLAIM_NOSCAN | 
| 3666 | Continue | 
| 3667 | Case ret == NODE_RECLAIM_FULL | 
| 3669 | Continue | 
| 3670 | Default | 
| 3672 | If zone_watermark_ok(zone, order, mark, ac_classzone_idx(ac), alloc_flags) Then Go to try_this_zone | 
| 3676 | Continue | 
| 3680 | try_this_zone : | 
| 3683 | If page Then | 
| 3684 | prep_new_page(page, order, gfp_mask, alloc_flags) | 
| 3693 | Return page | 
| 3694 | Else | 
| 3709 | If no_fallback Then | 
| 3710 | alloc_flags &= ~ALLOC_NOFRAGMENT | 
| 3711 | Go to retry | 
| 3714 | Return NULL | 
| Name | Describe | 
|---|---|
| __alloc_pages_cpuset_fallback | |
| __alloc_pages_may_oom | |
| __alloc_pages_direct_reclaim | The really slow allocator path where we enter direct reclaim | 
| __alloc_pages_slowpath | |
| __alloc_pages_nodemask | This is the 'heart' of the zoned buddy allocator. | 
| 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 |