Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xv6-public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
OS Lab Group
奖励实验
xv6-public
提交
bf9656f1
提交
bf9656f1
4月 20, 2012
创建
作者:
Austin Clements
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Switch kalloc to use percpu instead of hand-coded CPU arrays
上级
2743888d
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
10 行增加
和
9 行删除
+10
-9
kalloc.hh
include/kalloc.hh
+4
-3
kalloc.cc
kernel/kalloc.cc
+6
-6
没有找到文件。
include/kalloc.hh
浏览文件 @
bf9656f1
#include "atomic.hh"
#include "percpu.hh"
template
<
class
T
>
struct
vptr64
{
...
...
@@ -59,7 +60,7 @@ struct kmem {
run
*
alloc
(
const
char
*
name
);
void
free
(
run
*
r
);
}
__mpalign__
;
};
enum
{
slab_stack
,
...
...
@@ -70,5 +71,5 @@ enum {
slab_type_max
};
extern
struct
kmem
kmems
[
NCPU
]
;
extern
struct
kmem
slabmem
[
slab_type_max
][
NCPU
];
extern
percpu
<
kmem
>
kmems
;
extern
percpu
<
kmem
>
slabmem
[
slab_type_max
];
kernel/kalloc.cc
浏览文件 @
bf9656f1
...
...
@@ -16,8 +16,8 @@
static
struct
Mbmem
mem
[
128
];
static
u64
nmem
;
static
u64
membytes
;
struct
kmem
kmems
[
NCPU
]
;
struct
kmem
slabmem
[
slab_type_max
][
NCPU
];
percpu
<
kmem
>
kmems
;
percpu
<
kmem
>
slabmem
[
slab_type_max
];
extern
char
end
[];
// first address after kernel loaded from ELF file
char
*
newend
;
...
...
@@ -170,7 +170,7 @@ kfree_pool(struct kmem *m, char *v)
}
static
void
kmemprint_pool
(
struct
kmem
*
km
)
kmemprint_pool
(
const
percpu
<
kmem
>
&
km
)
{
cprintf
(
"pool %s: [ "
,
&
km
[
0
].
name
[
1
]);
for
(
u32
i
=
0
;
i
<
NCPU
;
i
++
)
...
...
@@ -191,7 +191,7 @@ kmemprint()
static
char
*
kalloc_pool
(
struct
kmem
*
km
,
const
char
*
name
)
kalloc_pool
(
const
percpu
<
kmem
>
&
km
,
const
char
*
name
)
{
struct
run
*
r
=
0
;
struct
kmem
*
m
;
...
...
@@ -228,7 +228,7 @@ kalloc(const char *name)
void
*
ksalloc
(
int
slab
)
{
return
kalloc_pool
(
slabmem
[
slab
],
slabmem
[
slab
]
[
mycpuid
()].
name
);
return
kalloc_pool
(
slabmem
[
slab
],
slabmem
[
slab
]
->
name
);
}
void
...
...
@@ -321,5 +321,5 @@ kfree(void *v)
void
ksfree
(
int
slab
,
void
*
v
)
{
kfree_pool
(
&
slabmem
[
slab
][
mycpuid
()]
,
(
char
*
)
v
);
kfree_pool
(
slabmem
[
slab
].
get
()
,
(
char
*
)
v
);
}
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论