diff --git a/doc/apic/constant.APIC_SPURIOUS_INTERRUPT_VECTOR.html b/doc/apic/constant.APIC_SPURIOUS_INTERRUPT_VECTOR.html index a599c34521..31a8b31102 100644 --- a/doc/apic/constant.APIC_SPURIOUS_INTERRUPT_VECTOR.html +++ b/doc/apic/constant.APIC_SPURIOUS_INTERRUPT_VECTOR.html @@ -1,5 +1,5 @@ APIC_SPURIOUS_INTERRUPT_VECTOR in apic - Rust

Constant apic::APIC_SPURIOUS_INTERRUPT_VECTOR[][src]

pub const APIC_SPURIOUS_INTERRUPT_VECTOR: u32 = 0xFF;
+ Change settings

Constant apic::APIC_SPURIOUS_INTERRUPT_VECTOR[][src]

pub const APIC_SPURIOUS_INTERRUPT_VECTOR: u32 = 0xFF;
\ No newline at end of file diff --git a/doc/apic/enum.InterruptChip.html b/doc/apic/enum.InterruptChip.html index c7401da245..562de12fb3 100644 --- a/doc/apic/enum.InterruptChip.html +++ b/doc/apic/enum.InterruptChip.html @@ -1,19 +1,20 @@ InterruptChip in apic - Rust

Enum apic::InterruptChip[][src]

pub enum InterruptChip {
+                Change settings

Enum apic::InterruptChip[][src]

#[repr(u8)]
+pub enum InterruptChip {
     APIC,
     X2APIC,
     PIC,
 }

Variants

-
APIC
X2APIC
PIC

Trait Implementations

impl Clone for InterruptChip[src]

fn clone(&self) -> InterruptChip[src]

Returns a copy of the value. Read more

+
APIC
X2APIC
PIC

Trait Implementations

impl Clone for InterruptChip[src]

fn clone(&self) -> InterruptChip[src]

Returns a copy of the value. Read more

fn clone_from(&mut self, source: &Self)1.0.0[src]

Performs copy-assignment from source. Read more

-

impl Debug for InterruptChip[src]

fn fmt(&self, f: &mut Formatter<'_>) -> Result[src]

Formats the value using the given formatter. Read more

-

impl PartialEq<InterruptChip> for InterruptChip[src]

fn eq(&self, other: &InterruptChip) -> bool[src]

This method tests for self and other values to be equal, and is used +

impl Debug for InterruptChip[src]

fn fmt(&self, f: &mut Formatter<'_>) -> Result[src]

Formats the value using the given formatter. Read more

+

impl PartialEq<InterruptChip> for InterruptChip[src]

fn eq(&self, other: &InterruptChip) -> bool[src]

This method tests for self and other values to be equal, and is used by ==. Read more

#[must_use]
fn ne(&self, other: &Rhs) -> bool
1.0.0[src]

This method tests for !=.

-

impl Copy for InterruptChip[src]

impl StructuralPartialEq for InterruptChip[src]

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

+

impl Copy for InterruptChip[src]

impl StructuralPartialEq for InterruptChip[src]

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

pub fn borrow(&self) -> &T[src]

Immutably borrows from an owned value. Read more

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

pub fn borrow_mut(&mut self) -> &mut T[src]

Mutably borrows from an owned value. Read more

impl<T> From<T> for T[src]

pub fn from(t: T) -> T[src]

Performs the conversion.

diff --git a/doc/apic/enum.LapicIpiDestination.html b/doc/apic/enum.LapicIpiDestination.html index de678524eb..eaae65e8c7 100644 --- a/doc/apic/enum.LapicIpiDestination.html +++ b/doc/apic/enum.LapicIpiDestination.html @@ -1,7 +1,7 @@ LapicIpiDestination in apic - Rust

Enum apic::LapicIpiDestination[][src]

pub enum LapicIpiDestination {
+                Change settings

Enum apic::LapicIpiDestination[][src]

pub enum LapicIpiDestination {
     One(u8),
     Me,
     All,
@@ -14,7 +14,7 @@
 
Me

Send IPI to my own (the current) APIC

All

Send IPI to all APICs, including myself

AllButMe

Send IPI to all APICs except for myself

-

Implementations

impl LapicIpiDestination[src]

pub fn as_icr_value(&self) -> u64[src]

Convert the enum to a bitmask value to be used in the interrupt command register

+

Implementations

impl LapicIpiDestination[src]

pub fn as_icr_value(&self) -> u64[src]

Convert the enum to a bitmask value to be used in the interrupt command register

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

pub fn borrow(&self) -> &T[src]

Immutably borrows from an owned value. Read more

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

pub fn borrow_mut(&mut self) -> &mut T[src]

Mutably borrows from an owned value. Read more

diff --git a/doc/apic/fn.core_count.html b/doc/apic/fn.core_count.html index 5ac4907ba2..ba1e5fef2d 100644 --- a/doc/apic/fn.core_count.html +++ b/doc/apic/fn.core_count.html @@ -1,6 +1,6 @@ core_count in apic - Rust

Function apic::core_count[][src]

pub fn core_count() -> usize
Expand description

Returns the number of processor core (local APICs) that exist on this system.

+ Change settings

Function apic::core_count[][src]

pub fn core_count() -> usize
Expand description

Returns the number of processor core (local APICs) that exist on this system.

\ No newline at end of file diff --git a/doc/apic/fn.get_bsp_id.html b/doc/apic/fn.get_bsp_id.html index bf20cd665b..0a9628f927 100644 --- a/doc/apic/fn.get_bsp_id.html +++ b/doc/apic/fn.get_bsp_id.html @@ -1,5 +1,5 @@ get_bsp_id in apic - Rust

Function apic::get_bsp_id[][src]

pub fn get_bsp_id() -> Option<u8>
+ Change settings

Function apic::get_bsp_id[][src]

pub fn get_bsp_id() -> Option<u8>
\ No newline at end of file diff --git a/doc/apic/fn.get_lapics.html b/doc/apic/fn.get_lapics.html index 1de7b47f48..72127e6a4d 100644 --- a/doc/apic/fn.get_lapics.html +++ b/doc/apic/fn.get_lapics.html @@ -1,6 +1,6 @@ get_lapics in apic - Rust

Function apic::get_lapics[][src]

pub fn get_lapics() -> &'static AtomicMap<u8, RwLockIrqSafe<LocalApic>>
Expand description

Returns a reference to the list of LocalApics, one per processor core

+ Change settings

Function apic::get_lapics[][src]

pub fn get_lapics() -> &'static AtomicMap<u8, RwLockIrqSafe<LocalApic>>
Expand description

Returns a reference to the list of LocalApics, one per processor core

\ No newline at end of file diff --git a/doc/apic/fn.get_my_apic.html b/doc/apic/fn.get_my_apic.html index 90148179df..0cd2ac3565 100644 --- a/doc/apic/fn.get_my_apic.html +++ b/doc/apic/fn.get_my_apic.html @@ -1,6 +1,6 @@ get_my_apic in apic - Rust

Function apic::get_my_apic[][src]

pub fn get_my_apic() -> Option<&'static RwLockIrqSafe<LocalApic>>
Expand description

Returns a reference to the LocalApic for the currently executing processsor core.

+ Change settings

Function apic::get_my_apic[][src]

pub fn get_my_apic() -> Option<&'static RwLockIrqSafe<LocalApic>>
Expand description

Returns a reference to the LocalApic for the currently executing processsor core.

\ No newline at end of file diff --git a/doc/apic/fn.get_my_apic_id.html b/doc/apic/fn.get_my_apic_id.html index 09ed86416b..5d31384f2b 100644 --- a/doc/apic/fn.get_my_apic_id.html +++ b/doc/apic/fn.get_my_apic_id.html @@ -1,6 +1,6 @@ get_my_apic_id in apic - Rust

Function apic::get_my_apic_id[][src]

pub fn get_my_apic_id() -> u8
Expand description

Returns the APIC ID of the currently executing processor core.

+ Change settings

Function apic::get_my_apic_id[][src]

pub fn get_my_apic_id() -> u8
Expand description

Returns the APIC ID of the currently executing processor core.

\ No newline at end of file diff --git a/doc/apic/fn.has_x2apic.html b/doc/apic/fn.has_x2apic.html index 4cb63e5483..7b81aea876 100644 --- a/doc/apic/fn.has_x2apic.html +++ b/doc/apic/fn.has_x2apic.html @@ -1,6 +1,6 @@ has_x2apic in apic - Rust

Function apic::has_x2apic[][src]

pub fn has_x2apic() -> bool
Expand description

Returns true if the machine has support for x2apic

+ Change settings

Function apic::has_x2apic[][src]

pub fn has_x2apic() -> bool
Expand description

Returns true if the machine has support for x2apic

\ No newline at end of file diff --git a/doc/apic/fn.init.html b/doc/apic/fn.init.html index cb916f8c8a..4f29cc8eed 100644 --- a/doc/apic/fn.init.html +++ b/doc/apic/fn.init.html @@ -1,7 +1,7 @@ init in apic - Rust

Function apic::init[][src]

pub fn init(_page_table: &mut PageTable) -> Result<(), &'static str>
Expand description

Initially maps the base APIC MMIO register frames so that we can know which LAPIC (core) we are. + Change settings

Function apic::init[][src]

pub fn init(_page_table: &mut PageTable) -> Result<(), &'static str>
Expand description

Initially maps the base APIC MMIO register frames so that we can know which LAPIC (core) we are. This only does something for apic/xapic systems, it does nothing for x2apic systems, as required.

\ No newline at end of file diff --git a/doc/apic/fn.is_bsp.html b/doc/apic/fn.is_bsp.html index 9825212698..ba267c3117 100644 --- a/doc/apic/fn.is_bsp.html +++ b/doc/apic/fn.is_bsp.html @@ -1,7 +1,7 @@ is_bsp in apic - Rust

Function apic::is_bsp[][src]

pub fn is_bsp() -> bool
Expand description

Returns true if the currently executing processor core is the bootstrap processor, + Change settings

Function apic::is_bsp[][src]

pub fn is_bsp() -> bool
Expand description

Returns true if the currently executing processor core is the bootstrap processor, i.e., the first procesor to run

\ No newline at end of file diff --git a/doc/apic/index.html b/doc/apic/index.html index fb6cefb1f4..0743ca4ef2 100644 --- a/doc/apic/index.html +++ b/doc/apic/index.html @@ -1,7 +1,7 @@ apic - Rust

Crate apic[][src]

Structs

+ Change settings

Crate apic[][src]

Structs

ApicRegisters

A structure that offers access to APIC/xAPIC through its I/O registers.

LocalApic

This structure represents a single APIC in the system, there is one per core.

RegisterArray

Enums

diff --git a/doc/apic/static.INTERRUPT_CHIP.html b/doc/apic/static.INTERRUPT_CHIP.html index c0e00d73d5..0109763c73 100644 --- a/doc/apic/static.INTERRUPT_CHIP.html +++ b/doc/apic/static.INTERRUPT_CHIP.html @@ -1,7 +1,7 @@ INTERRUPT_CHIP in apic - Rust

Static apic::INTERRUPT_CHIP[][src]

pub static INTERRUPT_CHIP: Atomic<InterruptChip>
Expand description

The interrupt chip that is currently configured on this machine. + Change settings

Static apic::INTERRUPT_CHIP[][src]

pub static INTERRUPT_CHIP: AtomicCell<InterruptChip>
Expand description

The interrupt chip that is currently configured on this machine. The default is InterruptChip::PIC, but the typical case is APIC or X2APIC, which will be set once those chips have been initialized.

diff --git a/doc/apic/struct.ApicRegisters.html b/doc/apic/struct.ApicRegisters.html index 48cef2c4b5..e4faf1c819 100644 --- a/doc/apic/struct.ApicRegisters.html +++ b/doc/apic/struct.ApicRegisters.html @@ -1,7 +1,7 @@ ApicRegisters in apic - Rust

Struct apic::ApicRegisters[][src]

#[repr(C)]
pub struct ApicRegisters {
Show fields + Change settings

Struct apic::ApicRegisters[][src]

#[repr(C)]
pub struct ApicRegisters {
Show fields pub lapic_id: Volatile<u32>, pub lapic_version: ReadOnly<u32>, pub task_priority: Volatile<u32>, @@ -35,7 +35,7 @@

Fields

lapic_id: Volatile<u32>

This Lapic’s ID. Some systems allow setting the ID, but it is typically read-only. Only the top 8 bits are relevant, so bit shift it to the right by 24 bits to get the actual ID.

-
lapic_version: ReadOnly<u32>task_priority: Volatile<u32>arbitration_priority: ReadOnly<u32>processor_priority: ReadOnly<u32>eoi: WriteOnly<u32>remote_read: ReadOnly<u32>logical_destination: Volatile<u32>destination_format: Volatile<u32>spurious_interrupt_vector: Volatile<u32>in_service_registers: RegisterArraytrigger_mode_registers: RegisterArrayinterrupt_request_registers: RegisterArrayerror_status: ReadOnly<u32>lvt_cmci: Volatile<u32>interrupt_command_low: Volatile<u32>interrupt_command_high: Volatile<u32>lvt_timer: Volatile<u32>lvt_thermal: Volatile<u32>lvt_perf_monitor: Volatile<u32>lvt_lint0: Volatile<u32>lvt_lint1: Volatile<u32>lvt_error: Volatile<u32>timer_initial_count: Volatile<u32>timer_current_count: ReadOnly<u32>timer_divide: Volatile<u32>

Trait Implementations

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

+
lapic_version: ReadOnly<u32>task_priority: Volatile<u32>arbitration_priority: ReadOnly<u32>processor_priority: ReadOnly<u32>eoi: WriteOnly<u32>remote_read: ReadOnly<u32>logical_destination: Volatile<u32>destination_format: Volatile<u32>spurious_interrupt_vector: Volatile<u32>in_service_registers: RegisterArraytrigger_mode_registers: RegisterArrayinterrupt_request_registers: RegisterArrayerror_status: ReadOnly<u32>lvt_cmci: Volatile<u32>interrupt_command_low: Volatile<u32>interrupt_command_high: Volatile<u32>lvt_timer: Volatile<u32>lvt_thermal: Volatile<u32>lvt_perf_monitor: Volatile<u32>lvt_lint0: Volatile<u32>lvt_lint1: Volatile<u32>lvt_error: Volatile<u32>timer_initial_count: Volatile<u32>timer_current_count: ReadOnly<u32>timer_divide: Volatile<u32>

Trait Implementations

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

pub fn borrow(&self) -> &T[src]

Immutably borrows from an owned value. Read more

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

pub fn borrow_mut(&mut self) -> &mut T[src]

Mutably borrows from an owned value. Read more

impl<T> From<T> for T[src]

pub fn from(t: T) -> T[src]

Performs the conversion.

diff --git a/doc/apic/struct.LocalApic.html b/doc/apic/struct.LocalApic.html index 455885c475..9bee958f2f 100644 --- a/doc/apic/struct.LocalApic.html +++ b/doc/apic/struct.LocalApic.html @@ -1,7 +1,7 @@ LocalApic in apic - Rust

Struct apic::LocalApic[][src]

pub struct LocalApic {
+                Change settings

Struct apic::LocalApic[][src]

pub struct LocalApic {
     pub regs: Option<BoxRefMut<MappedPages, ApicRegisters>>,
     pub processor: u8,
     pub apic_id: u8,
@@ -12,20 +12,20 @@
 
processor: u8

The processor id of this APIC.

apic_id: u8

The APIC system id of this APIC.

is_bsp: bool

Whether this LocalApic is the bootstrap processor (the first processor to boot up).

-

Implementations

impl LocalApic[src]

pub fn new(
    page_table: &mut PageTable,
    processor: u8,
    apic_id: u8,
    is_bsp: bool,
    nmi_lint: u8,
    nmi_flags: u16
) -> Result<LocalApic, &'static str>
[src]

This MUST be invoked from the AP core itself when it is booting up. +

Implementations

impl LocalApic[src]

pub fn new(
    page_table: &mut PageTable,
    processor: u8,
    apic_id: u8,
    is_bsp: bool,
    nmi_lint: u8,
    nmi_flags: u16
) -> Result<LocalApic, &'static str>
[src]

This MUST be invoked from the AP core itself when it is booting up. The BSP cannot invoke this for other APs (it can only invoke it for itself).

-

pub fn id(&self) -> u8[src]

pub fn version(&self) -> u32[src]

pub fn error(&self) -> u32[src]

pub fn clear_error(&mut self)[src]

pub fn icr(&self) -> u64[src]

pub fn set_icr(&mut self, value: u64)[src]

pub fn send_ipi(&mut self, irq: u8, destination: LapicIpiDestination)[src]

Send an IPI to the cores specified by the given destination

-

pub fn send_nmi_ipi(&mut self, destination: LapicIpiDestination)[src]

Send a NMI IPI to the cores specified by the given destination

-

pub fn eoi(&mut self)[src]

pub fn set_ldr(&mut self, value: u32)[src]

pub fn set_nmi(&mut self, lint: u8, flags: u16) -> Result<(), &'static str>[src]

Set the NonMaskableInterrupt redirect for this LocalApic. +

pub fn id(&self) -> u8[src]

pub fn version(&self) -> u32[src]

pub fn error(&self) -> u32[src]

pub fn clear_error(&mut self)[src]

pub fn icr(&self) -> u64[src]

pub fn set_icr(&mut self, value: u64)[src]

pub fn send_ipi(&mut self, irq: u8, destination: LapicIpiDestination)[src]

Send an IPI to the cores specified by the given destination

+

pub fn send_nmi_ipi(&mut self, destination: LapicIpiDestination)[src]

Send a NMI IPI to the cores specified by the given destination

+

pub fn eoi(&mut self)[src]

pub fn set_ldr(&mut self, value: u32)[src]

pub fn set_nmi(&mut self, lint: u8, flags: u16) -> Result<(), &'static str>[src]

Set the NonMaskableInterrupt redirect for this LocalApic. Argument lint can be either 0 or 1, since each local APIC has two LVT LINTs (Local Vector Table Local INTerrupts)

-

pub fn get_isr(&self) -> [u32; 8][src]

Returns the values of the 8 in-service registers for this APIC, +

pub fn get_isr(&self) -> [u32; 8][src]

Returns the values of the 8 in-service registers for this APIC, which is a series of bitmasks that shows which interrupt lines are currently being serviced.

-

pub fn get_irr(&self) -> [u32; 8][src]

Returns the values of the 8 request registers for this APIC, +

pub fn get_irr(&self) -> [u32; 8][src]

Returns the values of the 8 request registers for this APIC, which is a series of bitmasks that shows which interrupt lines are currently raised, but not yet being serviced.

-

pub fn clear_pmi_mask(&mut self)[src]

Clears the interrupt mask bit in the apic performance monitor register.

-

Trait Implementations

impl Debug for LocalApic[src]

fn fmt(&self, f: &mut Formatter<'_>) -> Result[src]

Formats the value using the given formatter. Read more

+

pub fn clear_pmi_mask(&mut self)[src]

Clears the interrupt mask bit in the apic performance monitor register.

+

Trait Implementations

impl Debug for LocalApic[src]

fn fmt(&self, f: &mut Formatter<'_>) -> Result[src]

Formats the value using the given formatter. Read more

Auto Trait Implementations

impl Send for LocalApic

impl Sync for LocalApic

impl Unpin for LocalApic

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

pub fn borrow(&self) -> &T[src]

Immutably borrows from an owned value. Read more

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

pub fn borrow_mut(&mut self) -> &mut T[src]

Mutably borrows from an owned value. Read more

diff --git a/doc/apic/struct.RegisterArray.html b/doc/apic/struct.RegisterArray.html index 1ecb33ac88..4f6e584c1c 100644 --- a/doc/apic/struct.RegisterArray.html +++ b/doc/apic/struct.RegisterArray.html @@ -1,7 +1,7 @@ RegisterArray in apic - Rust

Struct apic::RegisterArray[][src]

#[repr(C)]
pub struct RegisterArray { /* fields omitted */ }

Trait Implementations

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

+ Change settings

Struct apic::RegisterArray[][src]

#[repr(C)]
pub struct RegisterArray { /* fields omitted */ }

Trait Implementations

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

pub fn borrow(&self) -> &T[src]

Immutably borrows from an owned value. Read more

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

pub fn borrow_mut(&mut self) -> &mut T[src]

Mutably borrows from an owned value. Read more

impl<T> From<T> for T[src]

pub fn from(t: T) -> T[src]

Performs the conversion.

diff --git a/doc/async_channel/index.html b/doc/async_channel/index.html index dd81b9708b..babe468ab5 100644 --- a/doc/async_channel/index.html +++ b/doc/async_channel/index.html @@ -1,7 +1,7 @@ async_channel - Rust

Crate async_channel[][src]

Expand description

An asynchronous channel for Inter-Task Communication (ITC) with an internal queue for buffering messages.

+ Change settings

Crate async_channel[][src]

Expand description

An asynchronous channel for Inter-Task Communication (ITC) with an internal queue for buffering messages.

This crate offers an asynchronous channel that allows multiple tasks to exchange messages through the use of a bounded-capacity intermediate buffer. Unlike the rendezvous channel, the sender and receiver do not need to rendezvous to send or receive data.

diff --git a/doc/async_channel/struct.Receiver.html b/doc/async_channel/struct.Receiver.html index d3d33e5352..ba58eb162b 100644 --- a/doc/async_channel/struct.Receiver.html +++ b/doc/async_channel/struct.Receiver.html @@ -1,18 +1,18 @@ Receiver in async_channel - Rust

Struct async_channel::Receiver[][src]

pub struct Receiver<T: Send> { /* fields omitted */ }
Expand description

The receiver side of a channel.

-

Implementations

impl<T: Send> Receiver<T>[src]

pub fn receive(&self) -> Result<T, ChannelError>[src]

Receive a message, blocking until a message is available in the buffer.

+ Change settings

Struct async_channel::Receiver[][src]

pub struct Receiver<T: Send> { /* fields omitted */ }
Expand description

The receiver side of a channel.

+

Implementations

impl<T: Send> Receiver<T>[src]

pub fn receive(&self) -> Result<T, ChannelError>[src]

Receive a message, blocking until a message is available in the buffer.

Returns the message if it was received properly, otherwise returns an error of ChannelError type.

-

pub fn try_receive(&self) -> Result<T, ChannelError>[src]

Tries to receive a message, only succeeding if a message is already available in the buffer.

+

pub fn try_receive(&self) -> Result<T, ChannelError>[src]

Tries to receive a message, only succeeding if a message is already available in the buffer.

If receive succeeds returns Some(Ok(T)). If an endpoint is disconnected returns Some(Err(ChannelStatus::Disconnected)). If no such message exists, it returns None without blocking

-

pub fn is_disconnected(&self) -> bool[src]

Returns true if the channel is disconnected.

-

Trait Implementations

impl<T: Clone + Send> Clone for Receiver<T>[src]

fn clone(&self) -> Receiver<T>[src]

Returns a copy of the value. Read more

+

pub fn is_disconnected(&self) -> bool[src]

Returns true if the channel is disconnected.

+

Trait Implementations

impl<T: Clone + Send> Clone for Receiver<T>[src]

fn clone(&self) -> Receiver<T>[src]

Returns a copy of the value. Read more

fn clone_from(&mut self, source: &Self)1.0.0[src]

Performs copy-assignment from source. Read more

-

impl<T: Send> Drop for Receiver<T>[src]

Drop implementation marks the channel state and notifys the Sender

-

fn drop(&mut self)[src]

Executes the destructor for this type. Read more

+

impl<T: Send> Drop for Receiver<T>[src]

Drop implementation marks the channel state and notifys the Sender

+

fn drop(&mut self)[src]

Executes the destructor for this type. Read more

Auto Trait Implementations

impl<T> Send for Receiver<T> where
    T: Sync

impl<T> Sync for Receiver<T> where
    T: Sync

impl<T> Unpin for Receiver<T>

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

pub fn borrow(&self) -> &T[src]

Immutably borrows from an owned value. Read more

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

pub fn borrow_mut(&mut self) -> &mut T[src]

Mutably borrows from an owned value. Read more

diff --git a/doc/async_channel/struct.Sender.html b/doc/async_channel/struct.Sender.html index 74c4411b59..931e154a1e 100644 --- a/doc/async_channel/struct.Sender.html +++ b/doc/async_channel/struct.Sender.html @@ -1,17 +1,17 @@ Sender in async_channel - Rust

Struct async_channel::Sender[][src]

pub struct Sender<T: Send> { /* fields omitted */ }
Expand description

The sender (transmit) side of a channel.

-

Implementations

impl<T: Send> Sender<T>[src]

pub fn send(&self, msg: T) -> Result<(), ChannelError>[src]

Send a message, blocking until space in the channel’s buffer is available.

+ Change settings

Struct async_channel::Sender[][src]

pub struct Sender<T: Send> { /* fields omitted */ }
Expand description

The sender (transmit) side of a channel.

+

Implementations

impl<T: Send> Sender<T>[src]

pub fn send(&self, msg: T) -> Result<(), ChannelError>[src]

Send a message, blocking until space in the channel’s buffer is available.

Returns Ok(()) if the message was sent successfully, otherwise returns an error of ChannelError type.

-

pub fn try_send(&self, msg: T) -> Result<(), (T, ChannelError)>[src]

Tries to send the message, only succeeding if buffer space is available.

+

pub fn try_send(&self, msg: T) -> Result<(), (T, ChannelError)>[src]

Tries to send the message, only succeeding if buffer space is available.

If no buffer space is available, it returns the msg with ChannelError back to the caller without blocking.

-

pub fn is_disconnected(&self) -> bool[src]

Returns true if the channel is disconnected.

-

Trait Implementations

impl<T: Clone + Send> Clone for Sender<T>[src]

fn clone(&self) -> Sender<T>[src]

Returns a copy of the value. Read more

+

pub fn is_disconnected(&self) -> bool[src]

Returns true if the channel is disconnected.

+

Trait Implementations

impl<T: Clone + Send> Clone for Sender<T>[src]

fn clone(&self) -> Sender<T>[src]

Returns a copy of the value. Read more

fn clone_from(&mut self, source: &Self)1.0.0[src]

Performs copy-assignment from source. Read more

-

impl<T: Send> Drop for Sender<T>[src]

Drop implementation marks the channel state and notifys the Receiver

-

fn drop(&mut self)[src]

Executes the destructor for this type. Read more

+

impl<T: Send> Drop for Sender<T>[src]

Drop implementation marks the channel state and notifys the Receiver

+

fn drop(&mut self)[src]

Executes the destructor for this type. Read more

Auto Trait Implementations

impl<T> Send for Sender<T> where
    T: Sync

impl<T> Sync for Sender<T> where
    T: Sync

impl<T> Unpin for Sender<T>

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

pub fn borrow(&self) -> &T[src]

Immutably borrows from an owned value. Read more

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

pub fn borrow_mut(&mut self) -> &mut T[src]

Mutably borrows from an owned value. Read more

diff --git a/doc/exceptions_full/fn.bound_range_exceeded_handler.html b/doc/exceptions_full/fn.bound_range_exceeded_handler.html index 4ff9fa8c90..bd1ce65bc3 100644 --- a/doc/exceptions_full/fn.bound_range_exceeded_handler.html +++ b/doc/exceptions_full/fn.bound_range_exceeded_handler.html @@ -1,5 +1,5 @@ bound_range_exceeded_handler in exceptions_full - Rust

Function exceptions_full::bound_range_exceeded_handler[][src]

pub extern "x86-interrupt" fn bound_range_exceeded_handler(
    stack_frame: &mut ExceptionStackFrame
)
+ Change settings

Function exceptions_full::bound_range_exceeded_handler[][src]

pub extern "x86-interrupt" fn bound_range_exceeded_handler(
    stack_frame: &mut ExceptionStackFrame
)
\ No newline at end of file diff --git a/doc/exceptions_full/fn.breakpoint_handler.html b/doc/exceptions_full/fn.breakpoint_handler.html index 7e2c80da00..458e5e244d 100644 --- a/doc/exceptions_full/fn.breakpoint_handler.html +++ b/doc/exceptions_full/fn.breakpoint_handler.html @@ -1,6 +1,6 @@ breakpoint_handler in exceptions_full - Rust

Function exceptions_full::breakpoint_handler[][src]

pub extern "x86-interrupt" fn breakpoint_handler(
    stack_frame: &mut ExceptionStackFrame
)
Expand description

exception 0x03

+ Change settings

Function exceptions_full::breakpoint_handler[][src]

pub extern "x86-interrupt" fn breakpoint_handler(
    stack_frame: &mut ExceptionStackFrame
)
Expand description

exception 0x03

\ No newline at end of file diff --git a/doc/exceptions_full/fn.debug_handler.html b/doc/exceptions_full/fn.debug_handler.html index 04c55f2f43..7e59f82c75 100644 --- a/doc/exceptions_full/fn.debug_handler.html +++ b/doc/exceptions_full/fn.debug_handler.html @@ -1,6 +1,6 @@ debug_handler in exceptions_full - Rust

Function exceptions_full::debug_handler[][src]

pub extern "x86-interrupt" fn debug_handler(
    stack_frame: &mut ExceptionStackFrame
)
Expand description

exception 0x01

+ Change settings

Function exceptions_full::debug_handler[][src]

pub extern "x86-interrupt" fn debug_handler(
    stack_frame: &mut ExceptionStackFrame
)
Expand description

exception 0x01

\ No newline at end of file diff --git a/doc/exceptions_full/fn.device_not_available_handler.html b/doc/exceptions_full/fn.device_not_available_handler.html index 23c1f8e044..8c35041613 100644 --- a/doc/exceptions_full/fn.device_not_available_handler.html +++ b/doc/exceptions_full/fn.device_not_available_handler.html @@ -1,7 +1,7 @@ device_not_available_handler in exceptions_full - Rust

Function exceptions_full::device_not_available_handler[][src]

pub extern "x86-interrupt" fn device_not_available_handler(
    stack_frame: &mut ExceptionStackFrame
)
Expand description

exception 0x07

+ Change settings

Function exceptions_full::device_not_available_handler[][src]

pub extern "x86-interrupt" fn device_not_available_handler(
    stack_frame: &mut ExceptionStackFrame
)
Expand description

exception 0x07

For more information about “spurious interrupts”, see here.

diff --git a/doc/exceptions_full/fn.divide_by_zero_handler.html b/doc/exceptions_full/fn.divide_by_zero_handler.html index ec3eb59bfc..3f8c87a8d3 100644 --- a/doc/exceptions_full/fn.divide_by_zero_handler.html +++ b/doc/exceptions_full/fn.divide_by_zero_handler.html @@ -1,6 +1,6 @@ divide_by_zero_handler in exceptions_full - Rust

Function exceptions_full::divide_by_zero_handler[][src]

pub extern "x86-interrupt" fn divide_by_zero_handler(
    stack_frame: &mut ExceptionStackFrame
)
Expand description

exception 0x00

+ Change settings

Function exceptions_full::divide_by_zero_handler[][src]

pub extern "x86-interrupt" fn divide_by_zero_handler(
    stack_frame: &mut ExceptionStackFrame
)
Expand description

exception 0x00

\ No newline at end of file diff --git a/doc/exceptions_full/fn.double_fault_handler.html b/doc/exceptions_full/fn.double_fault_handler.html index 140db32fe4..775e1fd442 100644 --- a/doc/exceptions_full/fn.double_fault_handler.html +++ b/doc/exceptions_full/fn.double_fault_handler.html @@ -1,6 +1,6 @@ double_fault_handler in exceptions_full - Rust

Function exceptions_full::double_fault_handler[][src]

pub extern "x86-interrupt" fn double_fault_handler(
    stack_frame: &mut ExceptionStackFrame,
    error_code: u64
)
Expand description

exception 0x08

+ Change settings

Function exceptions_full::double_fault_handler[][src]

pub extern "x86-interrupt" fn double_fault_handler(
    stack_frame: &mut ExceptionStackFrame,
    error_code: u64
)
Expand description

exception 0x08

\ No newline at end of file diff --git a/doc/exceptions_full/fn.general_protection_fault_handler.html b/doc/exceptions_full/fn.general_protection_fault_handler.html index a6db403284..b64ab67871 100644 --- a/doc/exceptions_full/fn.general_protection_fault_handler.html +++ b/doc/exceptions_full/fn.general_protection_fault_handler.html @@ -1,6 +1,6 @@ general_protection_fault_handler in exceptions_full - Rust

Function exceptions_full::general_protection_fault_handler[][src]

pub extern "x86-interrupt" fn general_protection_fault_handler(
    stack_frame: &mut ExceptionStackFrame,
    error_code: u64
)
Expand description

exception 0x0d

+ Change settings

Function exceptions_full::general_protection_fault_handler[][src]

pub extern "x86-interrupt" fn general_protection_fault_handler(
    stack_frame: &mut ExceptionStackFrame,
    error_code: u64
)
Expand description

exception 0x0d

\ No newline at end of file diff --git a/doc/exceptions_full/fn.invalid_opcode_handler.html b/doc/exceptions_full/fn.invalid_opcode_handler.html index a298d5ff56..2f9cb1c4b0 100644 --- a/doc/exceptions_full/fn.invalid_opcode_handler.html +++ b/doc/exceptions_full/fn.invalid_opcode_handler.html @@ -1,6 +1,6 @@ invalid_opcode_handler in exceptions_full - Rust

Function exceptions_full::invalid_opcode_handler[][src]

pub extern "x86-interrupt" fn invalid_opcode_handler(
    stack_frame: &mut ExceptionStackFrame
)
Expand description

exception 0x06

+ Change settings

Function exceptions_full::invalid_opcode_handler[][src]

pub extern "x86-interrupt" fn invalid_opcode_handler(
    stack_frame: &mut ExceptionStackFrame
)
Expand description

exception 0x06

\ No newline at end of file diff --git a/doc/exceptions_full/fn.invalid_tss_handler.html b/doc/exceptions_full/fn.invalid_tss_handler.html index 9c19e01737..962afd91d0 100644 --- a/doc/exceptions_full/fn.invalid_tss_handler.html +++ b/doc/exceptions_full/fn.invalid_tss_handler.html @@ -1,6 +1,6 @@ invalid_tss_handler in exceptions_full - Rust

Function exceptions_full::invalid_tss_handler[][src]

pub extern "x86-interrupt" fn invalid_tss_handler(
    stack_frame: &mut ExceptionStackFrame,
    error_code: u64
)
Expand description

exception 0x0a

+ Change settings

Function exceptions_full::invalid_tss_handler[][src]

pub extern "x86-interrupt" fn invalid_tss_handler(
    stack_frame: &mut ExceptionStackFrame,
    error_code: u64
)
Expand description

exception 0x0a

\ No newline at end of file diff --git a/doc/exceptions_full/fn.overflow_handler.html b/doc/exceptions_full/fn.overflow_handler.html index 1411c03816..70aa56eaaf 100644 --- a/doc/exceptions_full/fn.overflow_handler.html +++ b/doc/exceptions_full/fn.overflow_handler.html @@ -1,6 +1,6 @@ overflow_handler in exceptions_full - Rust

Function exceptions_full::overflow_handler[][src]

pub extern "x86-interrupt" fn overflow_handler(
    stack_frame: &mut ExceptionStackFrame
)
Expand description

exception 0x04

+ Change settings

Function exceptions_full::overflow_handler[][src]

pub extern "x86-interrupt" fn overflow_handler(
    stack_frame: &mut ExceptionStackFrame
)
Expand description

exception 0x04

\ No newline at end of file diff --git a/doc/exceptions_full/fn.page_fault_handler.html b/doc/exceptions_full/fn.page_fault_handler.html index d7cd6a8b3a..cd8a751b96 100644 --- a/doc/exceptions_full/fn.page_fault_handler.html +++ b/doc/exceptions_full/fn.page_fault_handler.html @@ -1,6 +1,6 @@ page_fault_handler in exceptions_full - Rust

Function exceptions_full::page_fault_handler[][src]

pub extern "x86-interrupt" fn page_fault_handler(
    stack_frame: &mut ExceptionStackFrame,
    error_code: PageFaultErrorCode
)
Expand description

exception 0x0e

+ Change settings

Function exceptions_full::page_fault_handler[][src]

pub extern "x86-interrupt" fn page_fault_handler(
    stack_frame: &mut ExceptionStackFrame,
    error_code: PageFaultErrorCode
)
Expand description

exception 0x0e

\ No newline at end of file diff --git a/doc/exceptions_full/fn.segment_not_present_handler.html b/doc/exceptions_full/fn.segment_not_present_handler.html index 67c20ca5e4..098d0ea70d 100644 --- a/doc/exceptions_full/fn.segment_not_present_handler.html +++ b/doc/exceptions_full/fn.segment_not_present_handler.html @@ -1,6 +1,6 @@ segment_not_present_handler in exceptions_full - Rust

Function exceptions_full::segment_not_present_handler[][src]

pub extern "x86-interrupt" fn segment_not_present_handler(
    stack_frame: &mut ExceptionStackFrame,
    error_code: u64
)
Expand description

exception 0x0b

+ Change settings

Function exceptions_full::segment_not_present_handler[][src]

pub extern "x86-interrupt" fn segment_not_present_handler(
    stack_frame: &mut ExceptionStackFrame,
    error_code: u64
)
Expand description

exception 0x0b

\ No newline at end of file diff --git a/doc/exceptions_full/index.html b/doc/exceptions_full/index.html index ad7e4424c1..b8d5614146 100644 --- a/doc/exceptions_full/index.html +++ b/doc/exceptions_full/index.html @@ -1,7 +1,7 @@ exceptions_full - Rust

Crate exceptions_full[][src]

Expand description

Exception handlers that are task-aware, and will kill a task on an exception.

+ Change settings

Crate exceptions_full[][src]

Expand description

Exception handlers that are task-aware, and will kill a task on an exception.

Functions

bound_range_exceeded_handler
breakpoint_handler

exception 0x03

debug_handler

exception 0x01

diff --git a/doc/fault_crate_swap/fn.do_self_swap.html b/doc/fault_crate_swap/fn.do_self_swap.html index 94c77c76ef..502c935663 100644 --- a/doc/fault_crate_swap/fn.do_self_swap.html +++ b/doc/fault_crate_swap/fn.do_self_swap.html @@ -1,7 +1,7 @@ do_self_swap in fault_crate_swap - Rust

Function fault_crate_swap::do_self_swap[][src]

pub fn do_self_swap(
    crate_name: &str,
    curr_dir: &DirRef,
    override_namespace_crate_dir: Option<NamespaceDir>,
    state_transfer_functions: Vec<String>,
    namespace: Arc<CrateNamespace>,
    verbose_log: bool
) -> Result<SwapRanges, String>
Expand description

For swapping of a crate from the identical object file in the disk. + Change settings

Function fault_crate_swap::do_self_swap[][src]

pub fn do_self_swap(
    crate_name: &str,
    curr_dir: &DirRef,
    override_namespace_crate_dir: Option<NamespaceDir>,
    state_transfer_functions: Vec<String>,
    namespace: &Arc<CrateNamespace>,
    verbose_log: bool
) -> Result<SwapRanges, String>
Expand description

For swapping of a crate from the identical object file in the disk. Wraps arpund the crate_swap function by creating an appropriate Swap request. Arguments identical to the ones of crate_swap except namespace : Arc to the current namespace diff --git a/doc/fault_crate_swap/fn.get_crate_to_swap.html b/doc/fault_crate_swap/fn.get_crate_to_swap.html index 7a40f2614d..f82c28dc3d 100644 --- a/doc/fault_crate_swap/fn.get_crate_to_swap.html +++ b/doc/fault_crate_swap/fn.get_crate_to_swap.html @@ -1,7 +1,7 @@ get_crate_to_swap in fault_crate_swap - Rust

Function fault_crate_swap::get_crate_to_swap[][src]

pub fn get_crate_to_swap() -> Option<String>
Expand description

This function returns the name of the crate to replace if required. + Change settings

Function fault_crate_swap::get_crate_to_swap[][src]

pub fn get_crate_to_swap() -> Option<String>
Expand description

This function returns the name of the crate to replace if required. Returns none if no crate is needed to be replaced.

\ No newline at end of file diff --git a/doc/fault_crate_swap/fn.self_swap_handler.html b/doc/fault_crate_swap/fn.self_swap_handler.html index 0f6c9afd98..713fb9c784 100644 --- a/doc/fault_crate_swap/fn.self_swap_handler.html +++ b/doc/fault_crate_swap/fn.self_swap_handler.html @@ -1,7 +1,7 @@ self_swap_handler in fault_crate_swap - Rust

Function fault_crate_swap::self_swap_handler[][src]

pub fn self_swap_handler(crate_name: &str) -> Result<SwapRanges, String>
Expand description

This function calls the crate swapping routine for a corrupted crate (referred to as self swap) + Change settings

Function fault_crate_swap::self_swap_handler[][src]

pub fn self_swap_handler(crate_name: &str) -> Result<SwapRanges, String>
Expand description

This function calls the crate swapping routine for a corrupted crate (referred to as self swap) Swapping a crate with a new copy of object file includes following steps in high level

  1. Call generic crate swapping routine with self_swap = true
  2. diff --git a/doc/fault_crate_swap/index.html b/doc/fault_crate_swap/index.html index 5f1413fa62..0e24e4c984 100644 --- a/doc/fault_crate_swap/index.html +++ b/doc/fault_crate_swap/index.html @@ -1,7 +1,7 @@ fault_crate_swap - Rust

    Crate fault_crate_swap[][src]

    Expand description

    Defines support functions needed for swapping of corrupted crates to a different address for fault tolerance

    + Change settings

    Crate fault_crate_swap[][src]

    Expand description

    Defines support functions needed for swapping of corrupted crates to a different address for fault tolerance

    Structs

    SwapRanges

    A data structure to hold the ranges of memory used by the old crate and the new crate. The crate only maintains the values as virtual addresses and holds no references to any diff --git a/doc/fault_log/fn.get_the_most_recent_match.html b/doc/fault_log/fn.get_the_most_recent_match.html index 355976b24d..1b53be818f 100644 --- a/doc/fault_log/fn.get_the_most_recent_match.html +++ b/doc/fault_log/fn.get_the_most_recent_match.html @@ -1,7 +1,7 @@ get_the_most_recent_match in fault_log - Rust

    Function fault_log::get_the_most_recent_match[][src]

    pub fn get_the_most_recent_match(error_crate: &str) -> Option<FaultEntry>
    Expand description

    Provides the most recent entry in the log for given crate + Change settings

    Function fault_log::get_the_most_recent_match[][src]

    pub fn get_the_most_recent_match(error_crate: &str) -> Option<FaultEntry>
    Expand description

    Provides the most recent entry in the log for given crate Utility function for iterative crate replacement

    \ No newline at end of file diff --git a/doc/fault_log/fn.log_exception.html b/doc/fault_log/fn.log_exception.html index e2530df790..68ee990f88 100644 --- a/doc/fault_log/fn.log_exception.html +++ b/doc/fault_log/fn.log_exception.html @@ -1,7 +1,7 @@ log_exception in fault_log - Rust

    Function fault_log::log_exception[][src]

    pub fn log_exception(
        fault_type: u8,
        instruction_pointer: usize,
        error_code: Option<u64>,
        address_accessed: Option<usize>
    )
    Expand description

    Add a new exception instance to the fault log. + Change settings

    Function fault_log::log_exception[][src]

    pub fn log_exception(
        fault_type: u8,
        instruction_pointer: usize,
        error_code: Option<u64>,
        address_accessed: Option<usize>
    )
    Expand description

    Add a new exception instance to the fault log. Generally it will have fault_type and instruction_pointer. If error_code is provided with exception it will be send to the function as Some(error_code). diff --git a/doc/fault_log/fn.log_handled_fault.html b/doc/fault_log/fn.log_handled_fault.html index de3e17d920..f3e5560745 100644 --- a/doc/fault_log/fn.log_handled_fault.html +++ b/doc/fault_log/fn.log_handled_fault.html @@ -1,6 +1,6 @@ log_handled_fault in fault_log - Rust

    Function fault_log::log_handled_fault[][src]

    pub fn log_handled_fault(fe: FaultEntry)
    Expand description

    Add a FaultEntry to fault log.

    + Change settings

    Function fault_log::log_handled_fault[][src]

    pub fn log_handled_fault(fe: FaultEntry)
    Expand description

    Add a FaultEntry to fault log.

    \ No newline at end of file diff --git a/doc/fault_log/fn.log_panic_entry.html b/doc/fault_log/fn.log_panic_entry.html index ae3cc7b181..7c06b999bc 100644 --- a/doc/fault_log/fn.log_panic_entry.html +++ b/doc/fault_log/fn.log_panic_entry.html @@ -1,6 +1,6 @@ log_panic_entry in fault_log - Rust

    Function fault_log::log_panic_entry[][src]

    pub fn log_panic_entry(panic_info: &PanicInfo<'_>)
    Expand description

    Add a new panic instance to the fault log.

    + Change settings

    Function fault_log::log_panic_entry[][src]

    pub fn log_panic_entry(panic_info: &PanicInfo<'_>)
    Expand description

    Add a new panic instance to the fault log.

    \ No newline at end of file diff --git a/doc/fault_log/fn.print_fault_log.html b/doc/fault_log/fn.print_fault_log.html index de4fe956be..98b5ba37e4 100644 --- a/doc/fault_log/fn.print_fault_log.html +++ b/doc/fault_log/fn.print_fault_log.html @@ -1,6 +1,6 @@ print_fault_log in fault_log - Rust

    Function fault_log::print_fault_log[][src]

    pub fn print_fault_log()
    Expand description

    Prints the fault log

    + Change settings

    Function fault_log::print_fault_log[][src]

    pub fn print_fault_log()
    Expand description

    Prints the fault log

    \ No newline at end of file diff --git a/doc/fault_log/fn.remove_unhandled_exceptions.html b/doc/fault_log/fn.remove_unhandled_exceptions.html index bf4c89af6d..ede268df3e 100644 --- a/doc/fault_log/fn.remove_unhandled_exceptions.html +++ b/doc/fault_log/fn.remove_unhandled_exceptions.html @@ -1,7 +1,7 @@ remove_unhandled_exceptions in fault_log - Rust

    Function fault_log::remove_unhandled_exceptions[][src]

    pub fn remove_unhandled_exceptions() -> Vec<FaultEntry>
    Expand description

    Removes the unhandled faults from the fault log and returns. + Change settings

    Function fault_log::remove_unhandled_exceptions[][src]

    pub fn remove_unhandled_exceptions() -> Vec<FaultEntry>
    Expand description

    Removes the unhandled faults from the fault log and returns. Is useful when we update the recovery detail about unhandled exceptions.

    \ No newline at end of file diff --git a/doc/fault_log/index.html b/doc/fault_log/index.html index 3dbdfff35b..7465473a4d 100644 --- a/doc/fault_log/index.html +++ b/doc/fault_log/index.html @@ -1,7 +1,7 @@ fault_log - Rust

    Crate fault_log[][src]

    Expand description

    This crate logs all the faults occuring within Theseus. + Change settings

    Crate fault_log[][src]

    Expand description

    This crate logs all the faults occuring within Theseus. Maintains a list of exceptions and panics that has occured since booting up. This crate does not hold reference to any task or app.

    Structs

    diff --git a/doc/implementors/core/clone/trait.Clone.js b/doc/implementors/core/clone/trait.Clone.js index b84685966c..747e481e5f 100644 --- a/doc/implementors/core/clone/trait.Clone.js +++ b/doc/implementors/core/clone/trait.Clone.js @@ -35,7 +35,7 @@ implementors["sdt"] = [{"text":"impl Clone for SerialPortAddress","synthetic":false,"types":["serial_port::SerialPortAddress"]}]; implementors["shapes"] = [{"text":"impl Clone for Coord","synthetic":false,"types":["shapes::Coord"]},{"text":"impl Clone for Rectangle","synthetic":false,"types":["shapes::Rectangle"]}]; implementors["stdio"] = [{"text":"impl Clone for StdioReader","synthetic":false,"types":["stdio::StdioReader"]},{"text":"impl Clone for StdioWriter","synthetic":false,"types":["stdio::StdioWriter"]},{"text":"impl Clone for KeyEventQueueReader","synthetic":false,"types":["stdio::KeyEventQueueReader"]},{"text":"impl Clone for KeyEventQueueWriter","synthetic":false,"types":["stdio::KeyEventQueueWriter"]}]; -implementors["task"] = [{"text":"impl Clone for PanicInfoOwned","synthetic":false,"types":["task::PanicInfoOwned"]},{"text":"impl Clone for TaskRef","synthetic":false,"types":["task::TaskRef"]}]; +implementors["task"] = [{"text":"impl Clone for PanicInfoOwned","synthetic":false,"types":["task::PanicInfoOwned"]},{"text":"impl Clone for RunState","synthetic":false,"types":["task::RunState"]},{"text":"impl Clone for TaskRef","synthetic":false,"types":["task::TaskRef"]}]; implementors["text_terminal"] = [{"text":"impl Clone for Color","synthetic":false,"types":["text_terminal::ansi_colors::Color"]},{"text":"impl Clone for ForegroundColor","synthetic":false,"types":["text_terminal::ansi_colors::ForegroundColor"]},{"text":"impl Clone for BackgroundColor","synthetic":false,"types":["text_terminal::ansi_colors::BackgroundColor"]},{"text":"impl Clone for UnderlinedColor","synthetic":false,"types":["text_terminal::ansi_colors::UnderlinedColor"]},{"text":"impl Clone for Style","synthetic":false,"types":["text_terminal::ansi_style::Style"]},{"text":"impl Clone for FormatFlags","synthetic":false,"types":["text_terminal::ansi_style::FormatFlags"]}]; implementors["unified_channel"] = [{"text":"impl Clone for StringSender","synthetic":false,"types":["unified_channel::StringSender"]},{"text":"impl Clone for StringReceiver","synthetic":false,"types":["unified_channel::StringReceiver"]}]; implementors["vga_buffer"] = [{"text":"impl Clone for Color","synthetic":false,"types":["vga_buffer::Color"]},{"text":"impl Clone for ColorCode","synthetic":false,"types":["vga_buffer::ColorCode"]},{"text":"impl Clone for ScreenChar","synthetic":false,"types":["vga_buffer::ScreenChar"]}]; diff --git a/doc/implementors/core/cmp/trait.Eq.js b/doc/implementors/core/cmp/trait.Eq.js index fff0ec5154..d5cc7cd5d5 100644 --- a/doc/implementors/core/cmp/trait.Eq.js +++ b/doc/implementors/core/cmp/trait.Eq.js @@ -10,6 +10,6 @@ implementors["memory_structs"] = [{"text":"impl Eq for Path","synthetic":false,"types":["path::Path"]}]; implementors["pci"] = [{"text":"impl Eq for PciLocation","synthetic":false,"types":["pci::PciLocation"]}]; implementors["shapes"] = [{"text":"impl Eq for Coord","synthetic":false,"types":["shapes::Coord"]}]; -implementors["task"] = [{"text":"impl Eq for TaskRef","synthetic":false,"types":["task::TaskRef"]}]; +implementors["task"] = [{"text":"impl Eq for RunState","synthetic":false,"types":["task::RunState"]},{"text":"impl Eq for TaskRef","synthetic":false,"types":["task::TaskRef"]}]; implementors["text_terminal"] = [{"text":"impl Eq for Color","synthetic":false,"types":["text_terminal::ansi_colors::Color"]},{"text":"impl Eq for ForegroundColor","synthetic":false,"types":["text_terminal::ansi_colors::ForegroundColor"]},{"text":"impl Eq for BackgroundColor","synthetic":false,"types":["text_terminal::ansi_colors::BackgroundColor"]},{"text":"impl Eq for UnderlinedColor","synthetic":false,"types":["text_terminal::ansi_colors::UnderlinedColor"]},{"text":"impl Eq for Style","synthetic":false,"types":["text_terminal::ansi_style::Style"]},{"text":"impl Eq for FormatFlags","synthetic":false,"types":["text_terminal::ansi_style::FormatFlags"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/cmp/trait.PartialEq.js b/doc/implementors/core/cmp/trait.PartialEq.js index 895b804769..e9e90dbedb 100644 --- a/doc/implementors/core/cmp/trait.PartialEq.js +++ b/doc/implementors/core/cmp/trait.PartialEq.js @@ -15,7 +15,7 @@ implementors["mlx_ethernet"] = [{"text":"impl PartialEq<Path> for Path","synthetic":false,"types":["path::Path"]}]; implementors["pci"] = [{"text":"impl PartialEq<PciLocation> for PciLocation","synthetic":false,"types":["pci::PciLocation"]}]; implementors["shapes"] = [{"text":"impl PartialEq<Coord> for Coord","synthetic":false,"types":["shapes::Coord"]},{"text":"impl PartialEq<Rectangle> for Rectangle","synthetic":false,"types":["shapes::Rectangle"]}]; -implementors["task"] = [{"text":"impl PartialEq<TaskRef> for TaskRef","synthetic":false,"types":["task::TaskRef"]}]; +implementors["task"] = [{"text":"impl PartialEq<RunState> for RunState","synthetic":false,"types":["task::RunState"]},{"text":"impl PartialEq<TaskRef> for TaskRef","synthetic":false,"types":["task::TaskRef"]}]; implementors["text_terminal"] = [{"text":"impl PartialEq<Color> for Color","synthetic":false,"types":["text_terminal::ansi_colors::Color"]},{"text":"impl PartialEq<ForegroundColor> for ForegroundColor","synthetic":false,"types":["text_terminal::ansi_colors::ForegroundColor"]},{"text":"impl PartialEq<BackgroundColor> for BackgroundColor","synthetic":false,"types":["text_terminal::ansi_colors::BackgroundColor"]},{"text":"impl PartialEq<UnderlinedColor> for UnderlinedColor","synthetic":false,"types":["text_terminal::ansi_colors::UnderlinedColor"]},{"text":"impl PartialEq<Style> for Style","synthetic":false,"types":["text_terminal::ansi_style::Style"]},{"text":"impl PartialEq<FormatFlags> for FormatFlags","synthetic":false,"types":["text_terminal::ansi_style::FormatFlags"]}]; implementors["wait_queue"] = [{"text":"impl PartialEq<WaitError> for WaitError","synthetic":false,"types":["wait_queue::WaitError"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/marker/trait.Copy.js b/doc/implementors/core/marker/trait.Copy.js index 2800cd3d02..01d3d692d0 100644 --- a/doc/implementors/core/marker/trait.Copy.js +++ b/doc/implementors/core/marker/trait.Copy.js @@ -22,6 +22,7 @@ implementors["rsdp"] = [{"text":"impl Copy for Sdt","synthetic":false,"types":["sdt::Sdt"]},{"text":"impl Copy for GenericAddressStructure","synthetic":false,"types":["sdt::GenericAddressStructure"]}]; implementors["serial_port"] = [{"text":"impl Copy for SerialPortAddress","synthetic":false,"types":["serial_port::SerialPortAddress"]}]; implementors["shapes"] = [{"text":"impl Copy for Coord","synthetic":false,"types":["shapes::Coord"]},{"text":"impl Copy for Rectangle","synthetic":false,"types":["shapes::Rectangle"]}]; +implementors["task"] = [{"text":"impl Copy for RunState","synthetic":false,"types":["task::RunState"]}]; implementors["text_terminal"] = [{"text":"impl Copy for Color","synthetic":false,"types":["text_terminal::ansi_colors::Color"]},{"text":"impl Copy for ForegroundColor","synthetic":false,"types":["text_terminal::ansi_colors::ForegroundColor"]},{"text":"impl Copy for BackgroundColor","synthetic":false,"types":["text_terminal::ansi_colors::BackgroundColor"]},{"text":"impl Copy for UnderlinedColor","synthetic":false,"types":["text_terminal::ansi_colors::UnderlinedColor"]},{"text":"impl Copy for Style","synthetic":false,"types":["text_terminal::ansi_style::Style"]},{"text":"impl Copy for FormatFlags","synthetic":false,"types":["text_terminal::ansi_style::FormatFlags"]}]; implementors["vga_buffer"] = [{"text":"impl Copy for Color","synthetic":false,"types":["vga_buffer::Color"]},{"text":"impl Copy for ColorCode","synthetic":false,"types":["vga_buffer::ColorCode"]},{"text":"impl Copy for ScreenChar","synthetic":false,"types":["vga_buffer::ScreenChar"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/marker/trait.Freeze.js b/doc/implementors/core/marker/trait.Freeze.js index fc92997f40..7e6f3c0de6 100644 --- a/doc/implementors/core/marker/trait.Freeze.js +++ b/doc/implementors/core/marker/trait.Freeze.js @@ -88,7 +88,7 @@ implementors["spawn"] = [{"text":"impl Freeze for Stack","synthetic":true,"types":["stack::Stack"]}]; implementors["state_store"] = [{"text":"impl<S> !Freeze for SSCached<S>","synthetic":true,"types":["state_store::SSCached"]}]; implementors["stdio"] = [{"text":"impl<T> Freeze for RingBufferEof<T>","synthetic":true,"types":["stdio::RingBufferEof"]},{"text":"impl Freeze for Stdio","synthetic":true,"types":["stdio::Stdio"]},{"text":"impl Freeze for StdioReader","synthetic":true,"types":["stdio::StdioReader"]},{"text":"impl Freeze for StdioWriter","synthetic":true,"types":["stdio::StdioWriter"]},{"text":"impl<'a> Freeze for StdioReadGuard<'a>","synthetic":true,"types":["stdio::StdioReadGuard"]},{"text":"impl<'a> Freeze for StdioWriteGuard<'a>","synthetic":true,"types":["stdio::StdioWriteGuard"]},{"text":"impl Freeze for KeyEventQueue","synthetic":true,"types":["stdio::KeyEventQueue"]},{"text":"impl Freeze for KeyEventQueueReader","synthetic":true,"types":["stdio::KeyEventQueueReader"]},{"text":"impl Freeze for KeyEventQueueWriter","synthetic":true,"types":["stdio::KeyEventQueueWriter"]},{"text":"impl Freeze for KeyEventReadGuard","synthetic":true,"types":["stdio::KeyEventReadGuard"]}]; -implementors["task"] = [{"text":"impl Freeze for PanicInfoOwned","synthetic":true,"types":["task::PanicInfoOwned"]},{"text":"impl Freeze for TASKLIST","synthetic":true,"types":["task::TASKLIST"]},{"text":"impl Freeze for KillReason","synthetic":true,"types":["task::KillReason"]},{"text":"impl Freeze for ExitValue","synthetic":true,"types":["task::ExitValue"]},{"text":"impl Freeze for RunState","synthetic":true,"types":["task::RunState"]},{"text":"impl Freeze for RestartInfo","synthetic":true,"types":["task::RestartInfo"]},{"text":"impl Freeze for Task","synthetic":true,"types":["task::Task"]},{"text":"impl Freeze for TaskRef","synthetic":true,"types":["task::TaskRef"]}]; +implementors["task"] = [{"text":"impl Freeze for PanicInfoOwned","synthetic":true,"types":["task::PanicInfoOwned"]},{"text":"impl Freeze for TASKLIST","synthetic":true,"types":["task::TASKLIST"]},{"text":"impl Freeze for KillReason","synthetic":true,"types":["task::KillReason"]},{"text":"impl Freeze for ExitValue","synthetic":true,"types":["task::ExitValue"]},{"text":"impl Freeze for RunState","synthetic":true,"types":["task::RunState"]},{"text":"impl Freeze for RestartInfo","synthetic":true,"types":["task::RestartInfo"]},{"text":"impl Freeze for TaskInner","synthetic":true,"types":["task::TaskInner"]},{"text":"impl !Freeze for Task","synthetic":true,"types":["task::Task"]},{"text":"impl Freeze for TaskRef","synthetic":true,"types":["task::TaskRef"]}]; implementors["task_fs"] = [{"text":"impl Freeze for TaskFs","synthetic":true,"types":["task_fs::TaskFs"]},{"text":"impl Freeze for TaskDir","synthetic":true,"types":["task_fs::TaskDir"]},{"text":"impl Freeze for TaskFile","synthetic":true,"types":["task_fs::TaskFile"]},{"text":"impl Freeze for MmiDir","synthetic":true,"types":["task_fs::MmiDir"]},{"text":"impl Freeze for MmiFile","synthetic":true,"types":["task_fs::MmiFile"]}]; implementors["text_display"] = [{"text":"impl Freeze for TextDisplay","synthetic":true,"types":["text_display::TextDisplay"]}]; implementors["text_terminal"] = [{"text":"impl Freeze for Color","synthetic":true,"types":["text_terminal::ansi_colors::Color"]},{"text":"impl Freeze for ForegroundColor","synthetic":true,"types":["text_terminal::ansi_colors::ForegroundColor"]},{"text":"impl Freeze for BackgroundColor","synthetic":true,"types":["text_terminal::ansi_colors::BackgroundColor"]},{"text":"impl Freeze for UnderlinedColor","synthetic":true,"types":["text_terminal::ansi_colors::UnderlinedColor"]},{"text":"impl Freeze for Style","synthetic":true,"types":["text_terminal::ansi_style::Style"]},{"text":"impl<'old, 'new> Freeze for StyleDiff<'old, 'new>","synthetic":true,"types":["text_terminal::ansi_style::StyleDiff"]},{"text":"impl Freeze for AnsiStyleCodes","synthetic":true,"types":["text_terminal::ansi_style::AnsiStyleCodes"]},{"text":"impl Freeze for FormatFlags","synthetic":true,"types":["text_terminal::ansi_style::FormatFlags"]},{"text":"impl Freeze for AsciiControlCodes","synthetic":true,"types":["text_terminal::ansi_style::AsciiControlCodes"]},{"text":"impl Freeze for ScrollPosition","synthetic":true,"types":["text_terminal::ScrollPosition"]},{"text":"impl<Output> Freeze for TextTerminal<Output> where
        Output: Freeze, 
    ","synthetic":true,"types":["text_terminal::TextTerminal"]},{"text":"impl Freeze for Character","synthetic":true,"types":["text_terminal::Character"]},{"text":"impl Freeze for Unit","synthetic":true,"types":["text_terminal::Unit"]},{"text":"impl Freeze for CursorStyle","synthetic":true,"types":["text_terminal::CursorStyle"]}]; diff --git a/doc/implementors/core/marker/trait.Send.js b/doc/implementors/core/marker/trait.Send.js index 016c2eeda0..67108de92f 100644 --- a/doc/implementors/core/marker/trait.Send.js +++ b/doc/implementors/core/marker/trait.Send.js @@ -88,7 +88,7 @@ implementors["spawn"] = [{"text":"impl Send for Stack","synthetic":true,"types":["stack::Stack"]}]; implementors["state_store"] = [{"text":"impl<S> Send for SSCached<S>","synthetic":true,"types":["state_store::SSCached"]}]; implementors["stdio"] = [{"text":"impl<T> Send for RingBufferEof<T> where
        T: Send
    ","synthetic":true,"types":["stdio::RingBufferEof"]},{"text":"impl Send for Stdio","synthetic":true,"types":["stdio::Stdio"]},{"text":"impl Send for StdioReader","synthetic":true,"types":["stdio::StdioReader"]},{"text":"impl Send for StdioWriter","synthetic":true,"types":["stdio::StdioWriter"]},{"text":"impl<'a> Send for StdioReadGuard<'a>","synthetic":true,"types":["stdio::StdioReadGuard"]},{"text":"impl<'a> Send for StdioWriteGuard<'a>","synthetic":true,"types":["stdio::StdioWriteGuard"]},{"text":"impl Send for KeyEventQueue","synthetic":true,"types":["stdio::KeyEventQueue"]},{"text":"impl Send for KeyEventQueueReader","synthetic":true,"types":["stdio::KeyEventQueueReader"]},{"text":"impl Send for KeyEventQueueWriter","synthetic":true,"types":["stdio::KeyEventQueueWriter"]},{"text":"impl !Send for KeyEventReadGuard","synthetic":true,"types":["stdio::KeyEventReadGuard"]}]; -implementors["task"] = [{"text":"impl Send for PanicInfoOwned","synthetic":true,"types":["task::PanicInfoOwned"]},{"text":"impl Send for TASKLIST","synthetic":true,"types":["task::TASKLIST"]},{"text":"impl Send for KillReason","synthetic":true,"types":["task::KillReason"]},{"text":"impl Send for ExitValue","synthetic":true,"types":["task::ExitValue"]},{"text":"impl Send for RunState","synthetic":true,"types":["task::RunState"]},{"text":"impl Send for RestartInfo","synthetic":true,"types":["task::RestartInfo"]},{"text":"impl Send for Task","synthetic":true,"types":["task::Task"]},{"text":"impl Send for TaskRef","synthetic":true,"types":["task::TaskRef"]}]; +implementors["task"] = [{"text":"impl Send for PanicInfoOwned","synthetic":true,"types":["task::PanicInfoOwned"]},{"text":"impl Send for TASKLIST","synthetic":true,"types":["task::TASKLIST"]},{"text":"impl Send for KillReason","synthetic":true,"types":["task::KillReason"]},{"text":"impl Send for ExitValue","synthetic":true,"types":["task::ExitValue"]},{"text":"impl Send for RunState","synthetic":true,"types":["task::RunState"]},{"text":"impl Send for RestartInfo","synthetic":true,"types":["task::RestartInfo"]},{"text":"impl Send for TaskInner","synthetic":true,"types":["task::TaskInner"]},{"text":"impl Send for Task","synthetic":true,"types":["task::Task"]},{"text":"impl Send for TaskRef","synthetic":true,"types":["task::TaskRef"]}]; implementors["task_fs"] = [{"text":"impl Send for TaskFs","synthetic":true,"types":["task_fs::TaskFs"]},{"text":"impl Send for TaskDir","synthetic":true,"types":["task_fs::TaskDir"]},{"text":"impl Send for TaskFile","synthetic":true,"types":["task_fs::TaskFile"]},{"text":"impl Send for MmiDir","synthetic":true,"types":["task_fs::MmiDir"]},{"text":"impl Send for MmiFile","synthetic":true,"types":["task_fs::MmiFile"]}]; implementors["text_display"] = [{"text":"impl Send for TextDisplay","synthetic":true,"types":["text_display::TextDisplay"]}]; implementors["text_terminal"] = [{"text":"impl Send for Color","synthetic":true,"types":["text_terminal::ansi_colors::Color"]},{"text":"impl Send for ForegroundColor","synthetic":true,"types":["text_terminal::ansi_colors::ForegroundColor"]},{"text":"impl Send for BackgroundColor","synthetic":true,"types":["text_terminal::ansi_colors::BackgroundColor"]},{"text":"impl Send for UnderlinedColor","synthetic":true,"types":["text_terminal::ansi_colors::UnderlinedColor"]},{"text":"impl Send for Style","synthetic":true,"types":["text_terminal::ansi_style::Style"]},{"text":"impl<'old, 'new> Send for StyleDiff<'old, 'new>","synthetic":true,"types":["text_terminal::ansi_style::StyleDiff"]},{"text":"impl Send for AnsiStyleCodes","synthetic":true,"types":["text_terminal::ansi_style::AnsiStyleCodes"]},{"text":"impl Send for FormatFlags","synthetic":true,"types":["text_terminal::ansi_style::FormatFlags"]},{"text":"impl Send for AsciiControlCodes","synthetic":true,"types":["text_terminal::ansi_style::AsciiControlCodes"]},{"text":"impl Send for ScrollPosition","synthetic":true,"types":["text_terminal::ScrollPosition"]},{"text":"impl<Output> Send for TextTerminal<Output> where
        Output: Send
    ","synthetic":true,"types":["text_terminal::TextTerminal"]},{"text":"impl Send for Character","synthetic":true,"types":["text_terminal::Character"]},{"text":"impl Send for Unit","synthetic":true,"types":["text_terminal::Unit"]},{"text":"impl Send for CursorStyle","synthetic":true,"types":["text_terminal::CursorStyle"]}]; diff --git a/doc/implementors/core/marker/trait.StructuralEq.js b/doc/implementors/core/marker/trait.StructuralEq.js index 3eb6133a09..e5e651e993 100644 --- a/doc/implementors/core/marker/trait.StructuralEq.js +++ b/doc/implementors/core/marker/trait.StructuralEq.js @@ -8,5 +8,6 @@ implementors["keycodes_ascii"] = [{"text":"impl StructuralEq for VirtualAddress","synthetic":false,"types":["memory_structs::VirtualAddress"]},{"text":"impl StructuralEq for PhysicalAddress","synthetic":false,"types":["memory_structs::PhysicalAddress"]},{"text":"impl StructuralEq for Page","synthetic":false,"types":["memory_structs::Page"]},{"text":"impl StructuralEq for Frame","synthetic":false,"types":["memory_structs::Frame"]},{"text":"impl StructuralEq for PageRange","synthetic":false,"types":["memory_structs::PageRange"]},{"text":"impl StructuralEq for FrameRange","synthetic":false,"types":["memory_structs::FrameRange"]}]; implementors["path"] = [{"text":"impl StructuralEq for Path","synthetic":false,"types":["path::Path"]}]; implementors["pci"] = [{"text":"impl StructuralEq for PciLocation","synthetic":false,"types":["pci::PciLocation"]}]; +implementors["task"] = [{"text":"impl StructuralEq for RunState","synthetic":false,"types":["task::RunState"]}]; implementors["text_terminal"] = [{"text":"impl StructuralEq for Color","synthetic":false,"types":["text_terminal::ansi_colors::Color"]},{"text":"impl StructuralEq for ForegroundColor","synthetic":false,"types":["text_terminal::ansi_colors::ForegroundColor"]},{"text":"impl StructuralEq for BackgroundColor","synthetic":false,"types":["text_terminal::ansi_colors::BackgroundColor"]},{"text":"impl StructuralEq for UnderlinedColor","synthetic":false,"types":["text_terminal::ansi_colors::UnderlinedColor"]},{"text":"impl StructuralEq for Style","synthetic":false,"types":["text_terminal::ansi_style::Style"]},{"text":"impl StructuralEq for FormatFlags","synthetic":false,"types":["text_terminal::ansi_style::FormatFlags"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/marker/trait.StructuralPartialEq.js b/doc/implementors/core/marker/trait.StructuralPartialEq.js index 05a892c33e..6e80f5acdd 100644 --- a/doc/implementors/core/marker/trait.StructuralPartialEq.js +++ b/doc/implementors/core/marker/trait.StructuralPartialEq.js @@ -14,6 +14,7 @@ implementors["mlx_ethernet"] = [{"text":"impl StructuralPartialEq for Path","synthetic":false,"types":["path::Path"]}]; implementors["pci"] = [{"text":"impl StructuralPartialEq for PciLocation","synthetic":false,"types":["pci::PciLocation"]}]; implementors["shapes"] = [{"text":"impl StructuralPartialEq for Coord","synthetic":false,"types":["shapes::Coord"]},{"text":"impl StructuralPartialEq for Rectangle","synthetic":false,"types":["shapes::Rectangle"]}]; +implementors["task"] = [{"text":"impl StructuralPartialEq for RunState","synthetic":false,"types":["task::RunState"]}]; implementors["text_terminal"] = [{"text":"impl StructuralPartialEq for Color","synthetic":false,"types":["text_terminal::ansi_colors::Color"]},{"text":"impl StructuralPartialEq for ForegroundColor","synthetic":false,"types":["text_terminal::ansi_colors::ForegroundColor"]},{"text":"impl StructuralPartialEq for BackgroundColor","synthetic":false,"types":["text_terminal::ansi_colors::BackgroundColor"]},{"text":"impl StructuralPartialEq for UnderlinedColor","synthetic":false,"types":["text_terminal::ansi_colors::UnderlinedColor"]},{"text":"impl StructuralPartialEq for Style","synthetic":false,"types":["text_terminal::ansi_style::Style"]},{"text":"impl StructuralPartialEq for FormatFlags","synthetic":false,"types":["text_terminal::ansi_style::FormatFlags"]}]; implementors["wait_queue"] = [{"text":"impl StructuralPartialEq for WaitError","synthetic":false,"types":["wait_queue::WaitError"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/marker/trait.Sync.js b/doc/implementors/core/marker/trait.Sync.js index 421d457130..a337f69213 100644 --- a/doc/implementors/core/marker/trait.Sync.js +++ b/doc/implementors/core/marker/trait.Sync.js @@ -88,7 +88,7 @@ implementors["spawn"] = [{"text":"impl Sync for Stack","synthetic":true,"types":["stack::Stack"]}]; implementors["state_store"] = [{"text":"impl<S> Sync for SSCached<S>","synthetic":true,"types":["state_store::SSCached"]}]; implementors["stdio"] = [{"text":"impl<T> Sync for RingBufferEof<T> where
        T: Sync
    ","synthetic":true,"types":["stdio::RingBufferEof"]},{"text":"impl Sync for Stdio","synthetic":true,"types":["stdio::Stdio"]},{"text":"impl Sync for StdioReader","synthetic":true,"types":["stdio::StdioReader"]},{"text":"impl Sync for StdioWriter","synthetic":true,"types":["stdio::StdioWriter"]},{"text":"impl<'a> Sync for StdioReadGuard<'a>","synthetic":true,"types":["stdio::StdioReadGuard"]},{"text":"impl<'a> Sync for StdioWriteGuard<'a>","synthetic":true,"types":["stdio::StdioWriteGuard"]},{"text":"impl Sync for KeyEventQueue","synthetic":true,"types":["stdio::KeyEventQueue"]},{"text":"impl Sync for KeyEventQueueReader","synthetic":true,"types":["stdio::KeyEventQueueReader"]},{"text":"impl Sync for KeyEventQueueWriter","synthetic":true,"types":["stdio::KeyEventQueueWriter"]},{"text":"impl !Sync for KeyEventReadGuard","synthetic":true,"types":["stdio::KeyEventReadGuard"]}]; -implementors["task"] = [{"text":"impl Sync for PanicInfoOwned","synthetic":true,"types":["task::PanicInfoOwned"]},{"text":"impl Sync for TASKLIST","synthetic":true,"types":["task::TASKLIST"]},{"text":"impl Sync for KillReason","synthetic":true,"types":["task::KillReason"]},{"text":"impl !Sync for ExitValue","synthetic":true,"types":["task::ExitValue"]},{"text":"impl !Sync for RunState","synthetic":true,"types":["task::RunState"]},{"text":"impl !Sync for RestartInfo","synthetic":true,"types":["task::RestartInfo"]},{"text":"impl !Sync for Task","synthetic":true,"types":["task::Task"]},{"text":"impl Sync for TaskRef","synthetic":true,"types":["task::TaskRef"]}]; +implementors["task"] = [{"text":"impl Sync for PanicInfoOwned","synthetic":true,"types":["task::PanicInfoOwned"]},{"text":"impl Sync for TASKLIST","synthetic":true,"types":["task::TASKLIST"]},{"text":"impl Sync for KillReason","synthetic":true,"types":["task::KillReason"]},{"text":"impl !Sync for ExitValue","synthetic":true,"types":["task::ExitValue"]},{"text":"impl Sync for RunState","synthetic":true,"types":["task::RunState"]},{"text":"impl !Sync for RestartInfo","synthetic":true,"types":["task::RestartInfo"]},{"text":"impl !Sync for TaskInner","synthetic":true,"types":["task::TaskInner"]},{"text":"impl Sync for Task","synthetic":true,"types":["task::Task"]},{"text":"impl Sync for TaskRef","synthetic":true,"types":["task::TaskRef"]}]; implementors["task_fs"] = [{"text":"impl Sync for TaskFs","synthetic":true,"types":["task_fs::TaskFs"]},{"text":"impl Sync for TaskDir","synthetic":true,"types":["task_fs::TaskDir"]},{"text":"impl Sync for TaskFile","synthetic":true,"types":["task_fs::TaskFile"]},{"text":"impl Sync for MmiDir","synthetic":true,"types":["task_fs::MmiDir"]},{"text":"impl Sync for MmiFile","synthetic":true,"types":["task_fs::MmiFile"]}]; implementors["text_display"] = [{"text":"impl Sync for TextDisplay","synthetic":true,"types":["text_display::TextDisplay"]}]; implementors["text_terminal"] = [{"text":"impl Sync for Color","synthetic":true,"types":["text_terminal::ansi_colors::Color"]},{"text":"impl Sync for ForegroundColor","synthetic":true,"types":["text_terminal::ansi_colors::ForegroundColor"]},{"text":"impl Sync for BackgroundColor","synthetic":true,"types":["text_terminal::ansi_colors::BackgroundColor"]},{"text":"impl Sync for UnderlinedColor","synthetic":true,"types":["text_terminal::ansi_colors::UnderlinedColor"]},{"text":"impl Sync for Style","synthetic":true,"types":["text_terminal::ansi_style::Style"]},{"text":"impl<'old, 'new> Sync for StyleDiff<'old, 'new>","synthetic":true,"types":["text_terminal::ansi_style::StyleDiff"]},{"text":"impl Sync for AnsiStyleCodes","synthetic":true,"types":["text_terminal::ansi_style::AnsiStyleCodes"]},{"text":"impl Sync for FormatFlags","synthetic":true,"types":["text_terminal::ansi_style::FormatFlags"]},{"text":"impl Sync for AsciiControlCodes","synthetic":true,"types":["text_terminal::ansi_style::AsciiControlCodes"]},{"text":"impl Sync for ScrollPosition","synthetic":true,"types":["text_terminal::ScrollPosition"]},{"text":"impl<Output> Sync for TextTerminal<Output> where
        Output: Sync
    ","synthetic":true,"types":["text_terminal::TextTerminal"]},{"text":"impl Sync for Character","synthetic":true,"types":["text_terminal::Character"]},{"text":"impl Sync for Unit","synthetic":true,"types":["text_terminal::Unit"]},{"text":"impl Sync for CursorStyle","synthetic":true,"types":["text_terminal::CursorStyle"]}]; diff --git a/doc/implementors/core/marker/trait.Unpin.js b/doc/implementors/core/marker/trait.Unpin.js index 5bcf959387..4d9b7aa7ed 100644 --- a/doc/implementors/core/marker/trait.Unpin.js +++ b/doc/implementors/core/marker/trait.Unpin.js @@ -88,7 +88,7 @@ implementors["spawn"] = [{"text":"impl Unpin for Stack","synthetic":true,"types":["stack::Stack"]}]; implementors["state_store"] = [{"text":"impl<S> Unpin for SSCached<S>","synthetic":true,"types":["state_store::SSCached"]}]; implementors["stdio"] = [{"text":"impl<T> Unpin for RingBufferEof<T> where
        T: Unpin
    ","synthetic":true,"types":["stdio::RingBufferEof"]},{"text":"impl Unpin for Stdio","synthetic":true,"types":["stdio::Stdio"]},{"text":"impl Unpin for StdioReader","synthetic":true,"types":["stdio::StdioReader"]},{"text":"impl Unpin for StdioWriter","synthetic":true,"types":["stdio::StdioWriter"]},{"text":"impl<'a> Unpin for StdioReadGuard<'a>","synthetic":true,"types":["stdio::StdioReadGuard"]},{"text":"impl<'a> Unpin for StdioWriteGuard<'a>","synthetic":true,"types":["stdio::StdioWriteGuard"]},{"text":"impl Unpin for KeyEventQueue","synthetic":true,"types":["stdio::KeyEventQueue"]},{"text":"impl Unpin for KeyEventQueueReader","synthetic":true,"types":["stdio::KeyEventQueueReader"]},{"text":"impl Unpin for KeyEventQueueWriter","synthetic":true,"types":["stdio::KeyEventQueueWriter"]},{"text":"impl Unpin for KeyEventReadGuard","synthetic":true,"types":["stdio::KeyEventReadGuard"]}]; -implementors["task"] = [{"text":"impl Unpin for PanicInfoOwned","synthetic":true,"types":["task::PanicInfoOwned"]},{"text":"impl Unpin for TASKLIST","synthetic":true,"types":["task::TASKLIST"]},{"text":"impl Unpin for KillReason","synthetic":true,"types":["task::KillReason"]},{"text":"impl Unpin for ExitValue","synthetic":true,"types":["task::ExitValue"]},{"text":"impl Unpin for RunState","synthetic":true,"types":["task::RunState"]},{"text":"impl Unpin for RestartInfo","synthetic":true,"types":["task::RestartInfo"]},{"text":"impl Unpin for Task","synthetic":true,"types":["task::Task"]},{"text":"impl Unpin for TaskRef","synthetic":true,"types":["task::TaskRef"]}]; +implementors["task"] = [{"text":"impl Unpin for PanicInfoOwned","synthetic":true,"types":["task::PanicInfoOwned"]},{"text":"impl Unpin for TASKLIST","synthetic":true,"types":["task::TASKLIST"]},{"text":"impl Unpin for KillReason","synthetic":true,"types":["task::KillReason"]},{"text":"impl Unpin for ExitValue","synthetic":true,"types":["task::ExitValue"]},{"text":"impl Unpin for RunState","synthetic":true,"types":["task::RunState"]},{"text":"impl Unpin for RestartInfo","synthetic":true,"types":["task::RestartInfo"]},{"text":"impl Unpin for TaskInner","synthetic":true,"types":["task::TaskInner"]},{"text":"impl Unpin for Task","synthetic":true,"types":["task::Task"]},{"text":"impl Unpin for TaskRef","synthetic":true,"types":["task::TaskRef"]}]; implementors["task_fs"] = [{"text":"impl Unpin for TaskFs","synthetic":true,"types":["task_fs::TaskFs"]},{"text":"impl Unpin for TaskDir","synthetic":true,"types":["task_fs::TaskDir"]},{"text":"impl Unpin for TaskFile","synthetic":true,"types":["task_fs::TaskFile"]},{"text":"impl Unpin for MmiDir","synthetic":true,"types":["task_fs::MmiDir"]},{"text":"impl Unpin for MmiFile","synthetic":true,"types":["task_fs::MmiFile"]}]; implementors["text_display"] = [{"text":"impl Unpin for TextDisplay","synthetic":true,"types":["text_display::TextDisplay"]}]; implementors["text_terminal"] = [{"text":"impl Unpin for Color","synthetic":true,"types":["text_terminal::ansi_colors::Color"]},{"text":"impl Unpin for ForegroundColor","synthetic":true,"types":["text_terminal::ansi_colors::ForegroundColor"]},{"text":"impl Unpin for BackgroundColor","synthetic":true,"types":["text_terminal::ansi_colors::BackgroundColor"]},{"text":"impl Unpin for UnderlinedColor","synthetic":true,"types":["text_terminal::ansi_colors::UnderlinedColor"]},{"text":"impl Unpin for Style","synthetic":true,"types":["text_terminal::ansi_style::Style"]},{"text":"impl<'old, 'new> Unpin for StyleDiff<'old, 'new>","synthetic":true,"types":["text_terminal::ansi_style::StyleDiff"]},{"text":"impl Unpin for AnsiStyleCodes","synthetic":true,"types":["text_terminal::ansi_style::AnsiStyleCodes"]},{"text":"impl Unpin for FormatFlags","synthetic":true,"types":["text_terminal::ansi_style::FormatFlags"]},{"text":"impl Unpin for AsciiControlCodes","synthetic":true,"types":["text_terminal::ansi_style::AsciiControlCodes"]},{"text":"impl Unpin for ScrollPosition","synthetic":true,"types":["text_terminal::ScrollPosition"]},{"text":"impl<Output> Unpin for TextTerminal<Output> where
        Output: Unpin
    ","synthetic":true,"types":["text_terminal::TextTerminal"]},{"text":"impl Unpin for Character","synthetic":true,"types":["text_terminal::Character"]},{"text":"impl Unpin for Unit","synthetic":true,"types":["text_terminal::Unit"]},{"text":"impl Unpin for CursorStyle","synthetic":true,"types":["text_terminal::CursorStyle"]}]; diff --git a/doc/implementors/core/ops/deref/trait.Deref.js b/doc/implementors/core/ops/deref/trait.Deref.js index 04a11305d3..132e249307 100644 --- a/doc/implementors/core/ops/deref/trait.Deref.js +++ b/doc/implementors/core/ops/deref/trait.Deref.js @@ -19,6 +19,6 @@ implementors["runqueue_round_robin"] = [{"text":"impl Deref for BootstrapTaskRef","synthetic":false,"types":["spawn::BootstrapTaskRef"]}]; implementors["stack"] = [{"text":"impl Deref for Stack","synthetic":false,"types":["stack::Stack"]}]; implementors["stdio"] = [{"text":"impl Deref for KeyEventReadGuard","synthetic":false,"types":["stdio::KeyEventReadGuard"]}]; -implementors["task"] = [{"text":"impl Deref for TASKLIST","synthetic":false,"types":["task::TASKLIST"]}]; +implementors["task"] = [{"text":"impl Deref for TASKLIST","synthetic":false,"types":["task::TASKLIST"]},{"text":"impl Deref for TaskRef","synthetic":false,"types":["task::TaskRef"]}]; implementors["text_terminal"] = [{"text":"impl Deref for Unit","synthetic":false,"types":["text_terminal::Unit"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/pmu_x86/enum.EventType.html b/doc/pmu_x86/enum.EventType.html index 089a5f554a..1c1d8fe5ee 100644 --- a/doc/pmu_x86/enum.EventType.html +++ b/doc/pmu_x86/enum.EventType.html @@ -1,7 +1,7 @@ EventType in pmu_x86 - Rust

    Enum pmu_x86::EventType[][src]

    pub enum EventType {
    +                Change settings

    Enum pmu_x86::EventType[][src]

    pub enum EventType {
         InstructionsRetired,
         UnhaltedCoreCycles,
         UnhaltedReferenceCycles,
    diff --git a/doc/pmu_x86/fn.find_function_names_from_samples.html b/doc/pmu_x86/fn.find_function_names_from_samples.html
    index 817a044f8f..9a27a675a7 100644
    --- a/doc/pmu_x86/fn.find_function_names_from_samples.html
    +++ b/doc/pmu_x86/fn.find_function_names_from_samples.html
    @@ -1,6 +1,6 @@
     find_function_names_from_samples in pmu_x86 - Rust
     
     

    Function pmu_x86::find_function_names_from_samples[][src]

    pub fn find_function_names_from_samples(
        sample_results: &SampleResults
    ) -> Result<(), &'static str>
    Expand description

    Finds the corresponding function for each instruction pointer and calculates the percentage amount each function occured in the samples

    + Change settings

    Function pmu_x86::find_function_names_from_samples[][src]

    pub fn find_function_names_from_samples(
        sample_results: &SampleResults
    ) -> Result<(), &'static str>
    Expand description

    Finds the corresponding function for each instruction pointer and calculates the percentage amount each function occured in the samples

    \ No newline at end of file diff --git a/doc/pmu_x86/fn.handle_sample.html b/doc/pmu_x86/fn.handle_sample.html index 2939ef8327..342de8e9e6 100644 --- a/doc/pmu_x86/fn.handle_sample.html +++ b/doc/pmu_x86/fn.handle_sample.html @@ -1,7 +1,7 @@ handle_sample in pmu_x86 - Rust

    Function pmu_x86::handle_sample[][src]

    pub fn handle_sample(
        stack_frame: &mut ExceptionStackFrame
    ) -> Result<bool, &'static str>
    Expand description

    This function is designed to be invoked from an interrupt handler + Change settings

    Function pmu_x86::handle_sample[][src]

    pub fn handle_sample(
        stack_frame: &mut ExceptionStackFrame
    ) -> Result<bool, &'static str>
    Expand description

    This function is designed to be invoked from an interrupt handler when a sampling interrupt has (or may have) occurred.

    It takes a sample by logging the the instruction pointer and task ID at the point at which the sampling interrupt occurred. diff --git a/doc/pmu_x86/fn.init.html b/doc/pmu_x86/fn.init.html index dd207f17a2..c90a36ab40 100644 --- a/doc/pmu_x86/fn.init.html +++ b/doc/pmu_x86/fn.init.html @@ -1,7 +1,7 @@ init in pmu_x86 - Rust

    Function pmu_x86::init[][src]

    pub fn init() -> Result<(), &'static str>
    Expand description

    Initialization function that enables the PMU if one is available. + Change settings

    Function pmu_x86::init[][src]

    pub fn init() -> Result<(), &'static str>
    Expand description

    Initialization function that enables the PMU if one is available. We initialize the 3 fixed PMCs and general purpose PMCs. Calling this initialization function again on a core that has already been initialized will do nothing.

    Currently we support a maximum core ID of 255, and up to 8 general purpose counters per core. diff --git a/doc/pmu_x86/fn.print_samples.html b/doc/pmu_x86/fn.print_samples.html index d40d9225f0..5204597775 100644 --- a/doc/pmu_x86/fn.print_samples.html +++ b/doc/pmu_x86/fn.print_samples.html @@ -1,6 +1,6 @@ print_samples in pmu_x86 - Rust

    Function pmu_x86::print_samples[][src]

    pub fn print_samples(sample_results: &SampleResults)
    Expand description

    Simple function to print values from SampleResults in a form that the script “post-mortem pmu analysis.py” can parse.

    + Change settings

    Function pmu_x86::print_samples[][src]

    pub fn print_samples(sample_results: &SampleResults)
    Expand description

    Simple function to print values from SampleResults in a form that the script “post-mortem pmu analysis.py” can parse.

    \ No newline at end of file diff --git a/doc/pmu_x86/fn.reset_pmu.html b/doc/pmu_x86/fn.reset_pmu.html index a203d45a8c..c7b03942da 100644 --- a/doc/pmu_x86/fn.reset_pmu.html +++ b/doc/pmu_x86/fn.reset_pmu.html @@ -1,7 +1,7 @@ reset_pmu in pmu_x86 - Rust

    Function pmu_x86::reset_pmu[][src]

    pub fn reset_pmu() -> Result<(), &'static str>
    Expand description

    Frees all counters and make them available to be used. + Change settings

    Function pmu_x86::reset_pmu[][src]

    pub fn reset_pmu() -> Result<(), &'static str>
    Expand description

    Frees all counters and make them available to be used. Essentially sets the PMU to its initial state.

    \ No newline at end of file diff --git a/doc/pmu_x86/fn.retrieve_samples.html b/doc/pmu_x86/fn.retrieve_samples.html index 40a334a38c..fee8799378 100644 --- a/doc/pmu_x86/fn.retrieve_samples.html +++ b/doc/pmu_x86/fn.retrieve_samples.html @@ -1,7 +1,7 @@ retrieve_samples in pmu_x86 - Rust

    Function pmu_x86::retrieve_samples[][src]

    pub fn retrieve_samples() -> Result<SampleResults, &'static str>
    Expand description

    Returns the samples that were stored during sampling in the form of a SampleResults object. + Change settings

    Function pmu_x86::retrieve_samples[][src]

    pub fn retrieve_samples() -> Result<SampleResults, &'static str>
    Expand description

    Returns the samples that were stored during sampling in the form of a SampleResults object. If samples are not yet finished, forces them to stop.

    \ No newline at end of file diff --git a/doc/pmu_x86/fn.start_samples.html b/doc/pmu_x86/fn.start_samples.html index 6ec2c8e58e..e59ff55f6c 100644 --- a/doc/pmu_x86/fn.start_samples.html +++ b/doc/pmu_x86/fn.start_samples.html @@ -1,7 +1,7 @@ start_samples in pmu_x86 - Rust

    Function pmu_x86::start_samples[][src]

    pub fn start_samples(
        event_type: EventType,
        event_per_sample: u32,
        task_id: Option<usize>,
        sample_count: u32
    ) -> Result<(), &'static str>
    Expand description

    Start interrupt process in order to take samples using the PMU. + Change settings

    Function pmu_x86::start_samples[][src]

    pub fn start_samples(
        event_type: EventType,
        event_per_sample: u32,
        task_id: Option<usize>,
        sample_count: u32
    ) -> Result<(), &'static str>
    Expand description

    Start interrupt process in order to take samples using the PMU. It loads the starting value as such that an overflow will occur at “event_per_sample” events. That overflow triggers an interrupt where information about the current running task is sampled.

    Arguments

    diff --git a/doc/pmu_x86/index.html b/doc/pmu_x86/index.html index db3b6d9d95..e5abe2c5a9 100644 --- a/doc/pmu_x86/index.html +++ b/doc/pmu_x86/index.html @@ -1,7 +1,7 @@ pmu_x86 - Rust

    Crate pmu_x86[][src]

    Expand description

    Support for the Performance Monitoring Unit

    + Change settings

    Crate pmu_x86[][src]

    Expand description

    Support for the Performance Monitoring Unit

    We have support for PMU version 2. Each succesive PMU version includes the features provided by the previous versions.

    Version 1 Support: To configure an architectural performance monitoring event, we program the performance event select registers (IA32_PERFEVTSELx MSRs). diff --git a/doc/pmu_x86/struct.Counter.html b/doc/pmu_x86/struct.Counter.html index af873d63c2..e924b04bf4 100644 --- a/doc/pmu_x86/struct.Counter.html +++ b/doc/pmu_x86/struct.Counter.html @@ -1,15 +1,15 @@ Counter in pmu_x86 - Rust

    Struct pmu_x86::Counter[][src]

    pub struct Counter { /* fields omitted */ }
    Expand description

    A logical counter object to correspond to a physical PMC

    -

    Implementations

    impl Counter[src]

    pub fn new(event: EventType) -> Result<Counter, &'static str>[src]

    Creates a Counter object and assigns a physical counter for it. + Change settings

    Struct pmu_x86::Counter[][src]

    pub struct Counter { /* fields omitted */ }
    Expand description

    A logical counter object to correspond to a physical PMC

    +

    Implementations

    impl Counter[src]

    pub fn new(event: EventType) -> Result<Counter, &'static str>[src]

    Creates a Counter object and assigns a physical counter for it. If it’s a general PMC, writes the UMASK and Event Code to the relevant MSR, but leaves enable bit clear.

    -

    pub fn start(&mut self) -> Result<(), &'static str>[src]

    Starts the count.

    -

    pub fn get_count_since_start(&self) -> Result<u64, &'static str>[src]

    Allows user to get count since start without stopping/releasing the counter.

    -

    pub fn end(self) -> Result<u64, &'static str>[src]

    Stops counting, releases the counter, and returns the count of events since the counter was initialized. +

    pub fn start(&mut self) -> Result<(), &'static str>[src]

    Starts the count.

    +

    pub fn get_count_since_start(&self) -> Result<u64, &'static str>[src]

    Allows user to get count since start without stopping/releasing the counter.

    +

    pub fn end(self) -> Result<u64, &'static str>[src]

    Stops counting, releases the counter, and returns the count of events since the counter was initialized. This will consume the counter object since after freeing the counter, the counter should not be accessed.

    -

    pub fn diff(&self) -> u64[src]

    lightweight function with no checks to get the counter value from when it was started.

    -

    Trait Implementations

    impl Drop for Counter[src]

    fn drop(&mut self)[src]

    Executes the destructor for this type. Read more

    +

    pub fn diff(&self) -> u64[src]

    lightweight function with no checks to get the counter value from when it was started.

    +

    Trait Implementations

    impl Drop for Counter[src]

    fn drop(&mut self)[src]

    Executes the destructor for this type. Read more

    Auto Trait Implementations

    impl Send for Counter

    impl Sync for Counter

    impl Unpin for Counter

    Blanket Implementations

    impl<T> Any for T where
        T: 'static + ?Sized
    [src]

    pub fn type_id(&self) -> TypeId[src]

    Gets the TypeId of self. Read more

    impl<T> Borrow<T> for T where
        T: ?Sized
    [src]

    pub fn borrow(&self) -> &T[src]

    Immutably borrows from an owned value. Read more

    impl<T> BorrowMut<T> for T where
        T: ?Sized
    [src]

    pub fn borrow_mut(&mut self) -> &mut T[src]

    Mutably borrows from an owned value. Read more

    diff --git a/doc/pmu_x86/struct.SampleResults.html b/doc/pmu_x86/struct.SampleResults.html index 4a55dd9645..d7c3f35a52 100644 --- a/doc/pmu_x86/struct.SampleResults.html +++ b/doc/pmu_x86/struct.SampleResults.html @@ -1,7 +1,7 @@ SampleResults in pmu_x86 - Rust

    Struct pmu_x86::SampleResults[][src]

    pub struct SampleResults {
    +                Change settings

    Struct pmu_x86::SampleResults[][src]

    pub struct SampleResults {
         pub instruction_pointers: Vec<VirtualAddress>,
         pub task_ids: Vec<usize>,
     }
    Expand description

    Stores the instruction pointers and corresponding task IDs from the samples

    diff --git a/doc/runqueue_priority/index.html b/doc/runqueue_priority/index.html index 25dd157c60..52abebc8b0 100644 --- a/doc/runqueue_priority/index.html +++ b/doc/runqueue_priority/index.html @@ -1,7 +1,7 @@ runqueue_priority - Rust

    Crate runqueue_priority[][src]

    Expand description

    This crate contains the RunQueue structure, for priority scheduler. + Change settings

    Crate runqueue_priority[][src]

    Expand description

    This crate contains the RunQueue structure, for priority scheduler. RunQueue structure is essentially a list of Tasks that it used for scheduling purposes.

    Structs

    diff --git a/doc/runqueue_priority/struct.PriorityTaskRef.html b/doc/runqueue_priority/struct.PriorityTaskRef.html index 106efcc1d0..6b1e1bdd10 100644 --- a/doc/runqueue_priority/struct.PriorityTaskRef.html +++ b/doc/runqueue_priority/struct.PriorityTaskRef.html @@ -1,6 +1,6 @@ PriorityTaskRef in runqueue_priority - Rust -

    Fields

    priority: u8

    Priority assigned for the task. Max priority = 40, Min priority = 0.

    tokens_remaining: usize

    Remaining tokens in this epoch. A task will be scheduled in an epoch until tokens run out

    -

    Implementations

    impl PriorityTaskRef[src]

    pub fn new(taskref: TaskRef) -> PriorityTaskRef[src]

    Creates a new PriorityTaskRef that wraps the given TaskRef. +

    Implementations

    impl PriorityTaskRef[src]

    pub fn new(taskref: TaskRef) -> PriorityTaskRef[src]

    Creates a new PriorityTaskRef that wraps the given TaskRef. We just give an initial number of tokens to run the task till next scheduling epoch

    -

    pub fn lock(&self) -> MutexIrqSafeGuardRef<'_, Task>[src]

    Obtains the lock on the underlying Task in a read-only, blocking fashion.

    -

    pub fn increment_context_switches(&mut self)[src]

    Increment the number of times the task is picked

    -

    Methods from Deref<Target = TaskRef>

    pub fn join(&self) -> Result<(), &'static str>[src]

    Waits until the given task has finished executing, -i.e., blocks until its runstate is RunState::Exited. -Returns Ok() when the given task is actually exited, +

    pub fn increment_context_switches(&mut self)[src]

    Increment the number of times the task is picked

    +

    Methods from Deref<Target = TaskRef>

    pub fn join(&self) -> Result<(), &'static str>[src]

    Blocks until this task has exited or has been killed.

    +

    Returns Ok() once this task has exited, and Err() if there is a problem or interruption while waiting for it to exit.

    Note

      @@ -31,7 +29,7 @@

      Note

    • You cannot call join() with interrupts disabled, because it will result in permanent deadlock (well, this is only true if the requested task is running on the same cpu… but good enough for now).
    -

    pub fn kill(&self, reason: KillReason) -> Result<(), &'static str>[src]

    Kills this Task (not a clean exit) without allowing it to run to completion. +

    pub fn kill(&self, reason: KillReason) -> Result<(), &'static str>[src]

    Kills this Task (not a clean exit) without allowing it to run to completion. The provided KillReason indicates why it was killed.

    ** Currently this immediately kills the task without performing any unwinding cleanup. @@ -48,30 +46,69 @@

    Return

    Note

    The Task will not be halted immediately – it will finish running its current timeslice, and then never be run again.

    -

    pub fn lock(&self) -> OwningRef<MutexIrqSafeGuard<'_, Task>, Task>[src]

    Obtains the lock on the underlying Task in a read-only, blocking fashion. -This is okay because we want to allow any other part of the OS to read -the details of the Task struct.

    -

    pub fn block(&self)[src]

    Blocks this Task by setting its RunState to blocked.

    -

    pub fn unblock(&self)[src]

    Unblocks this Task by setting its RunState to runnable.

    -

    pub fn set_kill_handler(
        &self,
        callback: Box<dyn Fn(&KillReason) + 'static + Send, Global>
    )
    [src]

    Registers a function or closure that will be called if this Task panics -or otherwise fails (e.g., due to a machine exception). -The given callback will be invoked before the task is cleaned up via stack unwinding.

    +

    Methods from Deref<Target = Task>

    pub fn set_env(&self, new_env: Arc<Mutex<Environment, Spin>>)[src]

    Sets the Environment of this Task.

    Locking / Deadlock

    -

    Obtains a write lock on the enclosed Task in order to mutate its state.

    -

    pub fn take_kill_handler(
        &self
    ) -> Option<Box<dyn Fn(&KillReason) + 'static + Send, Global>>
    [src]

    Takes ownership of this Task’s KillHandler closure/function if one exists, -and returns it so it can be invoked without holding this Task’s Mutex. -After invoking this, the Task’s kill_handler will be None.

    +

    Obtains the lock on this Task’s inner state in order to mutate it.

    +

    pub fn get_env(&self) -> Arc<Mutex<Environment, Spin>>[src]

    Gets a reference to this task’s Environment.

    Locking / Deadlock

    -

    Obtains a write lock on the enclosed Task in order to mutate its state.

    -

    pub fn take_exit_value(&self) -> Option<ExitValue>[src]

    Takes ownership of this Task’s exit value and returns it, -if and only if this Task was in the Exited runstate. -After invoking this, the Task’s runstate will be Reaped.

    +

    Obtains the lock on this Task’s inner state in order to access it.

    +

    pub fn is_running(&self) -> bool[src]

    Returns true if this Task is currently running.

    +

    pub fn running_on_cpu(&self) -> Option<u8>[src]

    Returns the APIC ID of the CPU this Task is currently running on.

    +

    pub fn pinned_core(&self) -> Option<u8>[src]

    Returns the APIC ID of the CPU this Task is pinned on, +or None if it is not pinned.

    +

    pub fn runstate(&self) -> RunState[src]

    Returns the current RunState of this Task.

    +

    pub fn is_runnable(&self) -> bool[src]

    Returns true if this Task is Runnable, i.e., able to be scheduled in.

    +

    Note

    +

    This does NOT mean that this Task is actually currently running, just that it is able to be run.

    +

    pub fn get_namespace(&self) -> &Arc<CrateNamespace>[src]

    Returns the namespace in which this Task is loaded/linked into and runs within.

    +

    pub fn with_kstack<R, F>(&self, func: F) -> R where
        F: FnOnce(&Stack) -> R, 
    [src]

    Exposes read-only access to this Task’s Stack by invoking +the given func with a reference to its kernel stack.

    Locking / Deadlock

    -

    Obtains a write lock on the enclosed Task in order to mutate its state.

    -

    pub fn set_env(&self, new_env: Arc<Mutex<Environment, Spin>>)[src]

    Sets the Environment of this Task.

    -

    pub fn get_env(&self) -> Arc<Mutex<Environment, Spin>>[src]

    Gets a reference to this task’s Environment.

    -

    pub fn get_namespace(&self) -> Arc<CrateNamespace>[src]

    Gets a reference to this task’s CrateNamespace.

    -

    pub fn is_restartable(&self) -> bool[src]

    Trait Implementations

    impl Clone for PriorityTaskRef[src]

    fn clone(&self) -> PriorityTaskRef[src]

    Returns a copy of the value. Read more

    +

    Obtains the lock on this Task’s inner state for the duration of func +in order to access its stack. +The given func must not attempt to obtain that same inner lock.

    +

    pub fn with_restart_info<R, F>(&self, func: F) -> R where
        F: FnOnce(Option<&RestartInfo>) -> R, 
    [src]

    Exposes read-only access to this Task’s RestartInfo by invoking +the given func with a reference to its RestartInfo.

    +

    Locking / Deadlock

    +

    Obtains the lock on this Task’s inner state for the duration of func +in order to access its stack. +The given func must not attempt to obtain that same inner lock.

    +

    pub fn has_exited(&self) -> bool[src]

    Returns true if this Task has been exited, i.e., +if its RunState is either Exited or Reaped.

    +

    pub fn is_application(&self) -> bool[src]

    Returns true if this is an application Task. +This will also return true if this task was spawned by an application task, +since a task inherits the “application crate” field from its “parent” who spawned it.

    +

    pub fn is_userspace(&self) -> bool[src]

    Returns true if this is a userspace Task. +Currently userspace support is disabled, so this always returns false.

    +

    pub fn is_restartable(&self) -> bool[src]

    Returns true if this Task was spawned as a restartable task.

    +

    Locking / Deadlock

    +

    Obtains the lock on this Task’s inner state in order to access it.

    +

    pub fn set_kill_handler(
        &self,
        callback: Box<dyn Fn(&KillReason) + 'static + Send, Global>
    )
    [src]

    Registers a function or closure that will be called if this Task panics +or otherwise fails (e.g., due to a machine exception).

    +

    The given callback will be invoked before the task is cleaned up via stack unwinding.

    +

    Locking / Deadlock

    +

    Obtains the lock on this Task’s inner state in order to mutate it.

    +

    pub fn take_kill_handler(
        &self
    ) -> Option<Box<dyn Fn(&KillReason) + 'static + Send, Global>>
    [src]

    Takes ownership of this Task’s KillHandler closure/function if one exists, +and returns it so it can be invoked without holding this Task’s inner lock. +After invoking this, the Task’s kill_handler will be None.

    +

    Locking / Deadlock

    +

    Obtains the lock on this Task’s inner state in order to mutate it.

    +

    pub fn take_exit_value(&self) -> Option<ExitValue>[src]

    Takes ownership of this Task’s exit value and returns it, +if and only if this Task was in the Exited runstate.

    +

    If this Task was in the Exited runstate, after invoking this, +this Task’s runstate will be set to Reaped +and this Task will be removed from the system task list.

    +

    If this Task was not in the Exited runstate, +nothing is done and None is returned.

    +

    Locking / Deadlock

    +

    Obtains the lock on this Task’s inner state in order to mutate it.

    +

    pub fn block(&self)[src]

    Blocks this Task by setting its runstate to RunState::Blocked.

    +

    pub fn unblock(&self)[src]

    Unblocks this Task by setting its runstate to RunState::Runnable.

    +

    pub fn task_switch(&self, next: &Task, apic_id: u8)[src]

    Switches from the current task (self) to the given next task.

    +

    Locking / Deadlock

    +

    Obtains the locks on both this Task’s inner state and the given next Task’s inner state +in order to mutate them.

    +

    Trait Implementations

    impl Clone for PriorityTaskRef[src]

    fn clone(&self) -> PriorityTaskRef[src]

    Returns a copy of the value. Read more

    fn clone_from(&mut self, source: &Self)1.0.0[src]

    Performs copy-assignment from source. Read more

    impl Debug for PriorityTaskRef[src]

    fn fmt(&self, f: &mut Formatter<'_>) -> Result[src]

    Formats the value using the given formatter. Read more

    impl Deref for PriorityTaskRef[src]

    type Target = TaskRef

    The resulting type after dereferencing.

    diff --git a/doc/runqueue_priority/struct.RunQueue.html b/doc/runqueue_priority/struct.RunQueue.html index 52b48c7840..93445fcf85 100644 --- a/doc/runqueue_priority/struct.RunQueue.html +++ b/doc/runqueue_priority/struct.RunQueue.html @@ -1,25 +1,25 @@ RunQueue in runqueue_priority - Rust

    Struct runqueue_priority::RunQueue[][src]

    pub struct RunQueue { /* fields omitted */ }
    Expand description

    A list of references to Tasks (PriorityTaskRefs) + Change settings

    Struct runqueue_priority::RunQueue[][src]

    pub struct RunQueue { /* fields omitted */ }
    Expand description

    A list of references to Tasks (PriorityTaskRefs) that is used to store the Tasks (and associated scheduler related data) that are runnable on a given core. A queue is used for the token based prioirty scheduler. Runqueue implements Deref and DerefMut traits, which dereferences to VecDeque.

    -

    Implementations

    impl RunQueue[src]

    pub fn update_and_move_to_end(
        &mut self,
        index: usize,
        tokens: usize
    ) -> Option<TaskRef>
    [src]

    Moves the TaskRef at the given index in this RunQueue to the end (back) of this RunQueue, +

    Implementations

    impl RunQueue[src]

    pub fn update_and_move_to_end(
        &mut self,
        index: usize,
        tokens: usize
    ) -> Option<TaskRef>
    [src]

    Moves the TaskRef at the given index in this RunQueue to the end (back) of this RunQueue, and returns a cloned reference to that TaskRef. The number of tokens is reduced by one and number of context switches is increased by one. This function is used when the task is selected by the scheduler

    -

    pub fn init(which_core: u8) -> Result<(), &'static str>[src]

    Creates a new RunQueue for the given core, which is an apic_id

    -

    pub fn get_runqueue(which_core: u8) -> Option<&'static RwLockIrqSafe<RunQueue>>[src]

    Returns RunQueue for the given core, which is an apic_id.

    -

    pub fn get_least_busy_core() -> Option<u8>[src]

    Returns the “least busy” core, which is currently very simple, based on runqueue size.

    -

    pub fn add_task_to_any_runqueue(task: TaskRef) -> Result<(), &'static str>[src]

    Chooses the “least busy” core’s runqueue (based on simple runqueue-size-based load balancing) +

    pub fn init(which_core: u8) -> Result<(), &'static str>[src]

    Creates a new RunQueue for the given core, which is an apic_id

    +

    pub fn get_runqueue(which_core: u8) -> Option<&'static RwLockIrqSafe<RunQueue>>[src]

    Returns RunQueue for the given core, which is an apic_id.

    +

    pub fn get_least_busy_core() -> Option<u8>[src]

    Returns the “least busy” core, which is currently very simple, based on runqueue size.

    +

    pub fn add_task_to_any_runqueue(task: TaskRef) -> Result<(), &'static str>[src]

    Chooses the “least busy” core’s runqueue (based on simple runqueue-size-based load balancing) and adds the given Task reference to that core’s runqueue.

    -

    pub fn add_task_to_specific_runqueue(
        which_core: u8,
        task: TaskRef
    ) -> Result<(), &'static str>
    [src]

    Convenience method that adds the given Task reference to given core’s runqueue.

    -

    pub fn remove_task(&mut self, task: &TaskRef) -> Result<(), &'static str>[src]

    Removes a TaskRef from this RunQueue.

    -

    pub fn remove_task_from_all(task: &TaskRef) -> Result<(), &'static str>[src]

    Removes a TaskRef from all RunQueues that exist on the entire system.

    +

    pub fn add_task_to_specific_runqueue(
        which_core: u8,
        task: TaskRef
    ) -> Result<(), &'static str>
    [src]

    Convenience method that adds the given Task reference to given core’s runqueue.

    +

    pub fn remove_task(&mut self, _task: &TaskRef) -> Result<(), &'static str>[src]

    Removes a TaskRef from this RunQueue.

    +

    pub fn remove_task_from_all(task: &TaskRef) -> Result<(), &'static str>[src]

    Removes a TaskRef from all RunQueues that exist on the entire system.

    This is a brute force approach that iterates over all runqueues.

    -

    pub fn set_priority(task: &TaskRef, priority: u8) -> Result<(), &'static str>[src]

    Sets the priority of the given Task in all the RunQueue structures

    -

    pub fn get_priority(task: &TaskRef) -> Option<u8>[src]

    Output the priority of the given task. +

    pub fn set_priority(task: &TaskRef, priority: u8) -> Result<(), &'static str>[src]

    Sets the priority of the given Task in all the RunQueue structures

    +

    pub fn get_priority(task: &TaskRef) -> Option<u8>[src]

    Output the priority of the given task. Outputs None if the task is not found in any of the runqueues.

    Methods from Deref<Target = VecDeque<PriorityTaskRef>>

    pub fn get(&self, index: usize) -> Option<&T>1.0.0[src]

    Provides a reference to the element at the given index.

    Element at index 0 is the front of the queue.

    @@ -826,10 +826,10 @@

    Examples< buf.resize(5, 20); assert_eq!(buf, [5, 10, 20, 20, 20]);

    -

    Trait Implementations

    impl Debug for RunQueue[src]

    fn fmt(&self, f: &mut Formatter<'_>) -> Result[src]

    Formats the value using the given formatter. Read more

    -

    impl Deref for RunQueue[src]

    type Target = VecDeque<PriorityTaskRef>

    The resulting type after dereferencing.

    -

    fn deref(&self) -> &VecDeque<PriorityTaskRef>[src]

    Dereferences the value.

    -

    impl DerefMut for RunQueue[src]

    fn deref_mut(&mut self) -> &mut VecDeque<PriorityTaskRef>[src]

    Mutably dereferences the value.

    +

    Trait Implementations

    impl Debug for RunQueue[src]

    fn fmt(&self, f: &mut Formatter<'_>) -> Result[src]

    Formats the value using the given formatter. Read more

    +

    impl Deref for RunQueue[src]

    type Target = VecDeque<PriorityTaskRef>

    The resulting type after dereferencing.

    +

    fn deref(&self) -> &VecDeque<PriorityTaskRef>[src]

    Dereferences the value.

    +

    impl DerefMut for RunQueue[src]

    fn deref_mut(&mut self) -> &mut VecDeque<PriorityTaskRef>[src]

    Mutably dereferences the value.

    Auto Trait Implementations

    impl Send for RunQueue

    impl Sync for RunQueue

    impl Unpin for RunQueue

    Blanket Implementations

    impl<T> Any for T where
        T: 'static + ?Sized
    [src]

    pub fn type_id(&self) -> TypeId[src]

    Gets the TypeId of self. Read more

    impl<T> Borrow<T> for T where
        T: ?Sized
    [src]

    pub fn borrow(&self) -> &T[src]

    Immutably borrows from an owned value. Read more

    impl<T> BorrowMut<T> for T where
        T: ?Sized
    [src]

    pub fn borrow_mut(&mut self) -> &mut T[src]

    Mutably borrows from an owned value. Read more

    diff --git a/doc/runqueue_round_robin/index.html b/doc/runqueue_round_robin/index.html index 2f2c93a789..c5195348e2 100644 --- a/doc/runqueue_round_robin/index.html +++ b/doc/runqueue_round_robin/index.html @@ -1,7 +1,7 @@ runqueue_round_robin - Rust

    Crate runqueue_round_robin[][src]

    Expand description

    This crate contains the RunQueue structure, for round robin scheduler. + Change settings

    Crate runqueue_round_robin[][src]

    Expand description

    This crate contains the RunQueue structure, for round robin scheduler. RunQueue structure is essentially a list of Tasks that is used for scheduling purposes.

    Structs

    diff --git a/doc/runqueue_round_robin/struct.RoundRobinTaskRef.html b/doc/runqueue_round_robin/struct.RoundRobinTaskRef.html index 6fb0fbfbee..5388382f19 100644 --- a/doc/runqueue_round_robin/struct.RoundRobinTaskRef.html +++ b/doc/runqueue_round_robin/struct.RoundRobinTaskRef.html @@ -1,6 +1,6 @@ RoundRobinTaskRef in runqueue_round_robin - Rust -

    Methods from Deref<Target = TaskRef>

    pub fn join(&self) -> Result<(), &'static str>[src]

    Blocks until this task has exited or has been killed.

    +

    Returns Ok() once this task has exited, and Err() if there is a problem or interruption while waiting for it to exit.

    Note

      @@ -25,7 +24,7 @@

      Note

    • You cannot call join() with interrupts disabled, because it will result in permanent deadlock (well, this is only true if the requested task is running on the same cpu… but good enough for now).
    -

    pub fn kill(&self, reason: KillReason) -> Result<(), &'static str>[src]

    Kills this Task (not a clean exit) without allowing it to run to completion. +

    pub fn kill(&self, reason: KillReason) -> Result<(), &'static str>[src]

    Kills this Task (not a clean exit) without allowing it to run to completion. The provided KillReason indicates why it was killed.

    ** Currently this immediately kills the task without performing any unwinding cleanup. @@ -42,30 +41,69 @@

    Return

    Note

    The Task will not be halted immediately – it will finish running its current timeslice, and then never be run again.

    -

    pub fn lock(&self) -> OwningRef<MutexIrqSafeGuard<'_, Task>, Task>[src]

    Obtains the lock on the underlying Task in a read-only, blocking fashion. -This is okay because we want to allow any other part of the OS to read -the details of the Task struct.

    -

    pub fn block(&self)[src]

    Blocks this Task by setting its RunState to blocked.

    -

    pub fn unblock(&self)[src]

    Unblocks this Task by setting its RunState to runnable.

    -

    pub fn set_kill_handler(
        &self,
        callback: Box<dyn Fn(&KillReason) + 'static + Send, Global>
    )
    [src]

    Registers a function or closure that will be called if this Task panics -or otherwise fails (e.g., due to a machine exception). -The given callback will be invoked before the task is cleaned up via stack unwinding.

    +

    Methods from Deref<Target = Task>

    pub fn set_env(&self, new_env: Arc<Mutex<Environment, Spin>>)[src]

    Sets the Environment of this Task.

    Locking / Deadlock

    -

    Obtains a write lock on the enclosed Task in order to mutate its state.

    -

    pub fn take_kill_handler(
        &self
    ) -> Option<Box<dyn Fn(&KillReason) + 'static + Send, Global>>
    [src]

    Takes ownership of this Task’s KillHandler closure/function if one exists, -and returns it so it can be invoked without holding this Task’s Mutex. -After invoking this, the Task’s kill_handler will be None.

    +

    Obtains the lock on this Task’s inner state in order to mutate it.

    +

    pub fn get_env(&self) -> Arc<Mutex<Environment, Spin>>[src]

    Gets a reference to this task’s Environment.

    Locking / Deadlock

    -

    Obtains a write lock on the enclosed Task in order to mutate its state.

    -

    pub fn take_exit_value(&self) -> Option<ExitValue>[src]

    Takes ownership of this Task’s exit value and returns it, -if and only if this Task was in the Exited runstate. -After invoking this, the Task’s runstate will be Reaped.

    +

    Obtains the lock on this Task’s inner state in order to access it.

    +

    pub fn is_running(&self) -> bool[src]

    Returns true if this Task is currently running.

    +

    pub fn running_on_cpu(&self) -> Option<u8>[src]

    Returns the APIC ID of the CPU this Task is currently running on.

    +

    pub fn pinned_core(&self) -> Option<u8>[src]

    Returns the APIC ID of the CPU this Task is pinned on, +or None if it is not pinned.

    +

    pub fn runstate(&self) -> RunState[src]

    Returns the current RunState of this Task.

    +

    pub fn is_runnable(&self) -> bool[src]

    Returns true if this Task is Runnable, i.e., able to be scheduled in.

    +

    Note

    +

    This does NOT mean that this Task is actually currently running, just that it is able to be run.

    +

    pub fn get_namespace(&self) -> &Arc<CrateNamespace>[src]

    Returns the namespace in which this Task is loaded/linked into and runs within.

    +

    pub fn with_kstack<R, F>(&self, func: F) -> R where
        F: FnOnce(&Stack) -> R, 
    [src]

    Exposes read-only access to this Task’s Stack by invoking +the given func with a reference to its kernel stack.

    Locking / Deadlock

    -

    Obtains a write lock on the enclosed Task in order to mutate its state.

    -

    pub fn set_env(&self, new_env: Arc<Mutex<Environment, Spin>>)[src]

    Sets the Environment of this Task.

    -

    pub fn get_env(&self) -> Arc<Mutex<Environment, Spin>>[src]

    Gets a reference to this task’s Environment.

    -

    pub fn get_namespace(&self) -> Arc<CrateNamespace>[src]

    Gets a reference to this task’s CrateNamespace.

    -

    pub fn is_restartable(&self) -> bool[src]

    Trait Implementations

    impl Clone for RoundRobinTaskRef[src]

    fn clone(&self) -> RoundRobinTaskRef[src]

    Returns a copy of the value. Read more

    +

    Obtains the lock on this Task’s inner state for the duration of func +in order to access its stack. +The given func must not attempt to obtain that same inner lock.

    +

    pub fn with_restart_info<R, F>(&self, func: F) -> R where
        F: FnOnce(Option<&RestartInfo>) -> R, 
    [src]

    Exposes read-only access to this Task’s RestartInfo by invoking +the given func with a reference to its RestartInfo.

    +

    Locking / Deadlock

    +

    Obtains the lock on this Task’s inner state for the duration of func +in order to access its stack. +The given func must not attempt to obtain that same inner lock.

    +

    pub fn has_exited(&self) -> bool[src]

    Returns true if this Task has been exited, i.e., +if its RunState is either Exited or Reaped.

    +

    pub fn is_application(&self) -> bool[src]

    Returns true if this is an application Task. +This will also return true if this task was spawned by an application task, +since a task inherits the “application crate” field from its “parent” who spawned it.

    +

    pub fn is_userspace(&self) -> bool[src]

    Returns true if this is a userspace Task. +Currently userspace support is disabled, so this always returns false.

    +

    pub fn is_restartable(&self) -> bool[src]

    Returns true if this Task was spawned as a restartable task.

    +

    Locking / Deadlock

    +

    Obtains the lock on this Task’s inner state in order to access it.

    +

    pub fn set_kill_handler(
        &self,
        callback: Box<dyn Fn(&KillReason) + 'static + Send, Global>
    )
    [src]

    Registers a function or closure that will be called if this Task panics +or otherwise fails (e.g., due to a machine exception).

    +

    The given callback will be invoked before the task is cleaned up via stack unwinding.

    +

    Locking / Deadlock

    +

    Obtains the lock on this Task’s inner state in order to mutate it.

    +

    pub fn take_kill_handler(
        &self
    ) -> Option<Box<dyn Fn(&KillReason) + 'static + Send, Global>>
    [src]

    Takes ownership of this Task’s KillHandler closure/function if one exists, +and returns it so it can be invoked without holding this Task’s inner lock. +After invoking this, the Task’s kill_handler will be None.

    +

    Locking / Deadlock

    +

    Obtains the lock on this Task’s inner state in order to mutate it.

    +

    pub fn take_exit_value(&self) -> Option<ExitValue>[src]

    Takes ownership of this Task’s exit value and returns it, +if and only if this Task was in the Exited runstate.

    +

    If this Task was in the Exited runstate, after invoking this, +this Task’s runstate will be set to Reaped +and this Task will be removed from the system task list.

    +

    If this Task was not in the Exited runstate, +nothing is done and None is returned.

    +

    Locking / Deadlock

    +

    Obtains the lock on this Task’s inner state in order to mutate it.

    +

    pub fn block(&self)[src]

    Blocks this Task by setting its runstate to RunState::Blocked.

    +

    pub fn unblock(&self)[src]

    Unblocks this Task by setting its runstate to RunState::Runnable.

    +

    pub fn task_switch(&self, next: &Task, apic_id: u8)[src]

    Switches from the current task (self) to the given next task.

    +

    Locking / Deadlock

    +

    Obtains the locks on both this Task’s inner state and the given next Task’s inner state +in order to mutate them.

    +

    Trait Implementations

    impl Clone for RoundRobinTaskRef[src]

    fn clone(&self) -> RoundRobinTaskRef[src]

    Returns a copy of the value. Read more

    fn clone_from(&mut self, source: &Self)1.0.0[src]

    Performs copy-assignment from source. Read more

    impl Debug for RoundRobinTaskRef[src]

    fn fmt(&self, f: &mut Formatter<'_>) -> Result[src]

    Formats the value using the given formatter. Read more

    impl Deref for RoundRobinTaskRef[src]

    type Target = TaskRef

    The resulting type after dereferencing.

    diff --git a/doc/runqueue_round_robin/struct.RunQueue.html b/doc/runqueue_round_robin/struct.RunQueue.html index 157ff72142..fb6d082c97 100644 --- a/doc/runqueue_round_robin/struct.RunQueue.html +++ b/doc/runqueue_round_robin/struct.RunQueue.html @@ -6,7 +6,7 @@ that are runnable on a given core. A queue is used for the round robin scheduler. Runqueue implements Deref and DerefMut traits, which dereferences to VecDeque.

    -

    Implementations

    impl RunQueue[src]

    pub fn move_to_end(&mut self, index: usize) -> Option<TaskRef>[src]

    Moves the TaskRef at the given index into this RunQueue to the end (back) of this RunQueue, +

    Implementations

    impl RunQueue[src]

    pub fn move_to_end(&mut self, index: usize) -> Option<TaskRef>[src]

    Moves the TaskRef at the given index into this RunQueue to the end (back) of this RunQueue, and returns a cloned reference to that TaskRef.

    pub fn init(which_core: u8) -> Result<(), &'static str>[src]

    Creates a new RunQueue for the given core, which is an apic_id.

    pub fn get_runqueue(which_core: u8) -> Option<&'static RwLockIrqSafe<RunQueue>>[src]

    Returns the RunQueue for the given core, which is an apic_id.

    @@ -14,8 +14,8 @@

    pub fn add_task_to_any_runqueue(task: TaskRef) -> Result<(), &'static str>[src]

    Chooses the “least busy” core’s runqueue (based on simple runqueue-size-based load balancing) and adds the given Task reference to that core’s runqueue.

    pub fn add_task_to_specific_runqueue(
        which_core: u8,
        task: TaskRef
    ) -> Result<(), &'static str>
    [src]

    Convenience method that adds the given Task reference to given core’s runqueue.

    -

    pub fn remove_task(&mut self, task: &TaskRef) -> Result<(), &'static str>[src]

    Removes a TaskRef from this RunQueue.

    -

    pub fn remove_task_from_all(task: &TaskRef) -> Result<(), &'static str>[src]

    Removes a TaskRef from all RunQueues that exist on the entire system.

    +

    pub fn remove_task(&mut self, _task: &TaskRef) -> Result<(), &'static str>[src]

    Removes a TaskRef from this RunQueue.

    +

    pub fn remove_task_from_all(task: &TaskRef) -> Result<(), &'static str>[src]

    Removes a TaskRef from all RunQueues that exist on the entire system.

    This is a brute force approach that iterates over all runqueues.

    Methods from Deref<Target = VecDeque<RoundRobinTaskRef>>

    pub fn get(&self, index: usize) -> Option<&T>1.0.0[src]

    Provides a reference to the element at the given index.

    Element at index 0 is the front of the queue.

    diff --git a/doc/scheduler/fn.get_priority.html b/doc/scheduler/fn.get_priority.html index fd01adc6f0..0a4e442b23 100644 --- a/doc/scheduler/fn.get_priority.html +++ b/doc/scheduler/fn.get_priority.html @@ -1,7 +1,7 @@ get_priority in scheduler - Rust

    Function scheduler::get_priority[][src]

    pub fn get_priority(_task: &TaskRef) -> Option<u8>
    Expand description

    Returns the priority of a given task. + Change settings

    Function scheduler::get_priority[][src]

    pub fn get_priority(_task: &TaskRef) -> Option<u8>
    Expand description

    Returns the priority of a given task. This function returns None when a scheduler without priority is loaded.

    \ No newline at end of file diff --git a/doc/scheduler/fn.schedule.html b/doc/scheduler/fn.schedule.html index 0fe3cfbd6e..f63d956c25 100644 --- a/doc/scheduler/fn.schedule.html +++ b/doc/scheduler/fn.schedule.html @@ -1,7 +1,7 @@ schedule in scheduler - Rust

    Function scheduler::schedule[][src]

    pub fn schedule() -> bool
    Expand description

    Yields the current CPU by selecting a new Task to run + Change settings

    Function scheduler::schedule[][src]

    pub fn schedule() -> bool
    Expand description

    Yields the current CPU by selecting a new Task to run and then performs a task switch to that new Task.

    Interrupts will be disabled while this function runs.

    diff --git a/doc/scheduler/fn.set_priority.html b/doc/scheduler/fn.set_priority.html index 1054fc0c38..cf1a99aff3 100644 --- a/doc/scheduler/fn.set_priority.html +++ b/doc/scheduler/fn.set_priority.html @@ -1,7 +1,7 @@ set_priority in scheduler - Rust

    Function scheduler::set_priority[][src]

    pub fn set_priority(_task: &TaskRef, _priority: u8) -> Result<(), &'static str>
    Expand description

    Changes the priority of the given task with the given priority level. + Change settings

    Function scheduler::set_priority[][src]

    pub fn set_priority(_task: &TaskRef, _priority: u8) -> Result<(), &'static str>
    Expand description

    Changes the priority of the given task with the given priority level. Priority values must be between 40 (maximum priority) and 0 (minimum prriority). This function returns an error when a scheduler without priority is loaded.

    diff --git a/doc/scheduler/index.html b/doc/scheduler/index.html index 8bcc49014f..c51035a517 100644 --- a/doc/scheduler/index.html +++ b/doc/scheduler/index.html @@ -1,7 +1,7 @@ scheduler - Rust

    Crate scheduler[][src]

    Functions

    + Change settings

    Crate scheduler[][src]

    Functions

    get_priority

    Returns the priority of a given task. This function returns None when a scheduler without priority is loaded.

    schedule

    Yields the current CPU by selecting a new Task to run diff --git a/doc/scheduler_priority/index.html b/doc/scheduler_priority/index.html index 03a51021de..b3f21b7145 100644 --- a/doc/scheduler_priority/index.html +++ b/doc/scheduler_priority/index.html @@ -1,7 +1,7 @@ scheduler_priority - Rust

    Crate scheduler_priority[][src]

    Expand description

    This crate picks the next task on token based scheduling policy. + Change settings

    Crate scheduler_priority[][src]

    Expand description

    This crate picks the next task on token based scheduling policy. At the begining of each scheduling epoch a set of tokens is distributed among tasks depending on their priority. [tokens assigned to each task = (prioirty of each task / prioirty of all tasks) * length of epoch]. diff --git a/doc/scheduler_round_robin/fn.select_next_task.html b/doc/scheduler_round_robin/fn.select_next_task.html index 382b452992..61cda7c8d5 100644 --- a/doc/scheduler_round_robin/fn.select_next_task.html +++ b/doc/scheduler_round_robin/fn.select_next_task.html @@ -1,7 +1,7 @@ select_next_task in scheduler_round_robin - Rust

    Function scheduler_round_robin::select_next_task[][src]

    pub fn select_next_task(apic_id: u8) -> Option<TaskRef>
    Expand description

    This defines the round robin scheduler policy. + Change settings

    Function scheduler_round_robin::select_next_task[][src]

    pub fn select_next_task(apic_id: u8) -> Option<TaskRef>
    Expand description

    This defines the round robin scheduler policy. Returns None if there is no schedule-able task

    \ No newline at end of file diff --git a/doc/scheduler_round_robin/index.html b/doc/scheduler_round_robin/index.html index 1133cb7c8a..69d4cc3330 100644 --- a/doc/scheduler_round_robin/index.html +++ b/doc/scheduler_round_robin/index.html @@ -1,7 +1,7 @@ scheduler_round_robin - Rust

    Crate scheduler_round_robin[][src]

    Expand description

    This crate picks the next task in round robin fashion. + Change settings

    Crate scheduler_round_robin[][src]

    Expand description

    This crate picks the next task in round robin fashion. Each time the task at the front of the queue is picked. This task is then moved to the back of the queue.

    Functions

    diff --git a/doc/search-index.js b/doc/search-index.js index a558c87b4f..f8840621fb 100644 --- a/doc/search-index.js +++ b/doc/search-index.js @@ -4,17 +4,17 @@ var searchIndex = JSON.parse('{\ "acpi_table":{"doc":"Definitions for the ACPI table","t":[6,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11],"n":["AcpiSignature","AcpiTables","TableLocation","add_table_location","borrow","borrow","borrow_mut","borrow_mut","default","fmt","from","from","into","into","map_new_table","mapping","offset","slice_offset_and_length","table","table_location","table_mut","table_slice","table_slice_mut","try_from","try_from","try_into","try_into","type_id","type_id"],"q":["acpi_table","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["All ACPI tables are identified by a 4-byte signature, …","The struct holding all ACPI tables and records of where …","A record that tracks where an ACPI Table exists in memory,…","Add the location and size details of a discovered ACPI …","","","","","","","","","","","Map the ACPI table that exists at the given …","Returns an immutable reference to the underlying …","The offset of the statically-sized part of the table, …","The offset and length of the dynamically-sized part of …","Returns a reference to the table that matches the …","Returns the location of the ACPI table based on the given …","Returns a mutable reference to the table that matches the …","Returns a reference to the dynamically-sized part at the …","Returns a mutable reference to the dynamically-sized part …","","","","","",""],"i":[0,0,0,1,1,2,1,2,1,2,1,2,1,2,1,1,2,2,1,1,1,1,1,1,2,1,2,1,2],"f":[null,null,null,[[["acpisignature",6],["physicaladdress",3],["option",4]],[["result",4],["str",15]]],[[]],[[]],[[]],[[]],[[],["acpitables",3]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[["pagetable",3],["physicaladdress",3]],[["str",15],["result",4]]],[[],["mappedpages",3]],null,null,[[["acpisignature",6]],[["str",15],["result",4]]],[[["acpisignature",6]],[["tablelocation",3],["option",4]]],[[["acpisignature",6]],[["str",15],["result",4]]],[[["acpisignature",6]],[["str",15],["result",4]]],[[["acpisignature",6]],[["str",15],["result",4]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]]],"p":[[3,"AcpiTables"],[3,"TableLocation"]]},\ "acpi_table_handler":{"doc":"Handles ACPI tables based on signatures.","t":[5],"n":["acpi_table_handler"],"q":["acpi_table_handler"],"d":["The single arbiter of ACPI Table types, which contains a …"],"i":[0],"f":[[[["physicaladdress",3],["acpisignature",6],["acpitables",3],["usize",15]],[["result",4],["str",15]]]],"p":[]},\ "ap_start":{"doc":"Routines for booting up secondary CPU cores, aka …","t":[7,5,5],"n":["AP_READY_FLAG","insert_ap_stack","kstart_ap"],"q":["ap_start","",""],"d":["An atomic flag used for synchronizing progress between …","Insert a new stack that was allocated for the AP with the …","Entry to rust for an AP. The arguments must match the …"],"i":[0,0,0],"f":[null,[[["stack",3],["u8",15]]],[[["u16",15],["u8",15],["virtualaddress",3]]]],"p":[]},\ -"apic":{"doc":"","t":[13,17,13,13,3,7,4,4,3,13,13,13,3,13,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,12,11,12,11,11,12,11,11,11,11,11,11,11,5,11,11,5,5,5,5,11,11,12,5,12,12,12,11,11,11,11,11,5,12,12,12,12,12,12,12,12,12,12,12,11,11,11,12,12,12,12,11,11,11,11,11,12,12,12,12,12,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["APIC","APIC_SPURIOUS_INTERRUPT_VECTOR","All","AllButMe","ApicRegisters","INTERRUPT_CHIP","InterruptChip","LapicIpiDestination","LocalApic","Me","One","PIC","RegisterArray","X2APIC","apic_id","arbitration_priority","as_icr_value","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clear_error","clear_pmi_mask","clone","clone_into","core_count","destination_format","eoi","eoi","eq","error","error_status","fmt","fmt","from","from","from","from","from","get_bsp_id","get_irr","get_isr","get_lapics","get_my_apic","get_my_apic_id","has_x2apic","icr","id","in_service_registers","init","interrupt_command_high","interrupt_command_low","interrupt_request_registers","into","into","into","into","into","is_bsp","is_bsp","lapic_id","lapic_version","logical_destination","lvt_cmci","lvt_error","lvt_lint0","lvt_lint1","lvt_perf_monitor","lvt_thermal","lvt_timer","new","only_derive_is_allowed_to_implement_this_trait","only_derive_is_allowed_to_implement_this_trait","processor","processor_priority","regs","remote_read","send_ipi","send_nmi_ipi","set_icr","set_ldr","set_nmi","spurious_interrupt_vector","task_priority","timer_current_count","timer_divide","timer_initial_count","to_owned","trigger_mode_registers","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","version"],"q":["apic","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["","","Send IPI to all APICs, including myself","Send IPI to all APICs except for myself","A structure that offers access to APIC/xAPIC through its …","The interrupt chip that is currently configured on this …","","The possible destination shorthand values for IPI ICR.","This structure represents a single APIC in the system, …","Send IPI to my own (the current) APIC ","Send IPI to a specific APIC ","","","","The APIC system id of this APIC.","","Convert the enum to a bitmask value to be used in the …","","","","","","","","","","","","Clears the interrupt mask bit in the apic performance …","","","Returns the number of processor core (local APICs) that …","","","","","","","","","","","","","","","Returns the values of the 8 request registers for this …","Returns the values of the 8 in-service registers for this …","Returns a reference to the list of LocalApics, one per …","Returns a reference to the LocalApic for the currently …","Returns the APIC ID of the currently executing processor …","Returns true if the machine has support for x2apic","","","","Initially maps the base APIC MMIO register frames so that …","","","","","","","","","Returns true if the currently executing processor core is …","Whether this LocalApic is the bootstrap processor (the …","This Lapic’s ID. Some systems allow setting the ID, but …","","","","","","","","","","This MUST be invoked from the AP core itself when it is …","","","The processor id of this APIC.","","Only exists for xapic, should be None for x2apic systems.","","Send an IPI to the cores specified by the given …","Send a NMI IPI to the cores specified by the given …","","","Set the NonMaskableInterrupt redirect for this LocalApic. …","","","","","","","","","","","","","","","","","","","","","","",""],"i":[1,0,2,2,0,0,0,0,0,2,2,1,0,1,3,4,2,2,3,1,4,5,2,3,1,4,5,3,3,1,1,0,4,3,4,1,3,4,3,1,2,3,1,4,5,0,3,3,0,0,0,0,3,3,4,0,4,4,4,2,3,1,4,5,0,3,4,4,4,4,4,4,4,4,4,4,3,4,5,3,4,3,4,3,3,3,3,3,4,4,4,4,4,1,4,2,3,1,4,5,2,3,1,4,5,2,3,1,4,5,3],"f":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[],["u64",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["interruptchip",4]],[[]],[[],["usize",15]],null,[[]],null,[[["interruptchip",4]],["bool",15]],[[],["u32",15]],null,[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[],[["option",4],["u8",15]]],[[]],[[]],[[],["atomicmap",3]],[[],[["rwlockirqsafe",3],["option",4]]],[[],["u8",15]],[[],["bool",15]],[[],["u64",15]],[[],["u8",15]],null,[[["pagetable",3]],[["result",4],["str",15]]],null,null,null,[[]],[[]],[[]],[[]],[[]],[[],["bool",15]],null,null,null,null,null,null,null,null,null,null,null,[[["bool",15],["pagetable",3],["u8",15],["u16",15]],[["localapic",3],["str",15],["result",4]]],[[]],[[]],null,null,null,null,[[["u8",15],["lapicipidestination",4]]],[[["lapicipidestination",4]]],[[["u64",15]]],[[["u32",15]]],[[["u8",15],["u16",15]],[["result",4],["str",15]]],null,null,null,null,null,[[]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["u32",15]]],"p":[[4,"InterruptChip"],[4,"LapicIpiDestination"],[3,"LocalApic"],[3,"ApicRegisters"],[3,"RegisterArray"]]},\ -"async_channel":{"doc":"An asynchronous channel for Inter-Task Communication …","t":[13,13,4,13,4,13,3,13,3,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["ChannelDisconnected","ChannelEmpty","ChannelError","ChannelFull","ChannelStatus","Connected","Receiver","ReceiverDisconnected","Sender","SenderDisconnected","WaitError","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","drop","drop","eq","eq","fmt","fmt","from","from","from","from","into","into","into","into","is_disconnected","is_disconnected","ne","new_channel","receive","send","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_receive","try_send","type_id","type_id","type_id","type_id"],"q":["async_channel","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["Occurs when one end of channel is dropped","Occurs when try_receive is performed on an empty channel","Error type for tracking different type of errors sender …","Occurs when try_send is performed on a full channel","Indicates whether channel is Connected or Disconnected","Channel is working. Initially channel is created with …","The receiver side of a channel.","Set to Disconnected when Receiver end is dropped.","The sender (transmit) side of a channel.","Set to Disconnected when Sender end is dropped.","Occurs when an error occur in WaitQueue","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns true if the channel is disconnected.","Returns true if the channel is disconnected.","","Create a new channel that allows senders and receivers to …","Receive a message, blocking until a message is available …","Send a message, blocking until space in the channel’s …","","","","","","","","","","","","Tries to receive a message, only succeeding if a message …","Tries to send the message, only succeeding if buffer …","","","",""],"i":[1,1,0,1,0,2,0,2,0,2,1,2,1,3,4,2,1,3,4,2,3,4,2,3,4,3,4,2,1,2,1,2,1,3,4,2,1,3,4,3,4,1,0,4,3,2,3,4,2,1,3,4,2,1,3,4,4,3,2,1,3,4],"f":[null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["channelstatus",4]],[[],["sender",3]],[[],["receiver",3]],[[]],[[]],[[]],[[]],[[]],[[["channelstatus",4]],["bool",15]],[[["channelerror",4]],["bool",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[["channelerror",4]],["bool",15]],[[["usize",15]]],[[],[["result",4],["channelerror",4]]],[[],[["channelerror",4],["result",4]]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],[["result",4],["channelerror",4]]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]]],"p":[[4,"ChannelError"],[4,"ChannelStatus"],[3,"Sender"],[3,"Receiver"]]},\ +"apic":{"doc":"","t":[13,17,13,13,3,7,4,4,3,13,13,13,3,13,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,12,11,12,11,11,12,11,11,11,11,11,11,11,5,11,11,5,5,5,5,11,11,12,5,12,12,12,11,11,11,11,11,5,12,12,12,12,12,12,12,12,12,12,12,11,11,11,12,12,12,12,11,11,11,11,11,12,12,12,12,12,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["APIC","APIC_SPURIOUS_INTERRUPT_VECTOR","All","AllButMe","ApicRegisters","INTERRUPT_CHIP","InterruptChip","LapicIpiDestination","LocalApic","Me","One","PIC","RegisterArray","X2APIC","apic_id","arbitration_priority","as_icr_value","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clear_error","clear_pmi_mask","clone","clone_into","core_count","destination_format","eoi","eoi","eq","error","error_status","fmt","fmt","from","from","from","from","from","get_bsp_id","get_irr","get_isr","get_lapics","get_my_apic","get_my_apic_id","has_x2apic","icr","id","in_service_registers","init","interrupt_command_high","interrupt_command_low","interrupt_request_registers","into","into","into","into","into","is_bsp","is_bsp","lapic_id","lapic_version","logical_destination","lvt_cmci","lvt_error","lvt_lint0","lvt_lint1","lvt_perf_monitor","lvt_thermal","lvt_timer","new","only_derive_is_allowed_to_implement_this_trait","only_derive_is_allowed_to_implement_this_trait","processor","processor_priority","regs","remote_read","send_ipi","send_nmi_ipi","set_icr","set_ldr","set_nmi","spurious_interrupt_vector","task_priority","timer_current_count","timer_divide","timer_initial_count","to_owned","trigger_mode_registers","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","version"],"q":["apic","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["","","Send IPI to all APICs, including myself","Send IPI to all APICs except for myself","A structure that offers access to APIC/xAPIC through its …","The interrupt chip that is currently configured on this …","","The possible destination shorthand values for IPI ICR.","This structure represents a single APIC in the system, …","Send IPI to my own (the current) APIC ","Send IPI to a specific APIC ","","","","The APIC system id of this APIC.","","Convert the enum to a bitmask value to be used in the …","","","","","","","","","","","","Clears the interrupt mask bit in the apic performance …","","","Returns the number of processor core (local APICs) that …","","","","","","","","","","","","","","","Returns the values of the 8 request registers for this …","Returns the values of the 8 in-service registers for this …","Returns a reference to the list of LocalApics, one per …","Returns a reference to the LocalApic for the currently …","Returns the APIC ID of the currently executing processor …","Returns true if the machine has support for x2apic","","","","Initially maps the base APIC MMIO register frames so that …","","","","","","","","","Returns true if the currently executing processor core is …","Whether this LocalApic is the bootstrap processor (the …","This Lapic’s ID. Some systems allow setting the ID, but …","","","","","","","","","","This MUST be invoked from the AP core itself when it is …","","","The processor id of this APIC.","","Only exists for xapic, should be None for x2apic systems.","","Send an IPI to the cores specified by the given …","Send a NMI IPI to the cores specified by the given …","","","Set the NonMaskableInterrupt redirect for this LocalApic. …","","","","","","","","","","","","","","","","","","","","","","",""],"i":[1,0,2,2,0,0,0,0,0,2,2,1,0,1,3,4,2,2,3,1,4,5,2,3,1,4,5,3,3,1,1,0,4,3,4,1,3,4,3,1,2,3,1,4,5,0,3,3,0,0,0,0,3,3,4,0,4,4,4,2,3,1,4,5,0,3,4,4,4,4,4,4,4,4,4,4,3,4,5,3,4,3,4,3,3,3,3,3,4,4,4,4,4,1,4,2,3,1,4,5,2,3,1,4,5,2,3,1,4,5,3],"f":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[],["u64",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["interruptchip",4]],[[]],[[],["usize",15]],null,[[]],null,[[["interruptchip",4]],["bool",15]],[[],["u32",15]],null,[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[],[["option",4],["u8",15]]],[[]],[[]],[[],["atomicmap",3]],[[],[["option",4],["rwlockirqsafe",3]]],[[],["u8",15]],[[],["bool",15]],[[],["u64",15]],[[],["u8",15]],null,[[["pagetable",3]],[["result",4],["str",15]]],null,null,null,[[]],[[]],[[]],[[]],[[]],[[],["bool",15]],null,null,null,null,null,null,null,null,null,null,null,[[["bool",15],["pagetable",3],["u8",15],["u16",15]],[["localapic",3],["result",4],["str",15]]],[[]],[[]],null,null,null,null,[[["u8",15],["lapicipidestination",4]]],[[["lapicipidestination",4]]],[[["u64",15]]],[[["u32",15]]],[[["u8",15],["u16",15]],[["result",4],["str",15]]],null,null,null,null,null,[[]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["u32",15]]],"p":[[4,"InterruptChip"],[4,"LapicIpiDestination"],[3,"LocalApic"],[3,"ApicRegisters"],[3,"RegisterArray"]]},\ +"async_channel":{"doc":"An asynchronous channel for Inter-Task Communication …","t":[13,13,4,13,4,13,3,13,3,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["ChannelDisconnected","ChannelEmpty","ChannelError","ChannelFull","ChannelStatus","Connected","Receiver","ReceiverDisconnected","Sender","SenderDisconnected","WaitError","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","drop","drop","eq","eq","fmt","fmt","from","from","from","from","into","into","into","into","is_disconnected","is_disconnected","ne","new_channel","receive","send","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_receive","try_send","type_id","type_id","type_id","type_id"],"q":["async_channel","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["Occurs when one end of channel is dropped","Occurs when try_receive is performed on an empty channel","Error type for tracking different type of errors sender …","Occurs when try_send is performed on a full channel","Indicates whether channel is Connected or Disconnected","Channel is working. Initially channel is created with …","The receiver side of a channel.","Set to Disconnected when Receiver end is dropped.","The sender (transmit) side of a channel.","Set to Disconnected when Sender end is dropped.","Occurs when an error occur in WaitQueue","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns true if the channel is disconnected.","Returns true if the channel is disconnected.","","Create a new channel that allows senders and receivers to …","Receive a message, blocking until a message is available …","Send a message, blocking until space in the channel’s …","","","","","","","","","","","","Tries to receive a message, only succeeding if a message …","Tries to send the message, only succeeding if buffer …","","","",""],"i":[1,1,0,1,0,2,0,2,0,2,1,2,1,3,4,2,1,3,4,2,3,4,2,3,4,3,4,2,1,2,1,2,1,3,4,2,1,3,4,3,4,1,0,4,3,2,3,4,2,1,3,4,2,1,3,4,4,3,2,1,3,4],"f":[null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["channelstatus",4]],[[],["sender",3]],[[],["receiver",3]],[[]],[[]],[[]],[[]],[[]],[[["channelstatus",4]],["bool",15]],[[["channelerror",4]],["bool",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[["channelerror",4]],["bool",15]],[[["usize",15]]],[[],[["result",4],["channelerror",4]]],[[],[["result",4],["channelerror",4]]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],[["result",4],["channelerror",4]]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]]],"p":[[4,"ChannelError"],[4,"ChannelStatus"],[3,"Sender"],[3,"Receiver"]]},\ "ata":{"doc":"Support for accessing ATA drives (IDE).","t":[18,4,3,6,3,3,3,3,3,3,18,18,18,18,18,18,18,18,18,18,18,3,3,18,18,13,13,13,13,18,18,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,11,11,12,12,12,12,12,12,12,11,11,11,11,11,12,11,11,12,11,11,12,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,11,11,11,11,12,12,12,11,11,12,12,12,12,12,12,12,12,12,11,11,12,12,12,12,11,11,12,12,11,11,12,12,12,12,12,12,12,12,12,12,12,11,11,12,11,12,12,12,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,11,11,12,12,12],"n":["ADDRESS_MARK_NOT_FOUND","AtaDeviceType","AtaDrive","AtaDriveRef","AtaError","AtaFirmwareVersion","AtaIdentifyData","AtaModelNumber","AtaSerialNumber","AtaStatus","BAD_BLOCK","BUSY","COMMAND_ABORTED","CORRECTED_DATA","DATA_REQUEST_READY","DRIVE_READY","DRIVE_SEEK_COMPLETE","DRIVE_WRITE_FAULT","ERROR","ID_MARK_NOT_FOUND","INDEX","IdeController","IdeControllerIter","MEDIA_CHANGED","MEDIA_CHANGE_REQUEST","Pata","PataPi","Sata","SataPi","TRACK_0_NOT_FOUND","UNCORRECTABLE_DATA","additional_product_id","additional_supported","advanced_pio_modes","all","all","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","bitand","bitand","bitand_assign","bitand_assign","bitor","bitor","bitor_assign","bitor_assign","bits","bits","bitxor","bitxor","bitxor_assign","bitxor_assign","block_alignment","block_size","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","capabilities","cfa_power_mode1","checksum","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","command_set_active","command_set_active_ext","command_set_support","command_set_support_ext","contains","contains","current_acoustic_value","current_apm_level","current_media_serial_number","current_multi_sector_setting","current_sector_capacity","current_sectors_per_track","data_set_management_feature","default","default","default","default","devices","dsm_cap","empty","empty","enhanced_security_erase_unit","eq","eq","ext_command_supported","extend","extend","extended_num_of_user_addressable_sectors","firmware_version","flush","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","free_fall_control_sensitivity","from","from","from","from","from","from","from","from","from","from","from_bits","from_bits","from_bits_truncate","from_bits_truncate","from_iter","from_iter","general_configuration","hardware_reset_result","hash","hash","insert","insert","inter_seek_delay","intersects","intersects","into","into","into","into","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_iter","is_all","is_all","is_empty","is_empty","is_master","iter","len","major_revision","master_password_id","max_48_bit_lba","max_blocks_per_download_microcode","max_blocks_per_transfer","min_blocks_per_download_microcode","minimum_mw_transfer_cycle_time","minimum_pio_cycle_time","minimum_pio_cycle_time_io_ready","minor_revision","model_number","msn_support","multiword_dma_active","multiword_dma_support","ne","ne","new","next","nominal_form_factor","nominal_media_rotation_rate","normal_security_erase_unit","not","not","num_current_cylinders","num_current_heads","num_cylinders","num_heads","num_sectors_per_track","nv_cache_capabilities","nv_cache_size_lsw","nv_cache_size_msw","nv_cache_time_to_spin_up_in_seconds","partial_cmp","partial_cmp","physical_logical_sector_size","primary_master","primary_slave","queue_depth","read_blocks","read_pio","recommended_acoustic_value","recommended_mw_transfer_cycle_time","remove","remove","reserved_for_expanded_support_and_active","reserved_for_tlc_technical_report","reserved_for_world_wide_name_128","sct_command_transport","secondary_master","secondary_slave","security_status","serial_ata_capabilities","serial_ata_features_enabled","serial_ata_features_supported","serial_number","set","set","signature","size_in_blocks","specific_configuration","stream_min_request_size","streaming_access_latency_dma_pio","streaming_perf_granularity","streaming_transfer_time","streaming_transfer_time_dma","sub","sub","sub_assign","sub_assign","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","toggle","toggle","translation_fields_valid","transport_major_version","transport_minor_version","trusted_computing","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","ultra_dma_active","ultra_dma_support","user_addressable_sectors","vendor_unique1","vendor_unique2","words_per_logical_sector","world_wide_name","write_blocks","write_pio","write_read_verify_sector_count_mode","write_read_verify_sector_count_mode_2_only","write_read_verify_sector_count_mode_3_only"],"q":["ata","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["","The possible types of drive devices that can be attached …","A single ATA drive, either a master or a slave, which …","","The possible error values found in an ATA drive’s error …","An ATA drive’s firmware version is an 8-byte string.","Information that describes an ATA drive, obtained from …","An ATA drive’s model number is a 40-byte string.","An ATA drive’s serial number is a 20-byte string.","The possible status values found in an ATA drive’s …","","When set, the drive’s port values are still changing, …","","","When cleared, the drive is ready for data to be …","When set, the drive is on. When cleared, the drive is …","","","","","","A single IDE controller has two buses with up to two …","Provides an iterator over all AtaDrives in an …","","","A parallel ATA (PATA) drive, like a hard drive. This is …","A parallel ATA (PATA) drive that uses the packet …","A serial ATA (SATA) drive that is operating in legacy IDE …","A serial ATA (SATA) drive that that is operating in …","","","","","","Returns the set containing all flags.","Returns the set containing all flags.","","","","","","","","","","","","","","","","","","","","","Returns the intersection between the two sets of flags.","Returns the intersection between the two sets of flags.","Disables all flags disabled in the set.","Disables all flags disabled in the set.","Returns the union of the two sets of flags.","Returns the union of the two sets of flags.","Adds the set of flags.","Adds the set of flags.","Returns the raw value of the flags currently stored.","Returns the raw value of the flags currently stored.","Returns the left flags, but with all the right flags …","Returns the left flags, but with all the right flags …","Toggles the set of flags.","Toggles the set of flags.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns true all of the flags in other are contained …","Returns true all of the flags in other are contained …","","","","","","","","","","","","","","Returns an empty set of flags","Returns an empty set of flags","","","","MultiSectorSettingValid : 1; ReservedByte59 : 3; …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, dropping any …","","","","","","","Inserts the specified flags in-place.","Inserts the specified flags in-place.","","Returns true if there are flags common to both self and …","Returns true if there are flags common to both self and …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns true if all flags are currently set.","Returns true if all flags are currently set.","Returns true if no flags are currently stored.","Returns true if no flags are currently stored.","Returns true if this drive is the master, or false if it …","Returns an Iterator over all of the AtaDrives that exist …","","","","Number of sectors in the drive, if using 48-bit LBA. …","","Maximum number of blocks per transfer. Sometimes referred …","","","","","","","","","","","","Creates a new instance of an IDE controller based on the …","","","","","Returns the complement of this set of flags.","Returns the complement of this set of flags.","","","","","","","","","","","","[0:3] Physical sector size (in logical sectors)","","","only the first 5 bits are used, others are reserved","","Reads data from this drive starting at the given …","","","Removes the specified flags in-place.","Removes the specified flags in-place.","","","","","","","","","","","","Inserts or removes the specified flags depending on the …","Inserts or removes the specified flags depending on the …","","","","","","","","","Returns the set difference of the two sets of flags.","Returns the set difference of the two sets of flags.","Disables all flags enabled in the set.","Disables all flags enabled in the set.","","","","","","","","","","","Toggles the specified flags in-place.","Toggles the specified flags in-place.","A bitmask of translation fields valid and free fall …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Number of sectors in the drive, if using 28-bit LBA. …","","","","","","Writes data from the provided buffer to this drive, …","","",""],"i":[1,0,0,0,0,0,0,0,0,0,1,2,1,2,2,2,2,2,2,1,2,0,0,1,1,3,3,3,3,1,1,4,4,4,1,2,3,1,2,5,6,7,4,8,9,10,3,1,2,5,6,7,4,8,9,10,1,2,1,2,1,2,1,2,1,2,1,2,1,2,4,5,3,1,2,5,6,7,4,8,9,10,3,1,2,5,6,7,4,8,9,10,4,4,4,1,2,7,4,8,9,10,1,2,7,4,8,9,10,1,2,4,4,4,4,1,2,4,4,4,4,4,4,4,4,8,9,10,6,4,1,2,4,1,2,4,1,2,4,4,5,1,1,1,1,1,2,2,2,2,2,5,6,4,8,8,9,9,10,10,4,3,1,2,5,6,7,4,8,9,10,1,2,1,2,1,2,4,4,1,2,1,2,4,1,2,3,1,2,5,6,7,4,8,9,10,3,1,2,5,6,7,4,8,9,10,3,1,2,5,6,7,4,8,9,10,3,1,2,5,6,7,4,8,9,10,7,1,2,1,2,5,6,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,1,2,6,7,4,4,4,1,2,4,4,4,4,4,4,4,4,4,1,2,4,6,6,4,5,5,4,4,1,2,4,4,4,4,6,6,4,4,4,4,4,1,2,4,5,4,4,4,4,4,4,1,2,1,2,1,2,7,4,8,9,10,8,9,10,1,2,4,4,4,4,3,1,2,5,6,7,4,8,9,10,3,1,2,5,6,7,4,8,9,10,3,1,2,5,6,7,4,8,9,10,4,4,4,4,4,4,4,5,5,4,4,4],"f":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[],["ataerror",3]],[[],["atastatus",3]],[[],["any",8]],[[],["any",8]],[[],["any",8]],[[],["any",8]],[[],["any",8]],[[],["any",8]],[[],["any",8]],[[],["any",8]],[[],["any",8]],[[],["any",8]],[[],["any",8]],[[],["any",8]],[[],["any",8]],[[],["any",8]],[[],["any",8]],[[],["any",8]],[[],["any",8]],[[],["any",8]],[[],["any",8]],[[],["any",8]],[[["ataerror",3]],["ataerror",3]],[[["atastatus",3]],["atastatus",3]],[[["ataerror",3]]],[[["atastatus",3]]],[[["ataerror",3]],["ataerror",3]],[[["atastatus",3]],["atastatus",3]],[[["ataerror",3]]],[[["atastatus",3]]],[[],["u8",15]],[[],["u8",15]],[[["ataerror",3]],["ataerror",3]],[[["atastatus",3]],["atastatus",3]],[[["ataerror",3]]],[[["atastatus",3]]],null,[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,null,[[],["ataerror",3]],[[],["atastatus",3]],[[],["idecontrolleriter",3]],[[],["ataidentifydata",3]],[[],["ataserialnumber",3]],[[],["atamodelnumber",3]],[[],["atafirmwareversion",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["ataerror",3]],["ordering",4]],[[["atastatus",3]],["ordering",4]],null,null,null,null,[[["ataerror",3]],["bool",15]],[[["atastatus",3]],["bool",15]],null,null,null,null,null,null,null,[[],["ataidentifydata",3]],[[]],[[]],[[]],[[],[["iterator",8],["box",3]]],null,[[],["ataerror",3]],[[],["atastatus",3]],null,[[["ataerror",3]],["bool",15]],[[["atastatus",3]],["bool",15]],null,[[["intoiterator",8]]],[[["intoiterator",8]]],null,null,[[],[["ioerror",4],["result",4]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["u8",15]],[["ataerror",3],["option",4]]],[[["u8",15]],[["atastatus",3],["option",4]]],[[["u8",15]],["ataerror",3]],[[["u8",15]],["atastatus",3]],[[["intoiterator",8]],["ataerror",3]],[[["intoiterator",8]],["atastatus",3]],null,null,[[]],[[]],[[["ataerror",3]]],[[["atastatus",3]]],null,[[["ataerror",3]],["bool",15]],[[["atastatus",3]],["bool",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["box",3],["global",3]],[["box",3],["any",8],["global",3]]],[[["box",3],["global",3]],[["box",3],["any",8],["global",3]]],[[["box",3],["global",3]],[["box",3],["any",8],["global",3]]],[[["box",3],["global",3]],[["box",3],["any",8],["global",3]]],[[["box",3],["global",3]],[["box",3],["any",8],["global",3]]],[[["box",3],["global",3]],[["box",3],["any",8],["global",3]]],[[["box",3],["global",3]],[["box",3],["any",8],["global",3]]],[[["box",3],["global",3]],[["box",3],["any",8],["global",3]]],[[["box",3],["global",3]],[["box",3],["any",8],["global",3]]],[[["box",3],["global",3]],[["box",3],["any",8],["global",3]]],[[["arc",3]],[["arc",3],["any",8]]],[[["arc",3]],[["arc",3],["any",8]]],[[["arc",3]],[["arc",3],["any",8]]],[[["arc",3]],[["arc",3],["any",8]]],[[["arc",3]],[["arc",3],["any",8]]],[[["arc",3]],[["arc",3],["any",8]]],[[["arc",3]],[["arc",3],["any",8]]],[[["arc",3]],[["arc",3],["any",8]]],[[["arc",3]],[["arc",3],["any",8]]],[[["arc",3]],[["arc",3],["any",8]]],[[["rc",3]],[["any",8],["rc",3]]],[[["rc",3]],[["any",8],["rc",3]]],[[["rc",3]],[["any",8],["rc",3]]],[[["rc",3]],[["any",8],["rc",3]]],[[["rc",3]],[["any",8],["rc",3]]],[[["rc",3]],[["any",8],["rc",3]]],[[["rc",3]],[["any",8],["rc",3]]],[[["rc",3]],[["any",8],["rc",3]]],[[["rc",3]],[["any",8],["rc",3]]],[[["rc",3]],[["any",8],["rc",3]]],[[]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["idecontrolleriter",3]],[[],["usize",15]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["ataerror",3]],["bool",15]],[[["atastatus",3]],["bool",15]],[[["pcidevice",3]],[["idecontroller",3],["str",15],["result",4]]],[[],["option",4]],null,null,null,[[],["ataerror",3]],[[],["atastatus",3]],null,null,null,null,null,null,null,null,null,[[["ataerror",3]],[["ordering",4],["option",4]]],[[["atastatus",3]],[["ordering",4],["option",4]]],null,null,null,null,[[["usize",15]],[["result",4],["usize",15],["ioerror",4]]],[[["usize",15]],[["result",4],["usize",15],["str",15]]],null,null,[[["ataerror",3]]],[[["atastatus",3]]],null,null,null,null,null,null,null,null,null,null,null,[[["ataerror",3],["bool",15]]],[[["atastatus",3],["bool",15]]],null,[[],["usize",15]],null,null,null,null,null,null,[[["ataerror",3]],["ataerror",3]],[[["atastatus",3]],["atastatus",3]],[[["ataerror",3]]],[[["atastatus",3]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[["ataerror",3]]],[[["atastatus",3]]],null,null,null,null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,null,null,null,null,null,null,[[["usize",15]],[["result",4],["usize",15],["ioerror",4]]],[[["usize",15]],[["result",4],["usize",15],["str",15]]],null,null,null],"p":[[3,"AtaError"],[3,"AtaStatus"],[4,"AtaDeviceType"],[3,"AtaIdentifyData"],[3,"AtaDrive"],[3,"IdeController"],[3,"IdeControllerIter"],[3,"AtaSerialNumber"],[3,"AtaModelNumber"],[3,"AtaFirmwareVersion"]]},\ "atomic_linked_list":{"doc":"","t":[0,0,3,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,3,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["atomic_linked_list","atomic_map","AtomicLinkedList","AtomicLinkedListIter","AtomicLinkedListIterMut","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","fmt","from","from","from","into","into","into","into_iter","into_iter","iter","iter_mut","new","next","next","push_front","push_front_timeout","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","AtomicMap","AtomicMapIter","AtomicMapIterMut","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","drop","fmt","from","from","from","get","get_mut","insert","insert_timeout","into","into","into","into_iter","into_iter","iter","new","next","next","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id"],"q":["atomic_linked_list","","atomic_linked_list::atomic_linked_list","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","atomic_linked_list::atomic_map","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["A basic atomic linked list. A generic, singly-linked …","A basic map structure which is backed by an atomic linked …","","","","","","","","","","","","","","","","","","","returns a forward iterator through this linked list. ","returns a forward iterator through this linked list, …","create a new empty AtomicLinkedList.","","","add a new element to the front of the list.","add a new element to the front of the list, but will abort…","","","","","","","","","","","","","","","","","","","","","","","","Returns a reference to the value matching the given key, …","Returns a mutable reference to the value matching the …","Adds a new key-value pair to the map. If the given key …","Adds a new key-value pair to the map. If the given key …","","","","","","Returns a forward iterator through this map. ","create a new empty AtomicMap.","","","","","","","","","","",""],"i":[0,0,0,0,0,1,2,3,1,2,3,3,1,2,3,1,2,3,1,2,3,3,3,1,2,3,3,1,2,3,1,2,3,1,2,3,0,0,0,4,5,6,4,5,6,6,6,4,5,6,6,6,6,6,4,5,6,4,5,6,6,4,5,4,5,6,4,5,6,4,5,6],"f":[null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["atomiclinkedlistiter",3]],[[],["atomiclinkedlistitermut",3]],[[],["atomiclinkedlist",3]],[[],["option",4]],[[],["option",4]],[[],["result",4]],[[["u64",15]],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[],["option",4]],[[],["option",4]],[[],["option",4]],[[["u64",15]],[["option",4],["result",4]]],[[]],[[]],[[]],[[]],[[]],[[],["atomicmapiter",3]],[[],["atomicmap",3]],[[],["option",4]],[[],["option",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]]],"p":[[3,"AtomicLinkedListIter"],[3,"AtomicLinkedListIterMut"],[3,"AtomicLinkedList"],[3,"AtomicMapIter"],[3,"AtomicMapIterMut"],[3,"AtomicMap"]]},\ "block_allocator":{"doc":"","t":[3,11,11,11,11,11,11,11,11,11,11,11],"n":["FixedSizeBlockAllocator","allocate","borrow","borrow_mut","deallocate","from","init","into","new","try_from","try_into","type_id"],"q":["block_allocator","","","","","","","","","","",""],"d":["","Allocates a chunk of the given size with the given …","","","Frees the given allocation. ptr must be a pointer returned…","","Initialize the allocator with the given heap bounds.","","Creates an empty FixedSizeBlockAllocator.","","",""],"i":[0,1,1,1,1,1,1,1,1,1,1,1],"f":[null,[[["layout",3]]],[[]],[[]],[[["layout",3]]],[[]],[[["usize",15]]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]]],"p":[[3,"FixedSizeBlockAllocator"]]},\ "block_cache":{"doc":"A caching layer for block based storage devices.","t":[3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["BlockCache","as_any","as_any_mut","borrow","borrow_mut","flush","from","into","into_any","into_any_arc","into_any_rc","new","read_block","try_from","try_into","type_id","write_block"],"q":["block_cache","","","","","","","","","","","","","","","",""],"d":["A cache to store read and written blocks from a storage …","","","","","Flushes the given block to the backing storage device. …","","","","","","Creates a new BlockCache device ","An internal function that first checks the cache for a …","","","",""],"i":[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"f":[null,[[],["any",8]],[[],["any",8]],[[]],[[]],[[["option",4],["usize",15]],[["result",4],["str",15]]],[[]],[[]],[[["box",3],["global",3]],[["box",3],["any",8],["global",3]]],[[["arc",3]],[["any",8],["arc",3]]],[[["rc",3]],[["rc",3],["any",8]]],[[["storagedeviceref",6]],["blockcache",3]],[[["blockcache",3],["usize",15]],[["str",15],["result",4]]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[["cow",4],["usize",15]],[["result",4],["str",15]]]],"p":[[3,"BlockCache"]]},\ -"captain":{"doc":"The main initialization routine and setup logic of the …","t":[5],"n":["init"],"q":["captain"],"d":["Initialize the Captain, which is the main module that …"],"i":[0],"f":[[[["mappedpages",3],["virtualaddress",3],["mutexirqsafe",3],["stack",3],["arc",3],["vec",3]],[["result",4],["str",15]]]],"p":[]},\ +"captain":{"doc":"The main initialization routine and setup logic of the …","t":[5],"n":["init"],"q":["captain"],"d":["Initialize the Captain, which is the main module that …"],"i":[0],"f":[[[["mappedpages",3],["arc",3],["stack",3],["mutexirqsafe",3],["vec",3],["virtualaddress",3]],[["result",4],["str",15]]]],"p":[]},\ "catch_unwind":{"doc":"Support for catching a panic while a panicked Task is …","t":[5],"n":["catch_unwind_with_arg"],"q":["catch_unwind"],"d":["Invokes the given closure f, catching a panic as it is …"],"i":[0],"f":[[[],[["killreason",4],["result",4]]]],"p":[]},\ "color":{"doc":"A simple representation of the standard RGB color model.","t":[17,17,17,17,3,17,17,17,17,17,17,17,17,17,17,17,17,17,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["BLACK","BLUE","BROWN","CYAN","Color","DARK_GRAY","GRAY","GREEN","LIGHT_BLUE","LIGHT_CYAN","LIGHT_GRAY","LIGHT_GREEN","MAGENTA","PINK","RED","TRANSPARENT","WHITE","YELLOW","blue","borrow","borrow_mut","clone","eq","fmt","from","green","into","new","red","set_transparency","transparency","try_from","try_into","type_id"],"q":["color","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["","","","","This structure represents a color value in the standard …","","","","","","","","","","","","","","Returns the blue component of this Color as a u8 value.","","","","","","","Returns the green component of this Color as a u8 value.","","Creates a new Color structure from a 4 bytes ARGB …","Returns the red component of this Color as a u8 value.","Sets the transparency of the color, in which 0 is opaque …","Returns the transparency component of this Color as a u8 …","","",""],"i":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"f":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[],["u8",15]],[[]],[[]],[[],["color",3]],[[["color",3]],["bool",15]],[[["formatter",3]],["result",6]],[[]],[[],["u8",15]],[[]],[[["u32",15]],["color",3]],[[],["u8",15]],[[["u8",15]]],[[],["u8",15]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]]],"p":[[3,"Color"]]},\ "compositor":{"doc":"This crate defines a trait of Compositor . A compositor …","t":[8,8,3,10,11,11,10,12,11,11,10,10,12,11,11,11],"n":["CompositableRegion","Compositor","FramebufferUpdates","blend_buffers","borrow","borrow_mut","composite","coordinate_in_dest_framebuffer","from","into","row_range","size","src_framebuffer","try_from","try_into","type_id"],"q":["compositor","","","","","","","","","","","","","","",""],"d":["A CompositableRegion is an abstract region (i.e., a …","A compositor composites (combines or blends) a series of …","A source framebuffer to be composited, along with its …","Blends the pixels in the source framebuffer src_fb within …","","","Composites the framebuffers in the list of source …","The coordinate in the destination framebuffer where the …","","","Returns the range of rows covered by this region, given …","Returns the number of pixels in the region.","The source framebuffer to be composited.","","",""],"i":[0,0,0,1,2,2,3,2,2,2,1,1,2,2,2,2],"f":[null,null,null,[[["coord",3],["framebuffer",3],["framebuffer",3],["usize",15],["range",3]],[["result",4],["str",15]]],[[]],[[]],[[["framebuffer",3]],[["result",4],["str",15]]],null,[[]],[[]],[[],[["range",3],["isize",15]]],[[],["usize",15]],null,[[],["result",4]],[[],["result",4]],[[],["typeid",3]]],"p":[[8,"CompositableRegion"],[3,"FramebufferUpdates"],[8,"Compositor"]]},\ -"console":{"doc":"Creation and management of virtual consoles or terminals …","t":[3,11,11,11,11,11,5,11,11,11],"n":["Console","borrow","borrow_mut","from","into","new_serial_console","start_connection_detection","try_from","try_into","type_id"],"q":["console","","","","","","","","",""],"d":["","","","","","Creates a new console that surrounds a terminal instance …","Starts a new task that detects new console connections by …","","",""],"i":[0,1,1,1,1,1,0,1,1,1],"f":[null,[[]],[[]],[[]],[[]],[[["into",8],["string",3]],["console",3]],[[],[["result",4],["taskref",3],["str",15]]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]]],"p":[[3,"Console"]]},\ +"console":{"doc":"Creation and management of virtual consoles or terminals …","t":[3,11,11,11,11,11,5,11,11,11],"n":["Console","borrow","borrow_mut","from","into","new_serial_console","start_connection_detection","try_from","try_into","type_id"],"q":["console","","","","","","","","",""],"d":["","","","","","Creates a new console that surrounds a terminal instance …","Starts a new task that detects new console connections by …","","",""],"i":[0,1,1,1,1,1,0,1,1,1],"f":[null,[[]],[[]],[[]],[[]],[[["into",8],["string",3]],["console",3]],[[],[["result",4],["str",15],["taskref",3]]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]]],"p":[[3,"Console"]]},\ "context_switch":{"doc":"This is a wrapper crate around all other context switch …","t":[3,11,11,5,11,11,11,11,11,11,11],"n":["Context","borrow","borrow_mut","context_switch","from","into","new","only_derive_is_allowed_to_implement_this_trait","try_from","try_into","type_id"],"q":["context_switch","","","","","","","","","",""],"d":["The registers saved before a context switch and restored …","","","Switches context from an SSE Task to another SSE Task.","","","Creates a new ContextSSE struct that will cause the …","","","",""],"i":[0,1,1,0,1,1,1,1,1,1,1],"f":[null,[[]],[[]],[[["usize",15]]],[[]],[[]],[[["usize",15]],["contextsse",3]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]]],"p":[[3,"Context"]]},\ "context_switch_avx":{"doc":"This crate contains structures and routines for context …","t":[3,11,11,5,11,11,11,11,14,14,11,11,11],"n":["ContextAVX","borrow","borrow_mut","context_switch_avx","from","into","new","only_derive_is_allowed_to_implement_this_trait","restore_registers_avx","save_registers_avx","try_from","try_into","type_id"],"q":["context_switch_avx","","","","","","","","","","","",""],"d":["The registers saved before a context switch and restored …","","","Switches context from an AVX Task to another AVX Task.","","","Creates a new ContextAVX struct that will cause the …","","An assembly block for restoring AVX registers by popping …","An assembly block for saving AVX registers by pushing …","","",""],"i":[0,1,1,0,1,1,1,1,0,0,1,1,1],"f":[null,[[]],[[]],[[["usize",15]]],[[]],[[]],[[["usize",15]],["contextavx",3]],[[]],null,null,[[],["result",4]],[[],["result",4]],[[],["typeid",3]]],"p":[[3,"ContextAVX"]]},\ "context_switch_regular":{"doc":"This crate contains structures and routines for context …","t":[3,11,11,5,11,11,11,11,14,14,14,11,11,11],"n":["ContextRegular","borrow","borrow_mut","context_switch_regular","from","into","new","only_derive_is_allowed_to_implement_this_trait","restore_registers_regular","save_registers_regular","switch_stacks","try_from","try_into","type_id"],"q":["context_switch_regular","","","","","","","","","","","","",""],"d":["The registers saved before a context switch and restored …","","","Switches context from a regular Task to another regular …","","","Creates a new ContextRegular struct that will cause the …","","An assembly block for restoring regular x86_64 registers …","An assembly block for saving regular x86_64 registers by …","An assembly block for switching stacks, which is the …","","",""],"i":[0,1,1,0,1,1,1,1,0,0,0,1,1,1],"f":[null,[[]],[[]],[[["usize",15]]],[[]],[[]],[[["usize",15]],["contextregular",3]],[[]],null,null,null,[[],["result",4]],[[],["result",4]],[[],["typeid",3]]],"p":[[3,"ContextRegular"]]},\ @@ -25,27 +25,27 @@ var searchIndex = JSON.parse('{\ "crate_swap":{"doc":"Defines functions and types for crate swapping, used in …","t":[4,13,13,13,13,6,3,6,11,11,11,11,5,11,11,11,11,11,11,11,11,11,11,11,5,11,11,11,11,11,11],"n":["InvalidSwapRequest","NewCrateAbsolutePathNotFound","NewCratePathNotAbsolute","NewCratePrefixNotFound","OldCrateNotFound","StateTransferFunction","SwapRequest","SwapRequestList","borrow","borrow","borrow_mut","borrow_mut","clear_unloaded_crate_cache","eq","fmt","fmt","from","from","get_hash","hash","into","into","ne","new","swap_crates","try_from","try_from","try_into","try_into","type_id","type_id"],"q":["crate_swap","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["The possible errors that can occur when trying to create …","The given absolute Path for the new crate object file …","The given Path for the new crate object file was not an …","A single crate object file could not be found by matching …","The old crate was not found in the old CrateNamespace. …","A state transfer function is an arbitrary function called …","This struct is used to specify the details of a …","A list of one or more SwapRequests that is used by the …","","","","","Clears the cache of unloaded (swapped-out) crates saved …","","","","","","","","","","","Create a new SwapRequest that, when given to swap_crates()…","Swaps in new crates that can optionally replace existing …","","","","","",""],"i":[0,1,1,1,1,0,0,0,1,2,1,2,0,2,1,2,1,2,2,2,1,2,2,2,0,1,2,1,2,1,2],"f":[null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[["swaprequest",3]],["bool",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[],["u64",15]],[[]],[[]],[[]],[[["swaprequest",3]],["bool",15]],[[["arc",3],["str",15],["cratenamespace",3],["intocrateobjectfile",4],["option",4],["option",4],["bool",15]],[["swaprequest",3],["result",4],["invalidswaprequest",4]]],[[["swaprequestlist",6],["mmiref",6],["option",4],["bool",15],["namespacedir",3],["vec",3],["string",3],["arc",3]],[["result",4],["str",15]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]]],"p":[[4,"InvalidSwapRequest"],[3,"SwapRequest"]]},\ "debug_info":{"doc":"Support for DWARF debug information from ELF files.","t":[3,4,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["DebugSections","DebugSymbols","Loaded","Unloaded","borrow","borrow","borrow_mut","borrow_mut","debug_abbrev","debug_info","debug_line","debug_loc","debug_pubnames","debug_pubtypes","debug_ranges","debug_str","find_subprogram_containing","from","from","get_loaded","into","into","load","try_from","try_from","try_into","try_into","type_id","type_id","unload"],"q":["debug_info","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["The set of debug sections that we need to use from a …","An enum describing the possible forms of debug …","The debug information has already been parsed from the …","Debug information that hasn’t yet been parsed from the …","","","","","Returns the \\\".debug_abbrev\\\" section.","Returns the \\\".debug_info\\\" section.","Returns the \\\".debug_line\\\" section.","Returns the \\\".debug_loc\\\" section.","Returns the \\\".debug_pubnames\\\" section.","Returns the \\\".debug_pubtypes\\\" section.","Returns the \\\".debug_ranges\\\" section.","Returns the \\\".debug_str\\\" section.","Finds the subprogram that contains the given instruction …","","","A convenience method for accessing the already-loaded …","","","Loads the debug symbols from the enclosed weak file …","","","","","","","Unloads these DebugSymbols, returning the enclosed …"],"i":[0,0,1,1,2,1,2,1,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,2,1,2,1,2,1,1],"f":[null,null,null,null,[[]],[[]],[[]],[[]],[[],[["debugabbrev",3],["endianslice",3]]],[[],[["endianslice",3],["debuginfo",3]]],[[],[["endianslice",3],["debugline",3]]],[[],[["option",4],["debugloc",3]]],[[],[["debugpubnames",3],["endianslice",3]]],[[],[["debugpubtypes",3],["endianslice",3]]],[[],[["debugranges",3],["endianslice",3]]],[[],[["debugstr",3],["endianslice",3]]],[[["virtualaddress",3]],[["result",6],["option",4]]],[[]],[[]],[[],[["option",4],["debugsections",3]]],[[]],[[]],[[["cratenamespace",3],["strongcrateref",6]],[["str",15],["debugsections",3],["result",4]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],[["option",4],["debugsections",3]]]],"p":[[4,"DebugSymbols"],[3,"DebugSections"]]},\ "debugit":{"doc":"Use debug printlns, without the trait bounds (using …","t":[12,3,11,11,11,14,11,11,11,11,11,11,11],"n":["0","DebugIt","borrow","borrow_mut","clone","debugit","fmt","fmt","from","into","try_from","try_into","type_id"],"q":["debugit","","","","","","","","","","","",""],"d":["","A helper type for using with the debugit!() macro.","","","","Formats the given argument using its Debug trait …","","","","","","",""],"i":[1,0,1,1,1,0,1,1,1,1,1,1,1],"f":[null,null,[[]],[[]],[[],["debugit",3]],null,[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]]],"p":[[3,"DebugIt"]]},\ -"device_manager":{"doc":"","t":[3,3,11,11,11,11,11,11,11,11,5,11,11,11,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["FatFsAdapter","FatFsIoErrorAdapter","as_any","as_any","as_any_mut","as_any_mut","borrow","borrow","borrow_mut","borrow_mut","early_init","flush","fmt","from","from","from","init","into","into","into_any","into_any","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_storage","is_interrupted","new","new_unexpected_eof_error","new_write_zero_error","read","seek","try_from","try_from","try_into","try_into","type_id","type_id","write"],"q":["device_manager","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["An adapter (wrapper type) that implements traits required …","This struct exists to enable us to implement the […","","","","","","","","","This is for early-stage initialization of things like …","","","","","","Initializes all other devices, such as the keyboard and …","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,0,1,2,1,2,1,2,1,2,0,1,2,1,2,2,0,1,2,1,2,1,2,1,2,1,2,1,2,2,1,1,1,2,1,2,1,2,1],"f":[null,null,[[],["any",8]],[[],["any",8]],[[],["any",8]],[[],["any",8]],[[]],[[]],[[]],[[]],[[["memorymanagementinfo",3]],[["result",4],["str",15]]],[[],["result",4]],[[["formatter",3]],["result",6]],[[]],[[["error",3]],["fatfsioerroradapter",3]],[[]],[[["queue",3],["event",4]],[["result",4],["str",15]]],[[]],[[]],[[["box",3],["global",3]],[["any",8],["global",3],["box",3]]],[[["box",3],["global",3]],[["any",8],["global",3],["box",3]]],[[["arc",3]],[["arc",3],["any",8]]],[[["arc",3]],[["arc",3],["any",8]]],[[["rc",3]],[["rc",3],["any",8]]],[[["rc",3]],[["rc",3],["any",8]]],[[]],[[],["bool",15]],[[],["fatfsadapter",3]],[[]],[[]],[[],[["result",4],["usize",15]]],[[["seekfrom",4]],[["u64",15],["result",4]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],[["result",4],["usize",15]]]],"p":[[3,"FatFsAdapter"],[3,"FatFsIoErrorAdapter"]]},\ +"device_manager":{"doc":"","t":[3,3,11,11,11,11,11,11,11,11,5,11,11,11,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["FatFsAdapter","FatFsIoErrorAdapter","as_any","as_any","as_any_mut","as_any_mut","borrow","borrow","borrow_mut","borrow_mut","early_init","flush","fmt","from","from","from","init","into","into","into_any","into_any","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_storage","is_interrupted","new","new_unexpected_eof_error","new_write_zero_error","read","seek","try_from","try_from","try_into","try_into","type_id","type_id","write"],"q":["device_manager","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["An adapter (wrapper type) that implements traits required …","This struct exists to enable us to implement the […","","","","","","","","","This is for early-stage initialization of things like …","","","","","","Initializes all other devices, such as the keyboard and …","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,0,1,2,1,2,1,2,1,2,0,1,2,1,2,2,0,1,2,1,2,1,2,1,2,1,2,1,2,2,1,1,1,2,1,2,1,2,1],"f":[null,null,[[],["any",8]],[[],["any",8]],[[],["any",8]],[[],["any",8]],[[]],[[]],[[]],[[]],[[["memorymanagementinfo",3]],[["result",4],["str",15]]],[[],["result",4]],[[["formatter",3]],["result",6]],[[]],[[["error",3]],["fatfsioerroradapter",3]],[[]],[[["event",4],["queue",3]],[["result",4],["str",15]]],[[]],[[]],[[["global",3],["box",3]],[["any",8],["box",3],["global",3]]],[[["global",3],["box",3]],[["any",8],["box",3],["global",3]]],[[["arc",3]],[["any",8],["arc",3]]],[[["arc",3]],[["any",8],["arc",3]]],[[["rc",3]],[["any",8],["rc",3]]],[[["rc",3]],[["any",8],["rc",3]]],[[]],[[],["bool",15]],[[],["fatfsadapter",3]],[[]],[[]],[[],[["result",4],["usize",15]]],[[["seekfrom",4]],[["result",4],["u64",15]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],[["result",4],["usize",15]]]],"p":[[3,"FatFsAdapter"],[3,"FatFsIoErrorAdapter"]]},\ "dfqueue":{"doc":"DFQ is a decoupled, fault-tolerant, multi-producer …","t":[3,3,3,13,13,13,4,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,13,13,13,3,4,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["DFQueue","DFQueueConsumer","DFQueueProducer","Data","Empty","Inconsistent","PeekResult","PeekedData","QueuedData","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","deref","deref","enqueue","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","get_consumer","has_failed","into","into","into","into","into","into","into_consumer","into_producer","is_completed","is_enqueued","mark_completed","mpsc_queue","new","obtain_producer","obtain_producer","peek","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","Data","Empty","Inconsistent","MpscQueue","PopResult","borrow","borrow","borrow_mut","borrow_mut","drop","from","from","into","into","new","pop","push","try_from","try_from","try_into","try_into","type_id","type_id"],"q":["dfqueue","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","dfqueue::mpsc_queue","","","","","","","","","","","","","","","","","","","","","",""],"d":["The actual queue, an opaque type that cannot be used …","A consumer that can process (peek into) elements in a …","A producer that can enqueue elements into a DFQueue. Do …","Some data has been successfully peeked","The queue is empty","The queue is in an inconsistent state. Peeking data …","A result of the peek function.","A wrapper around data in the queue that allows a …","A special reference type that wraps a data item that has …","","","","","","","","","","","","","","","Pushes the given data onto the queue.","","","","","","","","","","","","Returns a DFQueueConsumer for this queue, if it hasn’t …","The logic here is as follows: if the item on the queue …","","","","","","","Consumes the DFQueue and returns the one and only …","Consumes the DFQueue and returns a producer. To obtain …","Whether this item has been completed (handled) by the …","Returns true if this data is still on the queue","","Ported from Rust’s std::sync::mpsc::Queue.","Creates a new DFQueue. ","Returns a new DFQueueProducer cloned from this consumer …","Call this to obtain another DFQueueProducer. …","Returns the next non-completed element in the queue …","","","","","","","","","","","","","","","","","","","Some data has been popped","The queue is empty","The queue is in an inconsistent state. Popping data …","The multi-producer single-consumer structure. This is not …","A result of the pop function.","","","","","","","","","","Creates a new queue that is safe to share among multiple …","Pops data from this queue.","Pushes a new value onto this queue.","","","","","",""],"i":[0,0,0,1,1,1,0,0,0,1,2,3,4,5,6,1,2,3,4,5,6,5,6,4,2,3,4,5,6,1,2,3,4,5,6,4,5,1,2,3,4,5,6,2,2,5,5,6,0,2,3,4,3,1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6,7,7,7,0,0,7,8,7,8,8,7,8,7,8,8,8,8,7,8,7,8,7,8],"f":[null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["queueddata",3]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[]],[[],[["option",4],["dfqueueconsumer",3]]],[[],["bool",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["dfqueueconsumer",3]],[[],["dfqueueproducer",3]],[[],["bool",15]],[[],["bool",15]],[[]],null,[[],["dfqueue",3]],[[],["dfqueueproducer",3]],[[],["dfqueueproducer",3]],[[],[["option",4],["peekeddata",3]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["mpscqueue",3]],[[],["option",4]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]]],"p":[[4,"PeekResult"],[3,"DFQueue"],[3,"DFQueueConsumer"],[3,"DFQueueProducer"],[3,"QueuedData"],[3,"PeekedData"],[4,"PopResult"],[3,"MpscQueue"]]},\ -"displayable":{"doc":"This crate defines a trait of Displayable. A displayable …","t":[8,10,10,10],"n":["Displayable","display","get_size","set_size"],"q":["displayable","","",""],"d":["The Displayable trait is an abstraction for any object …","Displays this Displayable’s content in the given …","Gets the size of the area occupied by the displayable.","Resizes the displayable area, but does not automatically …"],"i":[0,1,1,1],"f":[null,[[["framebuffer",3],["coord",3]],[["str",15],["rectangle",3],["result",4]]],[[]],[[["usize",15]]]],"p":[[8,"Displayable"]]},\ +"displayable":{"doc":"This crate defines a trait of Displayable. A displayable …","t":[8,10,10,10],"n":["Displayable","display","get_size","set_size"],"q":["displayable","","",""],"d":["The Displayable trait is an abstraction for any object …","Displays this Displayable’s content in the given …","Gets the size of the area occupied by the displayable.","Resizes the displayable area, but does not automatically …"],"i":[0,1,1,1],"f":[null,[[["coord",3],["framebuffer",3]],[["result",4],["rectangle",3],["str",15]]],[[]],[[["usize",15]]]],"p":[[8,"Displayable"]]},\ "dmar":{"doc":"Definitions for the DMAR, the Direct Memory Access (DMA) …","t":[13,13,17,3,3,3,3,3,3,4,3,3,3,3,3,13,3,13,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["Andd","Atsr","DMAR_SIGNATURE","DeviceScopePath","Dmar","DmarAndd","DmarAtsr","DmarDeviceScope","DmarDrhd","DmarEntry","DmarEntryRecord","DmarIter","DmarRhsa","DmarRmrr","DmarSatc","Drhd","DrhdIter","Rhsa","Rmrr","Satc","UnknownOrCorrupt","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","device","device_type","enumeration_id","flags","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","function","get","handle","host_address_width","include_pci_all","into","into","into","into","into","into","into","into","into","into","into","into","into","into_iter","into_iter","iter","iter","next","next","only_derive_is_allowed_to_implement_this_trait","only_derive_is_allowed_to_implement_this_trait","only_derive_is_allowed_to_implement_this_trait","only_derive_is_allowed_to_implement_this_trait","only_derive_is_allowed_to_implement_this_trait","only_derive_is_allowed_to_implement_this_trait","only_derive_is_allowed_to_implement_this_trait","path","register_base_address","sdt","segment_number","start_bus_number","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id"],"q":["dmar","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["","","","","A wrapper around the DMAR ACPI table ([DmarReporting]), …","ANDD: DMAR ACPI Name-space Device Declaration Structure. ","ATSR: DMAR Root Port ATS (Address Translation Services) …","DMAR Device Scope Structure.","DRHD: DMAR Hardware Unit Definition Structure.","The set of possible sub-tables that can exist in the …","Represents the “header” of each dynamic table entry …","An [Iterator] over the dynamic entries of the [Dmar]. Its …","RHSA: DMAR Remapping Hardware Static Affinity Structure. ","RMRR: DMAR Reserved Memory Region Reporting Structure. ","SATC: DMAR SoC Integrated Address Translation Cache …","","An [Iterator] over the dynamic entries ([DmarDeviceScope]…","","","","The DMAR table had an entry of an unknown type or …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the type of this device scope structure.","Returns the Enumeration ID, which differs in meaning …","Returns the flags value in this DMAR table.","","","","","","","","","","","","","","","","","","","","","","","","","","Finds the DMAR in the given AcpiTables and returns a …","The handler for parsing the DMAR table and adding it to …","Returns the maximum DMA physical addressability (in …","Returns the value of the INCLUDE_PCI_ALL flag, the only …","","","","","","","","","","","","","","","","Returns an [Iterator] over the [DmarDeviceScope] entries …","Returns an [Iterator] over the DMAR’s remapping …","","","","","","","","","","Calculates and returns the hierarchical path (along the …","Returns the base address of this DRHD’s remapping …","Returns a reference to the Sdt header in this DMAR table.","Returns the PCI segment number associated with this DRHD.","Returns the PCI bus number under which the device …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,2,3,4,5,6,7,8,1,9,10,11,12,13,2,3,4,5,6,7,8,1,9,10,11,12,13,3,5,7,8,9,10,11,12,13,3,5,7,8,9,10,11,12,13,5,4,4,6,2,4,5,6,8,1,9,10,11,12,13,2,3,4,5,6,7,8,1,9,10,11,12,13,5,6,0,6,2,2,3,4,5,6,7,8,1,9,10,11,12,13,3,7,2,6,3,7,5,8,9,10,11,12,13,4,2,6,2,4,3,5,7,8,9,10,11,12,13,2,3,4,5,6,7,8,1,9,10,11,12,13,2,3,4,5,6,7,8,1,9,10,11,12,13,2,3,4,5,6,7,8,1,9,10,11,12,13],"f":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["drhditer",3]],[[],["devicescopepath",3]],[[],["dmariter",3]],[[],["dmarentryrecord",3]],[[],["dmarrmrr",3]],[[],["dmaratsr",3]],[[],["dmarrhsa",3]],[[],["dmarandd",3]],[[],["dmarsatc",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,[[],["u8",15]],[[],["u8",15]],[[],["u8",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,[[["acpitables",3]],[["dmar",3],["option",4]]],[[["acpitables",3],["physicaladdress",3],["acpisignature",6],["usize",15]],[["result",4],["str",15]]],[[],["u8",15]],[[],["bool",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["drhditer",3]],[[],["dmariter",3]],[[],["option",4]],[[],["option",4]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],[["result",4],["devicescopepath",3],["str",15]]],[[],["u64",15]],[[],["sdt",3]],[[],["u16",15]],[[],["u8",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]]],"p":[[4,"DmarEntry"],[3,"DmarDrhd"],[3,"DrhdIter"],[3,"DmarDeviceScope"],[3,"DeviceScopePath"],[3,"Dmar"],[3,"DmarIter"],[3,"DmarEntryRecord"],[3,"DmarRmrr"],[3,"DmarAtsr"],[3,"DmarRhsa"],[3,"DmarAndd"],[3,"DmarSatc"]]},\ "e1000":{"doc":"","t":[3,17,17,11,11,11,5,11,11,11,11,11,11,11,0,11,11,11,3,11,11,12,12,12,5,11,12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,5,12,12,12,12,12,11,11,11],"n":["E1000Nic","E1000_DEV","INTEL_VEND","borrow","borrow_mut","from","get_e1000_nic","get_received_frame","init","into","mac_address","poll_receive","send_packet","spoof_mac","test_e1000_driver","try_from","try_into","type_id","arp_packet","borrow","borrow_mut","dest1","dest2","dest3","dhcp_request_packet","from","h_type","hlen","into","oper","p_type","packet_type","plen","sha1","sha2","sha3","source1","source2","source3","spa1","spa2","test_e1000_nic_driver","tha1","tha2","tha3","tpa1","tpa2","try_from","try_into","type_id"],"q":["e1000","","","","","","","","","","","","","","","","","","e1000::test_e1000_driver","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["Struct representing an e1000 network interface card.","","","","","","Returns a reference to the E1000Nic wrapped in a …","","Initializes the new E1000 network interface card that is …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,0,0,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,0,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2],"f":[null,null,null,[[]],[[]],[[]],[[],[["mutexirqsafe",3],["option",4]]],[[],[["receivedframe",3],["option",4]]],[[["pcidevice",3]],[["mutexirqsafe",3],["str",15],["result",4]]],[[]],[[]],[[],[["result",4],["str",15]]],[[["transmitbuffer",3]],[["result",4],["str",15]]],[[]],null,[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,[[]],[[]],null,null,null,[[],[["result",4],["str",15]]],[[]],null,null,[[]],null,null,null,null,null,null,null,null,null,null,null,null,[[["u64",15],["option",4]]],null,null,null,null,null,[[],["result",4]],[[],["result",4]],[[],["typeid",3]]],"p":[[3,"E1000Nic"],[3,"arp_packet"]]},\ "entryflags_x86_64":{"doc":"This crate defines the structure of page table entry …","t":[18,18,18,3,18,18,18,18,18,18,18,18,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["ACCESSED","DIRTY","EXCLUSIVE","EntryFlags","GLOBAL","HUGE_PAGE","NO_CACHE","NO_EXECUTE","PRESENT","USER_ACCESSIBLE","WRITABLE","WRITE_THROUGH","all","bitand","bitand_assign","bitor","bitor_assign","bits","bitxor","bitxor_assign","borrow","borrow_mut","clone","cmp","contains","default","empty","eq","extend","fmt","fmt","fmt","fmt","fmt","from","from_bits","from_bits_truncate","from_elf_program_flags","from_elf_section_flags","from_iter","from_multiboot2_section_flags","hash","insert","intersects","into","into_exclusive","into_huge","into_non_exclusive","into_writable","is_all","is_empty","is_exclusive","is_executable","is_huge","is_writable","ne","not","partial_cmp","remove","set","sub","sub_assign","toggle","try_from","try_into","type_id"],"q":["entryflags_x86_64","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["The hardware will set this bit when the page is accessed.","The hardware will set this bit when the page has been …","Set this bit to indicate that the frame pointed to by …","Page table entry flags on the x86_64 architecture. ","Set this bit to indicate that this page is mapped across …","Set this bit if this page table entry represents a “huge…","If set, this page’s content is never cached, neither …","Set this bit to forbid execution of the mapped page. In …","If set, this page is currently “present” in memory. …","If set, userspace (ring 3) can access this page. If not …","If set, writes to this page are allowed. If not set, this …","If set, writes to this page go directly through the cache …","Returns the set containing all flags.","Returns the intersection between the two sets of flags.","Disables all flags disabled in the set.","Returns the union of the two sets of flags.","Adds the set of flags.","Returns the raw value of the flags currently stored.","Returns the left flags, but with all the right flags …","Toggles the set of flags.","","","","","Returns true all of the flags in other are contained …","","Returns an empty set of flags","","","","","","","","","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, dropping any …","Gets flags according to the properties of a program. ","Gets flags according to the properties of a section from …","","Gets flags according to the properties of a section from …","","Inserts the specified flags in-place.","Returns true if there are flags common to both self and …","","Copies this EntryFlags into a new one with the exclusive …","Copies this new EntryFlags object and sets the huge page …","Copies this EntryFlags into a new one with the exclusive …","Copies this new EntryFlags object and sets the writable …","Returns true if all flags are currently set.","Returns true if no flags are currently stored.","Returns true if these flags are exclusive. ","Returns true if these flags are executable.","Returns true if the page the entry points to is a huge …","Returns true if the page is writable.","","Returns the complement of this set of flags.","","Removes the specified flags in-place.","Inserts or removes the specified flags depending on the …","Returns the set difference of the two sets of flags.","Disables all flags enabled in the set.","Toggles the specified flags in-place.","","",""],"i":[1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"f":[null,null,null,null,null,null,null,null,null,null,null,null,[[],["entryflags",3]],[[["entryflags",3]],["entryflags",3]],[[["entryflags",3]]],[[["entryflags",3]],["entryflags",3]],[[["entryflags",3]]],[[],["u64",15]],[[["entryflags",3]],["entryflags",3]],[[["entryflags",3]]],[[]],[[]],[[],["entryflags",3]],[[["entryflags",3]],["ordering",4]],[[["entryflags",3]],["bool",15]],[[],["entryflags",3]],[[],["entryflags",3]],[[["entryflags",3]],["bool",15]],[[["intoiterator",8]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[["u64",15]],[["entryflags",3],["option",4]]],[[["u64",15]],["entryflags",3]],[[["flags",3]],["entryflags",3]],[[["u64",15]],["entryflags",3]],[[["intoiterator",8]],["entryflags",3]],[[["elfsection",3]],["entryflags",3]],[[]],[[["entryflags",3]]],[[["entryflags",3]],["bool",15]],[[]],[[],["entryflags",3]],[[],["entryflags",3]],[[],["entryflags",3]],[[],["entryflags",3]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[["entryflags",3]],["bool",15]],[[],["entryflags",3]],[[["entryflags",3]],[["ordering",4],["option",4]]],[[["entryflags",3]]],[[["entryflags",3],["bool",15]]],[[["entryflags",3]],["entryflags",3]],[[["entryflags",3]]],[[["entryflags",3]]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]]],"p":[[3,"EntryFlags"]]},\ "environment":{"doc":"","t":[3,11,11,11,11,11,11,11,11,11,12],"n":["Environment","borrow","borrow_mut","default","from","get_wd_path","into","try_from","try_into","type_id","working_dir"],"q":["environment","","","","","","","","","",""],"d":["A structure that contains environment state for a given …","","","","","Gets the absolute file path of the working directory","","","","","The “current working directory”, i.e., where a task…"],"i":[0,1,1,1,1,1,1,1,1,1,1],"f":[null,[[]],[[]],[[],["environment",3]],[[]],[[],["string",3]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null],"p":[[3,"Environment"]]},\ "ethernet_smoltcp_device":{"doc":"This crate implements an interface/glue layer between our …","t":[3,3,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["EthernetDevice","EthernetNetworkInterface","RxToken","TxToken","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","capabilities","consume","consume","ethernet_addr","from","from","from","from","has_ip_addr","iface","into","into","into","into","ip_addrs","new","new","new_ipv4_interface","poll","receive","routes","routes_mut","set_ethernet_addr","transmit","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id"],"q":["ethernet_smoltcp_device","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["An implementation of smoltcp’s Device trait, which …","A struct that implements the NetworkInterface trait for a …","The receive token type used by smoltcp, which contains …","The transmit token type used by smoltcp, which contains …","","","","","","","","","","","","","","","","","","","","","","","","Creates a new instance of an ethernet network interface, …","Create a new instance of the EthernetDevice.","Creates a new ethernet network interface with an ipv4 …","","","","","","","","","","","","","","","","","",""],"i":[0,0,0,0,1,2,3,4,1,2,3,4,2,3,4,1,1,2,3,4,1,1,1,2,3,4,1,1,2,1,1,2,1,1,1,2,1,2,3,4,1,2,3,4,1,2,3,4],"f":[null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["devicecapabilities",3]],[[["usize",15],["instant",3]],["result",6]],[[["instant",3]],["result",6]],[[],["ethernetaddress",3]],[[]],[[]],[[]],[[]],[[["ipaddress",4]],["bool",15]],null,[[]],[[]],[[]],[[]],[[]],[[["mutexirqsafe",3],["option",4],["option",4],["into",8],["ipaddress",4],["ipcidr",4]],[["ethernetnetworkinterface",3],["result",4],["str",15]]],[[["mutexirqsafe",3]],["ethernetdevice",3]],[[["mutexirqsafe",3],["str",15]],[["ethernetnetworkinterface",3],["result",4],["str",15]]],[[["socketset",3],["instant",3]],[["bool",15],["result",6]]],[[],["option",4]],[[],["routes",3]],[[],["routes",3]],[[["ethernetaddress",3]]],[[],["option",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]]],"p":[[3,"EthernetNetworkInterface"],[3,"EthernetDevice"],[3,"TxToken"],[3,"RxToken"]]},\ "event_types":{"doc":"","t":[4,13,13,3,13,3,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,12,11,12,11,11,11,12,11,11,11,12,11,11,11,12,12,11,11,11,11,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11],"n":["Event","ExitEvent","KeyboardEvent","KeyboardInputEvent","MouseMovementEvent","MousePositionEvent","MousePositionEvent","OutputEvent","WindowResizeEvent","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","coordinate","default","fifth_button_hold","fmt","fmt","fmt","fourth_button_hold","from","from","from","gcoordinate","into","into","into","key_event","left_button_hold","new","new_keyboard_event","new_output_event","new_window_resize_event","right_button_hold","scrolling_down","scrolling_up","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id"],"q":["event_types","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["","","An input event from a keyboard","A keyboard event, indicating that one or more keys were …","An input event from a mouse","An event describing mouse position rather than movement …","The event tells application about mouse’s position …","An event indicating that another entity wants to print …","Tells an application that the window manager has resized …","","","","","","","","","","","","","the relative position in window","","whether the fifth button holds","","","","whether the fourth button holds","","","","the global position in window","","","","The key input event from i/o device","whether the left button holds","Create a new key board input event. key is the key input …","Create a new keyboard event","Create a new output event","Create a new window resize event","whether the right button holds","whether the mouse is scrolling down","whether the mouse is scrolling up","","","","","","","","","","","",""],"i":[0,1,1,0,1,0,1,1,1,2,1,3,2,1,3,2,1,3,2,1,3,2,2,2,2,1,3,2,2,1,3,2,2,1,3,3,2,3,1,1,1,2,2,2,2,1,3,2,1,3,2,1,3,2,1,3],"f":[null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[],["mousepositionevent",3]],[[],["event",4]],[[],["keyboardinputevent",3]],[[]],[[]],[[]],null,[[]],null,[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],null,[[]],[[]],[[]],null,[[]],[[]],[[]],null,null,[[["keyevent",3]],["keyboardinputevent",3]],[[["keyevent",3]],["event",4]],[[],["event",4]],[[["rectangle",3]],["event",4]],null,null,null,[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]]],"p":[[4,"Event"],[3,"MousePositionEvent"],[3,"KeyboardInputEvent"]]},\ -"exceptions_early":{"doc":"Early exception handlers that do nothing but print an …","t":[5,5,5,5,5,5,5,5,5,5],"n":["breakpoint_handler","device_not_available_handler","divide_by_zero_handler","double_fault_handler","early_page_fault_handler","general_protection_fault_handler","init","invalid_opcode_handler","nmi_handler","segment_not_present_handler"],"q":["exceptions_early","","","","","","","","",""],"d":["exception 0x03","exception 0x07","exception 0x00","","","","Initializes the given IDT with a basic set of early …","exception 0x06","exception 0x02",""],"i":[0,0,0,0,0,0,0,0,0,0],"f":[[[["exceptionstackframe",3]]],[[["exceptionstackframe",3]]],[[["exceptionstackframe",3]]],[[["exceptionstackframe",3],["u64",15]]],[[["exceptionstackframe",3],["pagefaulterrorcode",3]]],[[["exceptionstackframe",3],["u64",15]]],[[["option",4],["lockedidt",3],["virtualaddress",3]]],[[["exceptionstackframe",3]]],[[["exceptionstackframe",3]]],[[["exceptionstackframe",3],["u64",15]]]],"p":[]},\ +"exceptions_early":{"doc":"Early exception handlers that do nothing but print an …","t":[5,5,5,5,5,5,5,5,5,5],"n":["breakpoint_handler","device_not_available_handler","divide_by_zero_handler","double_fault_handler","early_page_fault_handler","general_protection_fault_handler","init","invalid_opcode_handler","nmi_handler","segment_not_present_handler"],"q":["exceptions_early","","","","","","","","",""],"d":["exception 0x03","exception 0x07","exception 0x00","","","","Initializes the given IDT with a basic set of early …","exception 0x06","exception 0x02",""],"i":[0,0,0,0,0,0,0,0,0,0],"f":[[[["exceptionstackframe",3]]],[[["exceptionstackframe",3]]],[[["exceptionstackframe",3]]],[[["exceptionstackframe",3],["u64",15]]],[[["exceptionstackframe",3],["pagefaulterrorcode",3]]],[[["exceptionstackframe",3],["u64",15]]],[[["option",4],["virtualaddress",3],["lockedidt",3]]],[[["exceptionstackframe",3]]],[[["exceptionstackframe",3]]],[[["exceptionstackframe",3],["u64",15]]]],"p":[]},\ "exceptions_full":{"doc":"Exception handlers that are task-aware, and will kill a …","t":[5,5,5,5,5,5,5,5,5,5,5,5,5],"n":["bound_range_exceeded_handler","breakpoint_handler","debug_handler","device_not_available_handler","divide_by_zero_handler","double_fault_handler","general_protection_fault_handler","init","invalid_opcode_handler","invalid_tss_handler","overflow_handler","page_fault_handler","segment_not_present_handler"],"q":["exceptions_full","","","","","","","","","","","",""],"d":["","exception 0x03","exception 0x01","exception 0x07","exception 0x00","exception 0x08","exception 0x0d","","exception 0x06","exception 0x0a","exception 0x04","exception 0x0e","exception 0x0b"],"i":[0,0,0,0,0,0,0,0,0,0,0,0,0],"f":[[[["exceptionstackframe",3]]],[[["exceptionstackframe",3]]],[[["exceptionstackframe",3]]],[[["exceptionstackframe",3]]],[[["exceptionstackframe",3]]],[[["exceptionstackframe",3],["u64",15]]],[[["exceptionstackframe",3],["u64",15]]],[[["lockedidt",3]]],[[["exceptionstackframe",3]]],[[["exceptionstackframe",3],["u64",15]]],[[["exceptionstackframe",3]]],[[["pagefaulterrorcode",3],["exceptionstackframe",3]]],[[["exceptionstackframe",3],["u64",15]]]],"p":[]},\ "fadt":{"doc":"Definitions for FADT, the Fixed ACPI Description Table.","t":[17,3,12,12,12,11,11,12,12,11,11,12,12,12,12,12,12,12,12,11,11,11,12,12,12,12,12,5,12,11,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,11,11,11,11,12,12],"n":["FADT_SIGNATURE","Fadt","acpi_disable","acpi_enable","boot_architecture_flags","borrow","borrow_mut","c_state_control","century","clone","clone_into","day_alarm","dsdt","duty_offset","duty_width","firmware_ctrl","flags","flush_size","flush_stride","fmt","from","get","gpe0_block","gpe0_ength","gpe1_base","gpe1_block","gpe1_length","handle","header","into","month_alarm","only_derive_is_allowed_to_implement_this_trait","pm1_control_length","pm1_event_length","pm1a_control_block","pm1a_event_block","pm1b_control_block","pm1b_event_block","pm2_control_block","pm2_control_length","pm_timer_block","pm_timer_length","preferred_power_managament","pstate_control","s4_bios_req","sci_interrupt","smi_command_port","to_owned","try_from","try_into","type_id","worst_c2_latency","worst_c3_latency"],"q":["fadt","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["","","","","","","","","","","","","The physical address of the DSDT table","","","","","","","","","Finds the FADT in the given AcpiTables and returns a …","","","","","","The handler for parsing the FADT table and adding it to …","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"f":[null,null,null,null,null,[[]],[[]],null,null,[[],["fadt",3]],[[]],null,null,null,null,null,null,null,null,[[["formatter",3]],["result",6]],[[]],[[["acpitables",3]],[["option",4],["fadt",3]]],null,null,null,null,null,[[["acpisignature",6],["usize",15],["acpitables",3],["physicaladdress",3]],[["result",4],["str",15]]],null,[[]],null,[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,null],"p":[[3,"Fadt"]]},\ -"fault_crate_swap":{"doc":"Defines support functions needed for swapping of …","t":[3,11,11,11,11,5,11,5,11,5,11,12,12,12,12,12,12,5,11,11,11,11],"n":["SwapRanges","borrow","borrow_mut","clone","clone_into","constant_offset_fix","default","do_self_swap","from","get_crate_to_swap","into","new_data","new_rodata","new_text","old_data","old_rodata","old_text","self_swap_handler","to_owned","try_from","try_into","type_id"],"q":["fault_crate_swap","","","","","","","","","","","","","","","","","","","","",""],"d":["A data structure to hold the ranges of memory used by the …","","","","","A support function for self swap of crate Iterates …","","For swapping of a crate from the identical object file in …","","This function returns the name of the crate to replace if …","","","","","","","","This function calls the crate swapping routine for a …","","","",""],"i":[0,1,1,1,1,0,1,0,1,0,1,1,1,1,1,1,1,0,1,1,1,1],"f":[null,[[]],[[]],[[],["swapranges",3]],[[]],[[["swapranges",3],["usize",15]],[["string",3],["result",4]]],[[],["swapranges",3]],[[["str",15],["string",3],["namespacedir",3],["option",4],["arc",3],["dirref",6],["vec",3],["cratenamespace",3],["bool",15]],[["swapranges",3],["string",3],["result",4]]],[[]],[[],[["option",4],["string",3]]],[[]],null,null,null,null,null,null,[[["str",15]],[["swapranges",3],["string",3],["result",4]]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]]],"p":[[3,"SwapRanges"]]},\ +"fault_crate_swap":{"doc":"Defines support functions needed for swapping of …","t":[3,11,11,11,11,5,11,5,11,5,11,12,12,12,12,12,12,5,11,11,11,11],"n":["SwapRanges","borrow","borrow_mut","clone","clone_into","constant_offset_fix","default","do_self_swap","from","get_crate_to_swap","into","new_data","new_rodata","new_text","old_data","old_rodata","old_text","self_swap_handler","to_owned","try_from","try_into","type_id"],"q":["fault_crate_swap","","","","","","","","","","","","","","","","","","","","",""],"d":["A data structure to hold the ranges of memory used by the …","","","","","A support function for self swap of crate Iterates …","","For swapping of a crate from the identical object file in …","","This function returns the name of the crate to replace if …","","","","","","","","This function calls the crate swapping routine for a …","","","",""],"i":[0,1,1,1,1,0,1,0,1,0,1,1,1,1,1,1,1,0,1,1,1,1],"f":[null,[[]],[[]],[[],["swapranges",3]],[[]],[[["usize",15],["swapranges",3]],[["string",3],["result",4]]],[[],["swapranges",3]],[[["str",15],["string",3],["arc",3],["namespacedir",3],["option",4],["bool",15],["dirref",6],["vec",3]],[["result",4],["swapranges",3],["string",3]]],[[]],[[],[["option",4],["string",3]]],[[]],null,null,null,null,null,null,[[["str",15]],[["result",4],["swapranges",3],["string",3]]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]]],"p":[[3,"SwapRanges"]]},\ "fault_log":{"doc":"This crate logs all the faults occuring within Theseus. …","t":[13,13,13,13,13,3,4,13,13,13,13,13,13,13,13,13,13,4,13,13,13,12,12,11,11,11,11,11,11,5,11,11,11,11,11,11,12,12,11,12,12,11,11,11,11,11,11,5,5,12,11,11,11,5,5,5,11,5,5,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11],"n":["BoundRangeExceeded","DeviceNotAvailable","DivideByZero","DoubleFault","FaultCrateReplaced","FaultEntry","FaultType","GeneralProtectionFault","InvalidOpCode","InvalidTSS","IterativelyCrateReplaced","MultipleFaultRecovery","NMI","None","Overflow","PageFault","Panic","RecoveryAction","SegmentNotPresent","TaskRestarted","UnknownException","action_taken","address_accessed","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clear_fault_log","clone","clone","clone","clone_into","clone_into","clone_into","core","crate_error_occured","eq","error_code","fault_type","fmt","fmt","fmt","from","from","from","from_exception_number","get_the_most_recent_match","instruction_pointer","into","into","into","log_exception","log_handled_fault","log_panic_entry","new","print_fault_log","remove_unhandled_exceptions","replaced_crates","running_app_crate","running_task","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id"],"q":["fault_log","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["","","","","Crate where fault is observed is replaced, and then task …","A data structure to hold information about each fault. ","The possible faults (panics and exceptions) encountered …","","","","Different Crate than the crate where fault is observed is …","This fault is handled as a recovery for different fault. …","","No action taken on this fault.","","","","The different types of recovery procedures used for the …","","Task restarted only. No crate replaced.","","Recovery Action taken as a result of the fault","For page faults the address the program attempted to …","","","","","","","Clears the log of faults so far occured in the system ","","","","","","","The core error occured","Crate the address at which exception occured located","","Error code returned with the exception","Type of fault","","","","","","","Utility function to get Fault type from exception number. ","Provides the most recent entry in the log for given crate …","Address at which exception occured","","","","Add a new exception instance to the fault log. Generally …","Add a FaultEntry to fault log.","Add a new panic instance to the fault log. ","Returns an empty FaultEntry with only fault_type field …","Prints the fault log","Removes the unhandled faults from the fault log and …","List of crates reloaded from memory to recover from fault","If available the application crate that spawned the task","Task runnning immediately before the Exception","","","","","","","","","","","",""],"i":[1,1,1,1,2,0,0,1,1,1,2,2,1,2,1,1,1,0,1,2,1,3,3,1,2,3,1,2,3,0,1,2,3,1,2,3,3,3,2,3,3,1,2,3,1,2,3,0,0,3,1,2,3,0,0,0,3,0,0,3,3,3,1,2,3,1,2,3,1,2,3,1,2,3],"f":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["faulttype",4]],[[],["recoveryaction",4]],[[],["faultentry",3]],[[]],[[]],[[]],null,null,[[["recoveryaction",4]],["bool",15]],null,null,[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[["u8",15]],["faulttype",4]],[[["str",15]],[["option",4],["faultentry",3]]],null,[[]],[[]],[[]],[[["option",4],["option",4],["usize",15],["u8",15],["u64",15]]],[[["faultentry",3]]],[[["panicinfo",3]]],[[["faulttype",4]],["faultentry",3]],[[]],[[],[["vec",3],["faultentry",3]]],null,null,null,[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]]],"p":[[4,"FaultType"],[4,"RecoveryAction"],[3,"FaultEntry"]]},\ "first_application":{"doc":"This crate contains a simple routine to start the first …","t":[5],"n":["start"],"q":["first_application"],"d":["Starts the first applications that run in Theseus by …"],"i":[0],"f":[[[],[["result",4],["str",15]]]],"p":[]},\ "font":{"doc":"","t":[17,17,7],"n":["CHARACTER_HEIGHT","CHARACTER_WIDTH","FONT_BASIC"],"q":["font","",""],"d":["The height of a character.","The width of a character.","The bitmap array of characters."],"i":[0,0,0],"f":[null,null,null],"p":[]},\ "frame_allocator":{"doc":"Provides an allocator for physical memory frames. The …","t":[3,3,13,4,3,13,13,5,5,5,5,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11],"n":["AllocatedFrames","DeferredAllocAction","Free","MemoryRegionType","PhysicalMemoryRegion","Reserved","Unknown","allocate_frames","allocate_frames_at","allocate_frames_by_bytes","allocate_frames_by_bytes_at","allocate_frames_by_bytes_deferred","allocate_frames_deferred","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","deref","deref","drop","drop","empty","eq","fmt","fmt","fmt","frames","from","from","from","from","init","into","into","into","into","merge","new","split","to_owned","to_owned","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","typ","type_id","type_id","type_id","type_id"],"q":["frame_allocator","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["Represents a range of allocated PhysicalAddresses, …","A series of pending actions related to frame allocator …","Memory that is available for any general purpose.","Types of physical memory. See each variant’s …","A region of physical memory.","Memory that is reserved for special use and is only ever …","Memory of an unknown type. This is a default value that …","Allocates the given number of frames with no constraints …","Allocates the given number of frames starting at …","Allocates frames with no constraints on the starting …","Allocates frames starting at the given PhysicalAddress …","Similar to allocated_frames_deferred(), but accepts a …","The core frame allocation routine that allocates the …","","","","","","","","","","","","","","","","","Returns an empty AllocatedFrames object that performs no …","","","","","","","","","","Initialize the frame allocator with the given list of …","","","","","Merges the given AllocatedFrames object ap into this …","","Splits this AllocatedFrames into two separate …","","","","","","","","","","","","","","",""],"i":[0,0,1,0,0,1,1,0,0,0,0,0,0,2,3,4,1,2,3,4,1,4,1,4,1,2,4,2,3,2,1,2,4,1,4,2,3,4,1,0,2,3,4,1,2,4,2,4,1,2,3,4,1,2,3,4,1,4,2,3,4,1],"f":[null,null,null,null,null,null,null,[[["usize",15]],[["allocatedframes",3],["option",4]]],[[["usize",15],["physicaladdress",3]],[["str",15],["result",4],["allocatedframes",3]]],[[["usize",15]],[["allocatedframes",3],["option",4]]],[[["usize",15],["physicaladdress",3]],[["str",15],["result",4],["allocatedframes",3]]],[[["usize",15],["physicaladdress",3],["option",4]],[["str",15],["result",4]]],[[["usize",15],["physicaladdress",3],["option",4]],[["str",15],["result",4]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["physicalmemoryregion",3]],[[],["memoryregiontype",4]],[[]],[[]],[[],["framerange",3]],[[],["framerange",3]],[[]],[[]],[[],["allocatedframes",3]],[[["memoryregiontype",4]],["bool",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],null,[[]],[[]],[[]],[[]],[[],[["result",4],["str",15]]],[[]],[[]],[[]],[[]],[[["allocatedframes",3]],[["allocatedframes",3],["result",4]]],[[["memoryregiontype",4],["framerange",3]],["physicalmemoryregion",3]],[[["frame",3]],[["allocatedframes",3],["result",4]]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],null,[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]]],"p":[[4,"MemoryRegionType"],[3,"AllocatedFrames"],[3,"DeferredAllocAction"],[3,"PhysicalMemoryRegion"]]},\ -"framebuffer":{"doc":"This crate defines a Framebuffer structure, which is …","t":[3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,11,11,0,11,11,11,3,8,3,12,10,11,11,12,12,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,10,11,11],"n":["Framebuffer","borrow","borrow_mut","buffer","buffer_mut","composite_buffer","contains","draw_pixel","fill","from","get_hash","get_pixel","get_size","hash","index_of","init","into","new","overlaps_with","overwrite_pixel","pixel","try_from","try_into","type_id","AlphaPixel","Pixel","RGBPixel","alpha","blend","blend","blend","blue","blue","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","composite_buffer","composite_buffer","composite_buffer","fmt","fmt","from","from","from","from","get_hash","get_hash","green","green","hash","hash","into","into","only_derive_is_allowed_to_implement_this_trait","only_derive_is_allowed_to_implement_this_trait","red","red","to_owned","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","weight_blend","weight_blend","weight_blend"],"q":["framebuffer","","","","","","","","","","","","","","","","","","","","","","","","framebuffer::pixel","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["A framebuffer is a region of memory interpreted as a 2-D …","","","Returns a reference to the mapped memory of the buffer","Returns a mutable reference to the mapped memory of the …","Composites src to the buffer starting from index.","Checks if the given coordinate is within the framebuffer…","Draw a pixel at the given 1coordinate1. The pixel will …","Fills (overwrites) the entire framebuffer with the given …","","","Returns the pixel value at the given coordinate in this …","Returns the (width, height) of this framebuffer.","","Returns the index of the given coordinate in this …","Initializes the final framebuffer based on VESA graphics …","","Creates a new framebuffer with rectangular dimensions of …","Checks if a framebuffer overlaps with an area.","Overwites a pixel at the given coordinate in this …","Defines the Pixel trait as well as basic pixel formats, …","","","","An Alpha Pixel is a pixel with an alpha channel","A pixel provides methods to blend with others.","An RGB Pixel is a pixel with no extra channel.","","blend with another pixel considering their extra channel.","","","","","","","","","","","","","Composites the src pixel slice to the dest pixel slice.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Blend two pixels linearly with weights, as blend for …","",""],"i":[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,0,0,0,2,3,4,2,4,2,4,2,4,2,4,2,4,2,3,4,2,4,2,4,4,2,2,4,2,4,2,4,2,4,2,4,2,4,2,4,2,4,2,4,2,4,2,3,4,2],"f":[null,[[]],[[]],[[],["boxrefmut",6]],[[],["boxrefmut",6]],[[["usize",15]]],[[["coord",3]],["bool",15]],[[["coord",3]]],[[]],[[]],[[],["u64",15]],[[["coord",3]],["option",4]],[[]],[[]],[[["coord",3]],[["option",4],["usize",15]]],[[],[["result",4],["framebuffer",3],["str",15]]],[[]],[[["usize",15],["option",4],["physicaladdress",3]],[["result",4],["framebuffer",3],["str",15]]],[[["coord",3],["usize",15]],["bool",15]],[[["coord",3]]],null,[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,null,null,null,[[]],[[]],[[]],null,null,[[]],[[]],[[]],[[]],[[],["rgbpixel",3]],[[],["alphapixel",3]],[[]],[[]],[[]],[[]],[[]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["color",3]]],[[]],[[["color",3]]],[[]],[[],["u64",15]],[[],["u64",15]],null,null,[[]],[[]],[[]],[[]],[[]],[[]],null,null,[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[["f32",15]]],[[["f32",15]]],[[["f32",15]]]],"p":[[3,"Framebuffer"],[3,"AlphaPixel"],[8,"Pixel"],[3,"RGBPixel"]]},\ +"framebuffer":{"doc":"This crate defines a Framebuffer structure, which is …","t":[3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,11,11,0,11,11,11,3,8,3,12,10,11,11,12,12,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,10,11,11],"n":["Framebuffer","borrow","borrow_mut","buffer","buffer_mut","composite_buffer","contains","draw_pixel","fill","from","get_hash","get_pixel","get_size","hash","index_of","init","into","new","overlaps_with","overwrite_pixel","pixel","try_from","try_into","type_id","AlphaPixel","Pixel","RGBPixel","alpha","blend","blend","blend","blue","blue","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","composite_buffer","composite_buffer","composite_buffer","fmt","fmt","from","from","from","from","get_hash","get_hash","green","green","hash","hash","into","into","only_derive_is_allowed_to_implement_this_trait","only_derive_is_allowed_to_implement_this_trait","red","red","to_owned","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","weight_blend","weight_blend","weight_blend"],"q":["framebuffer","","","","","","","","","","","","","","","","","","","","","","","","framebuffer::pixel","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["A framebuffer is a region of memory interpreted as a 2-D …","","","Returns a reference to the mapped memory of the buffer","Returns a mutable reference to the mapped memory of the …","Composites src to the buffer starting from index.","Checks if the given coordinate is within the framebuffer…","Draw a pixel at the given 1coordinate1. The pixel will …","Fills (overwrites) the entire framebuffer with the given …","","","Returns the pixel value at the given coordinate in this …","Returns the (width, height) of this framebuffer.","","Returns the index of the given coordinate in this …","Initializes the final framebuffer based on VESA graphics …","","Creates a new framebuffer with rectangular dimensions of …","Checks if a framebuffer overlaps with an area.","Overwites a pixel at the given coordinate in this …","Defines the Pixel trait as well as basic pixel formats, …","","","","An Alpha Pixel is a pixel with an alpha channel","A pixel provides methods to blend with others.","An RGB Pixel is a pixel with no extra channel.","","blend with another pixel considering their extra channel.","","","","","","","","","","","","","Composites the src pixel slice to the dest pixel slice.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Blend two pixels linearly with weights, as blend for …","",""],"i":[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,0,0,0,2,3,4,2,4,2,4,2,4,2,4,2,4,2,3,4,2,4,2,4,4,2,2,4,2,4,2,4,2,4,2,4,2,4,2,4,2,4,2,4,2,4,2,3,4,2],"f":[null,[[]],[[]],[[],["boxrefmut",6]],[[],["boxrefmut",6]],[[["usize",15]]],[[["coord",3]],["bool",15]],[[["coord",3]]],[[]],[[]],[[],["u64",15]],[[["coord",3]],["option",4]],[[]],[[]],[[["coord",3]],[["option",4],["usize",15]]],[[],[["result",4],["framebuffer",3],["str",15]]],[[]],[[["usize",15],["option",4],["physicaladdress",3]],[["result",4],["framebuffer",3],["str",15]]],[[["usize",15],["coord",3]],["bool",15]],[[["coord",3]]],null,[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,null,null,null,[[]],[[]],[[]],null,null,[[]],[[]],[[]],[[]],[[],["rgbpixel",3]],[[],["alphapixel",3]],[[]],[[]],[[]],[[]],[[]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["color",3]]],[[]],[[["color",3]]],[[]],[[],["u64",15]],[[],["u64",15]],null,null,[[]],[[]],[[]],[[]],[[]],[[]],null,null,[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[["f32",15]]],[[["f32",15]]],[[["f32",15]]]],"p":[[3,"Framebuffer"],[3,"AlphaPixel"],[8,"Pixel"],[3,"RGBPixel"]]},\ "framebuffer_compositor":{"doc":"This crate defines a framebuffer compositor.","t":[17,3,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["CACHE_BLOCK_HEIGHT","CacheBlock","FRAME_COMPOSITOR","FrameCompositor","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","composite","deref","from","from","from","initialize","into","into","into","overlaps_with","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id"],"q":["framebuffer_compositor","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["The height of a cache block. In every iteration the …","A CacheBlock represents the cached …","The instance of the framebuffer compositor.","The framebuffer compositor structure. It caches …","","","","","","","","","","","","","","","","Checks if a cache block overlaps with another one","","","","","","","","",""],"i":[0,0,0,0,1,2,3,1,2,3,2,3,1,2,3,3,1,2,3,1,1,2,3,1,2,3,1,2,3],"f":[null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[["framebuffer",3]],[["result",4],["str",15]]],[[],["mutex",6]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["cacheblock",3]],["bool",15]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]]],"p":[[3,"CacheBlock"],[3,"FrameCompositor"],[3,"FRAME_COMPOSITOR"]]},\ "framebuffer_drawer":{"doc":"This crate contains a series of basic draw functions to …","t":[5,5,5,5],"n":["draw_circle","draw_line","draw_rectangle","fill_rectangle"],"q":["framebuffer_drawer","","",""],"d":["Draw a circle in the framebuffer. coordinate is the …","Draws a line in a framebuffer. The part exceeding the …","Draws a rectangle in a framebuffer. The part exceeding …","Fills a rectangle in a framebuffer with color. The part …"],"i":[0,0,0,0],"f":[[[["coord",3],["framebuffer",3],["pixel",8],["usize",15]]],[[["coord",3],["framebuffer",3],["pixel",8]]],[[["coord",3],["framebuffer",3],["pixel",8],["usize",15]]],[[["coord",3],["framebuffer",3],["pixel",8],["usize",15]]]],"p":[]},\ -"framebuffer_printer":{"doc":"This crate contains functions to print strings in a …","t":[5,5,5],"n":["fill_blank","print_ascii_character","print_string"],"q":["framebuffer_printer","",""],"d":["Fill a blank text area (left, top, right, bottom) with …","Prints a character to the framebuffer at position (line, …","Prints a string in a framebuffer. Returns (column, line, …"],"i":[0,0,0],"f":[[[["framebuffer",3],["rectangle",3],["pixel",8]]],[[["coord",3],["framebuffer",3],["pixel",8],["u8",15],["usize",15]]],[[["coord",3],["str",15],["framebuffer",3],["usize",15],["pixel",8]]]],"p":[]},\ +"framebuffer_printer":{"doc":"This crate contains functions to print strings in a …","t":[5,5,5],"n":["fill_blank","print_ascii_character","print_string"],"q":["framebuffer_printer","",""],"d":["Fill a blank text area (left, top, right, bottom) with …","Prints a character to the framebuffer at position (line, …","Prints a string in a framebuffer. Returns (column, line, …"],"i":[0,0,0],"f":[[[["framebuffer",3],["pixel",8],["rectangle",3]]],[[["usize",15],["framebuffer",3],["pixel",8],["u8",15],["coord",3]]],[[["str",15],["framebuffer",3],["coord",3],["usize",15],["pixel",8]]]],"p":[]},\ "fs_node":{"doc":"Defines traits for Files and Directories within the …","t":[13,6,8,8,13,4,6,8,6,6,10,11,11,11,11,11,10,11,11,11,11,10,11,10,11,10,11,10,10,10,10,11,10,11,11,11,11,10],"n":["Dir","DirRef","Directory","File","File","FileOrDir","FileRef","FsNode","WeakDirRef","WeakFileRef","as_mapping","borrow","borrow_mut","clone","clone_into","from","get","get_absolute_path","get_absolute_path","get_dir","get_file","get_name","get_name","get_parent_dir","get_parent_dir","insert","into","list","read","remove","set_parent_dir","set_parent_dir","size","to_owned","try_from","try_into","type_id","write"],"q":["fs_node","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["","A reference to any type that implements the Directory …","Trait for directories, implementors of Directory must …","","","Allows us to return a generic type that can be matched by …","A reference to any type that implements the File trait.","A trait that covers any filesystem node, both files and …","A weak reference to any type that implements the …","A weak reference to any type that implements the File …","Returns a view of this file as an immutable memory-mapped …","","","","","","Gets either the file or directory in this Directory on …","Recursively gets the absolute pathname as a String","","Like [Directory::get()], but only looks for directories …","Like [Directory::get()], but only looks for files …","Returns the string name of the node","","Returns the parent directory of the current node.","","Inserts the given new file or directory into this …","","Lists the names of the nodes in this directory.","Reads the contents of this file starting at the given …","Removes a file or directory from this directory and …","Sets this node’s parent directory. This is useful for …","","Returns the size in bytes of this file.","","","","","Writes the given buffer to this file starting at the …"],"i":[1,0,0,0,1,0,0,0,0,0,2,1,1,1,1,1,3,4,1,3,3,4,1,4,1,3,1,3,2,3,4,1,2,1,1,1,1,2],"f":[null,null,null,null,null,null,null,null,null,null,[[],[["result",4],["str",15],["mappedpages",3]]],[[]],[[]],[[],["fileordir",4]],[[]],[[]],[[["str",15]],[["option",4],["fileordir",4]]],[[],["string",3]],[[],["string",3]],[[["str",15]],[["dirref",6],["option",4]]],[[["str",15]],[["fileref",6],["option",4]]],[[],["string",3]],[[],["string",3]],[[],[["dirref",6],["option",4]]],[[],[["dirref",6],["option",4]]],[[["fileordir",4]],[["str",15],["option",4],["result",4]]],[[]],[[],[["vec",3],["string",3]]],[[["usize",15]],[["result",4],["usize",15],["str",15]]],[[["fileordir",4]],[["option",4],["fileordir",4]]],[[["weakdirref",6]]],[[["weakdirref",6]]],[[],["usize",15]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[["usize",15]],[["result",4],["usize",15],["str",15]]]],"p":[[4,"FileOrDir"],[8,"File"],[8,"Directory"],[8,"FsNode"]]},\ "gdt":{"doc":"","t":[4,4,3,13,13,13,13,13,13,13,13,13,11,11,11,11,11,11,11,5,5,11,11,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["AvailableSegmentSelector","Descriptor","Gdt","KernelCode","KernelData","SystemSegment","Tss","UserCode32","UserCode64","UserData32","UserData64","UserSegment","add_entry","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","create_and_load_tss_gdt","create_gdt","fmt","from","from","from","get_segment_selector","into","into","into","kernel_code_segment","kernel_data_segment","load","new","to_string","try_from","try_from","try_from","try_into","try_into","try_into","tss_segment","type_id","type_id","type_id","user_code_32_segment","user_code_64_segment","user_data_32_segment","user_data_64_segment"],"q":["gdt","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["The GDT SegmentSelectors available in Theseus. Use this …","The two kinds of descriptor entries in the GDT.","The Global Descriptor Table, as specified by the x86_64 …","","","SystemSegment is used only for TSS.","","","","","","UserSegment is used for both code and data segments, in …","","","","","","","","This function first creates and sets up a new TSS with …","Creates and sets up a new GDT that refers to the given TSS…","","","","","Stupid hack because SegmentSelector is not …","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,0,0,1,1,2,1,1,1,1,1,2,3,1,3,2,1,3,2,0,0,3,1,3,2,0,1,3,2,2,2,3,3,3,1,3,2,1,3,2,2,1,3,2,2,2,2,2],"f":[null,null,null,null,null,null,null,null,null,null,null,null,[[["descriptor",4],["privilegelevel",4]],["segmentselector",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[["virtualaddress",3],["u8",15]]],[[["taskstatesegment",3]]],[[["formatter",3]],[["error",3],["result",4]]],[[]],[[]],[[]],[[["availablesegmentselector",4]],["segmentselector",3]],[[]],[[]],[[]],[[],["descriptor",4]],[[],["descriptor",4]],[[]],[[],["gdt",3]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["taskstatesegment",3]],["descriptor",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["descriptor",4]],[[],["descriptor",4]],[[],["descriptor",4]],[[],["descriptor",4]]],"p":[[4,"AvailableSegmentSelector"],[4,"Descriptor"],[3,"Gdt"]]},\ "heap":{"doc":"The global allocator for the system. It starts off as a …","t":[7,17,3,11,11,11,11,11,11,5,11,5,11,11,11],"n":["GLOBAL_ALLOCATOR","HEAP_FLAGS","Heap","alloc","borrow","borrow_mut","dealloc","empty","from","init_single_heap","into","set_allocator","try_from","try_into","type_id"],"q":["heap","","","","","","","","","","","","","",""],"d":["","The heap mapped pages should be writable","The heap which is used as a global allocator for the …","","","","","Returns a heap in which only an empty initial allocator …","","Initializes the single heap, which is the first heap used …","","Sets a new default allocator to be used by the global …","","",""],"i":[0,0,0,1,1,1,1,1,1,0,1,0,1,1,1],"f":[null,null,null,[[["layout",3]]],[[]],[[]],[[["layout",3]]],[[],["heap",3]],[[]],[[["usize",15]]],[[]],[[["globalalloc",8],["box",3]]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]]],"p":[[3,"Heap"]]},\ @@ -56,15 +56,15 @@ var searchIndex = JSON.parse('{\ "interrupts":{"doc":"Basic interrupt handling structures and simple handler …","t":[7,7,5,5,5,5,5,5,5,5,5],"n":["APIC_TIMER_TICKS","IDT","deregister_interrupt","eoi","init","init_ap","init_handlers_apic","init_handlers_pic","is_exception_handler_with_error_code","register_interrupt","register_msi_interrupt"],"q":["interrupts","","","","","","","","","",""],"d":["","The single system-wide IDT Note: this could be per-core …","Returns an interrupt to the system by setting the handler …","Send an end of interrupt signal, which works for all …","initializes the interrupt subsystem and properly sets up …","Similar to init(), but for APs to call after the BSP has …","","","Returns true if the given address is the exception …","Registers an interrupt handler. The function fails if …","Returns an interrupt number assigned by the OS and sets …"],"i":[0,0,0,0,0,0,0,0,0,0,0],"f":[null,null,[[["handlerfunc",6],["u8",15]],[["result",4],["str",15]]],[[["option",4],["u8",15]]],[[["virtualaddress",3]],[["result",4],["lockedidt",3],["str",15]]],[[["virtualaddress",3],["u8",15]],[["result",4],["lockedidt",3],["str",15]]],[[]],[[]],[[["u64",15]],["bool",15]],[[["handlerfunc",6],["u8",15]],[["result",4],["str",15]]],[[["handlerfunc",6]],[["str",15],["u8",15],["result",4]]]],"p":[]},\ "io":{"doc":"Traits and types for expressing I/O transfers of both …","t":[3,8,8,8,8,3,3,8,3,13,4,8,3,13,3,3,13,3,12,10,11,11,11,11,11,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,10,11,11,11,11,11,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,10,11,11,11,11,11],"n":["BlockByteTransfer","BlockIo","BlockReader","BlockWriter","ByteReader","ByteReaderWrapper","ByteReaderWriterWrapper","ByteWriter","ByteWriterWrapper","InvalidInput","IoError","KnownLength","LockableIo","OutOfBounds","Reader","ReaderWriter","TimedOut","Writer","block_range","block_size","block_size","block_size","block_size","block_size","block_size","block_size","block_size","blocks_from_bytes","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","byte_range_absolute","bytes_in_block_range","clone","clone_into","deref","flush","flush","flush","flush","flush","flush","flush","flush","flush","flush","flush","flush","flush","flush","flush","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","into","into","into","into","into","into","into","into","into","len","len","len","len","len","len","len","len","new","new","new","read","read","read","read_at","read_at","read_at","read_at","read_at","read_at","read_blocks","read_blocks","read_blocks","read_blocks","read_blocks","read_blocks","round_down","round_up","seek","seek","seek","seek","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","write","write","write","write_at","write_at","write_at","write_at","write_at","write_at","write_blocks","write_blocks","write_blocks","write_blocks","write_blocks","write_blocks"],"q":["io","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["Describes an operation for performing byte-wise I/O on a …","A parent trait used to specify the block size (in bytes) …","A trait that represents an I/O stream (e.g., an I/O …","A trait that represents an I/O stream (e.g., an I/O …","A trait that represents an I/O stream that can be read …","A wrapper struct that implements a byte-wise reader atop …","A wrapper struct that implements a byte-wise reader and …","A trait that represents an I/O stream that can be written …","A wrapper struct that implements a byte-wise writer atop …","An input parameter or argument was incorrect or invalid.","Errors that can be returned from I/O operations.","A trait that represents an I/O stream that has a known …","A struct that holds an IO object wrapped in a [Lockable] …","The I/O operation attempted to access data beyond the …","A stateful reader that keeps track of its current offset …","A readable and writable “stateful” I/O stream that …","The I/O operation timed out and was canceled.","A stateful writer that keeps track of its current offset …","The range of blocks to transfer.","Returns the size in bytes of a single block (i.e., …","","","","","","","","Calculates block-wise bounds for an I/O transfer based …","","","","","","","","","","","","","","","","","","","The byte-wise range specified in absolute bytes from the …","The range of bytes relative to the blocks specified by …","","","","Flushes this entire writer’s output stream, ensuring …","Flushes this writer’s output stream, ensuring all …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the length (size in bytes) of this I/O stream or …","","","","","","","","Creates a new ReaderWriter with an initial offset of 0.","Creates a new Reader with an initial offset of 0.","Creates a new Writer with an initial offset of 0.","","","","Reads bytes of data from this reader into the given buffer…","","","","","","Reads blocks of data from this reader into the given …","","","","","","Rounds the given value down to the nearest multiple.","Rounds the given value up to the nearest multiple.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Writes bytes of data from the given buffer to this writer.","","","","","","Writes blocks of data from the given buffer to this …","","","","",""],"i":[0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,2,3,4,5,6,7,8,9,10,0,4,5,6,7,8,9,1,10,2,4,5,6,7,8,9,1,10,2,2,2,10,10,10,11,12,5,5,6,6,7,7,7,9,9,9,10,10,10,1,10,2,4,4,4,5,5,5,6,6,6,7,8,9,1,10,10,10,2,4,5,6,7,8,9,1,10,2,13,4,5,6,7,8,9,10,7,8,9,7,8,10,14,4,5,7,8,10,15,4,5,7,8,10,0,0,7,8,9,10,10,4,5,6,7,8,9,1,10,2,4,5,6,7,8,9,1,10,2,4,5,6,7,8,9,1,10,2,7,9,10,12,5,6,7,9,10,11,5,6,7,9,10],"f":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[["usize",15],["range",3]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,[[]],[[]],[[]],[[],[["ioerror",4],["result",4]]],[[],[["ioerror",4],["result",4]]],[[],[["ioerror",4],["result",4]]],[[],[["ioerror",4],["result",4]]],[[],[["ioerror",4],["result",4]]],[[],[["ioerror",4],["result",4]]],[[],[["ioerror",4],["result",4]]],[[],[["ioerror",4],["result",4]]],[[],["result",6]],[[],[["ioerror",4],["result",4]]],[[],[["ioerror",4],["result",4]]],[[],["result",6]],[[],[["ioerror",4],["result",4]]],[[],[["ioerror",4],["result",4]]],[[],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["readerwriter",3]],[[],["reader",3]],[[]],[[],[["result",6],["usize",15]]],[[],[["result",6],["usize",15]]],[[],[["result",6],["usize",15]]],[[["usize",15]],[["result",4],["usize",15],["ioerror",4]]],[[["usize",15]],[["result",4],["usize",15],["ioerror",4]]],[[["usize",15]],[["result",4],["usize",15],["ioerror",4]]],[[["usize",15]],[["result",4],["usize",15],["ioerror",4]]],[[["usize",15]],[["result",4],["usize",15],["ioerror",4]]],[[["usize",15]],[["result",4],["usize",15],["ioerror",4]]],[[["usize",15]],[["result",4],["usize",15],["ioerror",4]]],[[["usize",15]],[["result",4],["usize",15],["ioerror",4]]],[[["usize",15]],[["result",4],["usize",15],["ioerror",4]]],[[["usize",15]],[["result",4],["usize",15],["ioerror",4]]],[[["usize",15]],[["result",4],["usize",15],["ioerror",4]]],[[["usize",15]],[["result",4],["usize",15],["ioerror",4]]],[[["usize",15]],["usize",15]],[[["usize",15]],["usize",15]],[[["seekfrom",4]],[["result",6],["u64",15]]],[[["seekfrom",4]],[["result",6],["u64",15]]],[[["seekfrom",4]],[["result",6],["u64",15]]],[[["seekfrom",4]],[["result",6],["u64",15]]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],[["result",6],["usize",15]]],[[],[["result",6],["usize",15]]],[[],[["result",6],["usize",15]]],[[["usize",15]],[["result",4],["usize",15],["ioerror",4]]],[[["usize",15]],[["result",4],["usize",15],["ioerror",4]]],[[["usize",15]],[["result",4],["usize",15],["ioerror",4]]],[[["usize",15]],[["result",4],["usize",15],["ioerror",4]]],[[["usize",15]],[["result",4],["usize",15],["ioerror",4]]],[[["usize",15]],[["result",4],["usize",15],["ioerror",4]]],[[["usize",15]],[["result",4],["usize",15],["ioerror",4]]],[[["usize",15]],[["result",4],["usize",15],["ioerror",4]]],[[["usize",15]],[["result",4],["usize",15],["ioerror",4]]],[[["usize",15]],[["result",4],["usize",15],["ioerror",4]]],[[["usize",15]],[["result",4],["usize",15],["ioerror",4]]],[[["usize",15]],[["result",4],["usize",15],["ioerror",4]]]],"p":[[4,"IoError"],[3,"BlockByteTransfer"],[8,"BlockIo"],[3,"ByteReaderWrapper"],[3,"ByteReaderWriterWrapper"],[3,"ByteWriterWrapper"],[3,"ReaderWriter"],[3,"Reader"],[3,"Writer"],[3,"LockableIo"],[8,"BlockWriter"],[8,"ByteWriter"],[8,"KnownLength"],[8,"ByteReader"],[8,"BlockReader"]]},\ "ioapic":{"doc":"","t":[3,11,11,11,11,5,5,5,11,11,12,11,11,11,11,11,11,11,11],"n":["IoApic","arbitration_id","borrow","borrow_mut","from","get_first_ioapic","get_ioapic","get_ioapics","handles_irq","id","id","into","mask_irq","new","set_irq","try_from","try_into","type_id","version"],"q":["ioapic","","","","","","","","","","","","","","","","","",""],"d":["A representation of an IoApic (x86-specific interrupt …","gets this IoApic’s arbitration id.","","","","Returns the first IoApic that was created, if any, after …","If an IoApic with the given id exists, then lock it …","Returns a reference to the list of IoApics.","Returns whether this IoApic handles the given irq_num, …","gets this IoApic’s id.","The ID of this IoApic.","","Masks (disables) the given IRQ line. NOTE: this function …","Creates a new IoApic struct from the given id, …","Set IRQ to an interrupt vector.","","","","gets this IoApic’s version."],"i":[0,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1],"f":[null,[[],["u32",15]],[[]],[[]],[[]],[[],[["option",4],["mutexguard",3]]],[[["u8",15]],[["option",4],["mutexguard",3]]],[[],["atomicmap",3]],[[["u32",15]],["bool",15]],[[],["u32",15]],null,[[]],[[["u8",15]]],[[["physicaladdress",3],["pagetable",3],["u32",15],["u8",15]],[["result",4],["str",15]]],[[["u8",15]]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["u32",15]]],"p":[[3,"IoApic"]]},\ -"ixgbe":{"doc":"An ixgbe driver for a 82599 10GbE Network Interface Card.","t":[13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,4,17,17,7,3,13,13,13,13,4,13,4,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,0,5,5,5,5],"n":["Buffer10KiB","Buffer11KiB","Buffer12KiB","Buffer13KiB","Buffer14KiB","Buffer15KiB","Buffer16KiB","Buffer1KiB","Buffer2KiB","Buffer3KiB","Buffer4KiB","Buffer5KiB","Buffer6KiB","Buffer7KiB","Buffer8KiB","Buffer9KiB","FilterProtocol","INTEL_82599","INTEL_VEND","IXGBE_NICS","IxgbeNic","LS100","LS1000","LS10000","LSUnknown","LinkSpeedMbps","Other","RxBufferSizeKiB","Sctp","Tcp","Udp","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","device_id","enable_rss","eq","from","from","from","from","get_ixgbe_nic","get_ixgbe_nics_list","get_received_frame","get_stats","init","into","into","into","into","link_speed","link_status","mac_address","mem_map_msix","poll_receive","send_packet","set_5_tuple_filter","spoof_mac","test_packets","to_owned","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","virtual_function","create_dhcp_test_packet","create_raw_packet","dhcp_request_packet","create_virtual_nic"],"q":["ixgbe","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","ixgbe::test_packets","","","ixgbe::virtual_function"],"d":["","","","","","","","","","","","","","","","","Options for the filter protocol used in the 5-tuple …","Device ID for the 82599ES, used to identify the device …","Vendor ID for Intel","All the 82599 NICs found in the PCI space are initialized …","A struct representing an ixgbe network interface card.","","","","","Possible link speeds of the 82599 NIC","","The set of receive buffer sizes that are accepted by the …","","","","","","","","","","","","","","Returns the device id of the PCI device.","Enable multiple receive queues with RSS. Part of queue …","","","","","","Returns a reference to the IxgbeNic wrapped in a …","Returns a reference to the list of all initialized ixgbe …","","Returns the Rx and Tx statistics in the form: (Good Rx …","Store required values from the device’s PCI config …","","","","","Returns link speed in Mb/s","Returns value of (links, links2) registers","","Returns the memory mapped msix vector table","","","Sets the L3/L4 5-tuple filter which can do an exact match …","","A set of functions to create packets for testing the NIC …","","","","","","","","","","","","","","Interface for an application to request a VirtualNIC from …","Creates a TransmitBuffer containing a dhcp packet.","Creates a TransmitBuffer that contains a packet with only …","Sends a dhcp request packet on the ixgbe NIC.","Create a virtual NIC from the ixgbe device."],"i":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,2,2,2,2,0,3,0,3,3,3,4,3,2,1,4,3,2,1,1,1,4,4,2,4,3,2,1,0,0,4,4,4,4,3,2,1,4,4,4,4,4,4,4,4,0,1,4,3,2,1,4,3,2,1,4,3,2,1,0,0,0,0,0],"f":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["rxbuffersizekib",4]],[[]],[[],["pcilocation",3]],[[["intelixgberegisters2",3],["intelixgberegisters3",3]],[["result",4],["str",15]]],[[["linkspeedmbps",4]],["bool",15]],[[]],[[]],[[]],[[]],[[["pcilocation",3]],[["result",4],["str",15],["mutexirqsafe",3]]],[[],[["option",4],["vec",3]]],[[],[["receivedframe",3],["option",4]]],[[]],[[["pcidevice",3],["u16",15],["pcilocation",3],["bool",15],["linkspeedmbps",4],["option",4],["vec",3],["rxbuffersizekib",4]],[["result",4],["str",15],["mutexirqsafe",3]]],[[]],[[]],[[]],[[]],[[],["linkspeedmbps",4]],[[]],[[]],[[["pcidevice",3]],[["str",15],["result",4],["boxrefmut",6]]],[[],[["result",4],["str",15]]],[[["transmitbuffer",3]],[["result",4],["str",15]]],[[["filterprotocol",4],["option",4],["option",4],["u16",15],["option",4],["u8",15]],[["str",15],["u8",15],["result",4]]],[[]],null,[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,[[],[["str",15],["result",4],["transmitbuffer",3]]],[[],[["str",15],["result",4],["transmitbuffer",3]]],[[["pcilocation",3]],[["result",4],["str",15]]],[[["pcilocation",3],["usize",15],["vec",3]],[["result",4],["str",15],["virtualnic",3]]]],"p":[[4,"RxBufferSizeKiB"],[4,"LinkSpeedMbps"],[4,"FilterProtocol"],[3,"IxgbeNic"]]},\ +"ixgbe":{"doc":"An ixgbe driver for a 82599 10GbE Network Interface Card.","t":[13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,4,17,17,7,3,13,13,13,13,4,13,4,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,0,5,5,5,5],"n":["Buffer10KiB","Buffer11KiB","Buffer12KiB","Buffer13KiB","Buffer14KiB","Buffer15KiB","Buffer16KiB","Buffer1KiB","Buffer2KiB","Buffer3KiB","Buffer4KiB","Buffer5KiB","Buffer6KiB","Buffer7KiB","Buffer8KiB","Buffer9KiB","FilterProtocol","INTEL_82599","INTEL_VEND","IXGBE_NICS","IxgbeNic","LS100","LS1000","LS10000","LSUnknown","LinkSpeedMbps","Other","RxBufferSizeKiB","Sctp","Tcp","Udp","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","device_id","enable_rss","eq","from","from","from","from","get_ixgbe_nic","get_ixgbe_nics_list","get_received_frame","get_stats","init","into","into","into","into","link_speed","link_status","mac_address","mem_map_msix","poll_receive","send_packet","set_5_tuple_filter","spoof_mac","test_packets","to_owned","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","virtual_function","create_dhcp_test_packet","create_raw_packet","dhcp_request_packet","create_virtual_nic"],"q":["ixgbe","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","ixgbe::test_packets","","","ixgbe::virtual_function"],"d":["","","","","","","","","","","","","","","","","Options for the filter protocol used in the 5-tuple …","Device ID for the 82599ES, used to identify the device …","Vendor ID for Intel","All the 82599 NICs found in the PCI space are initialized …","A struct representing an ixgbe network interface card.","","","","","Possible link speeds of the 82599 NIC","","The set of receive buffer sizes that are accepted by the …","","","","","","","","","","","","","","Returns the device id of the PCI device.","Enable multiple receive queues with RSS. Part of queue …","","","","","","Returns a reference to the IxgbeNic wrapped in a …","Returns a reference to the list of all initialized ixgbe …","","Returns the Rx and Tx statistics in the form: (Good Rx …","Store required values from the device’s PCI config …","","","","","Returns link speed in Mb/s","Returns value of (links, links2) registers","","Returns the memory mapped msix vector table","","","Sets the L3/L4 5-tuple filter which can do an exact match …","","A set of functions to create packets for testing the NIC …","","","","","","","","","","","","","","Interface for an application to request a VirtualNIC from …","Creates a TransmitBuffer containing a dhcp packet.","Creates a TransmitBuffer that contains a packet with only …","Sends a dhcp request packet on the ixgbe NIC.","Create a virtual NIC from the ixgbe device."],"i":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,2,2,2,2,0,3,0,3,3,3,4,3,2,1,4,3,2,1,1,1,4,4,2,4,3,2,1,0,0,4,4,4,4,3,2,1,4,4,4,4,4,4,4,4,0,1,4,3,2,1,4,3,2,1,4,3,2,1,0,0,0,0,0],"f":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["rxbuffersizekib",4]],[[]],[[],["pcilocation",3]],[[["intelixgberegisters2",3],["intelixgberegisters3",3]],[["result",4],["str",15]]],[[["linkspeedmbps",4]],["bool",15]],[[]],[[]],[[]],[[]],[[["pcilocation",3]],[["result",4],["str",15],["mutexirqsafe",3]]],[[],[["option",4],["vec",3]]],[[],[["receivedframe",3],["option",4]]],[[]],[[["pcidevice",3],["u16",15],["pcilocation",3],["bool",15],["linkspeedmbps",4],["option",4],["vec",3],["rxbuffersizekib",4]],[["result",4],["str",15],["mutexirqsafe",3]]],[[]],[[]],[[]],[[]],[[],["linkspeedmbps",4]],[[]],[[]],[[["pcidevice",3]],[["str",15],["result",4],["boxrefmut",6]]],[[],[["result",4],["str",15]]],[[["transmitbuffer",3]],[["result",4],["str",15]]],[[["filterprotocol",4],["option",4],["option",4],["u16",15],["option",4],["u8",15]],[["str",15],["u8",15],["result",4]]],[[]],null,[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,[[],[["str",15],["transmitbuffer",3],["result",4]]],[[],[["str",15],["transmitbuffer",3],["result",4]]],[[["pcilocation",3]],[["result",4],["str",15]]],[[["pcilocation",3],["usize",15],["vec",3]],[["result",4],["virtualnic",3],["str",15]]]],"p":[[4,"RxBufferSizeKiB"],[4,"LinkSpeedMbps"],[4,"FilterProtocol"],[3,"IxgbeNic"]]},\ "kernel_config":{"doc":"","t":[0,0,0,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17],"n":["display","memory","time","FRAMEBUFFER_MAX_RESOLUTION","ADDRESSABILITY_PER_P4_ENTRY","BYTES_PER_ADDR","ENTRIES_PER_PAGE_TABLE","KERNEL_HEAP_INITIAL_SIZE","KERNEL_HEAP_MAX_SIZE","KERNEL_HEAP_P4_INDEX","KERNEL_HEAP_START","KERNEL_OFFSET","KERNEL_STACK_ALLOCATOR_BOTTOM","KERNEL_STACK_ALLOCATOR_TOP_ADDR","KERNEL_STACK_P4_INDEX","KERNEL_STACK_SIZE_IN_PAGES","KERNEL_TEXT_MAX_SIZE","KERNEL_TEXT_P4_INDEX","KERNEL_TEXT_START","MAX_PAGE_NUMBER","MAX_VIRTUAL_ADDRESS","P1_INDEX_SHIFT","P2_INDEX_SHIFT","P3_INDEX_SHIFT","P4_INDEX_SHIFT","PAGE_SHIFT","PAGE_SIZE","RECURSIVE_P4_INDEX","TEMPORARY_PAGE_VIRT_ADDR","USER_STACK_ALLOCATOR_BOTTOM","USER_STACK_ALLOCATOR_TOP_ADDR","USER_STACK_P4_INDEX","CONFIG_HEARTBEAT_PERIOD_MS","CONFIG_PIT_FREQUENCY_HZ","CONFIG_RTC_FREQUENCY_HZ","CONFIG_TIMESLICE_PERIOD_MICROSECONDS"],"q":["kernel_config","","","kernel_config::display","kernel_config::memory","","","","","","","","","","","","","","","","","","","","","","","","","","","","kernel_config::time","","",""],"d":["","WARNING: DO NOT USE ANY ADDRESS THAT MAPS TO THE SAME P4 …","","The maximum resolution (width, height) of the graphical …","Value: 512 GiB.","64-bit architecture results in 8 bytes per address.","Value: 512. ","","the kernel heap gets the whole 509th P4 entry.","Value: 509. The 509th entry is used for the kernel heap","The higher-half heap gets the 512GB address range …","The virtual address where the initial kernel (the …","the kernel stack allocator gets the 508th P4 entry of …","the highest actually usuable address in the kernel stack …","Value: 508. The 508th entry is used for all kernel stacks","","The size in bytes, not in pages.","Value: 511. The 511th entry is used for kernel text …","The kernel text region is where we load kernel modules. …","","","Value: 0. Shift the Page number (not the address!) by …","Value: 9. Shift the Page number (not the address!) by …","Value: 18. Shift the Page number (not the address!) by …","Value: 27. Shift the Page number (not the address!) by …","The lower 12 bits of a virtual address correspond to the …","Page size is 4096 bytes, 4KiB pages.","Value: 510. The 510th entry is used for the recursive P4 …","","the userspace stack allocators (one per userspace task) …","the highest actually usuable address in each userspace …","Value: 507. The 507th entry is used for all userspace …","the heartbeat period in milliseconds","the chosen interrupt frequency (in Hertz) of the PIT …","the chosen interrupt frequency (in Hertz) of the RTC. …","The timeslice period, specified in microseconds."],"i":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"f":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"p":[]},\ "keyboard":{"doc":"","t":[5,5],"n":["handle_keyboard_input","init"],"q":["keyboard",""],"d":["returns Ok(()) if everything was handled properly. …","Initialize the keyboard driver. Arguments: a reference …"],"i":[0,0],"f":[[[["bool",15],["u8",15]],[["result",4],["str",15]]],[[["queue",3],["event",4]]]],"p":[]},\ "keycodes_ascii":{"doc":"","t":[13,18,18,13,13,13,13,13,13,18,18,18,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,17,4,3,3,4,13,13,13,13,13,13,13,13,18,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,18,18,18,18,18,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["A","ALT","ALT_GR","Alt","B","Backslash","Backspace","Backtick","C","CAPS_LOCK","CONTROL_LEFT","CONTROL_RIGHT","CapsLock","Comma","Control","D","Delete","Down","E","End","Enter","Equals","Escape","F","F1","F10","F11","F12","F2","F3","F4","F5","F6","F7","F8","F9","G","H","Home","I","Insert","J","K","KEY_RELEASED_OFFSET","KeyAction","KeyEvent","KeyboardModifiers","Keycode","L","Left","LeftBracket","LeftShift","M","Menu","Minus","N","NUM_LOCK","NonUsBackslash","Num0","Num1","Num2","Num3","Num4","Num5","Num6","Num7","Num8","Num9","NumLock","O","OverflowError","P","Pad5","PadMinus","PadMultiply","PadPlus","PageDown","PageUp","Pause","Period","Pressed","Q","Quote","R","Released","Right","RightBracket","RightShift","S","SCROLL_LOCK","SHIFT_LEFT","SHIFT_RIGHT","SUPER_KEY_LEFT","SUPER_KEY_RIGHT","ScrollLock","Semicolon","Slash","Space","SuperKeyLeft","SuperKeyRight","T","Tab","U","Unknown1","Unknown2","Unknown3","Up","V","W","X","Y","Z","action","all","bitand","bitand_assign","bitor","bitor_assign","bits","bitxor","bitxor_assign","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","cmp","complement","contains","default","difference","empty","eq","eq","eq","extend","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from_bits","from_bits_truncate","from_bits_unchecked","from_iter","from_scancode","hash","insert","intersection","intersects","into","into","into","into","is_all","is_alt","is_alt_gr","is_caps_lock","is_control","is_empty","is_letter","is_num_lock","is_scroll_lock","is_shift","is_super_key","keycode","modifiers","ne","new","new","not","partial_cmp","remove","scancode_to_ascii","set","sub","sub_assign","symmetric_difference","to_ascii","toggle","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","union"],"q":["keycodes_ascii","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The offset that a keyboard adds to the scancode to …","Whether a keyboard event was a key press or a key …","The KeyEvent that should be delivered to applications …","The set of modifier keys that can be held down while …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the set containing all flags.","Returns the intersection between the two sets of flags.","Disables all flags disabled in the set.","Returns the union of the two sets of flags.","Adds the set of flags.","Returns the raw value of the flags currently stored.","Returns the left flags, but with all the right flags …","Toggles the set of flags.","","","","","","","","","","","","","","Returns the complement of this set of flags.","Returns true if all of the flags in other are contained …","","Returns the difference between the flags in self and other…","Returns an empty set of flags.","","","","","","","","","","","","","","","","","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, preserving all…","","","","Inserts the specified flags in-place.","Returns the intersection between the flags in self and …","Returns true if there are flags common to both self and …","","","","","Returns true if all flags are currently set.","Returns true if the Alt key is held down.","Returns true if the AltGr key is held down.","Returns true if the Caps Lock key is held down.","Returns true if a Control key is held down (either left …","Returns true if no flags are currently stored.","returns true if this keycode was a letter from A-Z","Returns true if the Num Lock key is held down.","Returns true if the Scroll Lock key is held down.","Returns true if a Shift key is held down (either left or …","Returns true if a Super key is held down (either left or …","","","","Returns a new KeyboardModifiers struct with no keys …","","Returns the complement of this set of flags.","","Removes the specified flags in-place.","convenience function for obtaining the ascii value for a …","Inserts or removes the specified flags depending on the …","Returns the set difference of the two sets of flags.","Disables all flags enabled in the set.","Returns the symmetric difference between the flags in self…","Obtains the ascii value for a keycode under the given …","Toggles the specified flags in-place.","","","","","","","","","","","","","Returns the union of between the flags in self and other."],"i":[1,2,2,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,3,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,2,2,2,2,2,2,2,2,2,3,4,1,2,3,4,1,2,3,4,1,2,2,2,2,2,2,2,3,1,2,2,2,2,2,2,3,4,1,2,3,4,1,2,2,2,2,1,2,2,2,2,2,3,4,1,2,2,2,2,2,2,1,2,2,2,2,4,4,2,2,4,2,2,2,0,2,2,2,2,1,2,2,3,4,1,2,3,4,1,2,3,4,1,2],"f":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[["keyboardmodifiers",3]]],[[]],[[],["u16",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["keyboardmodifiers",3]],[[],["keyaction",4]],[[],["keyevent",3]],[[],["keycode",4]],[[["keyboardmodifiers",3]],["ordering",4]],[[]],[[],["bool",15]],[[]],[[]],[[]],[[["keyboardmodifiers",3]],["bool",15]],[[["keyaction",4]],["bool",15]],[[["keycode",4]],["bool",15]],[[["intoiterator",8]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[["u16",15]],["option",4]],[[["u16",15]]],[[["u16",15]]],[[["intoiterator",8]]],[[["u8",15]],[["option",4],["keycode",4]]],[[]],[[]],[[]],[[],["bool",15]],[[]],[[]],[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],null,null,[[["keyboardmodifiers",3]],["bool",15]],[[],["keyboardmodifiers",3]],[[["keyaction",4],["keycode",4],["keyboardmodifiers",3]],["keyevent",3]],[[]],[[["keyboardmodifiers",3]],[["ordering",4],["option",4]]],[[]],[[["keyboardmodifiers",3],["u8",15]],[["option",4],["char",15]]],[[["bool",15]]],[[]],[[]],[[]],[[["keyboardmodifiers",3]],[["option",4],["char",15]]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]]],"p":[[4,"Keycode"],[3,"KeyboardModifiers"],[4,"KeyAction"],[3,"KeyEvent"]]},\ "libterm":{"doc":"A basic terminal emulator library.","t":[17,17,13,4,3,11,11,11,11,11,0,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,3,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,12],"n":["FONT_BACKGROUND_COLOR","FONT_FOREGROUND_COLOR","OffEndBound","ScrollError","Terminal","borrow","borrow","borrow_mut","borrow_mut","clear","cursor","cursor","display_cursor","from","from","get_cursor_offset_from_end","get_event","get_text_dimensions","insert_char","into","into","move_screen_line_down","move_screen_line_up","move_screen_page_down","move_screen_page_up","move_screen_to_begin","move_screen_to_end","new","print_to_terminal","refresh_display","remove_char","resize","try_from","try_from","try_into","try_into","type_id","type_id","update_cursor_pos","window","Cursor","blink","borrow","borrow_mut","default","disable","display","enable","from","into","offset_from_end","offset_from_end","reset","set_offset_from_end","set_underlying_char","show","try_from","try_into","type_id","underlying_char","underlying_char"],"q":["libterm","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","libterm::cursor","","","","","","","","","","","","","","","","","","","",""],"d":["","","Occurs when a index-calculation returns an index that is …","Error type for tracking different scroll errors that a …","An instance of a graphical terminal emulator.","","","","","Clear the scrollback buffer and reset the scroll …","","The cursor of the terminal.","Display the cursor of the terminal.","","","Gets the position of the cursor relative to the end of …","Gets an event from the window’s event queue.","Gets the width and height of the text displayable in …","Insert a character to the terminal.","","","Scroll the screen a line down.","Scroll the screen a line up.","Scroll the screen a page down.","Scroll the screen a page up.","Scroll the screen to the very beginning.","Scroll the screen to the very end.","Creates a new terminal and adds it to the window manager …","Adds a string to be printed to the terminal to the …","Actually refresh the screen. Currently it’s expensive.","Remove a character from the terminal.","Resizes this terminal and its underlying text display and …","","","","","","","Updates the position of a cursor.","The terminal’s own window.","The cursor structure used in the terminal. A cursor is a …","Let a cursor blink. It is invoked in a loop.","","","","Disable a cursor","Display a cursor in a framebuffer","Enable a cursor","","","Gets the position of the cursor relative to the end of …","The position of the cursor relative to the end of …","Reset the state of the cursor as unseen","Sets the position of the cursor relative to the end of …","Sets the character at the position of the cursor","Whether a cursor is seen","","","","Gets the character at the position of the cursor","The underlying character at the position of the cursor. …"],"i":[0,0,1,0,0,1,2,1,2,2,0,2,2,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,1,2,2,2,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],"f":[null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],null,null,[[],[["result",4],["str",15]]],[[]],[[]],[[],["usize",15]],[[],[["event",4],["option",4]]],[[]],[[["usize",15],["char",15]],[["result",4],["str",15]]],[[]],[[]],[[],[["result",4],["str",15]]],[[],[["result",4],["str",15]]],[[],[["result",4],["str",15]]],[[],[["result",4],["str",15]]],[[],[["result",4],["str",15]]],[[],[["result",4],["str",15]]],[[],[["str",15],["result",4],["terminal",3]]],[[["string",3]]],[[],[["result",4],["str",15]]],[[["usize",15]],[["result",4],["str",15]]],[[["rectangle",3]],[["result",4],["str",15]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[["usize",15],["u8",15]]],null,null,[[],["bool",15]],[[]],[[]],[[]],[[]],[[["coord",3],["usize",15],["framebuffer",3]],[["str",15],["rectangle",3],["result",4]]],[[]],[[]],[[]],[[],["usize",15]],null,[[]],[[["usize",15]]],[[["u8",15]]],[[],["bool",15]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["u8",15]],null],"p":[[4,"ScrollError"],[3,"Terminal"],[3,"Cursor"]]},\ -"libtest":{"doc":"","t":[14,3,17,11,11,5,5,5,11,11,5,5,5,11,12,12,12,12,12,5,12,12,5,5,12,5,11,11,11],"n":["CPU_ID","Stats","THRESHOLD_ERROR_RATIO","borrow","borrow_mut","calculate_stats","check_myrq","cycle_count_overhead","fmt","from","hpet_2_ns","hpet_2_us","hpet_timing_overhead","into","max","mean","median","min","mode","nr_tasks_in_rq","p_25","p_75","pick_free_core","start_counting_reference_cycles","std_dev","stop_counting_reference_cycles","try_from","try_into","type_id"],"q":["libtest","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["","","","","","Helper function to calculate statistics of a provided …","True if only two tasks are running in the current …","Measures the overhead of using the PMU reference cycles …","","","Helper function to convert ticks to nano seconds","Helper function to convert ticks to micro seconds","Measures the overhead of using the hpet timer. Calls …","","","","","","","Helper function return the tasks in a given core’s …","","","Helper function to pick a free child core if possible","Starts the PMU counter to measure reference cycles. The …","","Stops the PMU counter and stores the reference cycles …","","",""],"i":[0,0,0,1,1,0,0,0,1,1,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,0,1,1,1],"f":[null,null,null,[[]],[[]],[[["vec",3]],[["option",4],["stats",3]]],[[],["bool",15]],[[],[["str",15],["result",4],["u64",15]]],[[["formatter",3]],["result",6]],[[]],[[["u64",15]],["u64",15]],[[["u64",15]],["u64",15]],[[],[["str",15],["result",4],["u64",15]]],[[]],null,null,null,null,null,[[["u8",15]],[["option",4],["usize",15]]],null,null,[[],[["str",15],["u8",15],["result",4]]],[[],[["counter",3],["result",4],["str",15]]],null,[[["counter",3]],[["str",15],["result",4],["u64",15]]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]]],"p":[[3,"Stats"]]},\ +"libtest":{"doc":"","t":[14,3,17,11,11,5,5,5,11,11,5,5,5,11,12,12,12,12,12,5,12,12,5,5,12,5,11,11,11],"n":["CPU_ID","Stats","THRESHOLD_ERROR_RATIO","borrow","borrow_mut","calculate_stats","check_myrq","cycle_count_overhead","fmt","from","hpet_2_ns","hpet_2_us","hpet_timing_overhead","into","max","mean","median","min","mode","nr_tasks_in_rq","p_25","p_75","pick_free_core","start_counting_reference_cycles","std_dev","stop_counting_reference_cycles","try_from","try_into","type_id"],"q":["libtest","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["","","","","","Helper function to calculate statistics of a provided …","True if only two tasks are running in the current …","Measures the overhead of using the PMU reference cycles …","","","Helper function to convert ticks to nano seconds","Helper function to convert ticks to micro seconds","Measures the overhead of using the hpet timer. Calls …","","","","","","","Helper function return the tasks in a given core’s …","","","Helper function to pick a free child core if possible","Starts the PMU counter to measure reference cycles. The …","","Stops the PMU counter and stores the reference cycles …","","",""],"i":[0,0,0,1,1,0,0,0,1,1,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,0,1,1,1],"f":[null,null,null,[[]],[[]],[[["vec",3]],[["option",4],["stats",3]]],[[],["bool",15]],[[],[["str",15],["result",4],["u64",15]]],[[["formatter",3]],["result",6]],[[]],[[["u64",15]],["u64",15]],[[["u64",15]],["u64",15]],[[],[["str",15],["result",4],["u64",15]]],[[]],null,null,null,null,null,[[["u8",15]],[["option",4],["usize",15]]],null,null,[[],[["str",15],["u8",15],["result",4]]],[[],[["result",4],["counter",3],["str",15]]],null,[[["counter",3]],[["str",15],["result",4],["u64",15]]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]]],"p":[[3,"Stats"]]},\ "lockable":{"doc":"Traits for items that are “Lockable”, e.g., Mutexes.","t":[16,16,8,8,10,10,10,10,10,10,10],"n":["Guard","GuardMut","Lockable","LockableSized","get_mut","into_inner","is_locked","lock","lock_mut","try_lock","try_lock_mut"],"q":["lockable","","","","","","","","","",""],"d":["The immutable “guard” type returned by the […","The mutable “guard” type returned by the […","A trait representing types that can be locked, e.g., Mutex…","An extension of the [Lockable] trait that adds the …","Returns a mutable reference to the underlying data.","Consumes the lock, returning the underlying data.","Returns true if this lock is currently locked. ","Obtain the lock in a blocking fashion, returning an …","Obtain the lock in a blocking fashion, returning a …","Attempt to obtain the lock in a non-blocking fashion, …","Attempt to obtain the lock in a non-blocking fashion, …"],"i":[1,1,0,0,1,2,1,1,1,1,1],"f":[null,null,null,null,[[]],[[]],[[],["bool",15]],[[]],[[]],[[],["option",4]],[[],["option",4]]],"p":[[8,"Lockable"],[8,"LockableSized"]]},\ "logger":{"doc":"A basic logger implementation for system-wide logging in …","t":[13,13,13,13,4,6,13,13,13,13,13,11,11,11,11,5,11,5,5,11,11,11,5,5],"n":["Black","Blue","Cyan","Green","LogColor","LogOutputFunc","Purple","Red","Reset","White","Yellow","as_terminal_string","borrow","borrow_mut","from","init","into","mirror_to_vga","set_log_level","try_from","try_into","type_id","write_fmt","write_str"],"q":["logger","","","","","","","","","","","","","","","","","","","","","","",""],"d":["","","","","See ANSI terminal formatting schemes","","","","","","","","","","","Initialize the Theseus system logger.","","Call this to enable mirroring logging macros to the screen","Set the log level, which determines whether a given log …","","","","Convenience function for writing formatted arguments to …","Convenience function for writing a simple string to the …"],"i":[1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0,1,0,0,1,1,1,0,0],"f":[null,null,null,null,null,null,null,null,null,null,null,[[],["str",15]],[[]],[[]],[[]],[[["option",4],["level",4]],[["setloggererror",3],["result",4]]],[[]],[[["logoutputfunc",6]]],[[["level",4]]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[["arguments",3]],["result",6]],[[["str",15]],["result",6]]],"p":[[4,"LogColor"]]},\ -"madt":{"doc":"Support for the MADT ACPI table, which includes …","t":[13,13,13,13,17,3,4,3,3,3,3,3,3,13,13,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,11,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,5,12,11,11,11,11,11,11,11,11,11,12,11,12,11,11,11,11,11,11,11,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["IntSrcOverride","IoApic","LocalApic","LocalApicAddressOverride","MADT_SIGNATURE","Madt","MadtEntry","MadtIntSrcOverride","MadtIoApic","MadtIter","MadtLocalApic","MadtLocalApicAddressOverride","MadtNonMaskableInterrupt","NonMaskableInterrupt","UnknownOrCorrupt","address","apic_id","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","bsp_init","bus_source","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","find_nmi_entry_for_processor","flags","flags","flags","flags","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","get","gsi","gsi_base","handle","id","into","into","into","into","into","into","into","into","into_iter","irq_source","iter","lint","local_apic_phys_addr","next","only_derive_is_allowed_to_implement_this_trait","only_derive_is_allowed_to_implement_this_trait","only_derive_is_allowed_to_implement_this_trait","only_derive_is_allowed_to_implement_this_trait","only_derive_is_allowed_to_implement_this_trait","phys_addr","processor","processor","sdt","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id"],"q":["madt","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["A Interrupt Source Override MADT entry.","A IOAPIC MADT entry.","A Local APIC MADT entry.","A Local APIC Address Override MADT entry.","","A wrapper around the MADT ACPI table (Multiple APIC …","The set of possible MADT Entries.","MADT Interrupt Source Override","MADT I/O APIC","An [Iterator] over the dynamic entries of the MADT. Its …","MADT Local APIC","MADT Local APIC Address Override. If this struct exists, …","MADT Non-maskable Interrupt. Use these to configure the …","A Non-Maskable Interrupt MADT entry.","The MADT table had an entry of an unknown type or …","I/O APIC address","Local APIC ID","","","","","","","","","","","","","","","","","Performs initialization functions of the IOAPIC and …","Bus Source","","","","","","","","","","","","","","","Finds the Non-Maskable Interrupt (NMI) entry in the MADT …","Returns the flags value in this MADT table.","Flags. 1 means that the processor is enabled","Flags","Flags","","","","","","","","","","","","","","","Finds the MADT in the given AcpiTables and returns a …","Global system interrupt","Global system interrupt base","The handler for parsing the MADT table and adding it to …","I/O APIC ID","","","","","","","","","","IRQ Source","Returns an [Iterator] over the MADT’s entries, which …","LINT (either 0 or 1)","Returns the Local APIC physical address value in this …","","","","","","","Local APIC physical address","Processor ID","which processor this is for, 0xFF means all processors","Returns a reference to the Sdt header in this MADT table.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,2,3,4,5,1,3,2,6,7,8,4,5,1,3,2,6,7,8,4,6,5,1,3,2,6,7,8,5,1,3,2,6,7,8,0,4,3,6,7,1,3,2,6,7,8,4,5,1,3,2,6,7,8,4,6,2,0,2,4,5,1,3,2,6,7,8,5,6,4,7,4,5,3,2,6,7,8,8,3,7,4,5,1,3,2,6,7,8,4,5,1,3,2,6,7,8,4,5,1,3,2,6,7,8,4,5,1,3,2,6,7,8],"f":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["pagetable",3]],[["result",4],["str",15]]],null,[[],["madtiter",3]],[[],["madtentry",4]],[[],["madtlocalapic",3]],[[],["madtioapic",3]],[[],["madtintsrcoverride",3]],[[],["madtnonmaskableinterrupt",3]],[[],["madtlocalapicaddressoverride",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["u8",15],["madtiter",3]]],[[],["u32",15]],null,null,null,[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["acpitables",3]],[["option",4],["madt",3]]],null,null,[[["physicaladdress",3],["acpitables",3],["acpisignature",6],["usize",15]],[["result",4],["str",15]]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,[[],["madtiter",3]],null,[[],["u32",15]],[[],["option",4]],[[]],[[]],[[]],[[]],[[]],null,null,null,[[],["sdt",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]]],"p":[[4,"MadtEntry"],[3,"MadtIoApic"],[3,"MadtLocalApic"],[3,"Madt"],[3,"MadtIter"],[3,"MadtIntSrcOverride"],[3,"MadtNonMaskableInterrupt"],[3,"MadtLocalApicAddressOverride"]]},\ +"madt":{"doc":"Support for the MADT ACPI table, which includes …","t":[13,13,13,13,17,3,4,3,3,3,3,3,3,13,13,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,11,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,5,12,11,11,11,11,11,11,11,11,11,12,11,12,11,11,11,11,11,11,11,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["IntSrcOverride","IoApic","LocalApic","LocalApicAddressOverride","MADT_SIGNATURE","Madt","MadtEntry","MadtIntSrcOverride","MadtIoApic","MadtIter","MadtLocalApic","MadtLocalApicAddressOverride","MadtNonMaskableInterrupt","NonMaskableInterrupt","UnknownOrCorrupt","address","apic_id","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","bsp_init","bus_source","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","find_nmi_entry_for_processor","flags","flags","flags","flags","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","get","gsi","gsi_base","handle","id","into","into","into","into","into","into","into","into","into_iter","irq_source","iter","lint","local_apic_phys_addr","next","only_derive_is_allowed_to_implement_this_trait","only_derive_is_allowed_to_implement_this_trait","only_derive_is_allowed_to_implement_this_trait","only_derive_is_allowed_to_implement_this_trait","only_derive_is_allowed_to_implement_this_trait","phys_addr","processor","processor","sdt","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id"],"q":["madt","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["A Interrupt Source Override MADT entry.","A IOAPIC MADT entry.","A Local APIC MADT entry.","A Local APIC Address Override MADT entry.","","A wrapper around the MADT ACPI table (Multiple APIC …","The set of possible MADT Entries.","MADT Interrupt Source Override","MADT I/O APIC","An [Iterator] over the dynamic entries of the MADT. Its …","MADT Local APIC","MADT Local APIC Address Override. If this struct exists, …","MADT Non-maskable Interrupt. Use these to configure the …","A Non-Maskable Interrupt MADT entry.","The MADT table had an entry of an unknown type or …","I/O APIC address","Local APIC ID","","","","","","","","","","","","","","","","","Performs initialization functions of the IOAPIC and …","Bus Source","","","","","","","","","","","","","","","Finds the Non-Maskable Interrupt (NMI) entry in the MADT …","Returns the flags value in this MADT table.","Flags. 1 means that the processor is enabled","Flags","Flags","","","","","","","","","","","","","","","Finds the MADT in the given AcpiTables and returns a …","Global system interrupt","Global system interrupt base","The handler for parsing the MADT table and adding it to …","I/O APIC ID","","","","","","","","","","IRQ Source","Returns an [Iterator] over the MADT’s entries, which …","LINT (either 0 or 1)","Returns the Local APIC physical address value in this …","","","","","","","Local APIC physical address","Processor ID","which processor this is for, 0xFF means all processors","Returns a reference to the Sdt header in this MADT table.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,2,3,4,5,1,3,2,6,7,8,4,5,1,3,2,6,7,8,4,6,5,1,3,2,6,7,8,5,1,3,2,6,7,8,0,4,3,6,7,1,3,2,6,7,8,4,5,1,3,2,6,7,8,4,6,2,0,2,4,5,1,3,2,6,7,8,5,6,4,7,4,5,3,2,6,7,8,8,3,7,4,5,1,3,2,6,7,8,4,5,1,3,2,6,7,8,4,5,1,3,2,6,7,8,4,5,1,3,2,6,7,8],"f":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["pagetable",3]],[["result",4],["str",15]]],null,[[],["madtiter",3]],[[],["madtentry",4]],[[],["madtlocalapic",3]],[[],["madtioapic",3]],[[],["madtintsrcoverride",3]],[[],["madtnonmaskableinterrupt",3]],[[],["madtlocalapicaddressoverride",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["u8",15],["madtiter",3]]],[[],["u32",15]],null,null,null,[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["acpitables",3]],[["option",4],["madt",3]]],null,null,[[["acpitables",3],["acpisignature",6],["usize",15],["physicaladdress",3]],[["result",4],["str",15]]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,[[],["madtiter",3]],null,[[],["u32",15]],[[],["option",4]],[[]],[[]],[[]],[[]],[[]],null,null,null,[[],["sdt",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]]],"p":[[4,"MadtEntry"],[3,"MadtIoApic"],[3,"MadtLocalApic"],[3,"Madt"],[3,"MadtIter"],[3,"MadtIntSrcOverride"],[3,"MadtNonMaskableInterrupt"],[3,"MadtLocalApicAddressOverride"]]},\ "mapper_spillful":{"doc":"","t":[],"n":[],"q":[],"d":[],"i":[],"f":[],"p":[]},\ "memfs":{"doc":"This crate contains an implementation of an in-memory …","t":[3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["MemFile","as_mapping","borrow","borrow_mut","from","from_mapped_pages","get_name","get_parent_dir","into","new","read","set_parent_dir","size","try_from","try_into","type_id","write"],"q":["memfs","","","","","","","","","","","","","","","",""],"d":["The struct that represents a file in memory that is …","","","","","Creates a new MemFile in the given parent directory with …","","","","Allocates writable memory space for the given contents …","","","","","","",""],"i":[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"f":[null,[[],[["str",15],["result",4],["mappedpages",3]]],[[]],[[]],[[]],[[["dirref",6],["string",3],["mappedpages",3],["usize",15]],[["fileref",6],["str",15],["result",4]]],[[],["string",3]],[[],[["option",4],["dirref",6]]],[[]],[[["string",3],["dirref",6]],[["fileref",6],["str",15],["result",4]]],[[["usize",15]],[["result",4],["usize",15],["str",15]]],[[["weakdirref",6]]],[[],["usize",15]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[["usize",15]],[["result",4],["usize",15],["str",15]]]],"p":[[3,"MemFile"]]},\ "memory":{"doc":"This crate implements the virtual memory subsystem for …","t":[18,3,3,3,7,18,3,3,18,3,3,13,3,3,13,18,18,3,3,3,4,6,18,18,13,18,3,3,3,3,3,3,13,3,3,18,13,4,3,3,18,18,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,5,5,5,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,12,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,11,11,11,5,5,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,12,11,5,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["ACCESSED","AggregatedSectionMemoryBounds","AllocatedFrames","AllocatedPages","BROADCAST_TLB_SHOOTDOWN_FUNC","DIRTY","DeferredAllocAction","DeferredAllocAction","EXCLUSIVE","EntryFlags","EntryFlags","Exclusive","Frame","FrameRange","Free","GLOBAL","HUGE_PAGE","MappedPages","Mapper","MemoryManagementInfo","MemoryRegionType","MmiRef","NO_CACHE","NO_EXECUTE","NonExclusive","PRESENT","Page","PageRange","PageTable","PageTableEntry","PhysicalAddress","PhysicalMemoryRegion","Reserved","SectionMemoryBounds","TemporaryPage","USER_ACCESSIBLE","Unknown","UnmapResult","UnmappedFrames","VirtualAddress","WRITABLE","WRITE_THROUGH","add","add","add","add","add","add","add_assign","add_assign","add_assign","add_assign","add_assign","add_assign","address_at_offset","address_at_offset","all","allocate_frames","allocate_frames_at","allocate_frames_by_bytes","allocate_frames_by_bytes_at","allocate_frames_by_bytes_deferred","allocate_frames_deferred","allocate_pages","allocate_pages_at","allocate_pages_by_bytes","allocate_pages_by_bytes_at","allocate_pages_by_bytes_deferred","allocate_pages_deferred","as_slice","as_slice_mut","as_type","as_type_mut","backward_checked","backward_checked","bitand","bitand","bitand","bitand_assign","bitand_assign","bitand_assign","bitor","bitor","bitor","bitor_assign","bitor_assign","bitor_assign","bits","bitxor","bitxor","bitxor","bitxor_assign","bitxor_assign","bitxor_assign","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","cmp","containing_address","containing_address","contains","contains_address","contains_address","create_contiguous_mapping","create_mapping","data","default","default","default","deref","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop","drop","drop","dump_pte","empty","empty","empty","empty","empty","empty","end","eq","eq","eq","eq","eq","eq","eq","eq","extend","extra_mapped_pages","flags","flags","flags","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","forward_checked","forward_checked","frame_offset","frames","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_bits","from_bits_truncate","from_elf_program_flags","from_elf_section_flags","from_iter","from_multiboot2_section_flags","from_phys_addr","from_virt_addr","get_current_p4","get_kernel_mmi_ref","hash","hash","hash","init","init","init","init_post_heap","insert","intersects","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into_exclusive","into_huge","into_iter","into_iter","into_non_exclusive","into_writable","is_all","is_empty","is_exclusive","is_executable","is_huge","is_unused","is_writable","map_allocated_pages","map_allocated_pages_to","map_table_frame","merge","merge","merge","ne","ne","ne","ne","ne","ne","ne","new","new","new","new","new","new","new_canonical","new_canonical","new_table","not","number","number","offset_of_address","offset_of_address","only_derive_is_allowed_to_implement_this_trait","only_derive_is_allowed_to_implement_this_trait","only_derive_is_allowed_to_implement_this_trait","overlap","overlap","p1_index","p2_index","p3_index","p4_index","page_offset","page_table","page_table","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","physical_address","pointed_frame","remap","remove","rodata","set","set_broadcast_tlb_shootdown_cb","set_entry","set_unmapped","size_in_bytes","size_in_bytes","size_in_frames","size_in_pages","split","split","stack","start","start_address","start_address","start_address","start_address","steps_between","steps_between","sub","sub","sub","sub","sub","sub","sub","sub_assign","sub_assign","sub_assign","sub_assign","sub_assign","sub_assign","sub_assign","switch","text","to_extended","to_extended","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","toggle","translate","translate_page","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","typ","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unmap_into_parts","unmap_into_parts","value","value","value","with","zero","zero","zero"],"q":["memory","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["The hardware will set this bit when the page is accessed.","The address bounds and flags of the initial kernel …","Represents a range of allocated PhysicalAddresses, …","Represents a range of allocated VirtualAddresses, …","","The hardware will set this bit when the page has been …","A series of pending actions related to page allocator …","A series of pending actions related to frame allocator …","Set this bit to indicate that the frame pointed to by …","Page table entry flags on the x86_64 architecture. ","Page table entry flags on the x86_64 architecture. ","","A Frame is a chunk of physical memory aligned to a […","A range of [Frame]s that are contiguous in physical …","Memory that is available for any general purpose.","Set this bit to indicate that this page is mapped across …","Set this bit if this page table entry represents a “huge…","Represents a contiguous range of virtual memory pages …","","This holds all the information for a Task’s memory …","Types of physical memory. See each variant’s …","A shareable reference to a MemoryManagementInfo struct …","If set, this page’s content is never cached, neither …","Set this bit to forbid execution of the mapped page. In …","","If set, this page is currently “present” in memory. …","A Page is a chunk of virtual memory aligned to a […","A range of [Page]s that are contiguous in virtual memory.","A top-level root (P4) page table.","A page table entry, which is a u64 value under the hood.","A physical memory address, which is a usize under the …","A region of physical memory.","Memory that is reserved for special use and is only ever …","The address bounds and mapping flags of a section’s …","A page that can be temporarily mapped to the recursive …","If set, userspace (ring 3) can access this page. If not …","Memory of an unknown type. This is a default value that …","The frames returned from the action of unmapping a page …","A range of frames that have been unmapped from a …","A virtual memory address, which is a usize under the hood.","If set, writes to this page are allowed. If not set, this …","If set, writes to this page go directly through the cache …","","","","","","","","","","","","","Returns the [VirtualAddress] at the given offset into …","Returns the [PhysicalAddress] at the given offset into …","Returns the set containing all flags.","Allocates the given number of frames with no constraints …","Allocates the given number of frames starting at …","Allocates frames with no constraints on the starting …","Allocates frames starting at the given PhysicalAddress …","Similar to allocated_frames_deferred(), but accepts a …","The core frame allocation routine that allocates the …","Allocates the given number of pages with no constraints …","Allocates the given number of pages starting at …","Allocates pages with no constraints on the starting …","Allocates pages starting at the given VirtualAddress with …","Similar to allocated_pages_deferred(), but accepts a size …","The core page allocation routine that allocates the given …","Reinterprets this MappedPages’s underlying memory …","Same as as_slice(), but returns a mutable slice. ","Reinterprets this MappedPages’s underlying memory …","Same as as_type(), but returns a mutable reference to the …","","","","","Returns the intersection between the two sets of flags.","","","Disables all flags disabled in the set.","","","Returns the union of the two sets of flags.","","","Adds the set of flags.","Returns the raw value of the flags currently stored.","","","Returns the left flags, but with all the right flags …","","","Toggles the set of flags.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the Page containing the given VirtualAddress.","Returns the Frame containing the given PhysicalAddress.","Returns true all of the flags in other are contained …","Returns true if this PageRange contains the given […","Returns true if this FrameRange contains the given […","A convenience function that creates a new memory mapping …","A convenience function that creates a new memory mapping. …","","","","","","","","","","","","","","","","","","","","","","Dumps all page table entries at all four page table …","Returns an empty MappedPages object that performs no …","Creates a PageRange that will always yield None when …","Creates a FrameRange that will always yield None when …","Returns an empty set of flags","Returns an empty AllocatedPages object that performs no …","Returns an empty AllocatedFrames object that performs no …","The ending virtual address and physical address.","","","","","","","","","","a list of additional virtual-mapped Pages that have the …","Returns the flags that describe this MappedPages page …","Returns this PageTableEntry’s flags.","The page table entry flags that should be used for …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the offset from the frame boundary specified by …","","","","","","","","","","","","","","","","","","","","","","","","","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, dropping any …","Gets flags according to the properties of a program. ","Gets flags according to the properties of a section from …","","Gets flags according to the properties of a section from …","A convenience method for creating a new FrameRange that …","A convenience method for creating a new PageRange that …","Returns the current top-level (P4) root page table frame.","Returns a cloned reference to the kernel’s …","","","","Initialize the frame allocator with the given list of …","Initializes the virtual memory management system. …","Initialize the page allocator.","Finishes initializing the virtual memory management …","Inserts the specified flags in-place.","Returns true if there are flags common to both self and …","","","","","","","","","","","","","","","","","","","","","","","","","","","Copies this EntryFlags into a new one with the exclusive …","Copies this new EntryFlags object and sets the huge page …","","","Copies this EntryFlags into a new one with the exclusive …","Copies this new EntryFlags object and sets the writable …","Returns true if all flags are currently set.","Returns true if no flags are currently stored.","Returns true if these flags are exclusive. ","Returns true if these flags are executable.","Returns true if the page the entry points to is a huge …","Returns true if this entry is unused, i.e., …","Returns true if the page is writable.","Maps the given AllocatedPages to randomly chosen …","Maps the given virtual AllocatedPages to the given …","Maps the temporary page to the given page table frame in …","Merges the given MappedPages object mp into this …","Merges the given AllocatedPages object ap into this …","Merges the given AllocatedFrames object ap into this …","","","","","","","","Creates a new [TemporaryPage] but does not yet map it to …","Creates a new VirtualAddress, returning an error if the …","Creates a new PhysicalAddress, returning an error if the …","Creates a new range of [Page]s that spans from start to …","Creates a new range of [Frame]s that spans from start to …","","Creates a new VirtualAddress that is guaranteed to be …","Creates a new PhysicalAddress that is guaranteed to be …","Initializes a brand new top-level P4 PageTable whose root …","Returns the complement of this set of flags.","Returns the number of this Page.","Returns the number of this Frame.","Returns the offset of the given [VirtualAddress] within …","Returns the offset of the given [PhysicalAddress] within …","","","","Returns an inclusive PageRange representing the [Page]s …","Returns an inclusive FrameRange representing the [Frame]s …","Returns the 9-bit part of this Page’s [VirtualAddress] …","Returns the 9-bit part of this Page’s [VirtualAddress] …","Returns the 9-bit part of this Page’s [VirtualAddress] …","Returns the 9-bit part of this Page’s [VirtualAddress] …","Returns the offset from the page boundary specified by …","the PageTable that should be switched to when this Task …","","","","","","","Returns the physical address of this page table’s …","Returns the physical Frame pointed to (mapped by) this …","Change the permissions (new_flags) of this MappedPages’…","Removes the specified flags in-place.","","Inserts or removes the specified flags depending on the …","Set the function callback that will be invoked every time …","Sets this PageTableEntry to map the given Frame with the …","Removes the mapping represented by this page table entry. ","Returns the size of this range in number of bytes.","Returns the size of this range in number of bytes.","Returns the number of [Frame]s covered by this iterator.","Returns the number of [Page]s covered by this iterator.","Splits this AllocatedPages into two separate …","Splits this AllocatedFrames into two separate …","","The starting virtual address and physical address.","Returns the VirtualAddress at the start of this Page.","Returns the PhysicalAddress at the start of this Frame.","Returns the [VirtualAddress] of the starting [Page] in …","Returns the [PhysicalAddress] of the starting [Frame] in …","","","","","","","","","Returns the set difference of the two sets of flags.","","","","","","","Disables all flags enabled in the set.","Switches from the currently-active page table (this …","","Returns a new separate PageRange that is extended to …","Returns a new separate FrameRange that is extended to …","","","","","","","","","","","","Toggles the specified flags in-place.","Translates a VirtualAddress to a PhysicalAddress by …","Translates a virtual memory Page to a physical memory …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Call this to clean up a TemporaryPage instead of just …","Consumes and unmaps this MappedPages object without …","Returns the underlying usize value for this VirtualAddress…","Returns the underlying usize value for this …","","Temporarily maps the given other PageTable to the …","Creates a new VirtualAddress with a value 0.","Creates a new PhysicalAddress with a value 0.","Zeroes out this entry, setting it as “unused”."],"i":[1,0,0,0,0,1,0,0,1,0,0,2,0,0,3,1,1,0,0,0,0,0,1,1,2,1,0,0,0,0,0,0,3,0,0,1,3,0,0,0,1,1,4,4,5,5,6,7,4,4,5,5,6,7,8,9,1,0,0,0,0,0,0,0,0,0,0,0,0,10,10,10,10,6,7,4,5,1,4,5,1,4,5,1,4,5,1,1,4,5,1,4,5,1,11,12,13,10,14,4,5,6,7,8,9,15,16,1,2,17,18,19,20,21,22,23,3,11,12,13,10,14,4,5,6,7,8,9,15,16,1,2,17,18,19,20,21,22,23,3,4,5,6,7,8,9,1,23,3,4,5,6,7,8,9,1,23,3,4,5,6,7,1,6,7,1,8,9,0,0,16,4,5,1,13,10,8,9,17,19,21,23,13,8,9,11,10,19,20,21,22,12,10,8,9,1,19,21,15,4,5,6,7,8,9,1,3,1,14,10,18,15,13,10,14,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,7,8,9,15,16,1,1,1,1,1,19,21,23,3,6,7,5,23,11,12,13,10,14,4,5,6,7,8,9,15,16,1,2,17,18,19,20,21,22,23,3,1,1,1,1,1,1,9,8,0,0,4,5,1,0,0,0,0,1,1,11,12,13,10,14,4,4,5,5,6,7,8,9,15,16,1,2,17,17,18,19,20,21,22,23,3,1,1,8,9,1,1,1,1,1,1,1,18,1,12,12,11,10,19,21,4,5,6,7,8,9,1,11,4,5,8,9,23,4,5,13,1,6,7,8,9,4,5,18,8,9,6,6,6,6,4,14,16,4,5,6,7,1,13,18,10,1,16,1,0,18,18,8,9,9,8,19,21,16,15,6,7,8,9,6,7,4,4,5,5,6,7,1,4,4,5,5,6,7,1,13,16,8,9,4,5,6,7,8,9,1,23,3,4,5,1,12,12,11,12,13,10,14,4,5,6,7,8,9,15,16,1,2,17,18,19,20,21,22,23,3,11,12,13,10,14,4,5,6,7,8,9,15,16,1,2,17,18,19,20,21,22,23,3,23,11,12,13,10,14,4,5,6,7,8,9,15,16,1,2,17,18,19,20,21,22,23,3,11,10,4,5,18,13,4,5,18],"f":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["usize",15]],["virtualaddress",3]],[[["virtualaddress",3]],["virtualaddress",3]],[[["usize",15]],["physicaladdress",3]],[[["physicaladdress",3]],["physicaladdress",3]],[[["usize",15]],["page",3]],[[["usize",15]],["frame",3]],[[["usize",15]]],[[["virtualaddress",3]]],[[["physicaladdress",3]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]],[["virtualaddress",3],["option",4]]],[[["usize",15]],[["option",4],["physicaladdress",3]]],[[],["entryflags",3]],[[["usize",15]],[["allocatedframes",3],["option",4]]],[[["physicaladdress",3],["usize",15]],[["allocatedframes",3],["result",4],["str",15]]],[[["usize",15]],[["allocatedframes",3],["option",4]]],[[["physicaladdress",3],["usize",15]],[["allocatedframes",3],["result",4],["str",15]]],[[["option",4],["physicaladdress",3],["usize",15]],[["result",4],["str",15]]],[[["option",4],["physicaladdress",3],["usize",15]],[["result",4],["str",15]]],[[["usize",15]],[["option",4],["allocatedpages",3]]],[[["virtualaddress",3],["usize",15]],[["result",4],["str",15],["allocatedpages",3]]],[[["usize",15]],[["option",4],["allocatedpages",3]]],[[["virtualaddress",3],["usize",15]],[["result",4],["str",15],["allocatedpages",3]]],[[["virtualaddress",3],["usize",15],["option",4]],[["str",15],["result",4]]],[[["virtualaddress",3],["usize",15],["option",4]],[["str",15],["result",4]]],[[["usize",15]],[["str",15],["result",4]]],[[["usize",15]],[["str",15],["result",4]]],[[["usize",15]],[["result",4],["str",15]]],[[["usize",15]],[["str",15],["result",4]]],[[["page",3],["usize",15]],[["option",4],["page",3]]],[[["frame",3],["usize",15]],[["frame",3],["option",4]]],[[["virtualaddress",3]],["virtualaddress",3]],[[["physicaladdress",3]],["physicaladdress",3]],[[["entryflags",3]],["entryflags",3]],[[["virtualaddress",3]]],[[["physicaladdress",3]]],[[["entryflags",3]]],[[["virtualaddress",3]],["virtualaddress",3]],[[["physicaladdress",3]],["physicaladdress",3]],[[["entryflags",3]],["entryflags",3]],[[["virtualaddress",3]]],[[["physicaladdress",3]]],[[["entryflags",3]]],[[],["u64",15]],[[["virtualaddress",3]],["virtualaddress",3]],[[["physicaladdress",3]],["physicaladdress",3]],[[["entryflags",3]],["entryflags",3]],[[["virtualaddress",3]]],[[["physicaladdress",3]]],[[["entryflags",3]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["virtualaddress",3]],[[],["physicaladdress",3]],[[],["page",3]],[[],["frame",3]],[[],["pagerange",3]],[[],["framerange",3]],[[],["entryflags",3]],[[],["physicalmemoryregion",3]],[[],["memoryregiontype",4]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["virtualaddress",3]],["ordering",4]],[[["physicaladdress",3]],["ordering",4]],[[["page",3]],["ordering",4]],[[["frame",3]],["ordering",4]],[[["entryflags",3]],["ordering",4]],[[["virtualaddress",3]],["page",3]],[[["physicaladdress",3]],["frame",3]],[[["entryflags",3]],["bool",15]],[[["virtualaddress",3]],["bool",15]],[[["physicaladdress",3]],["bool",15]],[[["usize",15],["entryflags",3]],[["str",15],["result",4]]],[[["usize",15],["entryflags",3]],[["str",15],["result",4],["mappedpages",3]]],null,[[],["virtualaddress",3]],[[],["physicaladdress",3]],[[],["entryflags",3]],[[],["mapper",3]],[[],["pagerange",3]],[[],["rangeinclusive",3]],[[],["rangeinclusive",3]],[[],["framerange",3]],[[],["pagerange",3]],[[],["framerange",3]],[[],["framerange",3]],[[],["mapper",3]],[[],["rangeinclusive",3]],[[],["rangeinclusive",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[["virtualaddress",3]],["result",6]],[[],["mappedpages",3]],[[],["pagerange",3]],[[],["framerange",3]],[[],["entryflags",3]],[[],["allocatedpages",3]],[[],["allocatedframes",3]],null,[[["virtualaddress",3]],["bool",15]],[[["physicaladdress",3]],["bool",15]],[[["page",3]],["bool",15]],[[["frame",3]],["bool",15]],[[["pagerange",3]],["bool",15]],[[["framerange",3]],["bool",15]],[[["entryflags",3]],["bool",15]],[[["memoryregiontype",4]],["bool",15]],[[]],null,[[],["entryflags",3]],[[],["entryflags",3]],null,[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],[["error",3],["result",4]]],[[["page",3],["usize",15]],[["option",4],["page",3]]],[[["frame",3],["usize",15]],[["frame",3],["option",4]]],[[],["usize",15]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["u64",15]],[["entryflags",3],["option",4]]],[[["u64",15]],["entryflags",3]],[[["flags",3]],["entryflags",3]],[[["u64",15]],["entryflags",3]],[[],["entryflags",3]],[[["elfsection",3]],["entryflags",3]],[[["physicaladdress",3],["usize",15]],["framerange",3]],[[["virtualaddress",3],["usize",15]],["pagerange",3]],[[],["frame",3]],[[],[["mmiref",6],["option",4]]],[[]],[[]],[[]],[[],[["str",15],["result",4]]],[[["bootinformation",3]],[["str",15],["result",4]]],[[["virtualaddress",3]],[["str",15],["result",4]]],[[["pagetable",3],["mappedpages",3]],[["result",4],["str",15]]],[[["entryflags",3]]],[[["entryflags",3]],["bool",15]],[[]],[[]],[[]],[[]],[[]],[[],["usize",15]],[[]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["allocatedframes",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["entryflags",3]],[[],["entryflags",3]],[[]],[[]],[[],["entryflags",3]],[[],["entryflags",3]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[["allocatedpages",3],["entryflags",3]],[["str",15],["result",4],["mappedpages",3]]],[[["entryflags",3],["allocatedpages",3],["allocatedframes",3]],[["str",15],["result",4],["mappedpages",3]]],[[["pagetable",3],["allocatedframes",3]],[["str",15],["result",4],["table",3]]],[[["mappedpages",3]],["result",4]],[[["allocatedpages",3]],[["result",4],["allocatedpages",3]]],[[["allocatedframes",3]],[["allocatedframes",3],["result",4]]],[[["virtualaddress",3]],["bool",15]],[[["physicaladdress",3]],["bool",15]],[[["page",3]],["bool",15]],[[["frame",3]],["bool",15]],[[["pagerange",3]],["bool",15]],[[["framerange",3]],["bool",15]],[[["entryflags",3]],["bool",15]],[[],["temporarypage",3]],[[["usize",15]],[["virtualaddress",3],["option",4]]],[[["usize",15]],[["option",4],["physicaladdress",3]]],[[["page",3]],["pagerange",3]],[[["frame",3]],["framerange",3]],[[["framerange",3],["memoryregiontype",4]],["physicalmemoryregion",3]],[[["usize",15]],["virtualaddress",3]],[[["usize",15]],["physicaladdress",3]],[[["allocatedframes",3],["temporarypage",3],["pagetable",3]],[["result",4],["pagetable",3],["str",15]]],[[],["entryflags",3]],[[],["usize",15]],[[],["usize",15]],[[["virtualaddress",3]],[["usize",15],["option",4]]],[[["physicaladdress",3]],[["usize",15],["option",4]]],[[]],[[]],[[]],[[["pagerange",3]],[["pagerange",3],["option",4]]],[[["framerange",3]],[["option",4],["framerange",3]]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],null,null,[[["virtualaddress",3]],[["option",4],["ordering",4]]],[[["physicaladdress",3]],[["option",4],["ordering",4]]],[[["page",3]],[["option",4],["ordering",4]]],[[["frame",3]],[["option",4],["ordering",4]]],[[["entryflags",3]],[["option",4],["ordering",4]]],[[],["physicaladdress",3]],[[],[["frame",3],["option",4]]],[[["mapper",3],["entryflags",3]],[["result",4],["str",15]]],[[["entryflags",3]]],null,[[["bool",15],["entryflags",3]]],[[]],[[["frame",3],["entryflags",3]]],[[],["unmapresult",4]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[["page",3]],[["result",4],["allocatedpages",3]]],[[["frame",3]],[["allocatedframes",3],["result",4]]],null,null,[[],["virtualaddress",3]],[[],["physicaladdress",3]],[[],["virtualaddress",3]],[[],["physicaladdress",3]],[[["page",3]],[["usize",15],["option",4]]],[[["frame",3]],[["usize",15],["option",4]]],[[["virtualaddress",3]],["virtualaddress",3]],[[["usize",15]],["virtualaddress",3]],[[["usize",15]],["physicaladdress",3]],[[["physicaladdress",3]],["physicaladdress",3]],[[["usize",15]],["page",3]],[[["usize",15]],["frame",3]],[[["entryflags",3]],["entryflags",3]],[[["virtualaddress",3]]],[[["usize",15]]],[[["usize",15]]],[[["physicaladdress",3]]],[[["usize",15]]],[[["usize",15]]],[[["entryflags",3]]],[[["pagetable",3]]],null,[[["page",3]],["pagerange",3]],[[["frame",3]],["framerange",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["string",3]],[[],["string",3]],[[["entryflags",3]]],[[["virtualaddress",3]],[["option",4],["physicaladdress",3]]],[[["page",3]],[["frame",3],["option",4]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],null,[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[["pagetable",3]],[["str",15],["result",4]]],[[["mapper",3]],["result",4]],[[],["usize",15]],[[],["usize",15]],[[],["u64",15]],[[["temporarypage",3],["pagetable",3]],[["result",4],["str",15]]],[[],["virtualaddress",3]],[[],["physicaladdress",3]],[[]]],"p":[[3,"EntryFlags"],[4,"UnmapResult"],[4,"MemoryRegionType"],[3,"VirtualAddress"],[3,"PhysicalAddress"],[3,"Page"],[3,"Frame"],[3,"PageRange"],[3,"FrameRange"],[3,"MappedPages"],[3,"TemporaryPage"],[3,"Mapper"],[3,"PageTable"],[3,"MemoryManagementInfo"],[3,"SectionMemoryBounds"],[3,"AggregatedSectionMemoryBounds"],[3,"UnmappedFrames"],[3,"PageTableEntry"],[3,"AllocatedPages"],[3,"DeferredAllocAction"],[3,"AllocatedFrames"],[3,"DeferredAllocAction"],[3,"PhysicalMemoryRegion"]]},\ @@ -97,7 +97,7 @@ var searchIndex = JSON.parse('{\ "physical_nic":{"doc":"Defines a trait PhysicalNic that must be implemented by …","t":[8,10,10],"n":["PhysicalNic","return_rx_queues","return_tx_queues"],"q":["physical_nic","",""],"d":["This trait must be implemented by any NIC driver that …","Returns the RxQueues owned by a virtual NIC back to the …","Returns the TxQueues owned by a virtual NIC back to the …"],"i":[0,1,1],"f":[null,[[["rxqueue",3],["vec",3]]],[[["vec",3],["txqueue",3]]]],"p":[[8,"PhysicalNic"]]},\ "pic":{"doc":"Support for the x86 PIC (8259 Programmable Interrupt …","t":[3,3,17,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,12,12,11,11,11,11,11,11,11],"n":["ChainedPics","IrqStatusRegisters","PIC_MASTER_OFFSET","borrow","borrow","borrow_mut","borrow_mut","fmt","fmt","from","from","init","into","into","mask_irqs","master_irr","master_isr","notify_end_of_interrupt","read_isr_irr","slave_irr","slave_isr","to_string","try_from","try_from","try_into","try_into","type_id","type_id"],"q":["pic","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["A pair of chained PIC controllers. This is the standard …","The set of status registers for both PIC chips.","","","","","","","","","","Create a new interface for the standard PIC1 and PIC2 …","","","Each mask is a bitwise mask for each IRQ line, with the …","","","Figure out which (if any) PICs in our chain need to know …","Reads the ISR and IRR registers of both the master and …","","","","","","","","",""],"i":[0,0,0,1,2,1,2,1,1,1,2,2,1,2,2,1,1,2,2,1,1,1,1,2,1,2,1,2],"f":[null,null,null,[[]],[[]],[[]],[[]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[["u8",15]],["chainedpics",3]],[[]],[[]],[[["u8",15]]],null,null,[[["u8",15]]],[[],["irqstatusregisters",3]],null,null,[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]]],"p":[[3,"IrqStatusRegisters"],[3,"ChainedPics"]]},\ "pit_clock":{"doc":"Support for the Programmable Interval Timer (PIT) system …","t":[5,5,5],"n":["handle_timer_interrupt","init","pit_wait"],"q":["pit_clock","",""],"d":["this occurs on every PIT timer tick. Called by the PIT’…","","Wait a certain number of microseconds, max 55555 …"],"i":[0,0,0],"f":[[[]],[[["u32",15]]],[[["u32",15]],[["result",4],["str",15]]]],"p":[]},\ -"pmu_x86":{"doc":"Support for the Performance Monitoring Unit ","t":[13,13,3,4,13,13,13,3,13,13,11,11,11,11,11,11,11,11,11,5,11,11,11,11,5,5,12,11,11,11,11,5,5,5,11,5,0,12,11,11,11,11,11,11,11,11,11,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["BranchInstructionsRetired","BranchMissesRetired","Counter","EventType","InstructionsRetired","LastLevelCacheMisses","LastLevelCacheReferences","SampleResults","UnhaltedCoreCycles","UnhaltedReferenceCycles","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","diff","drop","end","find_function_names_from_samples","from","from","from","get_count_since_start","handle_sample","init","instruction_pointers","into","into","into","new","print_samples","reset_pmu","retrieve_samples","start","start_samples","stat","task_ids","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","PMUResults","PerformanceCounters","borrow","borrow","borrow_mut","borrow_mut","end","fmt","from","from","into","into","new","start","try_from","try_from","try_into","try_into","type_id","type_id"],"q":["pmu_x86","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","pmu_x86::stat","","","","","","","","","","","","","","","","","","",""],"d":["This event counts branch instructions at retirement. It …","This event counts mispredicted branch instructions at …","A logical counter object to correspond to a physical PMC","Used to select the event type to count. Event types are …","This event counts the number of instructions at …","This event counts each cache miss condition for …","This event counts requests originating from the core that …","Stores the instruction pointers and corresponding task …","This event counts core clock cycles when the clock signal …","This event counts reference clock cycles at a fixed …","","","","","","","lightweight function with no checks to get the counter …","","Stops counting, releases the counter, and returns the …","Finds the corresponding function for each instruction …","","","","Allows user to get count since start without …","This function is designed to be invoked from an interrupt …","Initialization function that enables the PMU if one is …","","","","","Creates a Counter object and assigns a physical counter …","Simple function to print values from SampleResults in a …","Frees all counters and make them available to be used. …","Returns the samples that were stored during sampling in …","Starts the count.","Start interrupt process in order to take samples using …","This module implements the equivalent of “perf stat”. …","","","","","","","","","","","","","","","","","Stop the counters and return the counter values. The …","","","","","","Initialize seven performance monitoring counters. They …","Start running all the counters ","","","","","",""],"i":[1,1,0,0,1,1,1,0,1,1,1,2,3,1,2,3,2,2,2,0,1,2,3,2,0,0,3,1,2,3,2,0,0,0,2,0,0,3,1,2,3,1,2,3,1,2,3,0,0,4,5,4,5,4,5,4,5,4,5,4,4,4,5,4,5,4,5],"f":[null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[],["u64",15]],[[]],[[],[["str",15],["result",4],["u64",15]]],[[["sampleresults",3]],[["result",4],["str",15]]],[[]],[[]],[[]],[[],[["str",15],["result",4],["u64",15]]],[[["exceptionstackframe",3]],[["str",15],["result",4],["bool",15]]],[[],[["result",4],["str",15]]],null,[[]],[[]],[[]],[[["eventtype",4]],[["str",15],["result",4],["counter",3]]],[[["sampleresults",3]]],[[],[["result",4],["str",15]]],[[],[["result",4],["str",15],["sampleresults",3]]],[[],[["result",4],["str",15]]],[[["option",4],["u32",15],["eventtype",4],["usize",15]],[["result",4],["str",15]]],null,null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,null,[[]],[[]],[[]],[[]],[[],[["str",15],["result",4],["pmuresults",3]]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[],[["result",4],["str",15],["performancecounters",3]]],[[],[["result",4],["str",15]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]]],"p":[[4,"EventType"],[3,"Counter"],[3,"SampleResults"],[3,"PerformanceCounters"],[3,"PMUResults"]]},\ +"pmu_x86":{"doc":"Support for the Performance Monitoring Unit ","t":[13,13,3,4,13,13,13,3,13,13,11,11,11,11,11,11,11,11,11,5,11,11,11,11,5,5,12,11,11,11,11,5,5,5,11,5,0,12,11,11,11,11,11,11,11,11,11,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["BranchInstructionsRetired","BranchMissesRetired","Counter","EventType","InstructionsRetired","LastLevelCacheMisses","LastLevelCacheReferences","SampleResults","UnhaltedCoreCycles","UnhaltedReferenceCycles","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","diff","drop","end","find_function_names_from_samples","from","from","from","get_count_since_start","handle_sample","init","instruction_pointers","into","into","into","new","print_samples","reset_pmu","retrieve_samples","start","start_samples","stat","task_ids","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","PMUResults","PerformanceCounters","borrow","borrow","borrow_mut","borrow_mut","end","fmt","from","from","into","into","new","start","try_from","try_from","try_into","try_into","type_id","type_id"],"q":["pmu_x86","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","pmu_x86::stat","","","","","","","","","","","","","","","","","","",""],"d":["This event counts branch instructions at retirement. It …","This event counts mispredicted branch instructions at …","A logical counter object to correspond to a physical PMC","Used to select the event type to count. Event types are …","This event counts the number of instructions at …","This event counts each cache miss condition for …","This event counts requests originating from the core that …","Stores the instruction pointers and corresponding task …","This event counts core clock cycles when the clock signal …","This event counts reference clock cycles at a fixed …","","","","","","","lightweight function with no checks to get the counter …","","Stops counting, releases the counter, and returns the …","Finds the corresponding function for each instruction …","","","","Allows user to get count since start without …","This function is designed to be invoked from an interrupt …","Initialization function that enables the PMU if one is …","","","","","Creates a Counter object and assigns a physical counter …","Simple function to print values from SampleResults in a …","Frees all counters and make them available to be used. …","Returns the samples that were stored during sampling in …","Starts the count.","Start interrupt process in order to take samples using …","This module implements the equivalent of “perf stat”. …","","","","","","","","","","","","","","","","","Stop the counters and return the counter values. The …","","","","","","Initialize seven performance monitoring counters. They …","Start running all the counters ","","","","","",""],"i":[1,1,0,0,1,1,1,0,1,1,1,2,3,1,2,3,2,2,2,0,1,2,3,2,0,0,3,1,2,3,2,0,0,0,2,0,0,3,1,2,3,1,2,3,1,2,3,0,0,4,5,4,5,4,5,4,5,4,5,4,4,4,5,4,5,4,5],"f":[null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[],["u64",15]],[[]],[[],[["str",15],["result",4],["u64",15]]],[[["sampleresults",3]],[["result",4],["str",15]]],[[]],[[]],[[]],[[],[["str",15],["result",4],["u64",15]]],[[["exceptionstackframe",3]],[["str",15],["result",4],["bool",15]]],[[],[["result",4],["str",15]]],null,[[]],[[]],[[]],[[["eventtype",4]],[["result",4],["counter",3],["str",15]]],[[["sampleresults",3]]],[[],[["result",4],["str",15]]],[[],[["str",15],["sampleresults",3],["result",4]]],[[],[["result",4],["str",15]]],[[["eventtype",4],["option",4],["u32",15],["usize",15]],[["result",4],["str",15]]],null,null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,null,[[]],[[]],[[]],[[]],[[],[["pmuresults",3],["result",4],["str",15]]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[],[["str",15],["result",4],["performancecounters",3]]],[[],[["result",4],["str",15]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]]],"p":[[4,"EventType"],[3,"Counter"],[3,"SampleResults"],[3,"PerformanceCounters"],[3,"PMUResults"]]},\ "port_io":{"doc":"CPU-level input/output instructions, including inb, outb, …","t":[3,8,8,3,3,11,11,11,11,11,11,11,11,11,11,11,11,5,5,11,11,11,5,11,11,11,5,5,5,11,11,11,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["Port","PortIn","PortOut","PortReadOnly","PortWriteOnly","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","fmt","fmt","fmt","from","from","from","inb","inl","into","into","into","inw","new","new","new","outb","outl","outw","port_address","port_address","port_address","port_in","port_out","read","read","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","write","write"],"q":["port_io","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["A readable and writable I/O port over an arbitrary type …","This trait is defined for any type which can be read from …","This trait is defined for any type which can be read from …","A read-only I/O port over an arbitrary type supporting …","A write-only I/O port over an arbitrary type supporting …","","","","","","","","","","","","","Read a u8-sized value from port.","Read a u32-sized value from port.","","","","Read a u16-sized value from port.","Create a new I/O port.","Create a new read-only I/O port.","Create a new read-only I/O port.","Write a u8-sized value to port.","Write a u32-sized value to port.","Write a u8-sized value to port.","Returns the address of this port.","Returns the address of this port.","Returns the address of this port.","Read a value from the specified port.","Write a value to the specified port.","Read data of size T from the port.","Read data of size T from the port.","","","","","","","","","","Write data of size T to the port. This is unsafe because …","Write data of size T to the port. This is unsafe because …"],"i":[0,0,0,0,0,1,2,3,1,2,3,1,2,3,1,2,3,0,0,1,2,3,0,1,2,3,0,0,0,1,2,3,4,5,1,2,1,2,3,1,2,3,1,2,3,1,3],"f":[null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[["u16",15]],["u8",15]],[[["u16",15]],["u32",15]],[[]],[[]],[[]],[[["u16",15]],["u16",15]],[[["u16",15]],["port",3]],[[["u16",15]],["portreadonly",3]],[[["u16",15]],["portwriteonly",3]],[[["u8",15],["u16",15]]],[[["u32",15],["u16",15]]],[[["u16",15]]],[[],["u16",15]],[[],["u16",15]],[[],["u16",15]],[[["u16",15]]],[[["u16",15]]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]]],"p":[[3,"Port"],[3,"PortReadOnly"],[3,"PortWriteOnly"],[8,"PortIn"],[8,"PortOut"]]},\ "print":{"doc":"Allows crates in the kernel to log messages to the …","t":[14,5,14,5],"n":["print","print_to_default_output","println","set_default_print_output"],"q":["print","","",""],"d":["The main printing macro, which simply pushes an output …","Enqueues the given fmt_args as a String onto the default …","Calls print!() with an extra newilne \\\\n appended to the …","Gives the kernel an endpoint (queue producer) to which it …"],"i":[0,0,0,0],"f":[null,[[["arguments",3]]],null,[[["event",4],["dfqueueproducer",3]]]],"p":[]},\ "ps2":{"doc":"","t":[13,4,13,13,11,11,5,5,5,5,5,11,5,5,5,11,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,11,11,11,5],"n":["AncientATKeyboard","KeyboardType","MF2Keyboard","MF2KeyboardWithPSControllerTranslator","borrow","borrow_mut","check_mouse_id","command_to_keyboard","command_to_mouse","data_to_port1","data_to_port2","from","handle_mouse_packet","init_ps2_port1","init_ps2_port2","into","keyboard_detect","keyboard_led","keyboard_scancode_set","mouse_packet_streaming","mouse_resend","mouse_resolution","ps2_clean_buffer","ps2_read_config","ps2_read_data","ps2_status_register","ps2_write_command","ps2_write_config","reset_mouse","set_mouse_id","set_sampling_rate","test_ps2_port1","test_ps2_port2","try_from","try_into","type_id","write_to_second_output_buffer"],"q":["ps2","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["","","","","","","check the mouse’s id","write command to the keyboard and return the result","write command to the mouse and return the result","write data to the first ps2 data port and return the …","write data to the second ps2 data port and return the …","","read mouse data packet","initialize the first ps2 data port","initialize the second ps2 data port","","detect the keyboard’s type","set LED status of the keyboard parameter : 0: ScrollLock; …","set the scancode set of the keyboard 0: get the current …","enable or disable the packet streaming also return the …","resend the most recent packet again","set the resolution of the mouse parameter : 0x00: 1 …","clean the PS2 data port (0x60) output buffer also return …","read the config of the ps2 port","read dat from ps2 data port (0x60)","read the ps2 status register","write command to the command ps2 port (0x64)","write the new config to the ps2 command port (0x64)","reset the mouse","set the mouse ID (3 or 4 ) by magic sequence 3 means that …","set ps2 mouse’s sampling rate","test the first ps2 data port","test the second ps2 data port","","","","write data to the second ps2 output buffer"],"i":[1,0,1,1,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0],"f":[null,null,null,null,[[]],[[]],[[],[["str",15],["u8",15],["result",4]]],[[["u8",15]],[["result",4],["str",15]]],[[["u8",15]],[["result",4],["str",15]]],[[["u8",15]],["u8",15]],[[["u8",15]],["u8",15]],[[]],[[],["u32",15]],[[]],[[]],[[]],[[],[["str",15],["keyboardtype",4],["result",4]]],[[["u8",15]]],[[["u8",15]],[["result",4],["str",15]]],[[["bool",15]],[["vec",3],["str",15],["result",4]]],[[],[["result",4],["str",15]]],[[["u8",15]],[["result",4],["str",15]]],[[],[["u8",15],["vec",3]]],[[],["u8",15]],[[],["u8",15]],[[],["u8",15]],[[["u8",15]]],[[["u8",15]]],[[],[["result",4],["str",15]]],[[["u8",15]],[["result",4],["str",15]]],[[["u8",15]],[["result",4],["str",15]]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[["u8",15]]]],"p":[[4,"KeyboardType"]]},\ @@ -106,14 +106,14 @@ var searchIndex = JSON.parse('{\ "rsdp":{"doc":"Support for ACPI RSDP (Root System Descriptor Pointer).","t":[3,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["Rsdp","borrow","borrow_mut","clone","clone_into","fmt","from","get_rsdp","into","only_derive_is_allowed_to_implement_this_trait","sdt_address","to_owned","try_from","try_into","type_id"],"q":["rsdp","","","","","","","","","","","","","",""],"d":["The Root System Descriptor Pointer, which contains the …","","","","","","","Search for the RSDP in the BIOS memory area from 0xE_0000 …","","","Returns the PhysicalAddress of the RSDT or XSDT.","","","",""],"i":[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"f":[null,[[]],[[]],[[],["rsdp",3]],[[]],[[["formatter",3]],["result",6]],[[]],[[["pagetable",3]],[["str",15],["result",4],["boxref",6]]],[[]],[[]],[[],["physicaladdress",3]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]]],"p":[[3,"Rsdp"]]},\ "rsdt":{"doc":"Definitions for the ACPI RSDT and XSDT system tables.","t":[17,3,17,11,11,11,11,11,5,11,11,11,11,11],"n":["RSDT_SIGNATURE","RsdtXsdt","XSDT_SIGNATURE","addresses","borrow","borrow_mut","from","get","handle","into","sdt","try_from","try_into","type_id"],"q":["rsdt","","","","","","","","","","","","",""],"d":["","The Root/Extended System Descriptor Table, RSDT or XSDT. …","","Returns an [Iterator] over the PhysicalAddresses of the …","","","","Finds the RSDT or XSDT in the given AcpiTables and …","The handler for parsing RSDT/XSDT tables and adding them …","","Returns a reference to the SDT header of this RSDT or …","","",""],"i":[0,0,0,1,1,1,1,1,0,1,1,1,1,1],"f":[null,null,null,[[]],[[]],[[]],[[]],[[["acpitables",3]],[["option",4],["rsdtxsdt",3]]],[[["acpitables",3],["acpisignature",6],["usize",15],["physicaladdress",3]],[["result",4],["str",15]]],[[]],[[],["sdt",3]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]]],"p":[[3,"RsdtXsdt"]]},\ "rtc":{"doc":"","t":[6,3,11,11,12,5,11,11,11,5,12,11,12,12,5,12,5,11,11,11,11,12],"n":["RtcInterruptFunction","RtcTime","borrow","borrow_mut","days","enable_rtc_interrupt","fmt","fmt","from","get_rtc_ticks","hours","into","minutes","months","read_rtc","seconds","set_rtc_frequency","to_string","try_from","try_into","type_id","years"],"q":["rtc","","","","","","","","","","","","","","","","","","","","",""],"d":["","A timestamp obtained from the real-time clock.","","","","turn on IRQ 8 (mapped to 0x28), rtc begins sending …","","","","","","","","","","","sets the period of the RTC interrupt. rate must be a …","","","","",""],"i":[0,0,1,1,1,0,1,1,1,0,1,1,1,1,0,1,0,1,1,1,1,1],"f":[null,null,[[]],[[]],null,[[]],[[["formatter",3]],["result",6]],[[["formatter",3]],[["error",3],["result",4]]],[[]],[[],[["result",4],["usize",15]]],null,[[]],null,null,[[],["rtctime",3]],null,[[["usize",15]],["result",4]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null],"p":[[3,"RtcTime"]]},\ -"runqueue":{"doc":"This crate contains the API of the RunQueue structure, …","t":[5,5,5,5,5,5],"n":["add_task_to_any_runqueue","add_task_to_specific_runqueue","get_least_busy_core","get_runqueue","init","remove_task_from_all"],"q":["runqueue","","","","",""],"d":["Chooses the “least busy” core’s runqueue and adds …","Adds the given Task reference to given core’s runqueue.","Returns the “least busy” core","Returns the RunQueue of the given core, which is an …","Creates a new RunQueue for the given core, which is an …","Removes a TaskRef from all RunQueues that exist on the …"],"i":[0,0,0,0,0,0],"f":[[[["taskref",3]],[["result",4],["str",15]]],[[["taskref",3],["u8",15]],[["result",4],["str",15]]],[[],[["option",4],["u8",15]]],[[["u8",15]],[["option",4],["rwlockirqsafe",3]]],[[["u8",15]],[["result",4],["str",15]]],[[["taskref",3]],[["result",4],["str",15]]]],"p":[]},\ -"runqueue_priority":{"doc":"This crate contains the RunQueue structure, for priority …","t":[17,17,17,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,12,11,11,11,11,11,11,11],"n":["DEFAULT_PRIORITY","INITIAL_TOKENS","MAX_PRIORITY","PriorityTaskRef","RunQueue","add_task_to_any_runqueue","add_task_to_specific_runqueue","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","deref","deref","deref_mut","deref_mut","fmt","fmt","from","from","get_least_busy_core","get_priority","get_runqueue","increment_context_switches","init","into","into","lock","new","priority","remove_task","remove_task_from_all","set_priority","to_owned","tokens_remaining","try_from","try_from","try_into","try_into","type_id","type_id","update_and_move_to_end"],"q":["runqueue_priority","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["","","","A cloneable reference to a Taskref that exposes more …","A list of references to Tasks (PriorityTaskRefs) that is …","Chooses the “least busy” core’s runqueue (based on …","Convenience method that adds the given Task reference to …","","","","","","","","","","","","","","","Returns the “least busy” core, which is currently …","Output the priority of the given task. Outputs None if …","Returns RunQueue for the given core, which is an apic_id.","Increment the number of times the task is picked","Creates a new RunQueue for the given core, which is an …","","","Obtains the lock on the underlying Task in a read-only, …","Creates a new PriorityTaskRef that wraps the given TaskRef…","Priority assigned for the task. Max priority = 40, Min …","Removes a TaskRef from this RunQueue.","Removes a TaskRef from all RunQueues that exist on the …","Sets the priority of the given Task in all the RunQueue …","","Remaining tokens in this epoch. A task will be scheduled …","","","","","","","Moves the TaskRef at the given index in this RunQueue to …"],"i":[0,0,0,0,0,1,1,2,1,2,1,2,2,2,1,2,1,2,1,2,1,1,1,1,2,1,2,1,2,2,2,1,1,1,2,2,2,1,2,1,2,1,1],"f":[null,null,null,null,null,[[["taskref",3]],[["result",4],["str",15]]],[[["u8",15],["taskref",3]],[["result",4],["str",15]]],[[]],[[]],[[]],[[]],[[],["prioritytaskref",3]],[[]],[[],["taskref",3]],[[],["vecdeque",3]],[[],["taskref",3]],[[],["vecdeque",3]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[],[["option",4],["u8",15]]],[[["taskref",3]],[["option",4],["u8",15]]],[[["u8",15]],[["option",4],["rwlockirqsafe",3]]],[[]],[[["u8",15]],[["result",4],["str",15]]],[[]],[[]],[[],[["task",3],["mutexirqsafeguardref",6]]],[[["taskref",3]],["prioritytaskref",3]],null,[[["taskref",3]],[["result",4],["str",15]]],[[["taskref",3]],[["result",4],["str",15]]],[[["taskref",3],["u8",15]],[["result",4],["str",15]]],[[]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[["usize",15]],[["option",4],["taskref",3]]]],"p":[[3,"RunQueue"],[3,"PriorityTaskRef"]]},\ -"runqueue_round_robin":{"doc":"This crate contains the RunQueue structure, for round …","t":[3,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["RUNQUEUES","RoundRobinTaskRef","RunQueue","add_task_to_any_runqueue","add_task_to_specific_runqueue","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","deref","deref","deref","deref_mut","deref_mut","fmt","fmt","from","from","from","get_least_busy_core","get_runqueue","increment_context_switches","init","initialize","into","into","into","move_to_end","new","remove_task","remove_task_from_all","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id"],"q":["runqueue_round_robin","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["There is one runqueue per core, each core only accesses …","A cloneable reference to a Taskref that exposes more …","A list of references to Tasks (RoundRobinTaskRefs). This …","Chooses the “least busy” core’s runqueue (based on …","Convenience method that adds the given Task reference to …","","","","","","","","","","","","","","","","","","","Returns the “least busy” core, which is currently …","Returns the RunQueue for the given core, which is an …","Increment the number of times the task is picked","Creates a new RunQueue for the given core, which is an …","","","","","Moves the TaskRef at the given index into this RunQueue …","Creates a new RoundRobinTaskRef that wraps the given …","Removes a TaskRef from this RunQueue.","Removes a TaskRef from all RunQueues that exist on the …","","","","","","","","","",""],"i":[0,0,0,1,1,2,3,1,2,3,1,2,2,2,3,1,2,1,2,1,2,3,1,1,1,2,1,3,2,3,1,1,2,1,1,2,2,3,1,2,3,1,2,3,1],"f":[null,null,null,[[["taskref",3]],[["result",4],["str",15]]],[[["taskref",3],["u8",15]],[["result",4],["str",15]]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["roundrobintaskref",3]],[[]],[[],["taskref",3]],[[],["atomicmap",3]],[[],["vecdeque",3]],[[],["taskref",3]],[[],["vecdeque",3]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[],[["option",4],["u8",15]]],[[["u8",15]],[["rwlockirqsafe",3],["option",4]]],[[]],[[["u8",15]],[["result",4],["str",15]]],[[]],[[]],[[]],[[]],[[["usize",15]],[["option",4],["taskref",3]]],[[["taskref",3]],["roundrobintaskref",3]],[[["taskref",3]],[["result",4],["str",15]]],[[["taskref",3]],[["result",4],["str",15]]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]]],"p":[[3,"RunQueue"],[3,"RoundRobinTaskRef"],[3,"RUNQUEUES"]]},\ +"runqueue":{"doc":"This crate contains the API of the RunQueue structure, …","t":[5,5,5,5,5,5],"n":["add_task_to_any_runqueue","add_task_to_specific_runqueue","get_least_busy_core","get_runqueue","init","remove_task_from_all"],"q":["runqueue","","","","",""],"d":["Chooses the “least busy” core’s runqueue and adds …","Adds the given Task reference to given core’s runqueue.","Returns the “least busy” core","Returns the RunQueue of the given core, which is an …","Creates a new RunQueue for the given core, which is an …","Removes a TaskRef from all RunQueues that exist on the …"],"i":[0,0,0,0,0,0],"f":[[[["taskref",3]],[["result",4],["str",15]]],[[["taskref",3],["u8",15]],[["result",4],["str",15]]],[[],[["option",4],["u8",15]]],[[["u8",15]],[["rwlockirqsafe",3],["option",4]]],[[["u8",15]],[["result",4],["str",15]]],[[["taskref",3]],[["result",4],["str",15]]]],"p":[]},\ +"runqueue_priority":{"doc":"This crate contains the RunQueue structure, for priority …","t":[17,17,17,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,12,11,11,11,11,11,11,11],"n":["DEFAULT_PRIORITY","INITIAL_TOKENS","MAX_PRIORITY","PriorityTaskRef","RunQueue","add_task_to_any_runqueue","add_task_to_specific_runqueue","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","deref","deref","deref_mut","deref_mut","fmt","fmt","from","from","get_least_busy_core","get_priority","get_runqueue","increment_context_switches","init","into","into","new","priority","remove_task","remove_task_from_all","set_priority","to_owned","tokens_remaining","try_from","try_from","try_into","try_into","type_id","type_id","update_and_move_to_end"],"q":["runqueue_priority","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["","","","A cloneable reference to a Taskref that exposes more …","A list of references to Tasks (PriorityTaskRefs) that is …","Chooses the “least busy” core’s runqueue (based on …","Convenience method that adds the given Task reference to …","","","","","","","","","","","","","","","Returns the “least busy” core, which is currently …","Output the priority of the given task. Outputs None if …","Returns RunQueue for the given core, which is an apic_id.","Increment the number of times the task is picked","Creates a new RunQueue for the given core, which is an …","","","Creates a new PriorityTaskRef that wraps the given TaskRef…","Priority assigned for the task. Max priority = 40, Min …","Removes a TaskRef from this RunQueue.","Removes a TaskRef from all RunQueues that exist on the …","Sets the priority of the given Task in all the RunQueue …","","Remaining tokens in this epoch. A task will be scheduled …","","","","","","","Moves the TaskRef at the given index in this RunQueue to …"],"i":[0,0,0,0,0,1,1,2,1,2,1,2,2,2,1,2,1,2,1,2,1,1,1,1,2,1,2,1,2,2,1,1,1,2,2,2,1,2,1,2,1,1],"f":[null,null,null,null,null,[[["taskref",3]],[["result",4],["str",15]]],[[["u8",15],["taskref",3]],[["result",4],["str",15]]],[[]],[[]],[[]],[[]],[[],["prioritytaskref",3]],[[]],[[],["taskref",3]],[[],["vecdeque",3]],[[],["taskref",3]],[[],["vecdeque",3]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[],[["option",4],["u8",15]]],[[["taskref",3]],[["option",4],["u8",15]]],[[["u8",15]],[["option",4],["rwlockirqsafe",3]]],[[]],[[["u8",15]],[["result",4],["str",15]]],[[]],[[]],[[["taskref",3]],["prioritytaskref",3]],null,[[["taskref",3]],[["result",4],["str",15]]],[[["taskref",3]],[["result",4],["str",15]]],[[["taskref",3],["u8",15]],[["result",4],["str",15]]],[[]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[["usize",15]],[["option",4],["taskref",3]]]],"p":[[3,"RunQueue"],[3,"PriorityTaskRef"]]},\ +"runqueue_round_robin":{"doc":"This crate contains the RunQueue structure, for round …","t":[3,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["RUNQUEUES","RoundRobinTaskRef","RunQueue","add_task_to_any_runqueue","add_task_to_specific_runqueue","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","deref","deref","deref","deref_mut","deref_mut","fmt","fmt","from","from","from","get_least_busy_core","get_runqueue","increment_context_switches","init","initialize","into","into","into","move_to_end","new","remove_task","remove_task_from_all","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id"],"q":["runqueue_round_robin","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["There is one runqueue per core, each core only accesses …","A cloneable reference to a Taskref that exposes more …","A list of references to Tasks (RoundRobinTaskRefs). This …","Chooses the “least busy” core’s runqueue (based on …","Convenience method that adds the given Task reference to …","","","","","","","","","","","","","","","","","","","Returns the “least busy” core, which is currently …","Returns the RunQueue for the given core, which is an …","Increment the number of times the task is picked","Creates a new RunQueue for the given core, which is an …","","","","","Moves the TaskRef at the given index into this RunQueue …","Creates a new RoundRobinTaskRef that wraps the given …","Removes a TaskRef from this RunQueue.","Removes a TaskRef from all RunQueues that exist on the …","","","","","","","","","",""],"i":[0,0,0,1,1,2,3,1,2,3,1,2,2,2,3,1,2,1,2,1,2,3,1,1,1,2,1,3,2,3,1,1,2,1,1,2,2,3,1,2,3,1,2,3,1],"f":[null,null,null,[[["taskref",3]],[["result",4],["str",15]]],[[["u8",15],["taskref",3]],[["result",4],["str",15]]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["roundrobintaskref",3]],[[]],[[],["taskref",3]],[[],["atomicmap",3]],[[],["vecdeque",3]],[[],["taskref",3]],[[],["vecdeque",3]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[],[["option",4],["u8",15]]],[[["u8",15]],[["rwlockirqsafe",3],["option",4]]],[[]],[[["u8",15]],[["result",4],["str",15]]],[[]],[[]],[[]],[[]],[[["usize",15]],[["option",4],["taskref",3]]],[[["taskref",3]],["roundrobintaskref",3]],[[["taskref",3]],[["result",4],["str",15]]],[[["taskref",3]],[["result",4],["str",15]]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]]],"p":[[3,"RunQueue"],[3,"RoundRobinTaskRef"],[3,"RUNQUEUES"]]},\ "scheduler":{"doc":"","t":[5,5,5],"n":["get_priority","schedule","set_priority"],"q":["scheduler","",""],"d":["Returns the priority of a given task. This function …","Yields the current CPU by selecting a new Task to run …","Changes the priority of the given task with the given …"],"i":[0,0,0],"f":[[[["taskref",3]],[["option",4],["u8",15]]],[[],["bool",15]],[[["taskref",3],["u8",15]],[["result",4],["str",15]]]],"p":[]},\ -"scheduler_priority":{"doc":"This crate picks the next task on token based scheduling …","t":[5,5,5],"n":["get_priority","select_next_task","set_priority"],"q":["scheduler_priority","",""],"d":["Returns the priority of the given task.","This defines the priority scheduler policy. Returns None …","Changes the priority of the given task with the given …"],"i":[0,0,0],"f":[[[["taskref",3]],[["option",4],["u8",15]]],[[["u8",15]],[["taskref",3],["option",4]]],[[["taskref",3],["u8",15]],[["result",4],["str",15]]]],"p":[]},\ -"scheduler_round_robin":{"doc":"This crate picks the next task in round robin fashion. …","t":[5],"n":["select_next_task"],"q":["scheduler_round_robin"],"d":["This defines the round robin scheduler policy. Returns …"],"i":[0],"f":[[[["u8",15]],[["option",4],["taskref",3]]]],"p":[]},\ +"scheduler_priority":{"doc":"This crate picks the next task on token based scheduling …","t":[5,5,5],"n":["get_priority","select_next_task","set_priority"],"q":["scheduler_priority","",""],"d":["Returns the priority of the given task.","This defines the priority scheduler policy. Returns None …","Changes the priority of the given task with the given …"],"i":[0,0,0],"f":[[[["taskref",3]],[["option",4],["u8",15]]],[[["u8",15]],[["option",4],["taskref",3]]],[[["taskref",3],["u8",15]],[["result",4],["str",15]]]],"p":[]},\ +"scheduler_round_robin":{"doc":"This crate picks the next task in round robin fashion. …","t":[5],"n":["select_next_task"],"q":["scheduler_round_robin"],"d":["This defines the round robin scheduler policy. Returns …"],"i":[0],"f":[[[["u8",15]],[["taskref",3],["option",4]]]],"p":[]},\ "sdt":{"doc":"ACPI table definitions and basic SDT structures.","t":[3,17,3,12,12,12,12,11,11,11,11,12,11,11,12,12,11,11,11,11,11,11,12,12,12,12,11,11,12,12,12,11,11,11,11,11,11],"n":["GenericAddressStructure","SDT_SIZE_IN_BYTES","Sdt","access_size","address_space","bit_offset","bit_width","borrow","borrow","borrow_mut","borrow_mut","checksum","clone","clone","creator_id","creator_revision","fmt","fmt","from","from","into","into","length","oem_id","oem_revision","oem_table_id","only_derive_is_allowed_to_implement_this_trait","only_derive_is_allowed_to_implement_this_trait","phys_addr","revision","signature","try_from","try_from","try_into","try_into","type_id","type_id"],"q":["sdt","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["A struct used to describe the position and layout of …","The size in bytes of the ACPI SDT Header (Sdt struct).","An ACPI System Descriptor Table. This is the header (the …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,0,0,1,1,1,1,2,1,2,1,2,2,1,2,2,2,1,2,1,2,1,2,2,2,2,2,1,1,2,2,2,1,2,1,2,1],"f":[null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],null,[[],["sdt",3]],[[],["genericaddressstructure",3]],null,null,[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],null,null,null,null,[[]],[[]],null,null,null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]]],"p":[[3,"GenericAddressStructure"],[3,"Sdt"]]},\ -"serial_port":{"doc":"Support for basic serial port access, including …","t":[13,13,13,13,6,3,4,11,11,11,11,11,11,11,11,11,11,11,11,5,5,11,11,11,11,11,11,11,11,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11],"n":["COM1","COM2","COM3","COM4","DataChunk","SerialPort","SerialPortAddress","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","data_available","flush","fmt","from","from","from_str","get_serial_port","handle_receive_interrupt","in_byte","in_bytes","into","into","new","out_byte","out_bytes","out_str","read","ready_to_transmit","set_connection_listener","set_data_sender","to_owned","try_from","try_from","try_from","try_from","try_into","try_into","type_id","type_id","write","write_str"],"q":["serial_port","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["The base port I/O address for the COM1 serial port.","The base port I/O address for the COM2 serial port.","The base port I/O address for the COM3 serial port.","The base port I/O address for the COM4 serial port.","A chunk of data read from a serial port that will be …","A serial port and its various data and control registers.","The base port I/O addresses for COM serial ports.","","","","","","","Returns true if the serial port has data available to …","","","","","","Obtains a reference to the [SerialPort] specified by the …","This is called from the serial port interrupt handlers …","Read one byte from the serial port, blocking until data …","Reads multiple bytes from the serial port into the given …","","","Creates and returns a new serial port structure, and …","Write the given byte to the serial port, blocking until …","Write the given bytes to the serial port, blocking until …","Write the given string to the serial port, blocking until …","","Returns true if the serial port is ready to transmit a …","A temporary hack to allow the serial port interrupt …","Tells this SerialPort to push received data bytes onto …","","","","","","","","","","",""],"i":[1,1,1,1,0,0,0,2,1,2,1,1,1,2,2,1,2,1,1,0,0,2,2,2,1,2,2,2,2,2,2,0,2,1,2,1,1,1,2,1,2,1,2,2],"f":[null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[],["serialportaddress",4]],[[]],[[],["bool",15]],[[],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[["str",15]],["result",4]],[[["serialportaddress",4]],["mutexirqsafe",3]],[[["serialportaddress",4]]],[[],["u8",15]],[[],["usize",15]],[[]],[[]],[[["u16",15]],["serialport",3]],[[["u8",15]]],[[]],[[["str",15]]],[[],[["result",6],["usize",15]]],[[],["bool",15]],[[["serialportaddress",4],["sender",3]],["sender",3]],[[["sender",3],["datachunk",6]],[["option",4],["sender",3]]],[[]],[[],["result",4]],[[],["result",4]],[[["str",15]],["result",4]],[[["u16",15]],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],[["result",6],["usize",15]]],[[["str",15]],["result",6]]],"p":[[4,"SerialPortAddress"],[3,"SerialPort"]]},\ +"serial_port":{"doc":"Support for basic serial port access, including …","t":[13,13,13,13,6,3,4,11,11,11,11,11,11,11,11,11,11,11,11,5,5,11,11,11,11,11,11,11,11,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11],"n":["COM1","COM2","COM3","COM4","DataChunk","SerialPort","SerialPortAddress","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","data_available","flush","fmt","from","from","from_str","get_serial_port","handle_receive_interrupt","in_byte","in_bytes","into","into","new","out_byte","out_bytes","out_str","read","ready_to_transmit","set_connection_listener","set_data_sender","to_owned","try_from","try_from","try_from","try_from","try_into","try_into","type_id","type_id","write","write_str"],"q":["serial_port","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["The base port I/O address for the COM1 serial port.","The base port I/O address for the COM2 serial port.","The base port I/O address for the COM3 serial port.","The base port I/O address for the COM4 serial port.","A chunk of data read from a serial port that will be …","A serial port and its various data and control registers.","The base port I/O addresses for COM serial ports.","","","","","","","Returns true if the serial port has data available to …","","","","","","Obtains a reference to the [SerialPort] specified by the …","This is called from the serial port interrupt handlers …","Read one byte from the serial port, blocking until data …","Reads multiple bytes from the serial port into the given …","","","Creates and returns a new serial port structure, and …","Write the given byte to the serial port, blocking until …","Write the given bytes to the serial port, blocking until …","Write the given string to the serial port, blocking until …","","Returns true if the serial port is ready to transmit a …","A temporary hack to allow the serial port interrupt …","Tells this SerialPort to push received data bytes onto …","","","","","","","","","","",""],"i":[1,1,1,1,0,0,0,2,1,2,1,1,1,2,2,1,2,1,1,0,0,2,2,2,1,2,2,2,2,2,2,0,2,1,2,1,1,1,2,1,2,1,2,2],"f":[null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[],["serialportaddress",4]],[[]],[[],["bool",15]],[[],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[["str",15]],["result",4]],[[["serialportaddress",4]],["mutexirqsafe",3]],[[["serialportaddress",4]]],[[],["u8",15]],[[],["usize",15]],[[]],[[]],[[["u16",15]],["serialport",3]],[[["u8",15]]],[[]],[[["str",15]]],[[],[["result",6],["usize",15]]],[[],["bool",15]],[[["sender",3],["serialportaddress",4]],["sender",3]],[[["sender",3],["datachunk",6]],[["option",4],["sender",3]]],[[]],[[],["result",4]],[[],["result",4]],[[["str",15]],["result",4]],[[["u16",15]],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],[["result",6],["usize",15]]],[[["str",15]],["result",6]]],"p":[[4,"SerialPortAddress"],[3,"SerialPort"]]},\ "shapes":{"doc":"This crate defines the basic shapes used for display.","t":[3,3,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,12,12],"n":["Coord","Rectangle","add","add","add","borrow","borrow","borrow_mut","borrow_mut","bottom_right","clone","clone","cmp","eq","eq","fmt","fmt","from","from","hash","hash","height","into","into","ne","ne","new","partial_cmp","sub","sub","sub","top_left","try_from","try_from","try_into","try_into","type_id","type_id","width","x","y"],"q":["shapes","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["A 2-D integer coordinate.","A rectangle given by its top-left coordinate and …","","","","","","","","The bottom-right point","","","","","","","","","","","","Returns the height of this Rectangle.","","","","","Creates a new coordinate.","","","","","The top-left point","","","","","","","Returns the width of this Rectangle.","The x coordinate","The y coordinate"],"i":[0,0,1,1,2,1,2,1,2,2,1,2,1,1,2,1,2,1,2,1,2,2,1,2,1,2,1,1,1,1,2,2,1,2,1,2,1,2,2,1,1],"f":[null,null,[[["coord",3]],["coord",3]],[[],["coord",3]],[[["coord",3]],["rectangle",3]],[[]],[[]],[[]],[[]],null,[[],["coord",3]],[[],["rectangle",3]],[[],["ordering",4]],[[["coord",3]],["bool",15]],[[["rectangle",3]],["bool",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[],["usize",15]],[[]],[[]],[[["coord",3]],["bool",15]],[[["rectangle",3]],["bool",15]],[[["isize",15]],["coord",3]],[[],[["option",4],["ordering",4]]],[[],["coord",3]],[[["coord",3]],["coord",3]],[[["coord",3]],["rectangle",3]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["usize",15]],null,null],"p":[[3,"Coord"],[3,"Rectangle"]]},\ "simd_personality":{"doc":"Management of two kernel personalities, one for …","t":[],"n":[],"q":[],"d":[],"i":[],"f":[],"p":[]},\ "simd_test":{"doc":"","t":[],"n":[],"q":[],"d":[],"i":[],"f":[],"p":[]},\ @@ -123,21 +123,21 @@ var searchIndex = JSON.parse('{\ "slabmalloc_safe":{"doc":"A slab allocator implementation for objects less than …","t":[8,18,18,18,18,18,18,18,18,18,18,18,18,3,3,3,18,18,18,3,11,11,11,11,11,10,11,10,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["AllocablePage","BASE_ALLOC_SIZES","BUFFER_SIZE","HEAP_ID_OFFSET","HEAP_ID_OFFSET","HEAP_ID_OFFSET","MAX_ALLOC_SIZE","MAX_BASE_ALLOC_SIZE","MAX_BASE_SIZE_CLASSES","MAX_PAGE_LIST_SIZE","METADATA_SIZE","METADATA_SIZE","METADATA_SIZE","MappedPages8k","ObjectPage8k","SCAllocator","SIZE","SIZE","SIZE","ZoneAllocator","allocate","allocate","allocate","allocate","allocate","bitfield","bitfield","bitfield_mut","bitfield_mut","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clear_metadata","clear_metadata","deallocate","deallocate","deallocate","deallocate","deallocate","default","empty_pages","exchange_pages_within_heap","first_fit","first_fit","first_fit","from","from","from","from","get_max_size","heap_id","into","into","into","into","is_empty","is_empty","is_empty","is_full","is_full","is_full","new","new","new","refill","refill","retrieve_empty_page","retrieve_empty_page","size","start_address","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id"],"q":["slabmalloc_safe","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["This trait is used to define a page from which objects …","The set of sizes the allocator has lists for.","","","","","Maximum size that allocated within 2 pages. (8 KiB - …","Maximum size which is allocated with ObjectPages8k (8 …","How many allocators of type SCAllocator we have.","The maximum number of allocable pages the SCAllocator can …","","","","A wrapper type around MappedPages which ensures that the …","Holds allocated data within 2 4-KiB pages.","A slab allocator allocates elements of a fixed size.","The total size (in bytes) of the page.","The total size (in bytes) of the page.","","A zone allocator for arbitrary sized allocations.","Tries to allocate an object within this page.","Tries to allocate an object within this page.","Tries to allocate an object within this page.","Allocates a block of memory descriped by layout.","Allocate a pointer to a block of memory described by …","","","","","","","","","","","","","","clears the metadata section of the page","Deallocates a memory object within this page.","Deallocates a memory object within this page.","Deallocates a memory object within this page.","Deallocates a previously allocated ptr described by Layout…","Deallocates a pointer to a block of memory, which was …","","The total number of empty pages in this zone allocator","","Tries to find a free block within data that satisfies …","Tries to find a free block within data that satisfies …","Tries to find a free block within data that satisfies …","","","","","Return maximum size an object of size current_size can …","","","","","","Checks if the page has currently no allocations.","Checks if the page has currently no allocations.","Checks if the page has currently no allocations.","Checks if we can still allocate more objects of a given …","Checks if we can still allocate more objects of a given …","Checks if we can still allocate more objects of a given …","Creates a MappedPages8k object from MappedPages that have …","Creates a new SCAllocator and initializes the page lists …","","Refill the SCAllocator","Refills the SCAllocator for a given Layout with a …","Returns an empty page from the allocator if available.","Returns a MappedPages8k from the SCAllocator with the …","Returns the maximum supported object size of this …","","","","","","","","","","","","",""],"i":[0,1,2,3,3,2,1,1,1,4,3,3,2,0,0,0,3,3,2,0,3,3,5,4,1,3,5,3,5,5,2,4,1,5,2,4,1,3,5,3,3,5,4,1,1,1,1,3,3,5,5,2,4,1,1,1,5,2,4,1,3,3,5,3,3,5,2,4,1,4,1,4,1,4,2,5,2,4,1,5,2,4,1,5,2,4,1],"f":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["layout",3]]],[[["layout",3]]],[[["layout",3]]],[[["layout",3]],[["str",15],["result",4],["nonnull",3]]],[[["layout",3]],[["str",15],["result",4],["nonnull",3]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["layout",3],["nonnull",3],["u8",15]],[["result",4],["str",15]]],[[["layout",3],["nonnull",3],["u8",15]],[["result",4],["str",15]]],[[["layout",3],["nonnull",3],["u8",15]],[["result",4],["str",15]]],[[["layout",3],["nonnull",3],["u8",15]],[["result",4],["str",15]]],[[["layout",3],["nonnull",3],["u8",15]],[["result",4],["str",15]]],[[],["zoneallocator",3]],[[],["usize",15]],[[["layout",3]],[["result",4],["str",15]]],[[["layout",3]],["option",4]],[[["layout",3]],["option",4]],[[["layout",3]],["option",4]],[[]],[[]],[[]],[[]],[[["usize",15]],[["option",4],["usize",15]]],null,[[]],[[]],[[]],[[]],[[["usize",15]],["bool",15]],[[["usize",15]],["bool",15]],[[["usize",15]],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[["mappedpages",3]],[["result",4],["mappedpages8k",3],["str",15]]],[[["usize",15]],["scallocator",3]],[[["usize",15]],["zoneallocator",3]],[[["mappedpages8k",3],["usize",15]],[["result",4],["str",15]]],[[["mappedpages8k",3],["layout",3]],[["result",4],["str",15]]],[[],[["option",4],["mappedpages8k",3]]],[[["usize",15]],[["option",4],["mappedpages8k",3]]],[[],["usize",15]],[[],["virtualaddress",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]]],"p":[[3,"ZoneAllocator"],[3,"MappedPages8k"],[8,"AllocablePage"],[3,"SCAllocator"],[3,"ObjectPage8k"]]},\ "slabmalloc_unsafe":{"doc":"A slab allocator implementation for objects less than …","t":[8,18,18,18,18,18,18,18,18,3,3,3,18,18,3,11,11,11,11,10,11,10,11,11,11,11,11,11,11,11,11,10,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,12,12,11,11,11,11,11,11,11,11,11,11,10,11,10,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["AllocablePage","BASE_ALLOC_SIZES","HEAP_ID_OFFSET","HEAP_ID_OFFSET","MAX_ALLOC_SIZE","MAX_BASE_ALLOC_SIZE","MAX_BASE_SIZE_CLASSES","METADATA_SIZE","METADATA_SIZE","ObjectPage8k","Rawlink","SCAllocator","SIZE","SIZE","ZoneAllocator","allocate","allocate","allocate","allocate","bitfield","bitfield","bitfield_mut","bitfield_mut","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","buffer_size","buffer_size","clear_metadata","clear_metadata","deallocate","deallocate","deallocate","deallocate","default","default","default","empty_pages","exchange_pages_within_heap","first_fit","first_fit","fmt","from","from","from","from","get_max_size","heap_id","heap_id","heap_id","heap_id","into","into","into","into","is_empty","is_empty","is_full","is_full","new","new","next","next","prev","prev","refill","refill","retrieve_empty_page","retrieve_empty_page","set_heap_id","set_heap_id","size","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id"],"q":["slabmalloc_unsafe","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["This trait is used to define a page from which objects …","The set of sizes the allocator has lists for.","","","Maximum size that allocated within 2 pages. (8 KiB - …","Maximum size which is allocated with ObjectPages8k (8 …","How many allocators of type SCAllocator we have.","","","Holds allocated data within 2 4-KiB pages.","Rawlink is a type like Option but for holding a raw …","A slab allocator allocates elements of a fixed size.","The total size (in bytes) of the page.","The total size (in bytes) of the page.","A zone allocator for arbitrary sized allocations.","Tries to allocate an object within this page.","Tries to allocate an object within this page.","Allocates a block of memory described by layout.","Allocate a pointer to a block of memory described by …","","","","","","","","","","","","","","","","clears the metadata section of the page","Deallocates a memory object within this page.","Deallocates a memory object within this page.","Deallocates a previously allocated ptr described by layout…","Deallocates a pointer to a block of memory, which was …","","","","The total number of empty pages in this zone allocator","","Tries to find a free block within data that satisfies …","Tries to find a free block within data that satisfies …","","","","","","Return maximum size an object of size current_size can …","","","","","","","","","Checks if the page has currently no allocations.","Checks if the page has currently no allocations.","Checks if we can still allocate more objects of a given …","Checks if we can still allocate more objects of a given …","Create a new SCAllocator.","","","","","","Refill the SCAllocator","Refills the SCAllocator for a given Layout with an object …","Returns an empty page from the allocator if available.","Returns an ObjectPage from the SCAllocator with the …","","","Returns the maximum supported object size of this …","","","","","","","","","","","",""],"i":[0,1,2,2,1,1,1,2,2,0,0,0,2,2,0,2,2,3,1,2,4,2,4,4,5,3,1,4,5,3,1,2,4,2,4,2,2,3,1,4,5,1,1,1,2,2,4,4,5,3,1,1,2,4,4,1,4,5,3,1,2,2,2,2,3,1,2,4,2,4,3,1,3,1,2,4,3,4,5,3,1,4,5,3,1,4,5,3,1],"f":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["layout",3]]],[[["layout",3]]],[[["layout",3]],[["str",15],["nonnull",3],["result",4]]],[[["layout",3]],[["str",15],["nonnull",3],["result",4]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[["layout",3],["nonnull",3],["u8",15]],[["result",4],["str",15]]],[[["layout",3],["nonnull",3],["u8",15]],[["result",4],["str",15]]],[[["layout",3],["nonnull",3],["u8",15]],[["result",4],["str",15]]],[[["layout",3],["nonnull",3],["u8",15]],[["result",4],["str",15]]],[[],["objectpage8k",3]],[[]],[[],["zoneallocator",3]],[[],["usize",15]],[[["layout",3]],[["result",4],["str",15]]],[[["layout",3]],["option",4]],[[["layout",3]],["option",4]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[["usize",15]],[["option",4],["usize",15]]],[[],["usize",15]],[[],["usize",15]],null,null,[[]],[[]],[[]],[[]],[[["usize",15]],["bool",15]],[[["usize",15]],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[["usize",15]],["scallocator",3]],[[["usize",15]],["zoneallocator",3]],[[],["rawlink",3]],[[],["rawlink",3]],[[],["rawlink",3]],[[],["rawlink",3]],[[["usize",15]]],[[["objectpage8k",3],["layout",3]],[["result",4],["str",15]]],[[],["option",4]],[[["usize",15]],[["objectpage8k",3],["option",4]]],[[["usize",15]]],[[["usize",15]]],[[],["usize",15]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]]],"p":[[3,"ZoneAllocator"],[8,"AllocablePage"],[3,"SCAllocator"],[3,"ObjectPage8k"],[3,"Rawlink"]]},\ "smoltcp_helper":{"doc":"Collection of functions to set up a TCP connection using …","t":[17,5,5,14,5,5],"n":["STARTING_FREE_PORT","connect","get_default_iface","hpet_ticks","millis_since","poll_iface"],"q":["smoltcp_helper","","","","",""],"d":["The starting number for freely-available (non-reserved) …","A convenience function for connecting a socket. If the …","Returns the first network interface available in the …","A simple macro to get the current HPET clock ticks.","Function to calculate the currently elapsed time (in …","A convenience function to poll the given network …"],"i":[0,0,0,0,0,0],"f":[null,[[["u16",15],["u64",15],["networkinterfaceref",6],["socketset",3],["sockethandle",3],["ipendpoint",3]],[["result",4],["str",15]]],[[],[["networkinterfaceref",6],["str",15],["result",4]]],null,[[["u64",15]],[["str",15],["result",4],["u64",15]]],[[["u64",15],["networkinterfaceref",6],["socketset",3]],[["str",15],["result",4],["bool",15]]]],"p":[]},\ -"spawn":{"doc":"This crate offers routines for spawning new tasks and …","t":[3,3,11,11,11,11,11,11,5,11,11,11,11,11,5,11,11,11,5,5,11,11,11,11,11,11,11,11,11],"n":["BootstrapTaskRef","TaskBuilder","argument","block","borrow","borrow","borrow_mut","borrow_mut","create_idle_task","deref","drop","from","from","idle","init","into","into","name","new_application_task_builder","new_task_builder","pin_on_core","spawn","spawn_restartable","try_from","try_from","try_into","try_into","type_id","type_id"],"q":["spawn","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["A wrapper around a TaskRef that is for bootstrapped …","A struct that offers a builder pattern to create and …","Set the argument that will be passed to the new Task’s …","Set the new Task’s RunState to be Blocked instead of …","","","","","Spawns an idle task on the given core if specified, …","","","","","Sets this new Task to be the idle task for the given …","Initializes tasking for the given AP core, including …","","","Set the String name for the new Task.","Creates a builder for a new application Task. ","Creates a builder for a new Task that starts at the given …","Pin the new Task to a specific core.","Finishes this TaskBuilder and spawns the new task as …","Like spawn(), this finishes this TaskBuilder and spawns …","","","","","",""],"i":[0,0,1,1,2,1,2,1,0,2,2,2,1,1,0,2,1,1,0,0,1,1,1,2,1,2,1,2,1],"f":[null,null,[[],["taskbuilder",3]],[[],["taskbuilder",3]],[[]],[[]],[[]],[[]],[[["option",4],["u8",15]],[["taskref",3],["str",15],["result",4]]],[[],["taskref",3]],[[]],[[]],[[]],[[["u8",15]],["taskbuilder",3]],[[["arc",3],["stack",3],["mutexirqsafe",3],["u8",15]],[["str",15],["result",4],["bootstraptaskref",3]]],[[]],[[]],[[["string",3]],["taskbuilder",3]],[[["option",4],["path",3],["arc",3]],[["taskbuilder",3],["str",15],["result",4]]],[[],["taskbuilder",3]],[[["u8",15]],["taskbuilder",3]],[[],[["taskref",3],["str",15],["result",4]]],[[],[["taskref",3],["str",15],["result",4]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]]],"p":[[3,"TaskBuilder"],[3,"BootstrapTaskRef"]]},\ +"spawn":{"doc":"This crate offers routines for spawning new tasks and …","t":[3,3,11,11,11,11,11,11,5,11,11,11,11,11,5,11,11,11,5,5,11,11,11,11,11,11,11,11,11],"n":["BootstrapTaskRef","TaskBuilder","argument","block","borrow","borrow","borrow_mut","borrow_mut","create_idle_task","deref","drop","from","from","idle","init","into","into","name","new_application_task_builder","new_task_builder","pin_on_core","spawn","spawn_restartable","try_from","try_from","try_into","try_into","type_id","type_id"],"q":["spawn","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["A wrapper around a TaskRef that is for bootstrapped …","A struct that offers a builder pattern to create and …","Set the argument that will be passed to the new Task’s …","Set the new Task’s RunState to be Blocked instead of …","","","","","Spawns an idle task on the given core if specified, …","","","","","Sets this new Task to be the idle task for the given …","Initializes tasking for the given AP core, including …","","","Set the String name for the new Task.","Creates a builder for a new application Task. ","Creates a builder for a new Task that starts at the given …","Pin the new Task to a specific core.","Finishes this TaskBuilder and spawns the new task as …","Like spawn(), this finishes this TaskBuilder and spawns …","","","","","",""],"i":[0,0,1,1,2,1,2,1,0,2,2,2,1,1,0,2,1,1,0,0,1,1,1,2,1,2,1,2,1],"f":[null,null,[[],["taskbuilder",3]],[[],["taskbuilder",3]],[[]],[[]],[[]],[[]],[[["option",4],["u8",15]],[["result",4],["taskref",3],["str",15]]],[[],["taskref",3]],[[]],[[]],[[]],[[["u8",15]],["taskbuilder",3]],[[["arc",3],["stack",3],["mutexirqsafe",3],["u8",15]],[["result",4],["str",15],["bootstraptaskref",3]]],[[]],[[]],[[["string",3]],["taskbuilder",3]],[[["arc",3],["path",3],["option",4]],[["result",4],["taskbuilder",3],["str",15]]],[[],["taskbuilder",3]],[[["u8",15]],["taskbuilder",3]],[[],[["result",4],["taskref",3],["str",15]]],[[],[["result",4],["taskref",3],["str",15]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]]],"p":[[3,"TaskBuilder"],[3,"BootstrapTaskRef"]]},\ "stack":{"doc":"Provides the Stack type that represents a Task’s stack …","t":[3,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["Stack","alloc_stack","borrow","borrow_mut","bottom","deref","deref_mut","fmt","from","from_pages","guard_page","into","top_unusable","top_usable","try_from","try_into","type_id"],"q":["stack","","","","","","","","","","","","","","","",""],"d":["A range of mapped memory designated for use as a task’s …","Allocates a new stack and maps it to the active page …","","","Returns the bottom of this stack, its lowest usable …","","","","","Creates a stack from its constituent parts: a guard page …","Returns the guard page(s) for this stack. ","","Returns the address just beyond the top of this stack, …","Returns the highest usable address of this Stack, which …","","",""],"i":[0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"f":[null,[[["usize",15],["mapper",3]],[["option",4],["stack",3]]],[[]],[[]],[[],["virtualaddress",3]],[[],["mappedpages",3]],[[],["mappedpages",3]],[[["formatter",3]],["result",6]],[[]],[[["allocatedpages",3],["mappedpages",3]],[["result",4],["stack",3]]],[[],["pagerange",3]],[[]],[[],["virtualaddress",3]],[[],["virtualaddress",3]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]]],"p":[[3,"Stack"]]},\ -"stack_trace":{"doc":"Stack trace (backtrace) functionality using DWARF …","t":[5],"n":["stack_trace"],"q":["stack_trace"],"d":["Get a stack trace using the default stack tracer based on …"],"i":[0],"f":[[[["fn",8],["option",4],["usize",15]],[["result",4],["str",15]]]],"p":[]},\ +"stack_trace":{"doc":"Stack trace (backtrace) functionality using DWARF …","t":[5],"n":["stack_trace"],"q":["stack_trace"],"d":["Get a stack trace using the default stack tracer based on …"],"i":[0],"f":[[[["option",4],["fn",8],["usize",15]],[["result",4],["str",15]]]],"p":[]},\ "stack_trace_frame_pointers":{"doc":"Stack trace (backtrace) functionality using frame …","t":[],"n":[],"q":[],"d":[],"i":[],"f":[],"p":[]},\ "state_store":{"doc":"","t":[3,11,11,11,11,5,5,5,11,11,11,11],"n":["SSCached","borrow","borrow_mut","from","get","get_state","init","insert_state","into","try_from","try_into","type_id"],"q":["state_store","","","","","","","","","","",""],"d":["A thread-safe cached reference to a system-wide state. …","","","","Tries to upgrade the internal Weak pointer to a Strong …","Returns a Weak reference to the SystemState of the …","","Inserts a new SystemState-implementing type into the map. ","","","",""],"i":[0,1,1,1,1,0,0,0,1,1,1,1],"f":[null,[[]],[[]],[[]],[[],[["option",4],["arc",3]]],[[],[["sscached",3],["any",8]]],[[]],[[["any",8]],[["option",4],["any",8]]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]]],"p":[[3,"SSCached"]]},\ "state_transfer":{"doc":"","t":[5],"n":["prio_sched"],"q":["state_transfer"],"d":["This function is used for live evolution from a round …"],"i":[0],"f":[[[["cratenamespace",3],["arc",3]],[["result",4],["str",15]]]],"p":[]},\ "stdio":{"doc":"This crate creates the abstraction of stdio. They are …","t":[3,3,3,3,3,6,3,3,3,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["KeyEventQueue","KeyEventQueueReader","KeyEventQueueWriter","KeyEventReadGuard","RingBufferEof","RingBufferEofRef","Stdio","StdioReadGuard","StdioReader","StdioWriteGuard","StdioWriter","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","deref","drop","flush","from","from","from","from","from","from","from","from","from","from","get_reader","get_reader","get_reader_with_buf_capacity","get_writer","get_writer","into","into","into","into","into","into","into","into","into","into","is_eof","lock","lock","new","new","new","read","read_line","read_one","remaining_bytes","set_eof","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_read","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","write","write_one"],"q":["stdio","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["","A reader to keyevent ring buffer.","A writer to keyevent ring buffer.","A structure that allows applications to access keyboard …","A ring buffer with an EOF mark.","A reference to a ring buffer with an EOF mark with mutex …","A ring buffer containing bytes. It forms stdin, stdout …","StdioReadGuard acts like MutexGuard, it locks the …","A reader to stdio buffers.","StdioReadGuard acts like MutexGuard, it locks the …","A writer to stdio buffers.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the reader of KeyEventQueue back to the previous …","The function required by Write trait. Currently it …","","","","","","","","","","","Get a reader to the stdio buffer. Note that each reader …","Get a reader to the ring buffer.","Get a reader to the stdio buffer with a customized buffer …","Get a writer to the stdio buffer.","Get a writer to the ring buffer.","","","","","","","","","","","Check if the EOF flag of the queue has been set.","Lock the reader and return a guard that can perform …","Lock the writer and return a guard that can perform …","Create a new stdio buffer.","Create a new ring buffer storing KeyEvent.","Create a new KeyEventReadGuard. This function takes a …","Read from the ring buffer. Returns the number of bytes …","Read a line from the ring buffer and return. Remaining …","Try to read a keyevent from the ring buffer. It returns …","Returns the number of bytes still in the read buffer.","Set the EOF flag of the queue to true.","","","","","","","","","","","","","","","","","","","","","","","","","Same as read(), but is non-blocking.","","","","","","","","","","","Write to the ring buffer, returniong the number of bytes …","Push a keyevent into the ring buffer."],"i":[0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,7,8,9,10,7,8,9,10,6,6,4,1,2,3,4,5,6,7,8,9,10,2,5,2,2,5,1,2,3,4,5,6,7,8,9,10,3,7,8,2,5,6,3,7,9,3,4,7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,3,1,2,3,4,5,6,7,8,9,10,4,10],"f":[null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["stdioreader",3]],[[],["stdiowriter",3]],[[],["keyeventqueuereader",3]],[[],["keyeventqueuewriter",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[],[["result",4],["error",3]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["stdioreader",3]],[[],["keyeventqueuereader",3]],[[["usize",15]],["stdioreader",3]],[[],["stdiowriter",3]],[[],["keyeventqueuewriter",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["bool",15]],[[],["stdioreadguard",3]],[[],["stdiowriteguard",3]],[[],["stdio",3]],[[],["keyeventqueue",3]],[[["keyeventqueuereader",3],["box",3],["fn",8]],["keyeventreadguard",3]],[[],[["usize",15],["error",3],["result",4]]],[[["string",3]],[["usize",15],["error",3],["result",4]]],[[],[["option",4],["keyevent",3]]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],[["usize",15],["error",3],["result",4]]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],[["usize",15],["error",3],["result",4]]],[[["keyevent",3]]]],"p":[[3,"RingBufferEof"],[3,"Stdio"],[3,"StdioReadGuard"],[3,"StdioWriteGuard"],[3,"KeyEventQueue"],[3,"KeyEventReadGuard"],[3,"StdioReader"],[3,"StdioWriter"],[3,"KeyEventQueueReader"],[3,"KeyEventQueueWriter"]]},\ "storage_device":{"doc":"Trait definitions for storage devices and storage …","t":[8,6,8,6,10,11,11,11,11,11,10],"n":["StorageController","StorageControllerRef","StorageDevice","StorageDeviceRef","devices","downcast","downcast_mut","downcast_rc","downcast_ref","is","size_in_blocks"],"q":["storage_device","","","","","","","","","",""],"d":["A trait that represents a storage controller, such as an …","A trait object wrapped in an Arc and Mutex that allows …","A trait that represents a storage device, such as hard …","A trait object wrapped in an Arc and Mutex that allows …","Returns an iterator of references to all StorageDevices …","Returns a boxed object from a boxed trait object if the …","Returns a mutable reference to the object within the …","Returns an Rc-ed object from an Rc-ed trait object if the …","Returns a reference to the object within the trait object …","Returns true if the trait object wraps an object of type …","Returns the total size of this device, given in number of …"],"i":[0,0,0,0,1,2,2,2,2,2,2],"f":[null,null,null,null,[[],[["iterator",8],["box",3]]],[[["box",3]],[["box",3],["result",4],["box",3]]],[[],["option",4]],[[["rc",3]],[["rc",3],["result",4],["rc",3]]],[[],["option",4]],[[],["bool",15]],[[],["usize",15]]],"p":[[8,"StorageController"],[8,"StorageDevice"]]},\ "storage_manager":{"doc":"Manages and handles initialization of all storage devices …","t":[8,6,8,6,10,11,11,11,11,5,11,10,5,5],"n":["StorageController","StorageControllerRef","StorageDevice","StorageDeviceRef","devices","downcast","downcast_mut","downcast_rc","downcast_ref","init_device","is","size_in_blocks","storage_controllers","storage_devices"],"q":["storage_manager","","","","","","","","","","","","",""],"d":["A trait that represents a storage controller, such as an …","A trait object wrapped in an Arc and Mutex that allows …","A trait that represents a storage device, such as hard …","A trait object wrapped in an Arc and Mutex that allows …","Returns an iterator of references to all StorageDevices …","Returns a boxed object from a boxed trait object if the …","Returns a mutable reference to the object within the …","Returns an Rc-ed object from an Rc-ed trait object if the …","Returns a reference to the object within the trait object …","Attempts to handle the initialization of the given …","Returns true if the trait object wraps an object of type …","Returns the total size of this device, given in number of …","Returns an iterator over all initialized storage …","Returns an iterator over all storage devices attached to …"],"i":[0,0,0,0,1,2,2,2,2,0,2,2,0,0],"f":[null,null,null,null,[[],[["global",3],["iterator",8],["box",3]]],[[["storagedevice",8],["box",3],["global",3]],[["box",3],["result",4],["box",3]]],[[],["option",4]],[[["storagedevice",8],["rc",3]],[["rc",3],["rc",3],["result",4]]],[[],["option",4]],[[["pcidevice",3]],[["str",15],["option",4],["result",4]]],[[],["bool",15]],[[],["usize",15]],[[]],[[]]],"p":[[8,"StorageController"],[8,"StorageDevice"]]},\ -"task":{"doc":"This crate contains the Task structure for supporting …","t":[13,13,13,4,13,6,13,6,4,13,13,3,13,13,3,4,13,3,3,3,12,12,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,12,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,5,5,11,5,11,12,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,12,12,12,11,12,12,12,12,11,11,12,12,12,12,12,11,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["Blocked","Completed","Exception","ExitValue","Exited","FailureCleanupFunction","Initing","KillHandler","KillReason","Killed","Panic","PanicInfoOwned","Reaped","Requested","RestartInfo","RunState","Runnable","TASKLIST","Task","TaskRef","app_crate","argument","block","bootstrap_task","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","column","deref","drop","env","eq","failure_cleanup_function","file","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","func","get_env","get_exit_value","get_my_current_task","get_my_current_task_id","get_namespace","get_task","has_exited","id","initialize","into","into","into","into","into","into","into","into","is_an_idle_task","is_application","is_restartable","is_runnable","is_running","is_userspace","join","kill","kill_handler","kstack","line","lock","mmi","msg","name","namespace","new","new","pinned_core","restart_info","running_on_cpu","runstate","saved_sp","set_env","set_kill_handler","set_kill_handler","set_my_kill_handler","take_exit_value","take_exit_value","take_kill_handler","take_kill_handler","task_switch","to_owned","to_owned","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unblock"],"q":["task","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["blocked on something, like I/O or a wait event","The Task ran to completion and returned the enclosed Any …","A non-language-level problem, such as a Page Fault or …","The list of ways that a Task can exit, including possible …","The Task has exited and can no longer be run, either by …","The signature of a Task’s failure cleanup function.","in the midst of setting up the task","The function signature of the callback that will be …","The list of possible reasons that a given Task was killed …","The Task did NOT run to completion, and was instead …","A Rust-level panic occurred while running this Task.","Just like core::panic::PanicInfo, but with owned String …","This Task had already exited and now its ExitValue has …","The user or another task requested that this Task be …","A data structure to hold data related to restart the …","The set of possible runstates that a task can be in, e.g.,…","able to be scheduled in, but not necessarily currently …","The list of all Tasks in the system.","A structure that contains contextual information for a …","A shareable, cloneable reference to a Task that exposes …","For application Tasks, this is a reference to the …","Stores the argument of the task for restartable tasks","Blocks this Task by setting its RunState to blocked.","Bootstrap a new task from the current thread of execution.","","","","","","","","","","","","","","","","","","","","","","","","The environment of the task, Wrapped in an Arc & Mutex …","","The function that should be run as a last-ditch attempt …","","","","","","","","","","","","","","","","","","","","Stores the function of the task for restartable tasks","Gets a reference to this task’s Environment.","Returns a reference to the exit value of this Task, if …","Returns a reference to the current task by using the …","Returns the current Task’s id by using the TaskLocalData…","Gets a reference to this task’s CrateNamespace.","returns a shared reference to the Task specified by the …","Returns true if this Task has been exited, i.e., if its …","the unique id of this Task.","","","","","","","","","","Whether this Task is an idle task, the task that runs by …","Returns true if this is an application Task. This will …","","Returns true if this Task is Runnable, i.e., able to be …","returns true if this Task is currently running on any cpu.","Returns true if this is a userspaceTask. Currently …","Waits until the given task has finished executing, i.e., …","Kills this Task (not a clean exit) without allowing it to …","The function that will be called when this Task panics or …","The kernel stack, which all Tasks must have in order to …","","Obtains the lock on the underlying Task in a read-only, …","Memory management details: page tables, mappings, …","","the simple name of this Task","This Task is linked into and runs within the context of …","Creates a new Task structure and initializes it to be …","Creates a new TaskRef that wraps the given Task.","Whether or not this task is pinned to a certain core. The …","Stores the restartable information of the task. …","Which cpu core the Task is currently running on. None if …","the runnability status of this task, basically whether it…","the saved stack pointer value, used for task switching.","Sets the Environment of this Task.","Registers a function or closure that will be called if …","Registers a function or closure that will be called if …","Sets the kill handler function for the current Task","Takes ownership of this Task’s exit value and returns …","Takes ownership of this Task’s exit value and returns …","Takes ownership of this Task’s KillHandler …","Takes ownership of this Task’s KillHandler …","Switches from the current (self) to the given next Task.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Unblocks this Task by setting its RunState to runnable."],"i":[1,2,3,0,1,0,1,0,0,2,3,0,1,3,0,0,1,0,0,0,4,5,6,0,5,4,7,8,3,2,1,6,5,4,7,8,3,2,1,6,7,6,7,6,7,8,4,4,6,4,7,4,4,7,7,3,3,2,1,6,5,4,7,7,8,3,2,1,6,5,6,4,0,0,6,0,4,4,8,5,4,7,8,3,2,1,6,4,4,6,4,4,4,6,6,4,4,7,6,4,7,4,4,4,6,4,4,4,4,4,6,4,6,0,4,6,4,6,4,7,6,4,7,3,5,4,7,8,3,2,1,6,5,4,7,8,3,2,1,6,5,4,7,8,3,2,1,6,6],"f":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[["mmiref",6],["u8",15],["stack",3]],[["result",4],["str",15],["taskref",3]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["panicinfoowned",3]],[[],["taskref",3]],[[]],[[]],null,[[],["mutexirqsafe",3]],[[]],null,[[["taskref",3]],["bool",15]],null,null,[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[["panicinfo",3]],["panicinfoowned",3]],[[]],[[]],[[]],[[]],[[]],null,[[],[["arc",3],["mutex",6]]],[[],[["option",4],["exitvalue",4]]],[[],[["option",4],["taskref",3]]],[[],[["option",4],["usize",15]]],[[],[["arc",3],["cratenamespace",3]]],[[["usize",15]],[["taskref",3],["option",4]]],[[],["bool",15]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],[["result",4],["str",15]]],[[["killreason",4]],[["result",4],["str",15]]],null,null,null,[[],[["task",3],["mutexirqsafeguardref",6]]],null,null,null,null,[[["failurecleanupfunction",6],["option",4],["stack",3]],[["task",3],["str",15],["result",4]]],[[["task",3]],["taskref",3]],null,null,null,null,null,[[["arc",3],["mutex",6]]],[[["killhandler",6]]],[[["killhandler",6]]],[[["killhandler",6]],[["result",4],["str",15]]],[[],[["option",4],["exitvalue",4]]],[[],[["option",4],["exitvalue",4]]],[[],[["option",4],["killhandler",6]]],[[],[["option",4],["killhandler",6]]],[[["u8",15],["task",3]]],[[]],[[]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]]],"p":[[4,"RunState"],[4,"ExitValue"],[4,"KillReason"],[3,"Task"],[3,"RestartInfo"],[3,"TaskRef"],[3,"PanicInfoOwned"],[3,"TASKLIST"]]},\ -"task_fs":{"doc":"This crate contains the direcotires and files that …","t":[3,3,17,17,3,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["MmiDir","MmiFile","TASKS_DIRECTORY_NAME","TASKS_DIRECTORY_PATH","TaskDir","TaskFile","TaskFs","as_mapping","as_mapping","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","from","from","from","from","from","get","get","get","get_absolute_path","get_absolute_path","get_absolute_path","get_absolute_path","get_absolute_path","get_name","get_name","get_name","get_name","get_name","get_parent_dir","get_parent_dir","get_parent_dir","get_parent_dir","get_parent_dir","init","insert","insert","insert","into","into","into","into","into","list","list","list","name","new","new","new","new","read","read","remove","remove","remove","set_parent_dir","set_parent_dir","set_parent_dir","set_parent_dir","set_parent_dir","size","size","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","write","write"],"q":["task_fs","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["Lazily computed directory that contains subfiles and …","Lazily computed file that contains information about a …","The name of the VFS directory that exposes task info in …","The absolute path of the tasks directory, which is …","A lazily computed directory that holds files and …","Lazily computed file that holds information about this …","The top level directory that includes a …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Initializes the tasks virtual filesystem directory within …","This function adds a newly created fs node (the argument) …","","","","","","","","Returns a string listing all the children in the directory","Returns a string listing all the children in the directory","Returns a string listing all the children in the directory","The name of the directory","Creates a new directory and passes a pointer to the new …","","Creates a new directory and passes a pointer to the new …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,0,0,0,0,0,0,1,2,3,4,1,5,2,3,4,1,5,2,3,4,1,5,2,3,4,5,3,4,1,5,2,3,4,1,5,2,3,4,1,5,2,0,3,4,5,3,4,1,5,2,3,4,5,4,4,1,5,2,1,2,3,4,5,3,4,1,5,2,1,2,3,4,1,5,2,3,4,1,5,2,3,4,1,5,2,1,2],"f":[null,null,null,null,null,null,null,[[],[["mappedpages",3],["result",4],["str",15]]],[[],[["mappedpages",3],["result",4],["str",15]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["str",15]],[["fileordir",4],["option",4]]],[[["str",15]],[["fileordir",4],["option",4]]],[[["str",15]],[["fileordir",4],["option",4]]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[],[["option",4],["dirref",6]]],[[],[["option",4],["dirref",6]]],[[],[["option",4],["dirref",6]]],[[],[["option",4],["dirref",6]]],[[],[["option",4],["dirref",6]]],[[],[["result",4],["str",15]]],[[["fileordir",4]],[["result",4],["str",15],["option",4]]],[[["fileordir",4]],[["result",4],["str",15],["option",4]]],[[["fileordir",4]],[["result",4],["str",15],["option",4]]],[[]],[[]],[[]],[[]],[[]],[[],[["vec",3],["string",3]]],[[],[["vec",3],["string",3]]],[[],[["vec",3],["string",3]]],null,[[["dirref",6],["taskref",3],["string",3]],[["taskdir",3],["result",4],["str",15]]],[[["taskref",3]],["taskfile",3]],[[["taskref",3]],["mmidir",3]],[[["taskref",3]],["mmifile",3]],[[["usize",15]],[["result",4],["usize",15],["str",15]]],[[["usize",15]],[["result",4],["usize",15],["str",15]]],[[["fileordir",4]],[["fileordir",4],["option",4]]],[[["fileordir",4]],[["fileordir",4],["option",4]]],[[["fileordir",4]],[["fileordir",4],["option",4]]],[[["weakdirref",6]]],[[["weakdirref",6]]],[[["weakdirref",6]]],[[["weakdirref",6]]],[[["weakdirref",6]]],[[],["usize",15]],[[],["usize",15]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[["usize",15]],[["result",4],["usize",15],["str",15]]],[[["usize",15]],[["result",4],["usize",15],["str",15]]]],"p":[[3,"TaskFile"],[3,"MmiFile"],[3,"TaskFs"],[3,"TaskDir"],[3,"MmiDir"]]},\ -"terminal_print":{"doc":"Applications that want to print to their parent terminal …","t":[5,14,5,14,5],"n":["add_child","print","print_to_stdout_args","println","remove_child"],"q":["terminal_print","","","",""],"d":["Adds the (child application’s task ID, parent terminal …","The main printing macro, which simply pushes an output …","Converts the given core::fmt::Arguments to a String and …","Calls print!() with an extra newline (‘\\\\n’) appended …","Removes the (child application’s task ID, parent …"],"i":[0,0,0,0,0],"f":[[[["dfqueueproducer",3],["usize",15],["event",4]],[["result",4],["str",15]]],null,[[["arguments",3]]],null,[[["usize",15]],[["result",4],["str",15]]]],"p":[]},\ -"text_display":{"doc":"This crate defines a text displayable. A text displayable …","t":[3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["TextDisplay","borrow","borrow_mut","display","fmt","from","get_bg_color","get_dimensions","get_index","get_location","get_next_index","get_size","into","new","reset_cache","set_size","set_text","try_from","try_into","type_id"],"q":["text_display","","","","","","","","","","","","","","","","","","",""],"d":["A text displayable profiles the size and color of a block …","","","","","","Gets the background color of the text area","Gets the size of a text displayable in number of …","Translate the location of a character to its index in the …","Translate the index of a character in the text to the …","Gets the index of next character to be displayabled. It …","","","Creates a new text displayable.","Clear the cache of the text displayable.","","Sets the text of the text displayable","","",""],"i":[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"f":[null,[[]],[[]],[[["coord",3],["framebuffer",3]],[["str",15],["rectangle",3],["result",4]]],[[["formatter",3]],["result",6]],[[]],[[],["color",3]],[[]],[[["usize",15]],["usize",15]],[[["usize",15]]],[[],["usize",15]],[[]],[[]],[[["usize",15],["color",3]],[["textdisplay",3],["str",15],["result",4]]],[[]],[[["usize",15]]],[[["str",15]]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]]],"p":[[3,"TextDisplay"]]},\ +"task":{"doc":"This crate contains the Task structure for supporting …","t":[13,13,13,4,13,6,13,6,4,13,13,3,13,13,3,4,13,3,3,3,3,12,12,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,5,5,11,5,11,12,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,12,12,12,12,12,12,11,11,11,12,12,11,11,12,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["Blocked","Completed","Exception","ExitValue","Exited","FailureCleanupFunction","Initing","KillHandler","KillReason","Killed","Panic","PanicInfoOwned","Reaped","Requested","RestartInfo","RunState","Runnable","TASKLIST","Task","TaskInner","TaskRef","app_crate","argument","block","bootstrap_task","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","column","deref","deref","drop","eq","eq","failure_cleanup_function","file","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","func","get_env","get_my_current_task","get_my_current_task_id","get_namespace","get_task","has_exited","id","initialize","inner_mut","into","into","into","into","into","into","into","into","into","is_an_idle_task","is_application","is_restartable","is_runnable","is_running","is_userspace","join","kill","kstack","line","mmi","msg","name","namespace","new","new","pinned_core","pinned_core","restart_info","running_on_cpu","runstate","saved_sp","set_env","set_kill_handler","set_my_kill_handler","take_exit_value","take_kill_handler","task_switch","to_owned","to_owned","to_owned","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unblock","with_kstack","with_restart_info"],"q":["task","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["blocked on something, like I/O or a wait event","The Task ran to completion and returned the enclosed Any …","A non-language-level problem, such as a Page Fault or …","The list of ways that a Task can exit, including possible …","The Task has exited and can no longer be run, either by …","The signature of a Task’s failure cleanup function.","in the midst of setting up the task","The function signature of the callback that will be …","The list of possible reasons that a given Task was killed …","The Task did NOT run to completion, and was instead …","A Rust-level panic occurred while running this Task.","Just like core::panic::PanicInfo, but with owned String …","This Task had already exited and its ExitValue has been …","The user or another task requested that this Task be …","A struct holding data items needed to restart a Task.","The set of possible runstates that a task can be in, e.g.,…","able to be scheduled in, but not necessarily currently …","The list of all Tasks in the system.","A structure that contains contextual information for a …","The parts of a Task that may be modified after its …","A shareable, cloneable reference to a Task that exposes …","For application Tasks, this is effectively a reference to …","Stores the argument of the task for restartable tasks","Blocks this Task by setting its runstate to […","Bootstrap a new task from the current thread of execution.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The function that should be run as a last-ditch attempt …","","","","","","","","","","","","","","","","","","","","","Stores the function of the task for restartable tasks","Gets a reference to this task’s Environment.","Returns a reference to the current task by using the …","Returns the current Task’s id by using the TaskLocalData…","Returns the namespace in which this Task is loaded/linked …","returns a shared reference to the Task specified by the …","Returns true if this Task has been exited, i.e., if its …","The unique identifier of this Task.","","Returns a mutable reference to this Task’s inner state. ","","","","","","","","","","Whether this Task is an idle task, the task that runs by …","Returns true if this is an application Task. This will …","Returns true if this Task was spawned as a restartable …","Returns true if this Task is Runnable, i.e., able to be …","Returns true if this Task is currently running.","Returns true if this is a userspace Task. Currently …","Blocks until this task has exited or has been killed.","Kills this Task (not a clean exit) without allowing it to …","The kernel stack, which all Tasks must have in order to …","","Memory management details: page tables, mappings, …","","The simple name of this Task.","This Task is linked into and runs within the context of …","Creates a new Task structure and initializes it to be …","Creates a new TaskRef that wraps the given Task.","Returns the APIC ID of the CPU this Task is pinned on, or …","Whether or not this task is pinned to a certain core. The …","Stores the restartable information of the task. …","Returns the APIC ID of the CPU this Task is currently …","Returns the current [RunState] of this Task.","the saved stack pointer value, used for task switching.","Sets the Environment of this Task.","Registers a function or closure that will be called if …","Sets the kill handler function for the current Task","Takes ownership of this Task’s exit value and returns …","Takes ownership of this Task’s KillHandler …","Switches from the current task (self) to the given next …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Unblocks this Task by setting its runstate to […","Exposes read-only access to this Task’s [Stack] by …","Exposes read-only access to this Task’s [RestartInfo] …"],"i":[1,2,3,0,1,0,1,0,0,2,3,0,1,3,0,0,1,0,0,0,0,4,5,4,0,5,6,4,7,8,3,2,1,9,5,6,4,7,8,3,2,1,9,7,1,9,7,1,9,7,8,9,4,1,9,4,7,4,4,7,7,3,3,2,1,9,5,6,4,7,7,8,3,2,1,9,5,4,0,0,4,0,4,4,8,4,5,6,4,7,8,3,2,1,9,4,4,4,4,4,4,9,9,6,7,4,7,4,4,4,9,4,6,6,4,4,6,4,4,0,4,4,4,7,1,9,4,7,3,5,6,4,7,8,3,2,1,9,5,6,4,7,8,3,2,1,9,5,6,4,7,8,3,2,1,9,4,4,4],"f":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[["mmiref",6],["u8",15],["stack",3]],[["str",15],["taskref",3],["result",4]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["panicinfoowned",3]],[[],["runstate",4]],[[],["taskref",3]],[[]],[[]],[[]],null,[[],["mutexirqsafe",3]],[[]],[[]],[[["runstate",4]],["bool",15]],[[["taskref",3]],["bool",15]],null,null,[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],["result",6]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[["panicinfo",3]],["panicinfoowned",3]],[[]],[[]],[[]],[[]],[[]],null,[[],[["arc",3],["mutex",6]]],[[],[["option",4],["taskref",3]]],[[],[["option",4],["usize",15]]],[[],["arc",3]],[[["usize",15]],[["option",4],["taskref",3]]],[[],["bool",15]],null,[[]],[[],["taskinner",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],[["result",4],["str",15]]],[[["killreason",4]],[["result",4],["str",15]]],null,null,null,null,null,null,[[["failurecleanupfunction",6],["option",4],["stack",3]],[["task",3],["result",4],["str",15]]],[[["task",3]],["taskref",3]],[[],[["option",4],["u8",15]]],null,null,[[],[["option",4],["u8",15]]],[[],["runstate",4]],null,[[["arc",3],["mutex",6]]],[[["killhandler",6]]],[[["killhandler",6]],[["result",4],["str",15]]],[[],[["exitvalue",4],["option",4]]],[[],[["killhandler",6],["option",4]]],[[["task",3],["u8",15]]],[[]],[[]],[[]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]]],"p":[[4,"RunState"],[4,"ExitValue"],[4,"KillReason"],[3,"Task"],[3,"RestartInfo"],[3,"TaskInner"],[3,"PanicInfoOwned"],[3,"TASKLIST"],[3,"TaskRef"]]},\ +"task_fs":{"doc":"This crate contains the direcotires and files that …","t":[3,3,17,17,3,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["MmiDir","MmiFile","TASKS_DIRECTORY_NAME","TASKS_DIRECTORY_PATH","TaskDir","TaskFile","TaskFs","as_mapping","as_mapping","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","from","from","from","from","from","get","get","get","get_absolute_path","get_absolute_path","get_absolute_path","get_absolute_path","get_absolute_path","get_name","get_name","get_name","get_name","get_name","get_parent_dir","get_parent_dir","get_parent_dir","get_parent_dir","get_parent_dir","init","insert","insert","insert","into","into","into","into","into","list","list","list","name","new","new","new","new","read","read","remove","remove","remove","set_parent_dir","set_parent_dir","set_parent_dir","set_parent_dir","set_parent_dir","size","size","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","write","write"],"q":["task_fs","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["Lazily computed directory that contains subfiles and …","Lazily computed file that contains information about a …","The name of the VFS directory that exposes task info in …","The absolute path of the tasks directory, which is …","A lazily computed directory that holds files and …","Lazily computed file that holds information about this …","The top level directory that includes a …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Initializes the tasks virtual filesystem directory within …","This function adds a newly created fs node (the argument) …","","","","","","","","Returns a string listing all the children in the directory","Returns a string listing all the children in the directory","Returns a string listing all the children in the directory","The name of the directory","Creates a new directory and passes a pointer to the new …","","Creates a new directory and passes a pointer to the new …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,0,0,0,0,0,0,1,2,3,4,1,5,2,3,4,1,5,2,3,4,1,5,2,3,4,5,3,4,1,5,2,3,4,1,5,2,3,4,1,5,2,0,3,4,5,3,4,1,5,2,3,4,5,4,4,1,5,2,1,2,3,4,5,3,4,1,5,2,1,2,3,4,1,5,2,3,4,1,5,2,3,4,1,5,2,1,2],"f":[null,null,null,null,null,null,null,[[],[["mappedpages",3],["result",4],["str",15]]],[[],[["mappedpages",3],["result",4],["str",15]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["str",15]],[["fileordir",4],["option",4]]],[[["str",15]],[["fileordir",4],["option",4]]],[[["str",15]],[["fileordir",4],["option",4]]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[],[["option",4],["dirref",6]]],[[],[["option",4],["dirref",6]]],[[],[["option",4],["dirref",6]]],[[],[["option",4],["dirref",6]]],[[],[["option",4],["dirref",6]]],[[],[["result",4],["str",15]]],[[["fileordir",4]],[["result",4],["str",15],["option",4]]],[[["fileordir",4]],[["result",4],["str",15],["option",4]]],[[["fileordir",4]],[["result",4],["str",15],["option",4]]],[[]],[[]],[[]],[[]],[[]],[[],[["vec",3],["string",3]]],[[],[["vec",3],["string",3]]],[[],[["vec",3],["string",3]]],null,[[["dirref",6],["taskref",3],["string",3]],[["taskdir",3],["str",15],["result",4]]],[[["taskref",3]],["taskfile",3]],[[["taskref",3]],["mmidir",3]],[[["taskref",3]],["mmifile",3]],[[["usize",15]],[["result",4],["usize",15],["str",15]]],[[["usize",15]],[["result",4],["usize",15],["str",15]]],[[["fileordir",4]],[["fileordir",4],["option",4]]],[[["fileordir",4]],[["fileordir",4],["option",4]]],[[["fileordir",4]],[["fileordir",4],["option",4]]],[[["weakdirref",6]]],[[["weakdirref",6]]],[[["weakdirref",6]]],[[["weakdirref",6]]],[[["weakdirref",6]]],[[],["usize",15]],[[],["usize",15]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[["usize",15]],[["result",4],["usize",15],["str",15]]],[[["usize",15]],[["result",4],["usize",15],["str",15]]]],"p":[[3,"TaskFile"],[3,"MmiFile"],[3,"TaskFs"],[3,"TaskDir"],[3,"MmiDir"]]},\ +"terminal_print":{"doc":"Applications that want to print to their parent terminal …","t":[5,14,5,14,5],"n":["add_child","print","print_to_stdout_args","println","remove_child"],"q":["terminal_print","","","",""],"d":["Adds the (child application’s task ID, parent terminal …","The main printing macro, which simply pushes an output …","Converts the given core::fmt::Arguments to a String and …","Calls print!() with an extra newline (‘\\\\n’) appended …","Removes the (child application’s task ID, parent …"],"i":[0,0,0,0,0],"f":[[[["usize",15],["dfqueueproducer",3],["event",4]],[["result",4],["str",15]]],null,[[["arguments",3]]],null,[[["usize",15]],[["result",4],["str",15]]]],"p":[]},\ +"text_display":{"doc":"This crate defines a text displayable. A text displayable …","t":[3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["TextDisplay","borrow","borrow_mut","display","fmt","from","get_bg_color","get_dimensions","get_index","get_location","get_next_index","get_size","into","new","reset_cache","set_size","set_text","try_from","try_into","type_id"],"q":["text_display","","","","","","","","","","","","","","","","","","",""],"d":["A text displayable profiles the size and color of a block …","","","","","","Gets the background color of the text area","Gets the size of a text displayable in number of …","Translate the location of a character to its index in the …","Translate the index of a character in the text to the …","Gets the index of next character to be displayabled. It …","","","Creates a new text displayable.","Clear the cache of the text displayable.","","Sets the text of the text displayable","","",""],"i":[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"f":[null,[[]],[[]],[[["framebuffer",3],["coord",3]],[["str",15],["rectangle",3],["result",4]]],[[["formatter",3]],["result",6]],[[]],[[],["color",3]],[[]],[[["usize",15]],["usize",15]],[[["usize",15]]],[[],["usize",15]],[[]],[[]],[[["usize",15],["color",3]],[["textdisplay",3],["str",15],["result",4]]],[[]],[[["usize",15]]],[[["str",15]]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]]],"p":[[3,"TextDisplay"]]},\ "text_terminal":{"doc":"A text-mode terminal emulator. ","t":[12,12,12,13,4,4,18,18,3,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,4,13,4,13,4,13,18,13,13,13,13,18,18,18,13,13,13,3,13,3,13,13,13,18,13,18,18,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,18,4,13,13,3,3,13,13,13,3,13,18,13,3,13,13,3,13,13,13,13,13,13,13,13,13,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12],"n":["0","0","0","AlternateFont","AnsiStyleCodes","AsciiControlCodes","BLINK","BRIGHT","BackgroundColor","BackgroundColor","Backspace","Bar","Bell","Black","Blink","BlinkRapid","Blue","Bottom","Bright","BrightBlack","BrightBlue","BrightCyan","BrightGreen","BrightMagenta","BrightRed","BrightWhite","BrightYellow","CarriageReturn","Character","Circled","Color","Color8Bit","CursorStyle","Cyan","DIM","Default","Delete","Dim","DoulbeUnderlinedOrNotBright","ESCAPE_DELIM","ESCAPE_PREFIX","ESCAPE_SUFFIX","EmptyBox","Escape","FilledBox","ForegroundColor","ForegroundColor","FormatFlags","Fraktur","Framed","Green","HIDDEN","Hidden","INVERSE","ITALIC","Inverse","Italic","Magenta","Multi","NewLine","NewPage","NotBlink","NotBrightNorDim","NotFramedOrCircled","NotHidden","NotInverse","NotItalicNorFraktur","NotOverlined","NotStrikethrough","NotSuperOrSubscript","NotUnderlined","Overlined","PrimaryFont","RGB","Red","Reset","STRIKETHROUGH","ScrollPosition","Single","Strikethrough","Style","StyleDiff","Subscript","Superscript","Tab","TextTerminal","Top","UNDERLINE","Underlined","UnderlinedColor","UnderlinedColor","Underscore","Unit","UnitIndex","VerticalTab","White","Yellow","_IdeogramDoubleOverlined","_IdeogramDoubleUnderlined","_IdeogramOverlined","_IdeogramStressMarking","_IdeogramUnderlined","_NotIdeogram","_NotProportionalSpacing","_ProportionalSpacing","all","bitand","bitand_assign","bitor","bitor_assign","bits","bits_that_differ","bitxor","bitxor_assign","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","contains","default","default","default","default","default","default","default","default","default","default","deref","diff","displayable_width","empty","eq","eq","eq","eq","eq","eq","extend","flush","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_bits","from_bits_truncate","from_iter","handle_input","hash","insert","intersects","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into_iter","is_all","is_empty","ne","ne","ne","ne","ne","ne","new","next","not","partial_cmp","remove","resize","screen_size","set","sub","sub_assign","to_escape_code","to_escape_code","to_escape_code","to_escape_code","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","toggle","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","blue","green","red","column","line"],"q":["text_terminal","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","text_terminal::Color","","","text_terminal::ScrollPosition",""],"d":["","","","Sets the font to an alternate font. There are 10 …","The set of all possible ANSI escape codes for setting …","The set of ASCII values that are non-printable characters …","If set, the unit box where this character is displayed …","If set, this character is displayed in a bright color, …","A wrapper type around [Color] that is used in […","Set the background color: the color displayed behind the …","(BS) Backspaces over the previous character before (to …","A line before (to the left of) the character box.","(BEL) Plays a terminal bell or beep. Ctrl + G, or \'\\\\a\'.","","The text will blink at slower rate, under 150 blinks per …","The text will blink rapidly at a fast rate, over 150 …","","The terminal position is scrolled all the way down.","Bright or bold text.","Gray/grey.","","","","","","True pure white. ","","(CR) Moves the cursor to the beginning of the line, i.e., …","The character stored in each [Unit] of the terminal …","The text will be displayed with a circle or oval …","The set of colors that can be displayed by a terminal …","8-bit color, as introduced in xterm.","","","If set, this character is displayed using a dim or faint …","The default color, which is generally unspecified and …","(DEL) Deletes the next character after (to the right of) …","Dim or faint text.","The text will be underlined twice, or, depending on the …","","","","An empty box that surrounds the character but does not …","(ESC) The escape character. ESC, or \'\\\\e\'.","A rectangle that covers the entire character box. This is …","A wrapper type around [Color] that is used in […","Set the foreground color: the color the text will be …","The flags that describe the formatting of a given text …","Sets the font to be a blackletter font, which is a …","The text will be displayed with a rectangular box …","","If set, this character is not displayed at all, only a …","The text will be concealed/invisible and not displayed at …","If set, this character is displayed with …","If set, this character is displayed in italics.","The foreground and background colors will be swapped. …","Italicized text.","","","(LF) Moves the cursor to the next line, i.e., Line feed. …","(FF) Inserts a page break (form feed) to move the …","Disables Blink or BlinkRapid.","Normal font intensity: Disables Bright or Dim.","Disables Framed or Circled.","Disables Hidden``: text is displayed as normal. Sometimes …","Disables Inverse: foreground colors and background colors …","Normal font sytle: Disables Italic or Fraktur.","Disabled Overlined.","Disables Strikethrough: text is not crossed out.","Disables Superscript or Subscript.","Disables Underline or DoubleUnderline.","The text will be overlined: displayed with a line on top …","Sets the font to the primary default font.","True 24-bit RGB color, with 8 bits for each of the red, …","","Resets or clears all styles.","If set, this character is displayed with a …","The position (“viewport”) that the terminal is …","","The text will be striked through, i.e., crossed out with …","The style of text, including formatting and color choice, …","A representation of the difference between two [Style]s.","","","(HT) Inserts a horizontal tab. Ctrl + I, or \'\\\\t\'.","A text-based terminal that supports the ANSI, xterm, …","The terminal is scrolled all the way up.","If set, this character is displayed with a single …","Underlined text. ","A wrapper type around [Color] that is used in […","Sets the underline color. Without this, the underline …","A line beneath the character box.","A Unit is a single character block displayed in the …","The terminal is scrolled to a specific point, for which …","(VT) Inserts a vertical tab. Ctrl + K, or \'\\\\v\'.","More of a light gray/grey. Use BrightWhite for true white.","","","","","","","Disables all Ideogram styles.","Disables _ProportionalSpacing.","Proportional spacing, which sets the Teletex character …","Returns the set containing all flags.","Returns the intersection between the two sets of flags.","Disables all flags disabled in the set.","Returns the union of the two sets of flags.","Adds the set of flags.","Returns the raw value of the flags currently stored.","Returns a bit mask of the bits that differ between self …","Returns the left flags, but with all the right flags …","Toggles the set of flags.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns true all of the flags in other are contained …","","","","","","","","","","","","","Returns the number of columns required to display this …","Returns an empty set of flags","","","","","","","","Flushes the entire viewable region of the terminal’s …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, dropping any …","","Pulls as many bytes as possible from the given [Read]er …","","Inserts the specified flags in-place.","Returns true if there are flags common to both self and …","","","","","","","","","","","","","","","","Returns true if all flags are currently set.","Returns true if no flags are currently stored.","","","","","","","Create an empty TextTerminal with no text content.","","Returns the complement of this set of flags.","","Removes the specified flags in-place.","Resizes this terminal’s screen to be width columns and …","Returns the size (columns, rows) of this terminal’s …","Inserts or removes the specified flags depending on the …","Returns the set difference of the two sets of flags.","Disables all flags enabled in the set.","","","","","","","","","","","","","Toggles the specified flags in-place.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[1,2,3,4,0,0,5,5,0,4,6,7,6,8,4,4,8,9,4,8,8,8,8,8,8,8,8,6,0,4,0,8,0,8,5,8,6,4,4,4,4,4,7,6,7,0,4,0,4,4,8,5,4,5,5,4,4,8,10,6,6,4,4,4,4,4,4,4,4,4,4,4,4,8,8,4,5,0,10,4,0,0,4,4,6,0,9,5,4,0,4,7,0,9,6,8,8,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,11,9,12,8,1,2,3,13,4,5,6,10,14,7,11,9,12,8,1,2,3,13,4,5,6,10,14,7,8,1,2,3,13,5,8,1,2,3,13,5,5,5,9,8,1,2,3,13,5,10,14,7,14,13,10,5,8,1,2,3,13,5,5,12,8,1,2,3,13,4,4,5,5,5,5,5,6,10,10,14,7,11,9,12,8,8,1,1,2,2,3,3,13,4,5,6,10,14,7,5,5,5,12,5,5,5,11,9,12,8,1,2,3,13,4,5,6,10,14,7,11,5,5,8,1,2,3,13,5,12,11,5,5,5,12,12,5,5,5,1,2,3,4,8,1,2,3,13,5,4,10,5,11,9,12,8,1,2,3,13,4,5,6,10,14,7,11,9,12,8,1,2,3,13,4,5,6,10,14,7,11,9,12,8,1,2,3,13,4,5,6,10,14,7,15,15,15,16,16],"f":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[],["formatflags",3]],[[["formatflags",3]],["formatflags",3]],[[["formatflags",3]]],[[["formatflags",3]],["formatflags",3]],[[["formatflags",3]]],[[],["u8",15]],[[["formatflags",3]],["formatflags",3]],[[["formatflags",3]],["formatflags",3]],[[["formatflags",3]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["color",4]],[[],["foregroundcolor",3]],[[],["backgroundcolor",3]],[[],["underlinedcolor",3]],[[],["style",3]],[[],["formatflags",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[["formatflags",3]],["ordering",4]],[[["formatflags",3]],["bool",15]],[[]],[[]],[[],["foregroundcolor",3]],[[],["backgroundcolor",3]],[[],["underlinedcolor",3]],[[],["style",3]],[[],["formatflags",3]],[[]],[[],["unit",3]],[[]],[[]],[[["style",3]],["stylediff",3]],[[],["u16",15]],[[],["formatflags",3]],[[["color",4]],["bool",15]],[[["foregroundcolor",3]],["bool",15]],[[["backgroundcolor",3]],["bool",15]],[[["underlinedcolor",3]],["bool",15]],[[["style",3]],["bool",15]],[[["formatflags",3]],["bool",15]],[[["intoiterator",8]]],[[],[["result",6],["usize",15]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[["u8",15]]],[[]],[[["color",4]]],[[]],[[["color",4]]],[[["color",4]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["u8",15]],[["option",4],["formatflags",3]]],[[["u8",15]],["formatflags",3]],[[["intoiterator",8]],["formatflags",3]],[[],[["result",6],["usize",15]]],[[]],[[["formatflags",3]]],[[["formatflags",3]],["bool",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[["color",4]],["bool",15]],[[["foregroundcolor",3]],["bool",15]],[[["backgroundcolor",3]],["bool",15]],[[["underlinedcolor",3]],["bool",15]],[[["style",3]],["bool",15]],[[["formatflags",3]],["bool",15]],[[["u16",15]],["textterminal",3]],[[],["option",4]],[[],["formatflags",3]],[[["formatflags",3]],[["ordering",4],["option",4]]],[[["formatflags",3]]],[[["u16",15]]],[[]],[[["formatflags",3],["bool",15]]],[[["formatflags",3]],["formatflags",3]],[[["formatflags",3]]],[[],[["str",15],["cow",4]]],[[],[["str",15],["cow",4]]],[[],[["str",15],["cow",4]]],[[],[["str",15],["cow",4]]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["string",3]],[[],["string",3]],[[["formatflags",3]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,null,null,null,null],"p":[[3,"ForegroundColor"],[3,"BackgroundColor"],[3,"UnderlinedColor"],[4,"AnsiStyleCodes"],[3,"FormatFlags"],[4,"AsciiControlCodes"],[4,"CursorStyle"],[4,"Color"],[4,"ScrollPosition"],[4,"Character"],[3,"StyleDiff"],[3,"TextTerminal"],[3,"Style"],[3,"Unit"],[13,"RGB"],[13,"UnitIndex"]]},\ -"tlb_shootdown":{"doc":"Support for broadcasting and handling TLB shootdown IPIs. ","t":[7,17,7,7,5,5,5],"n":["TLB_SHOOTDOWN_IPI_COUNT","TLB_SHOOTDOWN_IPI_IRQ","TLB_SHOOTDOWN_IPI_LOCK","TLB_SHOOTDOWN_IPI_PAGES","handle_tlb_shootdown_ipi","init","send_tlb_shootdown_ipi"],"q":["tlb_shootdown","","","","","",""],"d":["The number of remaining cores that still need to handle …","The IRQ number used for IPIs","The lock that makes sure only one set of TLB shootdown …","The range of pages for a TLB shootdown IPI.","Handles a TLB shootdown ipi by flushing the VirtualAddress…","Initializes data, functions, and structures for the TLB …","Sends an IPI to all other cores (except me) to trigger a …"],"i":[0,0,0,0,0,0,0],"f":[null,null,null,null,[[["pagerange",3]]],[[]],[[["pagerange",3],["localapic",3]]]],"p":[]},\ +"tlb_shootdown":{"doc":"Support for broadcasting and handling TLB shootdown IPIs. ","t":[7,17,7,7,5,5,5],"n":["TLB_SHOOTDOWN_IPI_COUNT","TLB_SHOOTDOWN_IPI_IRQ","TLB_SHOOTDOWN_IPI_LOCK","TLB_SHOOTDOWN_IPI_PAGES","handle_tlb_shootdown_ipi","init","send_tlb_shootdown_ipi"],"q":["tlb_shootdown","","","","","",""],"d":["The number of remaining cores that still need to handle …","The IRQ number used for IPIs","The lock that makes sure only one set of TLB shootdown …","The range of pages for a TLB shootdown IPI.","Handles a TLB shootdown ipi by flushing the VirtualAddress…","Initializes data, functions, and structures for the TLB …","Sends an IPI to all other cores (except me) to trigger a …"],"i":[0,0,0,0,0,0,0],"f":[null,null,null,null,[[["pagerange",3]]],[[]],[[["localapic",3],["pagerange",3]]]],"p":[]},\ "tsc":{"doc":"","t":[3,11,11,11,11,11,5,11,11,11,11,11,11,5,11],"n":["TscTicks","add","borrow","borrow_mut","fmt","from","get_tsc_frequency","into","into","sub","to_ns","try_from","try_into","tsc_ticks","type_id"],"q":["tsc","","","","","","","","","","","","","",""],"d":["","Checked addition. Computes self + other, returning None …","","","","","Returns the frequency of the TSC for the system, …","Get the inner value, the number of ticks.","","Checked subtraction. Computes self - other, returning …","Converts ticks to nanoseconds. Returns None if the TSC …","","","Returns the current number of ticks from the TSC, i.e., …",""],"i":[0,1,1,1,1,1,0,1,1,1,1,1,1,0,1],"f":[null,[[["tscticks",3]],[["tscticks",3],["option",4]]],[[]],[[]],[[["formatter",3]],["result",6]],[[]],[[],[["str",15],["result",4],["u64",15]]],[[],["u64",15]],[[]],[[["tscticks",3]],[["tscticks",3],["option",4]]],[[],[["u64",15],["option",4]]],[[],["result",4]],[[],["result",4]],[[],["tscticks",3]],[[],["typeid",3]]],"p":[[3,"TscTicks"]]},\ "tss":{"doc":"","t":[17,5,5],"n":["DOUBLE_FAULT_IST_INDEX","create_tss","tss_set_rsp0"],"q":["tss","",""],"d":["The index of the double fault stack in a TaskStateSegment …","set up TSS entry for the given AP core. Returns a …","Sets the current core’s TSS privilege stack 0 (RSP0) …"],"i":[0,0,0],"f":[null,[[["virtualaddress",3],["u8",15]],["mutex",6]],[[["virtualaddress",3]],[["result",4],["str",15]]]],"p":[]},\ "unified_channel":{"doc":"A cfg-based wrapper that unifies rendezvous channels and …","t":[3,3,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,11,11,11,11,11,11,11,11],"n":["StringReceiver","StringSender","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","from","from","into","into","new_string_channel","receive","send","to_owned","to_owned","try_from","try_from","try_into","try_into","type_id","type_id"],"q":["unified_channel","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,0,1,2,1,2,1,2,1,2,1,2,1,2,0,2,1,1,2,1,2,1,2,1,2],"f":[null,null,[[]],[[]],[[]],[[]],[[],["stringsender",3]],[[],["stringreceiver",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[["usize",15]]],[[],[["string",3],["result",4],["str",15]]],[[["string",3]],[["result",4],["str",15]]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]]],"p":[[3,"StringSender"],[3,"StringReceiver"]]},\ @@ -146,9 +146,9 @@ var searchIndex = JSON.parse('{\ "vfs_node":{"doc":"This crate contains a very basic, generic concrete …","t":[3,3,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,12,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11],"n":["VFSDirectory","VFSFile","as_mapping","borrow","borrow","borrow_mut","borrow_mut","children","from","from","get","get_name","get_name","get_parent_dir","get_parent_dir","insert","into","into","list","name","new","new","parent","read","remove","set_parent_dir","set_parent_dir","size","try_from","try_from","try_into","try_into","type_id","type_id","write"],"q":["vfs_node","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["A struct that represents a node in the VFS ","","","","","","","A list of child filesystem nodes","","","","","","Returns a pointer to the parent if it exists","","","","","Returns a string listing all the children in the directory","The name of the directory","Creates a new directory and passes a pointer to the new …","","A weak reference to the parent directory","","","","","","","","","","","",""],"i":[0,0,1,2,1,2,1,2,2,1,2,2,1,2,1,2,2,1,2,2,2,1,2,1,2,2,1,1,2,1,2,1,2,1,1],"f":[null,null,[[],[["result",4],["str",15],["mappedpages",3]]],[[]],[[]],[[]],[[]],null,[[]],[[]],[[["str",15]],[["fileordir",4],["option",4]]],[[],["string",3]],[[],["string",3]],[[],[["option",4],["dirref",6]]],[[],[["option",4],["dirref",6]]],[[["fileordir",4]],[["str",15],["result",4],["option",4]]],[[]],[[]],[[],[["string",3],["vec",3]]],null,[[["dirref",6],["string",3]],[["str",15],["result",4],["dirref",6]]],[[["dirref",6],["usize",15],["string",3]],[["fileref",6],["str",15],["result",4]]],null,[[["usize",15]],[["result",4],["usize",15],["str",15]]],[[["fileordir",4]],[["fileordir",4],["option",4]]],[[["weakdirref",6]]],[[["weakdirref",6]]],[[],["usize",15]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[["usize",15]],[["result",4],["usize",15],["str",15]]]],"p":[[3,"VFSFile"],[3,"VFSDirectory"]]},\ "vga_buffer":{"doc":"Support for basic printing to a simple 80x25 text-mode …","t":[13,13,13,4,3,13,13,13,13,13,13,13,13,13,13,13,3,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,14,14,11,11,11,11,11,11,11,11,11,11,11,11],"n":["Black","Blue","Brown","Color","ColorCode","Cyan","DarkGray","Green","LightBlue","LightCyan","LightGray","LightGreen","LightRed","Magenta","Pink","Red","ScreenChar","White","Yellow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","default","fmt","fmt","fmt","from","from","from","into","into","into","new","new","print_raw","println_raw","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id"],"q":["vga_buffer","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,2,3,1,2,3,1,2,3,1,2,3,2,1,2,3,1,2,3,1,2,3,2,3,0,0,1,2,3,1,2,3,1,2,3,1,2,3],"f":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[],["color",4]],[[],["colorcode",3]],[[],["screenchar",3]],[[]],[[]],[[]],[[],["colorcode",3]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[]],[[["color",4]],["colorcode",3]],[[["u8",15],["colorcode",3]],["screenchar",3]],null,null,[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]]],"p":[[4,"Color"],[3,"ColorCode"],[3,"ScreenChar"]]},\ "virtual_nic":{"doc":"This crate defines a struct that enables language-level …","t":[3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["VirtualNic","borrow","borrow_mut","drop","from","get_received_frame","id","into","mac_address","new","poll_receive","send_packet","send_packet_on_queue","try_from","try_into","type_id"],"q":["virtual_nic","","","","","","","","","","","","","","",""],"d":["A structure that contains a set of RxQueues and TxQueues …","","","","","","","","","Create a new VirtualNIC with the given parameters. For …","","","Send a packet on the specified queue.","","",""],"i":[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"f":[null,[[]],[[]],[[]],[[]],[[],[["option",4],["receivedframe",3]]],[[],["u8",15]],[[]],[[]],[[["vec",3],["rxqueue",3],["mutexirqsafe",3],["txqueue",3],["usize",15],["vec",3]],[["virtualnic",3],["str",15],["result",4]]],[[],[["result",4],["str",15]]],[[["transmitbuffer",3]],[["result",4],["str",15]]],[[["usize",15],["transmitbuffer",3]],[["result",4],["str",15]]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]]],"p":[[3,"VirtualNic"]]},\ -"wait_condition":{"doc":"Simple condition variables that are convenience wrappers …","t":[3,3,25,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["SatisfiedWaitCondition","WaitCondition","WaitConditionFn","borrow","borrow","borrow_mut","borrow_mut","condition_satisfied","from","from","into","into","new","notify_one","notify_specific","try_from","try_from","try_into","try_into","type_id","type_id","wait"],"q":["wait_condition","","","","","","","","","","","","","","","","","","","","",""],"d":["A type wrapper that guarantees a given condition has been …","A condition variable that allows multiple Tasks to wait …","The closure type that can be used within a WaitCondition: …","","","","","This function should be invoked after the wait condition …","","","","","Create a new WaitCondition in which Tasks can wait for a …","Wake up a random Task that is waiting on this condition.","Wake up a specific Task that is waiting on this condition.","","","","","","","Waits for the condition to be true in a blocking fashion …"],"i":[0,0,0,1,2,1,2,1,1,2,1,2,1,2,2,1,2,1,2,1,2,1],"f":[null,null,null,[[]],[[]],[[]],[[]],[[],[["option",4],["satisfiedwaitcondition",3]]],[[]],[[]],[[]],[[]],[[],["waitcondition",3]],[[],["bool",15]],[[["taskref",3]],["bool",15]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],[["result",4],["waiterror",4]]]],"p":[[3,"WaitCondition"],[3,"SatisfiedWaitCondition"]]},\ +"wait_condition":{"doc":"Simple condition variables that are convenience wrappers …","t":[3,3,25,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["SatisfiedWaitCondition","WaitCondition","WaitConditionFn","borrow","borrow","borrow_mut","borrow_mut","condition_satisfied","from","from","into","into","new","notify_one","notify_specific","try_from","try_from","try_into","try_into","type_id","type_id","wait"],"q":["wait_condition","","","","","","","","","","","","","","","","","","","","",""],"d":["A type wrapper that guarantees a given condition has been …","A condition variable that allows multiple Tasks to wait …","The closure type that can be used within a WaitCondition: …","","","","","This function should be invoked after the wait condition …","","","","","Create a new WaitCondition in which Tasks can wait for a …","Wake up a random Task that is waiting on this condition.","Wake up a specific Task that is waiting on this condition.","","","","","","","Waits for the condition to be true in a blocking fashion …"],"i":[0,0,0,1,2,1,2,1,1,2,1,2,1,2,2,1,2,1,2,1,2,1],"f":[null,null,null,[[]],[[]],[[]],[[]],[[],[["option",4],["satisfiedwaitcondition",3]]],[[]],[[]],[[]],[[]],[[],["waitcondition",3]],[[],["bool",15]],[[["taskref",3]],["bool",15]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],[["waiterror",4],["result",4]]]],"p":[[3,"WaitCondition"],[3,"SatisfiedWaitCondition"]]},\ "wait_queue":{"doc":"","t":[13,13,13,13,4,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["Interrupted","NoCurrentTask","SpuriousWakeup","Timeout","WaitError","WaitGuard","WaitQueue","block_again","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","drop","eq","fmt","from","from","from","into","into","into","new","new","notify_one","notify_specific","task","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","wait","wait_until","wait_until_mut","with_capacity"],"q":["wait_queue","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["","","","","Errors that may occur while waiting on a …","An object that holds a blocked Task that will be …","A queue in which multiple Tasks can wait for other Tasks …","Blocks the task guarded by this waitguard, which is …","","","","","","","","","","","","","","","","Blocks the given Task and returns a new WaitGuard object …","Create a new empty WaitQueue.","Wake up one random Task that is waiting on this queue.","Wake up a specific Task that is waiting on this queue.","Returns a reference to the Task being blocked in this …","","","","","","","","","","Puts the current Task to sleep where it blocks on this …","Similar to wait, but this function blocks until the given …","Similar to wait_until, but this function accepts a …","Create a new empty WaitQueue."],"i":[1,1,1,1,0,0,0,2,2,3,1,2,3,1,2,1,1,2,3,1,2,3,1,2,3,3,3,2,2,3,1,2,3,1,2,3,1,3,3,3,3],"f":[null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["waiterror",4]],["bool",15]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[]],[[["taskref",3]],["waitguard",3]],[[],["waitqueue",3]],[[],["bool",15]],[[["taskref",3]],["bool",15]],[[],["taskref",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],[["waiterror",4],["result",4]]],[[["fn",8]],[["result",4],["waiterror",4]]],[[["fnmut",8]],[["result",4],["waiterror",4]]],[[["usize",15]],["waitqueue",3]]],"p":[[4,"WaitError"],[3,"WaitGuard"],[3,"WaitQueue"]]},\ -"window":{"doc":"A Window object should be owned by an application. It can …","t":[3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["Window","area","borrow","borrow_mut","drop","framebuffer","framebuffer_mut","from","handle_event","into","is_active","new","render","try_from","try_into","type_id"],"q":["window","","","","","","","","","","","","","","",""],"d":["This struct is the application-facing representation of a …","Returns a Rectangle describing the position and …","","","","Returns an immutable reference to this window’s virtual …","Returns a mutable reference to this window’s virtual …","","Tries to receive an Event that has been sent to this …","","Returns true if this window is the currently active …","Creates a new window to be displayed on screen. ","Renders the area of this Window specified by the given …","","",""],"i":[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"f":[null,[[],["rectangle",3]],[[]],[[]],[[]],[[],[["windowinner",3],["framebuffer",3],["mutexguardref",6]]],[[],[["windowinner",3],["framebuffer",3],["mutexguardrefmut",6]]],[[]],[[],[["str",15],["result",4],["option",4]]],[[]],[[],["bool",15]],[[["usize",15],["color",3],["coord",3]],[["str",15],["window",3],["result",4]]],[[["option",4],["rectangle",3]],[["result",4],["str",15]]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]]],"p":[[3,"Window"]]},\ +"window":{"doc":"A Window object should be owned by an application. It can …","t":[3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["Window","area","borrow","borrow_mut","drop","framebuffer","framebuffer_mut","from","handle_event","into","is_active","new","render","try_from","try_into","type_id"],"q":["window","","","","","","","","","","","","","","",""],"d":["This struct is the application-facing representation of a …","Returns a Rectangle describing the position and …","","","","Returns an immutable reference to this window’s virtual …","Returns a mutable reference to this window’s virtual …","","Tries to receive an Event that has been sent to this …","","Returns true if this window is the currently active …","Creates a new window to be displayed on screen. ","Renders the area of this Window specified by the given …","","",""],"i":[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"f":[null,[[],["rectangle",3]],[[]],[[]],[[]],[[],[["windowinner",3],["framebuffer",3],["mutexguardref",6]]],[[],[["windowinner",3],["mutexguardrefmut",6],["framebuffer",3]]],[[]],[[],[["str",15],["result",4],["option",4]]],[[]],[[],["bool",15]],[[["usize",15],["color",3],["coord",3]],[["str",15],["window",3],["result",4]]],[[["option",4],["rectangle",3]],[["result",4],["str",15]]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]]],"p":[[3,"Window"]]},\ "window_inner":{"doc":"The WindowInner struct is the internal representation of …","t":[17,17,13,13,3,4,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,12,11,11,11,11,11,11],"n":["DEFAULT_BORDER_SIZE","DEFAULT_TITLE_BAR_HEIGHT","Moving","Stationary","WindowInner","WindowMovingStatus","border_size","borrow","borrow","borrow_mut","borrow_mut","contains","content_area","framebuffer","framebuffer_mut","from","from","get_border_size","get_pixel","get_position","get_size","get_title_bar_height","into","into","moving","new","resize","send_event","set_position","title_bar_height","try_from","try_from","try_into","try_into","type_id","type_id"],"q":["window_inner","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["","","The window is currently in motion. The enclosed Coord …","The window is not in motion.","The WindowInner struct is the internal system-facing …","Whether a window is moving (being dragged by the mouse).","The width of the border in pixels. By default, there is a …","","","","","Returns true if the given coordinate (relative to the …","Returns the position and dimensions of the Window’s …","Returns an immutable reference to this window’s virtual …","Returns a mutable reference to this window’s virtual …","","","Returns the size of the Window border in pixels. There …","Returns the pixel value at the given coordinate, if the …","Gets the top-left position of the window relative to the …","Gets the size of a window in pixels","Returns the size of the Window title bar in pixels. …","","","Whether a window is moving or stationary.","Creates a new WindowInner object backed by the given …","Resizes and moves this window to fit the given Rectangle …","Sends the given event to this window.","Sets the top-left position of the window relative to the …","The height of title bar in pixels. By default, there is …","","","","","",""],"i":[0,0,1,1,0,0,2,1,2,1,2,2,2,2,2,1,2,2,2,2,2,2,1,2,2,2,2,2,2,2,1,2,1,2,1,2],"f":[null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[["coord",3]],["bool",15]],[[],["rectangle",3]],[[],["framebuffer",3]],[[],["framebuffer",3]],[[]],[[]],[[],["usize",15]],[[["coord",3]],[["option",4],["alphapixel",3]]],[[],["coord",3]],[[]],[[],["usize",15]],[[]],[[]],null,[[["queue",3],["alphapixel",3],["framebuffer",3],["coord",3],["event",4]],["windowinner",3]],[[["rectangle",3]],[["result",4],["str",15]]],[[["event",4]],[["event",4],["result",4]]],[[["coord",3]]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]]],"p":[[4,"WindowMovingStatus"],[3,"WindowInner"]]},\ "window_manager":{"doc":"This crate acts as a manager of a list of windows. It …","t":[7,3,11,11,11,12,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["WINDOW_MANAGER","WindowManager","borrow","borrow_mut","delete_window","final_fb","from","get_screen_size","init","into","is_active","move_active_window","move_floating_border","refresh_active_window","refresh_bottom_windows","refresh_mouse","refresh_top","refresh_windows","set_active","try_from","try_into","type_id"],"q":["window_manager","","","","","","","","","","","","","","","","","","","","",""],"d":["The instance of the default window manager","Window manager structure which maintains a list of …","","","delete a window and refresh its region","The final framebuffer which is mapped to the screen (the …","","Returns the (width, height) in pixels of the screen …","Initialize the window manager. It returns …","","Returns true if the given window is the currently active …","take active window’s base position and current mouse, …","Move the floating border when a window is moving.","Refresh the part in bounding_box of the active window. …","Refresh the region in bounding_box. Only render the …","Refresh the mouse display","Refresh the region of bounding_box in the top framebuffer","Refresh the part in bounding_box of every window. …","Sets one window as active, push last active (if exists) …","","",""],"i":[0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1],"f":[null,null,[[]],[[]],[[["arc",3]],[["result",4],["str",15]]],null,[[]],[[]],[[],[["str",15],["result",4]]],[[]],[[["arc",3]],["bool",15]],[[],[["result",4],["str",15]]],[[],[["result",4],["str",15]]],[[["option",4],["rectangle",3]],[["result",4],["str",15]]],[[["bool",15]],[["result",4],["str",15]]],[[],[["result",4],["str",15]]],[[],[["result",4],["str",15]]],[[],[["result",4],["str",15]]],[[["arc",3],["bool",15]],[["str",15],["result",4],["bool",15]]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]]],"p":[[3,"WindowManager"]]}\ }'); diff --git a/doc/spawn/fn.create_idle_task.html b/doc/spawn/fn.create_idle_task.html index 35ba4f6233..3cb498135a 100644 --- a/doc/spawn/fn.create_idle_task.html +++ b/doc/spawn/fn.create_idle_task.html @@ -1,7 +1,7 @@ create_idle_task in spawn - Rust

    Function spawn::create_idle_task[][src]

    pub fn create_idle_task(core: Option<u8>) -> Result<TaskRef, &'static str>
    Expand description

    Spawns an idle task on the given core if specified, otherwise on the current core. + Change settings

    Function spawn::create_idle_task[][src]

    pub fn create_idle_task(core: Option<u8>) -> Result<TaskRef, &'static str>
    Expand description

    Spawns an idle task on the given core if specified, otherwise on the current core. Then, it adds adds the new idle task to that core’s runqueue.

    \ No newline at end of file diff --git a/doc/spawn/fn.new_application_task_builder.html b/doc/spawn/fn.new_application_task_builder.html index f488464979..d321dda136 100644 --- a/doc/spawn/fn.new_application_task_builder.html +++ b/doc/spawn/fn.new_application_task_builder.html @@ -1,7 +1,7 @@ new_application_task_builder in spawn - Rust

    Function spawn::new_application_task_builder[][src]

    pub fn new_application_task_builder(
        crate_object_file: Path,
        new_namespace: Option<Arc<CrateNamespace>>
    ) -> Result<TaskBuilder<fn(_: Vec<String>) -> isize, Vec<String>, isize>, &'static str>
    Expand description

    Creates a builder for a new application Task.

    + Change settings

    Function spawn::new_application_task_builder[][src]

    pub fn new_application_task_builder(
        crate_object_file: Path,
        new_namespace: Option<Arc<CrateNamespace>>
    ) -> Result<TaskBuilder<fn(_: Vec<String>) -> isize, Vec<String>, isize>, &'static str>
    Expand description

    Creates a builder for a new application Task.

    The new task will start at the application crate’s entry point main function.

    Note that the application crate will be loaded and linked during this function, but the actual new application task will not be spawned until TaskBuilder::spawn() is invoked.

    diff --git a/doc/spawn/index.html b/doc/spawn/index.html index 1623743f14..704791323e 100644 --- a/doc/spawn/index.html +++ b/doc/spawn/index.html @@ -1,7 +1,7 @@ spawn - Rust

    Crate spawn[][src]

    Expand description

    This crate offers routines for spawning new tasks + Change settings

    Crate spawn[][src]

    Expand description

    This crate offers routines for spawning new tasks and convenient builder patterns for customizing new tasks.

    The two functions of interest to create a TaskBuilder are:

    Auto Trait Implementations

    Blanket Implementations

    impl<T> Any for T where
        T: 'static + ?Sized
    [src]

    pub fn type_id(&self) -> TypeId[src]

    Gets the TypeId of self. Read more

    diff --git a/doc/spawn/struct.TaskBuilder.html b/doc/spawn/struct.TaskBuilder.html index 4f5eb46965..fa788eb86f 100644 --- a/doc/spawn/struct.TaskBuilder.html +++ b/doc/spawn/struct.TaskBuilder.html @@ -1,7 +1,7 @@ TaskBuilder in spawn - Rust

    Struct spawn::TaskBuilder[][src]

    pub struct TaskBuilder<F, A, R> { /* fields omitted */ }
    Expand description

    A struct that offers a builder pattern to create and customize new Tasks.

    + Change settings

    Struct spawn::TaskBuilder[][src]

    pub struct TaskBuilder<F, A, R> { /* fields omitted */ }
    Expand description

    A struct that offers a builder pattern to create and customize new Tasks.

    Note that the new Task will not actually be created until spawn() is invoked.

    To create a TaskBuilder, use these functions:

      @@ -9,25 +9,25 @@
    • new_application_task_builder(): loads a new application crate and creates a new task for that crate’s entry point (main) function.
    -

    Implementations

    impl<F, A, R> TaskBuilder<F, A, R> where
        A: Send + 'static,
        R: Send + 'static,
        F: FnOnce(A) -> R, 
    [src]

    pub fn name(self, name: String) -> TaskBuilder<F, A, R>[src]

    Set the String name for the new Task.

    -

    pub fn argument(self, argument: A) -> TaskBuilder<F, A, R>[src]

    Set the argument that will be passed to the new Task’s entry function.

    -

    pub fn pin_on_core(self, core_apic_id: u8) -> TaskBuilder<F, A, R>[src]

    Pin the new Task to a specific core.

    -

    pub fn block(self) -> TaskBuilder<F, A, R>[src]

    Set the new Task’s RunState to be Blocked instead of Runnable when it is first spawned. +

    Implementations

    impl<F, A, R> TaskBuilder<F, A, R> where
        A: Send + 'static,
        R: Send + 'static,
        F: FnOnce(A) -> R, 
    [src]

    pub fn name(self, name: String) -> TaskBuilder<F, A, R>[src]

    Set the String name for the new Task.

    +

    pub fn argument(self, argument: A) -> TaskBuilder<F, A, R>[src]

    Set the argument that will be passed to the new Task’s entry function.

    +

    pub fn pin_on_core(self, core_apic_id: u8) -> TaskBuilder<F, A, R>[src]

    Pin the new Task to a specific core.

    +

    pub fn block(self) -> TaskBuilder<F, A, R>[src]

    Set the new Task’s RunState to be Blocked instead of Runnable when it is first spawned. This allows another task to delay the new task’s execution arbitrarily, e.g., to set up other things for the newly-spawned (but not yet running) task.

    Note that the new Task will not be Runnable until it is explicitly set as such.

    -

    pub fn spawn(self) -> Result<TaskRef, &'static str>[src]

    Finishes this TaskBuilder and spawns the new task as described by its builder functions.

    +

    pub fn spawn(self) -> Result<TaskRef, &'static str>[src]

    Finishes this TaskBuilder and spawns the new task as described by its builder functions.

    This merely makes the new task Runnable, it does not switch to it immediately; that will happen on the next scheduler invocation.

    -

    impl<F, A, R> TaskBuilder<F, A, R> where
        A: Send + Clone + 'static,
        R: Send + 'static,
        F: FnOnce(A) -> R + Send + Clone + 'static, 
    [src]

    Additional implementation of TaskBuilder to be used for +

    impl<F, A, R> TaskBuilder<F, A, R> where
        A: Send + Clone + 'static,
        R: Send + 'static,
        F: FnOnce(A) -> R + Send + Clone + 'static, 
    [src]

    Additional implementation of TaskBuilder to be used for restartable functions. Further restricts the function (F) and argument (A) to implement Clone trait.

    -

    pub fn idle(self, core_id: u8) -> TaskBuilder<F, A, R>[src]

    Sets this new Task to be the idle task for the given core.

    +

    pub fn idle(self, core_id: u8) -> TaskBuilder<F, A, R>[src]

    Sets this new Task to be the idle task for the given core.

    Idle tasks will not be scheduled unless there are no other tasks for the scheduler to choose.

    Idle tasks must be restartable, so it is only a possible option when spawning a restartable task. Marking a task as idle is only needed to set up one for each core when that core is initialized, but or to restart an idle task that has exited or failed.

    There is no harm spawning multiple idle tasks on each core, but it’s a waste of space.

    -

    pub fn spawn_restartable(self) -> Result<TaskRef, &'static str>[src]

    Like spawn(), this finishes this TaskBuilder and spawns the new task. +

    pub fn spawn_restartable(self) -> Result<TaskRef, &'static str>[src]

    Like spawn(), this finishes this TaskBuilder and spawns the new task. It additionally stores the new Task’s function and argument within the Task, enabling it to be restarted upon exit.

    This merely makes the new task Runnable, it does not switch to it immediately; that will happen on the next scheduler invocation.

    diff --git a/doc/src/apic/lib.rs.html b/doc/src/apic/lib.rs.html index a17427fb30..6e44c80091 100644 --- a/doc/src/apic/lib.rs.html +++ b/doc/src/apic/lib.rs.html @@ -707,6 +707,9 @@ 704 705 706 +707 +708 +709
     #![no_std]
     
    @@ -727,10 +730,9 @@
     extern crate raw_cpuid;
     extern crate x86_64;
     extern crate pit_clock;
    -extern crate atomic;
    +extern crate crossbeam_utils;
     extern crate bit_field;
     
    -use core::sync::atomic::Ordering;
     use volatile::{Volatile, ReadOnly, WriteOnly};
     use zerocopy::FromBytes;
     use alloc::boxed::Box;
    @@ -742,7 +744,7 @@
     use memory::{PageTable, PhysicalAddress, EntryFlags, MappedPages, allocate_pages, allocate_frames_at};
     use kernel_config::time::CONFIG_TIMESLICE_PERIOD_MICROSECONDS;
     use atomic_linked_list::atomic_map::AtomicMap;
    -use atomic::Atomic;
    +use crossbeam_utils::atomic::AtomicCell;
     use pit_clock::pit_wait;
     use bit_field::BitField;
     
    @@ -750,15 +752,19 @@
     /// The interrupt chip that is currently configured on this machine. 
     /// The default is `InterruptChip::PIC`, but the typical case is `APIC` or `X2APIC`,
     /// which will be set once those chips have been initialized.
    -pub static INTERRUPT_CHIP: Atomic<InterruptChip> = Atomic::new(InterruptChip::PIC);
    +pub static INTERRUPT_CHIP: AtomicCell<InterruptChip> = AtomicCell::new(InterruptChip::PIC);
     
     #[derive(Clone, Copy, PartialEq, Debug)]
    +#[repr(u8)]
     pub enum InterruptChip {
         APIC,
         X2APIC,
         PIC,
     }
     
    +// Ensure that `AtomicCell<InterruptChip>` is actually a lock-free atomic.
    +const_assert!(AtomicCell::<InterruptChip>::is_lock_free());
    +
     
     lazy_static! {
         static ref LOCAL_APICS: AtomicMap<u8, RwLockIrqSafe<LocalApic>> = AtomicMap::new();
    @@ -1051,7 +1057,7 @@
             unsafe { wrmsr(IA32_APIC_BASE, rdmsr(IA32_APIC_BASE) | IA32_APIC_XAPIC_ENABLE); }
             info!("LAPIC ID {:#x}, version: {:#x}, is_bsp: {}", self.id(), self.version(), is_bsp);
             if is_bsp {
    -            INTERRUPT_CHIP.store(InterruptChip::APIC, Ordering::Release);
    +            INTERRUPT_CHIP.store(InterruptChip::APIC);
             }
     
             // init APIC to a clean state
    @@ -1084,7 +1090,7 @@
             unsafe { wrmsr(IA32_APIC_BASE, rdmsr(IA32_APIC_BASE) | IA32_APIC_XAPIC_ENABLE | IA32_APIC_X2APIC_ENABLE); }
             info!("LAPIC x2 ID {:#x}, version: {:#x}, is_bsp: {}", self.id(), self.version(), is_bsp);
             if is_bsp {
    -            INTERRUPT_CHIP.store(InterruptChip::X2APIC, Ordering::Release);
    +            INTERRUPT_CHIP.store(InterruptChip::X2APIC);
             }
     
     
    diff --git a/doc/src/async_channel/lib.rs.html b/doc/src/async_channel/lib.rs.html
    index c0ed29864d..6e104317c3 100644
    --- a/doc/src/async_channel/lib.rs.html
    +++ b/doc/src/async_channel/lib.rs.html
    @@ -369,6 +369,9 @@
     366
     367
     368
    +369
    +370
    +371
     
     //! An asynchronous channel for Inter-Task Communication (ITC) with an internal queue for buffering messages.
     //! 
    @@ -384,22 +387,22 @@
     #![no_std]
     
     extern crate alloc;
    +#[macro_use] extern crate static_assertions;
     #[cfg(trace_channel)] #[macro_use] extern crate log;
     #[cfg(trace_channel)] #[macro_use] extern crate debugit;
     extern crate wait_queue;
     extern crate mpmc;
    -extern crate atomic;
    +extern crate crossbeam_utils;
     
     #[cfg(downtime_eval)]
     extern crate hpet;
     #[cfg(downtime_eval)]
     extern crate task;
     
    -use core::sync::atomic::Ordering;
     use alloc::sync::Arc;
     use mpmc::Queue as MpmcQueue;
     use wait_queue::WaitQueue;
    -use atomic::Atomic;
    +use crossbeam_utils::atomic::AtomicCell;
     
     
     /// Create a new channel that allows senders and receivers to 
    @@ -421,7 +424,7 @@
             queue: MpmcQueue::with_capacity(minimum_capacity),
             waiting_senders: WaitQueue::new(),
             waiting_receivers: WaitQueue::new(),
    -        channel_status: Atomic::new(ChannelStatus::Connected)
    +        channel_status: AtomicCell::new(ChannelStatus::Connected)
         });
         (
             Sender   { channel: channel.clone() },
    @@ -465,9 +468,12 @@
         queue: MpmcQueue<T>,
         waiting_senders: WaitQueue,
         waiting_receivers: WaitQueue,
    -    channel_status: Atomic<ChannelStatus>
    +    channel_status: AtomicCell<ChannelStatus>
     }
     
    +// Ensure that `AtomicCell<ChannelStatus>` is actually a lock-free atomic.
    +const_assert!(AtomicCell::<ChannelStatus>::is_lock_free());
    +
     impl <T: Send> Channel<T> {
         /// Returns true if the channel is disconnected.
         #[inline(always)]
    @@ -478,7 +484,7 @@
         /// Returns the channel Status
         #[inline(always)]
         fn get_channel_status(&self) -> ChannelStatus {
    -        self.channel_status.load(Ordering::SeqCst)
    +        self.channel_status.load()
         }
     }
     
    @@ -574,7 +580,7 @@
             // first we'll check whether the channel is active
             match self.channel.get_channel_status() {
                 ChannelStatus::SenderDisconnected => {
    -                self.channel.channel_status.store(ChannelStatus::Connected, Ordering::SeqCst);
    +                self.channel.channel_status.store(ChannelStatus::Connected);
                 },
                 ChannelStatus::ReceiverDisconnected  => {
                     return Err((msg, ChannelError::ChannelDisconnected));
    @@ -701,7 +707,7 @@
                 // We check whther the channel is disconnected
                 match self.channel.get_channel_status() {
                     ChannelStatus::ReceiverDisconnected => {
    -                    self.channel.channel_status.store(ChannelStatus::Connected, Ordering::SeqCst);
    +                    self.channel.channel_status.store(ChannelStatus::Connected);
                         Err(ChannelError::ChannelEmpty)
                     },
                     ChannelStatus::SenderDisconnected  => {
    @@ -725,7 +731,7 @@
     impl<T: Send> Drop for Receiver<T> {
         fn drop(&mut self) {
             // trace!("Dropping the receiver");
    -        self.channel.channel_status.store(ChannelStatus::ReceiverDisconnected, Ordering::SeqCst);
    +        self.channel.channel_status.store(ChannelStatus::ReceiverDisconnected);
             self.channel.waiting_senders.notify_one();
         }
     }
    @@ -734,7 +740,7 @@
     impl<T: Send> Drop for Sender<T> {
         fn drop(&mut self) {
             // trace!("Dropping the sender");
    -        self.channel.channel_status.store(ChannelStatus::SenderDisconnected, Ordering::SeqCst);
    +        self.channel.channel_status.store(ChannelStatus::SenderDisconnected);
             self.channel.waiting_receivers.notify_one();
         }
     }
    diff --git a/doc/src/exceptions_full/lib.rs.html b/doc/src/exceptions_full/lib.rs.html index cceb5ec0cd..dd7db3ae9f 100644 --- a/doc/src/exceptions_full/lib.rs.html +++ b/doc/src/exceptions_full/lib.rs.html @@ -403,9 +403,6 @@ 400 401 402 -403 -404 -405
     //! Exception handlers that are task-aware, and will kill a task on an exception.
     
    @@ -513,10 +510,7 @@
         // and test out using debug info for recovery
         if false {
             let curr_task = task::get_my_current_task().expect("kill_and_halt: no current task");
    -        let app_crate = {
    -            let t = curr_task.lock();
    -            t.app_crate.as_ref().expect("kill_and_halt: no app_crate").clone_shallow()
    -        };
    +        let app_crate = curr_task.app_crate.as_ref().expect("kill_and_halt: no app_crate").clone_shallow();
             let debug_symbols_file = {
                 let krate = app_crate.lock_as_ref();
                 trace!("============== Crate {} =================", krate.crate_name);
    @@ -621,7 +615,7 @@
     fn is_stack_overflow(vaddr: VirtualAddress) -> bool {
         let page = Page::containing_address(vaddr);
         task::get_my_current_task()
    -        .map(|curr_task| curr_task.lock().kstack.guard_page().contains(&page))
    +        .map(|curr_task| curr_task.with_kstack(|kstack| kstack.guard_page().contains(&page)))
             .unwrap_or(false)
     }
     
    diff --git a/doc/src/fault_crate_swap/lib.rs.html b/doc/src/fault_crate_swap/lib.rs.html
    index 9d69865978..0788273879 100644
    --- a/doc/src/fault_crate_swap/lib.rs.html
    +++ b/doc/src/fault_crate_swap/lib.rs.html
    @@ -553,13 +553,6 @@
     550
     551
     552
    -553
    -554
    -555
    -556
    -557
    -558
    -559
     
     //! Defines support functions needed for swapping of corrupted crates to a different address for fault tolerance
     //! 
    @@ -621,7 +614,7 @@
         curr_dir: &DirRef, 
         override_namespace_crate_dir: Option<NamespaceDir>, 
         state_transfer_functions: Vec<String>,
    -    namespace: Arc<CrateNamespace>,
    +    namespace: &Arc<CrateNamespace>,
         verbose_log: bool
     ) -> Result<SwapRanges, String> {
     
    @@ -646,7 +639,7 @@
     
             let swap_req = SwapRequest::new(
                 Some(crate_name),
    -            Arc::clone(&namespace),
    +            Arc::clone(namespace),
                 into_new_crate_file,
                 new_namespace,
                 false, //reexport
    @@ -661,7 +654,7 @@
         };
     
     
    -    let mut matching_crates = CrateNamespace::get_crates_starting_with(&namespace, crate_name);
    +    let mut matching_crates = CrateNamespace::get_crates_starting_with(namespace, crate_name);
     
         // There can be only one matching crate for a given crate name
         if matching_crates.len() == 0 {
    @@ -690,7 +683,7 @@
     
         // Swap crates
         let swap_result = swap_crates(
    -        &namespace,
    +        namespace,
             swap_requests, 
             override_namespace_crate_dir,
             state_transfer_functions,
    @@ -702,7 +695,7 @@
         let ocn = crate_name;
     
         // Find the new crate loaded. It should have the exact same name as the old crate
    -    let mut matching_crates = CrateNamespace::get_crates_starting_with(&namespace, ocn);
    +    let mut matching_crates = CrateNamespace::get_crates_starting_with(namespace, ocn);
     
         // There can be only one matching crate for a given crate name
         if matching_crates.len() == 0 {
    @@ -874,11 +867,7 @@
         #[cfg(not(downtime_eval))]
         debug!("The taskref is {:?}",taskref);
     
    -    let curr_dir = {
    -        let locked_task = taskref.lock();
    -        let curr_env = locked_task.env.lock();
    -        Arc::clone(&curr_env.working_dir)
    -    };
    +    let curr_dir = Arc::clone(&taskref.get_env().lock().working_dir);
     
         let override_namespace_crate_dir = Option::<NamespaceDir>::None;
     
    @@ -892,16 +881,13 @@
         #[cfg(not(downtime_eval))]
         debug!("tuples: {:?}", tuples);
     
    -
    -    let namespace = task::get_my_current_task().ok_or("Couldn't get current task")?.get_namespace();    
    -
         // 1) Call generic crate swapping routine
         let swap_result = do_self_swap(
             crate_name, 
             &curr_dir, 
             override_namespace_crate_dir,
             state_transfer_functions,
    -        namespace,
    +        &taskref.namespace,
             verbose
         );
     
    @@ -919,14 +905,14 @@
         };
     
         for (_id, taskref) in task::TASKLIST.lock().iter() {
    -        let locked_task = taskref.lock();
    -        let bottom = locked_task.kstack.bottom().value();
    -        let top = locked_task.kstack.top_usable().value();
    -        // debug!("Bottom and top of stack of task {} are {:X} {:X}", locked_task.name, bottom, top);
    +        let (bottom, top) = taskref.with_kstack(|kstack| 
    +            (kstack.bottom().value(), kstack.top_usable().value())
    +        ); 
    +        // debug!("Bottom and top of stack of task {} are {:X} {:X}", taskref.name, bottom, top);
     
             match constant_offset_fix(&swap_ranges, bottom, top) {
                 Err (e) => {
    -                debug! {"Failed to perform constant offset fix for the stack for task {} due to {}",locked_task.name, e.to_string()};
    +                debug! {"Failed to perform constant offset fix for the stack for task {} due to {}", taskref.name, e.to_string()};
                 },
                 _ => {},
             }
    diff --git a/doc/src/fault_log/lib.rs.html b/doc/src/fault_log/lib.rs.html
    index 0535a63957..cb0cb929c4 100644
    --- a/doc/src/fault_log/lib.rs.html
    +++ b/doc/src/fault_log/lib.rs.html
    @@ -277,7 +277,6 @@
     274
     275
     276
    -277
     
     //! This crate logs all the faults occuring within Theseus. 
     //! Maintains a list of exceptions and panics that has occured since booting up. 
    @@ -442,13 +441,12 @@
     
         // Add name of current task
         fe.running_task = {
    -        Some(curr_task.lock().name.clone())
    +        Some(curr_task.name.clone())
         };
     
         // If task is from an application add application crate name. `None` if not 
         fe.running_app_crate = {
    -        let t = curr_task.lock();
    -        t.app_crate.as_ref().map(|x| x.lock_as_ref().crate_name.clone())
    +        curr_task.app_crate.as_ref().map(|x| x.lock_as_ref().crate_name.clone())
         };
     
         if let Some(instruction_pointer) = instruction_pointer {
    diff --git a/doc/src/interrupts/lib.rs.html b/doc/src/interrupts/lib.rs.html
    index a9278a0e51..c955d99572 100644
    --- a/doc/src/interrupts/lib.rs.html
    +++ b/doc/src/interrupts/lib.rs.html
    @@ -694,7 +694,7 @@
     /// Send an end of interrupt signal, which works for all types of interrupt chips (APIC, x2apic, PIC)
     /// irq arg is only used for PIC
     pub fn eoi(irq: Option<u8>) {
    -    match INTERRUPT_CHIP.load(Ordering::Acquire) {
    +    match INTERRUPT_CHIP.load() {
             InterruptChip::APIC |
             InterruptChip::X2APIC => {
                 apic::get_my_apic().expect("eoi(): couldn't get my apic to send EOI!").write().eoi();
    @@ -825,7 +825,7 @@
     
     extern "x86-interrupt" fn unimplemented_interrupt_handler(_stack_frame: &mut ExceptionStackFrame) {
         println_raw!("\nUnimplemented interrupt handler: {:#?}", _stack_frame);
    -	match apic::INTERRUPT_CHIP.load(Ordering::Acquire) {
    +	match apic::INTERRUPT_CHIP.load() {
             apic::InterruptChip::PIC => {
                 let irq_regs = PIC.get().map(|pic| pic.read_isr_irr());  
                 println_raw!("PIC IRQ Registers: {:?}", irq_regs);
    diff --git a/doc/src/pmu_x86/lib.rs.html b/doc/src/pmu_x86/lib.rs.html
    index 5fec95f21b..254d115ff0 100644
    --- a/doc/src/pmu_x86/lib.rs.html
    +++ b/doc/src/pmu_x86/lib.rs.html
    @@ -879,7 +879,6 @@
     876
     877
     878
    -879
     
     //! Support for the Performance Monitoring Unit 
     //! 
    @@ -955,7 +954,6 @@
     #[macro_use] extern crate log;
     extern crate mod_mgmt;
     extern crate bit_field;
    -extern crate atomic;
     
     use x86_64::registers::msr::*;
     use x86_64::VirtualAddress;
    @@ -1732,7 +1730,7 @@
         if let Some(taskref) = task::get_my_current_task() {
             let requested_task_id = samples.task_id;
             
    -        let task_id = taskref.lock().id;
    +        let task_id = taskref.id;
             if (requested_task_id == 0) | (requested_task_id == task_id) {
                 samples.ip_list.push(stack_frame.instruction_pointer);
                 samples.task_id_list.push(task_id);
    diff --git a/doc/src/runqueue_priority/lib.rs.html b/doc/src/runqueue_priority/lib.rs.html
    index 1c6137e139..5fd24232de 100644
    --- a/doc/src/runqueue_priority/lib.rs.html
    +++ b/doc/src/runqueue_priority/lib.rs.html
    @@ -340,17 +340,6 @@
     337
     338
     339
    -340
    -341
    -342
    -343
    -344
    -345
    -346
    -347
    -348
    -349
    -350
     
     //! This crate contains the `RunQueue` structure, for priority scheduler. 
     //! `RunQueue` structure is essentially a list of Tasks
    @@ -370,9 +359,9 @@
     extern crate single_simd_task_optimization;
     
     use alloc::collections::VecDeque;
    -use irq_safety::{RwLockIrqSafe, MutexIrqSafeGuardRef};
    +use irq_safety::RwLockIrqSafe;
     use atomic_linked_list::atomic_map::AtomicMap;
    -use task::{TaskRef, Task};
    +use task::TaskRef;
     use core::ops::{Deref, DerefMut};
     
     pub const MAX_PRIORITY: u8 = 40;
    @@ -429,11 +418,6 @@
             priority_taskref
         }
     
    -    /// Obtains the lock on the underlying `Task` in a read-only, blocking fashion.
    -    pub fn lock(&self) -> MutexIrqSafeGuardRef<Task> {
    -       self.taskref.lock()
    -    }
    -
         /// Increment the number of times the task is picked
         pub fn increment_context_switches(&mut self) -> (){
             self.context_switches = self.context_switches.saturating_add(1);
    @@ -567,12 +551,8 @@
     
         /// Adds a `TaskRef` to this RunQueue.
         fn add_task(&mut self, task: TaskRef) -> Result<(), &'static str> {        
    -        #[cfg(single_simd_task_optimization)]
    -        let is_simd = task.lock().simd;
    -        
    -        #[cfg(runqueue_spillful)]
    -        {
    -            task.lock_mut().on_runqueue = Some(self.core);
    +        #[cfg(runqueue_spillful)] {
    +            task.set_on_runqueue(Some(self.core));
             }
     
             #[cfg(not(loscd_eval))]
    @@ -584,7 +564,7 @@
             {   
                 warn!("USING SINGLE_SIMD_TASK_OPTIMIZATION VERSION OF RUNQUEUE::ADD_TASK");
                 // notify simd_personality crate about runqueue change, but only for SIMD tasks
    -            if is_simd {
    +            if task.simd {
                     single_simd_task_optimization::simd_tasks_added_to_core(self.iter(), self.core);
                 }
             }
    @@ -597,12 +577,10 @@
             debug!("Removing task from runqueue_priority {}, {:?}", self.core, task);
             self.retain(|x| &x.taskref != task);
     
    -        #[cfg(single_simd_task_optimization)]
    -        {   
    -            let is_simd = { task.lock().simd };
    +        #[cfg(single_simd_task_optimization)] {   
                 warn!("USING SINGLE_SIMD_TASK_OPTIMIZATION VERSION OF RUNQUEUE::REMOVE_TASK");
                 // notify simd_personality crate about runqueue change, but only for SIMD tasks
    -            if is_simd {
    +            if task.simd {
                     single_simd_task_optimization::simd_tasks_removed_from_core(self.iter(), self.core);
                 }
             }
    @@ -612,16 +590,16 @@
     
     
         /// Removes a `TaskRef` from this RunQueue.
    -    pub fn remove_task(&mut self, task: &TaskRef) -> Result<(), &'static str> {
    -        #[cfg(runqueue_spillful)]
    -        {
    +    pub fn remove_task(&mut self, _task: &TaskRef) -> Result<(), &'static str> {
    +        #[cfg(runqueue_spillful)] {
                 // For the runqueue state spill evaluation, we disable this method because we 
                 // only want to allow removing a task from a runqueue from within the TaskRef::internal_exit() method.
    -            // trace!("skipping remove_task() on core {}, task {:?}", self.core, task);
    +            // trace!("skipping remove_task() on core {}, task {:?}", self.core, _task);
                 return Ok(());
             }
    -
    -        self.remove_internal(task)
    +        #[cfg(not(runqueue_spillful))] {
    +            self.remove_internal(_task)
    +        }
         }
     
     
    @@ -641,7 +619,7 @@
         /// Note: This method is only used by the state spillful runqueue implementation.
         pub fn remove_task_from_within_task(task: &TaskRef, core: u8) -> Result<(), &'static str> {
             // warn!("remove_task_from_within_task(): core {}, task: {:?}", core, task);
    -        task.lock_mut().on_runqueue = None;
    +        task.set_on_runqueue(None);
             RUNQUEUES.get(&core)
                 .ok_or("Couldn't get runqueue for specified core")
                 .and_then(|rq| {
    diff --git a/doc/src/runqueue_round_robin/lib.rs.html b/doc/src/runqueue_round_robin/lib.rs.html
    index 5eeea72f83..9a818c1bbd 100644
    --- a/doc/src/runqueue_round_robin/lib.rs.html
    +++ b/doc/src/runqueue_round_robin/lib.rs.html
    @@ -285,12 +285,6 @@
     282
     283
     284
    -285
    -286
    -287
    -288
    -289
    -290
     
     //! This crate contains the `RunQueue` structure, for round robin scheduler. 
     //! `RunQueue` structure is essentially a list of Tasks
    @@ -493,12 +487,8 @@
     
         /// Adds a `TaskRef` to this RunQueue.
         fn add_task(&mut self, task: TaskRef) -> Result<(), &'static str> {        
    -        #[cfg(single_simd_task_optimization)]
    -        let is_simd = task.lock().simd;
    -        
    -        #[cfg(runqueue_spillful)]
    -        {
    -            task.lock_mut().on_runqueue = Some(self.core);
    +        #[cfg(runqueue_spillful)] {
    +            task.set_on_runqueue(Some(self.core));
             }
     
             #[cfg(not(any(rq_eval, downtime_eval)))]
    @@ -511,7 +501,7 @@
             {   
                 warn!("USING SINGLE_SIMD_TASK_OPTIMIZATION VERSION OF RUNQUEUE::ADD_TASK");
                 // notify simd_personality crate about runqueue change, but only for SIMD tasks
    -            if is_simd {
    +            if task.simd {
                     single_simd_task_optimization::simd_tasks_added_to_core(self.iter(), self.core);
                 }
             }
    @@ -526,12 +516,10 @@
             debug!("Removing task from runqueue_round_robin {}, {:?}", self.core, task);
             self.retain(|x| &x.taskref != task);
     
    -        #[cfg(single_simd_task_optimization)]
    -        {   
    -            let is_simd = { task.lock().simd };
    +        #[cfg(single_simd_task_optimization)] {   
                 warn!("USING SINGLE_SIMD_TASK_OPTIMIZATION VERSION OF RUNQUEUE::REMOVE_TASK");
                 // notify simd_personality crate about runqueue change, but only for SIMD tasks
    -            if is_simd {
    +            if task.simd {
                     single_simd_task_optimization::simd_tasks_removed_from_core(self.iter(), self.core);
                 }
             }
    @@ -541,16 +529,16 @@
     
     
         /// Removes a `TaskRef` from this RunQueue.
    -    pub fn remove_task(&mut self, task: &TaskRef) -> Result<(), &'static str> {
    -        #[cfg(runqueue_spillful)]
    -        {
    +    pub fn remove_task(&mut self, _task: &TaskRef) -> Result<(), &'static str> {
    +        #[cfg(runqueue_spillful)] {
                 // For the runqueue state spill evaluation, we disable this method because we 
                 // only want to allow removing a task from a runqueue from within the TaskRef::internal_exit() method.
    -            // trace!("skipping remove_task() on core {}, task {:?}", self.core, task);
    +            // trace!("skipping remove_task() on core {}, task {:?}", self.core, _task);
                 return Ok(());
             }
    -
    -        self.remove_internal(task)
    +        #[cfg(not(runqueue_spillful))] {
    +            self.remove_internal(_task)
    +        }
         }
     
     
    @@ -570,7 +558,7 @@
         pub fn remove_task_from_within_task(task: &TaskRef, core: u8) -> Result<(), &'static str> {
             #[cfg(not(rq_eval))]
             warn!("remove_task_from_within_task(): core {}, task: {:?}", core, task);
    -        task.lock_mut().on_runqueue = None;
    +        task.set_on_runqueue(None);
             RUNQUEUES.get(&core)
                 .ok_or("Couldn't get runqueue for specified core")
                 .and_then(|rq| {
    diff --git a/doc/src/scheduler/lib.rs.html b/doc/src/scheduler/lib.rs.html
    index 8bffccb4b2..57c8351821 100644
    --- a/doc/src/scheduler/lib.rs.html
    +++ b/doc/src/scheduler/lib.rs.html
    @@ -79,28 +79,11 @@
     76
     77
     78
    -79
    -80
    -81
    -82
    -83
    -84
    -85
    -86
    -87
    -88
    -89
    -90
    -91
    -92
    -93
    -94
    -95
     
     #![no_std]
     
     extern crate alloc;
    -// #[macro_use] extern crate log;
    +#[macro_use] extern crate log;
     extern crate irq_safety;
     extern crate apic;
     extern crate task;
    @@ -112,7 +95,7 @@
     use core::ops::Deref;
     use irq_safety::hold_interrupts;
     use apic::get_my_apic_id;
    -use task::{Task, get_my_current_task, TaskRef};
    +use task::{get_my_current_task, TaskRef};
     #[cfg(priority_scheduler)] use scheduler_priority::select_next_task;
     #[cfg(not(priority_scheduler))] use scheduler_round_robin::select_next_task;
     
    @@ -122,47 +105,31 @@
     /// Interrupts will be disabled while this function runs.
     pub fn schedule() -> bool {
         let _held_interrupts = hold_interrupts(); // auto-reenables interrupts on early return
    -
    -    let current_task: *mut Task;
    -    let next_task: *mut Task; 
         let apic_id = get_my_apic_id();
     
    -    {
    -        if let Some(selected_next_task) = select_next_task(apic_id) {
    -            next_task = selected_next_task.lock().deref() as *const Task as *mut Task;
    -        }
    -        else {
    -            // keep running the same current task
    -            return false;
    -        }
    -    }
    -
    -    if next_task as usize == 0 {
    -        // keep the same current task
    -        return false;
    -    }
    -    
    -    // same scoping reasons as above: to release the lock around current_task
    -    {
    -        current_task = get_my_current_task().expect("schedule(): get_my_current_task() failed")
    -            .lock().deref() as *const Task as *mut Task; 
    -    }
    -
    -    if current_task == next_task {
    -        // no need to switch if the chosen task is the same as the current task
    +    let curr_task = if let Some(curr) = get_my_current_task() {
    +        curr
    +    } else {
    +        error!("BUG: schedule(): could not get current task.");
    +        return false; // keep running the same current task
    +    };
    +
    +    let next_task = if let Some(next) = select_next_task(apic_id) {
    +        next
    +    } else {
    +        return false; // keep running the same current task
    +    };
    +
    +    // No need to task switch if the chosen task is the same as the current task.
    +    if curr_task == &next_task {
             return false;
         }
     
    -    // we want mutable task references without the locks, and we use unsafe code to obtain those references
    -    // because the scope-based lock guard won't drop properly after the actual task_switch occurs.
    -    let (curr, next) = unsafe { (&mut *current_task, &mut *next_task) };
    -
    -    // trace!("BEFORE TASK_SWITCH CALL (AP {}), current={}, next={}, interrupts are {}", apic_id, curr, next, irq_safety::interrupts_enabled());
    +    // trace!("BEFORE TASK_SWITCH CALL (AP {}), current: {:?}, next: {:?}, interrupts are {}", apic_id, curr_task, next_task, irq_safety::interrupts_enabled());
     
    -    curr.task_switch(next, apic_id); 
    +    curr_task.task_switch(next_task.deref(), apic_id); 
     
    -    // let new_current: TaskId = CURRENT_TASK.load(Ordering::SeqCst);
    -    // trace!("AFTER TASK_SWITCH CALL (current={}), interrupts are {}", new_current, ::interrupts::interrupts_enabled());
    +    // trace!("AFTER TASK_SWITCH CALL (AP {}) new current: {:?}, interrupts are {}", apic_id, get_my_current_task(), irq_safety::interrupts_enabled());
      
         true
     }
    @@ -186,7 +153,6 @@
             scheduler_priority::get_priority(_task)
         }
         #[cfg(not(priority_scheduler))] {
    -        //Err("no scheduler that uses task priority is currently loaded")
             None
         }
     }
    diff --git a/doc/src/scheduler_priority/lib.rs.html b/doc/src/scheduler_priority/lib.rs.html
    index 0ef1172726..003e88de30 100644
    --- a/doc/src/scheduler_priority/lib.rs.html
    +++ b/doc/src/scheduler_priority/lib.rs.html
    @@ -226,18 +226,6 @@
     223
     224
     225
    -226
    -227
    -228
    -229
    -230
    -231
    -232
    -233
    -234
    -235
    -236
    -237
     
     //! This crate picks the next task on token based scheduling policy.
     //! At the begining of each scheduling epoch a set of tokens is distributed among tasks
    @@ -323,9 +311,7 @@
         let mut chosen_task_index: Option<usize> = None;
         let mut idle_task = true;
     
    -    for (i, priority_taskref) in runqueue_locked.iter().enumerate() {
    -        let t = priority_taskref.lock();
    -
    +    for (i, t) in runqueue_locked.iter().enumerate() {
             // we skip the idle task, and only choose it if no other tasks are runnable
             if t.is_an_idle_task {
                 idle_task_index = Some(i);
    @@ -338,23 +324,23 @@
             }
     
             // if this task is pinned, it must not be pinned to a different core
    -        if let Some(pinned) = t.pinned_core {
    +        if let Some(pinned) = t.pinned_core() {
                 if pinned != apic_id {
                     // with per-core runqueues, this should never happen!
    -                error!("select_next_task() (AP {}) found a task pinned to a different core: {:?}", apic_id, *t);
    +                error!("select_next_task() (AP {}) found a task pinned to a different core: {:?}", apic_id, &*t);
                     return None;
                 }
             }
     
             // if the task has no remaining tokens we ignore the task
    -        if priority_taskref.tokens_remaining == 0{
    +        if t.tokens_remaining == 0 {
                 continue;
             }
                 
             // found a runnable task!
             chosen_task_index = Some(i);
             idle_task = false;
    -        // debug!("select_next_task(): AP {} chose Task {:?}", apic_id, *t);
    +        // debug!("select_next_task(): AP {} chose Task {:?}", apic_id, &*t);
             break; 
         }
     
    @@ -396,9 +382,7 @@
         let mut total_priorities :usize = 1;
     
         // This loop calculates the total priorities of the runqueue
    -    for (_i, priority_taskref) in runqueue_locked.iter().enumerate() {
    -        let t = priority_taskref.lock();
    -
    +    for (_i, t) in runqueue_locked.iter().enumerate() {
             // we skip the idle task, it contains zero tokens as it is picked last
             if t.is_an_idle_task {
                 continue;
    @@ -410,22 +394,22 @@
             }
     
             // if this task is pinned, it must not be pinned to a different core
    -        if let Some(pinned) = t.pinned_core {
    +        if let Some(pinned) = t.pinned_core() {
                 if pinned != apic_id {
                     // with per-core runqueues, this should never happen!
    -                error!("select_next_task() (AP {}) found a task pinned to a different core: {:?}", apic_id, *t);
    +                error!("select_next_task() (AP {}) found a task pinned to a different core: {:?}", apic_id, &*t);
                     return false;
                 }
             }
                 
             // found a runnable task!
             // We add its priority
    -        // debug!("assign_tokens(): AP {} Task {:?} priority {}", apic_id, *t, priority_taskref.priority);
    -        total_priorities = total_priorities.saturating_add(1).saturating_add(priority_taskref.priority as usize);
    +        // debug!("assign_tokens(): AP {} Task {:?} priority {}", apic_id, &*t, t.priority);
    +        total_priorities = total_priorities.saturating_add(1).saturating_add(t.priority as usize);
             
             
             
    -        // debug!("assign_tokens(): AP {} chose Task {:?}", apic_id, *t);
    +        // debug!("assign_tokens(): AP {} chose Task {:?}", apic_id, &*t);
             // break; 
         }
     
    @@ -437,40 +421,32 @@
     
         // We iterate through each task in runqueue
         // We dont use iterator as items are modified in the process
    -    for (_i, priority_taskref) in runqueue_locked.iter_mut().enumerate() { 
    +    for (_i, t) in runqueue_locked.iter_mut().enumerate() { 
             let task_tokens;
    -        {
    -
    -            //let priority_taskref = match runqueue_locked.get_priority_task_ref(_i){ Some(x) => x, None => { continue;},};
     
    -            let t = priority_taskref.lock();
    -
    -            // we give zero tokens to the idle tasks
    -            if t.is_an_idle_task {
    -                continue;
    -            }
    +        // we give zero tokens to the idle tasks
    +        if t.is_an_idle_task {
    +            continue;
    +        }
     
    -            // we give zero tokens to none runnable tasks
    -            if !t.is_runnable() {
    -                continue;
    -            }
    +        // we give zero tokens to none runnable tasks
    +        if !t.is_runnable() {
    +            continue;
    +        }
     
    -            // if this task is pinned, it must not be pinned to a different core
    -            if let Some(pinned) = t.pinned_core {
    -                if pinned != apic_id {
    -                    // with per-core runqueues, this should never happen!
    -                    error!("select_next_task() (AP {}) found a task pinned to a different core: {:?}", apic_id, *t);
    -                    return false;
    -                }
    +        // if this task is pinned, it must not be pinned to a different core
    +        if let Some(pinned) = t.pinned_core() {
    +            if pinned != apic_id {
    +                // with per-core runqueues, this should never happen!
    +                error!("select_next_task() (AP {}) found a task pinned to a different core: {:?}", apic_id, &*t);
    +                return false;
                 }
    -            // task_tokens = epoch * (taskref + 1) / total_priorities;
    -            task_tokens = epoch.saturating_mul((priority_taskref.priority as usize).saturating_add(1)).wrapping_div(total_priorities);
    -        }
    -        
    -        {
    -            priority_taskref.tokens_remaining = task_tokens;
             }
    -        // debug!("assign_tokens(): AP {} chose Task {:?}", apic_id, *t);
    +        // task_tokens = epoch * (taskref + 1) / total_priorities;
    +        task_tokens = epoch.saturating_mul((t.priority as usize).saturating_add(1)).wrapping_div(total_priorities);
    +
    +        t.tokens_remaining = task_tokens;
    +        // debug!("assign_tokens(): AP {} chose Task {:?}", apic_id, &*t);
             // break; 
         }
     
    diff --git a/doc/src/scheduler_round_robin/lib.rs.html b/doc/src/scheduler_round_robin/lib.rs.html
    index dfe2177b31..efcb3864f7 100644
    --- a/doc/src/scheduler_round_robin/lib.rs.html
    +++ b/doc/src/scheduler_round_robin/lib.rs.html
    @@ -55,8 +55,6 @@
     52
     53
     54
    -55
    -56
     
     //! This crate picks the next task in round robin fashion.
     //! Each time the task at the front of the queue is picked.
    @@ -89,9 +87,7 @@
         let mut idle_task_index: Option<usize> = None;
         let mut chosen_task_index: Option<usize> = None;
     
    -    for (i, taskref) in runqueue_locked.iter().enumerate() {
    -        let t = taskref.lock();
    -
    +    for (i, t) in runqueue_locked.iter().enumerate() {
             // we skip the idle task, and only choose it if no other tasks are runnable
             if t.is_an_idle_task {
                 idle_task_index = Some(i);
    @@ -105,7 +101,7 @@
                 
             // found a runnable task!
             chosen_task_index = Some(i);
    -        // debug!("select_next_task(): AP {} chose Task {:?}", apic_id, *t);
    +        // debug!("select_next_task(): AP {} chose Task {:?}", apic_id, &*t);
             break;
         }
     
    diff --git a/doc/src/single_simd_task_optimization/lib.rs.html b/doc/src/single_simd_task_optimization/lib.rs.html
    index a770a9ead0..34b16e69c3 100644
    --- a/doc/src/single_simd_task_optimization/lib.rs.html
    +++ b/doc/src/single_simd_task_optimization/lib.rs.html
    @@ -131,7 +131,7 @@
     	where I: Iterator<Item = &'t TaskRef>
     {
     	let num_simd_tasks = &tasks_on_core
    -		.filter(|taskref| taskref.lock().simd)
    +		.filter(|taskref| taskref.simd)
     		.count();
     	warn!("simd_tasks_added_to_core(): core {} now has {} SIMD tasks total.", 
     		_which_core, num_simd_tasks);
    @@ -168,7 +168,7 @@
     	where I: Iterator<Item = &'t TaskRef>
     {
     	let num_simd_tasks = &tasks_on_core
    -		.filter(|taskref| taskref.lock().simd)
    +		.filter(|taskref| taskref.simd)
     		.count();
     	warn!("simd_tasks_removed_from_core(): core {} now has {} SIMD tasks total.", 
     		_which_core, num_simd_tasks);
    diff --git a/doc/src/spawn/lib.rs.html b/doc/src/spawn/lib.rs.html
    index 86e9b111b1..874e0f58c6 100644
    --- a/doc/src/spawn/lib.rs.html
    +++ b/doc/src/spawn/lib.rs.html
    @@ -784,19 +784,6 @@
     781
     782
     783
    -784
    -785
    -786
    -787
    -788
    -789
    -790
    -791
    -792
    -793
    -794
    -795
    -796
     
     //! This crate offers routines for spawning new tasks
     //! and convenient builder patterns for customizing new tasks. 
    @@ -845,7 +832,7 @@
     use irq_safety::{MutexIrqSafe, hold_interrupts, enable_interrupts};
     use memory::{get_kernel_mmi_ref, MemoryManagementInfo};
     use stack::Stack;
    -use task::{Task, TaskRef, get_my_current_task, RunState, RestartInfo, TASKLIST};
    +use task::{Task, TaskRef, get_my_current_task, RestartInfo, TASKLIST};
     use mod_mgmt::{CrateNamespace, SectionType, SECTION_HASH_DELIMITER};
     use path::Path;
     use apic::get_my_apic_id;
    @@ -936,8 +923,7 @@
         new_namespace: Option<Arc<CrateNamespace>>,
     ) -> Result<TaskBuilder<MainFunc, MainFuncArg, MainFuncRet>, &'static str> {
         
    -    let namespace = new_namespace.clone()
    -        .or_else(|| task::get_my_current_task().map(|taskref| taskref.get_namespace()))
    +    let namespace = new_namespace.or_else(|| task::get_my_current_task().map(|t| t.get_namespace().clone()))
             .ok_or("spawn::new_application_task_builder(): couldn't get current task to use its CrateNamespace")?;
         
         let crate_object_file = match crate_object_file.get(namespace.dir())
    @@ -1088,21 +1074,19 @@
             // Currently we're using the very bottom of the kstack for kthread arguments. 
             // This is probably stupid (it'd be best to put them directly where they need to go towards the top of the stack),
             // but it simplifies type safety in the `task_wrapper` entry point and removes uncertainty from assumed calling conventions.
    -        {
    -            let bottom_of_stack: &mut usize = new_task.kstack.as_type_mut(0)?;
    -            let box_ptr = Box::into_raw(Box::new(TaskFuncArg::<F, A, R> {
    -                arg:  self.argument,
    -                func: self.func,
    -                _rettype: PhantomData,
    -            }));
    -            *bottom_of_stack = box_ptr as usize;
    -        }
    +        let bottom_of_stack: &mut usize = new_task.inner_mut().kstack.as_type_mut(0)?;
    +        let box_ptr = Box::into_raw(Box::new(TaskFuncArg::<F, A, R> {
    +            arg:  self.argument,
    +            func: self.func,
    +            _rettype: PhantomData,
    +        }));
    +        *bottom_of_stack = box_ptr as usize;
     
             // The new task is ready to be scheduled in, now that its stack trampoline has been set up.
             if self.blocked {
    -            new_task.runstate = RunState::Blocked;
    +            new_task.block();
             } else {
    -            new_task.runstate = RunState::Runnable;
    +            new_task.unblock();
             }
     
             // The new task is marked as idle
    @@ -1174,7 +1158,7 @@
             // and tell it to use the restartable version of the final task cleanup function.
             self.post_build_function = Some(Box::new(
                 move |new_task| {
    -                new_task.restart_info = Some(restart_info);
    +                new_task.inner_mut().restart_info = Some(restart_info);
                     new_task.failure_cleanup_function = task_restartable_cleanup_failure::<F, A, R>;
                     setup_context_trampoline(new_task, task_wrapper_restartable::<F, A, R>)?;
                     Ok(())
    @@ -1228,10 +1212,10 @@
             ($ContextType:ty) => (
                 // We write the new Context struct at the top of the stack, which is at the end of the stack's MappedPages. 
                 // We subtract "size of usize" (8) bytes to ensure the new Context struct doesn't spill over past the top of the stack.
    -            let mp_offset = new_task.kstack.size_in_bytes() - mem::size_of::<usize>() - mem::size_of::<$ContextType>();
    -            let new_context_destination: &mut $ContextType = new_task.kstack.as_type_mut(mp_offset)?;
    +            let mp_offset = new_task.inner_mut().kstack.size_in_bytes() - mem::size_of::<usize>() - mem::size_of::<$ContextType>();
    +            let new_context_destination: &mut $ContextType = new_task.inner_mut().kstack.as_type_mut(mp_offset)?;
                 *new_context_destination = <$ContextType>::new(entry_point_function as usize);
    -            new_task.saved_sp = new_context_destination as *const _ as usize; 
    +            new_task.inner_mut().saved_sp = new_context_destination as *const _ as usize;
             );
         }
     
    @@ -1274,22 +1258,21 @@
         // when invoking the task's entry function, in order to simplify cleanup when unwinding.
         // That is, only non-droppable values on the stack are allowed, nothing can be allocated/locked.
         let (func, arg) = {
    -        let curr_task_ref = get_my_current_task().expect("BUG: task_wrapper: couldn't get current task (before task func).");
    +        let curr_task = get_my_current_task().expect("BUG: task_wrapper: couldn't get current task (before task func).");
     
             // This task's function and argument were placed at the bottom of the stack when this task was spawned.
    -        let task_func_arg = {
    -            let t = curr_task_ref.lock();
    -            let tfa_box_raw_ptr: &usize = t.kstack.as_type(0)
    -                .expect("BUG: task_wrapper: couldn't access task's function/argument at bottom of stack");
    -            // SAFE: we placed this Box in this task's stack in the `spawn()` function when creating the TaskFuncArg struct.
    -            let tfa_boxed = unsafe { Box::from_raw((*tfa_box_raw_ptr) as *mut TaskFuncArg<F, A, R>) };
    -            *tfa_boxed // un-box it
    -        };
    +        let task_func_arg = curr_task.with_kstack(|kstack| {
    +            kstack.as_type(0).map(|tfa_box_raw_ptr: &usize| {
    +                // SAFE: we placed this Box in this task's stack in the `spawn()` function when creating the TaskFuncArg struct.
    +                let tfa_boxed = unsafe { Box::from_raw((*tfa_box_raw_ptr) as *mut TaskFuncArg<F, A, R>) };
    +                *tfa_boxed // un-box it
    +            })
    +        }).expect("BUG: task_wrapper: couldn't access task's function/argument at bottom of stack");
             let (func, arg) = (task_func_arg.func, task_func_arg.arg);
     
             #[cfg(not(any(rq_eval, downtime_eval)))]
             debug!("task_wrapper [1]: \"{}\" about to call task entry func {:?} {{{}}} with arg {:?}",
    -            curr_task_ref.lock().name.clone(), debugit!(func), core::any::type_name::<F>(), debugit!(arg)
    +            curr_task.name.clone(), debugit!(func), core::any::type_name::<F>(), debugit!(arg)
             );
     
             (func, arg)
    @@ -1358,9 +1341,9 @@
         let held_interrupts = hold_interrupts();
     
         #[cfg(not(rq_eval))]
    -    debug!("task_cleanup_success: {:?} successfully exited with return value {:?}", current_task.lock().name, debugit!(exit_value));
    +    debug!("task_cleanup_success: {:?} successfully exited with return value {:?}", current_task.name, debugit!(exit_value));
         if current_task.mark_as_exited(Box::new(exit_value)).is_err() {
    -        error!("task_cleanup_success: {:?} task could not set exit value, because task had already exited. Is this correct?", current_task.lock().name);
    +        error!("task_cleanup_success: {:?} task could not set exit value, because task had already exited. Is this correct?", current_task.name);
         }
     
         (held_interrupts, current_task)
    @@ -1395,10 +1378,10 @@
         let held_interrupts = hold_interrupts();
     
         #[cfg(not(downtime_eval))]
    -    debug!("task_cleanup_failure: {:?} panicked with {:?}", current_task.lock().name, kill_reason);
    +    debug!("task_cleanup_failure: {:?} panicked with {:?}", current_task.name, kill_reason);
     
         if current_task.mark_as_killed(kill_reason).is_err() {
    -        error!("task_cleanup_failure: {:?} task could not set kill reason, because task had already exited. Is this correct?", current_task.lock().name);
    +        error!("task_cleanup_failure: {:?} task could not set kill reason, because task had already exited. Is this correct?", current_task.name);
         }
     
         (held_interrupts, current_task)
    @@ -1484,17 +1467,15 @@
     
             // Re-spawn a new instance of the task if it was spawned as a restartable task. 
             // We must not hold the current task's lock when calling spawn().
    -        let restartable_info = {
    -            let t = current_task.lock();
    -            if let Some(restart_info) = t.restart_info.as_ref() {
    +        let restartable_info = current_task.with_restart_info(|restart_info_opt| {
    +            restart_info_opt.map(|restart_info| {
                     #[cfg(use_crate_replacement)] {
                         let func_ptr = &(restart_info.func) as *const _ as usize;
                         let arg_ptr = &(restart_info.argument) as *const _ as usize;
     
    -                    let arg_size = mem::size_of::<A>();
                         #[cfg(not(downtime_eval))] {
                             debug!("func_ptr {:#X}", func_ptr);
    -                        debug!("arg_ptr {:#X} , {}", arg_ptr, arg_size);
    +                        debug!("arg_ptr {:#X} , {}", arg_ptr, mem::size_of::<A>());
                         }
     
                         // func_ptr is of size 16. Argument is of the argument_size + 8.
    @@ -1505,30 +1486,23 @@
                             debug!("Function and argument addresses corrected");
                         }
                     }
    -                
     
                     let func: &F = restart_info.func.downcast_ref().expect("BUG: failed to downcast restartable task's function");
                     let arg : &A = restart_info.argument.downcast_ref().expect("BUG: failed to downcast restartable task's argument");
    -                Some((t.name.clone(), func.clone(), arg.clone(), t.pinned_core.clone()))
    -            } else {
    -                None
    -            }
    -        };
    -
    -        if let Some((name, func, arg, pinned_core)) = restartable_info {
    -            let new_task = new_task_builder(func, arg)
    -                    .name(name);
    -
    -            if let Some(core) = pinned_core {
    -                new_task.pin_on_core(core)
    -                .spawn_restartable()
    -                .expect("Could not restart the task");
    -            } else {
    -                new_task.spawn_restartable()
    -                .expect("Could not restart the task");
    +                (func.clone(), arg.clone())
    +            })
    +        });
    +
    +        if let Some((func, arg)) = restartable_info {
    +            let mut new_task = new_task_builder(func, arg)
    +                .name(current_task.name.clone());
    +            if let Some(core) = current_task.pinned_core() {
    +                new_task = new_task.pin_on_core(core);
                 }
    +            new_task.spawn_restartable()
    +                .expect("Failed to respawn the restartable task");
             } else {
    -            error!("BUG : Restartable task has no restart information available");
    +            error!("BUG: Restartable task has no restart information available");
             }
         }
     
    diff --git a/doc/src/stack_trace/lib.rs.html b/doc/src/stack_trace/lib.rs.html
    index 9a678db98f..6517a1d5c6 100644
    --- a/doc/src/stack_trace/lib.rs.html
    +++ b/doc/src/stack_trace/lib.rs.html
    @@ -152,9 +152,9 @@
         unwind::invoke_with_current_registers(|registers| {
             let namespace = task::get_my_current_task()
                 .map(|t| t.get_namespace())
    -            .or_else(|| mod_mgmt::get_initial_kernel_namespace().cloned())
    +            .or_else(|| mod_mgmt::get_initial_kernel_namespace())
                 .ok_or("couldn't get current task's or default namespace")?;
    -        let mut stack_frame_iter = StackFrameIter::new(namespace, registers);
    +        let mut stack_frame_iter = StackFrameIter::new(namespace.clone(), registers);
     
             // iterate over each frame in the call stack
             let mut i = 0;
    diff --git a/doc/src/task/lib.rs.html b/doc/src/task/lib.rs.html
    index 9ed89ed3ab..0c0bebd403 100644
    --- a/doc/src/task/lib.rs.html
    +++ b/doc/src/task/lib.rs.html
    @@ -1006,6 +1006,122 @@
     1003
     1004
     1005
    +1006
    +1007
    +1008
    +1009
    +1010
    +1011
    +1012
    +1013
    +1014
    +1015
    +1016
    +1017
    +1018
    +1019
    +1020
    +1021
    +1022
    +1023
    +1024
    +1025
    +1026
    +1027
    +1028
    +1029
    +1030
    +1031
    +1032
    +1033
    +1034
    +1035
    +1036
    +1037
    +1038
    +1039
    +1040
    +1041
    +1042
    +1043
    +1044
    +1045
    +1046
    +1047
    +1048
    +1049
    +1050
    +1051
    +1052
    +1053
    +1054
    +1055
    +1056
    +1057
    +1058
    +1059
    +1060
    +1061
    +1062
    +1063
    +1064
    +1065
    +1066
    +1067
    +1068
    +1069
    +1070
    +1071
    +1072
    +1073
    +1074
    +1075
    +1076
    +1077
    +1078
    +1079
    +1080
    +1081
    +1082
    +1083
    +1084
    +1085
    +1086
    +1087
    +1088
    +1089
    +1090
    +1091
    +1092
    +1093
    +1094
    +1095
    +1096
    +1097
    +1098
    +1099
    +1100
    +1101
    +1102
    +1103
    +1104
    +1105
    +1106
    +1107
    +1108
    +1109
    +1110
    +1111
    +1112
    +1113
    +1114
    +1115
    +1116
    +1117
    +1118
    +1119
    +1120
    +1121
     
     //! This crate contains the `Task` structure for supporting multithreading, 
     //! and the associated code for dealing with tasks.
    @@ -1040,6 +1156,7 @@
     #[macro_use] extern crate alloc;
     #[macro_use] extern crate lazy_static;
     #[macro_use] extern crate log;
    +#[macro_use] extern crate static_assertions;
     extern crate irq_safety;
     extern crate memory;
     extern crate stack;
    @@ -1051,10 +1168,11 @@
     extern crate x86_64;
     extern crate spin;
     extern crate kernel_config;
    +extern crate crossbeam_utils;
     
     
     use core::fmt;
    -use core::sync::atomic::{Ordering, AtomicUsize, AtomicBool};
    +use core::sync::atomic::{Ordering, AtomicUsize};
     use core::any::Any;
     use core::panic::PanicInfo;
     use core::ops::Deref;
    @@ -1064,11 +1182,11 @@
         string::String,
         sync::Arc,
     };
    -use irq_safety::{MutexIrqSafe, MutexIrqSafeGuardRef, MutexIrqSafeGuardRefMut, interrupts_enabled};
    +use crossbeam_utils::atomic::AtomicCell;
    +use irq_safety::{MutexIrqSafe, interrupts_enabled};
     use memory::MmiRef;
     use stack::Stack;
     use kernel_config::memory::KERNEL_STACK_SIZE_IN_PAGES;
    -// use tss::tss_set_rsp0;
     use mod_mgmt::{
         CrateNamespace,
         AppCrateRef,
    @@ -1131,7 +1249,6 @@
     }
     
     
    -
     /// The list of possible reasons that a given `Task` was killed prematurely.
     #[derive(Debug)]
     pub enum KillReason {
    @@ -1170,7 +1287,7 @@
     
     /// The set of possible runstates that a task can be in, e.g.,
     /// runnable, blocked, exited, etc. 
    -#[derive(Debug)]
    +#[derive(Copy, Clone, Debug, PartialEq, Eq)]
     pub enum RunState {
         /// in the midst of setting up the task
         Initing,
    @@ -1181,8 +1298,8 @@
         Blocked,
         /// The `Task` has exited and can no longer be run,
         /// either by running to completion or being killed. 
    -    Exited(ExitValue),
    -    /// This `Task` had already exited and now its ExitValue has been taken;
    +    Exited,
    +    /// This `Task` had already exited and its `ExitValue` has been taken;
         /// its exit value can only be taken once, and consumed by another `Task`.
         /// This `Task` is now useless, and can be deleted and removed from the Task list.
         Reaped,
    @@ -1207,8 +1324,7 @@
         None,
     }
     
    -/// A data structure to hold data related to restart the function. 
    -/// Presence of `RestartInfo` itself indicates the task will be restartable.
    +/// A struct holding data items needed to restart a `Task`.
     pub struct RestartInfo {
         /// Stores the argument of the task for restartable tasks
         pub argument: Box<dyn Any + Send>,
    @@ -1220,72 +1336,142 @@
     pub type FailureCleanupFunction = fn(TaskRef, KillReason) -> !;
     
     
    -/// A structure that contains contextual information for a thread of execution. 
    -pub struct Task {
    -    /// the unique id of this Task.
    -    pub id: usize,
    -    /// the simple name of this Task
    -    pub name: String,
    -    /// Which cpu core the Task is currently running on.
    -    /// `None` if not currently running.
    -    pub running_on_cpu: Option<u8>,
    -    
    -    #[cfg(runqueue_spillful)]
    -    /// The runqueue that this Task is on.
    -    pub on_runqueue: Option<u8>,
    -    
    -    /// the runnability status of this task, basically whether it's allowed to be scheduled in.
    -    pub runstate: RunState,
    +/// A wrapper around `Option<u8>` with a forced type alignment of 2 bytes,
    +/// which guarantees that it compiles down to lock-free native atomic instructions
    +/// when using it inside of an atomic type like [`AtomicCell`].
    +#[derive(Copy, Clone)]
    +#[repr(align(2))]
    +struct OptionU8(Option<u8>);
    +impl From<Option<u8>> for OptionU8 {
    +    fn from(opt: Option<u8>) -> Self {
    +        OptionU8(opt)
    +    }
    +}
    +impl Into<Option<u8>> for OptionU8 {
    +    fn into(self) -> Option<u8> {
    +        self.0
    +    }
    +}
    +impl fmt::Debug for OptionU8 {
    +    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    +        write!(f, "{:?}", self.0)
    +    }
    +}
    +
    +
    +/// The parts of a `Task` that may be modified after its creation.
    +///
    +/// This includes only the parts that cannot be modified atomically.
    +/// As such, they are protected by a lock in the containing `Task` struct.
    +///
    +/// In general, other crates cannot obtain a mutable reference to a Task (`&mut Task`),
    +/// which means they cannot access this struct's contents directly at all 
    +/// (except through the specific get/set methods exposed by `Task`).
    +///
    +/// Therefore, it is safe to expose all members of this struct as public, 
    +/// though not strictly necessary. 
    +/// Currently, we only publicize the fields here that need to be modified externally,
    +/// primarily by the `spawn` crate for creating and running new tasks. 
    +pub struct TaskInner {
    +    /// The status or value this Task exited with, if it has already exited.
    +    exit_value: Option<ExitValue>,
         /// the saved stack pointer value, used for task switching.
         pub saved_sp: usize,
    -    /// A reference to this task's`TaskLocalData` struct, which is used to quickly retrieve the "current" Task
    +    /// A reference to this task's `TaskLocalData` struct, which is used to quickly retrieve the "current" Task
         /// on a given CPU core. 
         /// The `TaskLocalData` refers back to this `Task` struct, thus it must be initialized later
         /// after the task has been fully created, which currently occurs in `TaskRef::new()`.
         task_local_data: Option<Box<TaskLocalData>>,
    -    /// Data that should be dropped after a task switch; for example, the previous Task's TaskLocalData.
    +    /// Data that should be dropped after a task switch; for example, the previous Task's [`TaskLocalData`].
         drop_after_task_switch: Option<Box<dyn Any + Send>>,
    -    /// Memory management details: page tables, mappings, allocators, etc.
    -    /// This is shared among all other tasks in the same address space.
    -    pub mmi: MmiRef, 
         /// The kernel stack, which all `Task`s must have in order to execute.
         pub kstack: Stack,
         /// Whether or not this task is pinned to a certain core.
         /// The idle tasks (like idle_task) are always pinned to their respective cores.
         pub pinned_core: Option<u8>,
    +    /// The function that will be called when this `Task` panics or fails due to a machine exception.
    +    /// It will be invoked before the task is cleaned up via stack unwinding.
    +    /// This is similar to Rust's built-in panic hook, but is also called upon a machine exception, not just a panic.
    +    kill_handler: Option<KillHandler>,
    +    /// The environment variables for this task, which are shared among child and parent tasks by default.
    +    env: Arc<Mutex<Environment>>,
    +    /// Stores the restartable information of the task. 
    +    /// `Some(RestartInfo)` indicates that the task is restartable.
    +    pub restart_info: Option<RestartInfo>,
    +}
    +
    +
    +/// A structure that contains contextual information for a thread of execution. 
    +///
    +/// Only fields that do not permit interior mutability are public and can be accessed directly.
    +pub struct Task {
    +    /// The mutable parts of a `Task` struct that can be modified after task creation,
    +    /// excluding private items that can be modified atomically.
    +    ///
    +    /// We use this inner structure to reduce contention when accessing task struct fields,
    +    /// because the other fields aside from this one are primarily read, not written.
    +    ///
    +    /// This is not public because it permits interior mutability.
    +    inner: MutexIrqSafe<TaskInner>,
    +
    +    /// The unique identifier of this Task.
    +    pub id: usize,
    +    /// The simple name of this Task.
    +    pub name: String,
    +    /// Which cpu core this Task is currently running on;
    +    /// `None` if not currently running.
    +    /// We use `OptionU8` instead of `Option<u8>` to ensure that 
    +    /// this field is accessed using lock-free native atomic instructions.
    +    ///
    +    /// This is not public because it permits interior mutability.
    +    running_on_cpu: AtomicCell<OptionU8>,
    +    /// The runnability of this task, i.e., whether it's eligible to be scheduled in.
    +    ///
    +    /// This is not public because it permits interior mutability.
    +    runstate: AtomicCell<RunState>,
    +    /// Memory management details: page tables, mappings, allocators, etc.
    +    /// This is shared among all other tasks in the same address space.
    +    pub mmi: MmiRef, 
         /// Whether this Task is an idle task, the task that runs by default when no other task is running.
         /// There exists one idle task per core, so this is `false` for most tasks.
         pub is_an_idle_task: bool,
    -    /// For application `Task`s, this is a reference to the [`LoadedCrate`](../mod_mgmt/metadata/struct.LoadedCrate.html)
    +    /// For application `Task`s, this is effectively a reference to the [`mod_mgmt::LoadedCrate`]
         /// that contains the entry function for this `Task`.
         pub app_crate: Option<Arc<AppCrateRef>>,
    -    /// This `Task` is linked into and runs within the context of 
    -    /// this [`CrateNamespace`](../mod_mgmt/struct.CrateNamespace.html).
    +    /// This `Task` is linked into and runs within the context of this [`CrateNamespace`].
         pub namespace: Arc<CrateNamespace>,
    -    /// The function that will be called when this `Task` panics or fails due to a machine exception.
    -    /// It will be invoked before the task is cleaned up via stack unwinding.
    -    /// This is similar to Rust's built-in panic hook, but is also called upon a machine exception, not just a panic.
    -    pub kill_handler: Option<KillHandler>,
    -    /// The environment of the task, Wrapped in an Arc & Mutex because it is shared among child and parent tasks
    -    pub env: Arc<Mutex<Environment>>,
         /// The function that should be run as a last-ditch attempt to recover from this task's failure,
         /// e.g., this can be called when unwinding itself fails. 
         /// Typically, it will point to this Task's specific instance of `spawn::task_cleanup_failure()`,
         /// which has generic type parameters that describe its function signature, argument type, and return type.
         pub failure_cleanup_function: FailureCleanupFunction,
    -    /// Stores the restartable information of the task. 
    -    /// `Some(RestartInfo)` indicates that the task is restartable.
    -    pub restart_info: Option<RestartInfo>,
         
    +    #[cfg(runqueue_spillful)]
    +    /// The runqueue that this Task is on.
    +    on_runqueue: AtomicCell<OptionU8>,
    +
         #[cfg(simd_personality)]
         /// Whether this Task is SIMD enabled and what level of SIMD extensions it uses.
         pub simd: SimdExt,
     }
     
    +// Ensure that atomic fields in the `Tast` struct are actually lock-free atomics.
    +const_assert!(AtomicCell::<OptionU8>::is_lock_free());
    +const_assert!(AtomicCell::<RunState>::is_lock_free());
    +
     impl fmt::Debug for Task {
         fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
    -        write!(f, "{{Task \"{}\" ({}), running_on_cpu: {:?}, runstate: {:?}, pinned: {:?}}}", 
    -               self.name, self.id, self.running_on_cpu, self.runstate, self.pinned_core)
    +        let mut ds = f.debug_struct("Task");
    +        ds.field("name", &self.name)
    +            .field("id", &self.id)
    +            .field("running_on", &self.running_on_cpu())
    +            .field("runstate", &self.runstate());
    +        if let Some(inner) = self.inner.try_lock() {
    +            ds.field("pinned", &inner.pinned_core);
    +        } else {
    +            ds.field("pinned", &"<Locked>");
    +        }
    +        ds.finish()
         }
     }
     
    @@ -1308,10 +1494,12 @@
             failure_cleanup_function: FailureCleanupFunction
         ) -> Result<Task, &'static str> {
             let curr_task = get_my_current_task().ok_or("Task::new(): couldn't get current task (not yet initialized)")?;
    -        let (mmi, namespace, env, app_crate) = {
    -            let t = curr_task.lock();
    -            (Arc::clone(&t.mmi), Arc::clone(&t.namespace), Arc::clone(&t.env), t.app_crate.clone())
    -        };
    +        let (mmi, namespace, env, app_crate) = (
    +            Arc::clone(&curr_task.mmi),
    +            Arc::clone(&curr_task.namespace),
    +            Arc::clone(&curr_task.inner.lock().env),
    +            curr_task.app_crate.clone(),
    +        );
     
             let kstack = kstack
                 .or_else(|| stack::alloc_stack(KERNEL_STACK_SIZE_IN_PAGES, &mut mmi.lock().page_table))
    @@ -1338,57 +1526,132 @@
             let task_id = TASKID_COUNTER.fetch_add(1, Ordering::Acquire);
     
             Task {
    +            inner: MutexIrqSafe::new(TaskInner {
    +                exit_value: None,
    +                saved_sp: 0,
    +                task_local_data: None,
    +                drop_after_task_switch: None,
    +                kstack,
    +                pinned_core: None,
    +                kill_handler: None,
    +                env,
    +                restart_info: None,
    +            }),
                 id: task_id,
    -            runstate: RunState::Initing,
    -            running_on_cpu: None,
    -            
    -            #[cfg(runqueue_spillful)]
    -            on_runqueue: None,
    -            
    -            saved_sp: 0,
    -            task_local_data: None,
    -            drop_after_task_switch: None,
                 name: format!("task_{}", task_id),
    -            kstack,
    +            runstate: AtomicCell::new(RunState::Initing),
    +            running_on_cpu: AtomicCell::new(None.into()),
                 mmi,
    -            pinned_core: None,
                 is_an_idle_task: false,
                 app_crate,
                 namespace,
    -            kill_handler: None,
    -            env,
                 failure_cleanup_function,
    -            restart_info: None,
    +
    +            #[cfg(runqueue_spillful)]
    +            on_runqueue: AtomicCell::new(None.into()),
                 
                 #[cfg(simd_personality)]
                 simd: SimdExt::None,
             }
         }
     
    -    fn set_env(&mut self, new_env:Arc<Mutex<Environment>>) {
    -        self.env = new_env;
    +    /// Sets the `Environment` of this Task.
    +    ///
    +    /// # Locking / Deadlock
    +    /// Obtains the lock on this `Task`'s inner state in order to mutate it.
    +    pub fn set_env(&self, new_env:Arc<Mutex<Environment>>) {
    +        self.inner.lock().env = new_env;
    +    }
    +
    +    /// Gets a reference to this task's `Environment`.
    +    ///
    +    /// # Locking / Deadlock
    +    /// Obtains the lock on this `Task`'s inner state in order to access it.
    +    pub fn get_env(&self) -> Arc<Mutex<Environment>> {
    +        Arc::clone(&self.inner.lock().env)
         }
     
    -    /// returns true if this Task is currently running on any cpu.
    +    /// Returns `true` if this `Task` is currently running.
         pub fn is_running(&self) -> bool {
    -        self.running_on_cpu.is_some()
    +        self.running_on_cpu().is_some()
         }
     
    -    /// Returns true if this `Task` is Runnable, i.e., able to be scheduled in.
    +    /// Returns the APIC ID of the CPU this `Task` is currently running on.
    +    pub fn running_on_cpu(&self) -> Option<u8> {
    +        self.running_on_cpu.load().into()
    +    }
    +
    +    /// Returns the APIC ID of the CPU this `Task` is pinned on,
    +    /// or `None` if it is not pinned.
    +    pub fn pinned_core(&self) -> Option<u8> {
    +        self.inner.lock().pinned_core.clone()
    +    }
    +
    +    /// Returns the current [`RunState`] of this `Task`.
    +    pub fn runstate(&self) -> RunState {
    +        self.runstate.load()
    +    }
    +
    +    /// Returns `true` if this `Task` is Runnable, i.e., able to be scheduled in.
    +    ///
         /// # Note
         /// This does *NOT* mean that this `Task` is actually currently running, just that it is *able* to be run.
         pub fn is_runnable(&self) -> bool {
    -        match self.runstate {
    -            RunState::Runnable => true,
    -            _ => false,
    -        }
    +        self.runstate() == RunState::Runnable
    +    }
    +
    +    /// Returns the namespace in which this `Task` is loaded/linked into and runs within.
    +    pub fn get_namespace(&self) -> &Arc<CrateNamespace> {
    +        &self.namespace
    +    }
    +
    +    /// Exposes read-only access to this `Task`'s [`Stack`] by invoking
    +    /// the given `func` with a reference to its kernel stack.
    +    ///
    +    /// # Locking / Deadlock
    +    /// Obtains the lock on this `Task`'s inner state for the duration of `func`
    +    /// in order to access its stack.
    +    /// The given `func` **must not** attempt to obtain that same inner lock.
    +    pub fn with_kstack<R, F>(&self, func: F) -> R 
    +        where F: FnOnce(&Stack) -> R
    +    {
    +        func(&self.inner.lock().kstack)
         }
     
    -    /// Returns true if this `Task` has been exited, i.e.,
    +    /// Returns a mutable reference to this `Task`'s inner state. 
    +    ///
    +    /// # Note about mutability
    +    /// This function requires the caller to have a mutable reference to this `Task`
    +    /// in order to protect the inner state from foreign crates accessing it
    +    /// through a `TaskRef` auto-dereferencing into a `Task`.
    +    /// This is because you can only obtain a mutable reference to a `Task`
    +    /// before you enclose it in a `TaskRef` wrapper type.
    +    ///
    +    /// # Locking / Deadlock
    +    /// Because this function requires a mutable reference to this `Task`,
    +    /// no locks must be obtained. 
    +    pub fn inner_mut(&mut self) -> &mut TaskInner {
    +        self.inner.get_mut()
    +    }
    +
    +    /// Exposes read-only access to this `Task`'s [`RestartInfo`] by invoking
    +    /// the given `func` with a reference to its `RestartInfo`.
    +    ///
    +    /// # Locking / Deadlock
    +    /// Obtains the lock on this `Task`'s inner state for the duration of `func`
    +    /// in order to access its stack.
    +    /// The given `func` **must not** attempt to obtain that same inner lock.
    +    pub fn with_restart_info<R, F>(&self, func: F) -> R 
    +        where F: FnOnce(Option<&RestartInfo>) -> R
    +    {
    +        func(self.inner.lock().restart_info.as_ref())
    +    }
    +
    +    /// Returns `true` if this `Task` has been exited, i.e.,
         /// if its RunState is either `Exited` or `Reaped`.
         pub fn has_exited(&self) -> bool {
    -        match self.runstate {
    -            RunState::Exited(_) | RunState::Reaped => true,
    +        match self.runstate() {
    +            RunState::Exited | RunState::Reaped => true,
                 _ => false,
             }
         }
    @@ -1400,67 +1663,95 @@
             self.app_crate.is_some()
         }
     
    -    /// Returns true if this is a userspace`Task`.
    +    /// Returns `true` if this is a userspace `Task`.
         /// Currently userspace support is disabled, so this always returns `false`.
         pub fn is_userspace(&self) -> bool {
             // self.ustack.is_some()
             false
         }
     
    +    /// Returns `true` if this `Task` was spawned as a restartable task.
    +    ///
    +    /// # Locking / Deadlock
    +    /// Obtains the lock on this `Task`'s inner state in order to access it.
    +    pub fn is_restartable(&self) -> bool {
    +        self.inner.lock().restart_info.is_some()
    +    }
    +
         /// Registers a function or closure that will be called if this `Task` panics
    -    /// or otherwise fails (e.g., due to a machine exception occurring).
    +    /// or otherwise fails (e.g., due to a machine exception).
    +    ///
         /// The given `callback` will be invoked before the task is cleaned up via stack unwinding.
    -    pub fn set_kill_handler(&mut self, callback: KillHandler) {
    -        self.kill_handler = Some(callback);
    +    ///
    +    /// # Locking / Deadlock
    +    /// Obtains the lock on this `Task`'s inner state in order to mutate it.
    +    pub fn set_kill_handler(&self, callback: KillHandler) {
    +        self.inner.lock().kill_handler = Some(callback);
         }
     
         /// Takes ownership of this `Task`'s `KillHandler` closure/function if one exists,
    -    /// and returns it so it can be invoked without holding this `Task`'s `Mutex`.
    +    /// and returns it so it can be invoked without holding this `Task`'s inner lock.
         /// After invoking this, the `Task`'s `kill_handler` will be `None`.
    -    pub fn take_kill_handler(&mut self) -> Option<KillHandler> {
    -        self.kill_handler.take()
    +    ///
    +    /// # Locking / Deadlock
    +    /// Obtains the lock on this `Task`'s inner state in order to mutate it.
    +    pub fn take_kill_handler(&self) -> Option<KillHandler> {
    +        self.inner.lock().kill_handler.take()
         }
     
    -
    -    /// Returns a reference to the exit value of this `Task`, 
    -    /// if its runstate is `RunState::Exited`. 
    -    /// Unlike [`take_exit_value`](#method.take_exit_value), this does not consume the exit value.
    -    pub fn get_exit_value(&self) -> Option<&ExitValue> {
    -        if let RunState::Exited(ref val) = self.runstate {
    -            Some(val)
    +    /// Takes ownership of this `Task`'s exit value and returns it,
    +    /// if and only if this `Task` was in the `Exited` runstate.
    +    ///
    +    /// If this `Task` was in the `Exited` runstate, after invoking this,
    +    /// this `Task`'s runstate will be set to `Reaped`
    +    /// and this `Task` will be removed from the system task list.
    +    ///
    +    /// If this `Task` was **not** in the `Exited` runstate, 
    +    /// nothing is done and `None` is returned.
    +    ///
    +    /// # Locking / Deadlock
    +    /// Obtains the lock on this `Task`'s inner state in order to mutate it.    
    +    pub fn take_exit_value(&self) -> Option<ExitValue> {
    +        if self.runstate() == RunState::Exited {
    +            self.runstate.store(RunState::Reaped);
    +            TASKLIST.lock().remove(&self.id);
    +            self.inner.lock().exit_value.take()
             } else {
                 None
             }
         }
     
    -    /// Takes ownership of this `Task`'s exit value and returns it,
    -    /// if and only if this `Task` was in the `Exited` runstate.
    -    /// # Note
    -    /// After invoking this, the `Task`'s runstate will be `Reaped`,
    -    /// and this `Task` will be removed from the system task list.
    -    pub fn take_exit_value(&mut self) -> Option<ExitValue> {
    -        match self.runstate {
    -            RunState::Exited(_) => { }
    -            _ => return None, 
    -        }
    +    #[cfg(runqueue_spillful)]
    +    /// Returns the runqueue on which this `Task` is currently enqueued.
    +    pub fn on_runqueue(&self) -> Option<u8> {
    +        self.on_runqueue.load().into()
    +    }
     
    -        let exited = core::mem::replace(&mut self.runstate, RunState::Reaped);
    -        TASKLIST.lock().remove(&self.id);
    -        if let RunState::Exited(exit_value) = exited {
    -            Some(exit_value)
    -        } 
    -        else {
    -            error!("BUG: Task::take_exit_value(): task {} runstate was Exited but couldn't get exit value.", self);
    -            None
    -        }
    +    #[cfg(runqueue_spillful)]
    +    /// Marks this `Task` as enqueued on the given runqueue.
    +    pub fn set_on_runqueue(&self, runqueue: Option<u8>) {
    +        self.on_runqueue.store(runqueue.into());
    +    }
    +
    +    /// Blocks this `Task` by setting its runstate to [`RunState::Blocked`].
    +    pub fn block(&self) {
    +        self.runstate.store(RunState::Blocked);
    +    }
    +
    +    /// Unblocks this `Task` by setting its runstate to [`RunState::Runnable`].
    +    pub fn unblock(&self) {
    +        self.runstate.store(RunState::Runnable);
         }
     
         /// Sets this `Task` as this core's current task.
         /// 
         /// Currently this is achieved by writing a pointer to the `TaskLocalData` 
         /// into the FS segment register base MSR.
    +    ///
    +    /// # Locking / Deadlock
    +    /// Obtains the lock on this `Task`'s inner state in order to access it. 
         fn set_as_current_task(&self) {
    -        if let Some(ref tld) = self.task_local_data {
    +        if let Some(ref tld) = self.inner.lock().task_local_data {
                 unsafe {
                     wrmsr(IA32_FS_BASE, tld.deref() as *const _ as u64);
                 }
    @@ -1469,11 +1760,13 @@
             }
         }
     
    -    /// Switches from the current (`self`)  to the given `next` Task.
    +    /// Switches from the current task (`self`) to the given `next` task.
         /// 
    -    /// No locks need to be held to call this, but interrupts (later, preemption) should be disabled.
    -    pub fn task_switch(&mut self, next: &mut Task, apic_id: u8) {
    -        // debug!("task_switch [0]: (AP {}) prev {:?}, next {:?}", apic_id, self, next);         
    +    /// # Locking / Deadlock
    +    /// Obtains the locks on both this `Task`'s inner state and the given `next` `Task`'s inner state
    +    /// in order to mutate them. 
    +    pub fn task_switch(&self, next: &Task, apic_id: u8) {
    +        // debug!("task_switch [0]: (AP {}) prev {:?}, next {:?}, interrupts?: {}", apic_id, self, next, irq_safety::interrupts_enabled());
     
             // These conditions are checked elsewhere, but can be re-enabled if we want to be extra strict.
             // if !next.is_runnable() {
    @@ -1484,9 +1777,9 @@
             //     error!("BUG: Skipping task_switch due to scheduler bug: chosen 'next' Task was already running on AP {}!\nCurrent: {:?} Next: {:?}", apic_id, self, next);
             //     return;
             // }
    -        // if let Some(pc) = next.pinned_core {
    +        // if let Some(pc) = next.pinned_core() {
             //     if pc != apic_id {
    -        //         error!("BUG: Skipping task_switch due to scheduler bug: chosen 'next' Task was pinned to AP {:?} but scheduled on AP {}!\nCurrent: {:?}, Next: {:?}", next.pinned_core, apic_id, self, next);
    +        //         error!("BUG: Skipping task_switch due to scheduler bug: chosen 'next' Task was pinned to AP {:?} but scheduled on AP {}!\n\tCurrent: {:?}, Next: {:?}", pc, apic_id, self, next);
             //         return;
             //     }
             // }
    @@ -1495,21 +1788,23 @@
             // // Change the privilege stack (RSP0) in the TSS.
             // // We can safely skip setting the TSS RSP0 when switching to a kernel task, 
             // // i.e., when `next` is not a userspace task.
    -        // //
             // if next.is_userspace() {
    -        //     let new_tss_rsp0 = next.kstack.bottom() + (next.kstack.size() / 2); // the middle half of the stack
    -        //     if tss_set_rsp0(new_tss_rsp0).is_ok() { 
    +        //     let (stack_bottom, stack_size) = {
    +        //         let kstack = &next.inner.lock().kstack;
    +        //         (kstack.bottom(), kstack.size_in_bytes())
    +        //     };
    +        //     let new_tss_rsp0 = stack_bottom + (stack_size / 2); // the middle half of the stack
    +        //     if tss::tss_set_rsp0(new_tss_rsp0).is_ok() { 
             //         // debug!("task_switch [2]: new_tss_rsp = {:#X}", new_tss_rsp0);
    -        //     }
    -        //     else {
    +        //     } else {
             //         error!("task_switch(): failed to set AP {} TSS RSP0, aborting task switch!", apic_id);
             //         return;
             //     }
             // }
     
             // update runstates
    -        self.running_on_cpu = None; // no longer running
    -        next.running_on_cpu = Some(apic_id); // now running on this core
    +        self.running_on_cpu.store(None.into()); // no longer running
    +        next.running_on_cpu.store(Some(apic_id).into()); // now running on this core
     
             // Switch page tables. 
             // Since there is only a single address space (as userspace support is currently disabled),
    @@ -1518,12 +1813,10 @@
                 let prev_mmi = &self.mmi;
                 let next_mmi = &next.mmi;
                 
    -
                 if Arc::ptr_eq(prev_mmi, next_mmi) {
                     // do nothing because we're not changing address spaces
                     // debug!("task_switch [3]: prev_mmi is the same as next_mmi!");
    -            }
    -            else {
    +            } else {
                     // time to change to a different address space and switch the page tables!
                     let mut prev_mmi_locked = prev_mmi.lock();
                     let next_mmi_locked = next_mmi.lock();
    @@ -1541,15 +1834,23 @@
             // We store the removed TaskLocalData in the next Task struct so that we can access it after the context switch.
             if self.has_exited() {
                 // trace!("task_switch(): preparing to drop TaskLocalData for running task {}", self);
    -            next.drop_after_task_switch = self.task_local_data.take().map(|tld_box| tld_box as Box<dyn Any + Send>);
    +            next.inner.lock().drop_after_task_switch = self.inner.lock().task_local_data.take().map(|tld_box| tld_box as Box<dyn Any + Send>);
             }
     
    -        // debug!("task_switch [4]: prev sp: {:#X}, next sp: {:#X}", self.saved_sp, next.saved_sp);
    +        let prev_task_saved_sp: *mut usize = {
    +            let mut inner = self.inner.lock(); // ensure the lock is released
    +            (&mut inner.saved_sp) as *mut usize
    +        };
    +        let next_task_saved_sp: usize = {
    +            let inner = next.inner.lock(); // ensure the lock is released
    +            inner.saved_sp
    +        };
    +        // debug!("task_switch [4]: prev sp: {:#X}, next sp: {:#X}", prev_task_saved_sp as usize, next_task_saved_sp);
     
             /// A private macro that actually calls the given context switch routine.
             macro_rules! call_context_switch {
                 ($func:expr) => ( unsafe {
    -                $func(&mut self.saved_sp as *mut usize, next.saved_sp);
    +                $func(prev_task_saved_sp, next_task_saved_sp);
                 });
             }
     
    @@ -1618,8 +1919,10 @@
     
             // Now, as a final action, we drop any data that the original previous task 
             // prepared for droppage before the context switch occurred.
    -        let _prev_task_data_to_drop = self.drop_after_task_switch.take();
    -
    +        let _prev_task_data_to_drop = {
    +            let mut inner = self.inner.lock(); // ensure the lock is released
    +            inner.drop_after_task_switch.take()
    +        };
         }
     }
     
    @@ -1636,8 +1939,7 @@
                 if let Some(_kill_handler) = self.take_kill_handler() {
                     warn!("While dropping task {:?}, its kill handler callback was still present. Removing it now.", self);
                 }
    -            // Scoping rules ensure the kill handler is dropped now, before this Task's app_crate could possibly be dropped.
    -        }
    +        } // Scoping rules ensure the kill handler is dropped now, before this Task's app_crate could possibly be dropped.
         }
     }
     
    @@ -1660,21 +1962,12 @@
     /// Currently, `Lock` is a `MutexIrqSafe`, so it **does not** allow
     /// multiple readers simultaneously; that will cause deadlock.
     /// 
    -/// `TaskRef` implements the `PartialEq` trait; 
    +/// `TaskRef` implements the [`PartialEq`] and [`Eq`] traits; 
     /// two `TaskRef`s are considered equal if they point to the same underlying `Task`.
    +/// 
    +/// `TaskRef` also auto-derefs into an immutable `Task` reference.
     #[derive(Debug, Clone)]
    -pub struct TaskRef(
    -    Arc<(
    -        MutexIrqSafe<Task>,  // the actual task
    -        AtomicBool,          // true if it has exited, this is used for faster `join()` calls that avoid disabling interrupts
    -    )>
    -); 
    -
    -// impl Drop for TaskRef {
    -//     fn drop(&mut self) {
    -//         trace!("Dropping TaskRef: strong_refs: {}, {:?}", Arc::strong_count(&self.0), self);
    -//     }
    -// }
    +pub struct TaskRef(Arc<Task>);
     
     impl TaskRef {
         /// Creates a new `TaskRef` that wraps the given `Task`.
    @@ -1683,18 +1976,18 @@
         /// which will be used to determine the current `Task` on each CPU core.
         pub fn new(task: Task) -> TaskRef {
             let task_id = task.id;
    -        let taskref = TaskRef(Arc::new((MutexIrqSafe::new(task), AtomicBool::new(false))));
    +        let taskref = TaskRef(Arc::new(task));
             let tld = TaskLocalData {
                 current_taskref: taskref.clone(),
                 current_task_id: task_id,
             };
    -        taskref.0.deref().0.lock().task_local_data = Some(Box::new(tld));
    +        taskref.0.inner.lock().task_local_data = Some(Box::new(tld));
             taskref
         }
     
    -    /// Waits until the given `task` has finished executing, 
    -    /// i.e., blocks until its runstate is `RunState::Exited`.
    -    /// Returns `Ok()` when the given `task` is actually exited,
    +    /// Blocks until this task has exited or has been killed.
    +    ///
    +    /// Returns `Ok()` once this task has exited,
         /// and `Err()` if there is a problem or interruption while waiting for it to exit. 
         /// 
         /// # Note
    @@ -1713,50 +2006,10 @@
             }
             
             // First, wait for this Task to be marked as Exited (no longer runnable).
    -        loop {
    -            // if self.0.lock().has_exited() {
    -            if self.0.deref().1.load(Ordering::SeqCst) == true {
    -                break;
    -            }
    -        }
    +        while !self.0.has_exited() { }
     
             // Then, wait for it to actually stop running on any CPU core.
    -        loop {
    -            if !self.0.deref().0.lock().is_running() {
    -                return Ok(());
    -            }
    -        }
    -    }
    -
    -
    -    /// The internal routine that actually exits or kills a Task.
    -    /// It also performs select cleanup routines, e.g., removing the task from the task list.
    -    fn internal_exit(&self, val: ExitValue) -> Result<(), &'static str> {
    -        {
    -            let mut task = self.0.deref().0.lock();
    -            if let RunState::Exited(_) = task.runstate {
    -                return Err("task was already exited! (did not overwrite its existing exit value)");
    -            }
    -            task.runstate = RunState::Exited(val);
    -            self.0.deref().1.store(true, Ordering::SeqCst);
    -
    -            // Corner case: if the task isn't running (as with killed tasks), 
    -            // we must clean it up now rather than in task_switch(), because it will never be scheduled in again. 
    -            if !task.is_running() {
    -                // trace!("internal_exit(): dropping TaskLocalData for non-running task {}", &*task);
    -                let _tld = task.task_local_data.take();
    -            }
    -        }
    -
    -        #[cfg(runqueue_spillful)] 
    -        {   
    -            let task_on_rq = { self.0.deref().0.lock().on_runqueue.clone() };
    -            if let Some(remove_from_runqueue) = RUNQUEUE_REMOVAL_FUNCTION.get() {
    -                if let Some(rq) = task_on_rq {
    -                    remove_from_runqueue(self, rq)?;
    -                }
    -            }
    -        }
    +        while self.0.is_running() { }
     
             Ok(())
         }
    @@ -1804,7 +2057,7 @@
         /// it will finish running its current timeslice, and then never be run again.
         #[doc(hidden)]
         pub fn mark_as_killed(&self, reason: KillReason) -> Result<(), &'static str> {
    -        let curr_task = get_my_current_task().ok_or("mark_as_exited(): failed to check what the current task is")?;
    +        let curr_task = get_my_current_task().ok_or("mark_as_exited(): failed to check the current task")?;
             if curr_task == self {
                 self.internal_exit(ExitValue::Killed(reason))
             } else {
    @@ -1837,75 +2090,36 @@
             self.internal_exit(ExitValue::Killed(reason))
         }
     
    -
    -    /// Obtains the lock on the underlying `Task` in a read-only, blocking fashion.
    -    /// This is okay because we want to allow any other part of the OS to read 
    -    /// the details of the `Task` struct.
    -    pub fn lock(&self) -> MutexIrqSafeGuardRef<Task> {
    -        MutexIrqSafeGuardRef::new(self.0.deref().0.lock())
    -    }
    -
    -    /// Blocks this `Task` by setting its `RunState` to blocked.
    -    pub fn block(&self) {
    -        self.0.deref().0.lock().runstate = RunState::Blocked;
    -    }
    -
    -    /// Unblocks this `Task` by setting its `RunState` to runnable.
    -    pub fn unblock(&self) {
    -        self.0.deref().0.lock().runstate = RunState::Runnable;
    -    }
    -
    -    /// Registers a function or closure that will be called if this `Task` panics
    -    /// or otherwise fails (e.g., due to a machine exception). 
    -    /// The given `callback` will be invoked before the task is cleaned up via stack unwinding.
    -    /// # Locking / Deadlock
    -    /// Obtains a write lock on the enclosed `Task` in order to mutate its state.
    -    pub fn set_kill_handler(&self, callback: KillHandler) {
    -        self.0.deref().0.lock().set_kill_handler(callback)
    -    }
    -
    -    /// Takes ownership of this `Task`'s `KillHandler` closure/function if one exists,
    -    /// and returns it so it can be invoked without holding this `Task`'s `Mutex`.
    -    /// After invoking this, the `Task`'s `kill_handler` will be `None`.
    -    /// # Locking / Deadlock
    -    /// Obtains a write lock on the enclosed `Task` in order to mutate its state.
    -    pub fn take_kill_handler(&self) -> Option<KillHandler> {
    -        self.0.deref().0.lock().take_kill_handler()
    -    }
    -
    -    /// Takes ownership of this `Task`'s exit value and returns it,
    -    /// if and only if this `Task` was in the `Exited` runstate.
    -    /// After invoking this, the `Task`'s runstate will be `Reaped`.
    +    /// The internal routine that actually exits or kills a Task.
    +    ///
         /// # Locking / Deadlock
    -    /// Obtains a write lock on the enclosed `Task` in order to mutate its state.
    -    pub fn take_exit_value(&self) -> Option<ExitValue> {
    -        self.0.deref().0.lock().take_exit_value()
    -    }
    -
    -    /// Sets the `Environment` of this Task.
    -    pub fn set_env(&self, new_env: Arc<Mutex<Environment>>) {
    -        self.0.deref().0.lock().set_env(new_env);
    -    }
    -
    -    /// Gets a reference to this task's `Environment`.
    -    pub fn get_env(&self) -> Arc<Mutex<Environment>> {
    -        Arc::clone(&self.0.deref().0.lock().env)
    -    }
    +    /// Obtains the lock on this `Task`'s inner state in order to mutate it. 
    +    fn internal_exit(&self, val: ExitValue) -> Result<(), &'static str> {
    +        if self.0.has_exited() {
    +            return Err("BUG: task was already exited! (did not overwrite its existing exit value)");
    +        }
    +        {
    +            self.0.runstate.store(RunState::Exited);
    +            let mut inner = self.0.inner.lock();
    +            inner.exit_value = Some(val);
    +
    +            // Corner case: if the task isn't currently running (as with killed tasks), 
    +            // we must clean it up now rather than in `task_switch()`, as it will never be scheduled in again.
    +            if !self.0.is_running() {
    +                trace!("internal_exit(): dropping TaskLocalData for non-running task {}", &*self.0);
    +                let _tld = inner.task_local_data.take();
    +            }
    +        }
     
    -    /// Gets a reference to this task's `CrateNamespace`.
    -    pub fn get_namespace(&self) -> Arc<CrateNamespace> {
    -        Arc::clone(&self.0.deref().0.lock().namespace)
    -    }
    -    
    -    /// Obtains the lock on the underlying `Task` in a writable, blocking fashion.
    -    #[deprecated(note = "This method exposes inner Task details for debugging purposes. Do not use it.")]
    -    #[doc(hidden)]
    -    pub fn lock_mut(&self) -> MutexIrqSafeGuardRefMut<Task> {
    -        MutexIrqSafeGuardRefMut::new(self.0.deref().0.lock())
    -    }
    +        #[cfg(runqueue_spillful)] {   
    +            if let Some(remove_from_runqueue) = RUNQUEUE_REMOVAL_FUNCTION.get() {
    +                if let Some(rq) = self.on_runqueue() {
    +                    remove_from_runqueue(self, rq)?;
    +                }
    +            }
    +        }
     
    -    pub fn is_restartable(&self) -> bool {
    -        self.0.deref().0.lock().restart_info.is_some()
    +        Ok(())
         }
     }
     
    @@ -1914,9 +2128,20 @@
             Arc::ptr_eq(&self.0, &other.0)
         }
     }
    -
     impl Eq for TaskRef { }
     
    +impl Deref for TaskRef {
    +    type Target = Task;
    +    fn deref(&self) -> &Self::Target {
    +        self.0.deref()
    +    }
    +}
    +
    +// impl Drop for TaskRef {
    +//     fn drop(&mut self) {
    +//         trace!("Dropping TaskRef: strong_refs: {}, {:?}", Arc::strong_count(&self.0), self);
    +//     }
    +// }
     
     
     /// Bootstrap a new task from the current thread of execution.
    @@ -1934,16 +2159,23 @@
             .ok_or("The initial kernel CrateNamespace must be initialized before the tasking subsystem.")?
             .clone();
         let default_env = Arc::new(Mutex::new(Environment::default()));
    -    let mut bootstrap_task = Task::new_internal(stack, kernel_mmi_ref, default_namespace, default_env, None, bootstrap_task_cleanup_failure);
    +    let mut bootstrap_task = Task::new_internal(
    +        stack,
    +        kernel_mmi_ref,
    +        default_namespace,
    +        default_env,
    +        None,
    +        bootstrap_task_cleanup_failure,
    +    );
         bootstrap_task.name = format!("bootstrap_task_core_{}", apic_id);
    -    bootstrap_task.runstate = RunState::Runnable;
    -    bootstrap_task.running_on_cpu = Some(apic_id); 
    -    bootstrap_task.pinned_core = Some(apic_id); // can only run on this CPU core
    +    bootstrap_task.runstate.store(RunState::Runnable);
    +    bootstrap_task.running_on_cpu.store(Some(apic_id).into()); 
    +    bootstrap_task.inner.get_mut().pinned_core = Some(apic_id); // can only run on this CPU core
         let bootstrap_task_id = bootstrap_task.id;
         let task_ref = TaskRef::new(bootstrap_task);
     
         // set this as this core's current task, since it's obviously running
    -    task_ref.0.deref().0.lock().set_as_current_task();
    +    task_ref.set_as_current_task();
         if get_my_current_task().is_none() {
             error!("BUG: bootstrap_task(): failed to properly set the new idle task as the current task on AP {}", apic_id);
             return Err("BUG: bootstrap_task(): failed to properly set the new idle task as the current task");
    @@ -1970,7 +2202,7 @@
     /// 
     /// Therefore there's not much we can actually do.
     fn bootstrap_task_cleanup_failure(current_task: TaskRef, kill_reason: KillReason) -> ! {
    -    error!("BUG: bootstrap_task_cleanup_failure: {:?} died with {:?}\n. There's nothing we can do here; looping indefinitely!", current_task.lock().name, kill_reason);
    +    error!("BUG: bootstrap_task_cleanup_failure: {:?} died with {:?}\n. There's nothing we can do here; looping indefinitely!", current_task, kill_reason);
         loop { }
     }
     
    diff --git a/doc/src/task_fs/lib.rs.html b/doc/src/task_fs/lib.rs.html
    index 83b59912df..8ccdae8a95 100644
    --- a/doc/src/task_fs/lib.rs.html
    +++ b/doc/src/task_fs/lib.rs.html
    @@ -454,16 +454,6 @@
     451
     452
     453
    -454
    -455
    -456
    -457
    -458
    -459
    -460
    -461
    -462
    -463
     
     #![no_std]
     
    @@ -508,7 +498,7 @@
     use alloc::sync::Arc;
     use fs_node::{DirRef, WeakDirRef, Directory, FileOrDir, File, FileRef, FsNode};
     use memory::MappedPages;
    -use task::{TaskRef, TASKLIST, RunState};
    +use task::{TaskRef, TASKLIST};
     use path::Path;
     
     
    @@ -546,7 +536,7 @@
             let id = node.parse::<usize>().map_err(|_e| "could not parse Task id as usize")?;
             let task_ref = task::get_task(id).ok_or("could not get taskref from TASKLIST")?;
             let parent_dir = self.get_self_pointer().ok_or("BUG: tasks directory wasn't in root")?;
    -        let dir_name = task_ref.lock().id.to_string(); 
    +        let dir_name = task_ref.id.to_string(); 
             // lazily compute a new TaskDir everytime the caller wants to get a TaskDir
             let task_dir = TaskDir::new(dir_name, &parent_dir, task_ref.clone())?;        
             let boxed_task_dir = Arc::new(Mutex::new(task_dir)) as DirRef;
    @@ -621,7 +611,7 @@
     impl TaskDir {
         /// Creates a new directory and passes a pointer to the new directory created as output
         pub fn new(name: String, parent: &DirRef, taskref: TaskRef)  -> Result<TaskDir, &'static str> {
    -        let task_id = taskref.lock().id.clone();
    +        let task_id = taskref.id;
             let directory = TaskDir {
                 name: name,
                 path: Path::new(format!("{}/{}", TASKS_DIRECTORY_PATH, task_id)),
    @@ -694,7 +684,7 @@
     
     impl TaskFile {
         pub fn new(taskref: TaskRef) -> TaskFile {
    -        let task_id = taskref.lock().id.clone();
    +        let task_id = taskref.id;
             TaskFile {
                 taskref,
                 task_id,
    @@ -705,28 +695,20 @@
         /// Generates the task info string.
         fn generate(&self) -> String {
             // Print all tasks
    -        let name = &self.taskref.lock().name.clone();
    -        let runstate = match &self.taskref.lock().runstate {
    -            RunState::Initing    => "Initing",
    -            RunState::Runnable   => "Runnable",
    -            RunState::Blocked    => "Blocked",
    -            RunState::Exited(_)  => "Exited",
    -            RunState::Reaped     => "Reaped",
    -        };
    -        let cpu = self.taskref.lock().running_on_cpu.map(|cpu| format!("{}", cpu)).unwrap_or(String::from("-"));
    -        let pinned = &self.taskref.lock().pinned_core.map(|pin| format!("{}", pin)).unwrap_or(String::from("-"));
    -        let task_type = if self.taskref.lock().is_an_idle_task {
    +        let cpu = self.taskref.running_on_cpu().map(|cpu| format!("{}", cpu)).unwrap_or(String::from("-"));
    +        let pinned = &self.taskref.pinned_core().map(|pin| format!("{}", pin)).unwrap_or(String::from("-"));
    +        let task_type = if self.taskref.is_an_idle_task {
                 "I"
    -        } else if self.taskref.lock().is_application() {
    +        } else if self.taskref.is_application() {
                 "A"
             } else {
                 " "
             };  
     
    -        format!("{0:<10} {1}\n{2:<10} {3}\n{4:<10} {5}\n{6:<10} {7}\n{8:<10} {9}\n{10:<10} {11:<10}", 
    -            "name", name,
    -            "task id", self.taskref.lock().id,
    -            "runstate", runstate,
    +        format!("{0:<10} {1}\n{2:<10} {3}\n{4:<10} {5:?}\n{6:<10} {7}\n{8:<10} {9}\n{10:<10} {11:<10}", 
    +            "name", self.taskref.name,
    +            "task id", self.taskref.id,
    +            "runstate", self.taskref.runstate(),
                 "cpu", cpu,
                 "pinned", pinned,
                 "task type", task_type
    @@ -740,7 +722,7 @@
         }
     
         fn get_name(&self) -> String {
    -        self.taskref.lock().name.clone()
    +        self.taskref.name.clone()
         }
     
         fn get_parent_dir(&self) -> Option<DirRef> {
    @@ -796,7 +778,7 @@
     impl MmiDir {
         /// Creates a new directory and passes a pointer to the new directory created as output
         pub fn new(taskref: TaskRef) -> MmiDir {
    -        let task_id = taskref.lock().id.clone();
    +        let task_id = taskref.id;
             MmiDir {
                 taskref,
                 task_id,
    @@ -866,7 +848,7 @@
     
     impl MmiFile {
         pub fn new(taskref: TaskRef) -> MmiFile {
    -        let task_id = taskref.lock().id;
    +        let task_id = taskref.id;
             MmiFile {
                 taskref,
                 task_id,
    @@ -876,9 +858,7 @@
     
         /// Generates the mmi info string.
         fn generate(&self) -> String {
    -        let task = self.taskref.lock();
    -        let mmi = task.mmi.lock();
    -        format!("Page table: {:?}\n", mmi.page_table)
    +        format!("Page table: {:?}\n", self.taskref.mmi.lock().page_table)
         }
     }
     
    diff --git a/doc/src/unwind/lib.rs.html b/doc/src/unwind/lib.rs.html
    index 91dbb8c669..e1d835a2ff 100644
    --- a/doc/src/unwind/lib.rs.html
    +++ b/doc/src/unwind/lib.rs.html
    @@ -917,9 +917,6 @@
     914
     915
     916
    -917
    -918
    -919
     
     //! Support for unwinding the call stack and cleaning up stack frames.
     //! 
    @@ -1625,7 +1622,7 @@
             Box::into_raw(Box::new(
                 UnwindingContext {
                     stack_frame_iter: StackFrameIter::new(
    -                    namespace,
    +                    Arc::clone(&namespace),
                         // we will set the real register values later, in the `invoke_with_current_registers()` closure.
                         Registers::default()
                     ), 
    @@ -1832,13 +1829,10 @@
         let (stack_frame_iter, cause, current_task) = unwinding_context.into();
         drop(stack_frame_iter);
     
    -    let failure_cleanup_function = {
    -        let t = current_task.lock();
    -        t.failure_cleanup_function.clone()
    -    };
         #[cfg(not(downtime_eval))]
         warn!("cleanup_unwinding_context(): invoking the task_cleanup_failure function for task {:?}", current_task);
    -    failure_cleanup_function(current_task, cause)
    +    
    +    (current_task.failure_cleanup_function)(current_task, cause)
     }
     
    diff --git a/doc/task/all.html b/doc/task/all.html index 3305894095..96575f40be 100644 --- a/doc/task/all.html +++ b/doc/task/all.html @@ -3,5 +3,5 @@

    List of all items[] -

    Structs

    Enums

    Functions

    Typedefs

    +

    Structs

    Enums

    Functions

    Typedefs

    \ No newline at end of file diff --git a/doc/task/enum.ExitValue.html b/doc/task/enum.ExitValue.html index 327b89766d..8c4f6018cb 100644 --- a/doc/task/enum.ExitValue.html +++ b/doc/task/enum.ExitValue.html @@ -1,7 +1,7 @@ ExitValue in task - Rust

    Enum task::ExitValue[][src]

    pub enum ExitValue {
    +                Change settings

    Enum task::ExitValue[][src]

    pub enum ExitValue {
         Completed(Box<dyn Any + Send>),
         Killed(KillReason),
     }
    Expand description

    The list of ways that a Task can exit, including possible return values and conditions.

    @@ -12,7 +12,7 @@ and should therefore be able to downcast it appropriately.

    Killed(KillReason)

    The Task did NOT run to completion, and was instead killed. The reason for it being killed is enclosed.

    -

    Trait Implementations

    impl Debug for ExitValue[src]

    fn fmt(&self, f: &mut Formatter<'_>) -> Result[src]

    Formats the value using the given formatter. Read more

    +

    Trait Implementations

    impl Debug for ExitValue[src]

    fn fmt(&self, f: &mut Formatter<'_>) -> Result[src]

    Formats the value using the given formatter. Read more

    Auto Trait Implementations

    impl Send for ExitValue

    impl !Sync for ExitValue

    impl Unpin for ExitValue

    Blanket Implementations

    impl<T> Any for T where
        T: 'static + ?Sized
    [src]

    pub fn type_id(&self) -> TypeId[src]

    Gets the TypeId of self. Read more

    impl<T> Borrow<T> for T where
        T: ?Sized
    [src]

    pub fn borrow(&self) -> &T[src]

    Immutably borrows from an owned value. Read more

    impl<T> BorrowMut<T> for T where
        T: ?Sized
    [src]

    pub fn borrow_mut(&mut self) -> &mut T[src]

    Mutably borrows from an owned value. Read more

    diff --git a/doc/task/enum.KillReason.html b/doc/task/enum.KillReason.html index 23ec9248eb..519a394b96 100644 --- a/doc/task/enum.KillReason.html +++ b/doc/task/enum.KillReason.html @@ -1,7 +1,7 @@ KillReason in task - Rust

    Enum task::KillReason[][src]

    pub enum KillReason {
    +                Change settings

    Enum task::KillReason[][src]

    pub enum KillReason {
         Requested,
         Panic(PanicInfoOwned),
         Exception(u8),
    @@ -13,8 +13,8 @@
     

    A Rust-level panic occurred while running this Task.

    Exception(u8)

    A non-language-level problem, such as a Page Fault or some other machine exception. The number of the exception is included, e.g., 15 (0xE) for a Page Fault.

    -

    Trait Implementations

    impl Debug for KillReason[src]

    fn fmt(&self, f: &mut Formatter<'_>) -> Result[src]

    Formats the value using the given formatter. Read more

    -

    impl Display for KillReason[src]

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>[src]

    Formats the value using the given formatter. Read more

    +

    Trait Implementations

    impl Debug for KillReason[src]

    fn fmt(&self, f: &mut Formatter<'_>) -> Result[src]

    Formats the value using the given formatter. Read more

    +

    impl Display for KillReason[src]

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>[src]

    Formats the value using the given formatter. Read more

    Auto Trait Implementations

    impl Send for KillReason

    impl Sync for KillReason

    impl Unpin for KillReason

    Blanket Implementations

    impl<T> Any for T where
        T: 'static + ?Sized
    [src]

    pub fn type_id(&self) -> TypeId[src]

    Gets the TypeId of self. Read more

    impl<T> Borrow<T> for T where
        T: ?Sized
    [src]

    pub fn borrow(&self) -> &T[src]

    Immutably borrows from an owned value. Read more

    impl<T> BorrowMut<T> for T where
        T: ?Sized
    [src]

    pub fn borrow_mut(&mut self) -> &mut T[src]

    Mutably borrows from an owned value. Read more

    diff --git a/doc/task/enum.RunState.html b/doc/task/enum.RunState.html index 8d7772e97d..3d3dbf494e 100644 --- a/doc/task/enum.RunState.html +++ b/doc/task/enum.RunState.html @@ -1,11 +1,11 @@ RunState in task - Rust -

    Enum task::RunState[][src]

    pub enum RunState {
    +

    Enum task::RunState[][src]

    pub enum RunState {
         Initing,
         Runnable,
         Blocked,
    -    Exited(ExitValue),
    +    Exited,
         Reaped,
     }
    Expand description

    The set of possible runstates that a task can be in, e.g., runnable, blocked, exited, etc.

    @@ -15,17 +15,26 @@
    Runnable

    able to be scheduled in, but not necessarily currently running. To check whether it is currently running, use is_running

    Blocked

    blocked on something, like I/O or a wait event

    -
    Exited(ExitValue)

    The Task has exited and can no longer be run, +

    Exited

    The Task has exited and can no longer be run, either by running to completion or being killed.

    -
    Reaped

    This Task had already exited and now its ExitValue has been taken; +

    Reaped

    This Task had already exited and its ExitValue has been taken; its exit value can only be taken once, and consumed by another Task. This Task is now useless, and can be deleted and removed from the Task list.

    -

    Trait Implementations

    impl Debug for RunState[src]

    fn fmt(&self, f: &mut Formatter<'_>) -> Result[src]

    Formats the value using the given formatter. Read more

    -

    Auto Trait Implementations

    impl Send for RunState

    impl !Sync for RunState

    impl Unpin for RunState

    Blanket Implementations

    impl<T> Any for T where
        T: 'static + ?Sized
    [src]

    pub fn type_id(&self) -> TypeId[src]

    Gets the TypeId of self. Read more

    +

    Trait Implementations

    impl Clone for RunState[src]

    fn clone(&self) -> RunState[src]

    Returns a copy of the value. Read more

    +

    fn clone_from(&mut self, source: &Self)1.0.0[src]

    Performs copy-assignment from source. Read more

    +

    impl Debug for RunState[src]

    fn fmt(&self, f: &mut Formatter<'_>) -> Result[src]

    Formats the value using the given formatter. Read more

    +

    impl PartialEq<RunState> for RunState[src]

    fn eq(&self, other: &RunState) -> bool[src]

    This method tests for self and other values to be equal, and is used +by ==. Read more

    +

    #[must_use]
    fn ne(&self, other: &Rhs) -> bool
    1.0.0[src]

    This method tests for !=.

    +

    impl Copy for RunState[src]

    impl Eq for RunState[src]

    impl StructuralEq for RunState[src]

    impl StructuralPartialEq for RunState[src]

    Auto Trait Implementations

    impl Send for RunState

    impl Sync for RunState

    impl Unpin for RunState

    Blanket Implementations

    impl<T> Any for T where
        T: 'static + ?Sized
    [src]

    pub fn type_id(&self) -> TypeId[src]

    Gets the TypeId of self. Read more

    impl<T> Borrow<T> for T where
        T: ?Sized
    [src]

    pub fn borrow(&self) -> &T[src]

    Immutably borrows from an owned value. Read more

    impl<T> BorrowMut<T> for T where
        T: ?Sized
    [src]

    pub fn borrow_mut(&mut self) -> &mut T[src]

    Mutably borrows from an owned value. Read more

    impl<T> From<T> for T[src]

    pub fn from(t: T) -> T[src]

    Performs the conversion.

    impl<T, U> Into<U> for T where
        U: From<T>, 
    [src]

    pub fn into(self) -> U[src]

    Performs the conversion.

    +

    impl<T> ToOwned for T where
        T: Clone
    [src]

    type Owned = T

    The resulting type after obtaining ownership.

    +

    pub fn to_owned(&self) -> T[src]

    Creates owned data from borrowed data, usually by cloning. Read more

    +

    pub fn clone_into(&self, target: &mut T)[src]

    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    recently added

    +

    Uses borrowed data to replace owned data, usually by cloning. Read more

    impl<T, U> TryFrom<U> for T where
        U: Into<T>, 
    [src]

    type Error = Infallible

    The type returned in the event of a conversion error.

    pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]

    Performs the conversion.

    impl<T, U> TryInto<U> for T where
        U: TryFrom<T>, 
    [src]

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.

    diff --git a/doc/task/fn.bootstrap_task.html b/doc/task/fn.bootstrap_task.html index 86cdaeaa27..5b69a11eca 100644 --- a/doc/task/fn.bootstrap_task.html +++ b/doc/task/fn.bootstrap_task.html @@ -1,7 +1,7 @@ bootstrap_task in task - Rust

    Function task::bootstrap_task[][src]

    pub fn bootstrap_task(
        apic_id: u8,
        stack: Stack,
        kernel_mmi_ref: MmiRef
    ) -> Result<TaskRef, &'static str>
    Expand description

    Bootstrap a new task from the current thread of execution.

    + Change settings

    Function task::bootstrap_task[][src]

    pub fn bootstrap_task(
        apic_id: u8,
        stack: Stack,
        kernel_mmi_ref: MmiRef
    ) -> Result<TaskRef, &'static str>
    Expand description

    Bootstrap a new task from the current thread of execution.

    Note

    This function does not add the new task to any runqueue.

    diff --git a/doc/task/fn.get_my_current_task.html b/doc/task/fn.get_my_current_task.html index b5b1a73a59..d57a643b03 100644 --- a/doc/task/fn.get_my_current_task.html +++ b/doc/task/fn.get_my_current_task.html @@ -1,7 +1,7 @@ get_my_current_task in task - Rust

    Function task::get_my_current_task[][src]

    pub fn get_my_current_task() -> Option<&'static TaskRef>
    Expand description

    Returns a reference to the current task by using the TaskLocalData pointer + Change settings

    Function task::get_my_current_task[][src]

    pub fn get_my_current_task() -> Option<&'static TaskRef>
    Expand description

    Returns a reference to the current task by using the TaskLocalData pointer stored in the thread-local storage (FS base model-specific register).

    \ No newline at end of file diff --git a/doc/task/fn.get_my_current_task_id.html b/doc/task/fn.get_my_current_task_id.html index 631f1381d5..fd1e515605 100644 --- a/doc/task/fn.get_my_current_task_id.html +++ b/doc/task/fn.get_my_current_task_id.html @@ -1,7 +1,7 @@ get_my_current_task_id in task - Rust

    Function task::get_my_current_task_id[][src]

    pub fn get_my_current_task_id() -> Option<usize>
    Expand description

    Returns the current Task’s id by using the TaskLocalData pointer + Change settings

    Function task::get_my_current_task_id[][src]

    pub fn get_my_current_task_id() -> Option<usize>
    Expand description

    Returns the current Task’s id by using the TaskLocalData pointer stored in the thread-local storage (FS base model-specific register).

    \ No newline at end of file diff --git a/doc/task/fn.get_task.html b/doc/task/fn.get_task.html index f92a7bfdc2..b697a9e406 100644 --- a/doc/task/fn.get_task.html +++ b/doc/task/fn.get_task.html @@ -1,6 +1,6 @@ get_task in task - Rust

    Function task::get_task[][src]

    pub fn get_task(task_id: usize) -> Option<TaskRef>
    Expand description

    returns a shared reference to the Task specified by the given task_id

    + Change settings

    Function task::get_task[][src]

    pub fn get_task(task_id: usize) -> Option<TaskRef>
    Expand description

    returns a shared reference to the Task specified by the given task_id

    \ No newline at end of file diff --git a/doc/task/fn.set_my_kill_handler.html b/doc/task/fn.set_my_kill_handler.html index a81b93b213..df026410dd 100644 --- a/doc/task/fn.set_my_kill_handler.html +++ b/doc/task/fn.set_my_kill_handler.html @@ -1,6 +1,6 @@ set_my_kill_handler in task - Rust

    Function task::set_my_kill_handler[][src]

    pub fn set_my_kill_handler(handler: KillHandler) -> Result<(), &'static str>
    Expand description

    Sets the kill handler function for the current Task

    + Change settings

    Function task::set_my_kill_handler[][src]

    pub fn set_my_kill_handler(handler: KillHandler) -> Result<(), &'static str>
    Expand description

    Sets the kill handler function for the current Task

    \ No newline at end of file diff --git a/doc/task/index.html b/doc/task/index.html index a1f9cf99bf..ac1b2067e8 100644 --- a/doc/task/index.html +++ b/doc/task/index.html @@ -1,7 +1,7 @@ task - Rust

    Crate task[][src]

    Expand description

    This crate contains the Task structure for supporting multithreading, + Change settings

    Crate task[][src]

    Expand description

    This crate contains the Task structure for supporting multithreading, and the associated code for dealing with tasks.

    To create new Tasks, use the spawn crate.

    Examples

    @@ -26,10 +26,10 @@

    Examples

    }

    Structs

    PanicInfoOwned

    Just like core::panic::PanicInfo, but with owned String types instead of &str references.

    -
    RestartInfo

    A data structure to hold data related to restart the function. -Presence of RestartInfo itself indicates the task will be restartable.

    +
    RestartInfo

    A struct holding data items needed to restart a Task.

    TASKLIST

    The list of all Tasks in the system.

    Task

    A structure that contains contextual information for a thread of execution.

    +
    TaskInner

    The parts of a Task that may be modified after its creation.

    TaskRef

    A shareable, cloneable reference to a Task that exposes more methods for task management, and accesses the enclosed Task by locking it.

    Enums

    diff --git a/doc/task/sidebar-items.js b/doc/task/sidebar-items.js index a07ad7a0a4..4051f0a721 100644 --- a/doc/task/sidebar-items.js +++ b/doc/task/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"enum":[["ExitValue","The list of ways that a Task can exit, including possible return values and conditions."],["KillReason","The list of possible reasons that a given `Task` was killed prematurely."],["RunState","The set of possible runstates that a task can be in, e.g., runnable, blocked, exited, etc. "]],"fn":[["bootstrap_task","Bootstrap a new task from the current thread of execution."],["get_my_current_task","Returns a reference to the current task by using the `TaskLocalData` pointer stored in the thread-local storage (FS base model-specific register)."],["get_my_current_task_id","Returns the current Task’s id by using the `TaskLocalData` pointer stored in the thread-local storage (FS base model-specific register)."],["get_task","returns a shared reference to the `Task` specified by the given `task_id`"],["set_my_kill_handler","Sets the kill handler function for the current `Task`"]],"struct":[["PanicInfoOwned","Just like `core::panic::PanicInfo`, but with owned String types instead of &str references."],["RestartInfo","A data structure to hold data related to restart the function. Presence of `RestartInfo` itself indicates the task will be restartable."],["TASKLIST","The list of all Tasks in the system."],["Task","A structure that contains contextual information for a thread of execution. "],["TaskRef","A shareable, cloneable reference to a `Task` that exposes more methods for task management, and accesses the enclosed `Task` by locking it. "]],"type":[["FailureCleanupFunction","The signature of a Task’s failure cleanup function."],["KillHandler","The function signature of the callback that will be invoked when a given Task panics or otherwise fails, e.g., a machine exception occurs."]]}); \ No newline at end of file +initSidebarItems({"enum":[["ExitValue","The list of ways that a Task can exit, including possible return values and conditions."],["KillReason","The list of possible reasons that a given `Task` was killed prematurely."],["RunState","The set of possible runstates that a task can be in, e.g., runnable, blocked, exited, etc. "]],"fn":[["bootstrap_task","Bootstrap a new task from the current thread of execution."],["get_my_current_task","Returns a reference to the current task by using the `TaskLocalData` pointer stored in the thread-local storage (FS base model-specific register)."],["get_my_current_task_id","Returns the current Task’s id by using the `TaskLocalData` pointer stored in the thread-local storage (FS base model-specific register)."],["get_task","returns a shared reference to the `Task` specified by the given `task_id`"],["set_my_kill_handler","Sets the kill handler function for the current `Task`"]],"struct":[["PanicInfoOwned","Just like `core::panic::PanicInfo`, but with owned String types instead of &str references."],["RestartInfo","A struct holding data items needed to restart a `Task`."],["TASKLIST","The list of all Tasks in the system."],["Task","A structure that contains contextual information for a thread of execution. "],["TaskInner","The parts of a `Task` that may be modified after its creation."],["TaskRef","A shareable, cloneable reference to a `Task` that exposes more methods for task management, and accesses the enclosed `Task` by locking it. "]],"type":[["FailureCleanupFunction","The signature of a Task’s failure cleanup function."],["KillHandler","The function signature of the callback that will be invoked when a given Task panics or otherwise fails, e.g., a machine exception occurs."]]}); \ No newline at end of file diff --git a/doc/task/struct.PanicInfoOwned.html b/doc/task/struct.PanicInfoOwned.html index 6c00777410..3d59d6fd81 100644 --- a/doc/task/struct.PanicInfoOwned.html +++ b/doc/task/struct.PanicInfoOwned.html @@ -1,18 +1,18 @@ PanicInfoOwned in task - Rust

    Struct task::PanicInfoOwned[][src]

    pub struct PanicInfoOwned {
    +                Change settings

    Struct task::PanicInfoOwned[][src]

    pub struct PanicInfoOwned {
         pub msg: String,
         pub file: String,
         pub line: u32,
         pub column: u32,
     }
    Expand description

    Just like core::panic::PanicInfo, but with owned String types instead of &str references.

    - Fields

    msg: Stringfile: Stringline: u32column: u32

    Trait Implementations

    impl Clone for PanicInfoOwned[src]

    fn clone(&self) -> PanicInfoOwned[src]

    Returns a copy of the value. Read more

    + Fieldsmsg: Stringfile: Stringline: u32column: u32

    Trait Implementations

    impl Clone for PanicInfoOwned[src]

    fn clone(&self) -> PanicInfoOwned[src]

    Returns a copy of the value. Read more

    fn clone_from(&mut self, source: &Self)1.0.0[src]

    Performs copy-assignment from source. Read more

    -

    impl Debug for PanicInfoOwned[src]

    fn fmt(&self, f: &mut Formatter<'_>) -> Result[src]

    Formats the value using the given formatter. Read more

    -

    impl Display for PanicInfoOwned[src]

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>[src]

    Formats the value using the given formatter. Read more

    -

    impl<'p> From<&'_ PanicInfo<'p>> for PanicInfoOwned[src]

    fn from(info: &PanicInfo<'_>) -> PanicInfoOwned[src]

    Performs the conversion.

    +

    impl Debug for PanicInfoOwned[src]

    fn fmt(&self, f: &mut Formatter<'_>) -> Result[src]

    Formats the value using the given formatter. Read more

    +

    impl Display for PanicInfoOwned[src]

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>[src]

    Formats the value using the given formatter. Read more

    +

    impl<'p> From<&'_ PanicInfo<'p>> for PanicInfoOwned[src]

    fn from(info: &PanicInfo<'_>) -> PanicInfoOwned[src]

    Performs the conversion.

    Auto Trait Implementations

    Blanket Implementations

    impl<T> Any for T where
        T: 'static + ?Sized
    [src]

    pub fn type_id(&self) -> TypeId[src]

    Gets the TypeId of self. Read more

    impl<T> Borrow<T> for T where
        T: ?Sized
    [src]

    pub fn borrow(&self) -> &T[src]

    Immutably borrows from an owned value. Read more

    impl<T> BorrowMut<T> for T where
        T: ?Sized
    [src]

    pub fn borrow_mut(&mut self) -> &mut T[src]

    Mutably borrows from an owned value. Read more

    diff --git a/doc/task/struct.RestartInfo.html b/doc/task/struct.RestartInfo.html index 133a8964df..2d61cb0c47 100644 --- a/doc/task/struct.RestartInfo.html +++ b/doc/task/struct.RestartInfo.html @@ -1,11 +1,10 @@ -RestartInfo in task - Rust +RestartInfo in task - Rust

    Struct task::RestartInfo[][src]

    pub struct RestartInfo {
         pub argument: Box<dyn Any + Send>,
         pub func: Box<dyn Any + Send>,
    -}
    Expand description

    A data structure to hold data related to restart the function. -Presence of RestartInfo itself indicates the task will be restartable.

    +}
    Expand description

    A struct holding data items needed to restart a Task.

    Fields

    argument: Box<dyn Any + Send>

    Stores the argument of the task for restartable tasks

    func: Box<dyn Any + Send>

    Stores the function of the task for restartable tasks

    diff --git a/doc/task/struct.TASKLIST.html b/doc/task/struct.TASKLIST.html index cdf80b03d0..d8ba2f1ae6 100644 --- a/doc/task/struct.TASKLIST.html +++ b/doc/task/struct.TASKLIST.html @@ -1,7 +1,7 @@ TASKLIST in task - Rust

    Struct task::TASKLIST[][src]

    pub struct TASKLIST { /* fields omitted */ }
    Expand description

    The list of all Tasks in the system.

    + Change settings

    Struct task::TASKLIST[][src]

    pub struct TASKLIST { /* fields omitted */ }
    Expand description

    The list of all Tasks in the system.

    Methods from Deref<Target = MutexIrqSafe<BTreeMap<usize, TaskRef>>>

    pub fn lock(&self) -> MutexIrqSafeGuard<'_, T>

    Locks the spinlock and returns a guard.

    The returned value may be dereferenced for data access and the lock will be dropped when the guard falls out of scope.

    @@ -26,9 +26,9 @@

    Safety

    If the lock isn’t held, this is a no-op.

    pub fn try_lock(&self) -> Option<MutexIrqSafeGuard<'_, T>>

    Tries to lock the MutexIrqSafe. If it is already locked, it will return None. Otherwise it returns a guard within Some.

    -

    Trait Implementations

    impl Deref for TASKLIST[src]

    type Target = MutexIrqSafe<BTreeMap<usize, TaskRef>>

    The resulting type after dereferencing.

    -

    fn deref(&self) -> &MutexIrqSafe<BTreeMap<usize, TaskRef>>[src]

    Dereferences the value.

    -

    impl LazyStatic for TASKLIST[src]

    fn initialize(lazy: &Self)[src]

    Auto Trait Implementations

    impl Send for TASKLIST

    impl Sync for TASKLIST

    impl Unpin for TASKLIST

    Blanket Implementations

    impl<T> Any for T where
        T: 'static + ?Sized
    [src]

    pub fn type_id(&self) -> TypeId[src]

    Gets the TypeId of self. Read more

    +

    Trait Implementations

    impl Deref for TASKLIST[src]

    type Target = MutexIrqSafe<BTreeMap<usize, TaskRef>>

    The resulting type after dereferencing.

    +

    fn deref(&self) -> &MutexIrqSafe<BTreeMap<usize, TaskRef>>[src]

    Dereferences the value.

    +

    impl LazyStatic for TASKLIST[src]

    fn initialize(lazy: &Self)[src]

    Auto Trait Implementations

    impl Send for TASKLIST

    impl Sync for TASKLIST

    impl Unpin for TASKLIST

    Blanket Implementations

    impl<T> Any for T where
        T: 'static + ?Sized
    [src]

    pub fn type_id(&self) -> TypeId[src]

    Gets the TypeId of self. Read more

    impl<T> Borrow<T> for T where
        T: ?Sized
    [src]

    pub fn borrow(&self) -> &T[src]

    Immutably borrows from an owned value. Read more

    impl<T> BorrowMut<T> for T where
        T: ?Sized
    [src]

    pub fn borrow_mut(&mut self) -> &mut T[src]

    Mutably borrows from an owned value. Read more

    impl<T> From<T> for T[src]

    pub fn from(t: T) -> T[src]

    Performs the conversion.

    diff --git a/doc/task/struct.Task.html b/doc/task/struct.Task.html index 1b88778689..2506099590 100644 --- a/doc/task/struct.Task.html +++ b/doc/task/struct.Task.html @@ -1,53 +1,32 @@ Task in task - Rust -

    Struct task::Task[][src]

    pub struct Task {
    Show fields +

    Struct task::Task[][src]

    pub struct Task {
         pub id: usize,
         pub name: String,
    -    pub running_on_cpu: Option<u8>,
    -    pub runstate: RunState,
    -    pub saved_sp: usize,
         pub mmi: MmiRef,
    -    pub kstack: Stack,
    -    pub pinned_core: Option<u8>,
         pub is_an_idle_task: bool,
         pub app_crate: Option<Arc<AppCrateRef>>,
         pub namespace: Arc<CrateNamespace>,
    -    pub kill_handler: Option<KillHandler>,
    -    pub env: Arc<Mutex<Environment>>,
         pub failure_cleanup_function: FailureCleanupFunction,
    -    pub restart_info: Option<RestartInfo>,
         // some fields omitted
    -
    }
    Expand description

    A structure that contains contextual information for a thread of execution.

    +}
    Expand description

    A structure that contains contextual information for a thread of execution.

    +

    Only fields that do not permit interior mutability are public and can be accessed directly.

    - Fields

    id: usize

    the unique id of this Task.

    -
    name: String

    the simple name of this Task

    -
    running_on_cpu: Option<u8>

    Which cpu core the Task is currently running on. -None if not currently running.

    -
    runstate: RunState

    the runnability status of this task, basically whether it’s allowed to be scheduled in.

    -
    saved_sp: usize

    the saved stack pointer value, used for task switching.

    + Fieldsid: usize

    The unique identifier of this Task.

    +
    name: String

    The simple name of this Task.

    mmi: MmiRef

    Memory management details: page tables, mappings, allocators, etc. This is shared among all other tasks in the same address space.

    -
    kstack: Stack

    The kernel stack, which all Tasks must have in order to execute.

    -
    pinned_core: Option<u8>

    Whether or not this task is pinned to a certain core. -The idle tasks (like idle_task) are always pinned to their respective cores.

    is_an_idle_task: bool

    Whether this Task is an idle task, the task that runs by default when no other task is running. There exists one idle task per core, so this is false for most tasks.

    -
    app_crate: Option<Arc<AppCrateRef>>

    For application Tasks, this is a reference to the LoadedCrate +

    app_crate: Option<Arc<AppCrateRef>>

    For application Tasks, this is effectively a reference to the mod_mgmt::LoadedCrate that contains the entry function for this Task.

    -
    namespace: Arc<CrateNamespace>

    This Task is linked into and runs within the context of -this CrateNamespace.

    -
    kill_handler: Option<KillHandler>

    The function that will be called when this Task panics or fails due to a machine exception. -It will be invoked before the task is cleaned up via stack unwinding. -This is similar to Rust’s built-in panic hook, but is also called upon a machine exception, not just a panic.

    -
    env: Arc<Mutex<Environment>>

    The environment of the task, Wrapped in an Arc & Mutex because it is shared among child and parent tasks

    +
    namespace: Arc<CrateNamespace>

    This Task is linked into and runs within the context of this CrateNamespace.

    failure_cleanup_function: FailureCleanupFunction

    The function that should be run as a last-ditch attempt to recover from this task’s failure, e.g., this can be called when unwinding itself fails. Typically, it will point to this Task’s specific instance of spawn::task_cleanup_failure(), which has generic type parameters that describe its function signature, argument type, and return type.

    -
    restart_info: Option<RestartInfo>

    Stores the restartable information of the task. -Some(RestartInfo) indicates that the task is restartable.

    -

    Implementations

    impl Task[src]

    pub fn new(
        kstack: Option<Stack>,
        failure_cleanup_function: FailureCleanupFunction
    ) -> Result<Task, &'static str>
    [src]

    Creates a new Task structure and initializes it to be non-Runnable. +

    Implementations

    impl Task[src]

    pub fn new(
        kstack: Option<Stack>,
        failure_cleanup_function: FailureCleanupFunction
    ) -> Result<Task, &'static str>
    [src]

    Creates a new Task structure and initializes it to be non-Runnable. By default, the new Task will inherit some of the same states from the currently-running Task: its Environment, MemoryManagementInfo, CrateNamespace, and app_crate reference. If needed, those states can be changed by setting them for the returned Task.

    @@ -59,37 +38,82 @@

    Arguments

    Note

    This does not run the task, schedule it in, or switch to it.

    However, it requires tasking to already be set up, i.e., the current task must be known.

    -

    pub fn is_running(&self) -> bool[src]

    returns true if this Task is currently running on any cpu.

    -

    pub fn is_runnable(&self) -> bool[src]

    Returns true if this Task is Runnable, i.e., able to be scheduled in.

    +

    pub fn set_env(&self, new_env: Arc<Mutex<Environment>>)[src]

    Sets the Environment of this Task.

    +

    Locking / Deadlock

    +

    Obtains the lock on this Task’s inner state in order to mutate it.

    +

    pub fn get_env(&self) -> Arc<Mutex<Environment>>[src]

    Gets a reference to this task’s Environment.

    +

    Locking / Deadlock

    +

    Obtains the lock on this Task’s inner state in order to access it.

    +

    pub fn is_running(&self) -> bool[src]

    Returns true if this Task is currently running.

    +

    pub fn running_on_cpu(&self) -> Option<u8>[src]

    Returns the APIC ID of the CPU this Task is currently running on.

    +

    pub fn pinned_core(&self) -> Option<u8>[src]

    Returns the APIC ID of the CPU this Task is pinned on, +or None if it is not pinned.

    +

    pub fn runstate(&self) -> RunState[src]

    Returns the current RunState of this Task.

    +

    pub fn is_runnable(&self) -> bool[src]

    Returns true if this Task is Runnable, i.e., able to be scheduled in.

    Note

    This does NOT mean that this Task is actually currently running, just that it is able to be run.

    -

    pub fn has_exited(&self) -> bool[src]

    Returns true if this Task has been exited, i.e., +

    pub fn get_namespace(&self) -> &Arc<CrateNamespace>[src]

    Returns the namespace in which this Task is loaded/linked into and runs within.

    +

    pub fn with_kstack<R, F>(&self, func: F) -> R where
        F: FnOnce(&Stack) -> R, 
    [src]

    Exposes read-only access to this Task’s Stack by invoking +the given func with a reference to its kernel stack.

    +

    Locking / Deadlock

    +

    Obtains the lock on this Task’s inner state for the duration of func +in order to access its stack. +The given func must not attempt to obtain that same inner lock.

    +

    pub fn inner_mut(&mut self) -> &mut TaskInner[src]

    Returns a mutable reference to this Task’s inner state.

    +

    Note about mutability

    +

    This function requires the caller to have a mutable reference to this Task +in order to protect the inner state from foreign crates accessing it +through a TaskRef auto-dereferencing into a Task. +This is because you can only obtain a mutable reference to a Task +before you enclose it in a TaskRef wrapper type.

    +

    Locking / Deadlock

    +

    Because this function requires a mutable reference to this Task, +no locks must be obtained.

    +

    pub fn with_restart_info<R, F>(&self, func: F) -> R where
        F: FnOnce(Option<&RestartInfo>) -> R, 
    [src]

    Exposes read-only access to this Task’s RestartInfo by invoking +the given func with a reference to its RestartInfo.

    +

    Locking / Deadlock

    +

    Obtains the lock on this Task’s inner state for the duration of func +in order to access its stack. +The given func must not attempt to obtain that same inner lock.

    +

    pub fn has_exited(&self) -> bool[src]

    Returns true if this Task has been exited, i.e., if its RunState is either Exited or Reaped.

    -

    pub fn is_application(&self) -> bool[src]

    Returns true if this is an application Task. +

    pub fn is_application(&self) -> bool[src]

    Returns true if this is an application Task. This will also return true if this task was spawned by an application task, since a task inherits the “application crate” field from its “parent” who spawned it.

    -

    pub fn is_userspace(&self) -> bool[src]

    Returns true if this is a userspaceTask. +

    pub fn is_userspace(&self) -> bool[src]

    Returns true if this is a userspace Task. Currently userspace support is disabled, so this always returns false.

    -

    pub fn set_kill_handler(&mut self, callback: KillHandler)[src]

    Registers a function or closure that will be called if this Task panics -or otherwise fails (e.g., due to a machine exception occurring). -The given callback will be invoked before the task is cleaned up via stack unwinding.

    -

    pub fn take_kill_handler(&mut self) -> Option<KillHandler>[src]

    Takes ownership of this Task’s KillHandler closure/function if one exists, -and returns it so it can be invoked without holding this Task’s Mutex. +

    pub fn is_restartable(&self) -> bool[src]

    Returns true if this Task was spawned as a restartable task.

    +

    Locking / Deadlock

    +

    Obtains the lock on this Task’s inner state in order to access it.

    +

    pub fn set_kill_handler(&self, callback: KillHandler)[src]

    Registers a function or closure that will be called if this Task panics +or otherwise fails (e.g., due to a machine exception).

    +

    The given callback will be invoked before the task is cleaned up via stack unwinding.

    +

    Locking / Deadlock

    +

    Obtains the lock on this Task’s inner state in order to mutate it.

    +

    pub fn take_kill_handler(&self) -> Option<KillHandler>[src]

    Takes ownership of this Task’s KillHandler closure/function if one exists, +and returns it so it can be invoked without holding this Task’s inner lock. After invoking this, the Task’s kill_handler will be None.

    -

    pub fn get_exit_value(&self) -> Option<&ExitValue>[src]

    Returns a reference to the exit value of this Task, -if its runstate is RunState::Exited. -Unlike take_exit_value, this does not consume the exit value.

    -

    pub fn take_exit_value(&mut self) -> Option<ExitValue>[src]

    Takes ownership of this Task’s exit value and returns it, +

    Locking / Deadlock

    +

    Obtains the lock on this Task’s inner state in order to mutate it.

    +

    pub fn take_exit_value(&self) -> Option<ExitValue>[src]

    Takes ownership of this Task’s exit value and returns it, if and only if this Task was in the Exited runstate.

    -

    Note

    -

    After invoking this, the Task’s runstate will be Reaped, +

    If this Task was in the Exited runstate, after invoking this, +this Task’s runstate will be set to Reaped and this Task will be removed from the system task list.

    -

    pub fn task_switch(&mut self, next: &mut Task, apic_id: u8)[src]

    Switches from the current (self) to the given next Task.

    -

    No locks need to be held to call this, but interrupts (later, preemption) should be disabled.

    -

    Trait Implementations

    impl Debug for Task[src]

    fn fmt(&self, f: &mut Formatter<'_>) -> Result[src]

    Formats the value using the given formatter. Read more

    -

    impl Display for Task[src]

    fn fmt(&self, f: &mut Formatter<'_>) -> Result[src]

    Formats the value using the given formatter. Read more

    -

    impl Drop for Task[src]

    fn drop(&mut self)[src]

    Executes the destructor for this type. Read more

    -

    Auto Trait Implementations

    impl Send for Task

    impl !Sync for Task

    impl Unpin for Task

    Blanket Implementations

    impl<T> Any for T where
        T: 'static + ?Sized
    [src]

    pub fn type_id(&self) -> TypeId[src]

    Gets the TypeId of self. Read more

    +

    If this Task was not in the Exited runstate, +nothing is done and None is returned.

    +

    Locking / Deadlock

    +

    Obtains the lock on this Task’s inner state in order to mutate it.

    +

    pub fn block(&self)[src]

    Blocks this Task by setting its runstate to RunState::Blocked.

    +

    pub fn unblock(&self)[src]

    Unblocks this Task by setting its runstate to RunState::Runnable.

    +

    pub fn task_switch(&self, next: &Task, apic_id: u8)[src]

    Switches from the current task (self) to the given next task.

    +

    Locking / Deadlock

    +

    Obtains the locks on both this Task’s inner state and the given next Task’s inner state +in order to mutate them.

    +

    Trait Implementations

    impl Debug for Task[src]

    fn fmt(&self, f: &mut Formatter<'_>) -> Result[src]

    Formats the value using the given formatter. Read more

    +

    impl Display for Task[src]

    fn fmt(&self, f: &mut Formatter<'_>) -> Result[src]

    Formats the value using the given formatter. Read more

    +

    impl Drop for Task[src]

    fn drop(&mut self)[src]

    Executes the destructor for this type. Read more

    +

    Auto Trait Implementations

    impl Send for Task

    impl Sync for Task

    impl Unpin for Task

    Blanket Implementations

    impl<T> Any for T where
        T: 'static + ?Sized
    [src]

    pub fn type_id(&self) -> TypeId[src]

    Gets the TypeId of self. Read more

    impl<T> Borrow<T> for T where
        T: ?Sized
    [src]

    pub fn borrow(&self) -> &T[src]

    Immutably borrows from an owned value. Read more

    impl<T> BorrowMut<T> for T where
        T: ?Sized
    [src]

    pub fn borrow_mut(&mut self) -> &mut T[src]

    Mutably borrows from an owned value. Read more

    impl<T> From<T> for T[src]

    pub fn from(t: T) -> T[src]

    Performs the conversion.

    diff --git a/doc/task/struct.TaskInner.html b/doc/task/struct.TaskInner.html new file mode 100644 index 0000000000..1c5fc65c33 --- /dev/null +++ b/doc/task/struct.TaskInner.html @@ -0,0 +1,37 @@ +TaskInner in task - Rust + +

    Struct task::TaskInner[][src]

    pub struct TaskInner {
    +    pub saved_sp: usize,
    +    pub kstack: Stack,
    +    pub pinned_core: Option<u8>,
    +    pub restart_info: Option<RestartInfo>,
    +    // some fields omitted
    +}
    Expand description

    The parts of a Task that may be modified after its creation.

    +

    This includes only the parts that cannot be modified atomically. +As such, they are protected by a lock in the containing Task struct.

    +

    In general, other crates cannot obtain a mutable reference to a Task (&mut Task), +which means they cannot access this struct’s contents directly at all +(except through the specific get/set methods exposed by Task).

    +

    Therefore, it is safe to expose all members of this struct as public, +though not strictly necessary. +Currently, we only publicize the fields here that need to be modified externally, +primarily by the spawn crate for creating and running new tasks.

    +

    + Fields

    saved_sp: usize

    the saved stack pointer value, used for task switching.

    +
    kstack: Stack

    The kernel stack, which all Tasks must have in order to execute.

    +
    pinned_core: Option<u8>

    Whether or not this task is pinned to a certain core. +The idle tasks (like idle_task) are always pinned to their respective cores.

    +
    restart_info: Option<RestartInfo>

    Stores the restartable information of the task. +Some(RestartInfo) indicates that the task is restartable.

    +

    Auto Trait Implementations

    impl Send for TaskInner

    impl !Sync for TaskInner

    impl Unpin for TaskInner

    Blanket Implementations

    impl<T> Any for T where
        T: 'static + ?Sized
    [src]

    pub fn type_id(&self) -> TypeId[src]

    Gets the TypeId of self. Read more

    +

    impl<T> Borrow<T> for T where
        T: ?Sized
    [src]

    pub fn borrow(&self) -> &T[src]

    Immutably borrows from an owned value. Read more

    +

    impl<T> BorrowMut<T> for T where
        T: ?Sized
    [src]

    pub fn borrow_mut(&mut self) -> &mut T[src]

    Mutably borrows from an owned value. Read more

    +

    impl<T> From<T> for T[src]

    pub fn from(t: T) -> T[src]

    Performs the conversion.

    +

    impl<T, U> Into<U> for T where
        U: From<T>, 
    [src]

    pub fn into(self) -> U[src]

    Performs the conversion.

    +

    impl<T, U> TryFrom<U> for T where
        U: Into<T>, 
    [src]

    type Error = Infallible

    The type returned in the event of a conversion error.

    +

    pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]

    Performs the conversion.

    +

    impl<T, U> TryInto<U> for T where
        U: TryFrom<T>, 
    [src]

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.

    +

    pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>[src]

    Performs the conversion.

    +

    impl<T> Erased for T

    + \ No newline at end of file diff --git a/doc/task/struct.TaskRef.html b/doc/task/struct.TaskRef.html index f789d681bb..e6fac7b56a 100644 --- a/doc/task/struct.TaskRef.html +++ b/doc/task/struct.TaskRef.html @@ -1,7 +1,7 @@ TaskRef in task - Rust -

    Struct task::TaskRef[][src]

    pub struct TaskRef(_);
    Expand description

    A shareable, cloneable reference to a Task that exposes more methods +

    Struct task::TaskRef[][src]

    pub struct TaskRef(_);
    Expand description

    A shareable, cloneable reference to a Task that exposes more methods for task management, and accesses the enclosed Task by locking it.

    The TaskRef type is necessary because in many places across Theseus, a reference to a Task is used. @@ -10,14 +10,14 @@ where Lock is some mutex-like locking type. Currently, Lock is a MutexIrqSafe, so it does not allow multiple readers simultaneously; that will cause deadlock.

    -

    TaskRef implements the PartialEq trait; +

    TaskRef implements the PartialEq and Eq traits; two TaskRefs are considered equal if they point to the same underlying Task.

    -

    Implementations

    impl TaskRef[src]

    pub fn new(task: Task) -> TaskRef[src]

    Creates a new TaskRef that wraps the given Task.

    +

    TaskRef also auto-derefs into an immutable Task reference.

    +

    Implementations

    impl TaskRef[src]

    pub fn new(task: Task) -> TaskRef[src]

    Creates a new TaskRef that wraps the given Task.

    Also initializes the given Task’s TaskLocalData struct, which will be used to determine the current Task on each CPU core.

    -

    pub fn join(&self) -> Result<(), &'static str>[src]

    Waits until the given task has finished executing, -i.e., blocks until its runstate is RunState::Exited. -Returns Ok() when the given task is actually exited, +

    pub fn join(&self) -> Result<(), &'static str>[src]

    Blocks until this task has exited or has been killed.

    +

    Returns Ok() once this task has exited, and Err() if there is a problem or interruption while waiting for it to exit.

    Note

      @@ -26,7 +26,7 @@

      Note

    • You cannot call join() with interrupts disabled, because it will result in permanent deadlock (well, this is only true if the requested task is running on the same cpu… but good enough for now).
    -

    pub fn kill(&self, reason: KillReason) -> Result<(), &'static str>[src]

    Kills this Task (not a clean exit) without allowing it to run to completion. +

    pub fn kill(&self, reason: KillReason) -> Result<(), &'static str>[src]

    Kills this Task (not a clean exit) without allowing it to run to completion. The provided KillReason indicates why it was killed.

    ** Currently this immediately kills the task without performing any unwinding cleanup. @@ -43,36 +43,77 @@

    Return

    Note

    The Task will not be halted immediately – it will finish running its current timeslice, and then never be run again.

    -

    pub fn lock(&self) -> MutexIrqSafeGuardRef<'_, Task>[src]

    Obtains the lock on the underlying Task in a read-only, blocking fashion. -This is okay because we want to allow any other part of the OS to read -the details of the Task struct.

    -

    pub fn block(&self)[src]

    Blocks this Task by setting its RunState to blocked.

    -

    pub fn unblock(&self)[src]

    Unblocks this Task by setting its RunState to runnable.

    -

    pub fn set_kill_handler(&self, callback: KillHandler)[src]

    Registers a function or closure that will be called if this Task panics -or otherwise fails (e.g., due to a machine exception). -The given callback will be invoked before the task is cleaned up via stack unwinding.

    +

    Methods from Deref<Target = Task>

    pub fn set_env(&self, new_env: Arc<Mutex<Environment>>)[src]

    Sets the Environment of this Task.

    Locking / Deadlock

    -

    Obtains a write lock on the enclosed Task in order to mutate its state.

    -

    pub fn take_kill_handler(&self) -> Option<KillHandler>[src]

    Takes ownership of this Task’s KillHandler closure/function if one exists, -and returns it so it can be invoked without holding this Task’s Mutex. -After invoking this, the Task’s kill_handler will be None.

    +

    Obtains the lock on this Task’s inner state in order to mutate it.

    +

    pub fn get_env(&self) -> Arc<Mutex<Environment>>[src]

    Gets a reference to this task’s Environment.

    Locking / Deadlock

    -

    Obtains a write lock on the enclosed Task in order to mutate its state.

    -

    pub fn take_exit_value(&self) -> Option<ExitValue>[src]

    Takes ownership of this Task’s exit value and returns it, -if and only if this Task was in the Exited runstate. -After invoking this, the Task’s runstate will be Reaped.

    +

    Obtains the lock on this Task’s inner state in order to access it.

    +

    pub fn is_running(&self) -> bool[src]

    Returns true if this Task is currently running.

    +

    pub fn running_on_cpu(&self) -> Option<u8>[src]

    Returns the APIC ID of the CPU this Task is currently running on.

    +

    pub fn pinned_core(&self) -> Option<u8>[src]

    Returns the APIC ID of the CPU this Task is pinned on, +or None if it is not pinned.

    +

    pub fn runstate(&self) -> RunState[src]

    Returns the current RunState of this Task.

    +

    pub fn is_runnable(&self) -> bool[src]

    Returns true if this Task is Runnable, i.e., able to be scheduled in.

    +

    Note

    +

    This does NOT mean that this Task is actually currently running, just that it is able to be run.

    +

    pub fn get_namespace(&self) -> &Arc<CrateNamespace>[src]

    Returns the namespace in which this Task is loaded/linked into and runs within.

    +

    pub fn with_kstack<R, F>(&self, func: F) -> R where
        F: FnOnce(&Stack) -> R, 
    [src]

    Exposes read-only access to this Task’s Stack by invoking +the given func with a reference to its kernel stack.

    Locking / Deadlock

    -

    Obtains a write lock on the enclosed Task in order to mutate its state.

    -

    pub fn set_env(&self, new_env: Arc<Mutex<Environment>>)[src]

    Sets the Environment of this Task.

    -

    pub fn get_env(&self) -> Arc<Mutex<Environment>>[src]

    Gets a reference to this task’s Environment.

    -

    pub fn get_namespace(&self) -> Arc<CrateNamespace>[src]

    Gets a reference to this task’s CrateNamespace.

    -

    pub fn is_restartable(&self) -> bool[src]

    Trait Implementations

    impl Clone for TaskRef[src]

    fn clone(&self) -> TaskRef[src]

    Returns a copy of the value. Read more

    +

    Obtains the lock on this Task’s inner state for the duration of func +in order to access its stack. +The given func must not attempt to obtain that same inner lock.

    +

    pub fn with_restart_info<R, F>(&self, func: F) -> R where
        F: FnOnce(Option<&RestartInfo>) -> R, 
    [src]

    Exposes read-only access to this Task’s RestartInfo by invoking +the given func with a reference to its RestartInfo.

    +

    Locking / Deadlock

    +

    Obtains the lock on this Task’s inner state for the duration of func +in order to access its stack. +The given func must not attempt to obtain that same inner lock.

    +

    pub fn has_exited(&self) -> bool[src]

    Returns true if this Task has been exited, i.e., +if its RunState is either Exited or Reaped.

    +

    pub fn is_application(&self) -> bool[src]

    Returns true if this is an application Task. +This will also return true if this task was spawned by an application task, +since a task inherits the “application crate” field from its “parent” who spawned it.

    +

    pub fn is_userspace(&self) -> bool[src]

    Returns true if this is a userspace Task. +Currently userspace support is disabled, so this always returns false.

    +

    pub fn is_restartable(&self) -> bool[src]

    Returns true if this Task was spawned as a restartable task.

    +

    Locking / Deadlock

    +

    Obtains the lock on this Task’s inner state in order to access it.

    +

    pub fn set_kill_handler(&self, callback: KillHandler)[src]

    Registers a function or closure that will be called if this Task panics +or otherwise fails (e.g., due to a machine exception).

    +

    The given callback will be invoked before the task is cleaned up via stack unwinding.

    +

    Locking / Deadlock

    +

    Obtains the lock on this Task’s inner state in order to mutate it.

    +

    pub fn take_kill_handler(&self) -> Option<KillHandler>[src]

    Takes ownership of this Task’s KillHandler closure/function if one exists, +and returns it so it can be invoked without holding this Task’s inner lock. +After invoking this, the Task’s kill_handler will be None.

    +

    Locking / Deadlock

    +

    Obtains the lock on this Task’s inner state in order to mutate it.

    +

    pub fn take_exit_value(&self) -> Option<ExitValue>[src]

    Takes ownership of this Task’s exit value and returns it, +if and only if this Task was in the Exited runstate.

    +

    If this Task was in the Exited runstate, after invoking this, +this Task’s runstate will be set to Reaped +and this Task will be removed from the system task list.

    +

    If this Task was not in the Exited runstate, +nothing is done and None is returned.

    +

    Locking / Deadlock

    +

    Obtains the lock on this Task’s inner state in order to mutate it.

    +

    pub fn block(&self)[src]

    Blocks this Task by setting its runstate to RunState::Blocked.

    +

    pub fn unblock(&self)[src]

    Unblocks this Task by setting its runstate to RunState::Runnable.

    +

    pub fn task_switch(&self, next: &Task, apic_id: u8)[src]

    Switches from the current task (self) to the given next task.

    +

    Locking / Deadlock

    +

    Obtains the locks on both this Task’s inner state and the given next Task’s inner state +in order to mutate them.

    +

    Trait Implementations

    impl Clone for TaskRef[src]

    fn clone(&self) -> TaskRef[src]

    Returns a copy of the value. Read more

    fn clone_from(&mut self, source: &Self)1.0.0[src]

    Performs copy-assignment from source. Read more

    -

    impl Debug for TaskRef[src]

    fn fmt(&self, f: &mut Formatter<'_>) -> Result[src]

    Formats the value using the given formatter. Read more

    -

    impl PartialEq<TaskRef> for TaskRef[src]

    fn eq(&self, other: &TaskRef) -> bool[src]

    This method tests for self and other values to be equal, and is used +

    impl Debug for TaskRef[src]

    fn fmt(&self, f: &mut Formatter<'_>) -> Result[src]

    Formats the value using the given formatter. Read more

    +

    impl Deref for TaskRef[src]

    type Target = Task

    The resulting type after dereferencing.

    +

    fn deref(&self) -> &Self::Target[src]

    Dereferences the value.

    +

    impl PartialEq<TaskRef> for TaskRef[src]

    fn eq(&self, other: &TaskRef) -> bool[src]

    This method tests for self and other values to be equal, and is used by ==. Read more

    #[must_use]
    fn ne(&self, other: &Rhs) -> bool
    1.0.0[src]

    This method tests for !=.

    -

    impl Eq for TaskRef[src]

    Auto Trait Implementations

    impl Send for TaskRef

    impl Sync for TaskRef

    impl Unpin for TaskRef

    Blanket Implementations

    impl<T> Any for T where
        T: 'static + ?Sized
    [src]

    pub fn type_id(&self) -> TypeId[src]

    Gets the TypeId of self. Read more

    +

    impl Eq for TaskRef[src]

    Auto Trait Implementations

    impl Send for TaskRef

    impl Sync for TaskRef

    impl Unpin for TaskRef

    Blanket Implementations

    impl<T> Any for T where
        T: 'static + ?Sized
    [src]

    pub fn type_id(&self) -> TypeId[src]

    Gets the TypeId of self. Read more

    impl<T> Borrow<T> for T where
        T: ?Sized
    [src]

    pub fn borrow(&self) -> &T[src]

    Immutably borrows from an owned value. Read more

    impl<T> BorrowMut<T> for T where
        T: ?Sized
    [src]

    pub fn borrow_mut(&mut self) -> &mut T[src]

    Mutably borrows from an owned value. Read more

    impl<T> From<T> for T[src]

    pub fn from(t: T) -> T[src]

    Performs the conversion.

    diff --git a/doc/task/type.KillHandler.html b/doc/task/type.KillHandler.html index 2edd21106b..2779bd2d85 100644 --- a/doc/task/type.KillHandler.html +++ b/doc/task/type.KillHandler.html @@ -1,7 +1,7 @@ KillHandler in task - Rust

    Type Definition task::KillHandler[][src]

    type KillHandler = Box<dyn Fn(&KillReason) + Send>;
    Expand description

    The function signature of the callback that will be invoked + Change settings

    Type Definition task::KillHandler[][src]

    type KillHandler = Box<dyn Fn(&KillReason) + Send>;
    Expand description

    The function signature of the callback that will be invoked when a given Task panics or otherwise fails, e.g., a machine exception occurs.

    \ No newline at end of file diff --git a/doc/task_fs/index.html b/doc/task_fs/index.html index 436dcc7b12..9bf92b2631 100644 --- a/doc/task_fs/index.html +++ b/doc/task_fs/index.html @@ -1,7 +1,7 @@ task_fs - Rust

    Crate task_fs[][src]

    Expand description

    This crate contains the direcotires and files that comprise the taskfs, which is similar + Change settings

    Crate task_fs[][src]

    Expand description

    This crate contains the direcotires and files that comprise the taskfs, which is similar to the /proc directory in linux. There are four main sections in this code:

    1. TaskFs: the top level directory that holds the individual TaskDirs
    2. diff --git a/doc/task_fs/struct.MmiDir.html b/doc/task_fs/struct.MmiDir.html index 9d3f35f6ca..fe2ade8c9a 100644 --- a/doc/task_fs/struct.MmiDir.html +++ b/doc/task_fs/struct.MmiDir.html @@ -1,21 +1,21 @@ MmiDir in task_fs - Rust

      Struct task_fs::MmiDir[][src]

      pub struct MmiDir { /* fields omitted */ }
      Expand description

      Lazily computed directory that contains subfiles and directories + Change settings

      Struct task_fs::MmiDir[][src]

      pub struct MmiDir { /* fields omitted */ }
      Expand description

      Lazily computed directory that contains subfiles and directories relevant to the task’s memory management information.

      -

      Implementations

      impl MmiDir[src]

      pub fn new(taskref: TaskRef) -> MmiDir[src]

      Creates a new directory and passes a pointer to the new directory created as output

      -

      Trait Implementations

      impl Directory for MmiDir[src]

      fn list(&self) -> Vec<String>[src]

      Returns a string listing all the children in the directory

      -

      fn insert(
          &mut self,
          _node: FileOrDir
      ) -> Result<Option<FileOrDir>, &'static str>
      [src]

      Inserts the given new file or directory into this directory. +

      Implementations

      impl MmiDir[src]

      pub fn new(taskref: TaskRef) -> MmiDir[src]

      Creates a new directory and passes a pointer to the new directory created as output

      +

      Trait Implementations

      impl Directory for MmiDir[src]

      fn list(&self) -> Vec<String>[src]

      Returns a string listing all the children in the directory

      +

      fn insert(
          &mut self,
          _node: FileOrDir
      ) -> Result<Option<FileOrDir>, &'static str>
      [src]

      Inserts the given new file or directory into this directory. If an existing node has the same name, that node is replaced and returned. Read more

      -

      fn get(&self, child_name: &str) -> Option<FileOrDir>[src]

      Gets either the file or directory in this Directory on its name.

      -

      fn remove(&mut self, _: &FileOrDir) -> Option<FileOrDir>[src]

      Removes a file or directory from this directory and returns it if found. +

      fn get(&self, child_name: &str) -> Option<FileOrDir>[src]

      Gets either the file or directory in this Directory on its name.

      +

      fn remove(&mut self, _: &FileOrDir) -> Option<FileOrDir>[src]

      Removes a file or directory from this directory and returns it if found. Also, the returned node’s parent directory reference is cleared. Read more

      fn get_file(
          &self,
          name: &str
      ) -> Option<Arc<Mutex<dyn File + 'static + Send, Spin>>>
      [src]

      Like Directory::get(), but only looks for files matching the given name in this Directory.

      fn get_dir(
          &self,
          name: &str
      ) -> Option<Arc<Mutex<dyn Directory + 'static + Send, Spin>>>
      [src]

      Like Directory::get(), but only looks for directories matching the given name in this Directory.

      -

      impl FsNode for MmiDir[src]

      fn get_absolute_path(&self) -> String[src]

      Recursively gets the absolute pathname as a String

      -

      fn get_name(&self) -> String[src]

      Returns the string name of the node

      -

      fn get_parent_dir(&self) -> Option<DirRef>[src]

      Returns the parent directory of the current node.

      -

      fn set_parent_dir(&mut self, _: WeakDirRef)[src]

      Sets this node’s parent directory. +

      impl FsNode for MmiDir[src]

      fn get_absolute_path(&self) -> String[src]

      Recursively gets the absolute pathname as a String

      +

      fn get_name(&self) -> String[src]

      Returns the string name of the node

      +

      fn get_parent_dir(&self) -> Option<DirRef>[src]

      Returns the parent directory of the current node.

      +

      fn set_parent_dir(&mut self, _: WeakDirRef)[src]

      Sets this node’s parent directory. This is useful for ensuring correctness when inserting or remonving files or directories from their parent directory. Read more

    Auto Trait Implementations

    impl Send for MmiDir

    impl Sync for MmiDir

    impl Unpin for MmiDir

    Blanket Implementations

    impl<T> Any for T where
        T: 'static + ?Sized
    [src]

    pub fn type_id(&self) -> TypeId[src]

    Gets the TypeId of self. Read more

    diff --git a/doc/task_fs/struct.MmiFile.html b/doc/task_fs/struct.MmiFile.html index 95f571c1e4..715b8e3efe 100644 --- a/doc/task_fs/struct.MmiFile.html +++ b/doc/task_fs/struct.MmiFile.html @@ -1,17 +1,17 @@ MmiFile in task_fs - Rust

    Struct task_fs::MmiFile[][src]

    pub struct MmiFile { /* fields omitted */ }
    Expand description

    Lazily computed file that contains information + Change settings

    Struct task_fs::MmiFile[][src]

    pub struct MmiFile { /* fields omitted */ }
    Expand description

    Lazily computed file that contains information about a task’s memory management information.

    -

    Implementations

    impl MmiFile[src]

    pub fn new(taskref: TaskRef) -> MmiFile[src]

    Trait Implementations

    impl File for MmiFile[src]

    fn read(&self, buf: &mut [u8], offset: usize) -> Result<usize, &'static str>[src]

    Reads the contents of this file starting at the given offset and copies them into the given buffer. +

    Implementations

    impl MmiFile[src]

    pub fn new(taskref: TaskRef) -> MmiFile[src]

    Trait Implementations

    impl File for MmiFile[src]

    fn read(&self, buf: &mut [u8], offset: usize) -> Result<usize, &'static str>[src]

    Reads the contents of this file starting at the given offset and copies them into the given buffer. The length of the given buffer determines the maximum number of bytes to be read. Read more

    -

    fn write(&mut self, _buf: &[u8], _offset: usize) -> Result<usize, &'static str>[src]

    Writes the given buffer to this file starting at the given offset.

    -

    fn size(&self) -> usize[src]

    Returns the size in bytes of this file.

    -

    fn as_mapping(&self) -> Result<&MappedPages, &'static str>[src]

    Returns a view of this file as an immutable memory-mapped region.

    -

    impl FsNode for MmiFile[src]

    fn get_absolute_path(&self) -> String[src]

    Recursively gets the absolute pathname as a String

    -

    fn get_name(&self) -> String[src]

    Returns the string name of the node

    -

    fn get_parent_dir(&self) -> Option<DirRef>[src]

    Returns the parent directory of the current node.

    -

    fn set_parent_dir(&mut self, _: WeakDirRef)[src]

    Sets this node’s parent directory. +

    fn write(&mut self, _buf: &[u8], _offset: usize) -> Result<usize, &'static str>[src]

    Writes the given buffer to this file starting at the given offset.

    +

    fn size(&self) -> usize[src]

    Returns the size in bytes of this file.

    +

    fn as_mapping(&self) -> Result<&MappedPages, &'static str>[src]

    Returns a view of this file as an immutable memory-mapped region.

    +

    impl FsNode for MmiFile[src]

    fn get_absolute_path(&self) -> String[src]

    Recursively gets the absolute pathname as a String

    +

    fn get_name(&self) -> String[src]

    Returns the string name of the node

    +

    fn get_parent_dir(&self) -> Option<DirRef>[src]

    Returns the parent directory of the current node.

    +

    fn set_parent_dir(&mut self, _: WeakDirRef)[src]

    Sets this node’s parent directory. This is useful for ensuring correctness when inserting or remonving files or directories from their parent directory. Read more

    Auto Trait Implementations

    impl Send for MmiFile

    impl Sync for MmiFile

    impl Unpin for MmiFile

    Blanket Implementations

    impl<T> Any for T where
        T: 'static + ?Sized
    [src]

    pub fn type_id(&self) -> TypeId[src]

    Gets the TypeId of self. Read more

    diff --git a/doc/task_fs/struct.TaskFile.html b/doc/task_fs/struct.TaskFile.html index cc9129aa89..ef81947514 100644 --- a/doc/task_fs/struct.TaskFile.html +++ b/doc/task_fs/struct.TaskFile.html @@ -3,15 +3,15 @@

    Struct task_fs::TaskFile[][src]

    pub struct TaskFile { /* fields omitted */ }
    Expand description

    Lazily computed file that holds information about this task. This taskfile does not exist witin the actual filesystem.

    -

    Implementations

    impl TaskFile[src]

    pub fn new(taskref: TaskRef) -> TaskFile[src]

    Trait Implementations

    impl File for TaskFile[src]

    fn read(&self, buf: &mut [u8], offset: usize) -> Result<usize, &'static str>[src]

    Reads the contents of this file starting at the given offset and copies them into the given buffer. +

    Implementations

    impl TaskFile[src]

    pub fn new(taskref: TaskRef) -> TaskFile[src]

    Trait Implementations

    impl File for TaskFile[src]

    fn read(&self, buf: &mut [u8], offset: usize) -> Result<usize, &'static str>[src]

    Reads the contents of this file starting at the given offset and copies them into the given buffer. The length of the given buffer determines the maximum number of bytes to be read. Read more

    -

    fn write(&mut self, _buf: &[u8], _offset: usize) -> Result<usize, &'static str>[src]

    Writes the given buffer to this file starting at the given offset.

    -

    fn size(&self) -> usize[src]

    Returns the size in bytes of this file.

    -

    fn as_mapping(&self) -> Result<&MappedPages, &'static str>[src]

    Returns a view of this file as an immutable memory-mapped region.

    -

    impl FsNode for TaskFile[src]

    fn get_absolute_path(&self) -> String[src]

    Recursively gets the absolute pathname as a String

    -

    fn get_name(&self) -> String[src]

    Returns the string name of the node

    -

    fn get_parent_dir(&self) -> Option<DirRef>[src]

    Returns the parent directory of the current node.

    -

    fn set_parent_dir(&mut self, _: WeakDirRef)[src]

    Sets this node’s parent directory. +

    fn write(&mut self, _buf: &[u8], _offset: usize) -> Result<usize, &'static str>[src]

    Writes the given buffer to this file starting at the given offset.

    +

    fn size(&self) -> usize[src]

    Returns the size in bytes of this file.

    +

    fn as_mapping(&self) -> Result<&MappedPages, &'static str>[src]

    Returns a view of this file as an immutable memory-mapped region.

    +

    impl FsNode for TaskFile[src]

    fn get_absolute_path(&self) -> String[src]

    Recursively gets the absolute pathname as a String

    +

    fn get_name(&self) -> String[src]

    Returns the string name of the node

    +

    fn get_parent_dir(&self) -> Option<DirRef>[src]

    Returns the parent directory of the current node.

    +

    fn set_parent_dir(&mut self, _: WeakDirRef)[src]

    Sets this node’s parent directory. This is useful for ensuring correctness when inserting or remonving files or directories from their parent directory. Read more

    Auto Trait Implementations

    impl Send for TaskFile

    impl Sync for TaskFile

    impl Unpin for TaskFile

    Blanket Implementations

    impl<T> Any for T where
        T: 'static + ?Sized
    [src]

    pub fn type_id(&self) -> TypeId[src]

    Gets the TypeId of self. Read more

    diff --git a/doc/unwind/index.html b/doc/unwind/index.html index e88f769a58..5c995c2232 100644 --- a/doc/unwind/index.html +++ b/doc/unwind/index.html @@ -1,7 +1,7 @@ unwind - Rust

    Crate unwind[][src]

    Expand description

    Support for unwinding the call stack and cleaning up stack frames.

    + Change settings

    Crate unwind[][src]

    Expand description

    Support for unwinding the call stack and cleaning up stack frames.

    Uses DWARF debugging information (.eh_frame and .gcc_except_table sections) from object files. It can also be used to generate stack traces (backtrace) using only that debug information without using frame pointer registers.