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 A9BE5C46467 for ; Mon, 19 Dec 2022 08:20:05 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id F41BC8E0002; Mon, 19 Dec 2022 03:20:04 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id EF1C98E0001; Mon, 19 Dec 2022 03:20:04 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DBA9A8E0002; Mon, 19 Dec 2022 03:20:04 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id CD11A8E0001 for ; Mon, 19 Dec 2022 03:20:04 -0500 (EST) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 951FDA0B25 for ; Mon, 19 Dec 2022 08:20:04 +0000 (UTC) X-FDA: 80258357928.21.B42DB5A Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by imf19.hostedemail.com (Postfix) with ESMTP id 9A9001A001C for ; Mon, 19 Dec 2022 08:20:01 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=ljwNUFid; spf=none (imf19.hostedemail.com: domain of chao.p.peng@linux.intel.com has no SPF policy when checking 192.55.52.151) 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=1671438002; 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=GEeRo504r4TelYLRq6lpMH++dUWN0mbgpW5i86e8SPM=; b=iQPm5OHyB7RcL5m5cusGP9qX2APS/Bbx46ZHkZZgMOuS/pGaWUi066y01kA3eOkQRj0qqi dMYEWeNu9gQrvVgwsNhc+r3OHjnErc+a4a18WS3Ua0xbaap+LjEbJnivp8uU+S+ELXsMXb R87JR9dfVP9Q/7RdtVhfBVQXj8a6Cm4= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=ljwNUFid; spf=none (imf19.hostedemail.com: domain of chao.p.peng@linux.intel.com has no SPF policy when checking 192.55.52.151) 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=1671438002; a=rsa-sha256; cv=none; b=WqO23WWC70qRnwXDXb9pkUHC6jlvaWV0WQ0f2RfIwtLWtrlYKwk3V718S2O25hExceJr+l 9yg4mQ46K6NBsf2LiSvofkOGgc0hThA7VY0+ClLe+Tb8Px/3oaE07iq7OM8E+DxherHkWa Mz9GCbLtFhYFU5l864X06SpKLPxzGSM= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1671438001; x=1702974001; h=date:from:to:cc:subject:message-id:reply-to:references: mime-version:in-reply-to; bh=LNCdKsFcaAqCxKwjGOGvE5vkO4LxzR3OxK3Y+B+ZSpI=; b=ljwNUFidOAFHhBklFUmEiZb/2pjrW4N44hMXu3eKAovrNCPjwJmPJqEO YLxOhu1tK/CmbaBSQ6oGbNWKbt57SlryE+mDpPYIUK51TlCzL6jXMNdam ZMIhy5JeRopHDYCjPX9Wjc8KiI4yHg0FXJ+hv4/NJnMqWu6d6V6kWJESO Ctd/DpJ5wZH5wBiBy7W32wfQKQ4kxBUE94IaP1rx3Imv2FwNU2sCtGc6v qQzaPnkiJTQLzk9SpMTi4jide7gmXU3ZGhhrAvr0jIwm+TCdJsqil2nXM 2O6StibI0fib5kRIZVJuxjbxMzUK9e2xqdjLAa+yGFQWkEzSDY3HkeNeS A==; X-IronPort-AV: E=McAfee;i="6500,9779,10565"; a="299627816" X-IronPort-AV: E=Sophos;i="5.96,255,1665471600"; d="scan'208";a="299627816" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Dec 2022 00:19:59 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10565"; a="719033720" X-IronPort-AV: E=Sophos;i="5.96,255,1665471600"; d="scan'208";a="719033720" Received: from chaop.bj.intel.com (HELO localhost) ([10.240.193.75]) by fmsmga004.fm.intel.com with ESMTP; 19 Dec 2022 00:19:49 -0800 Date: Mon, 19 Dec 2022 16:15:32 +0800 From: Chao Peng To: Borislav Petkov 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 , 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: <20221219081532.GD1691829@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> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Rspamd-Queue-Id: 9A9001A001C X-Stat-Signature: rcmwcmoziicwx5h6uhrxonsxsa9xfxe9 X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1671438001-539588 X-HE-Meta: U2FsdGVkX19/FlBo1xkEJzVTRnMC2iCqiz8XyLDdeOkNubNWigsE2HN/GxmyKDDhrwp7XSe8lsBY5OVGd5QOypqtGAqzHsJnoRhQ/awdz4BaX5jzMa8v20tivvFKc/kGnyhvJ3sWda+Nw3YCEx0kzXfVrmFUR1sm34hlIioHjA9jFQgSpsIYXjHU6EW1wHoNI2mYqF1cOVlfOzCmvaTovVN1kfZE6YhJizfBsv3evF6Zo+XbfQbWJPSGfDCRANo6MENwjBu7+G6MFIQDraEIFy4//6c8Ssqwmsw4A+bDUgUuZZWfPXl/eACB5NvJK27+nyvtan6d+U3csuKtLkxzk4Zg0sb3fWLaqV/Hznw9lkJUs43BmvXn1Jphd0JfDge4CKcodO8MLDXud2SNt0asVldt9Xxq6Ssbrb0wX7YXCPGexDEhAJina8Mpr3f7KrtCePBne5oCp1i+ju6YFvqAEVSSHVPNoIJmfm5E9hwe0c5+gEXq5gsHdyHb0w7JL8nMjBSNmw9EGH1QS7Xqv2+eZHiYi7+xnKmHIJqE8WtcAo+/M8YWMXFJ4QSV5tZOgoC1DE5KPlRV2aDRClr0XxdbBVrNkBUYoC5HL9kD2aCxD19uqIYrHZnSZSaDTbFrvLCtSKDVTmlFgEOYS/yUVVfqKYqInQD9lywOiymkCrNqSw6dW96m88rlxSIo0ASjMv5r+PlSa95F9SiNAD30Awdbi+p6kpQMOsaYVL6R9590Bd8PRFPbzEKIP+7JiXfrc25YJd37QsWIXlwMZs1j6KkgP4fHjFxT6HvfMhoy0tlKZl7n8NwZU+C0Fn9xxNabixob3btb6HW8XGuwx3+CnoKb47A3SXDLm1IhyDlxGBeHiwiBySLozJZ70pg9YmYjkILyTRcPrUPSpMk0AtAboZ+qds6JEGuUcxBa6NnAbdvr3xGd3PAml0JIzFNb7GekcNKb1f0cblcGwpQ= 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 Fri, Dec 16, 2022 at 04:09:06PM +0100, Borislav Petkov wrote: > On Fri, Dec 02, 2022 at 02:13:40PM +0800, Chao Peng wrote: > > diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c > > index 1782c4555d94..7f0f5e9f2406 100644 > > --- a/virt/kvm/kvm_main.c > > +++ b/virt/kvm/kvm_main.c > > @@ -1150,6 +1150,9 @@ static struct kvm *kvm_create_vm(unsigned long type, const char *fdname) > > spin_lock_init(&kvm->mn_invalidate_lock); > > rcuwait_init(&kvm->mn_memslots_update_rcuwait); > > xa_init(&kvm->vcpu_array); > > +#ifdef CONFIG_HAVE_KVM_MEMORY_ATTRIBUTES > > + xa_init(&kvm->mem_attr_array); > > +#endif > > if (IS_ENABLED(CONFIG_HAVE_KVM_MEMORY_ATTRIBUTES)) > ... > > would at least remove the ugly ifdeffery. > > Or you could create wrapper functions for that xa_init() and > xa_destroy() and put the ifdeffery in there. Agreed. > > > @@ -2323,6 +2329,49 @@ static int kvm_vm_ioctl_clear_dirty_log(struct kvm *kvm, > > } > > #endif /* CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT */ > > > > +#ifdef CONFIG_HAVE_KVM_MEMORY_ATTRIBUTES > > +static u64 kvm_supported_mem_attributes(struct kvm *kvm) > > I guess that function should have a verb in the name: > > kvm_get_supported_mem_attributes() Right! > > > +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; > > Dunno, shouldn't those issue some sort of an error message so that the > caller knows where it failed? Or at least return different retvals which > signal what the problem is? Tamping down with error number a bit: if (attrs->flags) return -ENXIO; if (attrs->attributes & ~supported_attrs) return -EOPNOTSUPP; if (!PAGE_ALIGNED(attrs->address) || !PAGE_ALIGNED(attrs->size) || attrs->size == 0) return -EINVAL; if (attrs->address + attrs->size < attrs->address) return -E2BIG; Chao > > > + start = attrs->address >> PAGE_SHIFT; > > + end = (attrs->address + attrs->size - 1 + PAGE_SIZE) >> PAGE_SHIFT; > > + > > + entry = attrs->attributes ? xa_mk_value(attrs->attributes) : NULL; > > + > > + 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; > > +} > > -- > Regards/Gruss, > Boris. > > https://people.kernel.org/tglx/notes-about-netiquette