- 论坛徽章:
- 0
|
本帖最后由 xinghun_4 于 2011-12-03 15:14 编辑
深入linux架构165页书上说,memap_init_zone函数将所有页最初都标记为可移动的,但是从代码中,我觉得一开始并没用这样设置呀!!!!- void __meminit memmap_init_zone(unsigned long size, int nid, unsigned long zone,
- unsigned long start_pfn, enum memmap_context context)
- {
- struct page *page;
- unsigned long end_pfn = start_pfn + size;
- unsigned long pfn;
- for (pfn = start_pfn; pfn < end_pfn; pfn++) {
- /*
- * There can be holes in boot-time mem_map[]s
- * handed to this function. They do not
- * exist on hotplugged memory.
- */
- if (context == MEMMAP_EARLY) {
- if (!early_pfn_valid(pfn))
- continue;
- if (!early_pfn_in_nid(pfn, nid))
- continue;
- }
- page = pfn_to_page(pfn);
- set_page_links(page, zone, nid, pfn);
- init_page_count(page);
- reset_page_mapcount(page);
- SetPageReserved(page); /*???????????????????????*/
- /*
- * Mark the block movable so that blocks are reserved for
- * movable at startup. This will force kernel allocations
- * to reserve their blocks rather than leaking throughout
- * the address space during boot when many long-lived
- * kernel allocations are made. Later some blocks near
- * the start are marked MIGRATE_RESERVE by
- * setup_zone_migrate_reserve()
- */
- if ((pfn & (pageblock_nr_pages-1)))/*???????????????????????????*/
- set_pageblock_migratetype(page, MIGRATE_MOVABLE);
复制代码 从上面问号的地方可以看出,我倒觉得一开始,所有页都标记为了reserved的了,是吗?求解释?求牛人指教!!!! |
|