|
|
/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
memlog.h
Abstract:
in memory logging facility
Author:
Charlie Wickham (charlwi) 17-Mar-1997
Revision History:
--*/
#ifndef _MEMLOG_
#define _MEMLOG_
/* Prototypes */ /* End Prototypes */
#ifdef MEMLOGGING
typedef struct _MEMLOG_ENTRY { LARGE_INTEGER SysTime; USHORT Type; USHORT LineNo; ULONG_PTR Arg1; ULONG_PTR Arg2; } MEMLOG_ENTRY, *PMEMLOG_ENTRY;
//
// Do not change the order of
//
// MemLogReceivedPacket,
// MemLogReceivedPacket1,
//
// MemLogMissedIfHB,
// MemLogMissedIfHB1,
//
// MemLogFailingIf,
// MemLogFailingIf1,
//
// MEMLOG4 relies on MemLogFailingIf1 = MemLogFailingIf + 1, etc
//
typedef enum _MEMLOG_TYPES { MemLogInitLog = 1, MemLogInitHB, MemLogHBStarted, MemLogHBStopped, MemLogHBDpcRunning, MemLogWaitForDpcFinish, MemLogMissedIfHB, MemLogMissedIfHB1, MemLogFailingIf, MemLogFailingIf1, MemLogSendHBWalkNode, MemLogCheckHBWalkNode, MemLogCheckHBNodeReachable, MemLogCheckHBMissedHB, MemLogSendingHB, MemLogNodeDown, MemLogSetDpcEvent, MemLogNoNetID, MemLogOnlineIf, MemLogSeqAckMismatch, MemLogNodeUp, MemLogReceivedPacket, MemLogReceivedPacket1, MemLogDpcTimeSkew, MemLogHBPacketSend, MemLogHBPacketSendComplete, MemLogPoisonPktReceived, MemLogOuterscreen, MemLogNodeDownIssued, MemLogRegroupFinished, MemLogInconsistentStates, MemLogOutOfSequence, MemLogInvalidSignature, MemLogSignatureSize, MemLogNoSecurityContext, MemLogPacketSendFailed } MEMLOG_TYPES;
extern ULONG MemLogEntries; extern ULONG MemLogNextLogEntry;
extern PMEMLOG_ENTRY MemLog; extern KSPIN_LOCK MemLogLock;
#define _MEMLOG( _type, _arg1, _arg2 ) \
{ \ KIRQL MemLogIrql; \ if ( MemLogEntries ) { \ KeAcquireSpinLock( &MemLogLock, &MemLogIrql ); \ KeQuerySystemTime( &MemLog[ MemLogNextLogEntry ].SysTime ); \ MemLog[ MemLogNextLogEntry ].Type = _type; \ MemLog[ MemLogNextLogEntry ].LineNo = __LINE__; \ MemLog[ MemLogNextLogEntry ].Arg1 = _arg1; \ MemLog[ MemLogNextLogEntry ].Arg2 = _arg2; \ if ( ++MemLogNextLogEntry == MemLogEntries ) \ MemLogNextLogEntry = 0; \ MemLog[ MemLogNextLogEntry ].Type = 0; \ KeReleaseSpinLock( &MemLogLock, MemLogIrql ); \ } \ }
#else // MEMLOGGING
#define _MEMLOG( _type, _arg1, _arg2 )
#endif // MEMLOGGING
#define MEMLOG( _type, _arg1, _arg2 ) \
{ \ _MEMLOG( _type, _arg1, _arg2 ); \ }
#define MEMLOG4( _type, _arg3, _arg4 , _arg1, _arg2 ) \
{ \ _MEMLOG( _type + 1, _arg3, _arg4 ); \ _MEMLOG( _type, _arg1, _arg2 ); \ }
#endif /* _MEMLOG_ */
/* end memlog.h */
|