[NTOS:KE]

- Reset DebugDpcTime before calling timer DPC routines. Avoids spurious "DPC routine > 1 sec" break-ins.

svn path=/trunk/; revision=74384
This commit is contained in:
Thomas Faber 2017-04-20 17:36:40 +00:00
parent ec2dddf4cb
commit 1836858f0a

View file

@ -92,9 +92,7 @@ KiTimerExpiration(IN PKDPC Dpc,
ULONG Period;
DPC_QUEUE_ENTRY DpcEntry[MAX_TIMER_DPCS];
PKSPIN_LOCK_QUEUE LockQueue;
#ifdef CONFIG_SMP
PKPRCB Prcb = KeGetCurrentPrcb();
#endif
/* Disable interrupts */
_disable();
@ -227,6 +225,11 @@ KiTimerExpiration(IN PKDPC Dpc,
/* Start looping all DPC Entries */
for (i = 0; DpcCalls; DpcCalls--, i++)
{
#if DBG
/* Clear DPC Time */
Prcb->DebugDpcTime = 0;
#endif
/* Call the DPC */
DpcEntry[i].Routine(DpcEntry[i].Dpc,
DpcEntry[i].Context,
@ -270,6 +273,11 @@ KiTimerExpiration(IN PKDPC Dpc,
/* Start looping all DPC Entries */
for (i = 0; DpcCalls; DpcCalls--, i++)
{
#if DBG
/* Clear DPC Time */
Prcb->DebugDpcTime = 0;
#endif
/* Call the DPC */
DpcEntry[i].Routine(DpcEntry[i].Dpc,
DpcEntry[i].Context,
@ -303,6 +311,11 @@ KiTimerExpiration(IN PKDPC Dpc,
/* Start looping all DPC Entries */
for (i = 0; DpcCalls; DpcCalls--, i++)
{
#if DBG
/* Clear DPC Time */
Prcb->DebugDpcTime = 0;
#endif
/* Call the DPC */
DpcEntry[i].Routine(DpcEntry[i].Dpc,
DpcEntry[i].Context,
@ -333,9 +346,7 @@ KiTimerListExpire(IN PLIST_ENTRY ExpiredListHead,
PKDPC TimerDpc;
ULONG Period;
DPC_QUEUE_ENTRY DpcEntry[MAX_TIMER_DPCS];
#ifdef CONFIG_SMP
PKPRCB Prcb = KeGetCurrentPrcb();
#endif
/* Query system */
KeQuerySystemTime((PLARGE_INTEGER)&SystemTime);
@ -427,6 +438,11 @@ KiTimerListExpire(IN PLIST_ENTRY ExpiredListHead,
/* Start looping all DPC Entries */
for (i = 0; DpcCalls; DpcCalls--, i++)
{
#if DBG
/* Clear DPC Time */
Prcb->DebugDpcTime = 0;
#endif
/* Call the DPC */
DpcEntry[i].Routine(DpcEntry[i].Dpc,
DpcEntry[i].Context,