From 776dc976c97cb34324099fe7d30351accda6fc8f Mon Sep 17 00:00:00 2001 From: WangRunji Date: Tue, 17 Jul 2018 12:07:21 +0800 Subject: [PATCH] Fix for user --- crate/process/src/processor.rs | 2 +- kernel/src/arch/riscv32/paging.rs | 2 +- kernel/src/arch/x86_64/paging.rs | 2 -- kernel/src/logging.rs | 1 - kernel/src/syscall.rs | 2 +- kernel/src/trap.rs | 4 +++- 6 files changed, 6 insertions(+), 7 deletions(-) diff --git a/crate/process/src/processor.rs b/crate/process/src/processor.rs index 2525bb8..e0b04fc 100644 --- a/crate/process/src/processor.rs +++ b/crate/process/src/processor.rs @@ -202,7 +202,7 @@ impl Processor_ { if let Some(waiter) = self.find_waiter(pid) { info!(" then wakeup {}", waiter); self.set_status(waiter, Status::Ready); - self.switch_to(waiter); // yield + self.next = Some(waiter); } } diff --git a/kernel/src/arch/riscv32/paging.rs b/kernel/src/arch/riscv32/paging.rs index 8821e81..2903429 100644 --- a/kernel/src/arch/riscv32/paging.rs +++ b/kernel/src/arch/riscv32/paging.rs @@ -50,7 +50,7 @@ impl PageTable for ActivePageTable { fn get_entry(&mut self, addr: usize) -> &mut PageEntry { let page = Page::of_addr(VirtAddr::new(addr)); - assert!(self.0.translate_page(page).is_some(), "page table entry not exist"); + let _ = self.0.translate_page(page); let entry_addr = ((addr >> 10) & 0x003ffffc) | (RECURSIVE_PAGE_PML4 << 22); unsafe { &mut *(entry_addr as *mut PageEntry) } } diff --git a/kernel/src/arch/x86_64/paging.rs b/kernel/src/arch/x86_64/paging.rs index 3e4bb5f..17a782c 100644 --- a/kernel/src/arch/x86_64/paging.rs +++ b/kernel/src/arch/x86_64/paging.rs @@ -58,8 +58,6 @@ impl PageTable for ActivePageTable { } fn get_entry(&mut self, addr: usize) -> &mut PageEntry { - assert!(self.0.translate_page(Page::of_addr(addr)).is_some(), - "page table entry not exist"); let entry_addr = ((addr >> 9) & 0o777_777_777_7770) | 0xffffff80_00000000; unsafe { &mut *(entry_addr as *mut PageEntry) } } diff --git a/kernel/src/logging.rs b/kernel/src/logging.rs index a286ba9..99b8ab0 100644 --- a/kernel/src/logging.rs +++ b/kernel/src/logging.rs @@ -53,7 +53,6 @@ impl Log for SimpleLogger { } fn log(&self, record: &Record) { static DISABLED_TARGET: &[&str] = &[ - "rust_ucore::process::scheduler::rr", ]; if self.enabled(record.metadata()) && !DISABLED_TARGET.contains(&record.target()) { // let target = record.target(); diff --git a/kernel/src/syscall.rs b/kernel/src/syscall.rs index 7fde98f..80a170c 100644 --- a/kernel/src/syscall.rs +++ b/kernel/src/syscall.rs @@ -27,7 +27,7 @@ pub fn syscall(id: usize, args: [usize; 6], tf: &TrapFrame) -> i32 { SYS_PUTC => sys_putc(args[0] as u8 as char), _ => { error!("unknown syscall id: {:#x?}, args: {:x?}", id, args); - -1 + ::trap::error(tf); } } } diff --git a/kernel/src/trap.rs b/kernel/src/trap.rs index 6f667f3..42c7abc 100644 --- a/kernel/src/trap.rs +++ b/kernel/src/trap.rs @@ -12,12 +12,14 @@ pub fn before_return() { } } -pub fn error(tf: &TrapFrame) { +pub fn error(tf: &TrapFrame) -> ! { if let Some(processor) = PROCESSOR.try() { let mut processor = processor.lock(); let pid = processor.current_pid(); error!("Process {} error:\n{:#x?}", pid, tf); processor.exit(pid, 0x100); // TODO: Exit code for error + processor.schedule(); + unreachable!(); } else { panic!("Exception when processor not inited\n{:#x?}", tf); }