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 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id CAA72EB64DA for ; Wed, 19 Jul 2023 07:54:55 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 246678D004D; Wed, 19 Jul 2023 03:54:55 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 1F6A98D004B; Wed, 19 Jul 2023 03:54:55 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0BF0E8D004D; Wed, 19 Jul 2023 03:54:55 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id EFFE08D004B for ; Wed, 19 Jul 2023 03:54:54 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 6D006C01AF for ; Wed, 19 Jul 2023 07:54:54 +0000 (UTC) X-FDA: 81027600108.25.0C08566 Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by imf21.hostedemail.com (Postfix) with ESMTP id 2CC601C001B for ; Wed, 19 Jul 2023 07:54:50 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=fetHt2VI; dmarc=pass (policy=none) header.from=intel.com; spf=none (imf21.hostedemail.com: domain of yuan.yao@linux.intel.com has no SPF policy when checking 192.55.52.88) smtp.mailfrom=yuan.yao@linux.intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1689753291; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=yaJwdFyjro6M2FEeGncnSkjBKDUD9N+E/X0TIYNarFg=; b=emaaDkNRi/PyBkHuT7/AW/hml8EoSM3R9mYjyI8mR6dBm30tmP+n+v6OQslH3v8fXsShOJ HYiXece9Fht+R8+lqloPE0nLw9ql4pazLBqYhGCzBInDjERenV2JG1nfo1rVJabKKBYssc lLd4jfDbYJyNOzF37IaYe7p7NYewR0w= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=fetHt2VI; dmarc=pass (policy=none) header.from=intel.com; spf=none (imf21.hostedemail.com: domain of yuan.yao@linux.intel.com has no SPF policy when checking 192.55.52.88) smtp.mailfrom=yuan.yao@linux.intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1689753291; a=rsa-sha256; cv=none; b=NN4w2dyeXJ5o355YuORK8SK2UqydUaKwcBdBIuaXqOWi9Gk8F+NAMkeEuzX7KD4e9HLsZ9 y7w1+t1ae6zRvUswbT40/0U1XYGutixyqQU7lPEetxQCY+3n2IXXC026bCGl3PewSdZJpD iPy3MjHYQl/fUCo9Aj0kwGj1oJc7ijY= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1689753291; x=1721289291; h=date:from:to:cc:subject:message-id:references: mime-version:in-reply-to; bh=1N+W8cRNC9pUexWe7qJQhUtuOwgwVBF4LoLojnPzLGM=; b=fetHt2VInBiDXbu65R5F6FR33f222AagAcrQx+2X0Mswtkj8n6WgSXdE zD0ciuZYtc+MeShDQCWwhhZyk1fd6kwzlOfv0hdZVr3MxmkrenHPwIkan fGpfea2J+eRL76n/J43CjHg2dJd46HFsNdJd8rzeTAWEat4NHnxDj02J3 p6cP0Nm8WGAyYPW5xQitfp73pnoupDQa7pQaTzhCDhakWyiCAZfWKXyIn ct5WhCy5E7FsVMUGWfPvQlzCJR6Z4MVrAm4Vj9TBmSWYOXN2sjHm9Kduq 6QJ54CCvNmkd4600pnA0zeRSXFaDJ4W+zfm+BNu0Cln6bXIEaOIkcbYdh Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10775"; a="397250612" X-IronPort-AV: E=Sophos;i="6.01,216,1684825200"; d="scan'208";a="397250612" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Jul 2023 00:54:49 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10775"; a="814045464" X-IronPort-AV: E=Sophos;i="6.01,216,1684825200"; d="scan'208";a="814045464" Received: from yy-desk-7060.sh.intel.com (HELO localhost) ([10.239.159.76]) by FMSMGA003.fm.intel.com with ESMTP; 19 Jul 2023 00:54:41 -0700 Date: Wed, 19 Jul 2023 15:54:40 +0800 From: Yuan Yao To: Sean Christopherson Cc: Paolo Bonzini , Marc Zyngier , Oliver Upton , Huacai Chen , Michael Ellerman , Anup Patel , Paul Walmsley , Palmer Dabbelt , Albert Ou , "Matthew Wilcox (Oracle)" , Andrew Morton , Paul Moore , James Morris , "Serge E. Hallyn" , kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linux-mips@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-security-module@vger.kernel.org, linux-kernel@vger.kernel.org, Chao Peng , Fuad Tabba , Jarkko Sakkinen , Yu Zhang , Vishal Annapurve , Ackerley Tng , Maciej Szmigiero , Vlastimil Babka , David Hildenbrand , Quentin Perret , Michael Roth , Wang , Liam Merwick , Isaku Yamahata , "Kirill A . Shutemov" Subject: Re: [RFC PATCH v11 07/29] KVM: Add KVM_EXIT_MEMORY_FAULT exit Message-ID: <20230719075440.m3h653frqggaiusc@yy-desk-7060> References: <20230718234512.1690985-1-seanjc@google.com> <20230718234512.1690985-8-seanjc@google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20230718234512.1690985-8-seanjc@google.com> User-Agent: NeoMutt/20171215 X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 2CC601C001B X-Stat-Signature: s63ebw3t4zptjnezx5meuxmqofycgh8u X-HE-Tag: 1689753290-163593 X-HE-Meta: U2FsdGVkX1/CdCoYN0wgjf+mpssMShcPXDttQGnM33e7jnoOXAabFGYnaLHezfp9pJfCwXCaSrFhOy7TOgwsWGTQf8WlyYR0AARPfOWs36U3a8Q0QiDcXzYl6fhvNC30ej44xTB7xbUQLg0I7Y8lTs3qq+bfDf5e28WxS2/5UD3mn5Cm1aUZpaXEBxpUUzIAeMwDKqu3Chm/1LNi6AkFezs7V0Ys6oqHcpWIPAlEL8DryTSqUTmrWaxW2G3hhpkkgB93ir4LsCUtN2OVH868N+6v9VWWEODdQ3xJgt63Oa07JuqD0AYcMlhpnQEltbf/+xsS3xzdfo8VXrgiJT30gTBxbDV/OxjSnSYhYi07Q3roqJJefTbSUNxQy2TFyj7rMG0TaZZMJnrr5LLRxip6ESmnbK9CDeFCGwAl8h7zRsr2Uf6hez4YjsyGFNzC4Mm2CnK/DzYBuoOQuUP0l3CK1bHfV3bfMsgu0x/jnqLdkziE2uCtZfvAuGHq/XE4NnqF5CzHeNyOeBvmSx1327eqpAQRI4YlNJIROfFB5VMCl4/wyiNY83l2Xk4Zp/EZOJ/9K/9iKEzc2Oo26HotnUOlTS1Zipm3BHuTxt/hOpKwsLWFL3P82IhZmBC3maLSMHQnt+ldgJoeWvETVN31ihDyLCsCyGSMUV/hjVql8BhxS+3jRYmak2d2hQmgucgmI01aCzqqBqaDB0Q6dqKsYriH+NVfdPTLl4cQGLxdg+KbSNHuZqdWcYZ41ZsCQVNbd55ES1CE6YbS20epi0QQMKb/xShsVKo74xoiVNGWeOM1mg+Uq9ut6Ggsob75k3NcLuNsxgSE3IAYTRMDq8GiAgQg5v2M4BjfABfoNkQsZtS06jBbQ3AoASNLnO+P3GS19+bKTnP/bRZYKxkYqSRzs7DoyVCxusI21g2tg/B8eX+pnjEt7vyiDy6Q8mhbxOuvzQAjc4C23iBL/0tAO/ltG9s 98hT556T 1QbnlH8S/e1s9cLwjLljtGFutDVlxVl7q/vg0NqsBOn89bUoy8g/5t6qM3v4wTIaHriAFlUAa0kIpVXArWuhMmg4HUJOurXKwxhz61xcHu670t8d92QOUOEPYGw8yB0ziVc2qyoVsVX6s6U15X2Q60z1CIQFdVgmraHI0ZTHxEhId7IOMBt6xqCmMMmbCYejCN+biSoRgnfvBD8GMYpAhrNrpeaooZSNazqg/YUw2PecyxRZ9hOT55VtpyjBfahD8aCo5sJs5TK6Ocl7GW2xHPy/uDj8ip9f3HCnbxe+CoYLkSsVuEYurbTalF+gd3L6ZD5GS X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Tue, Jul 18, 2023 at 04:44:50PM -0700, Sean Christopherson wrote: > From: Chao Peng > > This new KVM exit allows userspace to handle memory-related errors. It > indicates an error happens in KVM at guest memory range [gpa, gpa+size). > The flags includes additional information for userspace to handle the > error. Currently bit 0 is defined as 'private memory' where '1' > indicates error happens due to private memory access and '0' indicates > error happens due to shared memory access. Now it's bit 3: #define KVM_MEMORY_EXIT_FLAG_PRIVATE (1ULL << 3) I remember some other attributes were introduced in v10 yet: #define KVM_MEMORY_ATTRIBUTE_READ (1ULL << 0) #define KVM_MEMORY_ATTRIBUTE_WRITE (1ULL << 1) #define KVM_MEMORY_ATTRIBUTE_EXECUTE (1ULL << 2) #define KVM_MEMORY_ATTRIBUTE_PRIVATE (1ULL << 3) So KVM_MEMORY_EXIT_FLAG_PRIVATE changed to bit 3 due to above things, or other reason ? (Sorry I didn't follow v10 too much before). > > When private memory is enabled, this new exit will be used for KVM to > exit to userspace for shared <-> private memory conversion in memory > encryption usage. In such usage, typically there are two kind of memory > conversions: > - explicit conversion: happens when guest explicitly calls into KVM > to map a range (as private or shared), KVM then exits to userspace > to perform the map/unmap operations. > - implicit conversion: happens in KVM page fault handler where KVM > exits to userspace for an implicit conversion when the page is in a > different state than requested (private or shared). > > Suggested-by: Sean Christopherson > Co-developed-by: Yu Zhang > Signed-off-by: Yu Zhang > Signed-off-by: Chao Peng > Reviewed-by: Fuad Tabba > Tested-by: Fuad Tabba > Signed-off-by: Sean Christopherson > --- > Documentation/virt/kvm/api.rst | 22 ++++++++++++++++++++++ > include/uapi/linux/kvm.h | 8 ++++++++ > 2 files changed, 30 insertions(+) > > diff --git a/Documentation/virt/kvm/api.rst b/Documentation/virt/kvm/api.rst > index c0ddd3035462..34d4ce66e0c8 100644 > --- a/Documentation/virt/kvm/api.rst > +++ b/Documentation/virt/kvm/api.rst > @@ -6700,6 +6700,28 @@ array field represents return values. The userspace should update the return > values of SBI call before resuming the VCPU. For more details on RISC-V SBI > spec refer, https://github.com/riscv/riscv-sbi-doc. > > +:: > + > + /* KVM_EXIT_MEMORY_FAULT */ > + struct { > + #define KVM_MEMORY_EXIT_FLAG_PRIVATE (1ULL << 3) > + __u64 flags; > + __u64 gpa; > + __u64 size; > + } memory; > + > +If exit reason is KVM_EXIT_MEMORY_FAULT then it indicates that the VCPU has > +encountered a memory error which is not handled by KVM kernel module and > +userspace may choose to handle it. The 'flags' field indicates the memory > +properties of the exit. > + > + - KVM_MEMORY_EXIT_FLAG_PRIVATE - indicates the memory error is caused by > + private memory access when the bit is set. Otherwise the memory error is > + caused by shared memory access when the bit is clear. > + > +'gpa' and 'size' indicate the memory range the error occurs at. The userspace > +may handle the error and return to KVM to retry the previous memory access. > + > :: > > /* KVM_EXIT_NOTIFY */ > diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h > index 4d4b3de8ac55..6c6ed214b6ac 100644 > --- a/include/uapi/linux/kvm.h > +++ b/include/uapi/linux/kvm.h > @@ -274,6 +274,7 @@ struct kvm_xen_exit { > #define KVM_EXIT_RISCV_SBI 35 > #define KVM_EXIT_RISCV_CSR 36 > #define KVM_EXIT_NOTIFY 37 > +#define KVM_EXIT_MEMORY_FAULT 38 > > /* For KVM_EXIT_INTERNAL_ERROR */ > /* Emulate instruction failed. */ > @@ -520,6 +521,13 @@ struct kvm_run { > #define KVM_NOTIFY_CONTEXT_INVALID (1 << 0) > __u32 flags; > } notify; > + /* KVM_EXIT_MEMORY_FAULT */ > + struct { > +#define KVM_MEMORY_EXIT_FLAG_PRIVATE (1ULL << 3) > + __u64 flags; > + __u64 gpa; > + __u64 size; > + } memory; > /* Fix the size of the union. */ > char padding[256]; > }; > -- > 2.41.0.255.g8b1d071c50-goog >