分析函数free_all_bootmem_core
static unsigned long __init free_all_bootmem_core(bootmem_data_t *bdata)
{
struct page *page;
unsigned long start, end, pages, count = 0;
if (!bdata->node_bootmem_map)
return 0;
/*拿到开始结束页框*/
start = bdata->node_min_pfn;
end = bdata->node_low_pfn;
bdebug("nid=%td start=%lx end=%lx\n",
bdata - bootmem_node_data, start, end);
while (start < end) {
unsigned long *map, idx, vec;
unsigned shift;
/*map为内存使用情况位图的页框指针, idx是当前要处理的页框序号,shift是4个字节<span style="font-family: Arial, Helvetica, sans-serif;">BITS_PER_LONG个二进制位内的偏移,就是idx序号所在的页使用情况的long型数据内的位偏移</span>*/
map = bdata->node_bootmem_map;
idx = start - bdata->node_min_pfn;
shift = idx & (