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 E8CCFC76195 for ; Sat, 18 Mar 2023 04:56:17 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5AFF76B00A8; Sat, 18 Mar 2023 00:56:17 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5389B6B00AA; Sat, 18 Mar 2023 00:56:17 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3B2776B00AB; Sat, 18 Mar 2023 00:56:17 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 2795F6B00A8 for ; Sat, 18 Mar 2023 00:56:17 -0400 (EDT) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id E7BCFABA8A for ; Sat, 18 Mar 2023 04:56:16 +0000 (UTC) X-FDA: 80580807552.24.F7018B9 Received: from mail-pj1-f43.google.com (mail-pj1-f43.google.com [209.85.216.43]) by imf28.hostedemail.com (Postfix) with ESMTP id 3030FC0007 for ; Sat, 18 Mar 2023 04:56:14 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b="pzW/czJX"; spf=pass (imf28.hostedemail.com: domain of isaku.yamahata@gmail.com designates 209.85.216.43 as permitted sender) smtp.mailfrom=isaku.yamahata@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1679115375; 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=0YbI6EnprkaJ0z2mh57VIFs7p2IQ38bwj/ew8ckKGBI=; b=tn64dIO5NkHE04Lr901VlK3CYUw1jeOKyC4YYA/jvFKdY64SAw0ui+LzuRuIil7vU6FEyx YW0jag37kIpVy2/+nGaBO0X3Sy9MtzioG3lfg6WYtdHhpy0GlK8uOKiXHGZrbpmk/n3Q2W 5EbW/TU7hCo221+HHAjQTRqHZ+yVF2E= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b="pzW/czJX"; spf=pass (imf28.hostedemail.com: domain of isaku.yamahata@gmail.com designates 209.85.216.43 as permitted sender) smtp.mailfrom=isaku.yamahata@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1679115375; a=rsa-sha256; cv=none; b=F3177nUDJfCtdvZ10nhj4NsIh8JkPgt2b49VAtN2j0mZGtCfftCRNCpUnllKrNhR4t0Vji yYycvmYgCaE60D7HH8KIjrQpb8brC85JMUlOKk0pzGnB7hubOzA+aBOVPZqycoeV1XsZDO fjA+syJEH7Ak394PrJlp8hji33qWno8= Received: by mail-pj1-f43.google.com with SMTP id l9-20020a17090a3f0900b0023d32684e7fso9453118pjc.1 for ; Fri, 17 Mar 2023 21:56:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1679115374; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=0YbI6EnprkaJ0z2mh57VIFs7p2IQ38bwj/ew8ckKGBI=; b=pzW/czJXLyPtklm89YmSEu7k7rQ4owrV9aB1tx2M8TlyW7Lopp4TnPOTzhSM+KWYkP op5OfNRuOuYOuQ8nwCy5mMzkUg4Vng+kTBpyLUKbY1qAWm3Uv9Zj0El9ZSbZGwbcK3DJ 9SJvzGmx5BFzDSxzOY9efC+Kcqox1Npxnso7xD7uO91100+vlmCCp+UhrKnJeOY0ex7o 0rgE/Gs9zwDj8bU9u9VH9drScl1/tz7XYbO42NIcccdtI4Y6FuiGnkSiT+u1hNORuf/O 4WgTZ0BOIwdHDat9PWCWNzi4pYK7m5qUS3fHQNtiQRTq6H9bAHwRcKr0s8DLzGRT2c87 7muQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679115374; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=0YbI6EnprkaJ0z2mh57VIFs7p2IQ38bwj/ew8ckKGBI=; b=Po2+Utg9SU5k2YPufrDc2dJ4XQOsDq5LD9nesT968O89A7ByWa16Y/TCYbyPQY6y3L Q9x5k+Hxk3dCDSKD/jeUCNVSJG1iJSTPRot8cxTkeeMU3msn3hgrYt/+Abz8Mvu3mHtA /TjUUbKgoYyO1iGjyxXZpHKz0MRkYxdUveQNtSFhjiGYhmlpzLSH+dgRyOx0L5Dmvf44 iwGjf2GSw3zruzUi16kvrmIZA4gC9zjZ1jXsa+dBE8G29wYLSWL17qPVbrD83S5vpIcT jGmalmO5JpbtR/78O8ugNF5msqQe4ExyvgrsySedqiUxESS3QvNsDPpGcsWalN4V3Qfy Ke/Q== X-Gm-Message-State: AO0yUKWCAJ4O9mPUNqFeQmTkA5TO8hqxD1ra/2kW6p4tbNN+N7QXGRH2 dPdtAzfFQ+Q65sXi+z9uZ2M= X-Google-Smtp-Source: AK7set/n48jK0pB0RDpGT/Sd7g0Ao3Xnl3nTM+JCzq4BvLmG2MWkWy7WQvPxWq2abPqnkiu4E6+74g== X-Received: by 2002:a17:90a:51c5:b0:23d:4a9e:868b with SMTP id u63-20020a17090a51c500b0023d4a9e868bmr10897649pjh.31.1679115373822; Fri, 17 Mar 2023 21:56:13 -0700 (PDT) Received: from localhost ([192.55.54.55]) by smtp.gmail.com with ESMTPSA id s16-20020a17090a1c1000b0023d0e743ff6sm5750279pjs.3.2023.03.17.21.56.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Mar 2023 21:56:13 -0700 (PDT) Date: Fri, 17 Mar 2023 21:56:11 -0700 From: Isaku Yamahata To: Michael Roth Cc: kvm@vger.kernel.org, linux-coco@lists.linux.dev, linux-mm@kvack.org, linux-crypto@vger.kernel.org, x86@kernel.org, linux-kernel@vger.kernel.org, tglx@linutronix.de, mingo@redhat.com, jroedel@suse.de, thomas.lendacky@amd.com, hpa@zytor.com, ardb@kernel.org, pbonzini@redhat.com, seanjc@google.com, vkuznets@redhat.com, jmattson@google.com, luto@kernel.org, dave.hansen@linux.intel.com, slp@redhat.com, pgonda@google.com, peterz@infradead.org, srinivas.pandruvada@linux.intel.com, rientjes@google.com, dovmurik@linux.ibm.com, tobin@ibm.com, bp@alien8.de, vbabka@suse.cz, kirill@shutemov.name, ak@linux.intel.com, tony.luck@intel.com, marcorr@google.com, sathyanarayanan.kuppuswamy@linux.intel.com, alpergun@google.com, dgilbert@redhat.com, jarkko@kernel.org, ashish.kalra@amd.com, nikunj.dadhania@amd.com, isaku.yamahata@gmail.com Subject: Re: [PATCH RFC v8 02/56] KVM: x86: Add 'update_mem_attr' x86 op Message-ID: <20230318045611.GE408922@ls.amr.corp.intel.com> References: <20230220183847.59159-1-michael.roth@amd.com> <20230220183847.59159-3-michael.roth@amd.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20230220183847.59159-3-michael.roth@amd.com> X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 3030FC0007 X-Stat-Signature: 9gqch3i8n1bbtxnoutrfk5di99m1hqpz X-Rspam-User: X-HE-Tag: 1679115374-623192 X-HE-Meta: U2FsdGVkX18qXP/h2ygmNWcsSijSv6pgctOvXmHcmrbGypQ8ItIYhKgRGP6TWsWiNz/lXk7ejSn4YjqB7RNFV8foBZTtrxRQggSuKj4/asl0n4f3vm3MFwbmb7covTqh3BbaREQEBGV3xWduZ9F23VJIg/lu3J/MurVbstSF9CBvkVEW43nphDpegqxwuhObdnQA+5ZAP90AYoHH3PG9vh+ZSqHHD/A26b9IvUFIyD+5cuy4v0KNTGVtE/UDjiUlpNe4ndbVWKkzY0q60FjLi8bfDfKSexCceDf9V6vk23T7ahjE1BE067ax1O7P3+cpxVClER7ygRViyeaEETR12DKHWzN2gE4v7Jx4qTl9RuT3TlyvYPmZLs1jc6IAYH4sd+sCvOrpZiCfNq+QO9TgwFopNxMVxmMtHWeFK4uKb2Cxt4vmA9ZvbE0K7X9+IXy8iF1whDGgwmp2V1pgAGaSAKMQkPc4vwVdPCNgCkSno7aBoVvWjmmHz/OgkE0TQ5UUbdWFkc4CFIseeDtXDcKyWosbRAjPsTm/7XfAxO8TPQj9iLjp6+5BDwoQl3nYt0+xIQfmlo0mK72HV5Z8xvbKbTgMOBZaB6WgNDt6QQRYppawi5FF1Tm8/ssJCziBPrJOSFfbyUxbvxsRxD4KQVGl4lmmK6GXJ8Zlz/oii1gs5PREyXcBG1Ry4ebzQZ0pV2D7Raf9HDQtSo/oRJSw3QdTjuv5+vygV1fBDPH7hH4gXFQIwBuk153dVQTbL3mNNtWW9KKCFUyQ2Ah5AMC71q4aWAOOQD+vOIgc5cz1zMYhlBCRzsHHKP0CByKSGreWhko8+/9AsK0/NrOydTeE7Irq8N9HpZaLW0v7BACjsiY6gq4MlQDDh8ThW89faWIlNrgOR56B1P9mfRxUeBYnZuFxKninm66Au+yxQFganPu/oijf1JAQZmMivgRKNQTTbiV00ct/FoTi+4/LkpQ3XN9 teIg9fVu Yjq2tlfPy9GzsN48MenoefJl1bkw4SIEbh4dlV5kU8KG51W2Q1QIk+8U8KPg0MBpywUGFgv6dg207/mK44teO+oMNnuaaqju6eS9h84QXWBtZevA4wtJch1VZpc9FVuxjbukzlVRWztfhU7Y+4/X8Tol2mUwYHhyHT39IsDzpPJ4eYZ9UKbTluxhcbIg2ucL+RldoogNv9R791f14+/VBWHbn7uiIEI8UIKsTrWQGJk2DCqgP0x5r9SuzGH6VoGzn3ALmDuPJJ4MLzYwEiOyCmIPixGztr2o1RNAch9T5NlaQNYpjmjkkwCddsAC2XXT1vNrg60GaVQTGOLEVeOC5KRHyAzdTK1QY6r7N2Tffu3yq72+6UNQrhc+CU2Vqi7D/I2zLpjkrt5rU4OQSD97wmyc93k/TLFFZJGK6KfmvhB1ZCTDJvg3D3O6/U8fhz9ikqEc00iiLjFAuFfm2p73cI+DjM9WWP/3pwfVZmfljzfIQajRoKLR4GPktbptdgwR9hg9oYI2SKrPgYoxVoXWyyye9sTtryG3nfkYptfLY0dP04ssUw76/UGT6RyfKhD4H/aHKOhxjPJeLKBPlxzq7fzha6Ll0DBnI7doENNIr8oFECIKJz58HaiQMKhLGCEsz8Mb/ 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 Mon, Feb 20, 2023 at 12:37:53PM -0600, Michael Roth wrote: > This callback will do any platform-specific handling needed for > converting pages between shared/private. > > Signed-off-by: Michael Roth > --- > arch/x86/include/asm/kvm-x86-ops.h | 1 + > arch/x86/include/asm/kvm_host.h | 2 ++ > arch/x86/kvm/mmu/mmu.c | 13 +++++++++++++ > include/linux/kvm_host.h | 4 ++++ > virt/kvm/kvm_main.c | 29 +++++++++++++++++++++++++++++ > 5 files changed, 49 insertions(+) > > diff --git a/arch/x86/include/asm/kvm-x86-ops.h b/arch/x86/include/asm/kvm-x86-ops.h > index 72183da010b8..a8aaf532c2ab 100644 > --- a/arch/x86/include/asm/kvm-x86-ops.h > +++ b/arch/x86/include/asm/kvm-x86-ops.h > @@ -132,6 +132,7 @@ KVM_X86_OP(complete_emulated_msr) > KVM_X86_OP(vcpu_deliver_sipi_vector) > KVM_X86_OP_OPTIONAL_RET0(vcpu_get_apicv_inhibit_reasons); > KVM_X86_OP_OPTIONAL_RET0(fault_is_private); > +KVM_X86_OP_OPTIONAL_RET0(update_mem_attr) > > #undef KVM_X86_OP > #undef KVM_X86_OP_OPTIONAL > diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h > index f856d689dda0..2da3fb2d5d1b 100644 > --- a/arch/x86/include/asm/kvm_host.h > +++ b/arch/x86/include/asm/kvm_host.h > @@ -1644,6 +1644,8 @@ struct kvm_x86_ops { > void (*load_mmu_pgd)(struct kvm_vcpu *vcpu, hpa_t root_hpa, > int root_level); > bool (*fault_is_private)(struct kvm *kvm, gpa_t gpa, u64 error_code, bool *private_fault); > + int (*update_mem_attr)(struct kvm_memory_slot *slot, unsigned int attr, > + gfn_t start, gfn_t end); > > bool (*has_wbinvd_exit)(void); > > diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c > index fb3f34b7391c..053bd77bbf52 100644 > --- a/arch/x86/kvm/mmu/mmu.c > +++ b/arch/x86/kvm/mmu/mmu.c > @@ -7251,4 +7251,17 @@ void kvm_arch_set_memory_attributes(struct kvm *kvm, > linfo_update_mixed(gfn, slot, level, mixed); > } > } > + > +void kvm_arch_post_set_memory_attributes(struct kvm *kvm, > + struct kvm_memory_slot *slot, > + unsigned long attrs, > + gfn_t start, gfn_t end) > +{ > + int ret; > + > + ret = static_call(kvm_x86_update_mem_attr)(slot, attrs, start, end); > + if (ret) > + pr_warn_ratelimited("Failed to update GFN range 0x%llx-0x%llx with attributes 0x%lx. Ret: %d\n", > + start, end, attrs, ret); > +} > #endif > diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h > index fdc59479b3e2..d200b8f45583 100644 > --- a/include/linux/kvm_host.h > +++ b/include/linux/kvm_host.h > @@ -2330,6 +2330,10 @@ void kvm_arch_set_memory_attributes(struct kvm *kvm, > struct kvm_memory_slot *slot, > unsigned long attrs, > gfn_t start, gfn_t end); > +void kvm_arch_post_set_memory_attributes(struct kvm *kvm, > + struct kvm_memory_slot *slot, > + unsigned long attrs, > + gfn_t start, gfn_t end); > > static inline bool kvm_mem_is_private(struct kvm *kvm, gfn_t gfn) > { > diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c > index b68574ff6c30..8ec985f1c57d 100644 > --- a/virt/kvm/kvm_main.c > +++ b/virt/kvm/kvm_main.c > @@ -2561,6 +2561,32 @@ static void kvm_mem_attrs_changed(struct kvm *kvm, unsigned long attrs, > kvm_flush_remote_tlbs(kvm); > } > > +static void kvm_post_mem_attrs_changed(struct kvm *kvm, unsigned long attrs, > + gfn_t start_orig, gfn_t end_orig) > +{ > + struct kvm_memory_slot *slot; > + struct kvm_memslots *slots; > + struct kvm_memslot_iter iter; > + int i; > + > + for (i = 0; i < kvm_arch_nr_memslot_as_ids(kvm); i++) { > + slots = __kvm_memslots(kvm, i); > + > + kvm_for_each_memslot_in_gfn_range(&iter, slots, start_orig, end_orig) { > + gfn_t start, end; > + > + slot = iter.slot; > + start = max(start_orig, slot->base_gfn); > + end = min(end_orig, slot->base_gfn + slot->npages); > + > + if (start >= end) > + continue; > + > + kvm_arch_post_set_memory_attributes(kvm, slot, attrs, start, end); > + } > + } > +} > + > static int kvm_vm_ioctl_set_mem_attributes(struct kvm *kvm, > struct kvm_memory_attributes *attrs) > { > @@ -2602,6 +2628,9 @@ static int kvm_vm_ioctl_set_mem_attributes(struct kvm *kvm, > kvm_mmu_invalidate_end(kvm); > KVM_MMU_UNLOCK(kvm); > > + if (i > start) > + kvm_post_mem_attrs_changed(kvm, attrs->attributes, start, i); > + Doesn't kvm_arch_set_memory_attributes() work for you? i.e the following patch. The error check and pr_warn_ratelimited() can be pushed down into the callback. >From 7c618c1f3c236c382e64680efcbe7d8a672aa870 Mon Sep 17 00:00:00 2001 Message-Id: <7c618c1f3c236c382e64680efcbe7d8a672aa870.1679114841.git.isaku.yamahata@intel.com> In-Reply-To: <428a676face7a06a90e59dca1c32941c9b6ee001.1679114841.git.isaku.yamahata@intel.com> References: <428a676face7a06a90e59dca1c32941c9b6ee001.1679114841.git.isaku.yamahata@intel.com> From: Isaku Yamahata Date: Fri, 17 Mar 2023 12:00:09 -0700 Subject: [PATCH 4/4] KVM: x86: Add 'set_mem_attr' x86 op This callback will do any platform-specific handling needed for converting pages between shared/private. Originally-by: Michael Roth Signed-off-by: Isaku Yamahata --- arch/x86/include/asm/kvm-x86-ops.h | 1 + arch/x86/include/asm/kvm_host.h | 2 ++ arch/x86/kvm/mmu/mmu.c | 1 + 3 files changed, 4 insertions(+) diff --git a/arch/x86/include/asm/kvm-x86-ops.h b/arch/x86/include/asm/kvm-x86-ops.h index dc5f18ac0bd5..956db2ee25a5 100644 --- a/arch/x86/include/asm/kvm-x86-ops.h +++ b/arch/x86/include/asm/kvm-x86-ops.h @@ -100,6 +100,7 @@ KVM_X86_OP_OPTIONAL_RET0(set_identity_map_addr) KVM_X86_OP_OPTIONAL_RET0(get_mt_mask) KVM_X86_OP(load_mmu_pgd) KVM_X86_OP(fault_is_private) +KVM_X86_OP_OPTIONAL(set_mem_attr) KVM_X86_OP_OPTIONAL(link_private_spt) KVM_X86_OP_OPTIONAL(free_private_spt) KVM_X86_OP_OPTIONAL(split_private_spt) diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index 0382d236fbf4..88e11dd3afde 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -1731,6 +1731,8 @@ struct kvm_x86_ops { void (*load_mmu_pgd)(struct kvm_vcpu *vcpu, hpa_t root_hpa, int root_level); bool (*fault_is_private)(struct kvm *kvm, gpa_t gpa, u64 error_code); + void (*set_mem_attr)(struct kvm *kvm, struct kvm_memory_slot *slot, + unsigned int attr, gfn_t start, gfn_t end); int (*link_private_spt)(struct kvm *kvm, gfn_t gfn, enum pg_level level, void *private_spt); diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index 0ec94c72895c..329333486e64 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -7908,6 +7908,7 @@ void kvm_arch_set_memory_attributes(struct kvm *kvm, gfn_t start, gfn_t end) { kvm_update_lpage_mixed_flag(kvm, slot, true, attrs, start, end); + static_call(kvm_x86_set_mem_attr)(kvm, slot, attrs, start, end); } void kvm_memory_attributes_create_memslot(struct kvm *kvm, -- 2.25.1 -- Isaku Yamahata