Received: by 2002:ac0:da4c:0:0:0:0:0 with SMTP id a12csp409836imi; Thu, 21 Jul 2022 03:37:50 -0700 (PDT) X-Google-Smtp-Source: AGRyM1uGdhmM89GPyI/amWKSGe7+gj7d5xFbFjicx21b13QVHYOSHXy4XFhSUPaJcfqgXt0Ih37r X-Received: by 2002:a05:6a00:1688:b0:517:cf7b:9293 with SMTP id k8-20020a056a00168800b00517cf7b9293mr43703159pfc.7.1658399870543; Thu, 21 Jul 2022 03:37:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1658399870; cv=none; d=google.com; s=arc-20160816; b=SjmG7zagieKYFl9L4OamsB5ycwQjocfDqHzUPRaUfR8QuOl3x+QL12E6YHSpoUhQyr KyBpJgq1/fOK3uxIQxAl2j4zP45S3RBwJyYeAE07HFiqXbn9mirRHj4Rf2VeP3fvEQhj bvvIPxQsYY8XcDYhtsfMw2hZprxiGClEJAJvpCoV05KFi+kQIGMpbJ0POO4Xv9dBGM8t nMJbopvozpFrJh85CkEWUAovkL+Rpz/N2OMJ4fRB7UIVTw4JXskUge3f8ci8we9Vnigr vRiROKVehVX7+tEep16dRCYl3MmwvEDJf22rwlWvSETJRhIRtexeb2XK6wu/JClwHeRO teYw== 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=ICWtRl11EBLkBuC8EKMztaMYVbdXxjQF2E9VxjALgEA=; b=BNns8nnjZES9omW823jkhnlhVH8SmAM7J6Zi+hOheiCe42vwIZKju+RUCfQYg918uv adVS3ma+61CHHlIp8SYjgtn6g5rGYGIaDREIsyDoRzeWwSCZGQlooM/TIbFXGyy0mN0S Et6S3HAYuvCH24pXuA1yJG6Mc2CUGj6WIeNlva3s/FPJ7ltdhVU7VCEhf3Jg6BJTeTt7 qYotVVi1aCSn6NWaNxHPd8AJL/kUw858Igh2N+nTr5bvdb1IvdEBTDX5DzEzx2BuBl/H 67HrW/myvZjQwcd2puIBy6gue8D5R9FPSdOAZ6cyXgDby10sXiqdpMvTL5LNTgqYlb9R sQ3A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=WE9n3XAr; 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 pj5-20020a17090b4f4500b001f1f2c8e330si1885284pjb.4.2022.07.21.03.37.35; Thu, 21 Jul 2022 03:37:50 -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=WE9n3XAr; 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 S232950AbiGUJ72 (ORCPT + 99 others); Thu, 21 Jul 2022 05:59:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57722 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232989AbiGUJ7L (ORCPT ); Thu, 21 Jul 2022 05:59:11 -0400 Received: from mail-ej1-x629.google.com (mail-ej1-x629.google.com [IPv6:2a00:1450:4864:20::629]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E6906820DB for ; Thu, 21 Jul 2022 02:59:09 -0700 (PDT) Received: by mail-ej1-x629.google.com with SMTP id tk8so2253741ejc.7 for ; Thu, 21 Jul 2022 02:59:09 -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=ICWtRl11EBLkBuC8EKMztaMYVbdXxjQF2E9VxjALgEA=; b=WE9n3XArdq7o+kzZ13s0vVvM7r42mMYB85W4rZvYcjhnt9r9XI5WbIKrjfW1LQ1pZo 4fVZ1r/gPV499EesnIUsH8/MWOY20iAEm2+xGjR9KwHQBrsI9oS9+8qrC3JcYcoGSuDz S9eIWpz9x8RfGmZjQ+JZaXzfj6NvJ9/sYg+VD2tIoCHNXHeaNnyeoQpI5bLB+0ivhEqV a9gxnXEBoATbkdyY+gfySkgoHPGutTbCt/BPyng0x12sMOIdkXPGgI22eLE3kU7m/gQ9 RydAP1+0G3mYntwQK5R9Vvpu482j61AuTxmLn/cJolqCYiX3YLHELJit8Zhx687II1lL eKNA== 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=ICWtRl11EBLkBuC8EKMztaMYVbdXxjQF2E9VxjALgEA=; b=J20RfTBqrbYIWaVXG/zsHzHqu7HKJJtjtC0Sp4KjHtGrtshzvArpP0GK+cD5iFQz62 z5yxNwOMSYiSCC+I039UjQIvBQWOzdIfBJ4DKof+Y1ZZFo5eO1iaaJq1qQTOJs/11Ers RXJbarwxVK35xA/JXRL5JqCED3yxwMF7Xhok5SfEL2Jec3VnfSQ70z9TW4555hVPx7PC NWARv//uW3OI6+XcCr78PGs4XihXxuebIQ/4Zf5gB+TqpWH3DxgZ+CSg0j59xDFM4QSd PHUu3urjZ1xtLJN+36XPe8o5TakoyKTlaWbIfjNZd4Iq6tmWvjmMe871aQ1ViwdOW1Dv qSBQ== X-Gm-Message-State: AJIora9XSzrOyetI97ECWB51LEy43W9d6SAEB2ulEIEde7nq6+zbSfTk XGHJEAB9iWA4V8Jvf/V1AishjJePuzs6DjcHCHJ85g== X-Received: by 2002:a17:907:7ea7:b0:72b:6e6b:4895 with SMTP id qb39-20020a1709077ea700b0072b6e6b4895mr39726176ejc.338.1658397549012; Thu, 21 Jul 2022 02:59:09 -0700 (PDT) MIME-Version: 1.0 References: <20220721055728.718573-1-kaleshsingh@google.com> <20220721055728.718573-14-kaleshsingh@google.com> In-Reply-To: <20220721055728.718573-14-kaleshsingh@google.com> From: Fuad Tabba Date: Thu, 21 Jul 2022 10:58:32 +0100 Message-ID: Subject: Re: [PATCH v5 13/17] KVM: arm64: Prepare non-protected nVHE hypervisor stacktrace To: Kalesh Singh Cc: maz@kernel.org, mark.rutland@arm.com, broonie@kernel.org, madvenka@linux.microsoft.com, will@kernel.org, qperret@google.com, james.morse@arm.com, alexandru.elisei@arm.com, suzuki.poulose@arm.com, catalin.marinas@arm.com, andreyknvl@gmail.com, vincenzo.frascino@arm.com, mhiramat@kernel.org, ast@kernel.org, wangkefeng.wang@huawei.com, elver@google.com, keirf@google.com, yuzenghui@huawei.com, ardb@kernel.org, oupton@google.com, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, linux-kernel@vger.kernel.org, kernel-team@android.com 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 Hi Kalesh, On Thu, Jul 21, 2022 at 6:58 AM Kalesh Singh wrote: > > In non-protected nVHE mode (non-pKVM) the host can directly access > hypervisor memory; and unwinding of the hypervisor stacktrace is > done from EL1 to save on memory for shared buffers. > > To unwind the hypervisor stack from EL1 the host needs to know the > starting point for the unwind and information that will allow it to > translate hypervisor stack addresses to the corresponding kernel > addresses. This patch sets up this book keeping. It is made use of > later in the series. > > Signed-off-by: Kalesh Singh > --- Reviewed-by: Fuad Tabba Cheers, /fuad > > Changes in v5: > - Use regular comments instead of doc comments, per Fuad > > arch/arm64/include/asm/kvm_asm.h | 16 ++++++++++++++++ > arch/arm64/include/asm/stacktrace/nvhe.h | 4 ++++ > arch/arm64/kvm/hyp/nvhe/stacktrace.c | 24 ++++++++++++++++++++++++ > 3 files changed, 44 insertions(+) > > diff --git a/arch/arm64/include/asm/kvm_asm.h b/arch/arm64/include/asm/kvm_asm.h > index 2e277f2ed671..53035763e48e 100644 > --- a/arch/arm64/include/asm/kvm_asm.h > +++ b/arch/arm64/include/asm/kvm_asm.h > @@ -176,6 +176,22 @@ struct kvm_nvhe_init_params { > unsigned long vtcr; > }; > > +/* > + * Used by the host in EL1 to dump the nVHE hypervisor backtrace on > + * hyp_panic() in non-protected mode. > + * > + * @stack_base: hyp VA of the hyp_stack base. > + * @overflow_stack_base: hyp VA of the hyp_overflow_stack base. > + * @fp: hyp FP where the backtrace begins. > + * @pc: hyp PC where the backtrace begins. > + */ > +struct kvm_nvhe_stacktrace_info { > + unsigned long stack_base; > + unsigned long overflow_stack_base; > + unsigned long fp; > + unsigned long pc; > +}; > + > /* Translate a kernel address @ptr into its equivalent linear mapping */ > #define kvm_ksym_ref(ptr) \ > ({ \ > diff --git a/arch/arm64/include/asm/stacktrace/nvhe.h b/arch/arm64/include/asm/stacktrace/nvhe.h > index 05d7e03e0a8c..8f02803a005f 100644 > --- a/arch/arm64/include/asm/stacktrace/nvhe.h > +++ b/arch/arm64/include/asm/stacktrace/nvhe.h > @@ -19,6 +19,7 @@ > #ifndef __ASM_STACKTRACE_NVHE_H > #define __ASM_STACKTRACE_NVHE_H > > +#include > #include > > /* > @@ -52,6 +53,9 @@ static inline bool on_accessible_stack(const struct task_struct *tsk, > * In protected mode, the unwinding is done by the hypervisor in EL2. > */ > > +DECLARE_PER_CPU(unsigned long [OVERFLOW_STACK_SIZE/sizeof(long)], overflow_stack); > +DECLARE_PER_CPU(struct kvm_nvhe_init_params, kvm_init_params); > + > #ifdef CONFIG_PROTECTED_NVHE_STACKTRACE > static inline bool on_overflow_stack(unsigned long sp, unsigned long size, > struct stack_info *info) > diff --git a/arch/arm64/kvm/hyp/nvhe/stacktrace.c b/arch/arm64/kvm/hyp/nvhe/stacktrace.c > index 60461c033a04..cbd365f4f26a 100644 > --- a/arch/arm64/kvm/hyp/nvhe/stacktrace.c > +++ b/arch/arm64/kvm/hyp/nvhe/stacktrace.c > @@ -9,6 +9,28 @@ > DEFINE_PER_CPU(unsigned long [OVERFLOW_STACK_SIZE/sizeof(long)], overflow_stack) > __aligned(16); > > +DEFINE_PER_CPU(struct kvm_nvhe_stacktrace_info, kvm_stacktrace_info); > + > +/* > + * hyp_prepare_backtrace - Prepare non-protected nVHE backtrace. > + * > + * @fp : frame pointer at which to start the unwinding. > + * @pc : program counter at which to start the unwinding. > + * > + * Save the information needed by the host to unwind the non-protected > + * nVHE hypervisor stack in EL1. > + */ > +static void hyp_prepare_backtrace(unsigned long fp, unsigned long pc) > +{ > + struct kvm_nvhe_stacktrace_info *stacktrace_info = this_cpu_ptr(&kvm_stacktrace_info); > + struct kvm_nvhe_init_params *params = this_cpu_ptr(&kvm_init_params); > + > + stacktrace_info->stack_base = (unsigned long)(params->stack_hyp_va - PAGE_SIZE); > + stacktrace_info->overflow_stack_base = (unsigned long)this_cpu_ptr(overflow_stack); > + stacktrace_info->fp = fp; > + stacktrace_info->pc = pc; > +} > + > #ifdef CONFIG_PROTECTED_NVHE_STACKTRACE > DEFINE_PER_CPU(unsigned long [NVHE_STACKTRACE_SIZE/sizeof(long)], pkvm_stacktrace); > > @@ -89,4 +111,6 @@ void kvm_nvhe_prepare_backtrace(unsigned long fp, unsigned long pc) > { > if (is_protected_kvm_enabled()) > pkvm_save_backtrace(fp, pc); > + else > + hyp_prepare_backtrace(fp, pc); > } > -- > 2.37.0.170.g444d1eabd0-goog >