KeIpiGenericCall
ULONG_PTR __stdcall KeIpiGenericCall(PKIPI_BROADCAST_WORKER BroadcastFunction, ULONG_PTR Context){
INT64 a5;
unsigned __int8 CurrentIrql;
int v5;
ULONG_PTR v6;
struct _KPRCB *CurrentPrcb;
INT64 a6;
UINT64 SpinCount;
a5 = *(_QWORD *)&Context;
CurrentIrql = KeGetCurrentIrql();
if( CurrentIrql < 0xCu )
{
KeGetCurrentIrql();
__writecr8(0xCui64);
}
LODWORD(SpinCount) = 0;
LODWORD(a6) = KeQueryActiveProcessorCountEx(0xFFFFu);
v5 = a6 - 1;
KxAcquireSpinLock(&KiReverseStallIpiLock);
if( v5 )
KiIpiSendPacket(IpiAllButSelf, 0i64, (INT64)KiIpiGenericCallTarget, (INT64)BroadcastFunction, a5, (INT64)&a6);
while( (_DWORD)a6 != 1 )
KeYieldProcessorEx(&SpinCount);
KeGetCurrentIrql();
__writecr8(0xEui64);
LODWORD(a6) = 0;
v6 = ((__int64(__fastcall *)(INT64))BroadcastFunction)(a5);
if( v5 )
{
if( CurrentIrql <= 0xCu )
__writecr8(0xCui64);
CurrentPrcb = KeGetCurrentPrcb();
while( CurrentPrcb->PacketBarrier )
_mm_pause();
}
KxReleaseSpinLock(&KiReverseStallIpiLock);
__writecr8(CurrentIrql);
return v6;
}Referenced by:
HalpCmciHandler
HalpLbrConfigurationWorker
HalpTimerMeasureAllProcessorFrequencies
HalpTscFallbackToPlatformSource
HalpTscSynchronization
IoInitSystemPreDrivers
KeAdjustInterruptTime
KeRestoreMtrrBroadcast
KeStartProfile
KeStopProfile
KiDynamicProcessorInitialization
KiUpdateNumberProcessors
KiUpdateSavedSupervisorState
MiStackTheftFreezeProcessors
MiZeroPageCalibrate
MmRemoveImportOptimizationForDriverVerifier