From patchwork Fri Sep 21 08:05:09 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 972904 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 42GmQx2nfCz9s89 for ; Fri, 21 Sep 2018 18:07:05 +1000 (AEST) 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="EP+GB8L/"; dkim-atps=neutral Received: from bilbo.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 42GmQx19lXzF3Tr for ; Fri, 21 Sep 2018 18:07:05 +1000 (AEST) 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="EP+GB8L/"; 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::443; helo=mail-pf1-x443.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="EP+GB8L/"; dkim-atps=neutral Received: from mail-pf1-x443.google.com (mail-pf1-x443.google.com [IPv6:2607:f8b0:4864:20::443]) (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 42GmP675W3zF3Pb for ; Fri, 21 Sep 2018 18:05:30 +1000 (AEST) Received: by mail-pf1-x443.google.com with SMTP id j26-v6so5613378pfi.10 for ; Fri, 21 Sep 2018 01:05:30 -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:in-reply-to:references; bh=rZexJrNoGOIpDovlyfH/bnBg8mgPZpkuvU/LLeA7FWw=; b=EP+GB8L/bQQDVprI52ZGUgJjOhUVitKHyr/iVlD/XxCDOelwyut+EgvUp0g96ZMtEf +Yg3siW/7/XDQRaHjUzqYs5LgdwoXr/95IRUGO9FLYHjpMJLdRASVgiivK7aAT6oLFuy 38z87SDroc6YhbBUxkjkNT488T8EtqX02Hw8QOZGUtplXHJh8wLZLV/QrngpZC3m0plY 6zMRlbfV4pjRwGWJIEMT0mEmSt1c/V1cKM2Qn2EfhZoqz3qswX/Pf6VD9hg+M1OXbE5S oSA6yayR4HGagbeRD3LPmIAPB3LjaoiPDc2ptnDORqAe+7I3Oppe2uNSJuKOIPfrZjSL nMXA== 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:in-reply-to :references; bh=rZexJrNoGOIpDovlyfH/bnBg8mgPZpkuvU/LLeA7FWw=; b=fPejR6NsmdvEgsnGo02tbBLamSvl89hVmtaY+6jO0uKv5PG0mN7WlMMEjxOjv+AFrB l+vvYRp8xyKcMeNLLjtN71rvqHTa332EUVy2/yypR2ts4qTv8cJnmouxCd8nekq8nIFW TLt8vdczJ4Aj2YuJo8a9ncYZkpyRDWXpPYxyeen5DgRXWXvX3oRk8T/rmv2JB5RtFNYr JQMg7VXvpcYczrlIUkNWf2G8F5QUZhMx50dFPHMU77f1xYRmA9dkFjAnYMYNn4fiH6KF cKiIJJ6YboHdLNX5xtZxPLor/GgdgChd0rYoOds1QfTYaTWmHNjSbh3C8rqqJxGORcmk 5keg== X-Gm-Message-State: APzg51BEhYO8icqSlSao0T8b3/g7CwyiFLaf0ky0yZVKCE/H7xVCYND/ WNHBq+mBz1oHLgfyu4+x/6Z+RdPk X-Google-Smtp-Source: ANB0VdaGV+Ia4fwnlyn6p79VAELu5v/m/6AR9NhUPCtcd2WgCjWWUELRI4IuU4ysBq+HuJ+N6J9KAg== X-Received: by 2002:a63:306:: with SMTP id 6-v6mr5342375pgd.393.1537517128406; Fri, 21 Sep 2018 01:05:28 -0700 (PDT) Received: from roar.local0.net (14-202-184-212.tpgi.com.au. [14.202.184.212]) by smtp.gmail.com with ESMTPSA id p64-v6sm40865501pfa.47.2018.09.21.01.05.26 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 21 Sep 2018 01:05:27 -0700 (PDT) From: Nicholas Piggin To: skiboot@lists.ozlabs.org Date: Fri, 21 Sep 2018 18:05:09 +1000 Message-Id: <20180921080511.22026-6-npiggin@gmail.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180921080511.22026-1-npiggin@gmail.com> References: <20180921080511.22026-1-npiggin@gmail.com> Subject: [Skiboot] [RFC PATCH 5/7] 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..be701f0f 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, nip); + 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;