static BOOLEAN KdbpCmdDmesg(ULONG Argc, PCHAR Argv[]);
BOOLEAN ExpKdbgExtPool(ULONG Argc, PCHAR Argv[]);
+BOOLEAN ExpKdbgExtPoolUsed(ULONG Argc, PCHAR Argv[]);
#ifdef __ROS_DWARF__
static BOOLEAN KdbpCmdPrintStruct(ULONG Argc, PCHAR Argv[]);
{ "dmesg", "dmesg", "Display debug messages on screen, with navigation on pages.", KdbpCmdDmesg },
{ "kmsg", "kmsg", "Kernel dmesg. Alias for dmesg.", KdbpCmdDmesg },
{ "help", "help", "Display help screen.", KdbpCmdHelp },
- { "!pool", "!pool [Address [Flags]]", "Display information about pool allocations.", ExpKdbgExtPool }
+ { "!pool", "!pool [Address [Flags]]", "Display information about pool allocations.", ExpKdbgExtPool },
+ { "!poolused", "!poolused", "Display non-paged pool usage.", ExpKdbgExtPoolUsed },
};
/* FUNCTIONS *****************************************************************/
return FALSE;
}
+#define MiDumperPrint(dbg, fmt, ...) \
+ if (dbg) KdbpPrint(fmt, ##__VA_ARGS__); \
+ else DPRINT1(fmt, ##__VA_ARGS__)
+
VOID
-MiDumpNonPagedPoolConsumers(VOID)
+MiDumpNonPagedPoolConsumers(BOOLEAN CalledFromDbg)
{
SIZE_T i;
- DPRINT1("---------------------\n");
- DPRINT1("Out of memory dumper!\n");
+ //
+ // Only print header if called from OOM situation
+ //
+ if (!CalledFromDbg)
+ {
+ DPRINT1("---------------------\n");
+ DPRINT1("Out of memory dumper!\n");
+ }
//
// We'll extract allocations for all the tracked pools
//
// Print in reversed order to match what is in source code
//
- DPRINT1("Tag: '%c%c%c%c', Size: %ld\n", Tag[3], Tag[2], Tag[1], Tag[0], TableEntry->NonPagedBytes);
+ MiDumperPrint(CalledFromDbg, "Tag: '%c%c%c%c', Size: %ld\n", Tag[3], Tag[2], Tag[1], Tag[0], TableEntry->NonPagedBytes);
}
else
{
- DPRINT1("Tag: %x, Size: %ld\n", TableEntry->Key, TableEntry->NonPagedBytes);
+ MiDumperPrint(CalledFromDbg, "Tag: %x, Size: %ld\n", TableEntry->Key, TableEntry->NonPagedBytes);
}
}
else
{
- DPRINT1("Anon, Size: %ld\n", TableEntry->NonPagedBytes);
+ MiDumperPrint(CalledFromDbg, "Anon, Size: %ld\n", TableEntry->NonPagedBytes);
}
}
}
- DPRINT1("---------------------\n");
+ if (!CalledFromDbg)
+ {
+ DPRINT1("---------------------\n");
+ }
}
#endif
//
if ((OriginalType & BASE_POOL_TYPE_MASK) == NonPagedPool)
{
- MiDumpNonPagedPoolConsumers();
+ MiDumpNonPagedPoolConsumers(FALSE);
}
#endif
//
if ((OriginalType & BASE_POOL_TYPE_MASK) == NonPagedPool)
{
- MiDumpNonPagedPoolConsumers();
+ MiDumpNonPagedPoolConsumers(FALSE);
}
#endif
return TRUE;
}
+BOOLEAN
+ExpKdbgExtPoolUsed(
+ ULONG Argc,
+ PCHAR Argv[])
+{
+ MiDumpNonPagedPoolConsumers(TRUE);
+
+ return TRUE;
+}
+
#endif // DBG && KDBG
/* EOF */