提交 42c41a06 创建 作者: Austin Clements's avatar Austin Clements

Move halt functionality to main.c

Avoid calling sys_halt from inside the kernel.
上级 7770d60c
...@@ -148,6 +148,9 @@ void lapic_tlbflush(hwid_t); ...@@ -148,6 +148,9 @@ void lapic_tlbflush(hwid_t);
void lapic_sampconf(hwid_t); void lapic_sampconf(hwid_t);
void lapicpc(char mask); void lapicpc(char mask);
// main.c
void halt(void) __attribute__((noreturn));
// mp.c // mp.c
extern int ncpu; extern int ncpu;
int mpbcpu(void); int mpbcpu(void);
......
...@@ -183,7 +183,7 @@ kerneltrap(struct trapframe *tf) ...@@ -183,7 +183,7 @@ kerneltrap(struct trapframe *tf)
printtrace(tf->rbp); printtrace(tf->rbp);
panicked = 1; panicked = 1;
sys_halt(); halt();
for(;;) for(;;)
; ;
} }
...@@ -204,7 +204,7 @@ panic(const char *fmt, ...) ...@@ -204,7 +204,7 @@ panic(const char *fmt, ...)
printtrace(rrbp()); printtrace(rrbp());
panicked = 1; panicked = 1;
sys_halt(); halt();
for(;;) for(;;)
; ;
} }
......
...@@ -140,3 +140,14 @@ cmain(u64 mbmagic, u64 mbaddr) ...@@ -140,3 +140,14 @@ cmain(u64 mbmagic, u64 mbaddr)
panic("Unreachable"); panic("Unreachable");
} }
void
halt(void)
{
int i;
const char s[] = "Shutdown";
for(i = 0; i < 8; i++)
outb(0x8900, s[i]);
for (;;);
}
...@@ -148,12 +148,8 @@ sys_unmap(userptr<void> addr, size_t len) ...@@ -148,12 +148,8 @@ sys_unmap(userptr<void> addr, size_t len)
int int
sys_halt(void) sys_halt(void)
{ {
int i; halt();
const char s[] = "Shutdown"; panic("halt returned");
for(i = 0; i < 8; i++)
outb(0x8900, s[i]);
return 0;
} }
//SYSCALL //SYSCALL
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论