From ed3187aa741e863b7c26fad2e6ab34ae5ed0a8f9 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Mon, 12 Aug 2013 08:47:36 +0200 Subject: [PATCH] seoul: add invalid guest state handling --- ports/src/vancouver/main.cc | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/ports/src/vancouver/main.cc b/ports/src/vancouver/main.cc index 5770c0ebd..c77ba02a0 100644 --- a/ports/src/vancouver/main.cc +++ b/ports/src/vancouver/main.cc @@ -609,10 +609,11 @@ class Vcpu_dispatcher : public Genode::Thread, { Utcb *utcb = _utcb_of_myself(); - if (utcb->qual[0] & 0x4) - Logging::panic("force_invalid_gueststate_amd(utcb) - not implemented\n"); - - else { + if (utcb->qual[0] & 0x4) { + Logging::printf("invalid gueststate\n"); + utcb->ctrl[1] = 0; + utcb->mtd = MTD_CTRL; + } else { unsigned order = ((utcb->qual[0] >> 4) & 7) - 1; if (order > 2) @@ -715,7 +716,10 @@ class Vcpu_dispatcher : public Genode::Thread, Utcb *utcb = _utcb_of_myself(); unsigned order; if (utcb->qual[0] & 0x10) { - Logging::panic("invalid gueststate intel - not implemented\n"); + Logging::printf("invalid gueststate\n"); + assert(utcb->mtd & MTD_RFLAGS); + utcb->efl &= ~2; + utcb->mtd = MTD_RFLAGS; } else { order = utcb->qual[0] & 7; if (order > 2) order = 2;