mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-26 11:03:22 +00:00
fix: 检查栈帧大小 (#1126)
* feat: 打开clippy的stack overflow静态检查 *限制栈大小最大为4096字节 *限制栈中的数组最大为1024字节 * fix: 修复部分函数的爆栈问题 (#1172) * fix:修复部分函数的爆栈问题 * feat(filesystem): 重构FAT文件系统重命名和移动文件逻辑 将rename_file_in_same_dir和move_file_to_other_dir函数重构为LockedFATInode的方法,优化代码结构。同时更新clippy配置,添加栈大小和数组大小阈值。 Signed-off-by: longjin <longjin@DragonOS.org> --------- Signed-off-by: longjin <longjin@DragonOS.org> Co-authored-by: longjin <longjin@DragonOS.org> --------- Signed-off-by: longjin <longjin@DragonOS.org> Co-authored-by: DoL <1240800466@qq.com> Co-authored-by: longjin <longjin@DragonOS.org>
This commit is contained in:
@ -102,10 +102,7 @@ impl TSCManager {
|
||||
/// 使用pit、hpet、ptimer来测量CPU总线的频率
|
||||
fn calibrate_cpu_by_pit_hpet_ptimer() -> Result<u64, SystemError> {
|
||||
let hpet = is_hpet_enabled();
|
||||
debug!(
|
||||
"Calibrating TSC with {}",
|
||||
if hpet { "HPET" } else { "PMTIMER" }
|
||||
);
|
||||
log_for_hpet(hpet);
|
||||
|
||||
let mut tsc_pit_min = u64::MAX;
|
||||
let mut tsc_ref_min = u64::MAX;
|
||||
@ -389,3 +386,12 @@ impl TSCManager {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// # 从calibrate_cpu_by_pit_hpet_ptimer 解耦出,减少calibrate_cpu_by_pit_hpet_ptimer的栈帧
|
||||
#[inline(never)]
|
||||
fn log_for_hpet(hpet: bool) {
|
||||
debug!(
|
||||
"Calibrating TSC with {}",
|
||||
if hpet { "HPET" } else { "PMTIMER" }
|
||||
);
|
||||
}
|
||||
|
@ -294,6 +294,13 @@ interrupt_handler!(255);
|
||||
|
||||
#[inline(never)]
|
||||
pub unsafe fn arch_setup_interrupt_gate() {
|
||||
arch_setup_interrupt_gate_32_130();
|
||||
arch_setup_interrupt_gate_131_255();
|
||||
}
|
||||
|
||||
/// # 从arch_setup_interrupt_gate()解耦出,避免函数体过大导致爆栈
|
||||
#[inline(never)]
|
||||
unsafe fn arch_setup_interrupt_gate_32_130() {
|
||||
set_intr_gate(32, 0, VirtAddr::new(irq_handler32 as usize));
|
||||
set_intr_gate(33, 0, VirtAddr::new(irq_handler33 as usize));
|
||||
set_intr_gate(34, 0, VirtAddr::new(irq_handler34 as usize));
|
||||
@ -401,7 +408,11 @@ pub unsafe fn arch_setup_interrupt_gate() {
|
||||
set_intr_gate(127, 0, VirtAddr::new(irq_handler127 as usize));
|
||||
set_intr_gate(129, 0, VirtAddr::new(irq_handler129 as usize));
|
||||
set_intr_gate(130, 0, VirtAddr::new(irq_handler130 as usize));
|
||||
}
|
||||
|
||||
/// # 从arch_setup_interrupt_gate()解耦出,避免函数体过大导致爆栈
|
||||
#[inline(never)]
|
||||
unsafe fn arch_setup_interrupt_gate_131_255() {
|
||||
set_intr_gate(131, 0, VirtAddr::new(irq_handler131 as usize));
|
||||
set_intr_gate(132, 0, VirtAddr::new(irq_handler132 as usize));
|
||||
set_intr_gate(133, 0, VirtAddr::new(irq_handler133 as usize));
|
||||
|
@ -546,7 +546,7 @@ unsafe fn allocator_init() {
|
||||
compiler_fence(Ordering::SeqCst);
|
||||
mapper.make_current();
|
||||
compiler_fence(Ordering::SeqCst);
|
||||
debug!("New page table enabled");
|
||||
//debug!("New page table enabled");
|
||||
}
|
||||
debug!("Successfully enabled new page table");
|
||||
}
|
||||
|
Reference in New Issue
Block a user