| 函数逻辑报告 | 
| Source Code: mm\compaction.c | Create Date:2022-07-27 15:55:43 | 
| Last Modify:2020-03-12 14:18:49 | Copyright©Brick | 
| 首页 | 函数Tree | 
| 注解内核,赢得工具 | 下载SCCT | English | 
函数名称:solate_migratepages_block() - isolate all migrate-able pages within* a single pageblock*@cc: Compaction control structure.*@low_pfn: The first PFN to isolate*@end_pfn: The one-past-the-last PFN to isolate, within same pageblock
函数原型:static unsigned long isolate_migratepages_block(struct compact_control *cc, unsigned long low_pfn, unsigned long end_pfn, isolate_mode_t isolate_mode)
返回类型:unsigned long
参数:
| 类型 | 参数 | 名称 | 
|---|---|---|
| struct compact_control * | cc | |
| unsigned long | low_pfn | |
| unsigned long | end_pfn | |
| isolate_mode_t | isolate_mode | 
| 785 | pgdat等于建立内存域和父结点之间的关联 | 
| 786 | nr_scanned等于0, nr_isolated等于0 | 
| 788 | flags等于0 | 
| 789 | bool locked = false | 
| 790 | struct page * page = NULL, * valid_page = NULL | 
| 792 | bool skip_on_failure = false | 
| 793 | next_skip_pfn等于0 | 
| 794 | bool skip_updated = false | 
| 803 | 如果Async or sync migration mode 恒等于MIGRATE_ASYNC则返回:0 | 
| 808 | 如果fatal_signal_pending(当前进程)则返回:0 | 
| 812 | cond_resched() | 
| 815 | skip_on_failure = true | 
| 822 | 如果skip_on_failure且low_pfn大于等于next_skip_pfn则 | 
| 829 | 如果nr_isolated则退出 | 
| 852 | low_pfn等于0 | 
| 853 | 转到:fatal_pending | 
| 856 | 如果非pfn_valid_within(low_pfn)则转到:isolate_fail | 
| 858 | nr_scanned自加 | 
| 860 | page等于pfn_to_page(low_pfn) | 
| 868 | 如果非valid_page且IS_ALIGNED(low_pfn, pageblock_nr_pages)则 | 
| 871 | 转到:isolate_abort | 
| 873 | valid_page等于page | 
| 883 | freepage_order等于Like page_order(), but for callers who cannot afford to hold the zone lock(page) | 
| 890 | 如果freepage_order大于0且freepage_order小于Free memory management - zoned buddy allocator. 则low_pfn加等于1UL左移freepage_order位的值减1 | 
| 892 | 继续下一循环 | 
| 902 | 如果PageCompound(page)则 | 
| 903 | order等于compound_order(page) | 
| 905 | 如果此条件成立可能性大(为编译器优化)(order < Free memory management - zoned buddy allocator. )则low_pfn加等于1UL左移order位的值减1 | 
| 907 | 转到:isolate_fail | 
| 920 | 如果此条件成立可能性小(为编译器优化)(__PageMovable(page))且非PageIsolated(page)则 | 
| 932 | 转到:isolate_fail | 
| 940 | 如果非page_mapping(page)且page_count(page)大于page_mapcount(page)则转到:isolate_fail | 
| 948 | 如果非gfp mask of a direct compactor 按位与__GFP_FS的值且page_mapping(page)则转到:isolate_fail | 
| 952 | 如果非locked则 | 
| 957 | 如果非skip_updated则 | 
| 958 | skip_updated = true | 
| 959 | 如果test_and_set_skip(cc, page, low_pfn)则转到:isolate_abort | 
| 964 | 如果非PageLRU(page)则转到:isolate_fail | 
| 972 | 如果此条件成立可能性小(为编译器优化)(PageCompound(page))则 | 
| 978 | lruvec等于mem_cgroup_page_lruvec(page, pgdat) | 
| 984 | VM_BUG_ON_PAGE(PageCompound(page), page) | 
| 987 | del_page_from_lru_list(page, lruvec, page_lru - which LRU list should a page be on?*@page: the page to test* Returns the LRU list a page should be on, as an index* into the array of LRU lists.) | 
| 991 | isolate_success : | 
| 992 | 添加链表项 | 
| 993 | Number of pages to migrate 自加 | 
| 994 | nr_isolated自加 | 
| 1008 | 继续下一循环 | 
| 1009 | isolate_fail : | 
| 1010 | 如果非skip_on_failure则继续下一循环 | 
| 1018 | 如果nr_isolated则 | 
| 1028 | 如果low_pfn小于next_skip_pfn则 | 
| 1029 | low_pfn等于next_skip_pfn减1 | 
| 1034 | next_skip_pfn加等于1UL左移rder a direct compactor needs 位 | 
| 1042 | 如果此条件成立可能性小(为编译器优化)(low_pfn > end_pfn)则low_pfn等于end_pfn | 
| 1045 | isolate_abort : | 
| 1057 | 如果low_pfn恒等于end_pfn且非nr_isolated或Rescanning the same pageblock 的值则 | 
| 1060 | update_cached_migrate(cc, low_pfn) | 
| 1066 | fatal_pending : | 
| 1067 | total_migrate_scanned加等于nr_scanned | 
| 1071 | 返回:low_pfn | 
| 名称 | 描述 | 
|---|---|
| isolate_migratepages_range | solate_migratepages_range() - isolate migrate-able pages in a PFN range*@cc: Compaction control structure | 
| 源代码转换工具 开放的插件接口 | X | 
|---|---|
| 支持:c/c++/esqlc/java Oracle/Informix/Mysql 插件可实现:逻辑报告 代码生成和批量转换代码 |