Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
gsplhtlxg
clone-Linux
提交
28be7072
C
clone-Linux
项目概览
gsplhtlxg
/
clone-Linux
通知
2
Star
0
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
clone-Linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
28be7072
编写于
8月 04, 2010
作者:
B
Benjamin Herrenschmidt
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
memblock/powerpc: Use new accessors
Signed-off-by:
N
Benjamin Herrenschmidt
<
benh@kernel.crashing.org
>
上级
08b84798
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
46 addition
and
71 deletion
+46
-71
arch/powerpc/mm/hash_utils_64.c
arch/powerpc/mm/hash_utils_64.c
+4
-4
arch/powerpc/mm/mem.c
arch/powerpc/mm/mem.c
+33
-59
arch/powerpc/mm/numa.c
arch/powerpc/mm/numa.c
+9
-8
未找到文件。
arch/powerpc/mm/hash_utils_64.c
浏览文件 @
28be7072
...
...
@@ -588,7 +588,7 @@ static void __init htab_initialize(void)
unsigned
long
pteg_count
;
unsigned
long
prot
;
unsigned
long
base
=
0
,
size
=
0
,
limit
;
int
i
;
struct
memblock_region
*
reg
;
DBG
(
" -> htab_initialize()
\n
"
);
...
...
@@ -659,9 +659,9 @@ static void __init htab_initialize(void)
*/
/* create bolted the linear mapping in the hash table */
for
(
i
=
0
;
i
<
memblock
.
memory
.
cnt
;
i
++
)
{
base
=
(
unsigned
long
)
__va
(
memblock
.
memory
.
regions
[
i
].
base
);
size
=
memblock
.
memory
.
region
[
i
].
size
;
for
_each_memblock
(
memory
,
reg
)
{
base
=
(
unsigned
long
)
__va
(
reg
->
base
);
size
=
reg
->
size
;
DBG
(
"creating mapping for region: %lx..%lx (prot: %lx)
\n
"
,
base
,
size
,
prot
);
...
...
arch/powerpc/mm/mem.c
浏览文件 @
28be7072
...
...
@@ -82,18 +82,11 @@ int page_is_ram(unsigned long pfn)
return
pfn
<
max_pfn
;
#else
unsigned
long
paddr
=
(
pfn
<<
PAGE_SHIFT
);
int
i
;
for
(
i
=
0
;
i
<
memblock
.
memory
.
cnt
;
i
++
)
{
unsigned
long
base
;
struct
memblock_region
*
reg
;
base
=
memblock
.
memory
.
regions
[
i
].
base
;
if
((
paddr
>=
base
)
&&
(
paddr
<
(
base
+
memblock
.
memory
.
regions
[
i
].
size
)))
{
for_each_memblock
(
memory
,
reg
)
if
(
paddr
>=
reg
->
base
&&
paddr
<
(
reg
->
base
+
reg
->
size
))
return
1
;
}
}
return
0
;
#endif
}
...
...
@@ -149,23 +142,19 @@ int
walk_system_ram_range
(
unsigned
long
start_pfn
,
unsigned
long
nr_pages
,
void
*
arg
,
int
(
*
func
)(
unsigned
long
,
unsigned
long
,
void
*
))
{
struct
memblock_region
res
;
unsigned
long
pfn
,
len
;
u
64
end
;
struct
memblock_region
*
reg
;
unsigned
long
end_pfn
=
start_pfn
+
nr_pages
;
u
nsigned
long
tstart
,
t
end
;
int
ret
=
-
1
;
res
.
base
=
(
u64
)
start_pfn
<<
PAGE_SHIFT
;
res
.
size
=
(
u64
)
nr_pages
<<
PAGE_SHIFT
;
end
=
res
.
base
+
res
.
size
-
1
;
while
((
res
.
base
<
end
)
&&
(
memblock_find
(
&
res
)
>=
0
))
{
pfn
=
(
unsigned
long
)(
res
.
base
>>
PAGE_SHIFT
);
len
=
(
unsigned
long
)(
res
.
size
>>
PAGE_SHIFT
);
ret
=
(
*
func
)(
pfn
,
len
,
arg
);
for_each_memblock
(
memory
,
reg
)
{
tstart
=
max
(
start_pfn
,
memblock_region_base_pfn
(
reg
));
tend
=
min
(
end_pfn
,
memblock_region_end_pfn
(
reg
));
if
(
tstart
>=
tend
)
continue
;
ret
=
(
*
func
)(
tstart
,
tend
-
tstart
,
arg
);
if
(
ret
)
break
;
res
.
base
+=
(
res
.
size
+
1
);
res
.
size
=
(
end
-
res
.
base
+
1
);
}
return
ret
;
}
...
...
@@ -179,9 +168,9 @@ EXPORT_SYMBOL_GPL(walk_system_ram_range);
#ifndef CONFIG_NEED_MULTIPLE_NODES
void
__init
do_init_bootmem
(
void
)
{
unsigned
long
i
;
unsigned
long
start
,
bootmap_pages
;
unsigned
long
total_pages
;
struct
memblock_region
*
reg
;
int
boot_mapsize
;
max_low_pfn
=
max_pfn
=
memblock_end_of_DRAM
()
>>
PAGE_SHIFT
;
...
...
@@ -204,10 +193,10 @@ void __init do_init_bootmem(void)
boot_mapsize
=
init_bootmem_node
(
NODE_DATA
(
0
),
start
>>
PAGE_SHIFT
,
min_low_pfn
,
max_low_pfn
);
/* Add active regions with valid PFNs */
for
(
i
=
0
;
i
<
memblock
.
memory
.
cnt
;
i
++
)
{
for
_each_memblock
(
memory
,
reg
)
{
unsigned
long
start_pfn
,
end_pfn
;
start_pfn
=
memblock
.
memory
.
regions
[
i
].
base
>>
PAGE_SHIFT
;
end_pfn
=
start_pfn
+
memblock_size_pages
(
&
memblock
.
memory
,
i
);
start_pfn
=
memblock
_region_base_pfn
(
reg
)
;
end_pfn
=
memblock_region_end_pfn
(
reg
);
add_active_range
(
0
,
start_pfn
,
end_pfn
);
}
...
...
@@ -218,29 +207,21 @@ void __init do_init_bootmem(void)
free_bootmem_with_active_regions
(
0
,
lowmem_end_addr
>>
PAGE_SHIFT
);
/* reserve the sections we're already using */
for
(
i
=
0
;
i
<
memblock
.
reserved
.
cnt
;
i
++
)
{
unsigned
long
addr
=
memblock
.
reserved
.
regions
[
i
].
base
+
memblock_size_bytes
(
&
memblock
.
reserved
,
i
)
-
1
;
if
(
addr
<
lowmem_end_addr
)
reserve_bootmem
(
memblock
.
reserved
.
regions
[
i
].
base
,
memblock_size_bytes
(
&
memblock
.
reserved
,
i
),
BOOTMEM_DEFAULT
);
else
if
(
memblock
.
reserved
.
regions
[
i
].
base
<
lowmem_end_addr
)
{
unsigned
long
adjusted_size
=
lowmem_end_addr
-
memblock
.
reserved
.
regions
[
i
].
base
;
reserve_bootmem
(
memblock
.
reserved
.
regions
[
i
].
base
,
adjusted_size
,
BOOTMEM_DEFAULT
);
for_each_memblock
(
reserved
,
reg
)
{
unsigned
long
top
=
reg
->
base
+
reg
->
size
-
1
;
if
(
top
<
lowmem_end_addr
)
reserve_bootmem
(
reg
->
base
,
reg
->
size
,
BOOTMEM_DEFAULT
);
else
if
(
reg
->
base
<
lowmem_end_addr
)
{
unsigned
long
trunc_size
=
lowmem_end_addr
-
reg
->
base
;
reserve_bootmem
(
reg
->
base
,
trunc_size
,
BOOTMEM_DEFAULT
);
}
}
#else
free_bootmem_with_active_regions
(
0
,
max_pfn
);
/* reserve the sections we're already using */
for
(
i
=
0
;
i
<
memblock
.
reserved
.
cnt
;
i
++
)
reserve_bootmem
(
memblock
.
reserved
.
regions
[
i
].
base
,
memblock_size_bytes
(
&
memblock
.
reserved
,
i
),
BOOTMEM_DEFAULT
);
for_each_memblock
(
reserved
,
reg
)
reserve_bootmem
(
reg
->
base
,
reg
->
size
,
BOOTMEM_DEFAULT
);
#endif
/* XXX need to clip this if using highmem? */
sparse_memory_present_with_active_regions
(
0
);
...
...
@@ -251,22 +232,15 @@ void __init do_init_bootmem(void)
/* mark pages that don't exist as nosave */
static
int
__init
mark_nonram_nosave
(
void
)
{
unsigned
long
memblock_next_region_start_pfn
,
memblock_region_max_pfn
;
int
i
;
for
(
i
=
0
;
i
<
memblock
.
memory
.
cnt
-
1
;
i
++
)
{
memblock_region_max_pfn
=
(
memblock
.
memory
.
regions
[
i
].
base
>>
PAGE_SHIFT
)
+
(
memblock
.
memory
.
regions
[
i
].
size
>>
PAGE_SHIFT
);
memblock_next_region_start_pfn
=
memblock
.
memory
.
regions
[
i
+
1
].
base
>>
PAGE_SHIFT
;
if
(
memblock_region_max_pfn
<
memblock_next_region_start_pfn
)
register_nosave_region
(
memblock_region_max_pfn
,
memblock_next_region_start_pfn
);
struct
memblock_region
*
reg
,
*
prev
=
NULL
;
for_each_memblock
(
memory
,
reg
)
{
if
(
prev
&&
memblock_region_end_pfn
(
prev
)
<
memblock_region_base_pfn
(
reg
))
register_nosave_region
(
memblock_region_end_pfn
(
prev
),
memblock_region_base_pfn
(
reg
));
prev
=
reg
;
}
return
0
;
}
...
...
arch/powerpc/mm/numa.c
浏览文件 @
28be7072
...
...
@@ -746,16 +746,17 @@ static void __init setup_nonnuma(void)
unsigned
long
top_of_ram
=
memblock_end_of_DRAM
();
unsigned
long
total_ram
=
memblock_phys_mem_size
();
unsigned
long
start_pfn
,
end_pfn
;
unsigned
int
i
,
nid
=
0
;
unsigned
int
nid
=
0
;
struct
memblock_region
*
reg
;
printk
(
KERN_DEBUG
"Top of RAM: 0x%lx, Total RAM: 0x%lx
\n
"
,
top_of_ram
,
total_ram
);
printk
(
KERN_DEBUG
"Memory hole size: %ldMB
\n
"
,
(
top_of_ram
-
total_ram
)
>>
20
);
for
(
i
=
0
;
i
<
memblock
.
memory
.
cnt
;
++
i
)
{
start_pfn
=
memblock
.
memory
.
region
[
i
].
base
>>
PAGE_SHIFT
;
end_pfn
=
start_pfn
+
memblock_size_pages
(
&
memblock
.
memory
,
i
);
for
_each_memblock
(
memory
,
reg
)
{
start_pfn
=
memblock
_region_base_pfn
(
reg
)
;
end_pfn
=
memblock_region_end_pfn
(
reg
);
fake_numa_create_new_node
(
end_pfn
,
&
nid
);
add_active_range
(
nid
,
start_pfn
,
end_pfn
);
...
...
@@ -891,11 +892,11 @@ static struct notifier_block __cpuinitdata ppc64_numa_nb = {
static
void
mark_reserved_regions_for_nid
(
int
nid
)
{
struct
pglist_data
*
node
=
NODE_DATA
(
nid
);
int
i
;
struct
memblock_region
*
reg
;
for
(
i
=
0
;
i
<
memblock
.
reserved
.
cnt
;
i
++
)
{
unsigned
long
physbase
=
memblock
.
reserved
.
region
[
i
].
base
;
unsigned
long
size
=
memblock
.
reserved
.
region
[
i
].
size
;
for
_each_memblock
(
reserved
,
reg
)
{
unsigned
long
physbase
=
reg
->
base
;
unsigned
long
size
=
reg
->
size
;
unsigned
long
start_pfn
=
physbase
>>
PAGE_SHIFT
;
unsigned
long
end_pfn
=
PFN_UP
(
physbase
+
size
);
struct
node_active_region
node_ar
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录