From owner-svn-soc-all@freebsd.org Sat Jun 27 22:20:13 2015 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 74B0098E11F for ; Sat, 27 Jun 2015 22:20:13 +0000 (UTC) (envelope-from mihai@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 656C51C63 for ; Sat, 27 Jun 2015 22:20:13 +0000 (UTC) (envelope-from mihai@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.9/8.14.9) with ESMTP id t5RMKDAf010330 for ; Sat, 27 Jun 2015 22:20:13 GMT (envelope-from mihai@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.9/8.14.9/Submit) id t5RMKCLk010310 for svn-soc-all@FreeBSD.org; Sat, 27 Jun 2015 22:20:12 GMT (envelope-from mihai@FreeBSD.org) Date: Sat, 27 Jun 2015 22:20:12 GMT Message-Id: <201506272220.t5RMKCLk010310@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to mihai@FreeBSD.org using -f From: mihai@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r287673 - soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 27 Jun 2015 22:20:13 -0000 Author: mihai Date: Sat Jun 27 22:20:11 2015 New Revision: 287673 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=287673 Log: soc2015: mihai: bhyve-on-arm: panic in HOST when entering critical exceptions in HYP-Mode Modified: soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/hyp.S soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/hyp.h Modified: soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/hyp.S ============================================================================== --- soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/hyp.S Sat Jun 27 20:39:13 2015 (r287672) +++ soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/hyp.S Sat Jun 27 22:20:11 2015 (r287673) @@ -17,11 +17,6 @@ .p2align 12 hyp_code_start: - -__semi_call: - svc 0x123456 - mov pc, lr - ENTRY(vmm_call_hyp) hvc #0 bx lr @@ -120,7 +115,6 @@ orr r0, r0, r1 isb mcr p15, 4, r0, c1, c0, 0 @ Set the new HSCTLR - eret .align 5 @@ -140,50 +134,35 @@ .align hyp_undef: - mov r0, #SYS_WRITE0 - adr r1, und_die_str - bl __semi_call - mrs r0, ELR_hyp - b loop + ldr r0, =und_die_str + mov r1, #EXCEPTION_UNDEF + bl handle_bad_exception und_die_str: - .ascii "unexpected undefined exception in Hyp mode at r0: %#08x\n" + .ascii "unexpected undefined exception in Hyp mode at: %#08x\n" .align hyp_svc: - mov r0, #SYS_WRITE0 - adr r1, svc_die_str - bl __semi_call - mrs r0, ELR_hyp - b loop + ldr r0, =svc_die_str + mov r1, #EXCEPTION_SVC + bl handle_bad_exception svc_die_str: - .ascii "unexpected HVC/SVC trap in Hyp mode at r0: %#08x\n" - + .ascii "unexpected HVC/SVC trap in Hyp mode at: %#08x\n" .align hyp_pabt: - mov r0, #SYS_WRITE0 - adr r1, pabt_die_str - mov r2, lr - bl __semi_call -// mrs r0, ELR_hyp -// mrc p15, 4, r1, c5, c2, 0 @ HSR (syndrome register) -// mrc p15, 4, r2, c6, c0, 2 @ HIFAR (hyp instruction fault address) - mov pc, r2 -# b loop + ldr r0, =pabt_die_str + mov r1, #EXCEPTION_PABT + bl handle_bad_exception pabt_die_str: - .ascii "unexpected prefetch abort in Hyp mode at r0: %#08x\n" + .ascii "unexpected prefetch abort in Hyp mode at: %#08x\n" .align hyp_dabt: - mov r0, #SYS_WRITE0 - adr r1, dabt_die_str - bl __semi_call - mrs r0, ELR_hyp - mrc p15, 4, r1, c5, c2, 0 @ HSR (syndrome register) - mrc p15, 4, r2, c6, c0, 0 @ HDFAR (hyp data fault address) - b loop + ldr r0, =dabt_die_str + mov r1, #EXCEPTION_DABT + bl handle_bad_exception dabt_die_str: - .ascii "unexpected data abort in Hyp mode at r0: %#08x\n" + .ascii "unexpected data abort in Hyp mode at: %#08x\n" .align hyp_hvc: @@ -224,6 +203,27 @@ hyp_irq: b loop .align + +ENTRY(handle_bad_exception) + /* We have in r0 pointer to the panic string and in r1 the exception code */ + mrrc p15, 6, r3, r2, c2 @ Read VTTBR + lsr r2, r2, #16 + ands r2, r2, #0xff + bne guest_bad_exception + + mrs r2, cpsr + bic r2, r2, #PSR_MODE + orr r2, r2, #PSR_SVC32_MODE + msr spsr_cxsf, r2 + mrs r1, ELR_hyp @ We don't need anymore the exception code, we store 2nd param for panic */ + ldr r3, =panic + msr ELR_hyp, r3 + eret + +guest_bad_exception: + b loop +END(handle_bad_exception) + loop: b loop Modified: soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/hyp.h ============================================================================== --- soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/hyp.h Sat Jun 27 20:39:13 2015 (r287672) +++ soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/hyp.h Sat Jun 27 22:20:11 2015 (r287673) @@ -1,5 +1,15 @@ +#ifndef _VMM_HYP_H_ +#define _VMM_HYP_H_ -#define SYS_WRITE0 4 +/* Hyp Exceptions */ +#define EXCEPTION_RESET 0 +#define EXCEPTION_UNDEF 1 +#define EXCEPTION_SVC 2 +#define EXCEPTION_PABT 3 +#define EXCEPTION_DABT 4 +#define EXCEPTION_HVC 5 +#define EXCEPTION_FIQ 6 +#define EXCEPTION_IRQ 7 #define HSR_EC_SHIFT 26 #define HSR_EC_HVC 0x12 @@ -69,5 +79,4 @@ #define HMAIR0 MAIR0 #define HMAIR1 MAIR1 - - +#endif