#ifndef __ASM__
extern LARGE_INTEGER SystemBootTime;
-extern ULONG KiKernelTime;
-extern ULONG KiUserTime;
-extern ULONG KiDpcTime;
+extern volatile ULONG KiKernelTime;
+extern volatile ULONG KiUserTime;
+extern volatile ULONG KiDpcTime;
#endif
/* INTERNAL KERNEL FUNCTIONS ************************************************/
VOID
KiDumpTrapFrame(PKTRAP_FRAME Tf, ULONG ExceptionNr, ULONG cr2);
+VOID
+KiUpdateProcessThreadTime(VOID);
+
#endif /* not __ASM__ */
#define MAXIMUM_PROCESSORS 32
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-/* $Id: irq.c,v 1.41 2004/03/09 21:49:53 dwelch Exp $
+/* $Id: irq.c,v 1.42 2004/04/14 23:32:38 jimtabor Exp $
*
* PROJECT: ReactOS kernel
* FILE: ntoskrnl/ke/i386/irq.c
HalEndSystemInterrupt (old_level, 0);
+ if (old_level==PASSIVE_LEVEL)
+ {
+ KiUpdateProcessThreadTime();
+ }
+
if (old_level==PASSIVE_LEVEL && Trapframe->Cs != KERNEL_CS)
{
CurrentThread = KeGetCurrentThread();
-/* $Id: timer.c,v 1.69 2004/04/14 17:14:45 jimtabor Exp $
+/* $Id: timer.c,v 1.70 2004/04/14 23:32:37 jimtabor Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
LARGE_INTEGER SystemBootTime = { 0 };
#endif
-ULONG KiKernelTime;
-ULONG KiUserTime;
-ULONG KiDpcTime;
+volatile ULONG KiKernelTime;
+volatile ULONG KiUserTime;
+volatile ULONG KiDpcTime;
/*
* Number of timer interrupts since initialisation
*/
{
LARGE_INTEGER Time;
-/*
- PKTHREAD CurrentThread;
- PKPROCESS CurrentProcess;
- */
+
assert(KeGetCurrentIrql() == PROFILE_LEVEL);
KiRawTicks++;
SharedUserData->SystemTime.LowPart = Time.u.LowPart;
SharedUserData->SystemTime.High1Part = Time.u.HighPart;
-/*
- CurrentThread = KeGetCurrentThread();
- CurrentProcess = KeGetCurrentProcess();
-
- if (CurrentThread->PreviousMode == UserMode)
- {
- ++CurrentThread->UserTime;
- ++CurrentProcess->UserTime;
- ++KiUserTime;
- }
- if (CurrentThread->PreviousMode == KernelMode)
- {
- ++CurrentProcess->KernelTime;
- ++CurrentThread->KernelTime;
- ++KiKernelTime;
- }
- */
-
KiReleaseSpinLock(&TimerValueLock);
/*
TimerInitDone = TRUE;
DPRINT("Finished KeInitializeTimerImpl()\n");
}
+
+
+VOID
+KiUpdateProcessThreadTime(VOID)
+{
+ PKTHREAD CurrentThread;
+ PKPROCESS CurrentProcess;
+
+ assert(KeGetCurrentIrql() == PASSIVE_LEVEL);
+
+ CurrentThread = KeGetCurrentThread();
+ CurrentProcess = KeGetCurrentProcess();
+
+ DPRINT("KiKernelTime %u, KiUserTime %u \n", KiKernelTime, KiUserTime);
+
+ if (CurrentThread->PreviousMode == UserMode)
+ {
+ ++CurrentThread->UserTime;
+ ++CurrentProcess->UserTime;
+ ++KiUserTime;
+ }
+ if (CurrentThread->PreviousMode == KernelMode)
+ {
+ ++CurrentProcess->KernelTime;
+ ++CurrentThread->KernelTime;
+ ++KiKernelTime;
+ }
+}