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:
YJwu2023
2025-05-26 17:33:25 +08:00
committed by GitHub
parent a56444e1ad
commit ef9c935732
9 changed files with 117 additions and 71 deletions

View File

@ -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" }
);
}

View File

@ -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));

View File

@ -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");
}