From patchwork Wed Oct 17 14:49:01 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 985430 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [203.11.71.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 42Zw733phmz9s8J for ; Thu, 18 Oct 2018 01:49:19 +1100 (AEDT) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="bP5YnnEr"; dkim-atps=neutral Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 42Zw732B22zF3Vn for ; Thu, 18 Oct 2018 01:49:19 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="bP5YnnEr"; dkim-atps=neutral X-Original-To: skiboot@lists.ozlabs.org Delivered-To: skiboot@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::643; helo=mail-pl1-x643.google.com; envelope-from=npiggin@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="bP5YnnEr"; dkim-atps=neutral Received: from mail-pl1-x643.google.com (mail-pl1-x643.google.com [IPv6:2607:f8b0:4864:20::643]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 42Zw6x1VNdzDr4F for ; Thu, 18 Oct 2018 01:49:13 +1100 (AEDT) Received: by mail-pl1-x643.google.com with SMTP id y15-v6so12806104plr.12 for ; Wed, 17 Oct 2018 07:49:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=iZ+aw8B7TgCuVI/c1/PL/TMnL55pE1R+qndSVWAjVFs=; b=bP5YnnEru7boTQFTLEAVwKdmceSYHom1eGgWQwDddTnvuEAxkULZCHgOa63nIDlLzz mbYhRT8MMDxSwseG2u2ejfPhsmK6i7XET9sH+SUPZ5xOCOgKANcj5bMvENWl2Zcg72oG qxigv+ogEW8ESWIAuGgE4dUClnky5pC9uzLPcqyj+GtzlfW6Xzp1ZIGhuqeM1c2a77WY u4X6nc/M2FNFQvYthGriRY/17w1ki2/HpHQ/sm6Z7Iao3tsyVZq3N0nR3E7ue7vfykRm NJjSpimeL+61hEjIq7Wg5jV4lDiNOVYOGIxuoegk7ZD0O0gUbokuOAAJ2/KZoKywdjhs RkZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=iZ+aw8B7TgCuVI/c1/PL/TMnL55pE1R+qndSVWAjVFs=; b=Jls4Ch+ShHRiQ6aBY4XpXX4on/7b2Hysgq8c6/G+kKqOeE7nfdhjEujrdCLoN9sYjt 65nTN6pM+aBcS4aIhUsDpCK2i0PZ53w/JgbktrK4BWeLSt8VUcU2I/OOSW7AvdqetwwL y8WIEz4RUa0bupdCPMgGSdpe/x3x2J6Rs2hFgnBytRdG/eM9N/noNhfOMl6V1UWT9URT qeTQQPMSFmeRYkIA4Y1jv4KWmNKRVRaMEFYGbhR2WPjkA63+G/SKceLvgR6T7xrN9deL iHOYUV588evkgWS1WDkaZUDuHTawu+M7gfXI6T++l+6B8pBiaOKEwYkD2y9sx1KbThbm vBdw== X-Gm-Message-State: ABuFfohsQ9MP31yK+QTZeOtZHjZB+PwUYid3QZRghNshV3k0iDhyAipm Q/T5uZRw3xWC0YeV8egQtcbL82El X-Google-Smtp-Source: ACcGV61J6/THVw1iA7DgMk77vY6A5+EvlNiPp5ZYWk8NbH2tvutPOTgnva/NTBj/FZZvw2ALOrrrUA== X-Received: by 2002:a17:902:6546:: with SMTP id d6-v6mr26049384pln.139.1539787751188; Wed, 17 Oct 2018 07:49:11 -0700 (PDT) Received: from roar.local0.net (14-202-199-226.tpgi.com.au. [14.202.199.226]) by smtp.gmail.com with ESMTPSA id e64-v6sm22700039pfe.55.2018.10.17.07.49.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 17 Oct 2018 07:49:10 -0700 (PDT) From: Nicholas Piggin To: skiboot@lists.ozlabs.org Date: Thu, 18 Oct 2018 00:49:01 +1000 Message-Id: <20181017144901.12967-1-npiggin@gmail.com> X-Mailer: git-send-email 2.18.0 Subject: [Skiboot] [PATCH] core/exceptions: save current MSR in exception frame X-BeenThere: skiboot@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Mailing list for skiboot development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: skiboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Skiboot" Save and print the MSR of the interrupt context. This can be derived from the interrupt type, SRR1, and other system register settings. But it can be useful to quickly verify what's happening. Signed-off-by: Nicholas Piggin --- asm/asm-offsets.c | 1 + asm/head.S | 2 ++ core/exceptions.c | 57 ++++++++++++++++++++++++++--------------------- include/stack.h | 1 + 4 files changed, 35 insertions(+), 26 deletions(-) diff --git a/asm/asm-offsets.c b/asm/asm-offsets.c index 3eac592d..45f42436 100644 --- a/asm/asm-offsets.c +++ b/asm/asm-offsets.c @@ -87,6 +87,7 @@ int main(void) OFFSET(STACK_CTR, stack_frame, ctr); OFFSET(STACK_LR, stack_frame, lr); OFFSET(STACK_PC, stack_frame, pc); + OFFSET(STACK_MSR, stack_frame, msr); OFFSET(STACK_CFAR, stack_frame, cfar); OFFSET(STACK_SRR0, stack_frame, srr0); OFFSET(STACK_SRR1, stack_frame, srr1); diff --git a/asm/head.S b/asm/head.S index b7569d24..7968bb69 100644 --- a/asm/head.S +++ b/asm/head.S @@ -210,8 +210,10 @@ _exception: std %r6,STACK_HSRR1(%r1) mfspr %r3,SPR_DSISR mfspr %r4,SPR_DAR + mfmsr %r5 stw %r3,STACK_DSISR(%r1) std %r4,STACK_DAR(%r1) + std %r5,STACK_MSR(%r1) mr %r3,%r1 LOAD_IMM64(%r4, SKIBOOT_BASE) LOAD_IMM32(%r5, exception_entry_foo - __head) diff --git a/core/exceptions.c b/core/exceptions.c index 4880fa24..ed92edfb 100644 --- a/core/exceptions.c +++ b/core/exceptions.c @@ -28,7 +28,7 @@ static void dump_regs(struct stack_frame *stack) { unsigned int i; - prerror("CFAR : "REG"\n", stack->cfar); + prerror("CFAR : "REG" MSR : "REG"\n", stack->cfar, stack->msr); prerror("SRR0 : "REG" SRR1 : "REG"\n", stack->srr0, stack->srr1); prerror("HSRR0: "REG" HSRR1: "REG"\n", stack->hsrr0, stack->hsrr1); prerror("DSISR: "REG32" DAR : "REG"\n", stack->dsisr, stack->dar); @@ -44,40 +44,45 @@ void exception_entry(struct stack_frame *stack) __noreturn; void exception_entry(struct stack_frame *stack) { + uint64_t nip; + uint64_t msr; const size_t max = 320; char buf[max]; size_t l; + switch (stack->type) { + case 0x500: + case 0x980: + case 0xe00: + case 0xe20: + case 0xe40: + case 0xe60: + case 0xe80: + case 0xea0: + case 0xf80: + nip = stack->hsrr0; + msr = stack->hsrr1; + break; + default: + nip = stack->srr0; + msr = stack->srr1; + break; + } + prerror("***********************************************\n"); + l = 0; if (stack->type == 0x200) { - l = 0; - l += snprintf(buf + l, max - l, "Fatal MCE at "REG" ", stack->srr0); - l += snprintf_symbol(buf + l, max - l, stack->srr0); - prerror("%s\n", buf); + l += snprintf(buf + l, max - l, + "Fatal MCE at "REG" ", nip); } else { - uint64_t nip; - switch (stack->type) { - case 0x500: - case 0x980: - case 0xe00: - case 0xe20: - case 0xe40: - case 0xe60: - case 0xe80: - case 0xea0: - case 0xf80: - nip = stack->hsrr0; - break; - default: - nip = stack->srr0; - break; - } - l = 0; - l += snprintf(buf + l, max - l, "Fatal Exception 0x%llx at "REG" ", stack->type, nip); - l += snprintf_symbol(buf + l, max - l, nip); - prerror("%s\n", buf); + l += snprintf(buf + l, max - l, + "Fatal Exception 0x%llx at "REG" ", stack->type, nip); } + l += snprintf_symbol(buf + l, max - l, nip); + l += snprintf(buf + l, max - l, " MSR "REG, msr); + prerror("%s\n", buf); dump_regs(stack); + abort(); } diff --git a/include/stack.h b/include/stack.h index a41a4a91..7578cc34 100644 --- a/include/stack.h +++ b/include/stack.h @@ -98,6 +98,7 @@ struct stack_frame { uint64_t ctr; uint64_t lr; uint64_t pc; + uint64_t msr; uint64_t cfar; uint64_t srr0; uint64_t srr1;