mirror of
https://github.com/reactos/reactos.git
synced 2024-09-28 05:26:58 +00:00
[HAL] Eliminate tail calls from HalpHardwareInterruptLevel. CORE-14076
This commit is contained in:
parent
b4453242f7
commit
888ace4397
|
@ -75,5 +75,6 @@ DEFINE_END_INTERRUPT_WRAPPER HalpEndSoftwareInterrupt, HalpEndSoftwareInterrupt2
|
||||||
DEFINE_END_INTERRUPT_WRAPPER HalEndSystemInterrupt, HalEndSystemInterrupt2
|
DEFINE_END_INTERRUPT_WRAPPER HalEndSystemInterrupt, HalEndSystemInterrupt2
|
||||||
|
|
||||||
DEFINE_INTERRUPT_WRAPPER HalpDispatchInterrupt, HalpDispatchInterrupt2
|
DEFINE_INTERRUPT_WRAPPER HalpDispatchInterrupt, HalpDispatchInterrupt2
|
||||||
|
DEFINE_INTERRUPT_WRAPPER HalpHardwareInterruptLevel, HalpHardwareInterruptLevel2
|
||||||
|
|
||||||
END
|
END
|
||||||
|
|
|
@ -1015,9 +1015,9 @@ HalpDismissIrq07Level(IN KIRQL Irql,
|
||||||
return _HalpDismissIrqLevel(Irql, Irq, OldIrql);
|
return _HalpDismissIrqLevel(Irql, Irq, OldIrql);
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID
|
PHAL_SW_INTERRUPT_HANDLER
|
||||||
__cdecl
|
__cdecl
|
||||||
HalpHardwareInterruptLevel(VOID)
|
HalpHardwareInterruptLevel2(VOID)
|
||||||
{
|
{
|
||||||
PKPCR Pcr = KeGetPcr();
|
PKPCR Pcr = KeGetPcr();
|
||||||
ULONG PendingIrqlMask, PendingIrql;
|
ULONG PendingIrqlMask, PendingIrql;
|
||||||
|
@ -1027,7 +1027,7 @@ HalpHardwareInterruptLevel(VOID)
|
||||||
if (PendingIrqlMask)
|
if (PendingIrqlMask)
|
||||||
{
|
{
|
||||||
/* Check for in-service delayed interrupt */
|
/* Check for in-service delayed interrupt */
|
||||||
if (Pcr->IrrActive & 0xFFFFFFF0) return;
|
if (Pcr->IrrActive & 0xFFFFFFF0) return NULL;
|
||||||
|
|
||||||
/* Check if pending IRQL affects hardware state */
|
/* Check if pending IRQL affects hardware state */
|
||||||
BitScanReverse(&PendingIrql, PendingIrqlMask);
|
BitScanReverse(&PendingIrql, PendingIrqlMask);
|
||||||
|
@ -1036,8 +1036,10 @@ HalpHardwareInterruptLevel(VOID)
|
||||||
Pcr->IRR ^= (1 << PendingIrql);
|
Pcr->IRR ^= (1 << PendingIrql);
|
||||||
|
|
||||||
/* Now handle pending interrupt */
|
/* Now handle pending interrupt */
|
||||||
SWInterruptHandlerTable[PendingIrql]();
|
return SWInterruptHandlerTable[PendingIrql];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SYSTEM INTERRUPTS **********************************************************/
|
/* SYSTEM INTERRUPTS **********************************************************/
|
||||||
|
|
Loading…
Reference in a new issue