diff options
author | Ali Saidi <saidi@eecs.umich.edu> | 2004-09-24 14:16:51 -0400 |
---|---|---|
committer | Ali Saidi <saidi@eecs.umich.edu> | 2004-09-24 14:16:51 -0400 |
commit | a7c089ab06c863c794f2096a2c321b7e31ead5b6 (patch) | |
tree | a4e769b5ee9df89c2cfac47b9af56f4fa3e29d10 /kern/linux | |
parent | ac422ac949ac792da48bdd1417dc53d9850943ff (diff) | |
download | gem5-a7c089ab06c863c794f2096a2c321b7e31ead5b6.tar.xz |
only set stuff up for binning interrupts if interrupt binning is on
kern/linux/linux_system.cc:
Don't scheduling interrupt events if we are not binning interrupts
kern/tru64/tru64_system.cc:
set the bin_int boolean in the system structure
--HG--
extra : convert_revision : 68eea9c448f1c481fc79be1777acb536d6385495
Diffstat (limited to 'kern/linux')
-rw-r--r-- | kern/linux/linux_system.cc | 47 |
1 files changed, 25 insertions, 22 deletions
diff --git a/kern/linux/linux_system.cc b/kern/linux/linux_system.cc index fd5d48195..12bfafd6b 100644 --- a/kern/linux/linux_system.cc +++ b/kern/linux/linux_system.cc @@ -145,29 +145,32 @@ LinuxSystem::LinuxSystem(Params *p) printThreadEvent->schedule(addr + sizeof(MachInst) * 6); intStartEvent = new InterruptStartEvent(&pcEventQueue, "intStartEvent"); - if (palSymtab->findAddress("sys_int_21", addr)) - intStartEvent->schedule(addr + sizeof(MachInst) * 2); - else - panic("could not find symbol: sys_int_21\n"); - - intEndEvent = new InterruptEndEvent(&pcEventQueue, "intEndEvent"); - if (palSymtab->findAddress("rti_to_kern", addr)) - intEndEvent->schedule(addr) ; - else - panic("could not find symbol: rti_to_kern\n"); - - intEndEvent2 = new InterruptEndEvent(&pcEventQueue, "intEndEvent2"); - if (palSymtab->findAddress("rti_to_user", addr)) - intEndEvent2->schedule(addr); - else - panic("could not find symbol: rti_to_user\n"); - - intEndEvent3 = new InterruptEndEvent(&pcEventQueue, "intEndEvent3"); - if (kernelSymtab->findAddress("do_softirq", addr)) - intEndEvent3->schedule(addr + sizeof(MachInst) * 2); - else - panic("could not find symbol: do_softirq\n"); + if (params->bin_int) { + if (palSymtab->findAddress("sys_int_21", addr)) + intStartEvent->schedule(addr + sizeof(MachInst) * 2); + else + panic("could not find symbol: sys_int_21\n"); + + intEndEvent = new InterruptEndEvent(&pcEventQueue, "intEndEvent"); + if (palSymtab->findAddress("rti_to_kern", addr)) + intEndEvent->schedule(addr) ; + else + panic("could not find symbol: rti_to_kern\n"); + + intEndEvent2 = new InterruptEndEvent(&pcEventQueue, "intEndEvent2"); + if (palSymtab->findAddress("rti_to_user", addr)) + intEndEvent2->schedule(addr); + else + panic("could not find symbol: rti_to_user\n"); + + + intEndEvent3 = new InterruptEndEvent(&pcEventQueue, "intEndEvent3"); + if (kernelSymtab->findAddress("do_softirq", addr)) + intEndEvent3->schedule(addr + sizeof(MachInst) * 2); + else + panic("could not find symbol: do_softirq\n"); + } } LinuxSystem::~LinuxSystem() |