Fix high interrupt ISRs master
authorJack Miller <Jack.Miller@amd.com>
Thu, 11 Apr 2019 22:57:21 +0000 (17:57 -0500)
committerJack Miller <jack@codezen.org>
Fri, 12 Apr 2019 17:05:39 +0000 (12:05 -0500)
Backport from DREX. We rely on base ISRs all being the same size but
since we push the interrupt vector, pushing a constant >= 128 is a
longer instruction. So bump ISR_SIZE to 12 and nop pad the lower ISRs.

asm/idt.asm
include/asm/idt.h

index cb05bb5..a3669b1 100644 (file)
     nop  // push is 2 bytes, nop is 1 byte
 .endif
     pushq $\num
+.if \num < 0x80
+    nop
+    nop
+    nop
+.endif
     jmp exception
 .endm
 
index a1b21a4..e9cb8ef 100644 (file)
@@ -9,7 +9,7 @@
 #define FLAG_R0                (0 << 5)    // Rings 0 - 3
 #define FLAG_P          (1 << 7)
 #define IDT_ENTRIES     256
-#define ISR_SIZE       9
+#define ISR_SIZE       12
 
 #ifdef __ASSEMBLY__
 #define IDTENTRY(isr)                          \