码迷,mamicode.com
首页 > 其他好文 > 详细

boot_mem分配器

时间:2018-01-06 12:02:48      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:for   print   ref   ops   long   boot   gpo   ali   star   

 

#define alloc_bootmem_low_pages(x) \
    __alloc_bootmem_low(x, PAGE_SIZE, 0)
    

 

void * __init __alloc_bootmem_low(unsigned long size, unsigned long align,
                  unsigned long goal)
{
    return ___alloc_bootmem(size, align, goal, ARCH_LOW_ADDRESS_LIMIT);
}

 

static void * __init ___alloc_bootmem(unsigned long size, unsigned long align,
                    unsigned long goal, unsigned long limit)
{
    void *mem = ___alloc_bootmem_nopanic(size, align, goal, limit);

    if (mem)
        return mem;
    /*
     * Whoops, we cannot satisfy the allocation request.
     */
    printk(KERN_ALERT "bootmem alloc of %lu bytes failed!\n", size);
    panic("Out of memory");
    return NULL;
}

 

static void * __init ___alloc_bootmem_nopanic(unsigned long size,
                    unsigned long align,
                    unsigned long goal,
                    unsigned long limit)
{
    bootmem_data_t *bdata;
    void *region;

restart:
    region = alloc_arch_preferred_bootmem(NULL, size, align, goal, limit);
    if (region)
        return region;

    list_for_each_entry(bdata, &bdata_list, list) {
        if (goal && bdata->node_low_pfn <= PFN_DOWN(goal))
            continue;
        if (limit && bdata->node_min_pfn >= PFN_DOWN(limit))
            break;

        region = alloc_bootmem_core(bdata, size, align, goal, limit);
        if (region)
            return region;
    }

    if (goal) {
        goal = 0;
        goto restart;
    }

    return NULL;
}

 

boot_mem分配器

标签:for   print   ref   ops   long   boot   gpo   ali   star   

原文地址:https://www.cnblogs.com/yangjiguang/p/8213403.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!