[HALX86/APIC] Change IRQL for x86 profile interrupt to HIGH_LEVEL

While PROFILE_LEVEL is defined as 27 on x86, this does not match the vector for the profiling interrupt, which is 0xFD (see https://community.osr.com/t/odd-ioapic-output/45216), implying IRQL 31.
Fixes boot with x86 APIC hal (CORE-20093)
This commit is contained in:
Timo Kreuzer 2025-04-22 16:19:10 +03:00
parent 35fd771c84
commit e452980e0e
2 changed files with 3 additions and 1 deletions

View file

@ -32,6 +32,7 @@
#define IrqlToSoftVector(Irql) ((Irql << 4)|0xf) #define IrqlToSoftVector(Irql) ((Irql << 4)|0xf)
#define TprToIrql(Tpr) ((KIRQL)(Tpr >> 4)) #define TprToIrql(Tpr) ((KIRQL)(Tpr >> 4))
#define CLOCK2_LEVEL CLOCK_LEVEL #define CLOCK2_LEVEL CLOCK_LEVEL
#define APIC_PROFILE_LEVEL PROFILE_LEVEL
#else #else
#define LOCAL_APIC_BASE 0xFFFE0000 #define LOCAL_APIC_BASE 0xFFFE0000
#define IOAPIC_BASE 0xFFFE1000 #define IOAPIC_BASE 0xFFFE1000
@ -54,6 +55,7 @@
#define IrqlToTpr(Irql) (HalpIRQLtoTPR[Irql]) #define IrqlToTpr(Irql) (HalpIRQLtoTPR[Irql])
#define IrqlToSoftVector(Irql) IrqlToTpr(Irql) #define IrqlToSoftVector(Irql) IrqlToTpr(Irql)
#define TprToIrql(Tpr) (HalVectorToIRQL[Tpr >> 4]) #define TprToIrql(Tpr) (HalVectorToIRQL[Tpr >> 4])
#define APIC_PROFILE_LEVEL HIGH_LEVEL
#endif #endif
#define APIC_MAX_IRQ 24 #define APIC_MAX_IRQ 24

View file

@ -63,7 +63,7 @@ HalpInitPhase0(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
HalpEnableInterruptHandler(IDT_DEVICE, HalpEnableInterruptHandler(IDT_DEVICE,
0, 0,
APIC_PROFILE_VECTOR, APIC_PROFILE_VECTOR,
PROFILE_LEVEL, APIC_PROFILE_LEVEL,
HalpProfileInterrupt, HalpProfileInterrupt,
Latched); Latched);
} }