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 1ED5FC54EBD for ; Tue, 3 Jan 2023 01:44:19 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4B7848E0002; Mon, 2 Jan 2023 20:44:19 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 467838E0001; Mon, 2 Jan 2023 20:44:19 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 307B18E0002; Mon, 2 Jan 2023 20:44:19 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 203408E0001 for ; Mon, 2 Jan 2023 20:44:19 -0500 (EST) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id DEBC11601AE for ; Tue, 3 Jan 2023 01:44:18 +0000 (UTC) X-FDA: 80311792596.30.DF62C4B Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by imf06.hostedemail.com (Postfix) with ESMTP id 91F8B180007 for ; Tue, 3 Jan 2023 01:44:16 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b="PLCa/2h/"; spf=none (imf06.hostedemail.com: domain of chao.p.peng@linux.intel.com has no SPF policy when checking 192.55.52.43) smtp.mailfrom=chao.p.peng@linux.intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1672710256; h=from:from:sender:reply-to: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=vDBBvU6SLd276ugUWgmCvKhANkAEQxOzqmqsNn23vNc=; b=ZMmxEn9QD3IpvbF8FhXbIJWzz5+Azw5rUoNykxqKwBBCJSCMHErnx9TgQJbtC5NmURxZ9o lBerC4T3At73ViMqqeI/Mz1QPqDcFgnH53/yi913egMEOsim/G3rAiH3zshwnCro1o7vNF /E0AYNmyj7Csl5zOSfU3ygVymAk2150= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b="PLCa/2h/"; spf=none (imf06.hostedemail.com: domain of chao.p.peng@linux.intel.com has no SPF policy when checking 192.55.52.43) smtp.mailfrom=chao.p.peng@linux.intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1672710256; a=rsa-sha256; cv=none; b=1W2TuQN1vfHNjJy+eRG1U6KAdAohElVI7xUl7/WqeNQJx9TnOFateen9SHbJRTz+uXZhCE 4sAbB4Ap+H8+NHKZxLUOY6fuu80V9hw2+Pmri5PxryY4/wUuB/ziBZfyGimlMQEbkfr8b7 bnwwIdwrVM4AWVpIGnwdBkRs3y0B7jQ= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1672710256; x=1704246256; h=date:from:to:cc:subject:message-id:reply-to:references: mime-version:in-reply-to; bh=kIuNdU/0BTpRBUyYlNa5j3GUvL63FAbv1n39zRBT40o=; b=PLCa/2h/drifhohV2EnYCOXqk8LWleFlCicEX6SHgxuxLju9zBurn8ET M/MLRbtocHNEO6ZfvNkqO8bfaInQCLcszhk3SlOO6rryueOJ9DpXNIJtw IY565KRMR3pMTjfeV43MbAqA6ocUwxQOU7b4I6+UnSePTq78qhE/aaPMI lFkXmqPL6B09l5W82vj9R548mokJvlBTwmvXKQTBMw16bseLrKcELX2kK MnhPXaLQFUCAMh4dOlv3ZrfIud7tbaIC6Bikd3krwXxNY9mcqBLY9wxv4 OkhFR6av1qy6EA3yVwnreXjxXf7GCa/GCY6TftguduTYwkBYypJrPNuas A==; X-IronPort-AV: E=McAfee;i="6500,9779,10578"; a="407822379" X-IronPort-AV: E=Sophos;i="5.96,295,1665471600"; d="scan'208";a="407822379" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Jan 2023 17:44:14 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10578"; a="828701041" X-IronPort-AV: E=Sophos;i="5.96,295,1665471600"; d="scan'208";a="828701041" Received: from chaop.bj.intel.com (HELO localhost) ([10.240.193.75]) by orsmga005.jf.intel.com with ESMTP; 02 Jan 2023 17:44:01 -0800 Date: Tue, 3 Jan 2023 09:39:48 +0800 From: Chao Peng To: Chenyi Qiang Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-arch@vger.kernel.org, linux-api@vger.kernel.org, linux-doc@vger.kernel.org, qemu-devel@nongnu.org, Paolo Bonzini , Jonathan Corbet , Sean Christopherson , Vitaly Kuznetsov , Wanpeng Li , Jim Mattson , Joerg Roedel , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Arnd Bergmann , Naoya Horiguchi , Miaohe Lin , x86@kernel.org, "H . Peter Anvin" , Hugh Dickins , Jeff Layton , "J . Bruce Fields" , Andrew Morton , Shuah Khan , Mike Rapoport , Steven Price , "Maciej S . Szmigiero" , Vlastimil Babka , Vishal Annapurve , Yu Zhang , "Kirill A . Shutemov" , luto@kernel.org, jun.nakajima@intel.com, dave.hansen@intel.com, ak@linux.intel.com, david@redhat.com, aarcange@redhat.com, ddutile@redhat.com, dhildenb@redhat.com, Quentin Perret , tabba@google.com, Michael Roth , mhocko@suse.com, wei.w.wang@intel.com Subject: Re: [PATCH v10 2/9] KVM: Introduce per-page memory attributes Message-ID: <20230103013948.GA2178318@chaop.bj.intel.com> Reply-To: Chao Peng References: <20221202061347.1070246-1-chao.p.peng@linux.intel.com> <20221202061347.1070246-3-chao.p.peng@linux.intel.com> <1c9bbaa5-eea3-351e-d6a0-cfbc32115c82@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1c9bbaa5-eea3-351e-d6a0-cfbc32115c82@intel.com> X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 91F8B180007 X-Rspam-User: X-Stat-Signature: ghn3y65xnk95nkx3q64j939eqsswjmjn X-HE-Tag: 1672710256-628810 X-HE-Meta: U2FsdGVkX1+5LKJpx4prHBTWJdFdKOrZl4e0ECuLnuKmrzziUwmv1GfdpjdXDnlIwQLm65Ws+N51v4H29Z3ME3BSABBgNm8dGzRr9XUCkV1HyJMUjU4m+edUIZZq15UGpDDxwCbkiKXwxmlKU9xHIA3hqlukhu5YppZGp5MNma5O4QOBPLb+NO2cgGOoyk43FOZcqQiCGnlGOoJfbykZNrlfl+4r7DUcogB+fzkNnb/eVAOI6EeRnYjscqvd5RjxOLdp2T6oNvuCoOZB0V68QL0yUP8BgSeAfpGTngAY/iUtCIIUwxaUlTmrsRb8raPVgSNwD4OQZ7OSPgjqpvCX/+CNwyZGP4j8bpjjj7HAvSnV+bd40hpXdU7jr88yD7WZc9fXduKL3eAzwjFB0TfR/xxoDa5Pz6XX6bVXOtEafZIPwat85GktunRDRD/bJkXm7RKiYwvLGd71h9Q9PqzMRi+EvnOHJS/DOnXD9xTjfLWIH4EKxcjDftIF4HeW/FYgEDMGbxD2JJDuu+qawhrbaykhNlc2CHMh78DI9hKIMtMvxmpYkR2cvoVXdMBlOYU3i679cVz5ukeBJOatUYt8suCz4PI0uojdA176SMnF+R1+Xku8ibTFOtmf5BHXkXHVl55krc1ope1qLzeaUWcR+oGDpzelzXm2heBPYmORj5rnEIqUoPiYIwL56XeHW2ZFHC4jfgYy0JTNC3uWUYyEAXRV+7NbbjUIBfsc92nw1hHoxe/XrxB2vZ3AEKVNZMfFr+DcLd3i7NJLf2g9GpSfA/7rRaPTcAx1DCx9GVfTIYErSXpwE1KB3zh0WVtWHtq/YGo3dHLBjComL8kTWJbwFTo6yKtwGFNe1WfopCDilsHGwubgDmGhTaDYAG8zHToKi0D13uaHcrF7JAeBE2aBLWyGkOHbdYT6l6bjaDMRExw2YcRO3z2GdW4MI+FRQ0f3aMzcwI8UT/A= 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 Wed, Dec 28, 2022 at 04:28:01PM +0800, Chenyi Qiang wrote: ... > > +static int kvm_vm_ioctl_set_mem_attributes(struct kvm *kvm, > > + struct kvm_memory_attributes *attrs) > > +{ > > + gfn_t start, end; > > + unsigned long i; > > + void *entry; > > + u64 supported_attrs = kvm_supported_mem_attributes(kvm); > > + > > + /* flags is currently not used. */ > > + if (attrs->flags) > > + return -EINVAL; > > + if (attrs->attributes & ~supported_attrs) > > + return -EINVAL; > > + if (attrs->size == 0 || attrs->address + attrs->size < attrs->address) > > + return -EINVAL; > > + if (!PAGE_ALIGNED(attrs->address) || !PAGE_ALIGNED(attrs->size)) > > + return -EINVAL; > > + > > + start = attrs->address >> PAGE_SHIFT; > > + end = (attrs->address + attrs->size - 1 + PAGE_SIZE) >> PAGE_SHIFT; > > + > > + entry = attrs->attributes ? xa_mk_value(attrs->attributes) : NULL; > > + > > Because guest memory defaults to private, and now this patch stores the > attributes with KVM_MEMORY_ATTRIBUTE_PRIVATE instead of _SHARED, it > would bring more KVM_EXIT_MEMORY_FAULT exits at the beginning of boot > time. Maybe it can be optimized somehow in other places? e.g. set mem > attr in advance. KVM defaults to 'shared' because this ioctl can also be potentially used by normal VMs and 'shared' sounds a value meaningful for both normal VMs and confidential VMs. As for more KVM_EXIT_MEMORY_FAULT exits during the booting time, yes, setting all memory to 'private' for confidential VMs through this ioctl in userspace before guest launch is an approach for KVM userspace to 'override' the KVM default and reduce the number of implicit conversions. Thanks, Chao > > > + mutex_lock(&kvm->lock); > > + for (i = start; i < end; i++) > > + if (xa_err(xa_store(&kvm->mem_attr_array, i, entry, > > + GFP_KERNEL_ACCOUNT))) > > + break; > > + mutex_unlock(&kvm->lock); > > + > > + attrs->address = i << PAGE_SHIFT; > > + attrs->size = (end - i) << PAGE_SHIFT; > > + > > + return 0; > > +} > > +#endif /* CONFIG_HAVE_KVM_MEMORY_ATTRIBUTES */ > > + > > struct kvm_memory_slot *gfn_to_memslot(struct kvm *kvm, gfn_t gfn) > > { > > return __gfn_to_memslot(kvm_memslots(kvm), gfn);