2011-8-1 21:40:28
来源:互联网 发布:蓝格美容院软件 编辑:程序博客网 时间:2024/04/30 04:19
2011-8-1 21:40:28
unsigned long __init bootmem_bootmap_pages(unsigned long pages)
{
unsigned long mapsize;
mapsize = (pages+7)/8;
mapsize = (mapsize + ~PAGE_MASK) & PAGE_MASK;
mapsize >>= PAGE_SHIFT;
return mapsize;
}
typedef struct bootmem_data {
unsigned long node_boot_start;
unsigned long node_low_pfn;
void *node_bootmem_map;
unsigned long last_offset;
unsigned long last_pos;
unsigned long last_success; /* Previous allocation point. To speed
* up searching */
struct list_head list;
} bootmem_data_t;
static void __init link_bootmem(bootmem_data_t *bdata)
{
bootmem_data_t *ent;
if (list_empty(&bdata_list)) {
list_add(&bdata->list, &bdata_list);
return;
}
/* insert in order */
list_for_each_entry(ent, &bdata_list, list) {
if (bdata->node_boot_start < ent->node_boot_start) {
list_add_tail(&bdata->list, &ent->list);
return;
}
}
list_add_tail(&bdata->list, &bdata_list);
}
按起始地址从小到大的顺序进行插入到bdata_list中
static unsigned long __init get_mapsize(bootmem_data_t *bdata)
{
unsigned long mapsize;
unsigned long start = PFN_DOWN(bdata->node_boot_start);
unsigned long end = bdata->node_low_pfn;
mapsize = ((end - start) + 7) / 8;
return ALIGN(mapsize, sizeof(long));
}
为什么要4取整
#define PHYS_OFFSET UL(0xb0000000)
物理DRAM的偏移
#define PAGE_OFFSET UL(0xc0000000)
#define __phys_to_virt(x) ((x) - PHYS_OFFSET + PAGE_OFFSET)
- 2011-8-1 21:40:28
- 8/17/2011 1:40:45 PM
- 2011-8-1 21:05:03
- 2011-8-1 21:07:39
- 2011-8-1 21:13:48
- 2011-8-28
- 2011-8-21
- DP 1881 (2011-2-28 19:40)
- 2011-02-17 13:40:21
- 6/21/2011 3:46:28 PM
- 2011-8-11 10:40:54
- 2011-8-13 16:34:40
- 2011-8-13 16:40:42
- 8/19/2011 10:40:41 AM
- 2011-8-6 18:04:28
- 2011-8-9 12:57:28
- 8/27/2011 3:28:33 AM
- 标准化考试总结2011-8-28
- ZOJ 1649 Rescue (BFS)
- git、repo、gerrit之间的关系--学习感受第一篇
- Android开发之搜索框应用(一)
- C++重载操作符的简单实例
- 一个企业真有所谓的基因吗?
- 2011-8-1 21:40:28
- CVS使用手册
- java和ibatis事务处理
- 艰难地写文档
- 软件项目需求开发基本步骤
- Hibernate中createCriteria即QBC查询的详细用法
- Java网络编程基础
- 指针数组
- 20种应该避免的逻辑思维错误(上)