From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-14.5 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B701AC43461 for ; Mon, 14 Sep 2020 17:30:12 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6C84E20771 for ; Mon, 14 Sep 2020 17:30:12 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="pPF4+Tw3"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=google.com header.i=@google.com header.b="FSOe1Y/p" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6C84E20771 Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Message-Id:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=bvwVA0kNV6UdlMwmq+rLd9Ur1tkMnwWs0ZHZk4UKuNA=; b=pPF4+Tw3T0UhSSvvcAq8Q/MeD /t00oEOY2y2bAZJQMX4jXWZixH4f99Tgt8aZ4RXHRtG2vd71v4RRgOT5DBD4N5ahUR6qmkMFndHCU u/Z0dY+J7IuGQKG6BplnQdbS4Hvli1WLbL28zMFtsk3RQQ31nAqUilhYDKa7hmOBT1bKZ9tgKdzXp jNqYk2RlpVuuXq7jsI7ZcLzPRGh7jIDz/X4Jb2+TZ48gZJuC5Ifwq3JQY5JUX69XMqTm7dfMzHW1+ imHAEwbEAa9EHjh5x8u9opIqlUUM5y5lDunJgycbodBLR42YqjiBrr89T7P2BfWW7B2nBJCSVWQOB aAxR9GsHw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kHsHE-0000et-E9; Mon, 14 Sep 2020 17:28:28 +0000 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kHsGu-0000YQ-HA for linux-arm-kernel@lists.infradead.org; Mon, 14 Sep 2020 17:28:09 +0000 Received: by mail-wr1-x441.google.com with SMTP id j2so498732wrx.7 for ; Mon, 14 Sep 2020 10:28:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=I6yqR/klZ/NDqjAIsRW35d99E4ctp6zjUJ0+p6Qp1zk=; b=FSOe1Y/pA7hRXZNY72c3hBMe/ljMhIxE66K1pTUUVfwNFBvaQYXA0ufNm+qIClk/O+ vSZsvcN95MRwsi4JST1sCCLEHKfM6IxEY+MgDFP6z9uKuUgcIvWt5hwCegR+9a1Jcv+m gH8n0l5ZthmU1P5z+mETgJcgbXbDYJRY1i+0IQl2VaY5ngsnCmqitgyxHOxZkLnS/B7t UXFp+ntUx01PcgEYtHtyrccldppKaZ9Ry1m3p4Dc7kdsdGGPgDEoyTew8juouV20fTWo Q1wv6gsGClBEW0C3ySzRBVme5tXhbZYou1yowCKvdKf4SFhFjQehcpiWYtQM5a8kPB4j BwGg== 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:mime-version:content-transfer-encoding; bh=I6yqR/klZ/NDqjAIsRW35d99E4ctp6zjUJ0+p6Qp1zk=; b=N2/aGmlUfE888zV6pZAO1n23RJuSIaRol/OGtiMbpnmQLVtwbHqYf5BexiQX245szF uBQslHWWqdLFIj+Xl+nXvE02HTTG8XKiCTZDfC4G5oVX8tcISIBS6//ZbjsYotyxC4sd gWqRNtZU+5ysFVcv5AZr5YiFNXLYGOXjHlBWBxSFbVpq9u9ihpCwu3BgkNROIKDGV3P2 ao91C1wZCsyslX98psLRY6Vks3o2NB/pvV+7pyEIe/z8YoVLdMwAnlrG3Ev93UECQqXa xUUAF949fKirSpOzj0cfj3ziw5uZADLO4pZXGh8ZZ8AkrCZG0dfQM1IAGxVPsVtgqa7V xCbQ== X-Gm-Message-State: AOAM530AsU8r0yCpafaa2tBfx/6NKPJvx/QIjyCPBRruEX+t7bDYXPgC hhtqYo6BGjkRSceYIoUlv6s9DA== X-Google-Smtp-Source: ABdhPJwcqjA/RfbM7RQw4khYb1A0QPdinAlS/u4JKeOCntEaITKsGnzpJGBE/zpzmvvaUWtI9yB3Ig== X-Received: by 2002:adf:f586:: with SMTP id f6mr16953275wro.299.1600104487527; Mon, 14 Sep 2020 10:28:07 -0700 (PDT) Received: from localhost (49.222.77.34.bc.googleusercontent.com. [34.77.222.49]) by smtp.gmail.com with ESMTPSA id h2sm22418218wrp.69.2020.09.14.10.28.06 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 14 Sep 2020 10:28:06 -0700 (PDT) From: George-Aurelian Popescu To: maz@kernel.org, catalin.marinas@arm.com, will@kernel.org, masahiroy@kernel.org, michal.lkml@markovi.net Subject: [PATCH 03/14] KVM: arm64: Add support for creating and checking a logging buffer inside hyp/nVHE Date: Mon, 14 Sep 2020 17:27:39 +0000 Message-Id: <20200914172750.852684-4-georgepope@google.com> X-Mailer: git-send-email 2.28.0.618.gf4bc123cb7-goog In-Reply-To: <20200914172750.852684-1-georgepope@google.com> References: <20200914172750.852684-1-georgepope@google.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200914_132808_631907_5071AFFE X-CRM114-Status: GOOD ( 21.74 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: arnd@arndb.de, elver@google.com, tglx@linutronix.de, keescook@chromium.org, maskray@google.com, linux-kbuild@vger.kernel.org, suzuki.poulose@arm.com, ndesaulniers@google.com, linux-kernel@vger.kernel.org, akpm@linux-foundation.org, George Popescu , clang-built-linux@googlegroups.com, broonie@kernel.org, james.morse@arm.com, julien.thierry.kdev@gmail.com, dvyukov@google.com, natechancellor@gmail.com, dbrazdil@google.com, kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org, ascull@google.com Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: George Popescu Share a buffer between the kernel and the hyp/nVHE code by using the macros from kvm_debug_buffer.h. The buffer is composed of a writing index and a statically allocated array. The writing index counts how many elements have been written inside the buffer and should be set to zero whenever the code goes back to EL2 with the clear_kvm_debug_buffer macro. To avoid consistency problems the buffer is defined per_cpu and is designed to be read-only from the kernel perspective. Check if there is any logging data from hyp/nVHE code. Every time when the state returns back to the kernel after an hvc call, the __kvm_arm_check_debug_buffer macro checks if there is any data inside one of the predefined buffers. Signed-off-by: George Popescu --- arch/arm64/include/asm/kvm_debug_buffer.h | 34 +++++++++++++++++++++++ arch/arm64/include/asm/kvm_host.h | 6 ++++ arch/arm64/kvm/hyp/hyp-entry.S | 2 +- 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 arch/arm64/include/asm/kvm_debug_buffer.h diff --git a/arch/arm64/include/asm/kvm_debug_buffer.h b/arch/arm64/include/asm/kvm_debug_buffer.h new file mode 100644 index 000000000000..30c9b0b1a7bf --- /dev/null +++ b/arch/arm64/include/asm/kvm_debug_buffer.h @@ -0,0 +1,34 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright 2020 Google LLC + * Author: George Popescu + */ +#ifndef __ASSEMBLY__ + +#include +#include + +#ifdef __KVM_NVHE_HYPERVISOR__ +#define DEFINE_KVM_DEBUG_BUFFER(type_name, buff_name, size) \ + DEFINE_PER_CPU(type_name, buff_name)[(size)]; \ + DEFINE_PER_CPU(unsigned long, buff_name##_wr_ind) = 0 + +#define DECLARE_KVM_DEBUG_BUFFER(type_name, buff_name, size) \ + DECLARE_PER_CPU(type_name, buff_name)[(size)]; \ + DECLARE_PER_CPU(unsigned long, buff_name##_wr_ind) + +#else + +#define DECLARE_KVM_DEBUG_BUFFER(type_name, buff_name, size) \ + DECLARE_PER_CPU(type_name, kvm_nvhe_sym(buff_name))[(size)]; \ + DECLARE_PER_CPU(unsigned long, kvm_nvhe_sym(buff_name##_wr_ind)) +#endif //__KVM_NVHE_HYPERVISOR__ + +#else + +.macro clear_kvm_debug_buffer sym tmp1, tmp2, tmp3 + mov \tmp1, 0 + hyp_str_this_cpu \sym, \tmp1, \tmp2, \tmp3 +.endm + +#endif // __ASSEMBLY__ diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h index 905c2b87e05a..adc8957e9321 100644 --- a/arch/arm64/include/asm/kvm_host.h +++ b/arch/arm64/include/asm/kvm_host.h @@ -494,6 +494,10 @@ u64 __kvm_call_hyp(void *hypfn, ...); __kvm_call_hyp(kvm_ksym_ref_nvhe(f), ##__VA_ARGS__); \ }) +#define __kvm_arm_check_debug_buffer() \ +{ \ +} + /* * The couple of isb() below are there to guarantee the same behaviour * on VHE as on !VHE, where the eret to EL1 acts as a context @@ -506,6 +510,7 @@ u64 __kvm_call_hyp(void *hypfn, ...); isb(); \ } else { \ kvm_call_hyp_nvhe(f, ##__VA_ARGS__); \ + __kvm_arm_check_debug_buffer(); \ } \ } while(0) @@ -518,6 +523,7 @@ u64 __kvm_call_hyp(void *hypfn, ...); isb(); \ } else { \ ret = kvm_call_hyp_nvhe_ret(f, ##__VA_ARGS__); \ + __kvm_arm_check_debug_buffer(); \ } \ \ ret; \ diff --git a/arch/arm64/kvm/hyp/hyp-entry.S b/arch/arm64/kvm/hyp/hyp-entry.S index 46b4dab933d0..8df0082b9ccf 100644 --- a/arch/arm64/kvm/hyp/hyp-entry.S +++ b/arch/arm64/kvm/hyp/hyp-entry.S @@ -68,7 +68,7 @@ el1_sync: // Guest trapped into EL2 cbnz x1, el1_hvc_guest // called HVC /* Here, we're pretty sure the host called HVC. */ - ldp x0, x1, [sp], #16 + ldp x0, x1, [sp], #16 /* Check for a stub HVC call */ cmp x0, #HVC_STUB_HCALL_NR -- 2.28.0.618.gf4bc123cb7-goog _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel