changeset 852ba59fa8d9 in /z/repo/m5
details: http://repo.m5sim.org/m5?cmd=changeset;node=852ba59fa8d9
description:
X86: The startup IPI delivery mode is not reserved.
diffstat:
3 files changed, 16 insertions(+), 3 deletions(-)
src/arch/x86/interrupts.cc | 12 +++++++++++-
src/arch/x86/interrupts.hh | 2 ++
src/arch/x86/intmessage.hh | 5 +++--
diffs (82 lines):
diff -r 595b5016f6d5 -r 852ba59fa8d9 src/arch/x86/interrupts.cc
--- a/src/arch/x86/interrupts.cc Sun Apr 19 02:56:03 2009 -0700
+++ b/src/arch/x86/interrupts.cc Sun Apr 19 03:01:46 2009 -0700
@@ -282,6 +282,9 @@
} else if (deliveryMode == DeliveryMode::INIT && !pendingInit) {
pendingUnmaskableInt = pendingInit = true;
initVector = vector;
+ } else if (deliveryMode == DeliveryMode::SIPI && !pendingStartup) {
+ pendingUnmaskableInt = pendingStartup = true;
+ startupVector = vector;
}
}
cpu->wakeup();
@@ -538,6 +541,7 @@
pendingNmi(false), nmiVector(0),
pendingExtInt(false), extIntVector(0),
pendingInit(false), initVector(0),
+ pendingStartup(false), startupVector(0),
pendingUnmaskableInt(false)
{
pioSize = PageBytes;
@@ -587,6 +591,9 @@
} else if (pendingInit) {
DPRINTF(LocalApic, "Generated INIT fault object.\n");
return new InitInterrupt(initVector);
+ } else if (pendingStartup) {
+ DPRINTF(LocalApic, "Generating SIPI fault object.\n");
+ return new StartupInterrupt(startupVector);
} else {
panic("pendingUnmaskableInt set, but no unmaskable "
"ints were pending.\n");
@@ -616,8 +623,11 @@
} else if (pendingInit) {
DPRINTF(LocalApic, "Init sent to core.\n");
pendingInit = false;
+ } else if (pendingStartup) {
+ DPRINTF(LocalApic, "SIPI sent to core.\n");
+ pendingStartup = false;
}
- if (!(pendingSmi || pendingNmi || pendingInit))
+ if (!(pendingSmi || pendingNmi || pendingInit || pendingStartup))
pendingUnmaskableInt = false;
} else if (pendingExtInt) {
pendingExtInt = false;
diff -r 595b5016f6d5 -r 852ba59fa8d9 src/arch/x86/interrupts.hh
--- a/src/arch/x86/interrupts.hh Sun Apr 19 02:56:03 2009 -0700
+++ b/src/arch/x86/interrupts.hh Sun Apr 19 03:01:46 2009 -0700
@@ -129,6 +129,8 @@
uint8_t extIntVector;
bool pendingInit;
uint8_t initVector;
+ bool pendingStartup;
+ uint8_t startupVector;
// This is a quick check whether any of the above (except ExtInt) are set.
bool pendingUnmaskableInt;
diff -r 595b5016f6d5 -r 852ba59fa8d9 src/arch/x86/intmessage.hh
--- a/src/arch/x86/intmessage.hh Sun Apr 19 02:56:03 2009 -0700
+++ b/src/arch/x86/intmessage.hh Sun Apr 19 03:01:46 2009 -0700
@@ -57,19 +57,20 @@
SMI = 2,
NMI = 4,
INIT = 5,
+ SIPI = 6,
ExtInt = 7,
NumModes
};
static const char * const names[NumModes] = {
"Fixed", "LowestPriority", "SMI", "Reserved",
- "NMI", "INIT", "Reserved", "ExtInt"
+ "NMI", "INIT", "Startup", "ExtInt"
};
static inline bool
isReserved(int mode)
{
- return mode == 3 || mode == 6;
+ return mode == 3;
}
}
_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev