Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xv6-public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
OS Lab Group
奖励实验
xv6-public
提交
6a371af4
提交
6a371af4
4月 25, 2012
创建
作者:
Austin Clements
提交者:
Silas Boyd-Wickizer
4月 27, 2012
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Use uerr in lots of places in trap/vm
So we can hush up spurious errors.
上级
e0824a1c
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
24 行增加
和
11 行删除
+24
-11
vm.hh
include/vm.hh
+3
-0
trap.cc
kernel/trap.cc
+7
-5
vm.cc
kernel/vm.cc
+14
-6
没有找到文件。
include/vm.hh
浏览文件 @
6a371af4
...
@@ -68,6 +68,9 @@ struct vma
...
@@ -68,6 +68,9 @@ struct vma
NEW_DELETE_OPS
(
vma
)
NEW_DELETE_OPS
(
vma
)
};
};
class
print_stream
;
void
to_stream
(
print_stream
*
s
,
vma
*
v
);
// An address space: a set of vmas plus h/w page table.
// An address space: a set of vmas plus h/w page table.
// The elements of e[] are not ordered by address.
// The elements of e[] are not ordered by address.
struct
vmap
{
struct
vmap
{
...
...
kernel/trap.cc
浏览文件 @
6a371af4
...
@@ -12,6 +12,7 @@
...
@@ -12,6 +12,7 @@
#include "bits.hh"
#include "bits.hh"
#include "kalloc.hh"
#include "kalloc.hh"
#include "apic.hh"
#include "apic.hh"
#include "kstream.hh"
extern
"C"
void
__uaccess_end
(
void
);
extern
"C"
void
__uaccess_end
(
void
);
...
@@ -73,7 +74,7 @@ do_pagefault(struct trapframe *tf)
...
@@ -73,7 +74,7 @@ do_pagefault(struct trapframe *tf)
#endif
#endif
return
0
;
return
0
;
}
}
cprintf
(
"pagefault: failed in user
\n
"
);
uerr
.
println
(
"pagefault: failed in user
"
);
cli
();
cli
();
}
}
return
-
1
;
return
-
1
;
...
@@ -171,10 +172,11 @@ trap(struct trapframe *tf)
...
@@ -171,10 +172,11 @@ trap(struct trapframe *tf)
kerneltrap
(
tf
);
kerneltrap
(
tf
);
// In user space, assume process misbehaved.
// In user space, assume process misbehaved.
cprintf
(
"pid %d %s: trap %lu err %d on cpu %d "
uerr
.
println
(
"pid "
,
myproc
()
->
pid
,
' '
,
myproc
()
->
name
,
"rip 0x%lx rsp 0x%lx addr 0x%lx--kill proc
\n
"
,
": trap "
,
(
u64
)
tf
->
trapno
,
" err "
,
(
u32
)
tf
->
err
,
myproc
()
->
pid
,
myproc
()
->
name
,
tf
->
trapno
,
tf
->
err
,
" on cpu "
,
mycpuid
(),
" rip "
,
shex
(
tf
->
rip
),
mycpu
()
->
id
,
tf
->
rip
,
tf
->
rsp
,
rcr2
());
" rsp "
,
shex
(
tf
->
rsp
),
" addr "
,
shex
(
rcr2
()),
"--kill proc"
);
myproc
()
->
killed
=
1
;
myproc
()
->
killed
=
1
;
}
}
...
...
kernel/vm.cc
浏览文件 @
6a371af4
...
@@ -16,6 +16,7 @@
...
@@ -16,6 +16,7 @@
#include "sperf.hh"
#include "sperf.hh"
#include "uwq.hh"
#include "uwq.hh"
#include "kmtrace.hh"
#include "kmtrace.hh"
#include "kstream.hh"
enum
{
vm_debug
=
0
};
enum
{
vm_debug
=
0
};
enum
{
tlb_shootdown
=
1
};
enum
{
tlb_shootdown
=
1
};
...
@@ -188,6 +189,13 @@ vma::~vma()
...
@@ -188,6 +189,13 @@ vma::~vma()
n
->
decref
();
n
->
decref
();
}
}
void
to_stream
(
print_stream
*
s
,
vma
*
v
)
{
s
->
print
(
"vma@["
,
shex
(
v
->
vma_start
),
','
,
shex
(
v
->
vma_end
),
')'
,
v
->
va_type
==
COW
?
"/COW"
:
""
);
}
/*
/*
* vmap
* vmap
*/
*/
...
@@ -425,8 +433,7 @@ again:
...
@@ -425,8 +433,7 @@ again:
goto
again
;
goto
again
;
vma
*
rvma
=
(
vma
*
)
r
;
vma
*
rvma
=
(
vma
*
)
r
;
cprintf
(
"vmap::insert: overlap with %p: 0x%lx--0x%lx
\n
"
,
uerr
.
println
(
"vmap::insert: overlap with "
,
rvma
);
rvma
,
rvma
->
vma_start
,
rvma
->
vma_end
);
return
-
1
;
return
-
1
;
}
}
#endif
#endif
...
@@ -509,8 +516,9 @@ vmap::remove(uptr vma_start, uptr len)
...
@@ -509,8 +516,9 @@ vmap::remove(uptr vma_start, uptr len)
for
(
auto
r
:
span
)
{
for
(
auto
r
:
span
)
{
vma
*
rvma
=
(
vma
*
)
r
;
vma
*
rvma
=
(
vma
*
)
r
;
if
(
rvma
->
vma_start
<
vma_start
||
rvma
->
vma_end
>
vma_end
)
{
if
(
rvma
->
vma_start
<
vma_start
||
rvma
->
vma_end
>
vma_end
)
{
cprintf
(
"vmap::remove: partial unmap not supported; unmapping [%#lx,%#lx) from [%#lx,%#lx)
\n
"
,
uerr
.
println
(
"vmap::remove: partial unmap not supported; "
vma_start
,
vma_start
+
len
,
rvma
->
vma_start
,
rvma
->
vma_end
);
"unmapping ["
,
shex
(
vma_start
),
","
,
shex
(
vma_start
+
len
),
")"
" from "
,
rvma
);
return
-
1
;
return
-
1
;
}
}
}
}
...
@@ -821,8 +829,8 @@ vmap::sbrk(ssize_t n, uptr *addr)
...
@@ -821,8 +829,8 @@ vmap::sbrk(ssize_t n, uptr *addr)
prev
=
e
;
prev
=
e
;
#endif
#endif
}
else
{
}
else
{
cprintf
(
"growproc: overlap with existing mapping; brk %lx n %ld
\n
"
,
uerr
.
println
(
"growproc: overlap with existing mapping; "
curbrk
,
n
);
"brk "
,
shex
(
curbrk
),
" n "
,
n
);
return
-
1
;
return
-
1
;
}
}
}
}
...
...
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论