mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-23 20:33:23 +00:00
完成中断管理模块重构 (#554)
- 支持中断共享 - 把现有驱动程序移植到新的irq模块 - 使用`ProcessorId`标识处理器id - 尚未实现threaded_irq 性能上,edge irq flow handler里面,对于锁的使用,可能有点问题。为了获取/修改common data还有其他几个结构体的状态,进行了多次加锁和放锁,导致性能降低。这是接下来需要优化的点。
This commit is contained in:
@ -32,24 +32,24 @@ pub unsafe fn switch_fs_and_gs(fs: SegmentSelector, gs: SegmentSelector) {
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct TSSManager {
|
||||
tss: [TaskStateSegment; PerCpu::MAX_CPU_NUM],
|
||||
tss: [TaskStateSegment; PerCpu::MAX_CPU_NUM as usize],
|
||||
}
|
||||
|
||||
impl TSSManager {
|
||||
const fn new() -> Self {
|
||||
return Self {
|
||||
tss: [TaskStateSegment::new(); PerCpu::MAX_CPU_NUM],
|
||||
tss: [TaskStateSegment::new(); PerCpu::MAX_CPU_NUM as usize],
|
||||
};
|
||||
}
|
||||
|
||||
/// 获取当前CPU的TSS
|
||||
pub unsafe fn current_tss() -> &'static mut TaskStateSegment {
|
||||
&mut TSS_MANAGER.tss[smp_get_processor_id() as usize]
|
||||
&mut TSS_MANAGER.tss[smp_get_processor_id().data() as usize]
|
||||
}
|
||||
|
||||
/// 加载当前CPU的TSS
|
||||
pub unsafe fn load_tr() {
|
||||
let index = (10 + smp_get_processor_id() * 2) as u16;
|
||||
let index = (10 + smp_get_processor_id().data() * 2) as u16;
|
||||
let selector = SegmentSelector::new(index, Ring::Ring0);
|
||||
|
||||
Self::set_tss_descriptor(
|
||||
|
Reference in New Issue
Block a user