Skip to content

Commit

Permalink
change the cap tag
Browse files Browse the repository at this point in the history
  • Loading branch information
ZhiyuanSue committed Oct 9, 2024
1 parent e6a9241 commit 0f323af
Show file tree
Hide file tree
Showing 29 changed files with 346 additions and 379 deletions.
4 changes: 2 additions & 2 deletions kernel/src/arch/aarch64/exception.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ use sel4_common::fault::seL4_Fault_t;
use sel4_common::print;
use sel4_common::sel4_config::seL4_MsgMaxLength;
use sel4_common::structures::exception_t;
use sel4_common::structures_gen::cap_tag;
use sel4_common::utils::global_read;
use sel4_cspace::arch::CapTag;
use sel4_task::{activateThread, get_currenct_thread, get_current_domain, schedule};

use super::instruction::*;
Expand Down Expand Up @@ -61,7 +61,7 @@ pub fn handleUnknownSyscall(w: isize) -> exception_t {
let lu_ret = lookupCapAndSlot(thread, cptr);
let cap_type = lu_ret.cap.get_cap_type();

if cap_type != CapTag::CapThreadCap {
if cap_type != cap_tag::cap_thread_cap {
debug!("SysDebugNameThread: cap is not a TCB, halting");
halt();
}
Expand Down
4 changes: 2 additions & 2 deletions kernel/src/arch/riscv/exception.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ use sel4_common::fault::seL4_Fault_t;
use sel4_common::print;
use sel4_common::sel4_config::seL4_MsgMaxLength;
use sel4_common::structures::exception_t;
use sel4_cspace::arch::CapTag;
use sel4_common::structures_gen::cap_tag;
use sel4_task::{activateThread, get_currenct_thread, schedule};

#[no_mangle]
Expand Down Expand Up @@ -53,7 +53,7 @@ pub fn handleUnknownSyscall(w: isize) -> exception_t {
let lu_ret = lookupCapAndSlot(thread, cptr);
let cap_type = lu_ret.cap.get_cap_type();

if cap_type != CapTag::CapThreadCap {
if cap_type != cap_tag::cap_thread_cap {
debug!("SysDebugNameThread: cap is not a TCB, halting");
halt();
}
Expand Down
11 changes: 6 additions & 5 deletions kernel/src/boot/root_server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ use sel4_common::sel4_config::{
IT_ASID, PAGE_BITS, TCB_OFFSET,
};
use sel4_common::structures::{exception_t, seL4_IPCBuffer};
use sel4_common::structures_gen::cap_tag;
use sel4_common::utils::convert_to_mut_type_ref;
use sel4_cspace::interface::*;

Expand Down Expand Up @@ -62,7 +63,7 @@ pub fn root_server_init(
root_server_mem_init(it_v_reg, extra_bi_size_bits);
}
let root_cnode_cap = unsafe { create_root_cnode() };
if root_cnode_cap.get_cap_type() == CapTag::CapNullCap {
if root_cnode_cap.get_cap_type() == cap_tag::cap_null_cap {
debug!("ERROR: root c-node creation failed\n");
return None;
}
Expand All @@ -73,7 +74,7 @@ pub fn root_server_init(
rust_populate_bi_frame(0, CONFIG_MAX_NUM_NODES, ipcbuf_vptr, extra_bi_size);
}
let it_pd_cap = unsafe { rust_create_it_address_space(&root_cnode_cap, it_v_reg) };
if it_pd_cap.get_cap_type() == CapTag::CapNullCap {
if it_pd_cap.get_cap_type() == cap_tag::cap_null_cap {
debug!("ERROR: address space creation for initial thread failed");
return None;
}
Expand All @@ -88,12 +89,12 @@ pub fn root_server_init(
return None;
}
let ipcbuf_cap = unsafe { create_ipcbuf_frame_cap(&root_cnode_cap, &it_pd_cap, ipcbuf_vptr) };
if ipcbuf_cap.get_cap_type() == CapTag::CapNullCap {
if ipcbuf_cap.get_cap_type() == cap_tag::cap_null_cap {
debug!("ERROR: could not create IPC buffer for initial thread");
return None;
}

if ipcbuf_cap.get_cap_type() == CapTag::CapNullCap {
if ipcbuf_cap.get_cap_type() == cap_tag::cap_null_cap {
debug!("ERROR: could not create IPC buffer for initial thread");
return None;
}
Expand Down Expand Up @@ -188,7 +189,7 @@ unsafe fn create_initial_thread(

fn asid_init(root_cnode_cap: cap_t, it_pd_cap: cap_t) -> bool {
let it_ap_cap = create_it_asid_pool(&root_cnode_cap);
if it_ap_cap.get_cap_type() == CapTag::CapNullCap {
if it_ap_cap.get_cap_type() == cap_tag::cap_null_cap {
debug!("ERROR: could not create ASID pool for initial thread");
return false;
}
Expand Down
41 changes: 21 additions & 20 deletions kernel/src/interfaces_impl/cspace.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,10 @@ use crate::kernel::boot::current_lookup_fault;
use crate::syscall::safe_unbind_notification;
use sel4_common::sel4_config::{tcbCNodeEntries, tcbCTable, tcbVTable};
use sel4_common::structures::exception_t;
use sel4_common::structures_gen::cap_tag;
use sel4_common::utils::convert_to_mut_type_ref;
use sel4_cspace::compatibility::{ZombieType_ZombieTCB, Zombie_new};
use sel4_cspace::interface::{cap_t, finaliseCap_ret, CapTag};
use sel4_cspace::interface::{cap_t, finaliseCap_ret};
use sel4_ipc::{endpoint_t, notification_t, Transfer};
use sel4_task::{get_currenct_thread, ksWorkUnitsCompleted, tcb_t};
#[cfg(target_arch = "riscv64")]
Expand All @@ -21,7 +22,7 @@ use sel4_vspace::{asid_pool_t, asid_t, delete_asid, delete_asid_pool, unmapPage,
pub fn Arch_finaliseCap(cap: &cap_t, final_: bool) -> finaliseCap_ret {
let mut fc_ret = finaliseCap_ret::default();
match cap.get_cap_type() {
CapTag::CapFrameCap => {
cap_tag::cap_frame_cap => {
if cap.get_frame_mapped_asid() != 0 {
match unmapPage(
cap.get_frame_size(),
Expand All @@ -35,7 +36,7 @@ pub fn Arch_finaliseCap(cap: &cap_t, final_: bool) -> finaliseCap_ret {
}
}

CapTag::CapPageTableCap => {
cap_tag::cap_page_table_cap => {
if final_ && cap.get_pt_is_mapped() != 0 {
let asid = cap.get_pt_mapped_asid();
let find_ret = find_vspace_for_asid(asid);
Expand All @@ -56,7 +57,7 @@ pub fn Arch_finaliseCap(cap: &cap_t, final_: bool) -> finaliseCap_ret {
}
}

CapTag::CapASIDPoolCap => {
cap_tag::cap_asid_pool_cap => {
if final_ {
deleteASIDPool(cap.get_asid_base(), cap.get_asid_pool() as *mut asid_pool_t);
}
Expand All @@ -74,7 +75,7 @@ pub fn Arch_finaliseCap(cap: &cap_t, final_: bool) -> finaliseCap_ret {

let mut fc_ret = finaliseCap_ret::default();
match cap.get_cap_type() {
CapTag::CapFrameCap => {
cap_tag::cap_frame_cap => {
if cap.get_frame_mapped_asid() != 0 {
match unmapPage(
cap.get_frame_size(),
Expand All @@ -87,17 +88,17 @@ pub fn Arch_finaliseCap(cap: &cap_t, final_: bool) -> finaliseCap_ret {
}
}
}
CapTag::CapVspaceCap => {
cap_tag::cap_vspace_cap => {
if final_ && cap.get_vs_is_mapped() == 1 {
deleteASID(cap.get_vs_is_mapped(), cap.get_vs_base_ptr() as _);
}
}
// CapTag::CapPageGlobalDirectoryCap => {
// cap_tag::CapPageGlobalDirectoryCap => {
// if final_ && cap.get_pgd_is_mapped() == 1 {
// deleteASID(cap.get_pgd_is_mapped(), cap.get_pgd_base_ptr() as _);
// }
// }
// CapTag::CapPageUpperDirectoryCap => {
// cap_tag::CapPageUpperDirectoryCap => {
// if final_ && cap.get_pud_is_mapped() == 1 {
// let pud = ptr_to_mut(cap.get_pt_base_ptr() as *mut PUDE);
// unmap_page_upper_directory(
Expand All @@ -107,24 +108,24 @@ pub fn Arch_finaliseCap(cap: &cap_t, final_: bool) -> finaliseCap_ret {
// );
// }
// }
// CapTag::CapPageDirectoryCap => {
// cap_tag::CapPageDirectoryCap => {
// if final_ && cap.get_pd_is_mapped() == 1 {
// let pd = ptr_to_mut(cap.get_pt_base_ptr() as *mut PDE);
// unmap_page_directory(cap.get_pd_mapped_asid(), cap.get_pd_mapped_address(), pd);
// }
// }
CapTag::CapPageTableCap => {
cap_tag::cap_page_table_cap => {
if final_ && cap.get_pt_is_mapped() == 1 {
let pte = ptr_to_mut(cap.get_pt_base_ptr() as *mut PTE);
unmap_page_table(cap.get_pt_mapped_asid(), cap.get_pt_mapped_address(), pte);
}
}
CapTag::CapASIDPoolCap => {
cap_tag::cap_asid_pool_cap => {
if final_ {
deleteASIDPool(cap.get_asid_base(), cap.get_asid_pool() as *mut asid_pool_t);
}
}
CapTag::CapASIDControlCap => {}
cap_tag::cap_asid_control_cap => {}
_ => unimplemented!("finaliseCap: {:?}", cap.get_cap_type()),
}
fc_ret.remainder = cap_t::new_null_cap();
Expand All @@ -146,7 +147,7 @@ pub fn finaliseCap(cap: &cap_t, _final: bool, _exposed: bool) -> finaliseCap_ret
return Arch_finaliseCap(cap, _final);
}
match cap.get_cap_type() {
CapTag::CapEndpointCap => {
cap_tag::cap_endpoint_cap => {
if _final {
// cancelAllIPC(cap.get_ep_ptr() as *mut endpoint_t);
convert_to_mut_type_ref::<endpoint_t>(cap.get_ep_ptr()).cancel_all_ipc()
Expand All @@ -155,7 +156,7 @@ pub fn finaliseCap(cap: &cap_t, _final: bool, _exposed: bool) -> finaliseCap_ret
fc_ret.cleanupInfo = cap_t::new_null_cap();
return fc_ret;
}
CapTag::CapNotificationCap => {
cap_tag::cap_notification_cap => {
if _final {
let ntfn = convert_to_mut_type_ref::<notification_t>(cap.get_nf_ptr());
ntfn.safe_unbind_tcb();
Expand All @@ -165,7 +166,7 @@ pub fn finaliseCap(cap: &cap_t, _final: bool, _exposed: bool) -> finaliseCap_ret
fc_ret.cleanupInfo = cap_t::new_null_cap();
return fc_ret;
}
CapTag::CapReplyCap | CapTag::CapNullCap | CapTag::CapDomainCap => {
cap_tag::cap_reply_cap | cap_tag::cap_null_cap | cap_tag::cap_domain_cap => {
fc_ret.remainder = cap_t::new_null_cap();
fc_ret.cleanupInfo = cap_t::new_null_cap();
return fc_ret;
Expand All @@ -178,7 +179,7 @@ pub fn finaliseCap(cap: &cap_t, _final: bool, _exposed: bool) -> finaliseCap_ret
}

match cap.get_cap_type() {
CapTag::CapCNodeCap => {
cap_tag::cap_cnode_cap => {
return if _final {
fc_ret.remainder = Zombie_new(
1usize << cap.get_cnode_radix(),
Expand All @@ -193,7 +194,7 @@ pub fn finaliseCap(cap: &cap_t, _final: bool, _exposed: bool) -> finaliseCap_ret
fc_ret
}
}
CapTag::CapThreadCap => {
cap_tag::cap_thread_cap => {
if _final {
let tcb = convert_to_mut_type_ref::<tcb_t>(cap.get_tcb_ptr());
#[cfg(feature = "ENABLE_SMP")]
Expand All @@ -214,12 +215,12 @@ pub fn finaliseCap(cap: &cap_t, _final: bool, _exposed: bool) -> finaliseCap_ret
return fc_ret;
}
}
CapTag::CapZombieCap => {
cap_tag::cap_zombie_cap => {
fc_ret.remainder = cap.clone();
fc_ret.cleanupInfo = cap_t::new_null_cap();
return fc_ret;
}
CapTag::CapIrqHandlerCap => {
cap_tag::cap_irq_handler_cap => {
if _final {
let irq = cap.get_irq_handler();
deletingIRQHandler(irq);
Expand All @@ -241,7 +242,7 @@ pub fn finaliseCap(cap: &cap_t, _final: bool, _exposed: bool) -> finaliseCap_ret

#[no_mangle]
pub fn post_cap_deletion(cap: &cap_t) {
if cap.get_cap_type() == CapTag::CapIrqHandlerCap {
if cap.get_cap_type() == cap_tag::cap_irq_handler_cap {
let irq = cap.get_irq_handler();
setIRQState(IRQState::IRQInactive, irq);
}
Expand Down
4 changes: 2 additions & 2 deletions kernel/src/interrupt/handler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use crate::interrupt::*;
use core::intrinsics::unlikely;
use log::debug;
use sel4_common::structures::exception_t;
use sel4_cspace::interface::CapTag;
use sel4_common::structures_gen::cap_tag;
use sel4_ipc::notification_t;
use sel4_task::{activateThread, schedule, timerTick};

Expand Down Expand Up @@ -42,7 +42,7 @@ pub fn handleInterrupt(irq: usize) {
debug!("IRQSignal");
let handler_slot = get_irq_handler_slot(irq);
let handler_cap = &handler_slot.cap;
if handler_cap.get_cap_type() == CapTag::CapNotificationCap
if handler_cap.get_cap_type() == cap_tag::cap_notification_cap
&& handler_cap.get_nf_can_send() != 0
{
let nf = convert_to_mut_type_ref::<notification_t>(handler_cap.get_nf_ptr());
Expand Down
14 changes: 8 additions & 6 deletions kernel/src/kernel/fastpath.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ use crate::{
};
use core::intrinsics::{likely, unlikely};
use sel4_common::arch::msgRegister;
use sel4_common::structures_gen::cap_tag;
use sel4_common::{
fault::*,
message_info::*,
Expand All @@ -27,7 +28,7 @@ pub fn lookup_fp(_cap: &cap_t, cptr: usize) -> cap_t {
let mut capGuard: usize;
let mut radix: usize;
let mut slot: *mut cte_t;
if unlikely(!(cap.get_cap_type() == CapTag::CapCNodeCap)) {
if unlikely(!(cap.get_cap_type() == cap_tag::cap_cnode_cap)) {
return cap_t::new_null_cap();
}
loop {
Expand All @@ -44,7 +45,7 @@ pub fn lookup_fp(_cap: &cap_t, cptr: usize) -> cap_t {
cap = unsafe { (*slot).cap };
bits += guardBits + radixBits;

if likely(!(bits < wordBits && cap.get_cap_type() == CapTag::CapCNodeCap)) {
if likely(!(bits < wordBits && cap.get_cap_type() == cap_tag::cap_cnode_cap)) {
break;
}
}
Expand Down Expand Up @@ -102,7 +103,7 @@ pub fn mdb_node_ptr_mset_mdbNext_mdbRevocable_mdbFirstBadged(
#[no_mangle]
pub fn isValidVTableRoot_fp(cap: &cap_t) -> bool {
// cap_capType_equals(cap, cap_page_table_cap) && cap.get_pt_is_mapped() != 0
cap.get_cap_type() == CapTag::CapPageTableCap && cap.get_pt_is_mapped() != 0
cap.get_cap_type() == cap_tag::cap_page_table_cap && cap.get_pt_is_mapped() != 0
}

#[inline]
Expand Down Expand Up @@ -201,7 +202,7 @@ pub fn fastpath_call(cptr: usize, msgInfo: usize) {
}
let ep_cap = lookup_fp(&current.get_cspace(tcbCTable).cap, cptr);
if unlikely(
!(ep_cap.get_cap_type() == CapTag::CapEndpointCap) || (ep_cap.get_ep_can_send() == 0),
!(ep_cap.get_cap_type() == cap_tag::cap_endpoint_cap) || (ep_cap.get_ep_can_send() == 0),
) {
slowpath(SysCall as usize);
}
Expand Down Expand Up @@ -280,7 +281,8 @@ pub fn fastpath_reply_recv(cptr: usize, msgInfo: usize) {

let ep_cap = lookup_fp(&current.get_cspace(tcbCTable).cap, cptr);

if unlikely(ep_cap.get_cap_type() != CapTag::CapEndpointCap || ep_cap.get_ep_can_send() == 0) {
if unlikely(ep_cap.get_cap_type() != cap_tag::cap_endpoint_cap || ep_cap.get_ep_can_send() == 0)
{
slowpath(SysReplyRecv as usize);
}

Expand All @@ -300,7 +302,7 @@ pub fn fastpath_reply_recv(cptr: usize, msgInfo: usize) {
let caller_slot = current.get_cspace_mut_ref(tcbCaller);
let caller_cap = &caller_slot.cap;

if unlikely(caller_cap.get_cap_type() != CapTag::CapReplyCap) {
if unlikely(caller_cap.get_cap_type() != cap_tag::cap_reply_cap) {
slowpath(SysReplyRecv as usize);
}

Expand Down
20 changes: 0 additions & 20 deletions kernel/src/structures.rs
Original file line number Diff line number Diff line change
Expand Up @@ -94,26 +94,6 @@ pub struct rootserver_mem_t {
pub paging: region_t,
}

#[derive(PartialEq)]
#[allow(dead_code)]
pub enum cap_tag_t {
cap_null_cap = 0,
cap_untyped_cap = 2,
cap_endpoint_cap = 4,
cap_notification_cap = 6,
cap_reply_cap = 8,
cap_cnode_cap = 10,
cap_thread_cap = 12,
cap_irq_control_cap = 14,
cap_irq_handler_cap = 16,
cap_zombie_cap = 18,
cap_domain_cap = 20,
cap_frame_cap = 1,
cap_page_table_cap = 3,
cap_asid_control_cap = 11,
cap_asid_pool_cap = 13,
}

#[repr(C)]
#[derive(Debug, PartialEq, Clone, Copy)]
pub struct create_frames_of_region_ret_t {
Expand Down
Loading

0 comments on commit 0f323af

Please sign in to comment.