- struct mm_region* stack_vm;
-
- stack_vm = region_create(
- USTACK_END, USTACK_TOP, REGION_RW | REGION_RSHARED | REGION_ANON);
- // 注册用户栈区域
- region_add(&pcb->mm.regions, stack_vm);
-
- // 预留地址空间,具体物理页将由Page Fault Handler按需分配。
- for (uintptr_t i = PG_ALIGN(USTACK_END); i < USTACK_TOP; i += PG_SIZE) {
- vmm_set_mapping(PD_MOUNT_1, i, 0, PG_ALLOW_USER | PG_WRITE, VMAP_NULL);
+ struct mm_region* mapped;
+ struct mmap_param param = { .vms_mnt = VMS_MOUNT_1,
+ .pvms = &pcb->mm,
+ .mlen = USR_STACK_SIZE,
+ .proct = PROT_READ | PROT_WRITE,
+ .flags = MAP_ANON | MAP_PRIVATE | MAP_FIXED,
+ .type = REGION_TYPE_STACK };
+
+ int status = 0;
+ if ((status = mem_map(NULL, &mapped, USR_STACK, NULL, ¶m))) {
+ kprint_panic("fail to alloc user stack: %d", status);