Critical section macro
This commit is contained in:
parent
f569497776
commit
1bd0c60b93
@ -2,10 +2,8 @@ use x86_64::structures::gdt::{Descriptor, GlobalDescriptorTable};
|
|||||||
|
|
||||||
use lazy_static::lazy_static;
|
use lazy_static::lazy_static;
|
||||||
|
|
||||||
use super::asm::*;
|
|
||||||
|
|
||||||
use crate::log::{LOGGER, LogLevel};
|
use crate::log::{LOGGER, LogLevel};
|
||||||
use crate::{format, log_trace};
|
use crate::{critical_section, format, log_trace};
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
pub static ref GDT: GlobalDescriptorTable = {
|
pub static ref GDT: GlobalDescriptorTable = {
|
||||||
@ -15,16 +13,13 @@ lazy_static! {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
pub fn setup_gdt() {
|
pub fn setup_gdt() {
|
||||||
unsafe {
|
critical_section!({
|
||||||
interrupt_disable();
|
GDT.load();
|
||||||
}
|
log_trace!(
|
||||||
GDT.load();
|
"GDT: Setting up global descriptor table at 0x{:x}",
|
||||||
log_trace!(
|
core::ptr::addr_of!(GDT) as usize
|
||||||
"GDT: Setting up global descriptor table at 0x{:x}",
|
);
|
||||||
core::ptr::addr_of!(GDT) as usize
|
});
|
||||||
);
|
|
||||||
unsafe {
|
|
||||||
interrupt_enable();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -4,8 +4,6 @@
|
|||||||
use lazy_static::lazy_static;
|
use lazy_static::lazy_static;
|
||||||
use x86_64::structures::idt::*;
|
use x86_64::structures::idt::*;
|
||||||
|
|
||||||
use crate::log_error;
|
|
||||||
use crate::log::*;
|
|
||||||
use crate::format;
|
use crate::format;
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
@ -17,5 +15,5 @@ lazy_static! {
|
|||||||
}
|
}
|
||||||
|
|
||||||
extern "x86-interrupt" fn double_fault(info: InterruptStackFrame, _: u64) -> ! {
|
extern "x86-interrupt" fn double_fault(info: InterruptStackFrame, _: u64) -> ! {
|
||||||
crate::interrupt::double_fault(&format!("{:#?}", info));
|
crate::interrupt::double_fault(&format!("{info:#?}"));
|
||||||
}
|
}
|
@ -16,10 +16,9 @@ mod log;
|
|||||||
mod memory;
|
mod memory;
|
||||||
mod panic;
|
mod panic;
|
||||||
mod process;
|
mod process;
|
||||||
|
#[macro_use]
|
||||||
|
mod util;
|
||||||
|
|
||||||
#[cfg(target_arch = "x86_64")]
|
|
||||||
use arch::x86_64::gdt;
|
|
||||||
use arch::x86_64::interrupts::IDT;
|
|
||||||
#[cfg(target_arch = "x86_64")]
|
#[cfg(target_arch = "x86_64")]
|
||||||
use arch::x86_64::serial::Serialport;
|
use arch::x86_64::serial::Serialport;
|
||||||
|
|
||||||
|
@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! critical_section {
|
||||||
|
($b:block) => {
|
||||||
|
unsafe { $crate::arch::asm::interrupt_disable(); }
|
||||||
|
$b
|
||||||
|
unsafe { $crate::arch::asm::interrupt_enable(); }
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user