浏览代码

调整local apic向量表的大小

fslongjin 2 年之前
父节点
当前提交
23b3f4c712
共有 3 个文件被更改,包括 9 次插入7 次删除
  1. 1 1
      kernel/driver/interrupt/apic/apic.c
  2. 1 1
      kernel/exception/irq.c
  3. 7 5
      kernel/exception/irq.h

+ 1 - 1
kernel/driver/interrupt/apic/apic.c

@@ -488,7 +488,7 @@ void do_IRQ(struct pt_regs *rsp, ul number)
                 irq->handler(number, irq->parameter, rsp);
         }
     }
-    else if (number >= 150 && number < 160)
+    else if (number >= 150 && number < 200)
     {
         irq_desc_t *irq = &local_apic_interrupt_desc[number - 150];
 

+ 1 - 1
kernel/exception/irq.c

@@ -191,7 +191,7 @@ int irq_register(ul irq_num, void *arg, void (*handler)(ul irq_num, ul parameter
     irq_desc_t *p = NULL;
     if (irq_num >= 32 && irq_num < 0x80)
         p = &interrupt_desc[irq_num - 32];
-    else if (irq_num >= 150 && irq_num < 160)
+    else if (irq_num >= 150 && irq_num < 200)
         p = &local_apic_interrupt_desc[irq_num - 150];
     else
     {

+ 7 - 5
kernel/exception/irq.h

@@ -15,8 +15,10 @@
 
 #include <process/ptrace.h>
 
+#define IRQ_NUM 24
 #define SMP_IRQ_NUM 10
-#define LOCAL_APIC_IRQ_NUM 10
+#define LOCAL_APIC_IRQ_NUM 50
+
 extern void (*interrupt_table[24])(void);
 extern void do_IRQ(struct pt_regs *regs, ul number);
 
@@ -84,7 +86,7 @@ extern void (*local_apic_interrupt_table[LOCAL_APIC_IRQ_NUM])(void);
 0x80		system call
 0x81		system interrupt 系统中断
 
-150 ~   200	Local APIC
+[150,200)	Local APIC
 	150	CMCI
 	151	Timer
 	152	Thermal Monitor
@@ -127,10 +129,10 @@ typedef struct
     ul flags;
 } irq_desc_t;
 
-#define IRQ_NUM 24
-// 这个表一定要放在这里,否则在HPET初始化后收到中断,会产生page fault
+
+// 这个表一定要放在这里,否则在HPET初始化后收到中断,会产生page fault
 irq_desc_t interrupt_desc[IRQ_NUM] = {0};
-irq_desc_t local_apic_interrupt_desc[20] = {0};
+irq_desc_t local_apic_interrupt_desc[LOCAL_APIC_IRQ_NUM] = {0};
 irq_desc_t SMP_IPI_desc[SMP_IRQ_NUM] = {0};