Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xv6-public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
OS Lab Group
奖励实验
xv6-public
提交
10c15b7a
提交
10c15b7a
2月 13, 2012
创建
作者:
Nickolai Zeldovich
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix bug (using kmalloc instead of new)
add debug information (string type) for rcu data structures
上级
4e6609e5
隐藏空白字符变更
内嵌
并排
正在显示
9 个修改的文件
包含
23 行增加
和
10 行删除
+23
-10
bio.cc
bio.cc
+2
-2
buf.hh
buf.hh
+3
-0
crange.cc
crange.cc
+1
-1
fs.cc
fs.cc
+2
-1
gc.cc
gc.cc
+0
-2
gc.hh
gc.hh
+11
-0
ns.hh
ns.hh
+2
-2
proc.cc
proc.cc
+1
-1
vm.cc
vm.cc
+1
-1
没有找到文件。
bio.cc
浏览文件 @
10c15b7a
...
@@ -106,7 +106,7 @@ bget(u32 dev, u64 sector, int *writer)
...
@@ -106,7 +106,7 @@ bget(u32 dev, u64 sector, int *writer)
destroylock
(
&
victim
->
lock
);
destroylock
(
&
victim
->
lock
);
gc_delayed
(
victim
);
gc_delayed
(
victim
);
b
=
(
buf
*
)
kmalloc
(
sizeof
(
*
b
)
);
b
=
new
buf
(
);
b
->
dev
=
dev
;
b
->
dev
=
dev
;
b
->
sector
=
sector
;
b
->
sector
=
sector
;
b
->
flags
=
B_BUSY
;
b
->
flags
=
B_BUSY
;
...
@@ -172,7 +172,7 @@ initbio(void)
...
@@ -172,7 +172,7 @@ initbio(void)
bufns
=
new
xns
<
pair
<
u32
,
u64
>
,
buf
*
,
bio_hash
>
(
false
);
bufns
=
new
xns
<
pair
<
u32
,
u64
>
,
buf
*
,
bio_hash
>
(
false
);
for
(
u64
i
=
0
;
i
<
NBUF
;
i
++
)
{
for
(
u64
i
=
0
;
i
<
NBUF
;
i
++
)
{
struct
buf
*
b
=
(
buf
*
)
kmalloc
(
sizeof
(
*
b
)
);
struct
buf
*
b
=
new
buf
(
);
b
->
dev
=
0xdeadbeef
;
b
->
dev
=
0xdeadbeef
;
b
->
sector
=
-
i
;
/* dummy to pre-allocate NBUF spaces for evict */
b
->
sector
=
-
i
;
/* dummy to pre-allocate NBUF spaces for evict */
b
->
flags
=
0
;
b
->
flags
=
0
;
...
...
buf.hh
浏览文件 @
10c15b7a
...
@@ -11,6 +11,9 @@ struct buf : public rcu_freed {
...
@@ -11,6 +11,9 @@ struct buf : public rcu_freed {
struct
condvar
cv
;
struct
condvar
cv
;
struct
spinlock
lock
;
struct
spinlock
lock
;
u8
data
[
512
];
u8
data
[
512
];
buf
()
:
rcu_freed
(
"buf"
)
{}
virtual
~
buf
()
{}
};
};
#define B_BUSY 0x1 // buffer is locked by some process
#define B_BUSY 0x1 // buffer is locked by some process
#define B_VALID 0x2 // buffer has been read from disk
#define B_VALID 0x2 // buffer has been read from disk
...
...
crange.cc
浏览文件 @
10c15b7a
...
@@ -126,7 +126,7 @@ class range_delayed : public rcu_freed {
...
@@ -126,7 +126,7 @@ class range_delayed : public rcu_freed {
struct
range
*
_e
;
struct
range
*
_e
;
public
:
public
:
range_delayed
(
range
*
e
)
:
_e
(
e
)
{}
range_delayed
(
range
*
e
)
:
rcu_freed
(
"range_delayed"
),
_e
(
e
)
{}
virtual
~
range_delayed
()
{
virtual
~
range_delayed
()
{
range_free
(
_e
);
range_free
(
_e
);
}
}
...
...
fs.cc
浏览文件 @
10c15b7a
...
@@ -221,6 +221,7 @@ iupdate(struct inode *ip)
...
@@ -221,6 +221,7 @@ iupdate(struct inode *ip)
// Though unlocked, all fields will be present,
// Though unlocked, all fields will be present,
// so looking a ip->inum and ip->gen are OK even w/o lock.
// so looking a ip->inum and ip->gen are OK even w/o lock.
inode
::
inode
()
inode
::
inode
()
:
rcu_freed
(
"inode"
)
{
{
dir
=
0
;
dir
=
0
;
}
}
...
@@ -483,7 +484,7 @@ class diskblock : public rcu_freed {
...
@@ -483,7 +484,7 @@ class diskblock : public rcu_freed {
u64
_block
;
u64
_block
;
public
:
public
:
diskblock
(
int
dev
,
u64
block
)
:
_dev
(
dev
),
_block
(
block
)
{}
diskblock
(
int
dev
,
u64
block
)
:
rcu_freed
(
"diskblock"
),
_dev
(
dev
),
_block
(
block
)
{}
virtual
~
diskblock
()
{
virtual
~
diskblock
()
{
bfree
(
_dev
,
_block
);
bfree
(
_dev
,
_block
);
}
}
...
...
gc.cc
浏览文件 @
10c15b7a
...
@@ -63,9 +63,7 @@ gc_free_tofreelist(rcu_freed **head, u64 epoch)
...
@@ -63,9 +63,7 @@ gc_free_tofreelist(rcu_freed **head, u64 epoch)
assert
(
0
);
assert
(
0
);
}
}
nr
=
r
->
_rcu_next
;
nr
=
r
->
_rcu_next
;
cprintf
(
"about to delete %p
\n
"
,
r
);
delete
r
;
delete
r
;
cprintf
(
"delete done
\n
"
);
nfree
++
;
nfree
++
;
}
}
*
head
=
r
;
*
head
=
r
;
...
...
gc.hh
浏览文件 @
10c15b7a
#pragma once
#pragma once
#define RCU_TYPE_DEBUG 1
class
rcu_freed
{
class
rcu_freed
{
public
:
public
:
u64
_rcu_epoch
;
u64
_rcu_epoch
;
rcu_freed
*
_rcu_next
;
rcu_freed
*
_rcu_next
;
#if RCU_TYPE_DEBUG
const
char
*
_rcu_type
;
#endif
rcu_freed
(
const
char
*
debug_type
)
#if RCU_TYPE_DEBUG
:
_rcu_type
(
debug_type
)
#endif
{}
virtual
~
rcu_freed
()
{}
virtual
~
rcu_freed
()
{}
}
__mpalign__
;
}
__mpalign__
;
ns.hh
浏览文件 @
10c15b7a
...
@@ -25,7 +25,7 @@ class xelem : public rcu_freed {
...
@@ -25,7 +25,7 @@ class xelem : public rcu_freed {
xelem
<
K
,
V
>
*
volatile
next
;
xelem
<
K
,
V
>
*
volatile
next
;
K
key
;
K
key
;
xelem
(
const
K
&
k
,
const
V
&
v
)
:
val
(
v
),
next_lock
(
0
),
next
(
0
),
key
(
k
)
{}
xelem
(
const
K
&
k
,
const
V
&
v
)
:
rcu_freed
(
"xelem"
),
val
(
v
),
next_lock
(
0
),
next
(
0
),
key
(
k
)
{}
virtual
~
xelem
()
{}
virtual
~
xelem
()
{}
};
};
...
@@ -42,7 +42,7 @@ class xns : public rcu_freed {
...
@@ -42,7 +42,7 @@ class xns : public rcu_freed {
xbucket
<
K
,
V
>
table
[
NHASH
];
xbucket
<
K
,
V
>
table
[
NHASH
];
public
:
public
:
xns
(
bool
dup
)
{
xns
(
bool
dup
)
:
rcu_freed
(
"xns"
)
{
allowdup
=
dup
;
allowdup
=
dup
;
nextkey
=
1
;
nextkey
=
1
;
for
(
int
i
=
0
;
i
<
NHASH
;
i
++
)
for
(
int
i
=
0
;
i
<
NHASH
;
i
++
)
...
...
proc.cc
浏览文件 @
10c15b7a
...
@@ -184,7 +184,7 @@ class delayedfree : public rcu_freed {
...
@@ -184,7 +184,7 @@ class delayedfree : public rcu_freed {
proc
*
_p
;
proc
*
_p
;
public
:
public
:
delayedfree
(
proc
*
p
)
:
_p
(
p
)
{}
delayedfree
(
proc
*
p
)
:
rcu_freed
(
"delayed proc free"
),
_p
(
p
)
{}
virtual
~
delayedfree
()
{
virtual
~
delayedfree
()
{
kmfree
(
_p
);
kmfree
(
_p
);
}
}
...
...
vm.cc
浏览文件 @
10c15b7a
...
@@ -54,7 +54,7 @@ class vma_delayed : public rcu_freed {
...
@@ -54,7 +54,7 @@ class vma_delayed : public rcu_freed {
vma
*
_e
;
vma
*
_e
;
public
:
public
:
vma_delayed
(
vma
*
e
)
:
_e
(
e
)
{}
vma_delayed
(
vma
*
e
)
:
rcu_freed
(
"vma_delayed"
),
_e
(
e
)
{}
virtual
~
vma_delayed
()
{
virtual
~
vma_delayed
()
{
vma_free
(
_e
);
vma_free
(
_e
);
}
}
...
...
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论