From d9317dd348f3acd853d1e6a09c09f2a27ad5d707 Mon Sep 17 00:00:00 2001 From: Ron Dreslinski Date: Wed, 9 Feb 2005 10:27:00 -0500 Subject: Some more useful debugging info for kernel panic and die events Increase the default number of CSHR's, we should really fix this or make it a parameter Use a setBlocked call to tell the bus it should block New technique for sampling and switchover: 1) Sampler switchover event happens 2) All cpus in the current phase of sampling associated with this sampler are signaled to switchover 3) Each cpu drains it's pipe of things being executed (stops fetching and waits for empty pipe) 4) Once the pipe is empty the cpu calls back to the sampler to signal it has finished, and moves into the switchedout state (continues not to fetch) 5) The sampler collects all the signals, once all cpus are drained it calls the new cpu's in the next phase to takeover from the correct cpu 6) The statistics are reset and the next switchover time is calculated from this point cpu/base_cpu.cc: cpu/base_cpu.hh: cpu/simple_cpu/simple_cpu.cc: cpu/simple_cpu/simple_cpu.hh: Reconfigure the way the sampling switchover works cpu/pc_event.cc: More debugging information on kernel panic's kern/linux/linux_system.cc: More debug info for Kernel Die events kern/linux/linux_system.hh: More debug info for kernel die events --HG-- extra : convert_revision : 61cc42e43ba738705aa1f1d167b65d4d6dee51ae --- kern/linux/linux_system.cc | 11 +++++++++-- kern/linux/linux_system.hh | 5 ++++- 2 files changed, 13 insertions(+), 3 deletions(-) (limited to 'kern') diff --git a/kern/linux/linux_system.cc b/kern/linux/linux_system.cc index 401b4ef44..4ac03143e 100644 --- a/kern/linux/linux_system.cc +++ b/kern/linux/linux_system.cc @@ -102,12 +102,19 @@ LinuxSystem::LinuxSystem(Params *p) } else panic("could not find dp264_mv\n"); -#ifdef DEBUG +#ifndef NDEBUG kernelPanicEvent = new BreakPCEvent(&pcEventQueue, "kernel panic"); if (kernelSymtab->findAddress("panic", addr)) kernelPanicEvent->schedule(addr); else panic("could not find kernel symbol \'panic\'"); + + kernelDieEvent = new BreakPCEvent(&pcEventQueue, "die if kernel"); + if (kernelSymtab->findAddress("die_if_kernel", addr)) + kernelDieEvent->schedule(addr); + else + panic("could not find kernel symbol \'die_if_kernel\'"); + #endif /** @@ -174,7 +181,7 @@ LinuxSystem::LinuxSystem(Params *p) LinuxSystem::~LinuxSystem() { -#ifdef DEBUG +#ifndef NDEBUG delete kernelPanicEvent; #endif delete skipIdeDelay50msEvent; diff --git a/kern/linux/linux_system.hh b/kern/linux/linux_system.hh index 5e3cba9b3..905b0ee70 100644 --- a/kern/linux/linux_system.hh +++ b/kern/linux/linux_system.hh @@ -57,9 +57,12 @@ class PrintThreadInfo; class LinuxSystem : public System { private: -#ifdef DEBUG +#ifndef NDEBUG /** Event to halt the simulator if the kernel calls panic() */ BreakPCEvent *kernelPanicEvent; + + /** Event to halt the simulator if the kernel calls die_if_kernel */ + BreakPCEvent *kernelDieEvent; #endif /** -- cgit v1.2.3