|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT PATCH 02/23] plat: Hardware context - Set exception stack when switching to a new thread
On x86, whenever an exception is generated, SS, SP, EFLAGS, CS and IP registers
are pushed on a stack that needs to be configured beforehand. We keep such an
exception stack for each thread in the system. This patch introduces the
traps_set_interrupt_stack() function used for setting the exception stack.
Signed-off-by: Costin Lupu <costin.lupu@xxxxxxxxx>
---
plat/common/include/x86/traps.h | 1 +
plat/common/x86/hw_ctx.c | 2 ++
plat/kvm/x86/traps.c | 4 ++++
3 files changed, 7 insertions(+)
diff --git a/plat/common/include/x86/traps.h b/plat/common/include/x86/traps.h
index b217b34a..fcd1697e 100644
--- a/plat/common/include/x86/traps.h
+++ b/plat/common/include/x86/traps.h
@@ -109,6 +109,7 @@ void do_##name(struct __regs *regs, unsigned long
error_code) \
void traps_init(void);
void traps_fini(void);
+void traps_set_interrupt_stack(void *stack_address);
#endif
diff --git a/plat/common/x86/hw_ctx.c b/plat/common/x86/hw_ctx.c
index c7b8dbac..e82beb5f 100644
--- a/plat/common/x86/hw_ctx.c
+++ b/plat/common/x86/hw_ctx.c
@@ -84,6 +84,8 @@ static void hw_ctx_switch(void *prevctx, void *nextctx)
struct hw_ctx *prev_hw_ctx = prevctx;
struct hw_ctx *next_hw_ctx = nextctx;
+ traps_set_interrupt_stack(&next_hw_ctx->regs + 1);
+
if (ukplat_irq_context()) {
/* IRQ context */
prev_hw_ctx->interrupted = true;
diff --git a/plat/kvm/x86/traps.c b/plat/kvm/x86/traps.c
index fe1dd5a4..a3653c8a 100644
--- a/plat/kvm/x86/traps.c
+++ b/plat/kvm/x86/traps.c
@@ -93,6 +93,10 @@ static void tss_init(void)
);
}
+void traps_set_interrupt_stack(void *stack_address)
+{
+ cpu_tss.ist[0] = (__u64) stack_address;
+}
/* Declare the traps used only by this platform: */
DECLARE_TRAP_EC(nmi, "NMI")
--
2.20.1
_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |