|
|
|
@ -1,6 +1,6 @@
|
|
|
|
|
use super::ProcessControlBlock;
|
|
|
|
|
use crate::config::{KERNEL_STACK_SIZE, PAGE_SIZE, TRAMPOLINE, TRAP_CONTEXT_BASE, USER_STACK_SIZE};
|
|
|
|
|
use crate::mm::{MapPermission, PhysPageNum, VirtAddr, KERNEL_SPACE};
|
|
|
|
|
use crate::mm::{MapPermission, PhysPageNum, VirtAddr, KERNEL_SPACE, PhysAddr};
|
|
|
|
|
use crate::sync::UPSafeCell;
|
|
|
|
|
use alloc::{
|
|
|
|
|
sync::{Arc, Weak},
|
|
|
|
@ -70,6 +70,7 @@ pub struct KernelStack(pub usize);
|
|
|
|
|
pub fn kstack_alloc() -> KernelStack {
|
|
|
|
|
let kstack_id = KSTACK_ALLOCATOR.exclusive_access().alloc();
|
|
|
|
|
let (kstack_bottom, kstack_top) = kernel_stack_position(kstack_id);
|
|
|
|
|
//println!("kstack_alloc kstack_bottom: {:#x?}, kstack_top: {:#x?}", kstack_bottom, kstack_top);
|
|
|
|
|
KERNEL_SPACE.exclusive_access().insert_framed_area(
|
|
|
|
|
kstack_bottom.into(),
|
|
|
|
|
kstack_top.into(),
|
|
|
|
@ -82,6 +83,8 @@ impl Drop for KernelStack {
|
|
|
|
|
fn drop(&mut self) {
|
|
|
|
|
let (kernel_stack_bottom, _) = kernel_stack_position(self.0);
|
|
|
|
|
let kernel_stack_bottom_va: VirtAddr = kernel_stack_bottom.into();
|
|
|
|
|
// let kernel_stack_bottom_pa: PhysAddr = kernel_stack_bottom.into();
|
|
|
|
|
// println!("kstack_drop kstack_bottom: va: {:#x?}, pa: {:#x?}", kernel_stack_bottom_va, kernel_stack_bottom_pa);
|
|
|
|
|
KERNEL_SPACE
|
|
|
|
|
.exclusive_access()
|
|
|
|
|
.remove_area_with_start_vpn(kernel_stack_bottom_va.into());
|
|
|
|
|