Skip to content

Commit

Permalink
fix the bugs after we take in the parser check in riscv no mcs
Browse files Browse the repository at this point in the history
  • Loading branch information
ZhiyuanSue committed Jan 3, 2025
1 parent 99065de commit 1ae504d
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 14 deletions.
9 changes: 4 additions & 5 deletions src/boot/root_server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -683,7 +683,7 @@ unsafe fn rust_create_it_address_space(
root_cnode_cap,
create_it_pt_cap(&lvl1pt_cap, it_alloc_paging(), pt_vptr, IT_ASID).unsplay(),
) {
return cap::cap_page_table_cap(&cap_null_cap::new().unsplay()).clone();
return cap_page_table_cap::new(0,0,0,0);
}
pt_vptr += RISCV_GET_LVL_PGSIZE(i);
}
Expand All @@ -704,7 +704,6 @@ unsafe fn rust_create_it_address_space(
) -> cap_vspace_cap {
// create the PGD

use sel4_common::structures_gen::cap_null_cap;
let vspace_cap = cap_vspace_cap::new(IT_ASID as u64, rootserver.vspace as u64, 1);
let ptr = root_cnode_cap.get_capCNodePtr() as *mut cte_t;
let slot_pos_before = ndks_boot.slot_pos_cur;
Expand All @@ -723,7 +722,7 @@ unsafe fn rust_create_it_address_space(
root_cnode_cap,
create_it_pud_cap(&vspace_cap, it_alloc_paging(), vptr, IT_ASID).unsplay(),
) {
return cap::cap_vspace_cap(&cap_null_cap::new().unsplay()).clone();
return cap_vspace_cap::new(0,0,0);
}
vptr += BIT!(PGD_INDEX_OFFSET);
}
Expand All @@ -735,7 +734,7 @@ unsafe fn rust_create_it_address_space(
root_cnode_cap,
create_it_pd_cap(&vspace_cap, it_alloc_paging(), vptr, IT_ASID),
) {
return cap::cap_vspace_cap(&cap_null_cap::new().unsplay()).clone();
return cap_vspace_cap::new(0,0,0);
}
vptr += BIT!(PUD_INDEX_OFFSET);
}
Expand All @@ -747,7 +746,7 @@ unsafe fn rust_create_it_address_space(
root_cnode_cap,
create_it_pt_cap(&vspace_cap, it_alloc_paging(), vptr, IT_ASID).unsplay(),
) {
return cap::cap_vspace_cap(&cap_null_cap::new().unsplay()).clone();
return cap_vspace_cap::new(0,0,0);
}
vptr += BIT!(PD_INDEX_OFFSET);
}
Expand Down
19 changes: 10 additions & 9 deletions src/syscall/invocation/decode/arch/riscv64.rs
Original file line number Diff line number Diff line change
Expand Up @@ -262,8 +262,8 @@ fn decode_frame_map(length: usize, frame_slot: &mut cte_t, buffer: &seL4_IPCBuff
let vaddr = get_syscall_arg(0, buffer);
let w_rights_mask = get_syscall_arg(1, buffer);
let attr = vm_attributes_t::from_word(get_syscall_arg(2, buffer));
let lvl1pt_cap = cap::cap_page_table_cap(&get_extra_cap_by_index(0).unwrap().capability);
if let Some((lvl1pt, asid)) = get_vspace(&lvl1pt_cap) {
let lvl1pt_cap = &get_extra_cap_by_index(0).unwrap().capability;
if let Some((lvl1pt, asid)) = get_vspace(lvl1pt_cap) {
let frame_size = cap::cap_frame_cap(&frame_slot.capability).get_capFSize() as usize;
let vtop = vaddr + BIT!(pageBitsForSize(frame_size)) - 1;
if unlikely(vtop >= USER_TOP) {
Expand Down Expand Up @@ -406,9 +406,9 @@ fn decode_page_table_map(
}
return exception_t::EXCEPTION_SYSCALL_ERROR;
}
let lvl1pt_cap = cap::cap_page_table_cap(&get_extra_cap_by_index(0).unwrap().capability);
let lvl1pt_cap = &get_extra_cap_by_index(0).unwrap().capability;

if let Some((lvl1pt, asid)) = get_vspace(&lvl1pt_cap) {
if let Some((lvl1pt, asid)) = get_vspace(lvl1pt_cap) {
let lu_ret = lvl1pt.lookup_pt_slot(vaddr);
let lu_slot = convert_to_mut_type_ref::<PTE>(lu_ret.ptSlot as usize);
#[cfg(target_arch = "riscv64")]
Expand All @@ -426,9 +426,9 @@ fn decode_page_table_map(
}
}

fn get_vspace(lvl1pt_cap: &cap_page_table_cap) -> Option<(&mut PTE, usize)> {
if lvl1pt_cap.clone().unsplay().get_tag() != cap_tag::cap_page_table_cap
|| lvl1pt_cap.get_capPTIsMapped() as usize == asidInvalid
fn get_vspace(lvl1pt_cap: &cap) -> Option<(&mut PTE, usize)> {
if lvl1pt_cap.clone().get_tag() != cap_tag::cap_page_table_cap
|| cap::cap_page_table_cap(lvl1pt_cap).get_capPTIsMapped() as usize == asidInvalid
{
debug!("RISCVMMUInvocation: Invalid top-level PageTable.");
unsafe {
Expand All @@ -437,9 +437,10 @@ fn get_vspace(lvl1pt_cap: &cap_page_table_cap) -> Option<(&mut PTE, usize)> {
}
return None;
}
let lvl1pt_capability = cap::cap_page_table_cap(lvl1pt_cap);

let lvl1pt = convert_to_mut_type_ref::<PTE>(lvl1pt_cap.get_capPTBasePtr() as usize);
let asid = lvl1pt_cap.get_capPTMappedASID() as usize;
let lvl1pt = convert_to_mut_type_ref::<PTE>(lvl1pt_capability.get_capPTBasePtr() as usize);
let asid = lvl1pt_capability.get_capPTMappedASID() as usize;

let find_ret = find_vspace_for_asid(asid);
if find_ret.status != exception_t::EXCEPTION_NONE {
Expand Down

0 comments on commit 1ae504d

Please sign in to comment.