move panicked check to uart.c
This commit is contained in:
parent
db067d24da
commit
ffb2ee074a
|
@ -33,13 +33,6 @@
|
||||||
void
|
void
|
||||||
consputc(int c)
|
consputc(int c)
|
||||||
{
|
{
|
||||||
extern volatile int panicked; // from printf.c
|
|
||||||
|
|
||||||
if(panicked){
|
|
||||||
for(;;)
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(c == BACKSPACE){
|
if(c == BACKSPACE){
|
||||||
// if the user typed backspace, overwrite with a space.
|
// if the user typed backspace, overwrite with a space.
|
||||||
uartputc_sync('\b'); uartputc_sync(' '); uartputc_sync('\b');
|
uartputc_sync('\b'); uartputc_sync(' '); uartputc_sync('\b');
|
||||||
|
@ -66,12 +59,6 @@ int
|
||||||
consolewrite(int user_src, uint64 src, int n)
|
consolewrite(int user_src, uint64 src, int n)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
extern volatile int panicked; // from printf.c
|
|
||||||
|
|
||||||
if(panicked){
|
|
||||||
for(;;)
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
acquire(&cons.lock);
|
acquire(&cons.lock);
|
||||||
for(i = 0; i < n; i++){
|
for(i = 0; i < n; i++){
|
||||||
|
|
|
@ -121,7 +121,7 @@ panic(char *s)
|
||||||
printf("panic: ");
|
printf("panic: ");
|
||||||
printf(s);
|
printf(s);
|
||||||
printf("\n");
|
printf("\n");
|
||||||
panicked = 1; // freeze output from other CPUs
|
panicked = 1; // freeze uart output from other CPUs
|
||||||
for(;;)
|
for(;;)
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,6 +45,8 @@ char uart_tx_buf[UART_TX_BUF_SIZE];
|
||||||
int uart_tx_w; // write next to uart_tx_buf[uart_tx_w++]
|
int uart_tx_w; // write next to uart_tx_buf[uart_tx_w++]
|
||||||
int uart_tx_r; // read next from uart_tx_buf[uar_tx_r++]
|
int uart_tx_r; // read next from uart_tx_buf[uar_tx_r++]
|
||||||
|
|
||||||
|
extern volatile int panicked; // from printf.c
|
||||||
|
|
||||||
void uartstart();
|
void uartstart();
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -85,6 +87,12 @@ void
|
||||||
uartputc(int c)
|
uartputc(int c)
|
||||||
{
|
{
|
||||||
acquire(&uart_tx_lock);
|
acquire(&uart_tx_lock);
|
||||||
|
|
||||||
|
if(panicked){
|
||||||
|
for(;;)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
while(1){
|
while(1){
|
||||||
if(((uart_tx_w + 1) % UART_TX_BUF_SIZE) == uart_tx_r){
|
if(((uart_tx_w + 1) % UART_TX_BUF_SIZE) == uart_tx_r){
|
||||||
// buffer is full.
|
// buffer is full.
|
||||||
|
@ -109,6 +117,11 @@ uartputc_sync(int c)
|
||||||
{
|
{
|
||||||
push_off();
|
push_off();
|
||||||
|
|
||||||
|
if(panicked){
|
||||||
|
for(;;)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
// wait for Transmit Holding Empty to be set in LSR.
|
// wait for Transmit Holding Empty to be set in LSR.
|
||||||
while((ReadReg(LSR) & LSR_TX_IDLE) == 0)
|
while((ReadReg(LSR) & LSR_TX_IDLE) == 0)
|
||||||
;
|
;
|
||||||
|
|
20
user/grind.c
20
user/grind.c
|
@ -292,8 +292,8 @@ go(int which_child)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
void
|
||||||
main()
|
iter()
|
||||||
{
|
{
|
||||||
unlink("a");
|
unlink("a");
|
||||||
unlink("b");
|
unlink("b");
|
||||||
|
@ -331,3 +331,19 @@ main()
|
||||||
|
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main()
|
||||||
|
{
|
||||||
|
while(1){
|
||||||
|
int pid = fork();
|
||||||
|
if(pid == 0){
|
||||||
|
iter();
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
if(pid > 0){
|
||||||
|
wait(0);
|
||||||
|
}
|
||||||
|
sleep(20);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue