[NTOS:KE] Implement KeI386VirtualIntExtensions code paths for INT and IRET. CORE-19049 (#7742)

Co-authored-by: Thomas Faber <thomas.faber@reactos.org>
Co-authored-by: Hermès BÉLUSCA - MAÏTO <hermes.belusca-maito@reactos.org>

Continued from PR #6070

JIRA issue: CORE-19049
This commit is contained in:
Justin Miller 2025-03-12 05:24:36 -07:00 committed by GitHub
parent 5c505d9a9b
commit 656a5dcc1f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -191,13 +191,21 @@ KiVdmOpcodeINTnn(IN PKTRAP_FRAME TrapFrame,
V86EFlags &= (EFLAGS_ALIGN_CHECK | EFLAGS_INTERRUPT_MASK);
/* Check for VME support */
ASSERT(KeI386VirtualIntExtensions == FALSE);
if (KeI386VirtualIntExtensions)
{
/* Set IF based on VIF */
V86EFlags &= ~EFLAGS_INTERRUPT_MASK;
if (TrapEFlags & EFLAGS_VIF)
{
V86EFlags |= EFLAGS_INTERRUPT_MASK;
}
}
/* Mask in the relevant V86 EFlags into the trap flags */
V86EFlags |= (TrapEFlags & ~EFLAGS_INTERRUPT_MASK);
/* And mask out the VIF, nested task and TF flag from the trap flags */
TrapFrame->EFlags = TrapEFlags &~ (EFLAGS_VIF | EFLAGS_NESTED_TASK | EFLAGS_TF);
TrapFrame->EFlags = TrapEFlags & ~(EFLAGS_VIF | EFLAGS_NESTED_TASK | EFLAGS_TF);
/* Add the IOPL flag to the local trap flags */
V86EFlags |= EFLAGS_IOPL;
@ -299,11 +307,17 @@ KiVdmOpcodeIRET(IN PKTRAP_FRAME TrapFrame,
}
/* Mask out EFlags */
EFlags &= ~(EFLAGS_IOPL + EFLAGS_VIF + EFLAGS_NESTED_TASK + EFLAGS_VIP);
EFlags &= ~(EFLAGS_VIP | EFLAGS_VIF | EFLAGS_NESTED_TASK | EFLAGS_IOPL);
V86EFlags = EFlags;
/* Check for VME support */
ASSERT(KeI386VirtualIntExtensions == FALSE);
if (KeI386VirtualIntExtensions)
{
if (EFlags & EFLAGS_INTERRUPT_MASK)
{
EFlags |= EFLAGS_VIF;
}
}
/* Add V86 and Interrupt flag */
EFlags |= EFLAGS_V86_MASK | EFLAGS_INTERRUPT_MASK;