summaryrefslogtreecommitdiffstats
path: root/src/kernel/exception.C
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/exception.C')
-rw-r--r--src/kernel/exception.C21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/kernel/exception.C b/src/kernel/exception.C
index d12b6da7d..d3a1dbe6b 100644
--- a/src/kernel/exception.C
+++ b/src/kernel/exception.C
@@ -38,6 +38,8 @@
#include <kernel/hbterminatetypes.H>
#include <kernel/kernel_reasoncodes.H>
#include <kernel/misc.H>
+#include <kernel/cpumgr.H>
+#include <kernel/scheduler.H>
namespace ExceptionHandles
@@ -409,6 +411,25 @@ void kernel_execute_external()
}
extern "C"
+void kernel_execute_hyp_external()
+{
+ // SRR0 set to the effective addr the thread
+ // would have attempted to execute next
+ // SRR1 [33:36,42:47] set to zero
+ // all others copied from MSR
+
+ // Mustn't switch tasks if external interrupt due to
+ // the fact external interrupts come in as HYP exceptions
+ // and all other come in as regular exceptions. If HYP
+ // comes on top of regular... need to leave existing task
+ // as is. The task switching is performed as part of the
+ // custom sendMessage in InterruptMsgHdlr.
+
+ //Do work
+ InterruptMsgHdlr::handleInterrupt();
+}
+
+extern "C"
void kernel_execute_unhandled_exception()
{
task_t* t = TaskManager::getCurrentTask();
OpenPOWER on IntegriCloud