Received: by 2002:ad5:4acb:0:0:0:0:0 with SMTP id n11csp988305imw; Fri, 15 Jul 2022 17:42:30 -0700 (PDT) X-Google-Smtp-Source: AGRyM1sGjns1h4PVDB6Vgw8ivoTL++UjjkeU/nG2XS9WzXObaQhVBHgoc40B7eb8ENR7bwIxkTka X-Received: by 2002:a17:907:608f:b0:72b:7db9:4dc6 with SMTP id ht15-20020a170907608f00b0072b7db94dc6mr15548339ejc.463.1657932150190; Fri, 15 Jul 2022 17:42:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1657932150; cv=none; d=google.com; s=arc-20160816; b=XuAFssZipwDP3eSnLWKYk+UXz+sX1PGMK/rFbpkgOmW6bWi6ZeV/WHY97iA0fXtElm CHUoPvTqrnfoVTtPeuCiQGL7KhdVQq+yjwfR8WZNwhM9GH/M8/2YjnwUH5L8NmT6UWgK SZeBJwjh6QqANINJQEwAFGaTZiwpGj7MFgBIldaI+T1dtZ8uaNuXboRu7Oj5hNDLxPiY R+Q0V8UzucM5owlq75IL9MReCSvEG5ZOw3tziCMCHNt/V7CHRJx8H9XHtTbUE47u9TK5 8rCPKfdkB0iY4mlE/li638jRxfgsMInkLUdlZbUH+8DVZpvZKCZNHI/dVc9hVGqQ+gHx 8jXw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=uf0srQbpFYrNNrM0jqWKuXQT5QmcQQrUmQNh2wbUS0U=; b=Oi7qvcHAGTgfdZoSIkDjEKjby+ds8FagmScm5vVB6u9hGeLwmFafp7IOENiKyfJJho PLOF5mlavm6GCS7JBY/519Z7UC3vXmRd4aC3k60x8TFpOw/H6ertuwf+8zD3wHrJkuSK YD58zue1fu1oheKYNHw2HdCOoXMRNGoiwzJppPEVTXlgj+ABwFGDvM8oNEKd+3GZ5SqX E0G41hdTw0DAu/lUVJVQ2U953XGJYSBBlzQboq8tuJ9/zR0p3/MTGMRW8xmRKLri68yC vDmWe7X/5vwQuccg9LfyXDnvgMZB17kg5/4LoUqcJ1xB+jq7pWRCV+YVrIqOOu6QXd6Q pFBg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b="LTnFPl/C"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id hs5-20020a1709073e8500b0072b52d5f9e4si10235280ejc.988.2022.07.15.17.42.05; Fri, 15 Jul 2022 17:42:30 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b="LTnFPl/C"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231615AbiGPAEY (ORCPT + 99 others); Fri, 15 Jul 2022 20:04:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50530 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231548AbiGPAEX (ORCPT ); Fri, 15 Jul 2022 20:04:23 -0400 Received: from mail-wr1-x42e.google.com (mail-wr1-x42e.google.com [IPv6:2a00:1450:4864:20::42e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1CC3F15832 for ; Fri, 15 Jul 2022 17:04:21 -0700 (PDT) Received: by mail-wr1-x42e.google.com with SMTP id z12so8756447wrq.7 for ; Fri, 15 Jul 2022 17:04:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=uf0srQbpFYrNNrM0jqWKuXQT5QmcQQrUmQNh2wbUS0U=; b=LTnFPl/CbhOoxLLQ31hBxQso7S8OkuVxhELcoEtSbLC/gdfIwgBnJuKh147M4jFAu7 BT9IwFPUnrU9SYf7S/cT9WpsExwlXMhW0+Mo4baWFHjRdgZcqfAer88au4TV95h2zZ9H GfP/59H65jv95ZuM8Y06qeBDntqiRXrQvdayXrdvd2+xfsdFl1hVAdgXuGOwYWpKCrth xrWtcpZ+aqngWFVP3lPn6uZlnLpWKNqchcJdGubogjo0vh2kKuT58qtSRG9EmCf7i8DB IO0kgRIO1KyqZTG3LhYRXJ8k1+rpDVEy2uwvzM7OPi1+pn5VP3RXzM45aHVWAs0skPQV Sozw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=uf0srQbpFYrNNrM0jqWKuXQT5QmcQQrUmQNh2wbUS0U=; b=k9m4aQZFMGJ0CPk8miW/So55M/viTigFzW8iBa+Lknq8oFjV6q+gFv1TCcKahmpmcB B7454NdgYi0IVsJa3rwLC7tgChs92qku9KBidghOMgzsifttSXPe0h6eZdANOl/C3stz jpW9x0HnixA6CGnvA+T6DYkX9Xrx3LVDEVCV8NERVjfKlDn6afSplNOPw9tMLcYwunJb zjQn30Li3WtSlTAiJMM+lwPSGhGtgw5HM5nKBjD7WaDVRopvJejQ17NGPXu+IuiGwEKU wdNL2hThkMzctdLI/ujXR9vLU2W+gxqW0dOYISCJRmbU/WeM1ckD+PmflRzNHGb+QK/z 0wbA== X-Gm-Message-State: AJIora+HFfGZZAfeqYRPnpjfBatV4pZbQ3iyHOrf1NpfOCmBCcfdj6Bg sUwHoTL2qry2ENLbc10VEyWyjYpwHvVtj9BInKu0bA== X-Received: by 2002:a5d:6c65:0:b0:21d:b7c0:9930 with SMTP id r5-20020a5d6c65000000b0021db7c09930mr14209311wrz.500.1657929859332; Fri, 15 Jul 2022 17:04:19 -0700 (PDT) MIME-Version: 1.0 References: <20220715061027.1612149-1-kaleshsingh@google.com> In-Reply-To: From: Kalesh Singh Date: Fri, 15 Jul 2022 17:04:08 -0700 Message-ID: Subject: Re: [PATCH v4 00/18] KVM nVHE Hypervisor stack unwinder To: Fuad Tabba Cc: Marc Zyngier , Mark Rutland , Mark Brown , "Madhavan T. Venkataraman" , Will Deacon , Quentin Perret , James Morse , Alexandru Elisei , Suzuki K Poulose , Catalin Marinas , andreyknvl@gmail.com, russell.king@oracle.com, vincenzo.frascino@arm.com, Masami Hiramatsu , Alexei Starovoitov , Andrew Jones , Kefeng Wang , Marco Elver , Keir Fraser , Zenghui Yu , Ard Biesheuvel , Oliver Upton , "moderated list:ARM64 PORT (AARCH64 ARCHITECTURE)" , kvmarm , LKML , android-mm@google.com, "Cc: Android Kernel" Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-17.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, ENV_AND_HDR_SPF_MATCH,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS, USER_IN_DEF_DKIM_WL,USER_IN_DEF_SPF_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Jul 15, 2022 at 11:58 AM Kalesh Singh wrote: > > On Fri, Jul 15, 2022 at 6:55 AM 'Fuad Tabba' via kernel-team > wrote: > > > > Hi Kalesh, > > > > On Fri, Jul 15, 2022 at 7:10 AM Kalesh Singh wrote: > > > > > > Hi all, > > > > > > This is v4 of the series adding support for nVHE hypervisor stacktraces; > > > and is based on arm64 for-next/stacktrace. > > > > > > Thanks all for your feedback on previous revisions. Mark Brown, I > > > appreciate your Reviewed-by on the v3, I have dropped the tags in this > > > new verision since I think the series has changed quite a bit. > > > > > > The previous versions were posted at: > > > v3: https://lore.kernel.org/r/20220607165105.639716-1-kaleshsingh@google.com/ > > > v2: https://lore.kernel.org/r/20220502191222.4192768-1-kaleshsingh@google.com/ > > > v1: https://lore.kernel.org/r/20220427184716.1949239-1-kaleshsingh@google.com/ > > > > > > The main updates in this version are to address concerens from Marc on the > > > memory usage and reusing the common code by refactoring into a shared header. > > > > > > Thanks, > > > Kalesh > > > > I tested an earlier version of this patch series, and it worked fine, > > with symbolization. However, testing it now, both with nvhe and with > > pkvm the symbolization isn't working for me. e.g. > > > > [ 32.986706] kvm [251]: Protected nVHE HYP call trace: > > [ 32.986796] kvm [251]: [] 0xffff800008f8b0e0 > > [ 32.987391] kvm [251]: [] 0xffff800008f8b388 > > [ 32.987493] kvm [251]: [] 0xffff800008f8d230 > > [ 32.987591] kvm [251]: [] 0xffff800008f8d51c > > [ 32.987695] kvm [251]: [] 0xffff800008f8c064 > > [ 32.987803] kvm [251]: ---- End of Protected nVHE HYP call trace ---- > > > > CONFIG_PROTECTED_NVHE_STACKTRACE CONFIG_NVHE_EL2_DEBUG and > > CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT are all enabled. Generating > > a backtrace in the host I get proper symbolisation. > > > > Is there anything else you'd like to know about my setup that would > > help get to the bottom of this? > > Hi Fuad, > > Thanks for reviewing it. Can you attach the .config when you have a > chance please? I will try reproducing it on my end. My local config had CONFIG_RANDOMIZE_BASE off. I have posted a fix for the existing occurrences [1]. I'll address those for the unwinder in the next version of this series. [1] https://lore.kernel.org/r/20220715235824.2549012-1-kaleshsingh@google.com/ Thanks, Kalesh > > --Kalesh > > > > > Thanks, > > /fuad > > > > > > > > > > > > > > ============ > > > > > > KVM nVHE Stack unwinding. > > > === > > > > > > nVHE has two modes of operation: protected (pKVM) and unprotected > > > (conventional nVHE). Depending on the mode, a slightly different approach > > > is used to dump the hyperviosr stacktrace but the core unwinding logic > > > remains the same. > > > > > > Protected nVHE (pKVM) stacktraces > > > ==== > > > > > > In protected nVHE mode, the host cannot directly access hypervisor memory. > > > > > > The hypervisor stack unwinding happens in EL2 and is made accessible to > > > the host via a shared buffer. Symbolizing and printing the stacktrace > > > addresses is delegated to the host and happens in EL1. > > > > > > Non-protected (Conventional) nVHE stacktraces > > > ==== > > > > > > In non-protected mode, the host is able to directly access the hypervisor > > > stack pages. > > > > > > The hypervisor stack unwinding and dumping of the stacktrace is performed > > > by the host in EL1, as this avoids the memory overhead of setting up > > > shared buffers between the host and hypervisor. > > > > > > Resuing the Core Unwinding Logic > > > ==== > > > > > > Since the hypervisor cannot link against the kernel code in proteced mode. > > > The common stack unwinding code is moved to a shared header to allow reuse > > > in the nVHE hypervisor. > > > > > > Reducing the memory footprint > > > ==== > > > > > > In this version the below steps were taken to reduce the memory usage of > > > nVHE stack unwinding: > > > > > > 1) The nVHE overflow stack is reduced from PAGE_SIZE to 4KB; benificial > > > for configurations with non 4KB pages (16KB or 64KB pages). > > > 2) In protected nVHE mode (pKVM), the shared stacktrace buffers with the > > > host are reduced from PAGE_SIZE to the minimum size required. > > > 3) In systems other than Android, conventional nVHE makes up the vast > > > majority of use case. So the pKVM stack tracing is disabled by default > > > (!CONFIG_PROTECTED_NVHE_STACKTRACE), which avoid the memory usage for > > > setting up shared buffers. > > > 4) In non-protected nVHE mode (conventional nVHE), the stack unwinding > > > is done directly in EL1 by the host and no shared buffers with the > > > hyperviosr are needed. > > > > > > Sample Output > > > ==== > > > > > > The below shows an example output from a simple stack overflow test: > > > > > > [ 126.862960] kvm [371]: nVHE hyp panic at: [] __kvm_nvhe_recursive_death+0x10/0x34! > > > [ 126.869920] kvm [371]: Protected nVHE HYP call trace: > > > [ 126.870528] kvm [371]: [] __kvm_nvhe_hyp_panic+0xac/0xf8 > > > [ 126.871342] kvm [371]: [] __kvm_nvhe_hyp_panic_bad_stack+0x10/0x10 > > > [ 126.872174] kvm [371]: [] __kvm_nvhe_recursive_death+0x24/0x34 > > > [ 126.872971] kvm [371]: [] __kvm_nvhe_recursive_death+0x24/0x34 > > > . . . > > > > > > [ 126.927314] kvm [371]: [] __kvm_nvhe_recursive_death+0x24/0x34 > > > [ 126.927727] kvm [371]: [] __kvm_nvhe_recursive_death+0x24/0x34 > > > [ 126.928137] kvm [371]: [] __kvm_nvhe___kvm_vcpu_run+0x30/0x40c > > > [ 126.928561] kvm [371]: [] __kvm_nvhe_handle___kvm_vcpu_run+0x30/0x48 > > > [ 126.928984] kvm [371]: [] __kvm_nvhe_handle_trap+0xc4/0x128 > > > [ 126.929385] kvm [371]: [] __kvm_nvhe___host_exit+0x64/0x64 > > > [ 126.929804] kvm [371]: ---- End of Protected nVHE HYP call trace ---- > > > > > > ============ > > > > > > > > > Kalesh Singh (18): > > > arm64: stacktrace: Add shared header for common stack unwinding code > > > arm64: stacktrace: Factor out on_accessible_stack_common() > > > arm64: stacktrace: Factor out unwind_next_common() > > > arm64: stacktrace: Handle frame pointer from different address spaces > > > arm64: stacktrace: Factor out common unwind() > > > arm64: stacktrace: Add description of stacktrace/common.h > > > KVM: arm64: On stack overflow switch to hyp overflow_stack > > > KVM: arm64: Add PROTECTED_NVHE_STACKTRACE Kconfig > > > KVM: arm64: Allocate shared pKVM hyp stacktrace buffers > > > KVM: arm64: Stub implementation of pKVM HYP stack unwinder > > > KVM: arm64: Stub implementation of non-protected nVHE HYP stack > > > unwinder > > > KVM: arm64: Save protected-nVHE (pKVM) hyp stacktrace > > > KVM: arm64: Prepare non-protected nVHE hypervisor stacktrace > > > KVM: arm64: Implement protected nVHE hyp stack unwinder > > > KVM: arm64: Implement non-protected nVHE hyp stack unwinder > > > KVM: arm64: Introduce pkvm_dump_backtrace() > > > KVM: arm64: Introduce hyp_dump_backtrace() > > > KVM: arm64: Dump nVHE hypervisor stack on panic > > > > > > arch/arm64/include/asm/kvm_asm.h | 16 ++ > > > arch/arm64/include/asm/memory.h | 7 + > > > arch/arm64/include/asm/stacktrace.h | 92 ++++--- > > > arch/arm64/include/asm/stacktrace/common.h | 224 ++++++++++++++++ > > > arch/arm64/include/asm/stacktrace/nvhe.h | 291 +++++++++++++++++++++ > > > arch/arm64/kernel/stacktrace.c | 157 ----------- > > > arch/arm64/kvm/Kconfig | 15 ++ > > > arch/arm64/kvm/arm.c | 2 +- > > > arch/arm64/kvm/handle_exit.c | 4 + > > > arch/arm64/kvm/hyp/nvhe/Makefile | 2 +- > > > arch/arm64/kvm/hyp/nvhe/host.S | 9 +- > > > arch/arm64/kvm/hyp/nvhe/stacktrace.c | 108 ++++++++ > > > arch/arm64/kvm/hyp/nvhe/switch.c | 5 + > > > 13 files changed, 727 insertions(+), 205 deletions(-) > > > create mode 100644 arch/arm64/include/asm/stacktrace/common.h > > > create mode 100644 arch/arm64/include/asm/stacktrace/nvhe.h > > > create mode 100644 arch/arm64/kvm/hyp/nvhe/stacktrace.c > > > > > > > > > base-commit: 82a592c13b0aeff94d84d54183dae0b26384c95f > > > -- > > > 2.37.0.170.g444d1eabd0-goog > > > > > > > -- > > To unsubscribe from this group and stop receiving emails from it, send an email to kernel-team+unsubscribe@android.com. > >