From patchwork Sat Mar 11 00:22:32 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67877 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp43388wrd; Fri, 10 Mar 2023 16:24:23 -0800 (PST) X-Google-Smtp-Source: AK7set/iGhIAPwqhS85QhQHFWLbzgzBb/iIQh2J5uuqH9esNkmgmMOwIZt6lRz2lOsgSKWYGSkyd X-Received: by 2002:a05:6a20:4c0a:b0:cc:1c96:d2e3 with SMTP id fm10-20020a056a204c0a00b000cc1c96d2e3mr21998285pzb.47.1678494263042; Fri, 10 Mar 2023 16:24:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678494263; cv=none; d=google.com; s=arc-20160816; b=cEkdtDyMmg4lAKL7NiahYLLj4c6DQ2BhH1XSxiZPg6+NR8qUp0hoUliWg9Bj2NLehS ZIf+v8H9eRIth0RRAeS7+cFhgkCKYsD+rKoJ6cRzpX4mfjsv3GxjGO0mFYg0qCsc2zdL Q8Qd6G/9lgsm3rXLLwDHUBZzAoUge6YcC/GB5m2nMIwL0tl7b4vlYegdt2//51ctMqIV GzkV0YTSnG6cUSk6Jkg/+EMgZKTSWSRfGnDFi6vwEmG2EqAU+cWmj2JIQUN5lNpTX21A 3Jqu8YWlp/O+FogKkCeCR+3Al9hRpkkg6GkTmikBb0vm9rZO2Y5p8fMrjObOpSxEQeR2 +D9g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=5rhB2a1dGUQodXCAV1sLu8Trgm2geLJIaCstXFeDsp8=; b=fK9JF7z/OitJg5jl+F5lhDLnVceyXN7euEDArfut6y3f902Be8yW62D3oA8BFWNO05 S6M1/e4MPELthjmtJ/Gb/pHJnGkEzIhTgk2owiy1hs9TLPudRMPVPHRi9+MLQ7ETm0/M WynOQ1G2I37WgWXX8rYDmwx6J2TgMDiH3+QW8TtNrMJLEazohBQghxcxIcADnOSgzymY YGZC9NZH+Ez7pKhxeSybAPsCBbIUkgYqIfe4R9aVdBjzv4exelEmZYhBVtPorrmR//w9 zvsNQ89/C5NK7G+hgEWmyjiJfux2ZZL5vujQm9qZj9NltCy1aJnmWGiEb0YeJpQbvS7t nfyg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=GB1gArfo; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id n10-20020a65488a000000b00502e2343db2si1020603pgs.150.2023.03.10.16.24.08; Fri, 10 Mar 2023 16:24:23 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=GB1gArfo; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229968AbjCKAXT (ORCPT + 99 others); Fri, 10 Mar 2023 19:23:19 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42686 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229998AbjCKAXN (ORCPT ); Fri, 10 Mar 2023 19:23:13 -0500 Received: from mail-pf1-x449.google.com (mail-pf1-x449.google.com [IPv6:2607:f8b0:4864:20::449]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 509EA13DCD for ; Fri, 10 Mar 2023 16:23:08 -0800 (PST) Received: by mail-pf1-x449.google.com with SMTP id i7-20020a626d07000000b005d29737db06so3631960pfc.15 for ; Fri, 10 Mar 2023 16:23:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678494188; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=5rhB2a1dGUQodXCAV1sLu8Trgm2geLJIaCstXFeDsp8=; b=GB1gArfoEAh+1WeCcjFVNp3vGLQPOrtMQm3umapPCUNXovRZEPAgcDRZpaYhW1tf9+ CvhEy391fDyT2xqQ1g8qmuVWNBmP7UVJsFcL3mgm7RaKcql7bw7PdbrcK9UQnXnwem1r FU9LJcIGnJbh9gm9H/XJuz/Dq+mHbXKaD4dBo7vYXZwCIQctrdx+IoLOGg34exedOP+u 2UIixuFO6RzJmTnpt07kkUCpmLTwmKqAgAU5/2WAo13OkxqmFkUmyMZjfrqgOFlBa7hO I1fwoI7LFYng69bDtaVnS5BZj1UDwY7V1Vyazsgnc4KzZhcVvFJZLbViqdtNYTuGxtqF FROg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678494188; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=5rhB2a1dGUQodXCAV1sLu8Trgm2geLJIaCstXFeDsp8=; b=i+lFpoHDLwAGQ0guA0dH8+mtFRHI2NqSwjeHG2vOEieU4CtNf2Ewj6WYGRuF9FmMZG 5kai/X+5N/j5bl/nk6OwyjQ88uoIagMe3qUsYhkDVK2Q8ZqtisReb+zRTnhrpTvmmV5j ur9VwkixCNQM7vIhN5okYOIKmctqPGyDZbM3zDC4iHh6a8IPgSv4mSr1IvZXx1FNpuj/ JvjIvAqrrkZKmQHcwoQXznPGfUhs0AuknWZdAG9fmj/gik3oMVOpLsPE/AXZDd2rV6fa t/ZhpUZNmp4Dp3msJaZ1YZuMZb25XXV5tVLYOio1VJ+QN4UhcW48SyRchexQnYDCxyYG Zhpw== X-Gm-Message-State: AO0yUKVnuQzjsqU1LLyrJu24L02RNwr/yMKG2fOOSMq5Gt65ohCh5ash OhaLBMFnR6dYmqqkmZ25roP2GDuqsq4= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a63:7556:0:b0:501:26b5:f43d with SMTP id f22-20020a637556000000b0050126b5f43dmr9777394pgn.0.1678494188381; Fri, 10 Mar 2023 16:23:08 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 16:22:32 -0800 In-Reply-To: <20230311002258.852397-1-seanjc@google.com> Mime-Version: 1.0 References: <20230311002258.852397-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230311002258.852397-2-seanjc@google.com> Subject: [PATCH v2 01/27] drm/i915/gvt: Verify pfn is "valid" before dereferencing "struct page" From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Zhenyu Wang , Zhi Wang Cc: kvm@vger.kernel.org, intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Yan Zhao , Ben Gardon X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760028800227937997?= X-GMAIL-MSGID: =?utf-8?q?1760028800227937997?= Check that the pfn found by gfn_to_pfn() is actually backed by "struct page" memory prior to retrieving and dereferencing the page. KVM supports backing guest memory with VM_PFNMAP, VM_IO, etc., and so there is no guarantee the pfn returned by gfn_to_pfn() has an associated "struct page". Fixes: b901b252b6cf ("drm/i915/gvt: Add 2M huge gtt support") Signed-off-by: Sean Christopherson Reviewed-by: Yan Zhao --- drivers/gpu/drm/i915/gvt/gtt.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/gpu/drm/i915/gvt/gtt.c b/drivers/gpu/drm/i915/gvt/gtt.c index 4ec85308379a..58b9b316ae46 100644 --- a/drivers/gpu/drm/i915/gvt/gtt.c +++ b/drivers/gpu/drm/i915/gvt/gtt.c @@ -1183,6 +1183,10 @@ static int is_2MB_gtt_possible(struct intel_vgpu *vgpu, pfn = gfn_to_pfn(vgpu->vfio_device.kvm, ops->get_pfn(entry)); if (is_error_noslot_pfn(pfn)) return -EINVAL; + + if (!pfn_valid(pfn)) + return -EINVAL; + return PageTransHuge(pfn_to_page(pfn)); } From patchwork Sat Mar 11 00:22:33 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67895 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp48962wrd; Fri, 10 Mar 2023 16:42:34 -0800 (PST) X-Google-Smtp-Source: AK7set8GAryVoE1bhhUDdexp7uVm769Ltf0dElLOu/x9LczB044Pkx3/VZyx+SDXTqR+PaRo/s+f X-Received: by 2002:a17:90b:1bc9:b0:237:9c41:e0a4 with SMTP id oa9-20020a17090b1bc900b002379c41e0a4mr30529545pjb.17.1678495354103; Fri, 10 Mar 2023 16:42:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678495354; cv=none; d=google.com; s=arc-20160816; b=oDjnwYSU2bAuqyXj5WFhFyQh5A4hWm+d0xfLx7RneMLgk9hBUDY4hlBCz3N8BeoMkz aHd4vNRf6k/XG1Ak49Tz8wRDTyZt3dudB/hzZ/XwCHPPxUwWCONkMTlCC0ufwoL3W4cq LyHw1gyQqffGN930Biy7Wcl7ceJ4XS5dcRi7jXEZ0aDT2egyMcNqnLCipLHI5ZxNDjxJ CvEWf5HpEJWP16YbKpz7UORYdsIxuuNb0Eazok8bBIS4fESaS1k+CRfXHcBgqb4p5AGa ggnMxn39hr4UaNSZitamajUrEYH8g3AafNDhiQICmzwwlvt8gBIT/nco56GZNBimC8ti W/+A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=eHqcqPuh0X7PQYReRTzohsMCRBED7m2vs4Y/3/bIpTQ=; b=cfhTlUhh2osMbWGO7TOCgBIQ2c3PXnefxNpaDoaW5ZHlqAJyrVww55IoCkkt0Q0yya tKmdtX851bQAs6Ea/7d3oRC+/O6rGI0UVqCCEUy7SI6WJIsqTpJgCbfKkMkFKAHnsTd6 8Cd479av4UGSB3ySk/+mGIwlXV/sZ6qcYHQaU69359KRGhStxeUDoSbMIAps63COYtTZ NVxAszi2adb9RlYnLw2uOKLpEsCDi15nSJPD/6gQjv9U/+sPZzEWDXJ1YjbTgiY9yKA/ WRjlyWAgnhxUqQ5+RMbvoV57jtUfmnIztmuj9//RdktWKUB8wm11Zrc7GvUKrmUulI0M /6VQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=tQGcDl0L; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id x16-20020a17090a789000b002340f45c0ffsi992402pjk.90.2023.03.10.16.42.17; Fri, 10 Mar 2023 16:42:34 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=tQGcDl0L; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230164AbjCKAXZ (ORCPT + 99 others); Fri, 10 Mar 2023 19:23:25 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42954 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230071AbjCKAXO (ORCPT ); Fri, 10 Mar 2023 19:23:14 -0500 Received: from mail-pf1-x44a.google.com (mail-pf1-x44a.google.com [IPv6:2607:f8b0:4864:20::44a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 52F7B1E5ED for ; Fri, 10 Mar 2023 16:23:10 -0800 (PST) Received: by mail-pf1-x44a.google.com with SMTP id t12-20020aa7938c000000b005ac41980708so3591675pfe.7 for ; Fri, 10 Mar 2023 16:23:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678494190; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=eHqcqPuh0X7PQYReRTzohsMCRBED7m2vs4Y/3/bIpTQ=; b=tQGcDl0LzQbxToMGy5qxSYm8BEkXfhbWlTvTCiUHeYOQgTHbWZTZZRkA7ZqcvX9S86 3KiDsW9HNTSISW2P73wBpcZ88hyQ+IeGlvy5TgSamFq6NZTm/UCrON8iXa2dzvIiWiGp +W4KemfD5UbSRZai7O68Kru+sWhdpFoikAvEsG8v0bmcf6DxSsz56ky4hZo8E4ooAgFs IspDuedJicbD6DnDrr+rpTcXPSUmA74Zy61zSlLY4/K0RTTs/UISui5nZTVB4TEsa+jv TweVwST4EA6OgArjt0oJ45NmU6Sj1e+QIO04KVV0l5mDaDbix4kdjntEKEREKSIzJqHJ LaWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678494190; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=eHqcqPuh0X7PQYReRTzohsMCRBED7m2vs4Y/3/bIpTQ=; b=e5s28jSbX8MHdVyUCBQUcONhetzUaLxtPVnWx3141uvo/9tC464q0uz/t39ud0zl8n lpgZRBiO9dZ74z9Z0ULwC06Z7QetI3/gicLa2K0dYXboCnUjMYZY9FDb+gc+LlDuzTM5 g4sln6ZRaRf3Hmkifj40Fd6+KNd/yfeHnBbgcJZPH3U/2wV7VmlX3VyQaz7vHTgqozjO N5SSpWU2ubj9TTNA9lpuFp2wq26KCMEa1Af6W4PpNA7VmpitIy/2ww3J5LTzUns32xHE 8ts70DmnbPu5UdKXF9qSxfL9fA/5svhumKkR0swjBl0Ft8CKbgmCwnAfXGAv13sMl5SQ aD4A== X-Gm-Message-State: AO0yUKX2uQui64Bl8YmRtFTFcJhAgqwPF78/mEdjvd/W2r5cpK29rYRE fzM0JCVo05niU0BKeiilAr+aZR+4xzs= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:90a:c688:b0:22c:89b:8e97 with SMTP id n8-20020a17090ac68800b0022c089b8e97mr1510024pjt.1.1678494189968; Fri, 10 Mar 2023 16:23:09 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 16:22:33 -0800 In-Reply-To: <20230311002258.852397-1-seanjc@google.com> Mime-Version: 1.0 References: <20230311002258.852397-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230311002258.852397-3-seanjc@google.com> Subject: [PATCH v2 02/27] KVM: x86/mmu: Factor out helper to get max mapping size of a memslot From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Zhenyu Wang , Zhi Wang Cc: kvm@vger.kernel.org, intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Yan Zhao , Ben Gardon X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760029944265255433?= X-GMAIL-MSGID: =?utf-8?q?1760029944265255433?= Extract the memslot-related logic of kvm_mmu_max_mapping_level() into a new helper so that KVMGT can determine whether or not mapping a 2MiB page into the guest is (dis)allowed per KVM's memslots. No functional change intended. Signed-off-by: Sean Christopherson --- arch/x86/kvm/mmu/mmu.c | 21 +++++++++++++++------ arch/x86/kvm/mmu/mmu_internal.h | 2 ++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index c8ebe542c565..4685c80e441b 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -3083,20 +3083,29 @@ static int host_pfn_mapping_level(struct kvm *kvm, gfn_t gfn, return level; } +int kvm_mmu_max_slot_mapping_level(const struct kvm_memory_slot *slot, + gfn_t gfn, int max_level) +{ + struct kvm_lpage_info *linfo; + + for ( ; max_level > PG_LEVEL_4K; max_level--) { + linfo = lpage_info_slot(gfn, slot, max_level); + if (!linfo->disallow_lpage) + break; + } + return max_level; +} + int kvm_mmu_max_mapping_level(struct kvm *kvm, const struct kvm_memory_slot *slot, gfn_t gfn, int max_level) { - struct kvm_lpage_info *linfo; int host_level; max_level = min(max_level, max_huge_page_level); - for ( ; max_level > PG_LEVEL_4K; max_level--) { - linfo = lpage_info_slot(gfn, slot, max_level); - if (!linfo->disallow_lpage) - break; - } + max_level = kvm_mmu_max_slot_mapping_level(slot, gfn, max_level); + /* Avoid walking the host page tables if a hugepage is impossible. */ if (max_level == PG_LEVEL_4K) return PG_LEVEL_4K; diff --git a/arch/x86/kvm/mmu/mmu_internal.h b/arch/x86/kvm/mmu/mmu_internal.h index cc58631e2336..9db7fa0b3bf9 100644 --- a/arch/x86/kvm/mmu/mmu_internal.h +++ b/arch/x86/kvm/mmu/mmu_internal.h @@ -328,6 +328,8 @@ static inline int kvm_mmu_do_page_fault(struct kvm_vcpu *vcpu, gpa_t cr2_or_gpa, return r; } +int kvm_mmu_max_slot_mapping_level(const struct kvm_memory_slot *slot, + gfn_t gfn, int max_level); int kvm_mmu_max_mapping_level(struct kvm *kvm, const struct kvm_memory_slot *slot, gfn_t gfn, int max_level); From patchwork Sat Mar 11 00:22:34 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67882 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp47154wrd; Fri, 10 Mar 2023 16:36:22 -0800 (PST) X-Google-Smtp-Source: AK7set/ksD4UQ/j2DWwFvlOT1W0hitBRrdDA21z41A9w0g/VtRvCafqry6suv5CfZUokc+9GPqt3 X-Received: by 2002:a17:903:41c3:b0:19e:699e:9b64 with SMTP id u3-20020a17090341c300b0019e699e9b64mr34447830ple.65.1678494981789; Fri, 10 Mar 2023 16:36:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678494981; cv=none; d=google.com; s=arc-20160816; b=ppEDKJ0Kqhv54Jo/lpAlvqVqsPrTVYVEzbolm2CkX9IfPo0cutayIu6ic9glRVR4gL pGY99EWWq3Ah73YFIeto7ueOgc2MSYPd2uvyDE+PhSF5QbdukByqcIuUHujucJo8/A20 W40lVKh+gRDOsgO74Sjv6qKk4f6D0uA7ERaPn/HXFd66+3I/V8Athz1ylNTZgHx72NGH 6ktxjXdMsffSTywdpOJ7Rd7SDvFlq1RokfNCVqp+PBG/JWMCNPeQYHAnZCmEi/02f10h ehoeJ+B77xIBnx48HxausYIBXYesQTk2VDswBLxDgUKYLEdt+GN9Zxk5PLQAQYgSwALk Qvog== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=G0qAJvxHpDAgqFvh7uYoRk6mNXypsV4ie53qEn0pPDQ=; b=AtTATxY/8C4SW0jzk+U3S7kR3MZCs4vxCvVe/5zxwVUCPgApq3ID8OpB0AAqn35JU+ toU9R0mmfR3iChWtoClhfHUgx5mCT6aTK8bcyzzoa+aqJb7THRv8LJvW/a4EytnBixv8 slJ8KIjtOHatGFJqVkTJ+5PNszxO6CnE3OCv/P++3vk8WEt30E8d7mVMEdaQmOD0dmWg 1pWAFdqUNEk/7ncB+31doou39u3vrPkM4+EShY5hmAClqmSuYxk+sOBMGuuBlDbOU4Km fjJ9mnit+LTa/5TtYAZztj0FALhtsCmH194gBjJf0jsaR7wJ6/LN74rv0HrhLVqCP7Q4 9Iaw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=PwdUG07A; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id kz5-20020a170902f9c500b0019edb3ae424si1155035plb.20.2023.03.10.16.35.57; Fri, 10 Mar 2023 16:36:21 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=PwdUG07A; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229469AbjCKAX3 (ORCPT + 99 others); Fri, 10 Mar 2023 19:23:29 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43526 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230131AbjCKAXU (ORCPT ); Fri, 10 Mar 2023 19:23:20 -0500 Received: from mail-yw1-x1149.google.com (mail-yw1-x1149.google.com [IPv6:2607:f8b0:4864:20::1149]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0404F22CAA for ; Fri, 10 Mar 2023 16:23:12 -0800 (PST) Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-536bf635080so71255807b3.23 for ; Fri, 10 Mar 2023 16:23:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678494192; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=G0qAJvxHpDAgqFvh7uYoRk6mNXypsV4ie53qEn0pPDQ=; b=PwdUG07Az6fOz5PClM8/T/4anRZgVRjRi28o1O6nSTDEv/mQSm0X5GIbbEnKWrhHZZ 5q9H3mm1wKS3TJ1fghFhCdX8n33BkbDHNL/QtNciEfRycZ5FMo+9TT1hRc1fF7uwtFr7 a5G3o7+gsp0O4C0lg8dTvW/jP0RuVm23ZZtudxaeRanpqY0wqUZ3YAEPBJnl0bcISdKL LIzD6VwQ59ZIHK4uoGEWjmugf+H7oOkM2+ZQ3IaZxInQrGK3STHr9mQqA5dqw+D3PGyK 88dSoZtZX4hT1wb11Ix/GCR347PoNYOPhgQ7xhQs3+j/0Kblqd91mcTmH806f3lFXlyG hhjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678494192; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=G0qAJvxHpDAgqFvh7uYoRk6mNXypsV4ie53qEn0pPDQ=; b=aa1z9FPKp7FhF+zFKRQbJu/EvmjLK2/3IBBTgbaJ5wMCm42kfvzhfbhBOeDvGKVeJY J2X4YPdKoVIZ8FfRX3gOGb3GjvkxVJ2AXTHcvZ1W/heH5b4b+GgjEYBFSYFt2ZckzziR yRNX+54suPvmmQkxsX3RYoBIGcLMLs1VPTVj4Q5a6onT6H+73UuVTrBijYsnm+l85XBj yp8zmE+AXfhcVdGrgbN2k83X2g8YNZFhCVKWt2TAh8jDFzGbVLHyEZO9u+9WQcGhg14g maKIe96nsUZTiIe0k/embBoTQsVhEz0/3yrYX9RppOsoiif54Mld+aPJt4rMEfW81ipI WsUQ== X-Gm-Message-State: AO0yUKURRRdj0dhx7zmGuGhUPVqo5251Gb0RanhLtPG71QDEHMyQkbOq WRinOEPKC15/HiuuKG/D17fntFAhS30= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a25:e911:0:b0:af7:1b45:1240 with SMTP id n17-20020a25e911000000b00af71b451240mr9206070ybd.11.1678494191916; Fri, 10 Mar 2023 16:23:11 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 16:22:34 -0800 In-Reply-To: <20230311002258.852397-1-seanjc@google.com> Mime-Version: 1.0 References: <20230311002258.852397-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230311002258.852397-4-seanjc@google.com> Subject: [PATCH v2 03/27] drm/i915/gvt: remove interface intel_gvt_is_valid_gfn From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Zhenyu Wang , Zhi Wang Cc: kvm@vger.kernel.org, intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Yan Zhao , Ben Gardon X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760029554103882975?= X-GMAIL-MSGID: =?utf-8?q?1760029554103882975?= From: Yan Zhao Currently intel_gvt_is_valid_gfn() is called in two places: (1) shadowing guest GGTT entry (2) shadowing guest PPGTT leaf entry, which was introduced in commit cc753fbe1ac4 ("drm/i915/gvt: validate gfn before set shadow page entry"). However, now it's not necessary to call this interface any more, because a. GGTT partial write issue has been fixed by commit bc0686ff5fad ("drm/i915/gvt: support inconsecutive partial gtt entry write") commit 510fe10b6180 ("drm/i915/gvt: fix a bug of partially write ggtt enties") b. PPGTT resides in normal guest RAM and we only treat 8-byte writes as valid page table writes. Any invalid GPA found is regarded as an error, either due to guest misbehavior/attack or bug in host shadow code. So,rather than do GFN pre-checking and replace invalid GFNs with scratch GFN and continue silently, just remove the pre-checking and abort PPGTT shadowing on error detected. c. GFN validity check is still performed in intel_gvt_dma_map_guest_page() --> gvt_pin_guest_page(). It's more desirable to call VFIO interface to do both validity check and mapping. Calling intel_gvt_is_valid_gfn() to do GFN validity check from KVM side while later mapping the GFN through VFIO interface is unnecessarily fragile and confusing for unaware readers. Signed-off-by: Yan Zhao [sean: remove now-unused local variables] Signed-off-by: Sean Christopherson Tested-by: Yan Zhao --- drivers/gpu/drm/i915/gvt/gtt.c | 36 +--------------------------------- 1 file changed, 1 insertion(+), 35 deletions(-) diff --git a/drivers/gpu/drm/i915/gvt/gtt.c b/drivers/gpu/drm/i915/gvt/gtt.c index 58b9b316ae46..f30922c55a0c 100644 --- a/drivers/gpu/drm/i915/gvt/gtt.c +++ b/drivers/gpu/drm/i915/gvt/gtt.c @@ -49,22 +49,6 @@ static bool enable_out_of_sync = false; static int preallocated_oos_pages = 8192; -static bool intel_gvt_is_valid_gfn(struct intel_vgpu *vgpu, unsigned long gfn) -{ - struct kvm *kvm = vgpu->vfio_device.kvm; - int idx; - bool ret; - - if (!test_bit(INTEL_VGPU_STATUS_ATTACHED, vgpu->status)) - return false; - - idx = srcu_read_lock(&kvm->srcu); - ret = kvm_is_visible_gfn(kvm, gfn); - srcu_read_unlock(&kvm->srcu, idx); - - return ret; -} - /* * validate a gm address and related range size, * translate it to host gm address @@ -1333,11 +1317,9 @@ static int ppgtt_populate_shadow_entry(struct intel_vgpu *vgpu, static int ppgtt_populate_spt(struct intel_vgpu_ppgtt_spt *spt) { struct intel_vgpu *vgpu = spt->vgpu; - struct intel_gvt *gvt = vgpu->gvt; - const struct intel_gvt_gtt_pte_ops *ops = gvt->gtt.pte_ops; struct intel_vgpu_ppgtt_spt *s; struct intel_gvt_gtt_entry se, ge; - unsigned long gfn, i; + unsigned long i; int ret; trace_spt_change(spt->vgpu->id, "born", spt, @@ -1354,13 +1336,6 @@ static int ppgtt_populate_spt(struct intel_vgpu_ppgtt_spt *spt) ppgtt_generate_shadow_entry(&se, s, &ge); ppgtt_set_shadow_entry(spt, &se, i); } else { - gfn = ops->get_pfn(&ge); - if (!intel_gvt_is_valid_gfn(vgpu, gfn)) { - ops->set_pfn(&se, gvt->gtt.scratch_mfn); - ppgtt_set_shadow_entry(spt, &se, i); - continue; - } - ret = ppgtt_populate_shadow_entry(vgpu, spt, i, &ge); if (ret) goto fail; @@ -2335,14 +2310,6 @@ static int emulate_ggtt_mmio_write(struct intel_vgpu *vgpu, unsigned int off, m.val64 = e.val64; m.type = e.type; - /* one PTE update may be issued in multiple writes and the - * first write may not construct a valid gfn - */ - if (!intel_gvt_is_valid_gfn(vgpu, gfn)) { - ops->set_pfn(&m, gvt->gtt.scratch_mfn); - goto out; - } - ret = intel_gvt_dma_map_guest_page(vgpu, gfn, PAGE_SIZE, &dma_addr); if (ret) { @@ -2359,7 +2326,6 @@ static int emulate_ggtt_mmio_write(struct intel_vgpu *vgpu, unsigned int off, ops->clear_present(&m); } -out: ggtt_set_guest_entry(ggtt_mm, &e, g_gtt_index); ggtt_get_host_entry(ggtt_mm, &e, g_gtt_index); From patchwork Sat Mar 11 00:22:35 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67902 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp49587wrd; Fri, 10 Mar 2023 16:44:35 -0800 (PST) X-Google-Smtp-Source: AK7set/HbvAU7L9VSNpyeAJ4PWINWABVgqFY0wrUxTVZdmu0t3ppXkEhNGg/Qp4kITzJnAyjkpQC X-Received: by 2002:a17:90b:164a:b0:234:d42:1628 with SMTP id il10-20020a17090b164a00b002340d421628mr7883571pjb.10.1678495474895; Fri, 10 Mar 2023 16:44:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678495474; cv=none; d=google.com; s=arc-20160816; b=tS4bHrOI6Joog4T1xM+7yMvjWNFwuym0jBlwXBzdLCbvSa4dh3n8QkHaCSzeF2BHbq wDCI9dhBfmXA+BZIqhNpRvghukIe/aFlDJ0GcnZYCSSrG6ROBJrnm+Mv9ruaCGNWmplg 5H853/msxTGA637h6Ig8xQ3btZ2XZuyIExcYiH4WJkQk1OUyA3fNP7Kq/hUFiq3OZ734 RcMxmeZsk2mqcO4ruNQtJi7j54rKEtxLAJ02ZqHa1UHNUrNYK4PDaF7H1+bu7ljQVUSf YsHK9eLotbQ+IDnxrvaw7rwY6XGM4XiHALoChJ247effAC7RH748QhwFvmUGQxMifj9j 3XbQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=GxkVI4HQZUPjFtqWtq8zWKxzvCJDOEnAK71W0aJ+/Qw=; b=FHxTu9MgjpWVrVGR/DTnanKI4w9Y7GHgy2K9OcPxHdqPttQkaxJ1Qtsllkddvx9tk9 5KQszb9dlWaHEsfIGH2bG6QQfAu/hjAexxbcW/0eF1je+2htgoiCQ/iuNQ60nV5cwceE Wk2j0yOf087DwOixLa/R2LrWcep4OewcXase6OhAYCUDpEZ2+Atvxiyymfx1irVaalSz pWb7dG9o/Gj5PH8OKd3HZvtcX09mVHDBq3FuRQz6NW6GQuFUg74CdEfN7OW2WPyFbPYx 8iYtDMbQcaltoHgdjsni2mYZeBFYAEwJQfbe0zjMmr6H9ptTHiczGjNj759FqNl5Dxy/ P5UQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=p2UvAf1D; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id w1-20020a631601000000b00502d6998a4asi944560pgl.458.2023.03.10.16.44.19; Fri, 10 Mar 2023 16:44:34 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=p2UvAf1D; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230219AbjCKAXl (ORCPT + 99 others); Fri, 10 Mar 2023 19:23:41 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44786 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230221AbjCKAXh (ORCPT ); Fri, 10 Mar 2023 19:23:37 -0500 Received: from mail-pf1-x44a.google.com (mail-pf1-x44a.google.com [IPv6:2607:f8b0:4864:20::44a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2CF06279B4 for ; Fri, 10 Mar 2023 16:23:14 -0800 (PST) Received: by mail-pf1-x44a.google.com with SMTP id a10-20020a056a000c8a00b005fc6b117942so3599004pfv.2 for ; Fri, 10 Mar 2023 16:23:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678494193; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=GxkVI4HQZUPjFtqWtq8zWKxzvCJDOEnAK71W0aJ+/Qw=; b=p2UvAf1DVD1I9Vv3IyqhkRPRi2ht61bry9FiYRjI1G9P2ZXtw/ThDSOk8tTC7ERcfy GYocsDfpOEp7b4OBhddgwPABFim5wgx2XnaAAlmczmszC5HUtG0Ou8RhddIcH0zFtTIK tUoTXo2GkZQNfpn4UE+t22hdQe0kzr3rVl+uhiNqcR6Y6q8CReaMqpPwSCtSsHmkgL+Y RS0eY2/Nc79o/TZQChAvsgVXQ6L31YHySo8tCZRAlDheLEaAH7j5Ux5F9PmWx7a1ufi2 ZqOBTYZ1hM+mIHDi5SuFZKMCKlYtcDuhho/6juXL5ZItmBxXm9EL3vcETYxOt23otyU+ Tc9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678494193; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=GxkVI4HQZUPjFtqWtq8zWKxzvCJDOEnAK71W0aJ+/Qw=; b=t6JoBAk5mK84DL70X0ZTxL1tcFbeXDnZpDDdmwAP6vo7wG78AJFnxxgHJ5gHUODC2G LtnweFq8bItLanW9fAI91Da1LuMPadQWYZpuyITFbC6+EOMANNw9NhZ+1my40Cn/5NYF s4f+UlzQcT9Kiv+KKd1u7UHrCzV3lsanoBPNszUfGTVOdD0sa88wafzw4tVg1GBUwidH zQvOKN0opQF2jKxofYpBUoOf2ozwJroFRIsc6df2rnkfL1rC5ZOZ2AZG015tTD+rVKik 1KZ/wuYkzoP3xRCmqB5C05rTHeXngSiSN6e4vR7JV+wNX7JByijsVzuq+djh1YBScbMB MTeQ== X-Gm-Message-State: AO0yUKUlBM58AswjikLF7j9YBA77Zjv9KN7WG2gTiO5mxHbV5ul7t5B6 1dEoPUjJ8l+X8f1uIQn47hFzxw0xYSs= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:902:f7c4:b0:19a:f80f:9619 with SMTP id h4-20020a170902f7c400b0019af80f9619mr10451565plw.3.1678494193558; Fri, 10 Mar 2023 16:23:13 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 16:22:35 -0800 In-Reply-To: <20230311002258.852397-1-seanjc@google.com> Mime-Version: 1.0 References: <20230311002258.852397-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230311002258.852397-5-seanjc@google.com> Subject: [PATCH v2 04/27] drm/i915/gvt: Incorporate KVM memslot info into check for 2MiB GTT entry From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Zhenyu Wang , Zhi Wang Cc: kvm@vger.kernel.org, intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Yan Zhao , Ben Gardon X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760030071207549146?= X-GMAIL-MSGID: =?utf-8?q?1760030071207549146?= Honor KVM's max allowed page size when determining whether or not a 2MiB GTT shadow page can be created for the guest. Querying KVM's max allowed size is somewhat odd as there's no strict requirement that KVM's memslots and VFIO's mappings are configured with the same gfn=>hva mapping, but the check will be accurate if userspace wants to have a functional guest, and at the very least checking KVM's memslots guarantees that the entire 2MiB range has been exposed to the guest. Note, KVM may also restrict the mapping size for reasons that aren't relevant to KVMGT, e.g. for KVM's iTLB multi-hit workaround or if the gfn is write-tracked (KVM's write-tracking only handles writes from vCPUs). However, such scenarios are unlikely to occur with a well-behaved guest, and at worst will result in sub-optimal performance. Fixes: b901b252b6cf ("drm/i915/gvt: Add 2M huge gtt support") Signed-off-by: Yan Zhao Signed-off-by: Sean Christopherson --- arch/x86/include/asm/kvm_page_track.h | 2 ++ arch/x86/kvm/mmu/page_track.c | 18 ++++++++++++++++++ drivers/gpu/drm/i915/gvt/gtt.c | 10 +++++++++- 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/arch/x86/include/asm/kvm_page_track.h b/arch/x86/include/asm/kvm_page_track.h index eb186bc57f6a..3f72c7a172fc 100644 --- a/arch/x86/include/asm/kvm_page_track.h +++ b/arch/x86/include/asm/kvm_page_track.h @@ -51,6 +51,8 @@ void kvm_page_track_cleanup(struct kvm *kvm); bool kvm_page_track_write_tracking_enabled(struct kvm *kvm); int kvm_page_track_write_tracking_alloc(struct kvm_memory_slot *slot); +enum pg_level kvm_page_track_max_mapping_level(struct kvm *kvm, gfn_t gfn, + enum pg_level max_level); void kvm_page_track_free_memslot(struct kvm_memory_slot *slot); int kvm_page_track_create_memslot(struct kvm *kvm, diff --git a/arch/x86/kvm/mmu/page_track.c b/arch/x86/kvm/mmu/page_track.c index 0a2ac438d647..e739dcc3375c 100644 --- a/arch/x86/kvm/mmu/page_track.c +++ b/arch/x86/kvm/mmu/page_track.c @@ -301,3 +301,21 @@ void kvm_page_track_flush_slot(struct kvm *kvm, struct kvm_memory_slot *slot) n->track_flush_slot(kvm, slot, n); srcu_read_unlock(&head->track_srcu, idx); } + +enum pg_level kvm_page_track_max_mapping_level(struct kvm *kvm, gfn_t gfn, + enum pg_level max_level) +{ + struct kvm_memory_slot *slot; + int idx; + + idx = srcu_read_lock(&kvm->srcu); + slot = gfn_to_memslot(kvm, gfn); + if (!slot || slot->flags & KVM_MEMSLOT_INVALID) + max_level = PG_LEVEL_4K; + else + max_level = kvm_mmu_max_slot_mapping_level(slot, gfn, max_level); + srcu_read_unlock(&kvm->srcu, idx); + + return max_level; +} +EXPORT_SYMBOL_GPL(kvm_page_track_max_mapping_level); diff --git a/drivers/gpu/drm/i915/gvt/gtt.c b/drivers/gpu/drm/i915/gvt/gtt.c index f30922c55a0c..d59c7ab9d224 100644 --- a/drivers/gpu/drm/i915/gvt/gtt.c +++ b/drivers/gpu/drm/i915/gvt/gtt.c @@ -1157,14 +1157,22 @@ static int is_2MB_gtt_possible(struct intel_vgpu *vgpu, struct intel_gvt_gtt_entry *entry) { const struct intel_gvt_gtt_pte_ops *ops = vgpu->gvt->gtt.pte_ops; + unsigned long gfn = ops->get_pfn(entry); kvm_pfn_t pfn; + int max_level; if (!HAS_PAGE_SIZES(vgpu->gvt->gt->i915, I915_GTT_PAGE_SIZE_2M)) return 0; if (!test_bit(INTEL_VGPU_STATUS_ATTACHED, vgpu->status)) return -EINVAL; - pfn = gfn_to_pfn(vgpu->vfio_device.kvm, ops->get_pfn(entry)); + + max_level = kvm_page_track_max_mapping_level(vgpu->vfio_device.kvm, + gfn, PG_LEVEL_2M); + if (max_level < PG_LEVEL_2M) + return 0; + + pfn = gfn_to_pfn(vgpu->vfio_device.kvm, gfn); if (is_error_noslot_pfn(pfn)) return -EINVAL; From patchwork Sat Mar 11 00:22:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67904 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp49665wrd; Fri, 10 Mar 2023 16:44:47 -0800 (PST) X-Google-Smtp-Source: AK7set/w1rc3r5wOx5VrmonrdYcZx/OzHdWXQ2+O5hZAu1LK/QMBLaW3lc4cbrj8FV+VGb7WnrML X-Received: by 2002:a62:7b0c:0:b0:61d:e8bb:1cb0 with SMTP id w12-20020a627b0c000000b0061de8bb1cb0mr7475639pfc.1.1678495486791; Fri, 10 Mar 2023 16:44:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678495486; cv=none; d=google.com; s=arc-20160816; b=VNKoYpfYyWA4/j5GeeQL5MAWe8n0NyLUuOXke8rpDF3Is32BN5OLOhzOnwuBx+kpfI 8u0B2ccOnULV9C7IVgup7op8PTghF9pQHjX3mRQ3BtUlTujRuxMQMPcZ5Wflsqy8o9Kt bAjMGglvAeoVwcr1jTGFyXkdYct9ZuXlk5q4xrgyyu0jEMrsk4B9UwLD/ZAVE6K+VXEP vQJ8msGTEODVoev1RBGX850/Rj8EYOl3TjCdQ9z/uv4HkuXkk1qOHO18ZvtBHDh7varn mZS9pbbTBlNmL3XhU22auLpDrbNiZ5GWTfDcqiS19mvxuXr1bYvVvXezEPwNs794d3Mp 8Itw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=r49XytvkzC3ENPPvGwyC5xpl4Ljg2/LRKUh4AJANr14=; b=F6ctF7Pu+j+xFnjSy8NogqvwJ+Muz39CLu793ENCrZrUfvf7LfvhEX+DJBPKHeZVBA Fqcmt3gxm808aW1QFbEavI35XgAo2eH+fU/K+84Gk4rXm3/ogQFr1yqDkVWdpST1294I l9Cqrw46yCATLpOp+cNqirhmJF+MgROsst3tk0IM1bfct8cBoZ5BWUMdMuD6NJqS4zNk hOkMpVDikPjqu/kjPZP6cXjlp4JKK8D/Q8y54hAgFdleQdBa4H+yRbNMmGWVn08C/cv6 6u3GdXJ9KUkx5VOij8ugxsHlYkp9ccxrAm1AhH+kHtR9T4sa1s1SoJqYwqqeUyPf+XDh Vnqw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=Zpt7qqXU; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id b2-20020aa79502000000b005cd33628c0fsi878432pfp.177.2023.03.10.16.44.29; Fri, 10 Mar 2023 16:44:46 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=Zpt7qqXU; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230464AbjCKAXo (ORCPT + 99 others); Fri, 10 Mar 2023 19:23:44 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43884 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230118AbjCKAXh (ORCPT ); Fri, 10 Mar 2023 19:23:37 -0500 Received: from mail-pl1-x649.google.com (mail-pl1-x649.google.com [IPv6:2607:f8b0:4864:20::649]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4420E2B298 for ; Fri, 10 Mar 2023 16:23:16 -0800 (PST) Received: by mail-pl1-x649.google.com with SMTP id lm13-20020a170903298d00b0019a8c8a13dfso3628831plb.16 for ; Fri, 10 Mar 2023 16:23:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678494195; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=r49XytvkzC3ENPPvGwyC5xpl4Ljg2/LRKUh4AJANr14=; b=Zpt7qqXUP9P3hTZayirZMVkamUEUKqACeon7oYYD97xhyXG29DKFvc2SehXuaMK1eh 96bAuuC0sdckifi7A5x5BvHjSYp6n5kOQFXB0UoJB1YbHPV06dxE1l1SqnXubOFXmRsK Z85nrGTBFlhudy7NMByKLTHcgoIlcwlw77krq/LeeXJrbT4i1RgCaCjiipszhzOC68N1 Wqgm7NqjACHAxcRBAe/V0X19VDezwBvGmMGY2dfPUEgvNyjcfSdH8o9zcchvrm2jY66q QaFVvRsnIfOiGjSgjPR+aPpZh8DNkEiAG84TgnZaQn3CnSP9MOVs0GtZw+JsxOyoPRG9 pjkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678494195; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=r49XytvkzC3ENPPvGwyC5xpl4Ljg2/LRKUh4AJANr14=; b=CDBJ4G3tSTaN08bjosI7pC1eQLWPYX0iPI9lNcWdkMeUI1Dm+ryIEoINtJgdNeWvwt NInhWa6pfXgt77jQHTjNZenhuFVHQyv55q11qtn+MBV7uMrOsLgatbXXwG/S0g0PGL62 uhBHL/uQ8S7cLb3j6WUsKLQtRfOiv067kPwx/yO0gQs+hO/kLc4E2B08SL+uflV/mKPO 4SpK8CpRFjDOh4fF5EGDabeYoyt5Ft7JGR6+0TQ+9/5tONW5y2EKDLNcsAIv24KZRpvb HVwWCJBtVlM2Dao07uT0ve09/TeP9VI5cJLKf+TdVonqI6ldKbIURXv7equKA+5xfW7R 1SsQ== X-Gm-Message-State: AO0yUKWlBLXtjJh+KKhR3vABtBjF/EYaoUffHRq2FMjYLxIpIzPyRbpz RsPve3sAa7EpXro+fb+P3FGlVOI7/cI= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:90a:7bc6:b0:22c:2048:794e with SMTP id d6-20020a17090a7bc600b0022c2048794emr10002028pjl.7.1678494195444; Fri, 10 Mar 2023 16:23:15 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 16:22:36 -0800 In-Reply-To: <20230311002258.852397-1-seanjc@google.com> Mime-Version: 1.0 References: <20230311002258.852397-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230311002258.852397-6-seanjc@google.com> Subject: [PATCH v2 05/27] drm/i915/gvt: Verify VFIO-pinned page is THP when shadowing 2M gtt entry From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Zhenyu Wang , Zhi Wang Cc: kvm@vger.kernel.org, intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Yan Zhao , Ben Gardon X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760030083523978396?= X-GMAIL-MSGID: =?utf-8?q?1760030083523978396?= When shadowing a GTT entry with a 2M page, explicitly verify that the first page pinned by VFIO is a transparent hugepage instead of assuming that page observed by is_2MB_gtt_possible() is the same page pinned by vfio_pin_pages(). E.g. if userspace is doing something funky with the guest's memslots, or if the page is demoted between is_2MB_gtt_possible() and vfio_pin_pages(). This is more of a performance optimization than a bug fix as the check for contiguous struct pages should guard against incorrect mapping (even though assuming struct pages are virtually contiguous is wrong). The real motivation for explicitly checking for a transparent hugepage after pinning is that it will reduce the risk of introducing a bug in a future fix for a page refcount leak (KVMGT doesn't put the reference acquired by gfn_to_pfn()), and eventually will allow KVMGT to stop using KVM's gfn_to_pfn() altogether. Signed-off-by: Sean Christopherson --- drivers/gpu/drm/i915/gvt/kvmgt.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c index 8ae7039b3683..90997cc385b4 100644 --- a/drivers/gpu/drm/i915/gvt/kvmgt.c +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c @@ -159,11 +159,25 @@ static int gvt_pin_guest_page(struct intel_vgpu *vgpu, unsigned long gfn, goto err; } - if (npage == 0) - base_page = cur_page; + if (npage == 0) { + /* + * Bail immediately to avoid unnecessary pinning when + * trying to shadow a 2M page and the host page isn't + * a transparent hugepage. + * + * TODO: support other type hugepages, e.g. HugeTLB. + */ + if (size == I915_GTT_PAGE_SIZE_2M && + !PageTransHuge(cur_page)) + ret = -EIO; + else + base_page = cur_page; + } else if (base_page + npage != cur_page) { gvt_vgpu_err("The pages are not continuous\n"); ret = -EINVAL; + } + if (ret < 0) { npage++; goto err; } From patchwork Sat Mar 11 00:22:37 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67896 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp49178wrd; Fri, 10 Mar 2023 16:43:11 -0800 (PST) X-Google-Smtp-Source: AK7set9YALPQcGVxFUXymdQEQrFfgfMgVbHRdOQDzsai0STUhuyZ73+QjMZwcBSOJsC3pyeNXoBk X-Received: by 2002:a05:6a21:3288:b0:cc:9b29:f61d with SMTP id yt8-20020a056a21328800b000cc9b29f61dmr33708229pzb.6.1678495391105; Fri, 10 Mar 2023 16:43:11 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678495391; cv=none; d=google.com; s=arc-20160816; b=EZKaN8EHX/qRpbnlSW69SleQNaT4V2aZ7xY/LSAp/60c4BOWC9Umg5fGDinI+NQ0WF BPHrT9MBqUVyXv4K/vbvrWI76b0pv1C3MH4KTn/N8HpsMp70NYlfg0FR965uSSE0S073 nqZUQFBKjvZBUPEKilBGDBhuYwxN1I5aMUVZat4fvWm8HvHnCTtwY9Jjr47O2aNPdMmQ OlYOLXYhMh7c/ljX2QuJ1rmsGwZP7koenCboS25RauS4TsT1dX9rlKXqwIBN6JNOLIY7 G0tXnoTeZll4fsEkWdjmGFnbUrN2mVEUxaMzSSGty10Sgb9U29KGSk0wlMp0/qBbs3B2 hCHQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=QHerbQhjH53h/ZHwU5QVI9hxX7GhCGiNGgQsrmW50t4=; b=qFRWDZ5jwKdQnDX2warg6F4q+P2YZ29M8UI/pIBiE5nULAy7KkahWWWi17qUBL5ghF N6iwjfXDzOenFp0ee9YXuBfvRG4Ia8mxu5+21VljHamPUWc1fjSSLSyifnN8Lzxy31pa mC5dI31yAxDo57x3YKnBrtVQKBAPXDImdJIeyfDrJ+abDmytCaRTdEocQ31nrYUnowU/ lfN5C+JiYgsqsqGJITW5Zuc6gsDMfpy68oFR3OJnUwdptmNtIZTG+sj7nliv8whMXkiW B07m/26IokDCz3rs4egC1Bj5fePMxvqCJljx5sP3XKoTBxwI+yA4K6kcudJpqFDHBYf9 NEEw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=UOOoJWfU; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id u1-20020a63d341000000b004fbba9a8fa0si940790pgi.420.2023.03.10.16.42.55; Fri, 10 Mar 2023 16:43:11 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=UOOoJWfU; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230181AbjCKAXv (ORCPT + 99 others); Fri, 10 Mar 2023 19:23:51 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44886 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230252AbjCKAXi (ORCPT ); Fri, 10 Mar 2023 19:23:38 -0500 Received: from mail-pj1-x104a.google.com (mail-pj1-x104a.google.com [IPv6:2607:f8b0:4864:20::104a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 28E342E0D7 for ; Fri, 10 Mar 2023 16:23:17 -0800 (PST) Received: by mail-pj1-x104a.google.com with SMTP id l10-20020a17090a598a00b0023b28afea55so470083pji.0 for ; Fri, 10 Mar 2023 16:23:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678494197; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=QHerbQhjH53h/ZHwU5QVI9hxX7GhCGiNGgQsrmW50t4=; b=UOOoJWfUcA7GC/99pLDncOCYw/ZSKy8cgsGXbxX58KzT3NzGZc7wH8lCmf0oAQfpKq hjcxQRGgLkPGKlCawvxwrkvukATCRtgPYnMbqSBD5uscgj39B0vmTkhnvMgcmdk9NbiB K64ViJd4ne0EYEYjfGG5d6kPwirzxEw5lqcOzrUdA91bj/3z7WW2O16cfG50mdYHyi+F 8belCrRQbBfaK2WzD/PQejUgzYcU2vR3vMegxSCF5ZB4v6jnYTOpdFATSuu9h0apkhxu Icms8xYjSzdS9QnEO7gSP/EblQydpusmTx4NQaAaKuJOjwYY/5w93+mXKPJyeqcneA5b krDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678494197; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=QHerbQhjH53h/ZHwU5QVI9hxX7GhCGiNGgQsrmW50t4=; b=nIL1sUBsxhlgo6m1XY5qBdCSk7cmELin26/0WvdFyAorp9YZqaOh81gPlIIaWv0KL/ e2cJcTaVIRIwn1dNEXwBpEF1ugGOGLWDF1Bl8dPe8VpZFlDcfw3OVygff2jcTWsR5E+i hlQgGn0gUKa7CzTtqSp2rMEVvHu9l2atVk70QLCfFs2P8gYn2P/T3h01pmQjXwVjXhEp SRTr8BffdFn/5IuohSlEMINj8YK9s4YX54cnqNd+txx3KWKdar7KPFPM4Mw3aRvc/YG4 Rpay1UPp3p4NA7InfBbdGAeuieitkPk7FudaHBxJJDWMcJuXo8jOgNYwKosqIcNaVsby KUgA== X-Gm-Message-State: AO0yUKU4Fvi2Bn6rGME5raVkqUNScMhWgoXNiA8AOJnMfptwdOIMTDhp 8mFO/iInEAqSpKJFbv1B7Ccf8Ztct/Y= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:902:ef8b:b0:19b:370:f7b3 with SMTP id iz11-20020a170902ef8b00b0019b0370f7b3mr10076584plb.6.1678494197458; Fri, 10 Mar 2023 16:23:17 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 16:22:37 -0800 In-Reply-To: <20230311002258.852397-1-seanjc@google.com> Mime-Version: 1.0 References: <20230311002258.852397-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230311002258.852397-7-seanjc@google.com> Subject: [PATCH v2 06/27] drm/i915/gvt: Put the page reference obtained by KVM's gfn_to_pfn() From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Zhenyu Wang , Zhi Wang Cc: kvm@vger.kernel.org, intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Yan Zhao , Ben Gardon X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760029983332848455?= X-GMAIL-MSGID: =?utf-8?q?1760029983332848455?= Put the struct page reference acquired by gfn_to_pfn(), KVM's API is that the caller is ultimately responsible for dropping any reference. Note, kvm_release_pfn_clean() ensures the pfn is actually a refcounted struct page before trying to put any references. Fixes: b901b252b6cf ("drm/i915/gvt: Add 2M huge gtt support") Signed-off-by: Sean Christopherson Reviewed-by: Yan Zhao --- drivers/gpu/drm/i915/gvt/gtt.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/gvt/gtt.c b/drivers/gpu/drm/i915/gvt/gtt.c index d59c7ab9d224..15848b041a0d 100644 --- a/drivers/gpu/drm/i915/gvt/gtt.c +++ b/drivers/gpu/drm/i915/gvt/gtt.c @@ -1160,6 +1160,7 @@ static int is_2MB_gtt_possible(struct intel_vgpu *vgpu, unsigned long gfn = ops->get_pfn(entry); kvm_pfn_t pfn; int max_level; + int ret; if (!HAS_PAGE_SIZES(vgpu->gvt->gt->i915, I915_GTT_PAGE_SIZE_2M)) return 0; @@ -1179,7 +1180,9 @@ static int is_2MB_gtt_possible(struct intel_vgpu *vgpu, if (!pfn_valid(pfn)) return -EINVAL; - return PageTransHuge(pfn_to_page(pfn)); + ret = PageTransHuge(pfn_to_page(pfn)); + kvm_release_pfn_clean(pfn); + return ret; } static int split_2MB_gtt_entry(struct intel_vgpu *vgpu, From patchwork Sat Mar 11 00:22:38 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67901 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp49452wrd; Fri, 10 Mar 2023 16:44:01 -0800 (PST) X-Google-Smtp-Source: AK7set88GyYKR9rU4PK2Z196jtzwlT0ti2r1alEicJMvUkzOjFmAa/Ep8qU2IKgG13FZOBmtA0gV X-Received: by 2002:a17:902:b612:b0:19e:6b56:7d8c with SMTP id b18-20020a170902b61200b0019e6b567d8cmr22401970pls.9.1678495441298; Fri, 10 Mar 2023 16:44:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678495441; cv=none; d=google.com; s=arc-20160816; b=WcacC5McQ5ClgXZaWCo1fqOUb0CbmCQ+2vImZKMuxwHIbfO2MIXVaihGaaDLKYdLOX 33Pw7/+dxmr6DW8FZu5mms+03yZVJLQ3wbUYmgO4gIvJeKZGTJ4rFB+vAwzOYe4bP6H2 911XIzK0NyDmnIQFYeOv+SxjlDOS9cYyGy2womefA3T/rvjg9FdJPZuVywEQDiHFPQdb K2qBClvXdvVlvS/wIMJSrZXTJ3olXJT/hXMT8ZpmxnPWrBJHD9sPf5995AQUTA6sy/5b M2Llq/h2eLW+IBQ1W+PcrP2xiLgBeSAhYGXWcKxH5V1HFznepnzK76RWoxnHPGpNgYLF nSOg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=dV8sNcyAW0n6X3OiA2R9lVjH4Ll5YuXDWn2FowKm87g=; b=x9zBszj0tCl1SYuYxTTtiQTTOmal+V/2/eif84a2o4wlNnWXJfDrxDtI6XDuxHZ13W IXUqEfnBlI73on2KXZgeLl1gZwn4ZtREq9Jlg1TSgQR3UsYYIdEoIkF+EB2m7rdqSbPg N47Y668gS2N8uV1NwMZKsPYp6hCSfHuK2YU5f1CQPvbbWSBke4+D+mJFzX0/QjlFrEzw XuZXonwlxyS5/SlwD4P2pZ+i8Kcm367KCWtTiJI/8hTBaFDeq/kaXNfWz4hst1aL/7Ry pKCjbNiuReYsAY1aCSVfQw2TEdJ5Ku5ndWRxvZbQ68L9ynal8HZE1zKr4cfvXam8lDto KEGQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=h2hFNdoi; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id kn6-20020a170903078600b0019cb3c949f1si1071003plb.598.2023.03.10.16.43.46; Fri, 10 Mar 2023 16:44:01 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=h2hFNdoi; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231143AbjCKAX4 (ORCPT + 99 others); Fri, 10 Mar 2023 19:23:56 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44034 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230146AbjCKAXj (ORCPT ); Fri, 10 Mar 2023 19:23:39 -0500 Received: from mail-pf1-x449.google.com (mail-pf1-x449.google.com [IPv6:2607:f8b0:4864:20::449]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2B28B4C6EA for ; Fri, 10 Mar 2023 16:23:19 -0800 (PST) Received: by mail-pf1-x449.google.com with SMTP id h14-20020aa786ce000000b005a89856900eso3613593pfo.14 for ; Fri, 10 Mar 2023 16:23:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678494199; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=dV8sNcyAW0n6X3OiA2R9lVjH4Ll5YuXDWn2FowKm87g=; b=h2hFNdoiZHdwrWGNcaEB/AQu51ahfugVa0zZizoS7QsJE89HqVuLJVyqNvgvd88iBK me0aSbiLd3m9jQAdP4be16J3EamKef/zkhiZ8H9I0++QXNGVvaBX4JlCjBNkrV770IxF vK1qcoDgiG8eG9uN5BbJ+1pd1X2/slSmvHRy2d94KJ6TkaYyfiHjZiawDoOz4oNTgtmQ wMEFUehtwWmzdnnBcBDczYp5PNvPGlhNrUUV21FjS3Zvc6w8s7J3JJNCFk5eteKW5Teh 6afgrwW4K8+pvEJ6iE8UxjDcodkIbeov5HFbNu6p7Rc9ulZEZVy7KSIyqswaDsXCzWLl 1n7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678494199; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=dV8sNcyAW0n6X3OiA2R9lVjH4Ll5YuXDWn2FowKm87g=; b=x2NTklI3h5zPT+OHIDgmRHvleRJDc0+K4huro/2jFKUp8zY1hYniGCl0QmZ7Dc+PnK q294QQltPXnkjURpbIKrwzWagpkcSIPXqg5+eLE/YTuLojkxqRifacEFhsHzo58cBkmd sMpHzc3ueyRoKJZJiTpC/DbyU1x+se6ko0FhtrOWI5e0gvq8v3uu9fDaV6i4D+QRBgTn 5bSNRBUmFv+PdCIajNugNjRkWGynOUuDOhND8F2RYV85cVvbZr4MrgM8hZBLl6BfzSeo vahYwIK9W9vBv01QLAHRbB+SJ5ekGv854noYtBbKevvPOve2+KmCin3x6BEEHuS4p4T2 jyBA== X-Gm-Message-State: AO0yUKVoJrFxW1zp32vZbtjiAZZQwBUM9wDRLrQNtqluNUYf6fZO8+PG 4gHmo18yf4emMKJXiqJG7HKYP23sfyE= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:902:f98d:b0:19a:80b9:78ce with SMTP id ky13-20020a170902f98d00b0019a80b978cemr1675508plb.0.1678494199278; Fri, 10 Mar 2023 16:23:19 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 16:22:38 -0800 In-Reply-To: <20230311002258.852397-1-seanjc@google.com> Mime-Version: 1.0 References: <20230311002258.852397-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230311002258.852397-8-seanjc@google.com> Subject: [PATCH v2 07/27] drm/i915/gvt: Don't rely on KVM's gfn_to_pfn() to query possible 2M GTT From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Zhenyu Wang , Zhi Wang Cc: kvm@vger.kernel.org, intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Yan Zhao , Ben Gardon X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760030035827746401?= X-GMAIL-MSGID: =?utf-8?q?1760030035827746401?= Now that gvt_pin_guest_page() explicitly verifies the pinned PFN is a transparent hugepage page, don't use KVM's gfn_to_pfn() to pre-check if a 2M GTT entry is possible and instead just try to map the GFN with a 2MB entry. Using KVM to query pfn that is ultimately managed through VFIO is odd, and KVM's gfn_to_pfn() is not intended for non-KVM consumption; it's exported only because of KVM vendor modules (x86 and PPC). Signed-off-by: Sean Christopherson --- drivers/gpu/drm/i915/gvt/gtt.c | 33 +++++++++++---------------------- 1 file changed, 11 insertions(+), 22 deletions(-) diff --git a/drivers/gpu/drm/i915/gvt/gtt.c b/drivers/gpu/drm/i915/gvt/gtt.c index 15848b041a0d..e60bcce241f8 100644 --- a/drivers/gpu/drm/i915/gvt/gtt.c +++ b/drivers/gpu/drm/i915/gvt/gtt.c @@ -1146,21 +1146,19 @@ static inline void ppgtt_generate_shadow_entry(struct intel_gvt_gtt_entry *se, } /* - * Check if can do 2M page + * Try to map a 2M gtt entry. * @vgpu: target vgpu * @entry: target pfn's gtt entry * - * Return 1 if 2MB huge gtt shadowing is possible, 0 if miscondition, - * negative if found err. + * Return 1 if 2MB huge gtt shadow was creation, 0 if the entry needs to be + * split, negative if found err. */ -static int is_2MB_gtt_possible(struct intel_vgpu *vgpu, - struct intel_gvt_gtt_entry *entry) +static int try_map_2MB_gtt_entry(struct intel_vgpu *vgpu, + struct intel_gvt_gtt_entry *entry, dma_addr_t *dma_addr) { const struct intel_gvt_gtt_pte_ops *ops = vgpu->gvt->gtt.pte_ops; unsigned long gfn = ops->get_pfn(entry); - kvm_pfn_t pfn; int max_level; - int ret; if (!HAS_PAGE_SIZES(vgpu->gvt->gt->i915, I915_GTT_PAGE_SIZE_2M)) return 0; @@ -1173,16 +1171,7 @@ static int is_2MB_gtt_possible(struct intel_vgpu *vgpu, if (max_level < PG_LEVEL_2M) return 0; - pfn = gfn_to_pfn(vgpu->vfio_device.kvm, gfn); - if (is_error_noslot_pfn(pfn)) - return -EINVAL; - - if (!pfn_valid(pfn)) - return -EINVAL; - - ret = PageTransHuge(pfn_to_page(pfn)); - kvm_release_pfn_clean(pfn); - return ret; + return intel_gvt_dma_map_guest_page(vgpu, gfn, I915_GTT_PAGE_SIZE_2M, dma_addr); } static int split_2MB_gtt_entry(struct intel_vgpu *vgpu, @@ -1278,7 +1267,7 @@ static int ppgtt_populate_shadow_entry(struct intel_vgpu *vgpu, { const struct intel_gvt_gtt_pte_ops *pte_ops = vgpu->gvt->gtt.pte_ops; struct intel_gvt_gtt_entry se = *ge; - unsigned long gfn, page_size = PAGE_SIZE; + unsigned long gfn; dma_addr_t dma_addr; int ret; @@ -1301,13 +1290,12 @@ static int ppgtt_populate_shadow_entry(struct intel_vgpu *vgpu, return split_64KB_gtt_entry(vgpu, spt, index, &se); case GTT_TYPE_PPGTT_PTE_2M_ENTRY: gvt_vdbg_mm("shadow 2M gtt entry\n"); - ret = is_2MB_gtt_possible(vgpu, ge); + ret = try_map_2MB_gtt_entry(vgpu, ge, &dma_addr); if (ret == 0) return split_2MB_gtt_entry(vgpu, spt, index, &se); else if (ret < 0) return ret; - page_size = I915_GTT_PAGE_SIZE_2M; - break; + goto set_shadow_entry; case GTT_TYPE_PPGTT_PTE_1G_ENTRY: gvt_vgpu_err("GVT doesn't support 1GB entry\n"); return -EINVAL; @@ -1316,10 +1304,11 @@ static int ppgtt_populate_shadow_entry(struct intel_vgpu *vgpu, } /* direct shadow */ - ret = intel_gvt_dma_map_guest_page(vgpu, gfn, page_size, &dma_addr); + ret = intel_gvt_dma_map_guest_page(vgpu, gfn, PAGE_SIZE, &dma_addr); if (ret) return -ENXIO; +set_shadow_entry: pte_ops->set_pfn(&se, dma_addr >> PAGE_SHIFT); ppgtt_set_shadow_entry(spt, &se, index); return 0; From patchwork Sat Mar 11 00:22:39 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67893 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp48706wrd; Fri, 10 Mar 2023 16:41:45 -0800 (PST) X-Google-Smtp-Source: AK7set/llgEzzS6vv03EmsGwdCrJiq2q4ePhd4vegyIes3Ksr/iUnTIAzzqi3onWCCw/sNqjkKxz X-Received: by 2002:a17:90b:1d07:b0:237:e1d2:c659 with SMTP id on7-20020a17090b1d0700b00237e1d2c659mr28569641pjb.2.1678495305670; Fri, 10 Mar 2023 16:41:45 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678495305; cv=none; d=google.com; s=arc-20160816; b=XLQPyHRSPeimX6NVXrlc3Y4x7/tbL4Qd2dSqkWLRo2Ay8bxEkXPv7wcC2Atmq4WYDt Qf00QbEac8xwoptGQTbaAuIDaQxmAnblolBpjvi7IfToraKmoAy9XJgS3MNtU4vU2PRJ b2BWrsFYkTT5mosUmA/myC/n+OCkTqVE7VLepGYiLeaLSTsqU/Ai+UUeW2KaMficI8rg XOZbKuXUWprC6WwVqlnfza4oBhgLqfpz4dwh8ftlWJqyYkL6TuEIUY4tds334VaMIX5F PkMoYEdfx17hKC/vUSG8WMafKUn2f4Nc5pdKntck8lXKojAjeQWAnGanLO7mIqjTln/9 SeXQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=MQo4WmE7f97mSOHZkI3jr5btwmig+br9PEj++8GmA1Y=; b=Y38ZXEhv4x/LGWTPefUfqzGBXkARR0DrZLzyI1AIH8kQ9LCnjugrsMuwYXPE5MhTnk YJU/DkYeXru1H82yN6sXp8LWgF8xH1Rypx/V+rreVsk2pJ/kkshyHIRSbozYxysqrN35 1b7xj/QJj2JoRddWrKnvUKR4TDiKfyugal0JQAy63HwsA9FlFzSn6+wD3Cpbd52csRed l1iRIekDChFXsSCO4R73rnPVOFgKl9nUsHFA/YTFEErgF3AKnXpuht4EdXPdnETlonSa t4prEdCJrhw9wwGfXhI2ERuI9A+fczT5QkBci4CqDPW9rS+B0BJTZFNrDeJ87P7EKWqp 3w1w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=bl3n2+O+; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id j19-20020a17090a7e9300b00233cee16612si965056pjl.151.2023.03.10.16.41.30; Fri, 10 Mar 2023 16:41:45 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=bl3n2+O+; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231214AbjCKAYI (ORCPT + 99 others); Fri, 10 Mar 2023 19:24:08 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45066 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230154AbjCKAXk (ORCPT ); Fri, 10 Mar 2023 19:23:40 -0500 Received: from mail-pj1-x104a.google.com (mail-pj1-x104a.google.com [IPv6:2607:f8b0:4864:20::104a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5904D5D450 for ; Fri, 10 Mar 2023 16:23:25 -0800 (PST) Received: by mail-pj1-x104a.google.com with SMTP id a6-20020a17090acb8600b0023797a1b2f7so2837619pju.3 for ; Fri, 10 Mar 2023 16:23:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678494201; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=MQo4WmE7f97mSOHZkI3jr5btwmig+br9PEj++8GmA1Y=; b=bl3n2+O+/VcIrUul70a5c+psPIylTaKZidknn7ZUMJ1VKDYON2kZjsj+qY8mlUsf3H trT5CCOCqbqQzkNkr7qgSz7MW2T5nLyGwtnrq+dTu/4WboCT7gmBjgkcKB2lVQwxHML9 P62aQv5xuNUt9STojA6Vr1mSxq8grcBmiGzmLRGU6MPnI6sz6t/Qh/JBg6pg+M6dEPLL TYko2KDQWHHz3Xs7yTY6tz4i2DxoK+UJdwG1yB6ish/k+gmiYui1QPheJvkZJuOzRuDw 0h7vffFzjdPTnAg9LysYD0norRIil7HfS/4M4biE3kx7voJQNWrLPNM+Zdxyo5syMIlO 6fBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678494201; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=MQo4WmE7f97mSOHZkI3jr5btwmig+br9PEj++8GmA1Y=; b=MvSpoRb7uHipT0C6wmlLaO8RlBeyRD79wxibomwB37f60J7THEc9Lf9K/cKr8pJ/uO F5Ah2gsYlCMAFOkEN7+mX1Tevos+t/ijTCKnah+UO5rWXP3TIWboDkaEZFXPtrY1SD9N AhU0IEgHfryg6HObuGFoKIjg+EAeLVm0SYFYV/IcwEPVs6Y5NQpj1s5XIv0Ugi3AiiYe yyVbdyoQLn7gg5/TaiV89SF9PiMPSdab0tZ4fGCjJCNPEcI6j/nz3/Ljp+A1roYT7VL6 Mp/lxbh1wExK4CPl5DxXtFZbRi9P6aydFg9rRUSUzizCY4TLGhz2ktsFbcsNQU0DwDwm s7lw== X-Gm-Message-State: AO0yUKVJpvVRwPjY5b7WyutVKS1XqBODFCYbPLLziV2PzBh16d/7IoCr 0DPUpQMBILibtNsrOkpn9+Z0IZgO+Hc= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:90a:4e04:b0:239:d0ab:a7c9 with SMTP id n4-20020a17090a4e0400b00239d0aba7c9mr9622929pjh.4.1678494201193; Fri, 10 Mar 2023 16:23:21 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 16:22:39 -0800 In-Reply-To: <20230311002258.852397-1-seanjc@google.com> Mime-Version: 1.0 References: <20230311002258.852397-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230311002258.852397-9-seanjc@google.com> Subject: [PATCH v2 08/27] drm/i915/gvt: Use an "unsigned long" to iterate over memslot gfns From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Zhenyu Wang , Zhi Wang Cc: kvm@vger.kernel.org, intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Yan Zhao , Ben Gardon X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760029893239417934?= X-GMAIL-MSGID: =?utf-8?q?1760029893239417934?= Use an "unsigned long" instead of an "int" when iterating over the gfns in a memslot. The number of pages in the memslot is tracked as an "unsigned long", e.g. KVMGT could theoretically break if a KVM memslot larger than 16TiB were deleted (2^32 * 4KiB). Signed-off-by: Sean Christopherson Reviewed-by: Yan Zhao --- drivers/gpu/drm/i915/gvt/kvmgt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c index 90997cc385b4..68be66395598 100644 --- a/drivers/gpu/drm/i915/gvt/kvmgt.c +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c @@ -1634,7 +1634,7 @@ static void kvmgt_page_track_flush_slot(struct kvm *kvm, struct kvm_memory_slot *slot, struct kvm_page_track_notifier_node *node) { - int i; + unsigned long i; gfn_t gfn; struct intel_vgpu *info = container_of(node, struct intel_vgpu, track_node); From patchwork Sat Mar 11 00:22:40 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67889 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp48588wrd; Fri, 10 Mar 2023 16:41:23 -0800 (PST) X-Google-Smtp-Source: AK7set+d3bOLF2AlX2/3XBzEGJNJSpcUgqP5hviYB9sXLto/IM3xTKK+mQ6GHsa8fmaTB2L1MQwB X-Received: by 2002:a17:902:d4cd:b0:19e:675b:a40f with SMTP id o13-20020a170902d4cd00b0019e675ba40fmr31909143plg.8.1678495283217; Fri, 10 Mar 2023 16:41:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678495283; cv=none; d=google.com; s=arc-20160816; b=cgSr/4SakdhJnkPs7VRzI2k8zc6Pi5NRauzK5GBCIdLnxFtxmft2nVd79ySam64pjM B3oUqE3DSPAgn7ICbEkkNp7ZxTbmQd3cfWXpSN06YUxXggMQXIWyn0+xny70+sj8cwo5 wpUszcVAEq7Ez+/lo256hEqcWTUo8kjt10kORf4d/9gTkJuNVuSEQ73l+cVHBmDVzMPy 8+vStOjfTMn2Y4IDx27BfTvx4KcBc+1Ac+BGmfmN7WYZ/u0rHOLy6eiL9scfD+5K0f2N AyihM7VdS3GZRjhuSGomsTGzKNPOgKkwIn8ma9HvkyhB0p6/N9budx6iRICJV7EuT6+I a6zQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=Dl93qHhMLxKPHFQ6pWyH1Q53L+c+frE+R34SS4aDFMI=; b=vMEveKRlkcB8TnOX22NskktMbhHDjvUDtWupOL6tHnhhsca/le87nfgKBd06cafppo wKoKmdbPLml0Hd3NqdCz2S2bTwKUl0ojcN70Q38vR0SPhz/DIsRR3uOZoGS1UU3IgHHp ONMj6OzzbMunf9F1X2tSeh/gMmoVgZfvvtshdhxTk6KQHIKhj4mu8BnKUzvI5SYjecPm dHvsakpYINNT0c5dkV1GUV9VjIvFOm3BDcKDdKoR1SDdQWzCSlSBVZ8iHGb2p4WKYyo4 i5AbeardE4ZLCBdvK62ePV1kelpn8A9OTmgV3vWGKcydVnU6+xpi0NFda9iJu5VIa6VV M4Ww== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=A5bTxFpK; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id d18-20020a170902ced200b001994711ddfbsi1288388plg.127.2023.03.10.16.41.08; Fri, 10 Mar 2023 16:41:23 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=A5bTxFpK; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231281AbjCKAYO (ORCPT + 99 others); Fri, 10 Mar 2023 19:24:14 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45178 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230409AbjCKAXm (ORCPT ); Fri, 10 Mar 2023 19:23:42 -0500 Received: from mail-pf1-x44a.google.com (mail-pf1-x44a.google.com [IPv6:2607:f8b0:4864:20::44a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 197A15DC94 for ; Fri, 10 Mar 2023 16:23:27 -0800 (PST) Received: by mail-pf1-x44a.google.com with SMTP id a10-20020a056a000c8a00b005fc6b117942so3599145pfv.2 for ; Fri, 10 Mar 2023 16:23:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678494203; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=Dl93qHhMLxKPHFQ6pWyH1Q53L+c+frE+R34SS4aDFMI=; b=A5bTxFpKv+szN66TzCvK19Ft/76A37Tb4WVt01WT+cWiPfjrtrU6V1LalIMKYB3vWj ahwkahPbFFRuYQ445gPRNRQVd2F+wQjsbyOSuuqsNtmiCkidRkFo5DFY21I9BaQKcean RIRti0nwCel+5OGumdPl+/xlnhiYx6omnIN/W6UtHdN4BNfSwvQ008OchTLboAurnPh/ 8pxe+MncULYhV5yvIt0yo+RdceNc/KoEmZbj/GQ7dhEloJRuBk3xjGAKj8+3Sz5SfLoD WY0JV5dsRGiY9Kztz2yk+BaVx5kLBKuomQBRTk504BCjSrzFojBQgcdgeD7GMaoJ27I4 CgJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678494203; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=Dl93qHhMLxKPHFQ6pWyH1Q53L+c+frE+R34SS4aDFMI=; b=5aoDKFyqEs8WmaMEcCN4Iokcm2A3cuv5FE0eOdRlnlvdjzG+GFFfPn/dZBjIxs7I3g b7FFefuurJeM+phXrF48p0isIyc6+sVwVFrHBzl0JDBvvzDc7gmgK7vVK/wERzO9bzq+ BdfNrTKVy6X2cLJEr3cxllBiTgbZGsZVxRHje1m/EozoX9ksNWt6bV2ovNTIYLS9Sayx I1NHSlUZVqEl5z1jiHQsoZbTgrHsukj77J+fmdORmDhsssMLxhNB8F2/jiMzUzwL0Azw oOvUhwWkIuBPaSKV8qLlvv/uiZJbtT4QCdrqIDUmQVzrjZNd+abazM8NoDsNC4sQHTQ/ paqA== X-Gm-Message-State: AO0yUKUjAOv1ptQtBFh5CSzSsljjTi43BzzZMdIqQWgYB4FrBkImVO4f +Y4G0GHgW3p25oKaigrFxdQ0qHCQOiA= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:902:a3cc:b0:199:4a1b:c5f4 with SMTP id q12-20020a170902a3cc00b001994a1bc5f4mr10345631plb.2.1678494203093; Fri, 10 Mar 2023 16:23:23 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 16:22:40 -0800 In-Reply-To: <20230311002258.852397-1-seanjc@google.com> Mime-Version: 1.0 References: <20230311002258.852397-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230311002258.852397-10-seanjc@google.com> Subject: [PATCH v2 09/27] drm/i915/gvt: Drop unused helper intel_vgpu_reset_gtt() From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Zhenyu Wang , Zhi Wang Cc: kvm@vger.kernel.org, intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Yan Zhao , Ben Gardon X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760029869865992164?= X-GMAIL-MSGID: =?utf-8?q?1760029869865992164?= Drop intel_vgpu_reset_gtt() as it no longer has any callers. In addition to eliminating dead code, this eliminates the last possible scenario where __kvmgt_protect_table_find() can be reached without holding vgpu_lock. Requiring vgpu_lock to be held when calling __kvmgt_protect_table_find() will allow a protecting the gfn hash with vgpu_lock without too much fuss. No functional change intended. Fixes: ba25d977571e ("drm/i915/gvt: Do not destroy ppgtt_mm during vGPU D3->D0.") Signed-off-by: Sean Christopherson Reviewed-by: Yan Zhao --- drivers/gpu/drm/i915/gvt/gtt.c | 18 ------------------ drivers/gpu/drm/i915/gvt/gtt.h | 1 - 2 files changed, 19 deletions(-) diff --git a/drivers/gpu/drm/i915/gvt/gtt.c b/drivers/gpu/drm/i915/gvt/gtt.c index e60bcce241f8..293bb2292021 100644 --- a/drivers/gpu/drm/i915/gvt/gtt.c +++ b/drivers/gpu/drm/i915/gvt/gtt.c @@ -2845,24 +2845,6 @@ void intel_vgpu_reset_ggtt(struct intel_vgpu *vgpu, bool invalidate_old) ggtt_invalidate(gvt->gt); } -/** - * intel_vgpu_reset_gtt - reset the all GTT related status - * @vgpu: a vGPU - * - * This function is called from vfio core to reset reset all - * GTT related status, including GGTT, PPGTT, scratch page. - * - */ -void intel_vgpu_reset_gtt(struct intel_vgpu *vgpu) -{ - /* Shadow pages are only created when there is no page - * table tracking data, so remove page tracking data after - * removing the shadow pages. - */ - intel_vgpu_destroy_all_ppgtt_mm(vgpu); - intel_vgpu_reset_ggtt(vgpu, true); -} - /** * intel_gvt_restore_ggtt - restore all vGPU's ggtt entries * @gvt: intel gvt device diff --git a/drivers/gpu/drm/i915/gvt/gtt.h b/drivers/gpu/drm/i915/gvt/gtt.h index a3b0f59ec8bd..4cb183e06e95 100644 --- a/drivers/gpu/drm/i915/gvt/gtt.h +++ b/drivers/gpu/drm/i915/gvt/gtt.h @@ -224,7 +224,6 @@ void intel_vgpu_reset_ggtt(struct intel_vgpu *vgpu, bool invalidate_old); void intel_vgpu_invalidate_ppgtt(struct intel_vgpu *vgpu); int intel_gvt_init_gtt(struct intel_gvt *gvt); -void intel_vgpu_reset_gtt(struct intel_vgpu *vgpu); void intel_gvt_clean_gtt(struct intel_gvt *gvt); struct intel_vgpu_mm *intel_gvt_find_ppgtt_mm(struct intel_vgpu *vgpu, From patchwork Sat Mar 11 00:22:41 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67891 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp48619wrd; Fri, 10 Mar 2023 16:41:29 -0800 (PST) X-Google-Smtp-Source: AK7set/gRsJDsNVaMwZTdgsWNSgOK6TTgBgQJ6zjADZ43AkDD5VHW462lxQNJSCWpO+MTJB1vy9b X-Received: by 2002:a05:6a20:9384:b0:ce:521b:f542 with SMTP id x4-20020a056a20938400b000ce521bf542mr8238681pzh.17.1678495289037; Fri, 10 Mar 2023 16:41:29 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678495289; cv=none; d=google.com; s=arc-20160816; b=eFjqyseeNFJDs4CcyaFb9fFhJklWX98hTDCz7IaK6nyj/F5Wtlx9TLLzdvObDjh5uR PDMH9vd7UEwvHZG/wQa/xBVzTZ0jdzcKpTjktyppkWrJabFhnK/reKvvfezP+UsX72+M Saaeq2fgYPPsrg2NvSJcEcAxVyrBezA2S3op48GcAFuqqguf+HibuX7JWFrwc74cE14s hUDQrzUTUvVrI1TLyuRoO4f8sTgMqBfhVi8wXfjbeVH7SCnMJdipAL077QKEzqxmfO/0 K5GPF+F7fGY24Sw/n2PBR9CrGzwq8j5ZKaoPRovZl1DP91HLptRuuDYc836GU2eLKgg4 v+tA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=C7JjSI0pT7joQ/rLMM2i7GRIoYFbucT/e+mgN6frquk=; b=PvF7FS9yjScjQwsX58/2zVUY6+vvsHeOwaltQjWGHP/LjIZQJWRKrS9HGFQiQCr7PP PlHNtafB+ONBb1s6u7lYArvdwK58boZNy8cSsXYkHGrmmtdJdOr0Hj2J+h+s1FSXVNlN zMhRYZiPbz9bh3fpzr8wqPtid/s6sW3PM3nbDaC8UULxKeUER2be0g7luHO9zBUE8hCh yoA3Q4vClPWtLkZBxPk+L+Ki+KXOhWtlHuyZexd4JBc4eJOnkHGktOSJyDNr1kgOIXce tlTE8gUFPI917Tx5y6uijGc5ONv2XBzt/vO+pUNbhpaDse953X+0c8kEI97XlQ1/r3ZQ Y7qQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b="HO/j4jZx"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id w1-20020a631601000000b00502d6998a4asi944560pgl.458.2023.03.10.16.41.14; Fri, 10 Mar 2023 16:41:29 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b="HO/j4jZx"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231332AbjCKAYY (ORCPT + 99 others); Fri, 10 Mar 2023 19:24:24 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44976 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230456AbjCKAXo (ORCPT ); Fri, 10 Mar 2023 19:23:44 -0500 Received: from mail-pj1-x104a.google.com (mail-pj1-x104a.google.com [IPv6:2607:f8b0:4864:20::104a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 862716B955 for ; Fri, 10 Mar 2023 16:23:28 -0800 (PST) Received: by mail-pj1-x104a.google.com with SMTP id q9-20020a17090a9f4900b00237d026fc55so5053360pjv.3 for ; Fri, 10 Mar 2023 16:23:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678494205; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=C7JjSI0pT7joQ/rLMM2i7GRIoYFbucT/e+mgN6frquk=; b=HO/j4jZxJTPnNlCvqNIr5Y5KBfdMA+RArZQ6E8B+5VeFfzVshQ9PBvi1r5s9Vp2/Sj Pt7JTJKOBCqoqv8n4jxdK+8vBvs0GXZc7nW8k5IsbdneX9q7CcOtXcr5R6UJ39ls0eYZ 6Y7j9wTPtbZQ7b17m/bJYsT/8NjZnITyKuhsNfYb/UMAULXoEo4a2UglV221BRnLFrcy aZ8NirUFSobSolD6VpCWTPhefI1g6HcHwKuU3rrdgwuk0hOYJvzaVFIs94wOvTXe0KLT 3uHSd1BR6WrVPUWLMgcw8g7jirMBfMd7+Gjd/TGzPOcG5bhLVf8y0szkKmKHbV/rX64c Tdyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678494205; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=C7JjSI0pT7joQ/rLMM2i7GRIoYFbucT/e+mgN6frquk=; b=0PEzyqr15Wd6yNG98Zmu6+SmtSI5Hr49BgGI0liNzQowzfAE59qt0MghRCzbjBRyBS ktgXUk850Hut1JBI3wzuBw+c980jZyYdtKqTiGLylDUuPwVT9p4Cauf3Eqo6xaZesN9c jOzoaLrvCsolC3JG5OwDqr6hFzEAG/vT5eHXoQO3empyYuK8SVrNqZK8mBVWTreaQ2t+ QqDpKx0CSctZoone6ExORMBZ4js3sQHZ8BT9JxhPrbkj5HAHnphn/vtk1CVLrnESi+Pw 0kMVJqEbHtmiUKhiAtLbtjXtRpLy0XC1U2IPUNWkK01eBfXK0swWVk6XRZCm6yOgNWEz AG6A== X-Gm-Message-State: AO0yUKUCcOzHxTW8/cekgW+tWdVf4p5kkMYjALxi4q+pMckg89ZNqsUQ Hyt4t1uVA9ABzEFRbbmHZp+oePp7xBc= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:90a:420b:b0:237:29b1:188f with SMTP id o11-20020a17090a420b00b0023729b1188fmr10180694pjg.8.1678494205065; Fri, 10 Mar 2023 16:23:25 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 16:22:41 -0800 In-Reply-To: <20230311002258.852397-1-seanjc@google.com> Mime-Version: 1.0 References: <20230311002258.852397-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230311002258.852397-11-seanjc@google.com> Subject: [PATCH v2 10/27] drm/i915/gvt: Protect gfn hash table with vgpu_lock From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Zhenyu Wang , Zhi Wang Cc: kvm@vger.kernel.org, intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Yan Zhao , Ben Gardon X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760029876225147885?= X-GMAIL-MSGID: =?utf-8?q?1760029876225147885?= Use vgpu_lock instead of KVM's mmu_lock to protect accesses to the hash table used to track which gfns are write-protected when shadowing the guest's GTT, and hoist the acquisition of vgpu_lock from intel_vgpu_page_track_handler() out to its sole caller, kvmgt_page_track_write(). This fixes a bug where kvmgt_page_track_write(), which doesn't hold kvm->mmu_lock, could race with intel_gvt_page_track_remove() and trigger a use-after-free. Fixing kvmgt_page_track_write() by taking kvm->mmu_lock is not an option as mmu_lock is a r/w spinlock, and intel_vgpu_page_track_handler() might sleep when acquiring vgpu->cache_lock deep down the callstack: intel_vgpu_page_track_handler() | |-> page_track->handler / ppgtt_write_protection_handler() | |-> ppgtt_handle_guest_write_page_table_bytes() | |-> ppgtt_handle_guest_write_page_table() | |-> ppgtt_handle_guest_entry_removal() | |-> ppgtt_invalidate_pte() | |-> intel_gvt_dma_unmap_guest_page() | |-> mutex_lock(&vgpu->cache_lock); Signed-off-by: Sean Christopherson Reviewed-by: Yan Zhao --- drivers/gpu/drm/i915/gvt/kvmgt.c | 55 +++++++++++++++------------ drivers/gpu/drm/i915/gvt/page_track.c | 10 +---- 2 files changed, 33 insertions(+), 32 deletions(-) diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c index 68be66395598..9824d075562e 100644 --- a/drivers/gpu/drm/i915/gvt/kvmgt.c +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c @@ -366,6 +366,8 @@ __kvmgt_protect_table_find(struct intel_vgpu *info, gfn_t gfn) { struct kvmgt_pgfn *p, *res = NULL; + lockdep_assert_held(&info->vgpu_lock); + hash_for_each_possible(info->ptable, p, hnode, gfn) { if (gfn == p->gfn) { res = p; @@ -1567,6 +1569,9 @@ int intel_gvt_page_track_add(struct intel_vgpu *info, u64 gfn) if (!test_bit(INTEL_VGPU_STATUS_ATTACHED, info->status)) return -ESRCH; + if (kvmgt_gfn_is_write_protected(info, gfn)) + return 0; + idx = srcu_read_lock(&kvm->srcu); slot = gfn_to_memslot(kvm, gfn); if (!slot) { @@ -1575,16 +1580,12 @@ int intel_gvt_page_track_add(struct intel_vgpu *info, u64 gfn) } write_lock(&kvm->mmu_lock); - - if (kvmgt_gfn_is_write_protected(info, gfn)) - goto out; - kvm_slot_page_track_add_page(kvm, slot, gfn, KVM_PAGE_TRACK_WRITE); + write_unlock(&kvm->mmu_lock); + + srcu_read_unlock(&kvm->srcu, idx); + kvmgt_protect_table_add(info, gfn); - -out: - write_unlock(&kvm->mmu_lock); - srcu_read_unlock(&kvm->srcu, idx); return 0; } @@ -1597,24 +1598,22 @@ int intel_gvt_page_track_remove(struct intel_vgpu *info, u64 gfn) if (!test_bit(INTEL_VGPU_STATUS_ATTACHED, info->status)) return -ESRCH; - idx = srcu_read_lock(&kvm->srcu); - slot = gfn_to_memslot(kvm, gfn); - if (!slot) { - srcu_read_unlock(&kvm->srcu, idx); - return -EINVAL; - } - - write_lock(&kvm->mmu_lock); - if (!kvmgt_gfn_is_write_protected(info, gfn)) - goto out; + return 0; + idx = srcu_read_lock(&kvm->srcu); + slot = gfn_to_memslot(kvm, gfn); + if (!slot) { + srcu_read_unlock(&kvm->srcu, idx); + return -EINVAL; + } + + write_lock(&kvm->mmu_lock); kvm_slot_page_track_remove_page(kvm, slot, gfn, KVM_PAGE_TRACK_WRITE); + write_unlock(&kvm->mmu_lock); + srcu_read_unlock(&kvm->srcu, idx); + kvmgt_protect_table_del(info, gfn); - -out: - write_unlock(&kvm->mmu_lock); - srcu_read_unlock(&kvm->srcu, idx); return 0; } @@ -1625,9 +1624,13 @@ static void kvmgt_page_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, struct intel_vgpu *info = container_of(node, struct intel_vgpu, track_node); + mutex_lock(&info->vgpu_lock); + if (kvmgt_gfn_is_write_protected(info, gpa_to_gfn(gpa))) intel_vgpu_page_track_handler(info, gpa, (void *)val, len); + + mutex_unlock(&info->vgpu_lock); } static void kvmgt_page_track_flush_slot(struct kvm *kvm, @@ -1639,16 +1642,20 @@ static void kvmgt_page_track_flush_slot(struct kvm *kvm, struct intel_vgpu *info = container_of(node, struct intel_vgpu, track_node); - write_lock(&kvm->mmu_lock); + mutex_lock(&info->vgpu_lock); + for (i = 0; i < slot->npages; i++) { gfn = slot->base_gfn + i; if (kvmgt_gfn_is_write_protected(info, gfn)) { + write_lock(&kvm->mmu_lock); kvm_slot_page_track_remove_page(kvm, slot, gfn, KVM_PAGE_TRACK_WRITE); + write_unlock(&kvm->mmu_lock); + kvmgt_protect_table_del(info, gfn); } } - write_unlock(&kvm->mmu_lock); + mutex_unlock(&info->vgpu_lock); } void intel_vgpu_detach_regions(struct intel_vgpu *vgpu) diff --git a/drivers/gpu/drm/i915/gvt/page_track.c b/drivers/gpu/drm/i915/gvt/page_track.c index df34e73cba41..60a65435556d 100644 --- a/drivers/gpu/drm/i915/gvt/page_track.c +++ b/drivers/gpu/drm/i915/gvt/page_track.c @@ -162,13 +162,9 @@ int intel_vgpu_page_track_handler(struct intel_vgpu *vgpu, u64 gpa, struct intel_vgpu_page_track *page_track; int ret = 0; - mutex_lock(&vgpu->vgpu_lock); - page_track = intel_vgpu_find_page_track(vgpu, gpa >> PAGE_SHIFT); - if (!page_track) { - ret = -ENXIO; - goto out; - } + if (!page_track) + return -ENXIO; if (unlikely(vgpu->failsafe)) { /* Remove write protection to prevent furture traps. */ @@ -179,7 +175,5 @@ int intel_vgpu_page_track_handler(struct intel_vgpu *vgpu, u64 gpa, gvt_err("guest page write error, gpa %llx\n", gpa); } -out: - mutex_unlock(&vgpu->vgpu_lock); return ret; } From patchwork Sat Mar 11 00:22:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67878 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp43758wrd; Fri, 10 Mar 2023 16:25:41 -0800 (PST) X-Google-Smtp-Source: AK7set8KKFy1AfB0se7fLEwFqibOhH10wRHHsCgHOf94UQ729QY7TLJxqrFVYLel4SheyKgRpT+n X-Received: by 2002:a17:903:41c1:b0:19c:dd49:9bf8 with SMTP id u1-20020a17090341c100b0019cdd499bf8mr3243310ple.28.1678494341509; Fri, 10 Mar 2023 16:25:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678494341; cv=none; d=google.com; s=arc-20160816; b=OB+ZRp3lEvPJyBw0bpwdDtEV+es1QlI7unn6C2+PdYWM6tSBRL7fFlIedYQr+rUMFo M9hyM9Y8fDq70ZdwR8i1oZZpMlYGuaVaHaEO2aQWasst0npdEnjUiboBl1+mfJNyNdcH rYsDoL20A6UEcRazqLvsNjlEl/uDLczDMipqhhkHzvJI9/N3bJqUUCUAkRcBy8nWReOP 6ukE+uVW0q4q+KzF6XEHTcbDF2vLI1FlxZxTQSVXfeaCuCcP/1BK052Zlq1AZaIjhNog MIKwIiRpB93l8IIeXzt/2D/kA3v4t8etEG1nGB02P/mBa6CceRt69XMR9hbiggnv3u9I ewzg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=Q6pZnJVg25eyMveIv3/duenR4ioTSWK21ILUn7ktJtk=; b=p+zyMGYGtlGzaZVso4y5XwHZx/PaRuyPw2zhiaqgNQiWHPB01IK4X2VeUl+v9fYcd9 crOhBeGs8h7tV4Vfq8P7mBJnXltL0qfSYi4usaQujnuo30UBR9+2/jOFAniSKmJUHGXy 3yMUsMU9EvkicIjn4xjt08efCCZ7qiIRjjZdjjYLMPsHggfy01OxFfJpSo7WKa16tEF7 7nP0GmJ5Tcquw4wVZp7Z1pxguSxDEEmduvZ74Q+PsAPZ3OvktWVc95PaT9wfls109Nit 2R+fokkAaChHsNjvsvkVipWXQW2lfk2aMmLAb+4EbATVyzg4D5TRfeUWeC4SPd3YACc7 iO/Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=fW7SIHxJ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id o8-20020a1709026b0800b0019e6a6aa79dsi1087663plk.212.2023.03.10.16.25.25; Fri, 10 Mar 2023 16:25:41 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=fW7SIHxJ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231303AbjCKAYR (ORCPT + 99 others); Fri, 10 Mar 2023 19:24:17 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44914 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230250AbjCKAXm (ORCPT ); Fri, 10 Mar 2023 19:23:42 -0500 Received: from mail-yw1-x1149.google.com (mail-yw1-x1149.google.com [IPv6:2607:f8b0:4864:20::1149]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7691B166C4 for ; Fri, 10 Mar 2023 16:23:27 -0800 (PST) Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-536bf649e70so70280337b3.0 for ; Fri, 10 Mar 2023 16:23:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678494207; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=Q6pZnJVg25eyMveIv3/duenR4ioTSWK21ILUn7ktJtk=; b=fW7SIHxJHBoSqAPEBOS5mWe5gfPekz/J4gy/C9npc9LGXg1kzzQmPSW2KEO5NfzKlp jis4mUml6dDwPYEJ5EZcT7y+L/sifVjanJbvSe1dSA76S2a3KcL+RGWUWj51mHMSGMK4 23dVrVI1ebYRhkXY9xvQdAzQr5WZCSmGMsUEAL50y6nt/qHXnrf5wFxpXeQM1bXSuF96 RrUQQVwdizUqSPQQZnZBxSly3MAIDFNYxQJCirto1mxjd6kBRO1QifVyyAt9NcJvSVCD QeD8M6UW1G8Rtt3ZXqUFXprmDp5ZSEdcEjgHi/biCE9qe7KO3/AZcKgH9hIp2RkMU2Nn Owqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678494207; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=Q6pZnJVg25eyMveIv3/duenR4ioTSWK21ILUn7ktJtk=; b=TkCub5i65fgtI8cOH66LIEgnrrUUMTrPpvg125bk17NiKTJHXfN7JkxPYrz/hfcZG0 VZS2d2TUlT6y3y+syyWTRoseIkrgNhepK8CPsvMzY4JJgAEJmG0aZgQUnE/6tLAySuf7 +mTgo1sN/0SJ/zWGB5OXTdrFyhv/+n3Rgb+n2A+GUoJDX7ekybF9rIMiFVS8Blwt+gmC 4+R2/pdYJGwUFpY0CJwYPYYttQgpoVhsiMJvCCb5hbVTHB87kBnVRD0euDmbJC/i9Kqt sgqjTvXXTifRt/m+TWFiQMapIU4D0fq64SXPS2OEQ8HP6IaEpcP3p3wMxAu+kY3wOhZh Lejg== X-Gm-Message-State: AO0yUKUVOEd8xMJqRE3eA76WkGoao2pWVwyJaSykEzzWTROK2ylU+xz7 20K2Y4LopibQTd4vl/kAZNX4NQo+wd8= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a05:6902:188:b0:a99:de9d:d504 with SMTP id t8-20020a056902018800b00a99de9dd504mr16643426ybh.12.1678494206913; Fri, 10 Mar 2023 16:23:26 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 16:22:42 -0800 In-Reply-To: <20230311002258.852397-1-seanjc@google.com> Mime-Version: 1.0 References: <20230311002258.852397-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230311002258.852397-12-seanjc@google.com> Subject: [PATCH v2 11/27] KVM: x86/mmu: Don't rely on page-track mechanism to flush on memslot change From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Zhenyu Wang , Zhi Wang Cc: kvm@vger.kernel.org, intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Yan Zhao , Ben Gardon X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760028882417889626?= X-GMAIL-MSGID: =?utf-8?q?1760028882417889626?= Call kvm_mmu_zap_all_fast() directly when flushing a memslot instead of bouncing through the page-track mechanism. KVM (unfortunately) needs to zap and flush all page tables on memslot DELETE/MOVE irrespective of whether KVM is shadowing guest page tables. This will allow changing KVM to register a page-track notifier on the first shadow root allocation, and will also allow deleting the misguided kvm_page_track_flush_slot() hook itself once KVM-GT also moves to a different method for reacting to memslot changes. No functional change intended. Cc: Yan Zhao Link: https://lore.kernel.org/r/20221110014821.1548347-2-seanjc@google.com Signed-off-by: Sean Christopherson --- arch/x86/include/asm/kvm_host.h | 1 + arch/x86/kvm/mmu/mmu.c | 10 +--------- arch/x86/kvm/x86.c | 2 ++ 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index 808c292ad3f4..17281d6825c9 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -1844,6 +1844,7 @@ void kvm_mmu_zap_collapsible_sptes(struct kvm *kvm, void kvm_mmu_slot_leaf_clear_dirty(struct kvm *kvm, const struct kvm_memory_slot *memslot); void kvm_mmu_zap_all(struct kvm *kvm); +void kvm_mmu_zap_all_fast(struct kvm *kvm); void kvm_mmu_invalidate_mmio_sptes(struct kvm *kvm, u64 gen); void kvm_mmu_change_mmu_pages(struct kvm *kvm, unsigned long kvm_nr_mmu_pages); diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index 4685c80e441b..409dabec69df 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -6030,7 +6030,7 @@ static void kvm_zap_obsolete_pages(struct kvm *kvm) * not use any resource of the being-deleted slot or all slots * after calling the function. */ -static void kvm_mmu_zap_all_fast(struct kvm *kvm) +void kvm_mmu_zap_all_fast(struct kvm *kvm) { lockdep_assert_held(&kvm->slots_lock); @@ -6086,13 +6086,6 @@ static bool kvm_has_zapped_obsolete_pages(struct kvm *kvm) return unlikely(!list_empty_careful(&kvm->arch.zapped_obsolete_pages)); } -static void kvm_mmu_invalidate_zap_pages_in_memslot(struct kvm *kvm, - struct kvm_memory_slot *slot, - struct kvm_page_track_notifier_node *node) -{ - kvm_mmu_zap_all_fast(kvm); -} - int kvm_mmu_init_vm(struct kvm *kvm) { struct kvm_page_track_notifier_node *node = &kvm->arch.mmu_sp_tracker; @@ -6110,7 +6103,6 @@ int kvm_mmu_init_vm(struct kvm *kvm) } node->track_write = kvm_mmu_pte_write; - node->track_flush_slot = kvm_mmu_invalidate_zap_pages_in_memslot; kvm_page_track_register_notifier(kvm, node); kvm->arch.split_page_header_cache.kmem_cache = mmu_page_header_cache; diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index f706621c35b8..29dd6c97d145 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -12662,6 +12662,8 @@ void kvm_arch_flush_shadow_all(struct kvm *kvm) void kvm_arch_flush_shadow_memslot(struct kvm *kvm, struct kvm_memory_slot *slot) { + kvm_mmu_zap_all_fast(kvm); + kvm_page_track_flush_slot(kvm, slot); } From patchwork Sat Mar 11 00:22:43 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67888 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp48571wrd; Fri, 10 Mar 2023 16:41:20 -0800 (PST) X-Google-Smtp-Source: AK7set/qDMEul/+0S0JqqWAn8MJkNtQx6d8hoiiWiR4mATPYSNSbswp+FYdvRIMmZTXfuRAkujYh X-Received: by 2002:a05:6a20:3949:b0:cc:f9f2:3039 with SMTP id r9-20020a056a20394900b000ccf9f23039mr33461817pzg.60.1678495280050; Fri, 10 Mar 2023 16:41:20 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678495280; cv=none; d=google.com; s=arc-20160816; b=uQcGiFyGpSw2DNovTcl93nCAi0nuVX7Z/dDXQSYk4qcwetWQY0eMCnS4OmoxDV295Z Zz/wpKzIJzC4fOow+XfHHIF8Rx/TVL88EQCZnTViQ+QrE+2ck+jYPJbr6nuJf55A+dUc ei485S9I3uqbnJLoOVQuFQDdHlkY8NYw/rtlzC2xQWvlAPb08T1OBsTPxO3DCa7Y3XV2 iho5m+7Hd77jzuSGXUlTN1Y8qAaoRS7TuNsnyhowOnicYJfxyYKGg27AF/LAlAdbYukk /ecimgtd2ketRNXWYpr+mNA6vrb00F1ea8/rjDbGGVzvtVgJCFTGDbEMaFXObNkblKHh QOcA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=3/u8rHQUeVKNiV3UckABDv1skeiiaOcFBmTXvpUl8gY=; b=SFQ/S3i5vpG5pJ2Ucc+6qhZVCpuuZhI0FEF7tO9Otgso8fYd+qBdo9V1t8PLEQzlyG Be193YJq8PurjPeN+c6Y1D6LtRCSZRYPoahxaV60dQIwOp7AGIPDi5nDgwOLA/5r/80P zNDifctQVX1AGJY4UvgGunsBWtmc3sjOeq4axL2fW6beYyeF84Go3YJVbzJYxLJROII8 di5d/SnzTDJgYKu+k2aVpYgHhM9kIvrTfzdscWImh+t1y2wJKzVFDZbHlNxNxdqNvS2v uNXDeuiUJpvvSoc6LCgKcOwWpNN8u6+Lyd7RW/cf4N1gO77xy+jsvTlHSMnD2j2lGuKF 13Fg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=iUpMHNEV; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id m1-20020a632601000000b004774a024588si1037215pgm.719.2023.03.10.16.41.05; Fri, 10 Mar 2023 16:41:20 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=iUpMHNEV; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230252AbjCKAYd (ORCPT + 99 others); Fri, 10 Mar 2023 19:24:33 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43648 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230469AbjCKAXo (ORCPT ); Fri, 10 Mar 2023 19:23:44 -0500 Received: from mail-pf1-x449.google.com (mail-pf1-x449.google.com [IPv6:2607:f8b0:4864:20::449]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C32037DD0F for ; Fri, 10 Mar 2023 16:23:30 -0800 (PST) Received: by mail-pf1-x449.google.com with SMTP id b8-20020aa78708000000b005eaa50faa35so3670921pfo.20 for ; Fri, 10 Mar 2023 16:23:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678494208; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=3/u8rHQUeVKNiV3UckABDv1skeiiaOcFBmTXvpUl8gY=; b=iUpMHNEVF4B8XQ8FcrszXxgFOCI20uKUpUrhV9xf6jRrhRvn9leptOV4xgv05rhBSS rYJPjT/IhtRgG5WggMQS1TR/2SKW+ihkzxRXdM2GrQM7WI86AvK8irbDB/iQWlxSoe0U 76xKc0EgfaiHHtBzE1LmJMvz5gmMhB2YkMGBSJ18o7lu5W1mUdLCeq3xeVOeXlLgg4p2 k9dRwr6qNPb1jo8NJfbfrlwg5kksW5Ii9l2twi0be3vZj+dN14tBZoHYJq0gQlFNvZ22 QP+v4d+fwERnE1PZskZI+bo6GwWtWwe4wFtQ/n+l8N0XHdsfg17fOZhCq6EElCLhosgr +VcA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678494208; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=3/u8rHQUeVKNiV3UckABDv1skeiiaOcFBmTXvpUl8gY=; b=HTiTpXlLmMdfoHhd3ZYHdv4LJZ6I5u9kNm98a57LtpzQ59YRVR9rtVsPsZpfRONMbw EfcfUA59AzpKTUuhMFVQIb3BTYdy+5UbPG3sd1tIPc4/j5EFVqNQkTxu62BC7JPupbAY C2Mvovfu1xAVovxKP6Pq4Wfe7R/HUhV2NUi+iCzoxA8deAwiOzCfzzMSmbm55LKUAKqt KOFWN0nEbuqURMZn3TXgnDfRMNVkoqn+u5UijIbAmV0gyJR4/5blxwmv+FKrT+waOxWX WdOmidXSzf0mWeaO53oXxYeoAIFRPOhs1brmZsNis0hoztOnQR+INAvf7KClxmywQ3EG +Hhg== X-Gm-Message-State: AO0yUKVorynk+yji6UhZqd9So3Q3giQAXMNoE38zQLnMwS24K95JZahB 6g9d4MezYiu/2RI/9MdbgsUivpBXbLs= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:903:26d6:b0:19b:fe3:c948 with SMTP id jg22-20020a17090326d600b0019b0fe3c948mr10129538plb.12.1678494208460; Fri, 10 Mar 2023 16:23:28 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 16:22:43 -0800 In-Reply-To: <20230311002258.852397-1-seanjc@google.com> Mime-Version: 1.0 References: <20230311002258.852397-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230311002258.852397-13-seanjc@google.com> Subject: [PATCH v2 12/27] KVM: x86/mmu: Don't bounce through page-track mechanism for guest PTEs From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Zhenyu Wang , Zhi Wang Cc: kvm@vger.kernel.org, intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Yan Zhao , Ben Gardon X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760029866349914826?= X-GMAIL-MSGID: =?utf-8?q?1760029866349914826?= Don't use the generic page-track mechanism to handle writes to guest PTEs in KVM's MMU. KVM's MMU needs access to information that should not be exposed to external page-track users, e.g. KVM needs (for some definitions of "need") the vCPU to query the current paging mode, whereas external users, i.e. KVMGT, have no ties to the current vCPU and so should never need the vCPU. Moving away from the page-track mechanism will allow dropping use of the page-track mechanism for KVM's own MMU, and will also allow simplifying and cleaning up the page-track APIs. Signed-off-by: Sean Christopherson Reviewed-by: Yan Zhao --- arch/x86/include/asm/kvm_host.h | 1 - arch/x86/kvm/mmu.h | 2 ++ arch/x86/kvm/mmu/mmu.c | 13 ++----------- arch/x86/kvm/mmu/page_track.c | 2 ++ 4 files changed, 6 insertions(+), 12 deletions(-) diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index 17281d6825c9..1a4225237564 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -1265,7 +1265,6 @@ struct kvm_arch { * create an NX huge page (without hanging the guest). */ struct list_head possible_nx_huge_pages; - struct kvm_page_track_notifier_node mmu_sp_tracker; struct kvm_page_track_notifier_head track_notifier_head; /* * Protects marking pages unsync during page faults, as TDP MMU page diff --git a/arch/x86/kvm/mmu.h b/arch/x86/kvm/mmu.h index 168c46fd8dd1..b8bde42f6037 100644 --- a/arch/x86/kvm/mmu.h +++ b/arch/x86/kvm/mmu.h @@ -119,6 +119,8 @@ void kvm_mmu_unload(struct kvm_vcpu *vcpu); void kvm_mmu_free_obsolete_roots(struct kvm_vcpu *vcpu); void kvm_mmu_sync_roots(struct kvm_vcpu *vcpu); void kvm_mmu_sync_prev_roots(struct kvm_vcpu *vcpu); +void kvm_mmu_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new, + int bytes); static inline int kvm_mmu_reload(struct kvm_vcpu *vcpu) { diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index 409dabec69df..4f2f83d8322e 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -5603,9 +5603,8 @@ static u64 *get_written_sptes(struct kvm_mmu_page *sp, gpa_t gpa, int *nspte) return spte; } -static void kvm_mmu_pte_write(struct kvm_vcpu *vcpu, gpa_t gpa, - const u8 *new, int bytes, - struct kvm_page_track_notifier_node *node) +void kvm_mmu_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new, + int bytes) { gfn_t gfn = gpa >> PAGE_SHIFT; struct kvm_mmu_page *sp; @@ -6088,7 +6087,6 @@ static bool kvm_has_zapped_obsolete_pages(struct kvm *kvm) int kvm_mmu_init_vm(struct kvm *kvm) { - struct kvm_page_track_notifier_node *node = &kvm->arch.mmu_sp_tracker; int r; INIT_LIST_HEAD(&kvm->arch.active_mmu_pages); @@ -6102,9 +6100,6 @@ int kvm_mmu_init_vm(struct kvm *kvm) return r; } - node->track_write = kvm_mmu_pte_write; - kvm_page_track_register_notifier(kvm, node); - kvm->arch.split_page_header_cache.kmem_cache = mmu_page_header_cache; kvm->arch.split_page_header_cache.gfp_zero = __GFP_ZERO; @@ -6125,10 +6120,6 @@ static void mmu_free_vm_memory_caches(struct kvm *kvm) void kvm_mmu_uninit_vm(struct kvm *kvm) { - struct kvm_page_track_notifier_node *node = &kvm->arch.mmu_sp_tracker; - - kvm_page_track_unregister_notifier(kvm, node); - if (tdp_mmu_enabled) kvm_mmu_uninit_tdp_mmu(kvm); diff --git a/arch/x86/kvm/mmu/page_track.c b/arch/x86/kvm/mmu/page_track.c index e739dcc3375c..f39f190ad4ae 100644 --- a/arch/x86/kvm/mmu/page_track.c +++ b/arch/x86/kvm/mmu/page_track.c @@ -274,6 +274,8 @@ void kvm_page_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new, if (n->track_write) n->track_write(vcpu, gpa, new, bytes, n); srcu_read_unlock(&head->track_srcu, idx); + + kvm_mmu_track_write(vcpu, gpa, new, bytes); } /* From patchwork Sat Mar 11 00:22:44 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67900 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp49331wrd; Fri, 10 Mar 2023 16:43:36 -0800 (PST) X-Google-Smtp-Source: AK7set9NV00IqsZLBGEGI/qDP4rwagCzMeIwp2hjJwxM7jENDWQ/usopXaAHENeNqkdxg/5SJdF+ X-Received: by 2002:a05:6a20:690e:b0:c7:651c:1bae with SMTP id q14-20020a056a20690e00b000c7651c1baemr21558312pzj.32.1678495415716; Fri, 10 Mar 2023 16:43:35 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678495415; cv=none; d=google.com; s=arc-20160816; b=qy6xK+/7U6xq2nVmuRmpaYQfCbjLvG4FpMxC3cOOHvee3QEtRFFlcZFUCzUjLIdhRx +8WTAUBAD+vwgWUnz4UA9xH3tr8vNfcLaL/dqLp1tyKX8meWokFfqYTCETQ8fzh2MORn SmeS34b6ck8fTXq2nU27KZ2rChq3yILaN9TXbQwN6gdcZ0VY/OLHFFY6MXnmrT5qXeUd 1IeGQd/GANby6hTaiIZSX/q3YI6f2T1Wj/xT4ei5BX2GnG1Bi7w8ARB64n87bTsGgIGC NIcy2lhAPBxUV4pXSTJD1Rdna/cD5tGaj4clhfvElliMfa3NYeSgqTdMvD4k+rVNnPIU yFwA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=mbfokw6SfssUbU6cRB8EBVuRgsuGh3GvzrnTHWP4v/w=; b=fV19MdMx71Fbjh87aXgfSSkHk3VeksAIwaLzfghG82XtO0KXLeyC5uXoZGwXrZMrXw +M1vhUTyWJOgGIZnVEunvkrowrd9tCltg4nwRAXzcqoPHt5+uFusB7gYMx0i+SdoZCAh yIedrRYw6os8XdNUV3/j94rRJWRNxMT0DeX/VxgRY0HsINfgv4PcUcFQoyK917Q9rYch bvPi0zBYqpzR4Rtk/fR8BxWUr8jPDetp/1xFgwnMPhtAGTa7OwbNnp3zgJ4gQwNol4NR 0ykq1N4vwVqG4S04V4jpFJIS7AxR6hS/WFcCtPZOUrYmwqibQCcyl08Q1Ys8TqW85Ie3 oYuw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=L+aPyQ9e; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id m1-20020a632601000000b004774a024588si1037215pgm.719.2023.03.10.16.43.20; Fri, 10 Mar 2023 16:43:35 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=L+aPyQ9e; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231183AbjCKAYl (ORCPT + 99 others); Fri, 10 Mar 2023 19:24:41 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47066 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231165AbjCKAYH (ORCPT ); Fri, 10 Mar 2023 19:24:07 -0500 Received: from mail-yb1-xb49.google.com (mail-yb1-xb49.google.com [IPv6:2607:f8b0:4864:20::b49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A318CC4885 for ; Fri, 10 Mar 2023 16:23:33 -0800 (PST) Received: by mail-yb1-xb49.google.com with SMTP id t25-20020a252d19000000b00b341ad1b626so1512438ybt.19 for ; Fri, 10 Mar 2023 16:23:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678494210; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=mbfokw6SfssUbU6cRB8EBVuRgsuGh3GvzrnTHWP4v/w=; b=L+aPyQ9eudQKqhuQmVhN78/Im8AKZDgw5zsVXO6h59EZ+tE2ci0NZC1fR42hBuBC5U jz/TIRY7hm98RuznxZdktcTuzYmihP5FVoky+f1Z8KvuM2vPWllzHD3UqlbDhV5qPHHl K6dpxv3FaVZz2McBCBpsOP4oR/X9iw6/UeVysx0E+Km1CDXR5ZlDJo5wxAfuzXFdV+XA FBDhZeVUhSLRyacD1Kr5BRnlYrxZ1kd2l+2TqrSKeQ2HwO0xpHRMLTajtmRuuXlhfaA7 t+VVXVGX6RZywNa33DcPA34DDD+vAO7xrBY6gsG5sPUka77r+y0WJ0QMXQ/ao7kfoWB/ 1bgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678494210; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=mbfokw6SfssUbU6cRB8EBVuRgsuGh3GvzrnTHWP4v/w=; b=NsUy7miMb8G01iDpNNq5qhesGzrifaKchofVl1yVp4LL/Pt/03EcBOOCVVCe39DWYB ADVXOB7ho1AdOiGmvVEeA5Jp1agvrYWe1ATgiiFM9tHfveveV9oDMYSKskduqDdcNghS 9Izb+NPaJCS/ItMAKgUg473UuooAFmFv2VLkWhiB2nlTP7MZS35R6UrX+P8xAWKmSc7f JjSaymUo2w2YXZ1ZhQWVYMZZPi7WSj0w20zY2fhNageHC4yUJQo6hOHzHS4KLNRfiA6F C/LDXQ5XC9l//nGZdqShZ7t3a5DFbFabP3LQsSzIzkk+80DKaPOTvJ6oxZEftdFYaGVE nO0w== X-Gm-Message-State: AO0yUKVTu3v+r5xMG9spsYqChTwVsNIs9v0VGWX6esM/Z9+rBtGFf1gN RNBt7/ZHIWNxyFLdPbT6JYegCkmq0vU= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a5b:2cc:0:b0:a02:a3a6:78fa with SMTP id h12-20020a5b02cc000000b00a02a3a678famr13313899ybp.12.1678494210465; Fri, 10 Mar 2023 16:23:30 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 16:22:44 -0800 In-Reply-To: <20230311002258.852397-1-seanjc@google.com> Mime-Version: 1.0 References: <20230311002258.852397-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230311002258.852397-14-seanjc@google.com> Subject: [PATCH v2 13/27] KVM: drm/i915/gvt: Drop @vcpu from KVM's ->track_write() hook From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Zhenyu Wang , Zhi Wang Cc: kvm@vger.kernel.org, intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Yan Zhao , Ben Gardon X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760030009077803128?= X-GMAIL-MSGID: =?utf-8?q?1760030009077803128?= Drop @vcpu from KVM's ->track_write() hook provided for external users of the page-track APIs now that KVM itself doesn't use the page-track mechanism. Signed-off-by: Sean Christopherson Reviewed-by: Yan Zhao --- arch/x86/include/asm/kvm_page_track.h | 5 ++--- arch/x86/kvm/mmu/page_track.c | 2 +- drivers/gpu/drm/i915/gvt/kvmgt.c | 10 ++++------ 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/arch/x86/include/asm/kvm_page_track.h b/arch/x86/include/asm/kvm_page_track.h index 3f72c7a172fc..0d65ae203fd6 100644 --- a/arch/x86/include/asm/kvm_page_track.h +++ b/arch/x86/include/asm/kvm_page_track.h @@ -26,14 +26,13 @@ struct kvm_page_track_notifier_node { * It is called when guest is writing the write-tracked page * and write emulation is finished at that time. * - * @vcpu: the vcpu where the write access happened. * @gpa: the physical address written by guest. * @new: the data was written to the address. * @bytes: the written length. * @node: this node */ - void (*track_write)(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new, - int bytes, struct kvm_page_track_notifier_node *node); + void (*track_write)(gpa_t gpa, const u8 *new, int bytes, + struct kvm_page_track_notifier_node *node); /* * It is called when memory slot is being moved or removed * users can drop write-protection for the pages in that memory slot diff --git a/arch/x86/kvm/mmu/page_track.c b/arch/x86/kvm/mmu/page_track.c index f39f190ad4ae..39a0863af8b4 100644 --- a/arch/x86/kvm/mmu/page_track.c +++ b/arch/x86/kvm/mmu/page_track.c @@ -272,7 +272,7 @@ void kvm_page_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new, hlist_for_each_entry_srcu(n, &head->track_notifier_list, node, srcu_read_lock_held(&head->track_srcu)) if (n->track_write) - n->track_write(vcpu, gpa, new, bytes, n); + n->track_write(gpa, new, bytes, n); srcu_read_unlock(&head->track_srcu, idx); kvm_mmu_track_write(vcpu, gpa, new, bytes); diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c index 9824d075562e..292750dc819f 100644 --- a/drivers/gpu/drm/i915/gvt/kvmgt.c +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c @@ -106,9 +106,8 @@ struct gvt_dma { #define vfio_dev_to_vgpu(vfio_dev) \ container_of((vfio_dev), struct intel_vgpu, vfio_device) -static void kvmgt_page_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, - const u8 *val, int len, - struct kvm_page_track_notifier_node *node); +static void kvmgt_page_track_write(gpa_t gpa, const u8 *val, int len, + struct kvm_page_track_notifier_node *node); static void kvmgt_page_track_flush_slot(struct kvm *kvm, struct kvm_memory_slot *slot, struct kvm_page_track_notifier_node *node); @@ -1617,9 +1616,8 @@ int intel_gvt_page_track_remove(struct intel_vgpu *info, u64 gfn) return 0; } -static void kvmgt_page_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, - const u8 *val, int len, - struct kvm_page_track_notifier_node *node) +static void kvmgt_page_track_write(gpa_t gpa, const u8 *val, int len, + struct kvm_page_track_notifier_node *node) { struct intel_vgpu *info = container_of(node, struct intel_vgpu, track_node); From patchwork Sat Mar 11 00:22:45 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67879 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp43825wrd; Fri, 10 Mar 2023 16:25:55 -0800 (PST) X-Google-Smtp-Source: AK7set+tK09XUB61Q+hy10egpp+vwj8gtyzonT55P0Ro0OHca4rTAonoNs9ttiAFTvyiqlRhKdLS X-Received: by 2002:a05:6a20:548b:b0:be:e450:69b3 with SMTP id i11-20020a056a20548b00b000bee45069b3mr34786295pzk.0.1678494355134; Fri, 10 Mar 2023 16:25:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678494355; cv=none; d=google.com; s=arc-20160816; b=ALocSu3odWKdl8Es9avNn0FnpDE+iIfnPG/PgCaUIeGnALFZ4+phwV95XHE/b6txlz nUlIeW3QR82Wan+wH7I5goAy47pIIi9ruttU84BhcBzEAwZYQbaVzimLftYjiqlAqUJg eDeKh5F+FOVhgacwYjKBbSdpzSV0FqmzPZ83gggOa8vwEpInBGgdO1GUuRVb8wEISXxP jf7zKqb50br4c5tO/4q3tmQxJUaCKnSk+Ch2RQMInudCcC8FBjKkpFIB70K/XBsOtOyN AnJAfsXCOsBHP105XgxIdPvVdJsWoxazYNz3UC4nV3oIt8ICbv+Em4xG7K0wmOwLi2c6 c90g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=Rm109LqJljTWMnqiCeQQyQd+NmHilpchibDoYyZB3Pk=; b=r7R6XSsdozenmMNiRzTOlZ1u//BJerO4flyeexLGlex3dxUCzAbmCxNw12JIAfV5Bm g+7ZWPBwdho0R4reFkj3FCijVIufeuctFr6pfKBZRsgTEnNX3hnvz45I5o4nm30j5Fna QljR566TPx9mSnkvg5kD38JuHqdAQbH8btjDuxQnfhhint4COs8lMAIr8g8TD0RdB2mg 6SsuQ5PTRMAEsAyHZHjPy6fKTjR/cb7z+WfKG6wTUwvE7ThGKM8gaoK9/DVOn/h72TD6 mlabHg4S1DnBiZUqbq0mQ70FcHNCLobvg8V20RHDAlrvOhe4bK+MJyXwR6Mfoz/kC4Yb qbCg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=nbQyCIoi; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id o9-20020a656149000000b004fb98a13f1csi953522pgv.140.2023.03.10.16.25.41; Fri, 10 Mar 2023 16:25:55 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=nbQyCIoi; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231232AbjCKAYn (ORCPT + 99 others); Fri, 10 Mar 2023 19:24:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47114 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231171AbjCKAYH (ORCPT ); Fri, 10 Mar 2023 19:24:07 -0500 Received: from mail-pf1-x449.google.com (mail-pf1-x449.google.com [IPv6:2607:f8b0:4864:20::449]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7B94180E16 for ; Fri, 10 Mar 2023 16:23:33 -0800 (PST) Received: by mail-pf1-x449.google.com with SMTP id bw25-20020a056a00409900b005a9d0e66a7aso3597648pfb.5 for ; Fri, 10 Mar 2023 16:23:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678494212; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=Rm109LqJljTWMnqiCeQQyQd+NmHilpchibDoYyZB3Pk=; b=nbQyCIoiLIM7RQJY0KwsZy4MzALtUvpTVM0wdA1nSuVn+9c9kcDfgfjPsaslp3h104 zCUflGcnq2a5vqfNqA7G619cjYvpnP0xZenQN8Zu1a1rSrPcdxhIboj4sIXYcbKgkKZF 1HiHk172uv/TS/YsLBJ8VPH5ev9KwCQ+n0xy/R2NBWQfRgme2yPjjL66yaKvoymjOp98 H7bh6xdjI+pIQvZVpqHMbBcMVNwAe8eRczAgZZ12yOdlAdRqTGG+BqDD+VS/2ZFU4HsK WCauxqGyQpSRdb6mw3BfyWNp7bQTtspy/V2CMSt8fyQjpFLp47jZ/M0grWgr3WRYJApx 659g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678494212; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=Rm109LqJljTWMnqiCeQQyQd+NmHilpchibDoYyZB3Pk=; b=Yr8DyAJd3A+994Glx/ExrF+7PxpZ9OI9wfIbRhbm1Sa+ya2KnUvORZ/8x/m9MYAtWN fXvHNdxqZgZZeGVCLvGbUCSF9jZxXNvuKDP0e9Mcbf9TKC7Wug6PULXkUdioNtnLV+rI Px+7wKQcEjtlSCOQwFr+ON5dHlRGkM6IOCekVYk55uthQBHIVNBYyw9XdVr+yzDyngcr saiwJuESuaOH4rAP+ri+JOHjrf3n6hTjI3rqg9mXZPCSAKG555UJ+IXaa6MHJNOYuXa/ w5qDGiujiTObtLOs5AiYNRnG5EKSW8bnpei3QdyE73xnNicaMF0l9sbdNXAB4KDRHCW/ wb2w== X-Gm-Message-State: AO0yUKU87tgJTz9XUHccgS+KSJOSUQB2IqX1Q1hdhNPe1Qu8mf9fAMM7 w1TAgx6Xq0i5BqbmPzvDWkhZarkQmHk= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a63:7515:0:b0:503:20b9:5d88 with SMTP id q21-20020a637515000000b0050320b95d88mr8959180pgc.4.1678494212241; Fri, 10 Mar 2023 16:23:32 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 16:22:45 -0800 In-Reply-To: <20230311002258.852397-1-seanjc@google.com> Mime-Version: 1.0 References: <20230311002258.852397-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230311002258.852397-15-seanjc@google.com> Subject: [PATCH v2 14/27] KVM: x86: Reject memslot MOVE operations if KVMGT is attached From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Zhenyu Wang , Zhi Wang Cc: kvm@vger.kernel.org, intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Yan Zhao , Ben Gardon X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760028897029691031?= X-GMAIL-MSGID: =?utf-8?q?1760028897029691031?= Disallow moving memslots if the VM has external page-track users, i.e. if KVMGT is being used to expose a virtual GPU to the guest, as KVM doesn't correctly handle moving memory regions. Note, this is potential ABI breakage! E.g. userspace could move regions that aren't shadowed by KVMGT without harming the guest. However, the only known user of KVMGT is QEMU, and QEMU doesn't move generic memory regions. KVM's own support for moving memory regions was also broken for multiple years (albeit for an edge case, but arguably moving RAM is itself an edge case), e.g. see commit edd4fa37baa6 ("KVM: x86: Allocate new rmap and large page tracking when moving memslot"). Signed-off-by: Sean Christopherson Reviewed-by: Yan Zhao --- arch/x86/include/asm/kvm_page_track.h | 3 +++ arch/x86/kvm/mmu/page_track.c | 5 +++++ arch/x86/kvm/x86.c | 7 +++++++ 3 files changed, 15 insertions(+) diff --git a/arch/x86/include/asm/kvm_page_track.h b/arch/x86/include/asm/kvm_page_track.h index 0d65ae203fd6..6a287bcbe8a9 100644 --- a/arch/x86/include/asm/kvm_page_track.h +++ b/arch/x86/include/asm/kvm_page_track.h @@ -77,4 +77,7 @@ kvm_page_track_unregister_notifier(struct kvm *kvm, void kvm_page_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new, int bytes); void kvm_page_track_flush_slot(struct kvm *kvm, struct kvm_memory_slot *slot); + +bool kvm_page_track_has_external_user(struct kvm *kvm); + #endif diff --git a/arch/x86/kvm/mmu/page_track.c b/arch/x86/kvm/mmu/page_track.c index 39a0863af8b4..1cfc0a0ccc23 100644 --- a/arch/x86/kvm/mmu/page_track.c +++ b/arch/x86/kvm/mmu/page_track.c @@ -321,3 +321,8 @@ enum pg_level kvm_page_track_max_mapping_level(struct kvm *kvm, gfn_t gfn, return max_level; } EXPORT_SYMBOL_GPL(kvm_page_track_max_mapping_level); + +bool kvm_page_track_has_external_user(struct kvm *kvm) +{ + return hlist_empty(&kvm->arch.track_notifier_head.track_notifier_list); +} diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 29dd6c97d145..47ac9291cd43 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -12484,6 +12484,13 @@ int kvm_arch_prepare_memory_region(struct kvm *kvm, struct kvm_memory_slot *new, enum kvm_mr_change change) { + /* + * KVM doesn't support moving memslots when there are external page + * trackers attached to the VM, i.e. if KVMGT is in use. + */ + if (change == KVM_MR_MOVE && kvm_page_track_has_external_user(kvm)) + return -EINVAL; + if (change == KVM_MR_CREATE || change == KVM_MR_MOVE) { if ((new->base_gfn + new->npages - 1) > kvm_mmu_max_gfn()) return -EINVAL; From patchwork Sat Mar 11 00:22:46 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67880 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp43890wrd; Fri, 10 Mar 2023 16:26:06 -0800 (PST) X-Google-Smtp-Source: AK7set8qPorsN2WKgUXo/ZD3gPs5EUeR0gYEih3aW09iv/7JrMotH8xuxIkRBrBszWP1/DOI+JqK X-Received: by 2002:a17:902:aa02:b0:19a:839d:b682 with SMTP id be2-20020a170902aa0200b0019a839db682mr24499493plb.17.1678494365962; Fri, 10 Mar 2023 16:26:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678494365; cv=none; d=google.com; s=arc-20160816; b=A7KyxNr6W2BzAzBrQ9KCWKskWfrV+oD/k+0ftWHTexLiD5NjVlRqg1Y7EExA9BZFzC 8h+aP7PFLHxMklKGiOeozOnFSb2lcIIN/N8az0uMToxCiPdxdonHlOmYhrYhUffwKAVZ TQ+u8OuzxsEbnccmGDq6IWw9mEpIAvFCky69LYbpUKAdG2LydBtXe2pKuhUsuw2sRnwH VtXj0/7SV6GB3Kk68mllGApoU3vYDyi3lhMrNaFjMQAGdU/HkVk6mJkPVkdABkinM5cP QUqbgFEeMAWCVbaSTDJrBUewOGUyTcQwpbl1uXHTtyn/e9UNd+5rVmuK0yC7X6GCA6YL YzUg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=ESyGipRYk4Ln/Kp6qC+rdgnoNy41fSsqxhODjzs0Phg=; b=Gveb9qJHkSRV0RLX/VTk2FJ/cq0cn3gpqpGVPj1MeXW197v5ft4Uwj7ANuSww8OCpt +MTk+SXwqXhwYag72upyLmPi3SzyaRbT+OWDioCqP9XHgJf9OoDrhImliyhBJgoIipKa yqUSWU7gpZXnAqnDsDxFhM5VjZvCh+bFivsOrPZ+2jkkbGQNoXkH5+ECTELIxvFa6NaH CzssKwgy0dKu3y2nqLOnDI/FEY25eBoGFVtdLwztxK8wWcUq4LMK5ngZJS9abJ6V2TOs c7fZNu6PSwwNWN2UHsS4STC0J5Laj5O1o6sjpGXfeQpDFCPQOExUQWXEUgfBGD9mwWzQ Pc8Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=nrjkFrHs; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id f12-20020a170902ce8c00b0019e88c42997si1220403plg.104.2023.03.10.16.25.51; Fri, 10 Mar 2023 16:26:05 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=nrjkFrHs; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230427AbjCKAZB (ORCPT + 99 others); Fri, 10 Mar 2023 19:25:01 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44982 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231349AbjCKAYb (ORCPT ); Fri, 10 Mar 2023 19:24:31 -0500 Received: from mail-pf1-x449.google.com (mail-pf1-x449.google.com [IPv6:2607:f8b0:4864:20::449]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 979C3111B2A for ; Fri, 10 Mar 2023 16:23:47 -0800 (PST) Received: by mail-pf1-x449.google.com with SMTP id bx9-20020a056a00428900b005f077bc6e5eso3615753pfb.16 for ; Fri, 10 Mar 2023 16:23:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678494214; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=ESyGipRYk4Ln/Kp6qC+rdgnoNy41fSsqxhODjzs0Phg=; b=nrjkFrHs9nfahticnmpPuzM1CYGMtDvBGeJ80H++4AvdgBokB4ZvMSpboVXR6DnKwz rIrMxNOEpTJIbuDC451LiJD1sJD3A8vuRizVcYrS9DGK3p2ELkmjCt5Z04Ew7mYeQG99 abO3WqdodG/z7VlBDvMGTwDpoYnVcdAyUjfitCfgT/YOhex7js+4OGHeNDmUtaacWeFR lakQe7TmqrZXF1uwepDOEl2OXS6bzVd4Nf2hJUarjHWDJiq3nKrS93ZACBW4D6ZXsdik ggHfLj17lKdB6jzVaXg1+OIqfai9+ixjDr2YJPEQHHKfDgh2ts89Xy1knXUupwP/3zLt MYWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678494214; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=ESyGipRYk4Ln/Kp6qC+rdgnoNy41fSsqxhODjzs0Phg=; b=Ci3cmvqgI81F6voOjgnoa0C3vaU9MCk+eTrmo+Pun+Zek/PonA6qyN3+ARgMOnZB6c xW94hepFcyZ8qp3451+T+ML52We6LxFEHahLg31ldRhLQfCNJH9PIvwEknOTEr6IbK9e sD5bI2CEnk2IVAXCmKSEYimXU4NcJvzbb8lzzAxbO4Beyh60H9abzlvIyJIGqt4Lip/s CVk1SIY4lX42tRtBWO8Mm08N0O+KtsxVkOaaIZWsnUYBpvKpkHixP1RRZkGILaNyeFFt /sMFF/Pz7hLTEnRZht27MedfKkQbrH6dUu10sxTFHwXSqEADa8rcpMQyW8H4LJvCpWHy PV3g== X-Gm-Message-State: AO0yUKV3tpuHSvYAPGbmZW4PGRdY677l6x2qkAwZx98FVAxgA9MQa6E1 1qq9Pdt/gNu6ddzl/IxYXPIgmPl+2Og= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:90b:1088:b0:237:6178:297d with SMTP id gj8-20020a17090b108800b002376178297dmr10196936pjb.2.1678494214249; Fri, 10 Mar 2023 16:23:34 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 16:22:46 -0800 In-Reply-To: <20230311002258.852397-1-seanjc@google.com> Mime-Version: 1.0 References: <20230311002258.852397-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230311002258.852397-16-seanjc@google.com> Subject: [PATCH v2 15/27] drm/i915/gvt: Don't bother removing write-protection on to-be-deleted slot From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Zhenyu Wang , Zhi Wang Cc: kvm@vger.kernel.org, intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Yan Zhao , Ben Gardon X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760028908167614137?= X-GMAIL-MSGID: =?utf-8?q?1760028908167614137?= When handling a slot "flush", don't call back into KVM to drop write protection for gfns in the slot. Now that KVM rejects attempts to move memory slots while KVMGT is attached, the only time a slot is "flushed" is when it's being removed, i.e. the memslot and all its write-tracking metadata is about to be deleted. Signed-off-by: Sean Christopherson Reviewed-by: Yan Zhao --- drivers/gpu/drm/i915/gvt/kvmgt.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c index 292750dc819f..577712ea4893 100644 --- a/drivers/gpu/drm/i915/gvt/kvmgt.c +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c @@ -1644,14 +1644,8 @@ static void kvmgt_page_track_flush_slot(struct kvm *kvm, for (i = 0; i < slot->npages; i++) { gfn = slot->base_gfn + i; - if (kvmgt_gfn_is_write_protected(info, gfn)) { - write_lock(&kvm->mmu_lock); - kvm_slot_page_track_remove_page(kvm, slot, gfn, - KVM_PAGE_TRACK_WRITE); - write_unlock(&kvm->mmu_lock); - + if (kvmgt_gfn_is_write_protected(info, gfn)) kvmgt_protect_table_del(info, gfn); - } } mutex_unlock(&info->vgpu_lock); } From patchwork Sat Mar 11 00:22:47 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67885 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp48289wrd; Fri, 10 Mar 2023 16:40:24 -0800 (PST) X-Google-Smtp-Source: AK7set+rviQXqWS8GMJbzu5jPdTIIzCkkSfDvzpqsrWmEu4sTO3rkfB9qLoyycxr55LLWOgEfI17 X-Received: by 2002:a17:903:32c7:b0:19c:be49:48e1 with SMTP id i7-20020a17090332c700b0019cbe4948e1mr32604944plr.7.1678495224664; Fri, 10 Mar 2023 16:40:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678495224; cv=none; d=google.com; s=arc-20160816; b=xXOFjpNAMY9hizrJk3N8wHXn7bsVFwglG9pMt0+26xCl+Nf+2qGHLxLCLr/mKfHJik ha5Hpbt+l0tWr41ZxnXHsIEA3R7yibnXTe4q6/IwjpFFe5/MxfRi3eD8slx4JGFwWSlG Nn9KB6nyizUwNd0VxIDV9nooj7jFQBtFT10M3uDX7jQX4HXYqLUEksKHARjrf6xyY645 Xyvt+eJul4gFCT6l0EncTAHDlQGwmYUJv5IMb7MWEUP56h/gmUcPcoaVxV1eQaE9xDkQ V5aLnWjmZ1nKddeClsCqk9FbEYqYnwVIjJW3oqcH0YVsGM+RQ+xfjJyMK9NbqjOxZA2z TrUA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=cBGww55IndFADhIi2gRbx4Eeimb9jS14b01/bq24sKw=; b=z7AriO42qIAEjXlMskisrpLV1qvK6FO/8x1jzC2RLosBlVVec7fCs9azaDviLDuLyu 9JdpSXXaVWpN1OqEg3kpQGKSJ0/4bIT2nHuN7+ZmjOS0Invd8ozF2+x5Naf8ci1qfyfw 3JNVJKOMfpmpZE6Mhsg+0lA0NGw20uZlhF7AOl+nq6RI9DYge97Q8mZo8LTf/H+EacGw HgaUKuSs6iGLFfvPTAs4WvQz9qH6fz+MnqUZuYNf88EWt5/PBywJqYxfOZcskOzu0sJk iIHoPVY8RESL4uSoVkoBb/onrxklwYR0V4mkhN9ZpQiGUBGyR7fThmTkr8AMBITDOGSU OSMw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=J8wTjmxd; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id v14-20020a1709028d8e00b0019cc4426180si1168421plo.240.2023.03.10.16.40.04; Fri, 10 Mar 2023 16:40:24 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=J8wTjmxd; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231434AbjCKAYr (ORCPT + 99 others); Fri, 10 Mar 2023 19:24:47 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47268 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231239AbjCKAYK (ORCPT ); Fri, 10 Mar 2023 19:24:10 -0500 Received: from mail-pf1-x449.google.com (mail-pf1-x449.google.com [IPv6:2607:f8b0:4864:20::449]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4C1DF6EBBF for ; Fri, 10 Mar 2023 16:23:36 -0800 (PST) Received: by mail-pf1-x449.google.com with SMTP id y35-20020a056a00182300b005e8e2c6afe2so3632250pfa.12 for ; Fri, 10 Mar 2023 16:23:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678494216; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=cBGww55IndFADhIi2gRbx4Eeimb9jS14b01/bq24sKw=; b=J8wTjmxdI+plA71tRLSg8eCh1bN9Lz2/OIIgJap9P5jXtPhLryn2LEF1p1sc9tZjU8 4vS874K7XciuSgn0eiec1PcGsdqql108dxgZeKAqbXcPlDzxFFKAJemxT3cn0ycx4F8J t9L+hetSFEeVGYscMsUb5ZzpF9QwA35B2UKLfa4mhSm+ngdPkxKQq0JY1bx+ciShDMlC Wp/2I4IFek/KNChmcVOW31RdlZoZ7D5sM4+f0EEkuryJ+yNzTa5gnkVLftItV4cHkmjf XWuCayNALVHuXnaUNaoruV7E/vd1uL0dFBcXHDoSaZL9BfdzQ8jny/fVecLu7+dfQzI/ oomg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678494216; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=cBGww55IndFADhIi2gRbx4Eeimb9jS14b01/bq24sKw=; b=Mc7dhh7SaTGdu48LAg1dHVy9ipi3IAtONvFlXxNBuZgH0qQ/QXn3rRNSl0C34DIVRh qBB9tbEj8J+kuk6IQZSKq7DGroz0642mdFKLbe5ptGv92m7dR/5C9fAK7kX4cA5SHcod 7B2/yzMq6CPQxVpH+UZXQtyBU0L0xa8BAmHUop7OQQvez+PoPhtlpQ62csnIvfVW8m1C rgmcYxJvQcVjKq/fgwf2TQkJ+5tW4B9N6aYlydHnQaWf9JzKWiBEUk+zSt8WA79fQJZT i9Ld4kPOQJMHpFFRUY/N7/Dh4NEvZDmRdyEy7WMIEw5PXZXD1fMqAwxv5v2TBqVBgeZR osPA== X-Gm-Message-State: AO0yUKVSlnX6f2l1yqDHVPOx0LQm50Wlg9yjQq7dRmn+SSK0JJq4iSzR 8Kr01ZvXly4208EiyGzyeBfjkP4SKxE= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:90a:a23:b0:23b:353a:2e24 with SMTP id o32-20020a17090a0a2300b0023b353a2e24mr78453pjo.5.1678494216070; Fri, 10 Mar 2023 16:23:36 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 16:22:47 -0800 In-Reply-To: <20230311002258.852397-1-seanjc@google.com> Mime-Version: 1.0 References: <20230311002258.852397-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230311002258.852397-17-seanjc@google.com> Subject: [PATCH v2 16/27] KVM: x86: Add a new page-track hook to handle memslot deletion From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Zhenyu Wang , Zhi Wang Cc: kvm@vger.kernel.org, intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Yan Zhao , Ben Gardon X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760029808737889951?= X-GMAIL-MSGID: =?utf-8?q?1760029808737889951?= From: Yan Zhao Add a new page-track hook, track_remove_region(), that is called when a memslot DELETE operation is about to be committed. The "remove" hook will be used by KVMGT and will effectively replace the existing track_flush_slot() altogether now that KVM itself doesn't rely on the "flush" hook either. The "flush" hook is flawed as it's invoked before the memslot operation is guaranteed to succeed, i.e. KVM might ultimately keep the existing memslot without notifying external page track users, a.k.a. KVMGT. In practice, this can't currently happen on x86, but there are no guarantees that won't change in the future, not to mention that "flush" does a very poor job of describing what is happening. Pass in the gfn+nr_pages instead of the slot itself so external users, i.e. KVMGT, don't need to exposed to KVM internals (memslots). This will help set the stage for additional cleanups to the page-track APIs. Cc: Zhenyu Wang Signed-off-by: Yan Zhao Co-developed-by: Sean Christopherson Signed-off-by: Sean Christopherson --- arch/x86/include/asm/kvm_page_track.h | 12 ++++++++++++ arch/x86/kvm/mmu/page_track.c | 23 +++++++++++++++++++++++ arch/x86/kvm/x86.c | 3 +++ 3 files changed, 38 insertions(+) diff --git a/arch/x86/include/asm/kvm_page_track.h b/arch/x86/include/asm/kvm_page_track.h index 6a287bcbe8a9..152c5e7d7868 100644 --- a/arch/x86/include/asm/kvm_page_track.h +++ b/arch/x86/include/asm/kvm_page_track.h @@ -43,6 +43,17 @@ struct kvm_page_track_notifier_node { */ void (*track_flush_slot)(struct kvm *kvm, struct kvm_memory_slot *slot, struct kvm_page_track_notifier_node *node); + + /* + * Invoked when a memory region is removed from the guest. Or in KVM + * terms, when a memslot is deleted. + * + * @gfn: base gfn of the region being removed + * @nr_pages: number of pages in the to-be-removed region + * @node: this node + */ + void (*track_remove_region)(gfn_t gfn, unsigned long nr_pages, + struct kvm_page_track_notifier_node *node); }; int kvm_page_track_init(struct kvm *kvm); @@ -77,6 +88,7 @@ kvm_page_track_unregister_notifier(struct kvm *kvm, void kvm_page_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new, int bytes); void kvm_page_track_flush_slot(struct kvm *kvm, struct kvm_memory_slot *slot); +void kvm_page_track_delete_slot(struct kvm *kvm, struct kvm_memory_slot *slot); bool kvm_page_track_has_external_user(struct kvm *kvm); diff --git a/arch/x86/kvm/mmu/page_track.c b/arch/x86/kvm/mmu/page_track.c index 1cfc0a0ccc23..d4a8a995276a 100644 --- a/arch/x86/kvm/mmu/page_track.c +++ b/arch/x86/kvm/mmu/page_track.c @@ -304,6 +304,29 @@ void kvm_page_track_flush_slot(struct kvm *kvm, struct kvm_memory_slot *slot) srcu_read_unlock(&head->track_srcu, idx); } +/* + * Notify external page track nodes that a memory region is being removed from + * the VM, e.g. so that users can free any associated metadata. + */ +void kvm_page_track_delete_slot(struct kvm *kvm, struct kvm_memory_slot *slot) +{ + struct kvm_page_track_notifier_head *head; + struct kvm_page_track_notifier_node *n; + int idx; + + head = &kvm->arch.track_notifier_head; + + if (hlist_empty(&head->track_notifier_list)) + return; + + idx = srcu_read_lock(&head->track_srcu); + hlist_for_each_entry_srcu(n, &head->track_notifier_list, node, + srcu_read_lock_held(&head->track_srcu)) + if (n->track_remove_region) + n->track_remove_region(slot->base_gfn, slot->npages, n); + srcu_read_unlock(&head->track_srcu, idx); +} + enum pg_level kvm_page_track_max_mapping_level(struct kvm *kvm, gfn_t gfn, enum pg_level max_level) { diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 47ac9291cd43..0da5ff007d20 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -12645,6 +12645,9 @@ void kvm_arch_commit_memory_region(struct kvm *kvm, const struct kvm_memory_slot *new, enum kvm_mr_change change) { + if (change == KVM_MR_DELETE) + kvm_page_track_delete_slot(kvm, old); + if (!kvm->arch.n_requested_mmu_pages && (change == KVM_MR_CREATE || change == KVM_MR_DELETE)) { unsigned long nr_mmu_pages; From patchwork Sat Mar 11 00:22:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67894 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp48766wrd; Fri, 10 Mar 2023 16:41:59 -0800 (PST) X-Google-Smtp-Source: AK7set/YDpC+PACCFcVi0onlMocn3/h5SmVsJXUpH7xOYCAfujVhBM1e8i2n4HjD0sR+NVAwXF4Q X-Received: by 2002:a17:902:c946:b0:19c:1433:5fba with SMTP id i6-20020a170902c94600b0019c14335fbamr32071783pla.0.1678495319549; Fri, 10 Mar 2023 16:41:59 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678495319; cv=none; d=google.com; s=arc-20160816; b=y8y3gdYwMVd9AutXSADYYabsD6FB251toF3Eh2rioDeEw2ZqpbnzZEZg+5MIEdfD/q nf3gnADUjFtheHCEYV+SEPwvGPsb4ux91auc3wzGiM3oK3mkza7mTIl58q+wZVCZTzNb aZItOJcBibhudfhGVbmpbMTy8kj+Z67ZewsIpWKGHbaprSkXnKcD6AZNCBlTqg3kJJI4 2KH1MMdGK2jKxiUymtKCpMzS6YAbGBQeVY9ZIsjsUxg+zR5UMbm695+cT8b5yXpx0Lwo xzRdtN+P3WwIIK/TkuczvFTv+wmNBBhPBWOQs12VoEWXtMCTGh0EY5tOL8PMvp2l5tjf 4TjQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=OMGdyparKm8+Gefw73vC5jleoqDZScQomW9SzOoSMJg=; b=d/ThPdzxlndzjDlgOmnfDJVAaC4M1cQY7SfA5tDy8153FSwkqKJFqPVY6Kb8CoLOvJ ixLcGgyP4Owchj8Aa5gt4vHIwFN+Km/7M9D9XCWo7jf/U+tM4iBb3WD4raGeS4kgmp+Q URvHXVCA7X/BFMNcLPckUq6wQXz0NEfCA185LLTIdnD4ZNRs5bz26bG6SYlrQuxMGI26 a2mJygBUMoYyCuJIL9k3k9FPRqR5yvFK5CMg7zIzRiLfIpleZLiuCqSg6rG19jxZiTrG Ct/PIc43GR7dbJz/JZQnZBl/g/Rm5d93NRbIMcV5BDzt1eOAetHzfv4+gsPf6NWm3zQn 3etA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b="ajb/7CAd"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id w1-20020a631601000000b00502d6998a4asi944560pgl.458.2023.03.10.16.41.45; Fri, 10 Mar 2023 16:41:59 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b="ajb/7CAd"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230513AbjCKAZN (ORCPT + 99 others); Fri, 10 Mar 2023 19:25:13 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45062 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230469AbjCKAYe (ORCPT ); Fri, 10 Mar 2023 19:24:34 -0500 Received: from mail-pj1-x104a.google.com (mail-pj1-x104a.google.com [IPv6:2607:f8b0:4864:20::104a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 23D2C134AEE for ; Fri, 10 Mar 2023 16:23:51 -0800 (PST) Received: by mail-pj1-x104a.google.com with SMTP id q61-20020a17090a1b4300b00237d2fb8400so5067411pjq.0 for ; Fri, 10 Mar 2023 16:23:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678494218; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=OMGdyparKm8+Gefw73vC5jleoqDZScQomW9SzOoSMJg=; b=ajb/7CAdzoT35PUWdYahi131IY8cxIXYUmWbU3wxwnKIBxxsHK89VejSvnX9gPFXKV 8T8M2MQ5qLFEJwFF7065/DtXjrWK5KDid68DBsbQqdbuHpDsBapRoTQnssTg9iU7v9aO W3O661JIaer2LspHtmzrEw/PzdpLM0tWNomDVlVvK3UMOXkliymk4EGDN1m1+ZzJbIjo z0JXfNMR+7wnIFuzi/4ZXa9UxnYm0l+lrGMAJWIXD0F1irQaKal08+zi3JQ1zRDeUz75 gC+HwThfWZZ7qParKjPirjREefLcpYQcsbDTVSHvU3UunCBdpe0aH1RzH5c9Fl9Suirg 0Tjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678494218; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=OMGdyparKm8+Gefw73vC5jleoqDZScQomW9SzOoSMJg=; b=p3fQmHjP74v1CKLwS5Ilsi+zwdtwCt+CBqUQSEg8PPK5EknQNAjobpFmrxbG8haufV BICELa3d+Z3qX1KsiZoaU/7g+Lz3uSf8VPcRrdeaNYPl+G+E0uDvJMeUmE7sUcsxOnjo 46OoKuWuVEML1I4xbLCEvyHs5Xyu8g/OALPwqWr0hHKAFkdPRtcwpomzpEGzIBOLMm+i OR2/XXzLKlzg5wHpvQLMr0iw/ep58AhDylu67eaT4aRd7RLBD6DyfhKPcBq1YRl49y7M R2P4yyFtCw9nvia03S25mCoI+oLqxuLfw+1hjoZY7nwCiW4zyHrClE67Fq46iiglEr1A 3zRw== X-Gm-Message-State: AO0yUKUQA8UAXK46BWv/9My+PyxA4/3wOkRMVFtK3oepgI6yQSztmnXv x5PpWeJgWMkQLbw6JOsL1y9hEeDnoAo= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a63:f543:0:b0:4fb:9902:fc4a with SMTP id e3-20020a63f543000000b004fb9902fc4amr9411181pgk.10.1678494217911; Fri, 10 Mar 2023 16:23:37 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 16:22:48 -0800 In-Reply-To: <20230311002258.852397-1-seanjc@google.com> Mime-Version: 1.0 References: <20230311002258.852397-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230311002258.852397-18-seanjc@google.com> Subject: [PATCH v2 17/27] drm/i915/gvt: switch from ->track_flush_slot() to ->track_remove_region() From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Zhenyu Wang , Zhi Wang Cc: kvm@vger.kernel.org, intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Yan Zhao , Ben Gardon X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760029908111012746?= X-GMAIL-MSGID: =?utf-8?q?1760029908111012746?= From: Yan Zhao Switch from the poorly named and flawed ->track_flush_slot() to the newly introduced ->track_remove_region(). From KVMGT's perspective, the two hooks are functionally equivalent, the only difference being that ->track_remove_region() is called only when KVM is 100% certain the memory region will be removed, i.e. is invoked slightly later in KVM's memslot modification flow. Cc: Zhenyu Wang Suggested-by: Sean Christopherson Signed-off-by: Yan Zhao [sean: handle name change, massage changelog, rebase] Signed-off-by: Sean Christopherson Tested-by: Yan Zhao --- drivers/gpu/drm/i915/gvt/kvmgt.c | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c index 577712ea4893..9f188b6c3edf 100644 --- a/drivers/gpu/drm/i915/gvt/kvmgt.c +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c @@ -108,9 +108,8 @@ struct gvt_dma { static void kvmgt_page_track_write(gpa_t gpa, const u8 *val, int len, struct kvm_page_track_notifier_node *node); -static void kvmgt_page_track_flush_slot(struct kvm *kvm, - struct kvm_memory_slot *slot, - struct kvm_page_track_notifier_node *node); +static void kvmgt_page_track_remove_region(gfn_t gfn, unsigned long nr_pages, + struct kvm_page_track_notifier_node *node); static ssize_t intel_vgpu_show_description(struct mdev_type *mtype, char *buf) { @@ -680,7 +679,7 @@ static int intel_vgpu_open_device(struct vfio_device *vfio_dev) return -EEXIST; vgpu->track_node.track_write = kvmgt_page_track_write; - vgpu->track_node.track_flush_slot = kvmgt_page_track_flush_slot; + vgpu->track_node.track_remove_region = kvmgt_page_track_remove_region; kvm_get_kvm(vgpu->vfio_device.kvm); kvm_page_track_register_notifier(vgpu->vfio_device.kvm, &vgpu->track_node); @@ -1631,22 +1630,20 @@ static void kvmgt_page_track_write(gpa_t gpa, const u8 *val, int len, mutex_unlock(&info->vgpu_lock); } -static void kvmgt_page_track_flush_slot(struct kvm *kvm, - struct kvm_memory_slot *slot, - struct kvm_page_track_notifier_node *node) +static void kvmgt_page_track_remove_region(gfn_t gfn, unsigned long nr_pages, + struct kvm_page_track_notifier_node *node) { unsigned long i; - gfn_t gfn; struct intel_vgpu *info = container_of(node, struct intel_vgpu, track_node); mutex_lock(&info->vgpu_lock); - for (i = 0; i < slot->npages; i++) { - gfn = slot->base_gfn + i; - if (kvmgt_gfn_is_write_protected(info, gfn)) - kvmgt_protect_table_del(info, gfn); + for (i = 0; i < nr_pages; i++) { + if (kvmgt_gfn_is_write_protected(info, gfn + i)) + kvmgt_protect_table_del(info, gfn + i); } + mutex_unlock(&info->vgpu_lock); } From patchwork Sat Mar 11 00:22:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67890 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp48601wrd; Fri, 10 Mar 2023 16:41:26 -0800 (PST) X-Google-Smtp-Source: AK7set9wm/bU8MbVF6wL09xYxvqUDqHF8vO5kJudXY/UOLj+3M4QsLqGGGNB/SuHemWBuiHLQxQL X-Received: by 2002:a17:902:e54a:b0:19e:8bfe:7d79 with SMTP id n10-20020a170902e54a00b0019e8bfe7d79mr30567412plf.1.1678495286264; Fri, 10 Mar 2023 16:41:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678495286; cv=none; d=google.com; s=arc-20160816; b=uk2medq6fk+eox1NVdTk4ofgwLTTIhhOF5+FJQqRzTfbMYSY/QiK5Vo9Xtt5za/G1D /ad6tOu1xv/Va2z3DqNSR3zwI+TADwZpfMCqnbzsv0dCI4f9zMyQEF57I5Om95cLNJUZ SnRvxAomTOQM+dJtc939Kb/Ak5hSVRE9FN7SiGIbrxrpiHW0ApV9kmT+N+LYgC0Fw8oQ U7juPQ5kDOJJJZcu+PVAijzGYFLPZ6j6tczrFpF17ECkKGrjxoXboHlnDJ9XBmk412Mc yLIBooQID11FEAsuOX5r2GJf70wbJC5QNLxEUCJLyiFO+rMKr1gxQ5mBjE1PH/CdcOIB xrbg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=UJLL0EPUo19me5J0i4EMPHQADwiwXxBwpAy+HnKKqJM=; b=S29TEnNO8sR+ugeZk+aIY1s1Z17cX56bt35iSmNmLtZsWDYE6ZQEyFfmDWbnvBG3B8 /FwqITIaZZo+Ul54YZ8LE1hmcwUCYc0TLH5QNhMqIiPvgXSUg3IAXwxBt2Y8cC/P8Emi Rmc101/yhu1qItnyzdLtP7NWQnYMC9ELeCLkjngo/FHGVW56QeTzhCnB+4XAncN7TV2S lQJM2IljEALHaKi0Xm52g5wmSgV1/oZ9hMqVOyGbX9+uFqozA//4OAqn0XJ44wIevpk7 27Dps7ODsHivtqjItVnO1oJGK+utrTZR+i5qiMRF2zOnB2xHg5EoNWjwN4jT0NUFFEUK wPQg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=Ezz+fnDW; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id r7-20020a170902be0700b0019ab692fc8fsi1046309pls.612.2023.03.10.16.41.11; Fri, 10 Mar 2023 16:41:26 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=Ezz+fnDW; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231584AbjCKAZU (ORCPT + 99 others); Fri, 10 Mar 2023 19:25:20 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47114 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231166AbjCKAYk (ORCPT ); Fri, 10 Mar 2023 19:24:40 -0500 Received: from mail-pl1-x64a.google.com (mail-pl1-x64a.google.com [IPv6:2607:f8b0:4864:20::64a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 43A4713EBAB for ; Fri, 10 Mar 2023 16:23:54 -0800 (PST) Received: by mail-pl1-x64a.google.com with SMTP id t24-20020a1709028c9800b0019eaa064a51so3640654plo.10 for ; Fri, 10 Mar 2023 16:23:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678494220; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=UJLL0EPUo19me5J0i4EMPHQADwiwXxBwpAy+HnKKqJM=; b=Ezz+fnDWWlBK70CA+7XZnivF8Z50Oo2xZVtUDsT+vPhVst1blCQstri3YU291MrGCd /gIJe4EdZVS2uXwFfhgIdnLH81FvnSdDh9ZOO2wwTY94LJfODrVCfdn5tHlyoc3wozDg DEMhqXCb5vWfrRk8d+aiFLTFqnF64CWPV/X9jcMymnFIgXu/w+WhD9iUivEV5M8xAwDJ WB2G3R1UU7dqnh10DoPBAm5TruGVVgEhIWo5jhXguMT++g5lloBe+oip6RCzH6WDEEva eaaN+vYVq0x2mhYositDUR3O8N2/sjmHQuoCbcFN6jMXtHvoYYojB7nK7rAoEpe7EL5C 8JMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678494220; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=UJLL0EPUo19me5J0i4EMPHQADwiwXxBwpAy+HnKKqJM=; b=B+SE3RLwHtO/ZTd8ZTVzCxZpe0A3vtuQeXM0W0MdfIFLySjBqNwg/GQd4yRwJeaaT5 T5ZO+wzj0o6jr0aRpvgzb8QNiL8a9dAGfELV2WsFqX2bWsSEmB8wHvBWe4V+rySMWeMJ 6ffYz3JVCeRILmpNRwNvVJEwaKjeChN/ypM8MqlIqxKpJaaAn+lGDISbupulddJxp73y qWwEsQTXgdcIv72vJ5zw8X1fuYcG8Qa8vg1wLgGpInOh5c60XPSVkKbPC7z/qXAoKXC2 ETUXdseCGBx8QYrZvQLA/ZC7rzMY9nIpI+eBHsh7mRoDNysq5geJHMOiw4xp3sm2ZtuA 3btg== X-Gm-Message-State: AO0yUKWa8Aqah+QY5GJ6SlTKQ6MTg8eb2hOU0JfgD9PdzukZ7TKVaIpY yQ0s3S9mFLm48SRDlmplQgjMDhd3FVc= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:90b:3889:b0:233:c921:ab7e with SMTP id mu9-20020a17090b388900b00233c921ab7emr1601258pjb.4.1678494219865; Fri, 10 Mar 2023 16:23:39 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 16:22:49 -0800 In-Reply-To: <20230311002258.852397-1-seanjc@google.com> Mime-Version: 1.0 References: <20230311002258.852397-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230311002258.852397-19-seanjc@google.com> Subject: [PATCH v2 18/27] KVM: x86: Remove the unused page-track hook track_flush_slot() From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Zhenyu Wang , Zhi Wang Cc: kvm@vger.kernel.org, intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Yan Zhao , Ben Gardon X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760029872828517002?= X-GMAIL-MSGID: =?utf-8?q?1760029872828517002?= From: Yan Zhao Remove ->track_remove_slot(), there are no longer any users and it's unlikely a "flush" hook will ever be the correct API to provide to an external page-track user. Cc: Zhenyu Wang Suggested-by: Sean Christopherson Signed-off-by: Yan Zhao Signed-off-by: Sean Christopherson --- arch/x86/include/asm/kvm_page_track.h | 11 ----------- arch/x86/kvm/mmu/page_track.c | 26 -------------------------- arch/x86/kvm/x86.c | 2 -- 3 files changed, 39 deletions(-) diff --git a/arch/x86/include/asm/kvm_page_track.h b/arch/x86/include/asm/kvm_page_track.h index 152c5e7d7868..e5eb98ca4fce 100644 --- a/arch/x86/include/asm/kvm_page_track.h +++ b/arch/x86/include/asm/kvm_page_track.h @@ -33,16 +33,6 @@ struct kvm_page_track_notifier_node { */ void (*track_write)(gpa_t gpa, const u8 *new, int bytes, struct kvm_page_track_notifier_node *node); - /* - * It is called when memory slot is being moved or removed - * users can drop write-protection for the pages in that memory slot - * - * @kvm: the kvm where memory slot being moved or removed - * @slot: the memory slot being moved or removed - * @node: this node - */ - void (*track_flush_slot)(struct kvm *kvm, struct kvm_memory_slot *slot, - struct kvm_page_track_notifier_node *node); /* * Invoked when a memory region is removed from the guest. Or in KVM @@ -87,7 +77,6 @@ kvm_page_track_unregister_notifier(struct kvm *kvm, struct kvm_page_track_notifier_node *n); void kvm_page_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new, int bytes); -void kvm_page_track_flush_slot(struct kvm *kvm, struct kvm_memory_slot *slot); void kvm_page_track_delete_slot(struct kvm *kvm, struct kvm_memory_slot *slot); bool kvm_page_track_has_external_user(struct kvm *kvm); diff --git a/arch/x86/kvm/mmu/page_track.c b/arch/x86/kvm/mmu/page_track.c index d4a8a995276a..907ab8abb452 100644 --- a/arch/x86/kvm/mmu/page_track.c +++ b/arch/x86/kvm/mmu/page_track.c @@ -278,32 +278,6 @@ void kvm_page_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new, kvm_mmu_track_write(vcpu, gpa, new, bytes); } -/* - * Notify the node that memory slot is being removed or moved so that it can - * drop write-protection for the pages in the memory slot. - * - * The node should figure out it has any write-protected pages in this slot - * by itself. - */ -void kvm_page_track_flush_slot(struct kvm *kvm, struct kvm_memory_slot *slot) -{ - struct kvm_page_track_notifier_head *head; - struct kvm_page_track_notifier_node *n; - int idx; - - head = &kvm->arch.track_notifier_head; - - if (hlist_empty(&head->track_notifier_list)) - return; - - idx = srcu_read_lock(&head->track_srcu); - hlist_for_each_entry_srcu(n, &head->track_notifier_list, node, - srcu_read_lock_held(&head->track_srcu)) - if (n->track_flush_slot) - n->track_flush_slot(kvm, slot, n); - srcu_read_unlock(&head->track_srcu, idx); -} - /* * Notify external page track nodes that a memory region is being removed from * the VM, e.g. so that users can free any associated metadata. diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 0da5ff007d20..59b02650cefc 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -12673,8 +12673,6 @@ void kvm_arch_flush_shadow_memslot(struct kvm *kvm, struct kvm_memory_slot *slot) { kvm_mmu_zap_all_fast(kvm); - - kvm_page_track_flush_slot(kvm, slot); } static inline bool kvm_guest_apic_has_interrupt(struct kvm_vcpu *vcpu) From patchwork Sat Mar 11 00:22:50 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67881 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp46887wrd; Fri, 10 Mar 2023 16:35:27 -0800 (PST) X-Google-Smtp-Source: AK7set86W/Z62zTbeLaAkAJi7HyTPO+U4fn6DChOgI+i07saBQd1XsGzyigix54kafwQcp5O3nkb X-Received: by 2002:a05:6a00:c:b0:5ce:ef1b:a8b with SMTP id h12-20020a056a00000c00b005ceef1b0a8bmr24051887pfk.30.1678494927368; Fri, 10 Mar 2023 16:35:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678494927; cv=none; d=google.com; s=arc-20160816; b=DugLlUAcKrD6e3wc/9yGRpbyMWz/jGyZiXZP0bh5sytyjjdJNDJUCxpMoeZNFqi+hl rwFdYADgdCnrjs8TyWWdfq00PiczNRJK7fc9cEHpf9YKNDdxFNyCjnibdfsSCldOMgO3 JThV7ajFYLyeVCG0oH49+scDvApRLRN86Rlf/PCW70MnIAfnOcqfpn4y4ZTTmWyQAlqs 5hPrEZWoBtZxSgt9KLF76Ucu0KZGK3ZP4DGjMAz34ggOdL+MZ/3Ckf7VkSEiPMqzB0xI qLKVrZp4Xkp4dAKJw9igUYwLBroVjoCgxjKPELRuXyaHWS7TvGbeAVF5omMX3fU1rD15 lEbg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=HxEehcXrpX7olViouiK87C8bjDZGeN8cYW+EXJJdOt4=; b=AifTsi+1SMy0m+5SlC9Uoogea3YrA1Bm0mEmV1+Qta+AQmy5fbWxLs+susWcyOq5KG DzLF4B8ZgdzFgJC11316Ovhp9cj4EUjgBYL+49CxcspwHbEUsVX6d8tuWMM5Fo4EcwVT aZf3M4oam48MnzK3b9allWvHKeb9qaJjPvXXlkVbQbftgeWfw2NAAVvcm1dPIlZiZk0A c9fY1xuL3SFhVkFFUedxTKf1dozcmd59ZHSE44nAdqjH9gktISsmWeaYTYAhFRG6k3GU zKEgixn97JFrXzrDW/tiO6pJoGcXr/9ETaelyWVnixPrbjuipkubsVey3wKBWjbH9KEf BSZw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=cdfSt3tL; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id x184-20020a6231c1000000b005a8ddfdfbfbsi909133pfx.30.2023.03.10.16.35.11; Fri, 10 Mar 2023 16:35:27 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=cdfSt3tL; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231594AbjCKAZY (ORCPT + 99 others); Fri, 10 Mar 2023 19:25:24 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44870 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231402AbjCKAYk (ORCPT ); Fri, 10 Mar 2023 19:24:40 -0500 Received: from mail-pf1-x44a.google.com (mail-pf1-x44a.google.com [IPv6:2607:f8b0:4864:20::44a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A3ADC13F543 for ; Fri, 10 Mar 2023 16:23:54 -0800 (PST) Received: by mail-pf1-x44a.google.com with SMTP id p36-20020a056a000a2400b005f72df7d97bso3607001pfh.19 for ; Fri, 10 Mar 2023 16:23:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678494221; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=HxEehcXrpX7olViouiK87C8bjDZGeN8cYW+EXJJdOt4=; b=cdfSt3tL/o32zElEZy8WVfwKyKq0Jt+YGOROR7DJVMExtIx8l+v0zqqv6OwwH4my+N YZMD6W0gWu24Dh9pEpDi5BgsLnWkgPMV3Auw/ong/FOFp6zpGetKNdy3xE5hpaL0MUP9 45s90QSDJ42lx29KEJ5HuhxhSOnDPKDdR6La9hO2fNOv06okUHihyBtMZLipEcviN1Xj lVqYWcrS9ESXFiSQ9eXX4yIOTevZ5OxXP8cNCSSbZF7LMrkarHGClMZdMQdSAzzHa1os 7NmxPjl26+WrNkN9bqKy8DA1cg4Q6TW2z5gWXAMMrAGjrrdrtezFONadIMFRhSkzNpBz n4kA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678494221; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=HxEehcXrpX7olViouiK87C8bjDZGeN8cYW+EXJJdOt4=; b=XhrqvM0HMGPzptCoLd4L38hFV3OCwON3MTGDM/JFKw/niCPjosHn2k1aIvFLVATq6i haHYNMwA1yRVCYg1orYDRx1lIZqcLPa1Of2/MhkCScIsr6gTn3UThbVP4gvACr8yscUm 9twKaXT5NcqS0GwOHF+ge0O0M2LEBWQlxhyD4K6JeycuOgpFJqJeGbYSGk1+NLa4tBQn soE4Bn+bjpDYhiuDeqZlT/d6SRGuIP+zJmmh4qVMBimW4zfejIge0JDz0NmcLg4zmxyF eOC3UbqLumlOQpFpITMdkrR6efFK220aV821bpRIDD7bCkpESxZK3FjCuPOyA6vLRkYb wYdg== X-Gm-Message-State: AO0yUKXIziQUNJ7rBGQgLfvZfCrQmQ/zs4D1sAtmGYoihvAbEsaruwfs xOqV5Zrcr8HoMVLNdYVy3ZfpHfdih2o= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a62:8348:0:b0:5ef:95c9:6a88 with SMTP id h69-20020a628348000000b005ef95c96a88mr11130509pfe.5.1678494221665; Fri, 10 Mar 2023 16:23:41 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 16:22:50 -0800 In-Reply-To: <20230311002258.852397-1-seanjc@google.com> Mime-Version: 1.0 References: <20230311002258.852397-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230311002258.852397-20-seanjc@google.com> Subject: [PATCH v2 19/27] KVM: x86/mmu: Move KVM-only page-track declarations to internal header From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Zhenyu Wang , Zhi Wang Cc: kvm@vger.kernel.org, intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Yan Zhao , Ben Gardon X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760029496422366922?= X-GMAIL-MSGID: =?utf-8?q?1760029496422366922?= Bury the declaration of the page-track helpers that are intended only for internal KVM use in a "private" header. In addition to guarding against unwanted usage of the internal-only helpers, dropping their definitions avoids exposing other structures that should be KVM-internal, e.g. for memslots. This is a baby step toward making kvm_host.h a KVM-internal header in the very distant future. Signed-off-by: Sean Christopherson --- arch/x86/include/asm/kvm_page_track.h | 26 ++++----------------- arch/x86/kvm/mmu/mmu.c | 3 ++- arch/x86/kvm/mmu/page_track.c | 8 +------ arch/x86/kvm/mmu/page_track.h | 33 +++++++++++++++++++++++++++ arch/x86/kvm/x86.c | 1 + 5 files changed, 42 insertions(+), 29 deletions(-) create mode 100644 arch/x86/kvm/mmu/page_track.h diff --git a/arch/x86/include/asm/kvm_page_track.h b/arch/x86/include/asm/kvm_page_track.h index e5eb98ca4fce..deece45936a5 100644 --- a/arch/x86/include/asm/kvm_page_track.h +++ b/arch/x86/include/asm/kvm_page_track.h @@ -2,6 +2,8 @@ #ifndef _ASM_X86_KVM_PAGE_TRACK_H #define _ASM_X86_KVM_PAGE_TRACK_H +#include + enum kvm_page_track_mode { KVM_PAGE_TRACK_WRITE, KVM_PAGE_TRACK_MAX, @@ -46,28 +48,15 @@ struct kvm_page_track_notifier_node { struct kvm_page_track_notifier_node *node); }; -int kvm_page_track_init(struct kvm *kvm); -void kvm_page_track_cleanup(struct kvm *kvm); - -bool kvm_page_track_write_tracking_enabled(struct kvm *kvm); -int kvm_page_track_write_tracking_alloc(struct kvm_memory_slot *slot); -enum pg_level kvm_page_track_max_mapping_level(struct kvm *kvm, gfn_t gfn, - enum pg_level max_level); - -void kvm_page_track_free_memslot(struct kvm_memory_slot *slot); -int kvm_page_track_create_memslot(struct kvm *kvm, - struct kvm_memory_slot *slot, - unsigned long npages); - void kvm_slot_page_track_add_page(struct kvm *kvm, struct kvm_memory_slot *slot, gfn_t gfn, enum kvm_page_track_mode mode); void kvm_slot_page_track_remove_page(struct kvm *kvm, struct kvm_memory_slot *slot, gfn_t gfn, enum kvm_page_track_mode mode); -bool kvm_slot_page_track_is_active(struct kvm *kvm, - const struct kvm_memory_slot *slot, - gfn_t gfn, enum kvm_page_track_mode mode); + +enum pg_level kvm_page_track_max_mapping_level(struct kvm *kvm, gfn_t gfn, + enum pg_level max_level); void kvm_page_track_register_notifier(struct kvm *kvm, @@ -75,10 +64,5 @@ kvm_page_track_register_notifier(struct kvm *kvm, void kvm_page_track_unregister_notifier(struct kvm *kvm, struct kvm_page_track_notifier_node *n); -void kvm_page_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new, - int bytes); -void kvm_page_track_delete_slot(struct kvm *kvm, struct kvm_memory_slot *slot); - -bool kvm_page_track_has_external_user(struct kvm *kvm); #endif diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index 4f2f83d8322e..e192968340bf 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -25,6 +25,7 @@ #include "kvm_cache_regs.h" #include "smm.h" #include "kvm_emulate.h" +#include "page_track.h" #include "cpuid.h" #include "spte.h" @@ -53,7 +54,7 @@ #include #include #include -#include + #include "trace.h" extern bool itlb_multihit_kvm_mitigation; diff --git a/arch/x86/kvm/mmu/page_track.c b/arch/x86/kvm/mmu/page_track.c index 907ab8abb452..a21200df515d 100644 --- a/arch/x86/kvm/mmu/page_track.c +++ b/arch/x86/kvm/mmu/page_track.c @@ -15,10 +15,9 @@ #include #include -#include - #include "mmu.h" #include "mmu_internal.h" +#include "page_track.h" bool kvm_page_track_write_tracking_enabled(struct kvm *kvm) { @@ -318,8 +317,3 @@ enum pg_level kvm_page_track_max_mapping_level(struct kvm *kvm, gfn_t gfn, return max_level; } EXPORT_SYMBOL_GPL(kvm_page_track_max_mapping_level); - -bool kvm_page_track_has_external_user(struct kvm *kvm) -{ - return hlist_empty(&kvm->arch.track_notifier_head.track_notifier_list); -} diff --git a/arch/x86/kvm/mmu/page_track.h b/arch/x86/kvm/mmu/page_track.h new file mode 100644 index 000000000000..89712f123ad3 --- /dev/null +++ b/arch/x86/kvm/mmu/page_track.h @@ -0,0 +1,33 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __KVM_X86_PAGE_TRACK_H +#define __KVM_X86_PAGE_TRACK_H + +#include + +#include + +int kvm_page_track_init(struct kvm *kvm); +void kvm_page_track_cleanup(struct kvm *kvm); + +bool kvm_page_track_write_tracking_enabled(struct kvm *kvm); +int kvm_page_track_write_tracking_alloc(struct kvm_memory_slot *slot); + +void kvm_page_track_free_memslot(struct kvm_memory_slot *slot); +int kvm_page_track_create_memslot(struct kvm *kvm, + struct kvm_memory_slot *slot, + unsigned long npages); + +bool kvm_slot_page_track_is_active(struct kvm *kvm, + const struct kvm_memory_slot *slot, + gfn_t gfn, enum kvm_page_track_mode mode); + +void kvm_page_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new, + int bytes); +void kvm_page_track_delete_slot(struct kvm *kvm, struct kvm_memory_slot *slot); + +static inline bool kvm_page_track_has_external_user(struct kvm *kvm) +{ + return hlist_empty(&kvm->arch.track_notifier_head.track_notifier_list); +} + +#endif /* __KVM_X86_PAGE_TRACK_H */ diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 59b02650cefc..ba61e51c05ed 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -25,6 +25,7 @@ #include "tss.h" #include "kvm_cache_regs.h" #include "kvm_emulate.h" +#include "mmu/page_track.h" #include "x86.h" #include "cpuid.h" #include "pmu.h" From patchwork Sat Mar 11 00:22:51 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67899 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp49300wrd; Fri, 10 Mar 2023 16:43:29 -0800 (PST) X-Google-Smtp-Source: AK7set8QZTyT8vNGAsjzcSQ3InJEtrlZXD3EG3NuiukSv83Cyy478AoP0fV61HtYMD4ST1fw0UqW X-Received: by 2002:a17:902:9f8e:b0:19e:6bff:4b58 with SMTP id g14-20020a1709029f8e00b0019e6bff4b58mr24665989plq.21.1678495409237; Fri, 10 Mar 2023 16:43:29 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678495409; cv=none; d=google.com; s=arc-20160816; b=DMIpztIT0JiHuRKjSXeH/NrQ3DNTn4FcqHfv/pvlFhCA8MmqoLg7ASTtokEoeOxMo/ mFcMqszU2r2RRV94vRIWropBALXftCaaV2NlqAtinVIDudTNsZAe7dWJuIQ3Z5XKYkYS xDZ1oNOy+NiFkIEkfMHmGP5rXXZO0TZJQoP1zhmTMsemjCHRJPZJvuoGucnzSGGOpKKH LKBMPo5jbd2Yzq90YDGaTU8ApfqJ1hcHeb4rFteXNmUVQTa1HJG6W3A6axpR1Uja0297 6RJiFsaSZ3drSjqiiglwMdpKRxlr6zBVAyHpEYJBdjofZQ7hPSQRwy8Cfr0bGN7KuTRV o/6g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=N+pTW/7tamt2IbWqj09PuRke2TPGqju0w/Y+Ey0MO8s=; b=Po4ZZvVWfsUnaxW7tCZT3jBv2w+pzHl5X9wLKAQJ+2ntvPlHdTK60tf15pEMdgug07 bjzwUnp3RvBbBxpJ9kjbYkNjpspIHfMIxxj2auKy/c912zfjYyx4c6sE5pUX02bjIEJi FTlo+53YZ0t7vSVYPU/dxerRidQbyIMvpGJ5efeqkJM7eN8esFD3CCbWwmiBn/BLfyrp 2Wlq9o1fIGGH7QZIDgmXhgE67GBiWBRfcXZGcAewcmY0xWh34ZEv7xIM64u22VcbC34O 6fepl3zKPlTj5MUmeVTg8FP3ztqqNcHREp2U7yG6YohzP1OIekfs5/PtMySra6hgooX+ U/jQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=TX207gWx; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id kn6-20020a170903078600b0019cb3c949f1si1071003plb.598.2023.03.10.16.43.14; Fri, 10 Mar 2023 16:43:29 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=TX207gWx; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231454AbjCKAZh (ORCPT + 99 others); Fri, 10 Mar 2023 19:25:37 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44890 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230375AbjCKAYm (ORCPT ); Fri, 10 Mar 2023 19:24:42 -0500 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 649B613EB88 for ; Fri, 10 Mar 2023 16:23:56 -0800 (PST) Received: by mail-yb1-xb4a.google.com with SMTP id w192-20020a25dfc9000000b009fe14931caaso7377689ybg.7 for ; Fri, 10 Mar 2023 16:23:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678494224; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=N+pTW/7tamt2IbWqj09PuRke2TPGqju0w/Y+Ey0MO8s=; b=TX207gWxU4fl6z+RQW+zgREYFd4cytj/8tZI2zkqObrsMjl10KdJrGM7q7WTP5BOZO DLzQ5VWBQnNxCbVf2+cQfzIXI2zYHKEkWEpr61vTyWUf1I6R86u7aEJttHbobxIZO1Rr wVnaUWJDjIJy9hGRnN9kp5vaAQq8hjOjzD3OwUEvbaSXDsqjfNp+/9yet1+LMyjg+hSH Z9+g65wP4Zbnz/J9mWJkkvJA7OGYRysmwD27lA/eCXxws3+k9tERGBRPk5aJu3/Qu5AP cC1dzmy98Ceg7CX3vuaG00oNgtqXqbPeF9m0P0uprlHmrwBfXlYgWw3L9RzBsjlqF1nF Fqkw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678494224; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=N+pTW/7tamt2IbWqj09PuRke2TPGqju0w/Y+Ey0MO8s=; b=rJ+AMlii8VXm4TZB5Z14CXIKM5hnFTxlNunmzR23nP4mIctfhNSDXsj7ik7qfs3f5R lYEl7ew3WZy/3vvTrZRHy/NvBVhd8wBWa2rD7xJKsUr7wORj2P7s4y9xf5lDJExBfGJU LiK378m++LZm99jVXxcJ53sHQ6U0Czyvkmz/+fpdTCrbWSGgEQ0DA58ia/ZGw0zs6igQ n5F3SbSBsiklIY5qSx2BtgE5dyYUdHD4m/Mz19pgsxNwL8vFu8tPB5wn3sXVZuJCXGTL uEh5mS0ZBDrQhXoSa85zPqZs855WfVWY2CBmLVsuFn7UaqYw77Hyscb49aBksE+z7BRo yh0A== X-Gm-Message-State: AO0yUKVhCCl2XjMxvUlxIaB7Hucz7T6ozlbAnwq3/uTe7r+feMtNKlCg 21uYufbNV41ppzCetpKXBKhKCc4LdR8= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a5b:c0b:0:b0:80b:4f92:1623 with SMTP id f11-20020a5b0c0b000000b0080b4f921623mr9ybq.370.1678494223739; Fri, 10 Mar 2023 16:23:43 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 16:22:51 -0800 In-Reply-To: <20230311002258.852397-1-seanjc@google.com> Mime-Version: 1.0 References: <20230311002258.852397-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230311002258.852397-21-seanjc@google.com> Subject: [PATCH v2 20/27] KVM: x86/mmu: Use page-track notifiers iff there are external users From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Zhenyu Wang , Zhi Wang Cc: kvm@vger.kernel.org, intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Yan Zhao , Ben Gardon X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760030002399283053?= X-GMAIL-MSGID: =?utf-8?q?1760030002399283053?= Disable the page-track notifier code at compile time if there are no external users, i.e. if CONFIG_KVM_EXTERNAL_WRITE_TRACKING=n. KVM itself now hooks emulated writes directly instead of relying on the page-track mechanism. Signed-off-by: Sean Christopherson --- arch/x86/include/asm/kvm_host.h | 2 ++ arch/x86/include/asm/kvm_page_track.h | 2 ++ arch/x86/kvm/mmu/page_track.c | 9 ++++----- arch/x86/kvm/mmu/page_track.h | 29 +++++++++++++++++++++++---- 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index 1a4225237564..a3423711e403 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -1265,7 +1265,9 @@ struct kvm_arch { * create an NX huge page (without hanging the guest). */ struct list_head possible_nx_huge_pages; +#ifdef CONFIG_KVM_EXTERNAL_WRITE_TRACKING struct kvm_page_track_notifier_head track_notifier_head; +#endif /* * Protects marking pages unsync during page faults, as TDP MMU page * faults only take mmu_lock for read. For simplicity, the unsync diff --git a/arch/x86/include/asm/kvm_page_track.h b/arch/x86/include/asm/kvm_page_track.h index deece45936a5..53c2adb25a07 100644 --- a/arch/x86/include/asm/kvm_page_track.h +++ b/arch/x86/include/asm/kvm_page_track.h @@ -55,6 +55,7 @@ void kvm_slot_page_track_remove_page(struct kvm *kvm, struct kvm_memory_slot *slot, gfn_t gfn, enum kvm_page_track_mode mode); +#ifdef CONFIG_KVM_EXTERNAL_WRITE_TRACKING enum pg_level kvm_page_track_max_mapping_level(struct kvm *kvm, gfn_t gfn, enum pg_level max_level); @@ -64,5 +65,6 @@ kvm_page_track_register_notifier(struct kvm *kvm, void kvm_page_track_unregister_notifier(struct kvm *kvm, struct kvm_page_track_notifier_node *n); +#endif /* CONFIG_KVM_EXTERNAL_WRITE_TRACKING */ #endif diff --git a/arch/x86/kvm/mmu/page_track.c b/arch/x86/kvm/mmu/page_track.c index a21200df515d..619ec8e5fd32 100644 --- a/arch/x86/kvm/mmu/page_track.c +++ b/arch/x86/kvm/mmu/page_track.c @@ -194,6 +194,7 @@ bool kvm_slot_page_track_is_active(struct kvm *kvm, return !!READ_ONCE(slot->arch.gfn_track[mode][index]); } +#ifdef CONFIG_KVM_EXTERNAL_WRITE_TRACKING void kvm_page_track_cleanup(struct kvm *kvm) { struct kvm_page_track_notifier_head *head; @@ -255,14 +256,13 @@ EXPORT_SYMBOL_GPL(kvm_page_track_unregister_notifier); * The node should figure out if the written page is the one that node is * interested in by itself. */ -void kvm_page_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new, - int bytes) +void __kvm_page_track_write(struct kvm *kvm, gpa_t gpa, const u8 *new, int bytes) { struct kvm_page_track_notifier_head *head; struct kvm_page_track_notifier_node *n; int idx; - head = &vcpu->kvm->arch.track_notifier_head; + head = &kvm->arch.track_notifier_head; if (hlist_empty(&head->track_notifier_list)) return; @@ -273,8 +273,6 @@ void kvm_page_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new, if (n->track_write) n->track_write(gpa, new, bytes, n); srcu_read_unlock(&head->track_srcu, idx); - - kvm_mmu_track_write(vcpu, gpa, new, bytes); } /* @@ -317,3 +315,4 @@ enum pg_level kvm_page_track_max_mapping_level(struct kvm *kvm, gfn_t gfn, return max_level; } EXPORT_SYMBOL_GPL(kvm_page_track_max_mapping_level); +#endif diff --git a/arch/x86/kvm/mmu/page_track.h b/arch/x86/kvm/mmu/page_track.h index 89712f123ad3..931b26b8fc8f 100644 --- a/arch/x86/kvm/mmu/page_track.h +++ b/arch/x86/kvm/mmu/page_track.h @@ -6,8 +6,6 @@ #include -int kvm_page_track_init(struct kvm *kvm); -void kvm_page_track_cleanup(struct kvm *kvm); bool kvm_page_track_write_tracking_enabled(struct kvm *kvm); int kvm_page_track_write_tracking_alloc(struct kvm_memory_slot *slot); @@ -21,13 +19,36 @@ bool kvm_slot_page_track_is_active(struct kvm *kvm, const struct kvm_memory_slot *slot, gfn_t gfn, enum kvm_page_track_mode mode); -void kvm_page_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new, - int bytes); +#ifdef CONFIG_KVM_EXTERNAL_WRITE_TRACKING +int kvm_page_track_init(struct kvm *kvm); +void kvm_page_track_cleanup(struct kvm *kvm); + +void __kvm_page_track_write(struct kvm *kvm, gpa_t gpa, const u8 *new, int bytes); void kvm_page_track_delete_slot(struct kvm *kvm, struct kvm_memory_slot *slot); static inline bool kvm_page_track_has_external_user(struct kvm *kvm) { return hlist_empty(&kvm->arch.track_notifier_head.track_notifier_list); } +#else +static inline int kvm_page_track_init(struct kvm *kvm) { return 0; } +static inline void kvm_page_track_cleanup(struct kvm *kvm) { } + +static inline void __kvm_page_track_write(struct kvm *kvm, gpa_t gpa, + const u8 *new, int bytes) { } +static inline void kvm_page_track_delete_slot(struct kvm *kvm, + struct kvm_memory_slot *slot) { } + +static inline bool kvm_page_track_has_external_user(struct kvm *kvm) { return false; } + +#endif /* CONFIG_KVM_EXTERNAL_WRITE_TRACKING */ + +static inline void kvm_page_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, + const u8 *new, int bytes) +{ + __kvm_page_track_write(vcpu->kvm, gpa, new, bytes); + + kvm_mmu_track_write(vcpu, gpa, new, bytes); +} #endif /* __KVM_X86_PAGE_TRACK_H */ From patchwork Sat Mar 11 00:22:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67903 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp49642wrd; Fri, 10 Mar 2023 16:44:44 -0800 (PST) X-Google-Smtp-Source: AK7set+gu9X7G0iyVsf/VOKOAXVDzD18Fai+2uAAkCEpuJpXh6+3TZj3N+PmNsGt1UH7C4FzEQYf X-Received: by 2002:a17:90b:33ce:b0:234:5eb:2177 with SMTP id lk14-20020a17090b33ce00b0023405eb2177mr29429617pjb.9.1678495484406; Fri, 10 Mar 2023 16:44:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678495484; cv=none; d=google.com; s=arc-20160816; b=hckf6MRZ2nwJX76TXbhnlhlJ9PvlYZBxC3o3BX3L+YDtlMhjweTz4fTsIattHjQEtT PKc0G40rCAsXcRWUruIxHfZA048nbXmS8VEeh4pmk4zxwwC5yP2aSXxawfKCJZTeuUEE Pjpk+KgcotATpYJf3tSpSLayTYYQ7cR7cnrmoLs73plM0+MbeQ/q8nM/1W9ZtpIHIdx4 jaFSV3H5nymlX2Fsgnp019+hrAohM7Ic29+6aCMljdcFiHiRqt5Ol7vF2cUmtidtFie8 ikXONXRvTCwVGeCCJmXSCIVu98i9pE6jcod/0jC9ZOPnXRoJV2wCNchchVWbE/vQsF4n A4cg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=eI+0rE5rcqcw4Y+N2iURH7RbtJkRm18wlxJt3fsxccM=; b=uKqjZCgz/DX7rqC6e46nOwJ3D4/aZm47+OeMAerIN+sBFFT/cTLUAe0Zo4vmCTpjZx rKPs1RMIabTv1LE+sJ6WYBaDajkAI6x/biJnV56gLEEUZFsRpO7wsM/hC1SVNEA9lLI0 tYIO65sEKzBs96QC+vIJs6XdtQL7EVszFcFhSUs0YxVUYA4VWhrgwWcVTkFY9/Pt3wlO 3EDlVNtyVxn3wPTt0+oHdwwSrxcBwNANCgHpSbdo/roTtFxuWNb+Mbq5tB+C5qLg2kj9 9RUpO4fi1r8G0OTJFWkQO/WQV28sP2dOebzQPsfMhywy52ha2iP5VlgRE/0n/DFAzqkB Hlsw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=n8G0BIaC; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id ob7-20020a17090b390700b00226ddf6b7ddsi1024582pjb.181.2023.03.10.16.44.29; Fri, 10 Mar 2023 16:44:44 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=n8G0BIaC; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231636AbjCKAZl (ORCPT + 99 others); Fri, 10 Mar 2023 19:25:41 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47266 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231418AbjCKAYn (ORCPT ); Fri, 10 Mar 2023 19:24:43 -0500 Received: from mail-pf1-x449.google.com (mail-pf1-x449.google.com [IPv6:2607:f8b0:4864:20::449]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7D6CE2ED67 for ; Fri, 10 Mar 2023 16:23:58 -0800 (PST) Received: by mail-pf1-x449.google.com with SMTP id x137-20020a62868f000000b0060017d68643so3602888pfd.18 for ; Fri, 10 Mar 2023 16:23:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678494225; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=eI+0rE5rcqcw4Y+N2iURH7RbtJkRm18wlxJt3fsxccM=; b=n8G0BIaC3mw6A2srrMDg6mQInnquGNPk6fYVwyET1bWGy+wRboFaC0W+yZ0rSj9ctz a+j5tK/HpgT4QYjwu3HFxHkusUSfi8gT5s3W1n1C6yLipFGjLpHBl/k4b+EcNr/Ii3Kd Z2+mMAAtkNPFC0bY8IpCm8hQZnNR/9YaaJXtUIlVb/WEKc6aM3uqbDKxW3sBkezrIK85 OScpEfah22LRjfsjj/zmJzlIvHwtdZYElmyyc/iQ2tnj/JE04zrLISCRF252dsS/yBhr BO4GA+LMeKdN+2DRePL/olvUAA3O7bi1oZgnj1ysY6r6bsR/nx5+67sgk9AEmszHyp2T k/Gw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678494225; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=eI+0rE5rcqcw4Y+N2iURH7RbtJkRm18wlxJt3fsxccM=; b=u6HAhygn0jMogTG98YcldmR4GEoGWPGiZ7l7rHJ/cr+cYYLx4JAmApdG9X+DVwmvkG 2O+zmzm9wJWAXq0Of6Yr4lCbYVkiXXXwKvZ7znVykkzHCDRXoXzBCLYUgdEyla5V+8Gd 5nxVdrl71GQ8YXUlYN5o0+Ej49cq9EqKwT+r6lV+UqPKHIBr33l/j4RbAtmCnYerMVBB NzgbzQK/0I9xl46APNkOYOWAgxBLqmrU64MsTy4x+uF7g9cmweOPRw4N2w6xYG0IMQoc JK3J7x/EyNghOEUgLGs8WHhWG5bJWmP6C4ByomBFA2DUZeLa/sqOSW/zFkFC8E1cQyMI XjxA== X-Gm-Message-State: AO0yUKUo0qj6fYcYhKpQPYj62KEKgStspQHpJjOyPYv8ax7sNq03GiAI xHT2a0OiiDx0zXJks+f9kGZOF8TqClA= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a63:1a46:0:b0:4f1:1bbc:be70 with SMTP id a6-20020a631a46000000b004f11bbcbe70mr1360372pgm.6.1678494225603; Fri, 10 Mar 2023 16:23:45 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 16:22:52 -0800 In-Reply-To: <20230311002258.852397-1-seanjc@google.com> Mime-Version: 1.0 References: <20230311002258.852397-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230311002258.852397-22-seanjc@google.com> Subject: [PATCH v2 21/27] KVM: x86/mmu: Drop infrastructure for multiple page-track modes From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Zhenyu Wang , Zhi Wang Cc: kvm@vger.kernel.org, intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Yan Zhao , Ben Gardon X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760030080551016652?= X-GMAIL-MSGID: =?utf-8?q?1760030080551016652?= Drop "support" for multiple page-track modes, as there is no evidence that array-based and refcounted metadata is the optimal solution for other modes, nor is there any evidence that other use cases, e.g. for access-tracking, will be a good fit for the page-track machinery in general. E.g. one potential use case of access-tracking would be to prevent guest access to poisoned memory (from the guest's perspective). In that case, the number of poisoned pages is likely to be a very small percentage of the guest memory, and there is no need to reference count the number of access-tracking users, i.e. expanding gfn_track[] for a new mode would be grossly inefficient. And for poisoned memory, host userspace would also likely want to trap accesses, e.g. to inject #MC into the guest, and that isn't currently supported by the page-track framework. A better alternative for that poisoned page use case is likely a variation of the proposed per-gfn attributes overlay (linked), which would allow efficiently tracking the sparse set of poisoned pages, and by default would exit to userspace on access. Link: https://lore.kernel.org/all/Y2WB48kD0J4VGynX@google.com Cc: Ben Gardon Signed-off-by: Sean Christopherson --- arch/x86/include/asm/kvm_host.h | 12 +-- arch/x86/include/asm/kvm_page_track.h | 11 +-- arch/x86/kvm/mmu/mmu.c | 14 ++-- arch/x86/kvm/mmu/page_track.c | 111 ++++++++------------------ arch/x86/kvm/mmu/page_track.h | 3 +- drivers/gpu/drm/i915/gvt/kvmgt.c | 4 +- 6 files changed, 51 insertions(+), 104 deletions(-) diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index a3423711e403..23567b851864 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -288,13 +288,13 @@ struct kvm_kernel_irq_routing_entry; * kvm_mmu_page_role tracks the properties of a shadow page (where shadow page * also includes TDP pages) to determine whether or not a page can be used in * the given MMU context. This is a subset of the overall kvm_cpu_role to - * minimize the size of kvm_memory_slot.arch.gfn_track, i.e. allows allocating - * 2 bytes per gfn instead of 4 bytes per gfn. + * minimize the size of kvm_memory_slot.arch.gfn_write_track, i.e. allows + * allocating 2 bytes per gfn instead of 4 bytes per gfn. * * Upper-level shadow pages having gptes are tracked for write-protection via - * gfn_track. As above, gfn_track is a 16 bit counter, so KVM must not create - * more than 2^16-1 upper-level shadow pages at a single gfn, otherwise - * gfn_track will overflow and explosions will ensure. + * gfn_write_track. As above, gfn_write_track is a 16 bit counter, so KVM must + * not create more than 2^16-1 upper-level shadow pages at a single gfn, + * otherwise gfn_write_track will overflow and explosions will ensue. * * A unique shadow page (SP) for a gfn is created if and only if an existing SP * cannot be reused. The ability to reuse a SP is tracked by its role, which @@ -1023,7 +1023,7 @@ struct kvm_lpage_info { struct kvm_arch_memory_slot { struct kvm_rmap_head *rmap[KVM_NR_PAGE_SIZES]; struct kvm_lpage_info *lpage_info[KVM_NR_PAGE_SIZES - 1]; - unsigned short *gfn_track[KVM_PAGE_TRACK_MAX]; + unsigned short *gfn_write_track; }; /* diff --git a/arch/x86/include/asm/kvm_page_track.h b/arch/x86/include/asm/kvm_page_track.h index 53c2adb25a07..42a4ae451d36 100644 --- a/arch/x86/include/asm/kvm_page_track.h +++ b/arch/x86/include/asm/kvm_page_track.h @@ -4,11 +4,6 @@ #include -enum kvm_page_track_mode { - KVM_PAGE_TRACK_WRITE, - KVM_PAGE_TRACK_MAX, -}; - /* * The notifier represented by @kvm_page_track_notifier_node is linked into * the head which will be notified when guest is triggering the track event. @@ -49,11 +44,9 @@ struct kvm_page_track_notifier_node { }; void kvm_slot_page_track_add_page(struct kvm *kvm, - struct kvm_memory_slot *slot, gfn_t gfn, - enum kvm_page_track_mode mode); + struct kvm_memory_slot *slot, gfn_t gfn); void kvm_slot_page_track_remove_page(struct kvm *kvm, - struct kvm_memory_slot *slot, gfn_t gfn, - enum kvm_page_track_mode mode); + struct kvm_memory_slot *slot, gfn_t gfn); #ifdef CONFIG_KVM_EXTERNAL_WRITE_TRACKING enum pg_level kvm_page_track_max_mapping_level(struct kvm *kvm, gfn_t gfn, diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index e192968340bf..7f21a1705438 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -820,8 +820,7 @@ static void account_shadowed(struct kvm *kvm, struct kvm_mmu_page *sp) /* the non-leaf shadow pages are keeping readonly. */ if (sp->role.level > PG_LEVEL_4K) - return kvm_slot_page_track_add_page(kvm, slot, gfn, - KVM_PAGE_TRACK_WRITE); + return kvm_slot_page_track_add_page(kvm, slot, gfn); kvm_mmu_gfn_disallow_lpage(slot, gfn); @@ -867,8 +866,7 @@ static void unaccount_shadowed(struct kvm *kvm, struct kvm_mmu_page *sp) slots = kvm_memslots_for_spte_role(kvm, sp->role); slot = __gfn_to_memslot(slots, gfn); if (sp->role.level > PG_LEVEL_4K) - return kvm_slot_page_track_remove_page(kvm, slot, gfn, - KVM_PAGE_TRACK_WRITE); + return kvm_slot_page_track_remove_page(kvm, slot, gfn); kvm_mmu_gfn_allow_lpage(slot, gfn); } @@ -2747,7 +2745,7 @@ int mmu_try_to_unsync_pages(struct kvm *kvm, const struct kvm_memory_slot *slot, * track machinery is used to write-protect upper-level shadow pages, * i.e. this guards the role.level == 4K assertion below! */ - if (kvm_slot_page_track_is_active(kvm, slot, gfn, KVM_PAGE_TRACK_WRITE)) + if (kvm_slot_page_track_is_active(kvm, slot, gfn)) return -EPERM; /* @@ -4155,7 +4153,7 @@ static bool page_fault_handle_page_track(struct kvm_vcpu *vcpu, * guest is writing the page which is write tracked which can * not be fixed by page fault handler. */ - if (kvm_slot_page_track_is_active(vcpu->kvm, fault->slot, fault->gfn, KVM_PAGE_TRACK_WRITE)) + if (kvm_slot_page_track_is_active(vcpu->kvm, fault->slot, fault->gfn)) return true; return false; @@ -5387,8 +5385,8 @@ void kvm_mmu_after_set_cpuid(struct kvm_vcpu *vcpu) * physical address properties) in a single VM would require tracking * all relevant CPUID information in kvm_mmu_page_role. That is very * undesirable as it would increase the memory requirements for - * gfn_track (see struct kvm_mmu_page_role comments). For now that - * problem is swept under the rug; KVM's CPUID API is horrific and + * gfn_write_track (see struct kvm_mmu_page_role comments). For now + * that problem is swept under the rug; KVM's CPUID API is horrific and * it's all but impossible to solve it without introducing a new API. */ vcpu->arch.root_mmu.root_role.word = 0; diff --git a/arch/x86/kvm/mmu/page_track.c b/arch/x86/kvm/mmu/page_track.c index 619ec8e5fd32..f8c89110f896 100644 --- a/arch/x86/kvm/mmu/page_track.c +++ b/arch/x86/kvm/mmu/page_track.c @@ -27,76 +27,50 @@ bool kvm_page_track_write_tracking_enabled(struct kvm *kvm) void kvm_page_track_free_memslot(struct kvm_memory_slot *slot) { - int i; + kvfree(slot->arch.gfn_write_track); + slot->arch.gfn_write_track = NULL; +} - for (i = 0; i < KVM_PAGE_TRACK_MAX; i++) { - kvfree(slot->arch.gfn_track[i]); - slot->arch.gfn_track[i] = NULL; - } +static int __kvm_page_track_write_tracking_alloc(struct kvm_memory_slot *slot, + unsigned long npages) +{ + const size_t size = sizeof(*slot->arch.gfn_write_track); + + if (!slot->arch.gfn_write_track) + slot->arch.gfn_write_track = __vcalloc(npages, size, + GFP_KERNEL_ACCOUNT); + + return slot->arch.gfn_write_track ? 0 : -ENOMEM; } int kvm_page_track_create_memslot(struct kvm *kvm, struct kvm_memory_slot *slot, unsigned long npages) { - int i; - - for (i = 0; i < KVM_PAGE_TRACK_MAX; i++) { - if (i == KVM_PAGE_TRACK_WRITE && - !kvm_page_track_write_tracking_enabled(kvm)) - continue; - - slot->arch.gfn_track[i] = - __vcalloc(npages, sizeof(*slot->arch.gfn_track[i]), - GFP_KERNEL_ACCOUNT); - if (!slot->arch.gfn_track[i]) - goto track_free; - } - - return 0; - -track_free: - kvm_page_track_free_memslot(slot); - return -ENOMEM; -} - -static inline bool page_track_mode_is_valid(enum kvm_page_track_mode mode) -{ - if (mode < 0 || mode >= KVM_PAGE_TRACK_MAX) - return false; - - return true; -} - -int kvm_page_track_write_tracking_alloc(struct kvm_memory_slot *slot) -{ - unsigned short *gfn_track; - - if (slot->arch.gfn_track[KVM_PAGE_TRACK_WRITE]) + if (!kvm_page_track_write_tracking_enabled(kvm)) return 0; - gfn_track = __vcalloc(slot->npages, sizeof(*gfn_track), - GFP_KERNEL_ACCOUNT); - if (gfn_track == NULL) - return -ENOMEM; + return __kvm_page_track_write_tracking_alloc(slot, npages); +} - slot->arch.gfn_track[KVM_PAGE_TRACK_WRITE] = gfn_track; - return 0; +int kvm_page_track_write_tracking_alloc(struct kvm_memory_slot *slot) +{ + return __kvm_page_track_write_tracking_alloc(slot, slot->npages); } -static void update_gfn_track(struct kvm_memory_slot *slot, gfn_t gfn, - enum kvm_page_track_mode mode, short count) +static void update_gfn_write_track(struct kvm_memory_slot *slot, gfn_t gfn, + short count) { int index, val; index = gfn_to_index(gfn, slot->base_gfn, PG_LEVEL_4K); - val = slot->arch.gfn_track[mode][index]; + val = slot->arch.gfn_write_track[index]; if (WARN_ON(val + count < 0 || val + count > USHRT_MAX)) return; - slot->arch.gfn_track[mode][index] += count; + slot->arch.gfn_write_track[index] += count; } /* @@ -109,21 +83,15 @@ static void update_gfn_track(struct kvm_memory_slot *slot, gfn_t gfn, * @kvm: the guest instance we are interested in. * @slot: the @gfn belongs to. * @gfn: the guest page. - * @mode: tracking mode, currently only write track is supported. */ void kvm_slot_page_track_add_page(struct kvm *kvm, - struct kvm_memory_slot *slot, gfn_t gfn, - enum kvm_page_track_mode mode) + struct kvm_memory_slot *slot, gfn_t gfn) { - if (WARN_ON(!page_track_mode_is_valid(mode))) + if (WARN_ON(!kvm_page_track_write_tracking_enabled(kvm))) return; - if (WARN_ON(mode == KVM_PAGE_TRACK_WRITE && - !kvm_page_track_write_tracking_enabled(kvm))) - return; - - update_gfn_track(slot, gfn, mode, 1); + update_gfn_write_track(slot, gfn, 1); /* * new track stops large page mapping for the @@ -131,9 +99,8 @@ void kvm_slot_page_track_add_page(struct kvm *kvm, */ kvm_mmu_gfn_disallow_lpage(slot, gfn); - if (mode == KVM_PAGE_TRACK_WRITE) - if (kvm_mmu_slot_gfn_write_protect(kvm, slot, gfn, PG_LEVEL_4K)) - kvm_flush_remote_tlbs(kvm); + if (kvm_mmu_slot_gfn_write_protect(kvm, slot, gfn, PG_LEVEL_4K)) + kvm_flush_remote_tlbs(kvm); } EXPORT_SYMBOL_GPL(kvm_slot_page_track_add_page); @@ -148,20 +115,14 @@ EXPORT_SYMBOL_GPL(kvm_slot_page_track_add_page); * @kvm: the guest instance we are interested in. * @slot: the @gfn belongs to. * @gfn: the guest page. - * @mode: tracking mode, currently only write track is supported. */ void kvm_slot_page_track_remove_page(struct kvm *kvm, - struct kvm_memory_slot *slot, gfn_t gfn, - enum kvm_page_track_mode mode) + struct kvm_memory_slot *slot, gfn_t gfn) { - if (WARN_ON(!page_track_mode_is_valid(mode))) + if (WARN_ON(!kvm_page_track_write_tracking_enabled(kvm))) return; - if (WARN_ON(mode == KVM_PAGE_TRACK_WRITE && - !kvm_page_track_write_tracking_enabled(kvm))) - return; - - update_gfn_track(slot, gfn, mode, -1); + update_gfn_write_track(slot, gfn, -1); /* * allow large page mapping for the tracked page @@ -176,22 +137,18 @@ EXPORT_SYMBOL_GPL(kvm_slot_page_track_remove_page); */ bool kvm_slot_page_track_is_active(struct kvm *kvm, const struct kvm_memory_slot *slot, - gfn_t gfn, enum kvm_page_track_mode mode) + gfn_t gfn) { int index; - if (WARN_ON(!page_track_mode_is_valid(mode))) - return false; - if (!slot) return false; - if (mode == KVM_PAGE_TRACK_WRITE && - !kvm_page_track_write_tracking_enabled(kvm)) + if (!kvm_page_track_write_tracking_enabled(kvm)) return false; index = gfn_to_index(gfn, slot->base_gfn, PG_LEVEL_4K); - return !!READ_ONCE(slot->arch.gfn_track[mode][index]); + return !!READ_ONCE(slot->arch.gfn_write_track[index]); } #ifdef CONFIG_KVM_EXTERNAL_WRITE_TRACKING diff --git a/arch/x86/kvm/mmu/page_track.h b/arch/x86/kvm/mmu/page_track.h index 931b26b8fc8f..789d0c479519 100644 --- a/arch/x86/kvm/mmu/page_track.h +++ b/arch/x86/kvm/mmu/page_track.h @@ -16,8 +16,7 @@ int kvm_page_track_create_memslot(struct kvm *kvm, unsigned long npages); bool kvm_slot_page_track_is_active(struct kvm *kvm, - const struct kvm_memory_slot *slot, - gfn_t gfn, enum kvm_page_track_mode mode); + const struct kvm_memory_slot *slot, gfn_t gfn); #ifdef CONFIG_KVM_EXTERNAL_WRITE_TRACKING int kvm_page_track_init(struct kvm *kvm); diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c index 9f188b6c3edf..1e0f4ec55782 100644 --- a/drivers/gpu/drm/i915/gvt/kvmgt.c +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c @@ -1578,7 +1578,7 @@ int intel_gvt_page_track_add(struct intel_vgpu *info, u64 gfn) } write_lock(&kvm->mmu_lock); - kvm_slot_page_track_add_page(kvm, slot, gfn, KVM_PAGE_TRACK_WRITE); + kvm_slot_page_track_add_page(kvm, slot, gfn); write_unlock(&kvm->mmu_lock); srcu_read_unlock(&kvm->srcu, idx); @@ -1607,7 +1607,7 @@ int intel_gvt_page_track_remove(struct intel_vgpu *info, u64 gfn) } write_lock(&kvm->mmu_lock); - kvm_slot_page_track_remove_page(kvm, slot, gfn, KVM_PAGE_TRACK_WRITE); + kvm_slot_page_track_remove_page(kvm, slot, gfn); write_unlock(&kvm->mmu_lock); srcu_read_unlock(&kvm->srcu, idx); From patchwork Sat Mar 11 00:22:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67905 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp49701wrd; Fri, 10 Mar 2023 16:44:55 -0800 (PST) X-Google-Smtp-Source: AK7set/+Jduu8UPz4CuBzqj1CkyVA48oZlCt0/AC5p0OHZERo43sWIC1HaoaaQxkQFAdIt3j7aQ4 X-Received: by 2002:a62:7b0c:0:b0:61d:dd5b:5537 with SMTP id w12-20020a627b0c000000b0061ddd5b5537mr8113120pfc.31.1678495495588; Fri, 10 Mar 2023 16:44:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678495495; cv=none; d=google.com; s=arc-20160816; b=R3gBSl+45OXiI2H3oQa4owhYQxHn227XN/0mRlUUuPe1sNV/pCXKGqMqMVY0OqXLbO evMBouZDwZI8mxtSfnLxOXTZ1XeYuCzEJainn5KZErfzUVZtI3W2y0yb1u20SAUrajzI rG93BtfFl/fCCIsvYVJE4wvUC9/Fl2psx7fvLcNI+cn/a4nk0eOE/qK9UR39hp7aZSKp kvm8yStwprHec4mkNhF1LfpDZ8AEbO7SOUMxRFoXJHdrmilgLqj0hsuT5izsiyK2iDxE qsZQ4f6AVguMFg2P7pac8SHPVZstJ1zbW98DnwGu0+Azpdm/hDOGOkqkB8ugYa+0xMLs g3QA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=cRChIfKJ3K8DtJs7OGMgvrExuil8ZWfEDLQhfi2NWpc=; b=QMCSE5X9BdunyNrz4OsixCgHKVmbaXSbsnICGc5qoMCwhlgEgWW6YTT/PhrI+LqyYW egGF7Tw53lPqeuOY94z80h30bW3yu5+LJ0ZcTgx0esdfuFkMioNFbEJvDDisC6ePHaRU Zt5w7/55OPo8wAzXRgBO6TPdvcvk0BJUOOF2BpEiSHDHkgwqRoEv9P/Byx/b08DDuqTw ULxPlIk6D/YqJU7031S2GJQs5yuHEeytOt93h71Ge9Fci5eYcDoY5qYA01m80Qs6Tw4A xv4SPe6a/eExt26LLvPTAUP/ch1kcnbsYOYlVc2egHGz38yFgo9otCexy4McjJ1NBOlF LlpA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=Dq8saSFX; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id x18-20020aa79a52000000b0060102d22785si857860pfj.283.2023.03.10.16.44.39; Fri, 10 Mar 2023 16:44:55 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=Dq8saSFX; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231649AbjCKAZn (ORCPT + 99 others); Fri, 10 Mar 2023 19:25:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47442 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231510AbjCKAYy (ORCPT ); Fri, 10 Mar 2023 19:24:54 -0500 Received: from mail-pg1-x54a.google.com (mail-pg1-x54a.google.com [IPv6:2607:f8b0:4864:20::54a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 20C3B9FE51 for ; Fri, 10 Mar 2023 16:24:01 -0800 (PST) Received: by mail-pg1-x54a.google.com with SMTP id bc19-20020a656d93000000b005072b17a298so1645172pgb.14 for ; Fri, 10 Mar 2023 16:24:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678494227; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=cRChIfKJ3K8DtJs7OGMgvrExuil8ZWfEDLQhfi2NWpc=; b=Dq8saSFXYnEuXxC6o0mtt4fI1VyD23Rtfssio2QJ8NUWmZPLMWdcGEEEmDZb32lk2X Z+3pXY0CsBZFZwN+kyZt33sPU3BlM0U+dL5qe32vWMqfG8PizHwhYfvoP7tEqSEByDnB 8aIuoObFXcelPDhgFKLKaIfkcxnyDdwRcKdem4sDavCrJb0hoGYUvqZZ7/ScLDm3ThJg kaRrVkF4pOdKj44bOuqHglhMksLim39Sr7pPfDZAxn8Vso1J/CdeLJEe767Wv3W5lbo2 FeMgb9CstSsi9aFVXJ1hth1MtgiPT/0ORTmz1K/IxuUanbIdULrXiYDcrPUiUzvdlq81 Q39Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678494227; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=cRChIfKJ3K8DtJs7OGMgvrExuil8ZWfEDLQhfi2NWpc=; b=liRgc1JNoDU9W+/Sxk0vkO6XZeH3jIA4H9cOfRio6o+5zGBdVohuE0PL/XbhgRd9dZ F0VMD2zGx38mchROOJGLjVH4igfUurJeFaWr0KVHdmyca9QWLWWufFrt78h7ixCZh5kX EKzCDqcet67j82JVflqH5FmZeFOUCMMy9h7bN+3uOsp8pSf4+39LhzZNyTpgO7lBBtVd uHQ1sjuAo985HoWFWLUYUjsR9tPLjAspcSgeBCHIrBkQiVWq+W6p5Imq39NIhi7EZFqB k2oZv2iAK5sfCL08qQQOt/mNU7lPnaSlJZA1m2jZBd25ZdA+MIEQ26BO7UFU9ThFfIfv O+5A== X-Gm-Message-State: AO0yUKWS/ECzZq0kwJNPVMAadgO8b4itfEK4RSrIqEagyelDhUB8yByG nMJi0NkXfX9g+OW5i3G8AUZ+ESrtGPM= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:90a:6804:b0:237:9cbe:22ad with SMTP id p4-20020a17090a680400b002379cbe22admr10081333pjj.5.1678494227546; Fri, 10 Mar 2023 16:23:47 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 16:22:53 -0800 In-Reply-To: <20230311002258.852397-1-seanjc@google.com> Mime-Version: 1.0 References: <20230311002258.852397-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230311002258.852397-23-seanjc@google.com> Subject: [PATCH v2 22/27] KVM: x86/mmu: Rename page-track APIs to reflect the new reality From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Zhenyu Wang , Zhi Wang Cc: kvm@vger.kernel.org, intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Yan Zhao , Ben Gardon X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760030092364307455?= X-GMAIL-MSGID: =?utf-8?q?1760030092364307455?= Rename the page-track APIs to capture that they're all about tracking writes, now that the facade of supporting multiple modes is gone. Opportunstically replace "slot" with "gfn" in anticipation of removing the @slot param from the external APIs. No functional change intended. Signed-off-by: Sean Christopherson --- arch/x86/include/asm/kvm_page_track.h | 8 ++++---- arch/x86/kvm/mmu/mmu.c | 8 ++++---- arch/x86/kvm/mmu/page_track.c | 21 +++++++++------------ arch/x86/kvm/mmu/page_track.h | 4 ++-- drivers/gpu/drm/i915/gvt/kvmgt.c | 4 ++-- 5 files changed, 21 insertions(+), 24 deletions(-) diff --git a/arch/x86/include/asm/kvm_page_track.h b/arch/x86/include/asm/kvm_page_track.h index 42a4ae451d36..20055064793a 100644 --- a/arch/x86/include/asm/kvm_page_track.h +++ b/arch/x86/include/asm/kvm_page_track.h @@ -43,10 +43,10 @@ struct kvm_page_track_notifier_node { struct kvm_page_track_notifier_node *node); }; -void kvm_slot_page_track_add_page(struct kvm *kvm, - struct kvm_memory_slot *slot, gfn_t gfn); -void kvm_slot_page_track_remove_page(struct kvm *kvm, - struct kvm_memory_slot *slot, gfn_t gfn); +void kvm_write_track_add_gfn(struct kvm *kvm, + struct kvm_memory_slot *slot, gfn_t gfn); +void kvm_write_track_remove_gfn(struct kvm *kvm, struct kvm_memory_slot *slot, + gfn_t gfn); #ifdef CONFIG_KVM_EXTERNAL_WRITE_TRACKING enum pg_level kvm_page_track_max_mapping_level(struct kvm *kvm, gfn_t gfn, diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index 7f21a1705438..3d1aad44c2ec 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -820,7 +820,7 @@ static void account_shadowed(struct kvm *kvm, struct kvm_mmu_page *sp) /* the non-leaf shadow pages are keeping readonly. */ if (sp->role.level > PG_LEVEL_4K) - return kvm_slot_page_track_add_page(kvm, slot, gfn); + return kvm_write_track_add_gfn(kvm, slot, gfn); kvm_mmu_gfn_disallow_lpage(slot, gfn); @@ -866,7 +866,7 @@ static void unaccount_shadowed(struct kvm *kvm, struct kvm_mmu_page *sp) slots = kvm_memslots_for_spte_role(kvm, sp->role); slot = __gfn_to_memslot(slots, gfn); if (sp->role.level > PG_LEVEL_4K) - return kvm_slot_page_track_remove_page(kvm, slot, gfn); + return kvm_write_track_remove_gfn(kvm, slot, gfn); kvm_mmu_gfn_allow_lpage(slot, gfn); } @@ -2745,7 +2745,7 @@ int mmu_try_to_unsync_pages(struct kvm *kvm, const struct kvm_memory_slot *slot, * track machinery is used to write-protect upper-level shadow pages, * i.e. this guards the role.level == 4K assertion below! */ - if (kvm_slot_page_track_is_active(kvm, slot, gfn)) + if (kvm_gfn_is_write_tracked(kvm, slot, gfn)) return -EPERM; /* @@ -4153,7 +4153,7 @@ static bool page_fault_handle_page_track(struct kvm_vcpu *vcpu, * guest is writing the page which is write tracked which can * not be fixed by page fault handler. */ - if (kvm_slot_page_track_is_active(vcpu->kvm, fault->slot, fault->gfn)) + if (kvm_gfn_is_write_tracked(vcpu->kvm, fault->slot, fault->gfn)) return true; return false; diff --git a/arch/x86/kvm/mmu/page_track.c b/arch/x86/kvm/mmu/page_track.c index f8c89110f896..1993db4578e5 100644 --- a/arch/x86/kvm/mmu/page_track.c +++ b/arch/x86/kvm/mmu/page_track.c @@ -84,10 +84,9 @@ static void update_gfn_write_track(struct kvm_memory_slot *slot, gfn_t gfn, * @slot: the @gfn belongs to. * @gfn: the guest page. */ -void kvm_slot_page_track_add_page(struct kvm *kvm, - struct kvm_memory_slot *slot, gfn_t gfn) +void kvm_write_track_add_gfn(struct kvm *kvm, struct kvm_memory_slot *slot, + gfn_t gfn) { - if (WARN_ON(!kvm_page_track_write_tracking_enabled(kvm))) return; @@ -102,12 +101,11 @@ void kvm_slot_page_track_add_page(struct kvm *kvm, if (kvm_mmu_slot_gfn_write_protect(kvm, slot, gfn, PG_LEVEL_4K)) kvm_flush_remote_tlbs(kvm); } -EXPORT_SYMBOL_GPL(kvm_slot_page_track_add_page); +EXPORT_SYMBOL_GPL(kvm_write_track_add_gfn); /* * remove the guest page from the tracking pool which stops the interception - * of corresponding access on that page. It is the opposed operation of - * kvm_slot_page_track_add_page(). + * of corresponding access on that page. * * It should be called under the protection both of mmu-lock and kvm->srcu * or kvm->slots_lock. @@ -116,8 +114,8 @@ EXPORT_SYMBOL_GPL(kvm_slot_page_track_add_page); * @slot: the @gfn belongs to. * @gfn: the guest page. */ -void kvm_slot_page_track_remove_page(struct kvm *kvm, - struct kvm_memory_slot *slot, gfn_t gfn) +void kvm_write_track_remove_gfn(struct kvm *kvm, + struct kvm_memory_slot *slot, gfn_t gfn) { if (WARN_ON(!kvm_page_track_write_tracking_enabled(kvm))) return; @@ -130,14 +128,13 @@ void kvm_slot_page_track_remove_page(struct kvm *kvm, */ kvm_mmu_gfn_allow_lpage(slot, gfn); } -EXPORT_SYMBOL_GPL(kvm_slot_page_track_remove_page); +EXPORT_SYMBOL_GPL(kvm_write_track_remove_gfn); /* * check if the corresponding access on the specified guest page is tracked. */ -bool kvm_slot_page_track_is_active(struct kvm *kvm, - const struct kvm_memory_slot *slot, - gfn_t gfn) +bool kvm_gfn_is_write_tracked(struct kvm *kvm, + const struct kvm_memory_slot *slot, gfn_t gfn) { int index; diff --git a/arch/x86/kvm/mmu/page_track.h b/arch/x86/kvm/mmu/page_track.h index 789d0c479519..50d3278e8c69 100644 --- a/arch/x86/kvm/mmu/page_track.h +++ b/arch/x86/kvm/mmu/page_track.h @@ -15,8 +15,8 @@ int kvm_page_track_create_memslot(struct kvm *kvm, struct kvm_memory_slot *slot, unsigned long npages); -bool kvm_slot_page_track_is_active(struct kvm *kvm, - const struct kvm_memory_slot *slot, gfn_t gfn); +bool kvm_gfn_is_write_tracked(struct kvm *kvm, + const struct kvm_memory_slot *slot, gfn_t gfn); #ifdef CONFIG_KVM_EXTERNAL_WRITE_TRACKING int kvm_page_track_init(struct kvm *kvm); diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c index 1e0f4ec55782..e5a18d92030b 100644 --- a/drivers/gpu/drm/i915/gvt/kvmgt.c +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c @@ -1578,7 +1578,7 @@ int intel_gvt_page_track_add(struct intel_vgpu *info, u64 gfn) } write_lock(&kvm->mmu_lock); - kvm_slot_page_track_add_page(kvm, slot, gfn); + kvm_write_track_add_gfn(kvm, slot, gfn); write_unlock(&kvm->mmu_lock); srcu_read_unlock(&kvm->srcu, idx); @@ -1607,7 +1607,7 @@ int intel_gvt_page_track_remove(struct intel_vgpu *info, u64 gfn) } write_lock(&kvm->mmu_lock); - kvm_slot_page_track_remove_page(kvm, slot, gfn); + kvm_write_track_remove_gfn(kvm, slot, gfn); write_unlock(&kvm->mmu_lock); srcu_read_unlock(&kvm->srcu, idx); From patchwork Sat Mar 11 00:22:54 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67898 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp49267wrd; Fri, 10 Mar 2023 16:43:23 -0800 (PST) X-Google-Smtp-Source: AK7set98jUawvmSdgx0FtyFwtNQEhEXB5QURh6PFiAv2PGJaRMkPIeK+vaFkKB4cqeJw3skoaGq+ X-Received: by 2002:a17:90b:3a82:b0:237:c5cc:15bf with SMTP id om2-20020a17090b3a8200b00237c5cc15bfmr27828221pjb.13.1678495403559; Fri, 10 Mar 2023 16:43:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678495403; cv=none; d=google.com; s=arc-20160816; b=yvflS7kH6e7GxjRc33gngU5ggrzp/1hJS2RkcIE/E2oDYn4fufXXE/LsYHNlSdyUyE WJlPUdsfeFNOUXOTEr0al16WtG6DXm23XhOa+2BY6Jqmz+LZjEwUSCVCq98zuJmhp1Fm sdsXXRSQzeix/FgQyMN+uONo2OvgRUv1nqJghu/amqaBU6m4velxInP70iN6Sh4d9882 1molsNYyUGjTI/PdZL4hd1ADqVkhSkS3qiperAX6eiJyRXvO1+B9LTaoiPS89LQOSw3n C0O9/fPzVXcdVyDoJijYWZHNmr58nh4w0a2HWTLp13BuxZne6O9+ztFHW/rhIBtT84UH fGIw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=/BQVuzY+1aniIxFwV3nAIhGW3ZAM3GsrQzHkvtpaNHU=; b=nzLiTP5q1eR/HdLTDAd8L3OA5c6DSbI9tUMznOPO2sbymjIS0CTvB3McGoP2whppLm oomTcWjnhU4Di0HzPas9oJxMXPxIRpQ+uJekpDpzdb6H9oo6cWoRYsqUOOFRQpqoEPyx /R6qL9hCa863kpklIRIfDtVhmITm+nTzM20lZbFgqfPwUIQDLdTT7WB4ChvKk/abt4dI bhom6APJWgIIRZEGFV8kIVfSkMbRhjCX8BdA/0xVVqub22tLWXceosA5c7DTCZ88aF25 3AFyFLieJAebVDlg6+nSo3vqEdUDhG/Qk9PMwafbIgrRsOY9A5RhGUHnRscBGO7NqfiZ l9OQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=Ab0v8Ymp; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id j19-20020a17090a7e9300b00233cee16612si965056pjl.151.2023.03.10.16.43.08; Fri, 10 Mar 2023 16:43:23 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=Ab0v8Ymp; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231660AbjCKAZr (ORCPT + 99 others); Fri, 10 Mar 2023 19:25:47 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45348 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231563AbjCKAY4 (ORCPT ); Fri, 10 Mar 2023 19:24:56 -0500 Received: from mail-pl1-x64a.google.com (mail-pl1-x64a.google.com [IPv6:2607:f8b0:4864:20::64a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9D56E13F6B1 for ; Fri, 10 Mar 2023 16:24:02 -0800 (PST) Received: by mail-pl1-x64a.google.com with SMTP id k17-20020a170902d59100b0019abcf45d75so3562064plh.8 for ; Fri, 10 Mar 2023 16:24:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678494229; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=/BQVuzY+1aniIxFwV3nAIhGW3ZAM3GsrQzHkvtpaNHU=; b=Ab0v8YmpDERByolnb028YKVIlfH4MiO7yQrc4RKRFL5GBnbXvna4+5GVmm19EWQOhj egIfhucrWh67+17xUMC+0ozgET86EcLL8gnfW3xTY437OsCd7ohRm5I91JQSjbDvGVei dxWVJkzKLqqg0c0shd3w8KO9sXN0xg9lUPSDNOCubHZ/a7B1QgL0e+FDanDFF0/DULCS LHcCjqWQV6U+85Rp05fZB7kujyhcAXUJtL7t5mdIK0oGB6Qi/WSWx7CHQVZHOz+RwLY5 rrcbP1RyosYGKPBD9kFA2WvKZVxc6aJmOd7YPCqPh6RRazY0E+Z0WNTZjUfo5H8kFcEs IDpw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678494229; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=/BQVuzY+1aniIxFwV3nAIhGW3ZAM3GsrQzHkvtpaNHU=; b=SWn9GQzIKyz3kE2x8RMQGVoFIqP5UwD/jVLlwyPo+J/o49tVqUcxOJqzFuh4lwuOM3 /dIQHfhLcDqrs3Eq3Xr0AcFk2v/1DDRspf0nAZuAIj4XRry1lM9M/1A0vaX7Wtk/OvQG 217BnTJVVHZN7PkeA0CmjKsLELsf+Cf7t/0u4LMiknCP9oGHAjxxJBHLFac/txKIZ2ot H9AVLznspj18DHYB4RcLoZDklydLx5z6ySWDf8daR6i4c9ii05KeR1qYJiWJYGuYCAav F56WCL6ffsMbXUafCIyt0zAJ9cTQxdEggJh8XrcXmc48fsIO0YHtft62DXYeOvj68cLd lOHA== X-Gm-Message-State: AO0yUKUxJ5tjAXkKCmVNivB0pjjAmOBBHdm0XjJvE6kwZWeA6qDKbh/w UT3ugRoW4TfF0lGRPvKCLlVb1ZMDdxk= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:90a:716:b0:231:1d90:7b1b with SMTP id l22-20020a17090a071600b002311d907b1bmr9612096pjl.2.1678494229325; Fri, 10 Mar 2023 16:23:49 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 16:22:54 -0800 In-Reply-To: <20230311002258.852397-1-seanjc@google.com> Mime-Version: 1.0 References: <20230311002258.852397-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230311002258.852397-24-seanjc@google.com> Subject: [PATCH v2 23/27] KVM: x86/mmu: Assert that correct locks are held for page write-tracking From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Zhenyu Wang , Zhi Wang Cc: kvm@vger.kernel.org, intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Yan Zhao , Ben Gardon X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760029996727809295?= X-GMAIL-MSGID: =?utf-8?q?1760029996727809295?= When adding/removing gfns to/from write-tracking, assert that mmu_lock is held for write, and that either slots_lock or kvm->srcu is held. mmu_lock must be held for write to protect gfn_write_track's refcount, and SRCU or slots_lock must be held to protect the memslot itself. Signed-off-by: Sean Christopherson Tested-by: Yan Zhao --- arch/x86/kvm/mmu/page_track.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/arch/x86/kvm/mmu/page_track.c b/arch/x86/kvm/mmu/page_track.c index 1993db4578e5..ffcd7ac66f9e 100644 --- a/arch/x86/kvm/mmu/page_track.c +++ b/arch/x86/kvm/mmu/page_track.c @@ -12,6 +12,7 @@ */ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +#include #include #include @@ -77,9 +78,6 @@ static void update_gfn_write_track(struct kvm_memory_slot *slot, gfn_t gfn, * add guest page to the tracking pool so that corresponding access on that * page will be intercepted. * - * It should be called under the protection both of mmu-lock and kvm->srcu - * or kvm->slots_lock. - * * @kvm: the guest instance we are interested in. * @slot: the @gfn belongs to. * @gfn: the guest page. @@ -87,6 +85,11 @@ static void update_gfn_write_track(struct kvm_memory_slot *slot, gfn_t gfn, void kvm_write_track_add_gfn(struct kvm *kvm, struct kvm_memory_slot *slot, gfn_t gfn) { + lockdep_assert_held_write(&kvm->mmu_lock); + + lockdep_assert_once(lockdep_is_held(&kvm->slots_lock) || + srcu_read_lock_held(&kvm->srcu)); + if (WARN_ON(!kvm_page_track_write_tracking_enabled(kvm))) return; @@ -107,9 +110,6 @@ EXPORT_SYMBOL_GPL(kvm_write_track_add_gfn); * remove the guest page from the tracking pool which stops the interception * of corresponding access on that page. * - * It should be called under the protection both of mmu-lock and kvm->srcu - * or kvm->slots_lock. - * * @kvm: the guest instance we are interested in. * @slot: the @gfn belongs to. * @gfn: the guest page. @@ -117,6 +117,11 @@ EXPORT_SYMBOL_GPL(kvm_write_track_add_gfn); void kvm_write_track_remove_gfn(struct kvm *kvm, struct kvm_memory_slot *slot, gfn_t gfn) { + lockdep_assert_held_write(&kvm->mmu_lock); + + lockdep_assert_once(lockdep_is_held(&kvm->slots_lock) || + srcu_read_lock_held(&kvm->srcu)); + if (WARN_ON(!kvm_page_track_write_tracking_enabled(kvm))) return; From patchwork Sat Mar 11 00:22:55 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67897 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp49226wrd; Fri, 10 Mar 2023 16:43:16 -0800 (PST) X-Google-Smtp-Source: AK7set/n3DkkcZQ2Bm/I1FlQIcwSpkWSe5G+kSURVMweQv6McJas8X/IUKdYWLDFuSgnNbJ/AGRk X-Received: by 2002:a17:90a:4146:b0:233:f393:f6cd with SMTP id m6-20020a17090a414600b00233f393f6cdmr28425771pjg.5.1678495396626; Fri, 10 Mar 2023 16:43:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678495396; cv=none; d=google.com; s=arc-20160816; b=nVn3T/avfuFOdAaH6TRPgoX3a3K9hiCJ9EbE22bqr9XzeEAYGtUaK93905TbhVpDRZ 13YLhc7eV5O+HZEWDJAoZCrp7epqqWlIKeMnYADIo6saD5WFGv1x7JTpDZciFYdBqzM3 LauGd1hFIUdrK2AREpcwuBq4tyIjYO9rvtrUlo7p4GjuTM0ONGsAvF/SJ+6ove+ZXQ8m w7gBNdUq/jxu8eGR+4GZ3M6pD2OKJqwxsKmmGrXc4H+/wfOP4NueGjms31/D7cldDsvR SB2qHu6bYJpStqsMIzkqFbw02wwZDcLE7k7/qPYaFlbpVz5IXh/Qv5j7bbinv3YbKwaj 8kHA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=SrFDAuRQYSdVAaKU/q0bsjDCV6a1lvsfWXmA+4AWzfU=; b=JZMU9OXN1zpfpyx0a6VMX0WYwy8nAZk+JgzLc+7HCsvtRUMhX9BU8Vqa1gUJk9XXRY 9C+NU/vQy48TtroaxCExxpLdahL3WFNNhkXsv12M2+kw4BHV5fYsdPM0AbLSOWa0UOvZ dAtiu9IrUPFEmQZqK+Uj6d8B5QNPdhBFMtJcz82c5+zh/tOse8EAoZhA7k/dA6uR/mZf W2FkOFzNe4Hnb/0JRYgVU2qw3idLYdhlxa3bGRcRElUJE9zMrhfSDkXr0RPvWXtaE9Xi Vbo4gs6YyM5prvSOCfsxT7waHajApfac9TSayZ5cKyL+SF3OvYp3y3M2gq1+HBqtqWVT XuCw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b="e4d4/rxV"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id ob7-20020a17090b390700b00226ddf6b7ddsi1024582pjb.181.2023.03.10.16.43.01; Fri, 10 Mar 2023 16:43:16 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b="e4d4/rxV"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230383AbjCKA0D (ORCPT + 99 others); Fri, 10 Mar 2023 19:26:03 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44982 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230221AbjCKAY6 (ORCPT ); Fri, 10 Mar 2023 19:24:58 -0500 Received: from mail-pj1-x104a.google.com (mail-pj1-x104a.google.com [IPv6:2607:f8b0:4864:20::104a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5DF083C78C for ; Fri, 10 Mar 2023 16:24:04 -0800 (PST) Received: by mail-pj1-x104a.google.com with SMTP id p9-20020a17090a930900b00237a7f862dfso5054384pjo.2 for ; Fri, 10 Mar 2023 16:24:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678494231; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=SrFDAuRQYSdVAaKU/q0bsjDCV6a1lvsfWXmA+4AWzfU=; b=e4d4/rxV1Zgd2/D2y/bvvJYmV3VmIQ2B+veoJmhzc1zL/Ok45X7QCHORoet2h5BRER OvyYYPlh+KjYyFnv51fNVwfqcSMtD3WCJ3Dqeqpl8zagOMT++Eucp+7VKyux3vDcum/n u9VknqIpRRzz39zajw9cxBkBioWmO1SWPo2U1WH/VlF4FCggvbOg5jwd9GdtQN3D8cqC W0uG+lHUt7Mn55Zg9Xqf5SpsPLYT4yMyWxbEUOBF9UBxuJPXodDGsYKKGfKZHMDtKzMP 2bN5l34k5e0hHNkV4u1rXG+4w/2uckITEagP6WXSw7O+XpcZrmBXZmwNn3YKoGEGngXh 8FUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678494231; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=SrFDAuRQYSdVAaKU/q0bsjDCV6a1lvsfWXmA+4AWzfU=; b=XjQoBsPwE347MJVHpMiaP3vIBKeeC/ZZ28wWNdDcV3ogxi9PB6M2cCQjPZcf/Youvl GbLeJtUpamhfvL0i6WowhjIjcbnLbUZRxfQfPcN1qkM5UFuFQx8fp9bHVkjM2W0CC1UC bv9rKkSFbwC+tL31nFkXAt3IAPpXCsvTGL0o8YmCv6T7zYCm1R3youJupcOwvffZn2xr 4Eb7a8SM7yV2cp3OLpw5jwsNLxQrGr6RXzjvl0kZKf0I4YL3yTQ77QKFvEePA1tFXk/B nxt1TB8Vf9bMaeC1HJ7d3FBzkVd9jpBbpvh+lVluTDmh/TiacC0/Fif+EzenOSNIxkEP GU0Q== X-Gm-Message-State: AO0yUKX/l/suS0EpfwESjsQRiVXqv36OxzdINEwTw985Ln5Y/evIc5a+ xCfS8NqfHoJuP4D80p51wuDF8/bLOq8= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:903:334f:b0:19f:22aa:692e with SMTP id ka15-20020a170903334f00b0019f22aa692emr312103plb.4.1678494231283; Fri, 10 Mar 2023 16:23:51 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 16:22:55 -0800 In-Reply-To: <20230311002258.852397-1-seanjc@google.com> Mime-Version: 1.0 References: <20230311002258.852397-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230311002258.852397-25-seanjc@google.com> Subject: [PATCH v2 24/27] KVM: x86/mmu: Bug the VM if write-tracking is used but not enabled From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Zhenyu Wang , Zhi Wang Cc: kvm@vger.kernel.org, intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Yan Zhao , Ben Gardon X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760029988996986119?= X-GMAIL-MSGID: =?utf-8?q?1760029988996986119?= Bug the VM if something attempts to write-track a gfn, but write-tracking isn't enabled. The VM is doomed (and KVM has an egregious bug) if KVM or KVMGT wants to shadow guest page tables but can't because write-tracking isn't enabled. Signed-off-by: Sean Christopherson --- arch/x86/kvm/mmu/page_track.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/x86/kvm/mmu/page_track.c b/arch/x86/kvm/mmu/page_track.c index ffcd7ac66f9e..327e73be62d6 100644 --- a/arch/x86/kvm/mmu/page_track.c +++ b/arch/x86/kvm/mmu/page_track.c @@ -90,7 +90,7 @@ void kvm_write_track_add_gfn(struct kvm *kvm, struct kvm_memory_slot *slot, lockdep_assert_once(lockdep_is_held(&kvm->slots_lock) || srcu_read_lock_held(&kvm->srcu)); - if (WARN_ON(!kvm_page_track_write_tracking_enabled(kvm))) + if (KVM_BUG_ON(!kvm_page_track_write_tracking_enabled(kvm), kvm)) return; update_gfn_write_track(slot, gfn, 1); @@ -122,7 +122,7 @@ void kvm_write_track_remove_gfn(struct kvm *kvm, lockdep_assert_once(lockdep_is_held(&kvm->slots_lock) || srcu_read_lock_held(&kvm->srcu)); - if (WARN_ON(!kvm_page_track_write_tracking_enabled(kvm))) + if (KVM_BUG_ON(!kvm_page_track_write_tracking_enabled(kvm), kvm)) return; update_gfn_write_track(slot, gfn, -1); From patchwork Sat Mar 11 00:22:56 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67887 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp48430wrd; Fri, 10 Mar 2023 16:40:53 -0800 (PST) X-Google-Smtp-Source: AK7set/p5t6ba/firQBwlS6MYsnQtL3O9LsuERXopAvZBcqujAHeZYYZWBZhYkVkA6BwWfGqQJ3W X-Received: by 2002:a05:6a20:3d0c:b0:cb:6e5d:6ce0 with SMTP id y12-20020a056a203d0c00b000cb6e5d6ce0mr32084449pzi.37.1678495252869; Fri, 10 Mar 2023 16:40:52 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678495252; cv=none; d=google.com; s=arc-20160816; b=YySiXjxkaYQ1wH17K9nZuxzhFfyUpWwBZoYWaTIK+Sw1MOFNK1cZRmBgxlNjcWMMLJ zWqYPNjXRyfihRFPKgZU0gf8soHxJWx9XpemoR8WhELGEC0hSEqn3j4RMzwsvkr6s8dB uDgfi/EMPe2et9Y8cCzW4L/suKLKTjSjvjCsl9wVOdmhYLwEJH4f1TtMwQzO69g7KFdY zj/Bo2hFAfWY9KTKszoWwyEAvfA1joerhKkzYTWNeruf/at6B7gP7oQKs6LnyrPbsMrc Jn69iO9MYtDhndCXvl0BEs6lAH0IO/qT9F/y1iVdCdrRQk6tuHBHE/V64lYsX4oG/0O5 +yVQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=RRkrAIsaiUsim3X1xrzgj6Qg6wccIAn12FNO0Z1AEVQ=; b=DslmJQGUV3TnfaQfIIxUJGdKa41wW5mIjcQHbU/VfQiPSgwMRF1duypojoCs8Jovbt NUGgDa13StkKNly6/w9x84QTknp/F1wm8aGd0k4XzNe0XaNNYKYF0NMKshc74I7HRqZ3 ZLZywfHesnPRUirk9ythD14RHoCe2QNFJU+6Qz+1QzpiV3dd/Nemsb2E3gd1CnHG91ht vVE2wsbgt/kIFexL7VkaNFvOZd67wTZISRj12cVY2oKQ8Slc9Tfm41R2cjy5046a1N6B PUzHrYMWi+6jRC1PGdhZjVFq3YQZiPo0C+zrDhHWGASUmYbN/mavCYyMgac3G5jswcbI 0eMQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=JFm0A7iN; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id z5-20020aa79e45000000b005a9d0456018si926284pfq.52.2023.03.10.16.40.37; Fri, 10 Mar 2023 16:40:52 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=JFm0A7iN; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231602AbjCKA0T (ORCPT + 99 others); Fri, 10 Mar 2023 19:26:19 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44886 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231411AbjCKAZe (ORCPT ); Fri, 10 Mar 2023 19:25:34 -0500 Received: from mail-pj1-x104a.google.com (mail-pj1-x104a.google.com [IPv6:2607:f8b0:4864:20::104a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 825871351D for ; Fri, 10 Mar 2023 16:24:16 -0800 (PST) Received: by mail-pj1-x104a.google.com with SMTP id q61-20020a17090a1b4300b00237d2fb8400so5067599pjq.0 for ; Fri, 10 Mar 2023 16:24:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678494233; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=RRkrAIsaiUsim3X1xrzgj6Qg6wccIAn12FNO0Z1AEVQ=; b=JFm0A7iNy6yLbEFrd2ziU7JCkOwOpcNh+NQIr1XpAKi2K35DE4bVfuvqrS37bWOOce oBZ79+LVNGpL6nxbvLO4ixPtUji/5PUl834E1ctRL5C3+LBCHsH+ngGPK49PX5P2DqYi MbZo6R4fx/n6oIDsljy/gS7XW+ofMYbrr7ttaoBJb0ru3wrrMPlR8Jmhl6m2OIrsn7pn viIYhr2MvceE2I36+2nxAoruBqrVv2FiXWr3jatPzrexhhSFTCGPbCAHSzS3qmhPKsGr oZ/Hw+mbFMURotSHzT69yGo49nuimXa+UzRyCNoBYCWqCgGB62O30L1zBFGlB0RHivCX 8A1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678494233; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=RRkrAIsaiUsim3X1xrzgj6Qg6wccIAn12FNO0Z1AEVQ=; b=KY7tqdsfm50br/tY0eY62RICfhL/0THDLPe6WNj3tfjNIuroEyU5qXp5HnB7CdHzhY /Cg1a8uF4wKL3xSwOrNHvADTK0N3/zHaB5AhKGfOUR69Q/J3cWzwnZx13lLOzofpjNSh Da73wtafK+uBGQXf7iylq5pwMg40kDoSw6+BJIJKeceWvIV34zb7TMOevYnM36HShDfr 1Y2sa6zCsBAtJKVEBpRQoIEyqCLDDSUwKxda492+yFHwpidR7hbruqCNak/GbNRQdeSA ldEdalXEKku/99VYBGkduM/v3mfuI7NQNw7kjHhDEgdbg1Fx5pBv4aw+i0zge/n5aFpj rrwQ== X-Gm-Message-State: AO0yUKWq3Q/X39FsO9pbVvnS0oj7GhfcKmFT13haF9YmWtGk2fVUNhxG 0ObPe8Mb1mPf7GNoNyUVD3+pCXqeT8E= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:902:edcd:b0:199:49d7:cead with SMTP id q13-20020a170902edcd00b0019949d7ceadmr10456698plk.11.1678494233199; Fri, 10 Mar 2023 16:23:53 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 16:22:56 -0800 In-Reply-To: <20230311002258.852397-1-seanjc@google.com> Mime-Version: 1.0 References: <20230311002258.852397-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230311002258.852397-26-seanjc@google.com> Subject: [PATCH v2 25/27] KVM: x86/mmu: Drop @slot param from exported/external page-track APIs From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Zhenyu Wang , Zhi Wang Cc: kvm@vger.kernel.org, intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Yan Zhao , Ben Gardon X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760029837981705699?= X-GMAIL-MSGID: =?utf-8?q?1760029837981705699?= Refactor KVM's exported/external page-track, a.k.a. write-track, APIs to take only the gfn and do the required memslot lookup in KVM proper. Forcing users of the APIs to get the memslot unnecessarily bleeds KVM internals into KVMGT and complicates usage of the APIs. No functional change intended. Signed-off-by: Sean Christopherson --- arch/x86/include/asm/kvm_page_track.h | 8 +-- arch/x86/kvm/mmu/mmu.c | 4 +- arch/x86/kvm/mmu/page_track.c | 86 ++++++++++++++++++++------- arch/x86/kvm/mmu/page_track.h | 5 ++ drivers/gpu/drm/i915/gvt/kvmgt.c | 37 +++--------- 5 files changed, 82 insertions(+), 58 deletions(-) diff --git a/arch/x86/include/asm/kvm_page_track.h b/arch/x86/include/asm/kvm_page_track.h index 20055064793a..415537ce45b4 100644 --- a/arch/x86/include/asm/kvm_page_track.h +++ b/arch/x86/include/asm/kvm_page_track.h @@ -43,11 +43,6 @@ struct kvm_page_track_notifier_node { struct kvm_page_track_notifier_node *node); }; -void kvm_write_track_add_gfn(struct kvm *kvm, - struct kvm_memory_slot *slot, gfn_t gfn); -void kvm_write_track_remove_gfn(struct kvm *kvm, struct kvm_memory_slot *slot, - gfn_t gfn); - #ifdef CONFIG_KVM_EXTERNAL_WRITE_TRACKING enum pg_level kvm_page_track_max_mapping_level(struct kvm *kvm, gfn_t gfn, enum pg_level max_level); @@ -58,6 +53,9 @@ kvm_page_track_register_notifier(struct kvm *kvm, void kvm_page_track_unregister_notifier(struct kvm *kvm, struct kvm_page_track_notifier_node *n); + +int kvm_write_track_add_gfn(struct kvm *kvm, gfn_t gfn); +int kvm_write_track_remove_gfn(struct kvm *kvm, gfn_t gfn); #endif /* CONFIG_KVM_EXTERNAL_WRITE_TRACKING */ #endif diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index 3d1aad44c2ec..cf59b44de912 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -820,7 +820,7 @@ static void account_shadowed(struct kvm *kvm, struct kvm_mmu_page *sp) /* the non-leaf shadow pages are keeping readonly. */ if (sp->role.level > PG_LEVEL_4K) - return kvm_write_track_add_gfn(kvm, slot, gfn); + return __kvm_write_track_add_gfn(kvm, slot, gfn); kvm_mmu_gfn_disallow_lpage(slot, gfn); @@ -866,7 +866,7 @@ static void unaccount_shadowed(struct kvm *kvm, struct kvm_mmu_page *sp) slots = kvm_memslots_for_spte_role(kvm, sp->role); slot = __gfn_to_memslot(slots, gfn); if (sp->role.level > PG_LEVEL_4K) - return kvm_write_track_remove_gfn(kvm, slot, gfn); + return __kvm_write_track_remove_gfn(kvm, slot, gfn); kvm_mmu_gfn_allow_lpage(slot, gfn); } diff --git a/arch/x86/kvm/mmu/page_track.c b/arch/x86/kvm/mmu/page_track.c index 327e73be62d6..69b6431b394b 100644 --- a/arch/x86/kvm/mmu/page_track.c +++ b/arch/x86/kvm/mmu/page_track.c @@ -74,16 +74,8 @@ static void update_gfn_write_track(struct kvm_memory_slot *slot, gfn_t gfn, slot->arch.gfn_write_track[index] += count; } -/* - * add guest page to the tracking pool so that corresponding access on that - * page will be intercepted. - * - * @kvm: the guest instance we are interested in. - * @slot: the @gfn belongs to. - * @gfn: the guest page. - */ -void kvm_write_track_add_gfn(struct kvm *kvm, struct kvm_memory_slot *slot, - gfn_t gfn) +void __kvm_write_track_add_gfn(struct kvm *kvm, struct kvm_memory_slot *slot, + gfn_t gfn) { lockdep_assert_held_write(&kvm->mmu_lock); @@ -104,18 +96,9 @@ void kvm_write_track_add_gfn(struct kvm *kvm, struct kvm_memory_slot *slot, if (kvm_mmu_slot_gfn_write_protect(kvm, slot, gfn, PG_LEVEL_4K)) kvm_flush_remote_tlbs(kvm); } -EXPORT_SYMBOL_GPL(kvm_write_track_add_gfn); -/* - * remove the guest page from the tracking pool which stops the interception - * of corresponding access on that page. - * - * @kvm: the guest instance we are interested in. - * @slot: the @gfn belongs to. - * @gfn: the guest page. - */ -void kvm_write_track_remove_gfn(struct kvm *kvm, - struct kvm_memory_slot *slot, gfn_t gfn) +void __kvm_write_track_remove_gfn(struct kvm *kvm, + struct kvm_memory_slot *slot, gfn_t gfn) { lockdep_assert_held_write(&kvm->mmu_lock); @@ -133,7 +116,6 @@ void kvm_write_track_remove_gfn(struct kvm *kvm, */ kvm_mmu_gfn_allow_lpage(slot, gfn); } -EXPORT_SYMBOL_GPL(kvm_write_track_remove_gfn); /* * check if the corresponding access on the specified guest page is tracked. @@ -274,4 +256,64 @@ enum pg_level kvm_page_track_max_mapping_level(struct kvm *kvm, gfn_t gfn, return max_level; } EXPORT_SYMBOL_GPL(kvm_page_track_max_mapping_level); + +/* + * add guest page to the tracking pool so that corresponding access on that + * page will be intercepted. + * + * @kvm: the guest instance we are interested in. + * @gfn: the guest page. + */ +int kvm_write_track_add_gfn(struct kvm *kvm, gfn_t gfn) +{ + struct kvm_memory_slot *slot; + int idx; + + idx = srcu_read_lock(&kvm->srcu); + + slot = gfn_to_memslot(kvm, gfn); + if (!slot) { + srcu_read_unlock(&kvm->srcu, idx); + return -EINVAL; + } + + write_lock(&kvm->mmu_lock); + __kvm_write_track_add_gfn(kvm, slot, gfn); + write_unlock(&kvm->mmu_lock); + + srcu_read_unlock(&kvm->srcu, idx); + + return 0; +} +EXPORT_SYMBOL_GPL(kvm_write_track_add_gfn); + +/* + * remove the guest page from the tracking pool which stops the interception + * of corresponding access on that page. + * + * @kvm: the guest instance we are interested in. + * @gfn: the guest page. + */ +int kvm_write_track_remove_gfn(struct kvm *kvm, gfn_t gfn) +{ + struct kvm_memory_slot *slot; + int idx; + + idx = srcu_read_lock(&kvm->srcu); + + slot = gfn_to_memslot(kvm, gfn); + if (!slot) { + srcu_read_unlock(&kvm->srcu, idx); + return -EINVAL; + } + + write_lock(&kvm->mmu_lock); + __kvm_write_track_remove_gfn(kvm, slot, gfn); + write_unlock(&kvm->mmu_lock); + + srcu_read_unlock(&kvm->srcu, idx); + + return 0; +} +EXPORT_SYMBOL_GPL(kvm_write_track_remove_gfn); #endif diff --git a/arch/x86/kvm/mmu/page_track.h b/arch/x86/kvm/mmu/page_track.h index 50d3278e8c69..62f98c6c5af3 100644 --- a/arch/x86/kvm/mmu/page_track.h +++ b/arch/x86/kvm/mmu/page_track.h @@ -15,6 +15,11 @@ int kvm_page_track_create_memslot(struct kvm *kvm, struct kvm_memory_slot *slot, unsigned long npages); +void __kvm_write_track_add_gfn(struct kvm *kvm, struct kvm_memory_slot *slot, + gfn_t gfn); +void __kvm_write_track_remove_gfn(struct kvm *kvm, + struct kvm_memory_slot *slot, gfn_t gfn); + bool kvm_gfn_is_write_tracked(struct kvm *kvm, const struct kvm_memory_slot *slot, gfn_t gfn); diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c index e5a18d92030b..898f1f1d308d 100644 --- a/drivers/gpu/drm/i915/gvt/kvmgt.c +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c @@ -1560,9 +1560,7 @@ static struct mdev_driver intel_vgpu_mdev_driver = { int intel_gvt_page_track_add(struct intel_vgpu *info, u64 gfn) { - struct kvm *kvm = info->vfio_device.kvm; - struct kvm_memory_slot *slot; - int idx; + int r; if (!test_bit(INTEL_VGPU_STATUS_ATTACHED, info->status)) return -ESRCH; @@ -1570,18 +1568,9 @@ int intel_gvt_page_track_add(struct intel_vgpu *info, u64 gfn) if (kvmgt_gfn_is_write_protected(info, gfn)) return 0; - idx = srcu_read_lock(&kvm->srcu); - slot = gfn_to_memslot(kvm, gfn); - if (!slot) { - srcu_read_unlock(&kvm->srcu, idx); - return -EINVAL; - } - - write_lock(&kvm->mmu_lock); - kvm_write_track_add_gfn(kvm, slot, gfn); - write_unlock(&kvm->mmu_lock); - - srcu_read_unlock(&kvm->srcu, idx); + r = kvm_write_track_add_gfn(info->vfio_device.kvm, gfn); + if (r) + return r; kvmgt_protect_table_add(info, gfn); return 0; @@ -1589,9 +1578,7 @@ int intel_gvt_page_track_add(struct intel_vgpu *info, u64 gfn) int intel_gvt_page_track_remove(struct intel_vgpu *info, u64 gfn) { - struct kvm *kvm = info->vfio_device.kvm; - struct kvm_memory_slot *slot; - int idx; + int r; if (!test_bit(INTEL_VGPU_STATUS_ATTACHED, info->status)) return -ESRCH; @@ -1599,17 +1586,9 @@ int intel_gvt_page_track_remove(struct intel_vgpu *info, u64 gfn) if (!kvmgt_gfn_is_write_protected(info, gfn)) return 0; - idx = srcu_read_lock(&kvm->srcu); - slot = gfn_to_memslot(kvm, gfn); - if (!slot) { - srcu_read_unlock(&kvm->srcu, idx); - return -EINVAL; - } - - write_lock(&kvm->mmu_lock); - kvm_write_track_remove_gfn(kvm, slot, gfn); - write_unlock(&kvm->mmu_lock); - srcu_read_unlock(&kvm->srcu, idx); + r = kvm_write_track_remove_gfn(info->vfio_device.kvm, gfn); + if (r) + return r; kvmgt_protect_table_del(info, gfn); return 0; From patchwork Sat Mar 11 00:22:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67892 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp48700wrd; Fri, 10 Mar 2023 16:41:44 -0800 (PST) X-Google-Smtp-Source: AK7set8V15f12GirD9t4QYRwBzKLmgN2hBZcJ/FY7zusOu55E4UMUEog6c0J5FN12thuii5eTbd4 X-Received: by 2002:a17:90a:1a03:b0:233:feb4:895f with SMTP id 3-20020a17090a1a0300b00233feb4895fmr27441960pjk.44.1678495304635; Fri, 10 Mar 2023 16:41:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678495304; cv=none; d=google.com; s=arc-20160816; b=kpFA+4kZlQQdXgIw3bnu8e9wI3TXb4NEV9j7Tbcbi7PcXGhW6KGOpPtW/8EttJnNuX ghFjH91NSyTb496GShjkbEwsEgQism0lhtRnlJGc9n5tHB8RrbdbqGZmHRTyeFzDAhtp cW7+ZVQo+cymm6Jgt+XKgSlOL2N73SHfQ9tRywiV1S3t5pfFjoexKlzgtQ6r3+09gG+r exQ9js8qN3gSJKdkQG4Z1bGQ7GA1kgzNtvo6UvRB2XO/OEWkLPtIFUoiWrsy+bEkxaVt Yjq0wxdvwwBbbInMZpZVGTJaeg9y4vlMW6GCBgs44+mx00/wn5oOsy6cL03mkAbFBLH3 26OQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=XkHJWZn0+/j+Dc2+hutiMpToPlFiQhTuav6vYTVTolU=; b=YX1UDk9usphhj6uW6nUm5+ZRaDO+1hnLX6XdpWFdMFRVu0KTXm++wUvoWpuOBHExKA MPvFo2QAirve4gI4/FqUn6PlbtcAcxAvnfgH8hqivXfTqbVIQuNsCLva/+dYjmB5hkS3 FitTi5gYAqvb2izi7JOQyFlYt2nF/wIhN/+BG1FfomD3/u3RBAZn8L1vKN1WXec5A17L mxrqE1JwQjoHeV61mYDthrVTQsdeI8SPWbe1xVoRBFCPPCEH9/azvzXRlSXXBh6ePB0U rAC+iy+N0rD3c1Se3M3olDg76aCosZSvDffsbpZ97QhSoTPO5mxdUel0eVB8rVIUV6WX Jhcw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=gdrr7PIt; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id d9-20020a63d709000000b005031abe8d8bsi962726pgg.745.2023.03.10.16.41.29; Fri, 10 Mar 2023 16:41:44 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=gdrr7PIt; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231629AbjCKA0Y (ORCPT + 99 others); Fri, 10 Mar 2023 19:26:24 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44914 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231500AbjCKAZk (ORCPT ); Fri, 10 Mar 2023 19:25:40 -0500 Received: from mail-yw1-x1149.google.com (mail-yw1-x1149.google.com [IPv6:2607:f8b0:4864:20::1149]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9F61E14693D for ; Fri, 10 Mar 2023 16:24:22 -0800 (PST) Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-536c6ce8d74so69667457b3.9 for ; Fri, 10 Mar 2023 16:24:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678494235; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=XkHJWZn0+/j+Dc2+hutiMpToPlFiQhTuav6vYTVTolU=; b=gdrr7PItFLFdwPfpHqXJmv50annnGEpbjPSGdch9nZXKd4H7535ILNZLpgHxGyanPv 4PfZkQ2LA6uDbbO+FsDi0qCrKD6YSwrPqe+e2TT6K8ATaMViQQZ01b8ngB4KtiYI5sOz VXmqdM7c3DZtX11oiLbCJpM8nbKraZjMSrPE35acuOv4s1T/tYJHUT8HHRBpCRFbkptv qpexrRNaTTbCcJHqF/fEHI/B8MfZcPe3qALNen7BnIwR4oYbEpMPKzNDyYZmh5N9kppH W6BbFX7SJ23fqsQcJZc6LcQV5sLax8oa9ybavP2sV/6SXLdcy62FLgcAa++18kxWj98y 8bhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678494235; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=XkHJWZn0+/j+Dc2+hutiMpToPlFiQhTuav6vYTVTolU=; b=72Od2YX9aILR2Q7nk/qEguRfQSWB33nbBLlr56ohfDfvRfljN5qYdRtTxT0D9SCduY GtlEy7pZVvBx0clZpw3zAkd0iy3mFPDB63qVpHhfRs/2YmCeJAbOp6mnDivEM5Cx4XeX DaDDTtgFuy4BPJVQ16xzk2YoO8qpRdDZQ6lSBe7dDJvBBu3hIvjlW5vD6YHU+z1ofFI/ m/RnWe9hPPfnv46Lmnzf5KqR5J6cZZCUEuaySx7crJimlXG5nw7VQMgXw8MXz+I2YcVW hFSRECjrQsjMvuOeF2ZY2jx0vPsKZTMIFew1KhLE5ILMnpa2J6YHfNVFHJeoM8FVgolz 9srA== X-Gm-Message-State: AO0yUKUEN9ASOqjLgIG4cLL3xmUUPZJwy+9jTRbyhr2B0QNDr459El5s tx9ZijfrhpSpjDOipexsCVm34RW37Z0= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a25:8d89:0:b0:b33:531b:3dd4 with SMTP id o9-20020a258d89000000b00b33531b3dd4mr1051323ybl.1.1678494235094; Fri, 10 Mar 2023 16:23:55 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 16:22:57 -0800 In-Reply-To: <20230311002258.852397-1-seanjc@google.com> Mime-Version: 1.0 References: <20230311002258.852397-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230311002258.852397-27-seanjc@google.com> Subject: [PATCH v2 26/27] KVM: x86/mmu: Handle KVM bookkeeping in page-track APIs, not callers From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Zhenyu Wang , Zhi Wang Cc: kvm@vger.kernel.org, intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Yan Zhao , Ben Gardon X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760029892459859457?= X-GMAIL-MSGID: =?utf-8?q?1760029892459859457?= Get/put references to KVM when a page-track notifier is (un)registered instead of relying on the caller to do so. Forcing the caller to do the bookkeeping is unnecessary and adds one more thing for users to get wrong, e.g. see commit 9ed1fdee9ee3 ("drm/i915/gvt: Get reference to KVM iff attachment to VM is successful"). Signed-off-by: Sean Christopherson Reviewed-by: Yan Zhao --- arch/x86/include/asm/kvm_page_track.h | 10 ++++------ arch/x86/kvm/mmu/page_track.c | 18 ++++++++++++------ drivers/gpu/drm/i915/gvt/kvmgt.c | 17 +++++++---------- 3 files changed, 23 insertions(+), 22 deletions(-) diff --git a/arch/x86/include/asm/kvm_page_track.h b/arch/x86/include/asm/kvm_page_track.h index 415537ce45b4..66a0d7c34311 100644 --- a/arch/x86/include/asm/kvm_page_track.h +++ b/arch/x86/include/asm/kvm_page_track.h @@ -47,12 +47,10 @@ struct kvm_page_track_notifier_node { enum pg_level kvm_page_track_max_mapping_level(struct kvm *kvm, gfn_t gfn, enum pg_level max_level); -void -kvm_page_track_register_notifier(struct kvm *kvm, - struct kvm_page_track_notifier_node *n); -void -kvm_page_track_unregister_notifier(struct kvm *kvm, - struct kvm_page_track_notifier_node *n); +int kvm_page_track_register_notifier(struct kvm *kvm, + struct kvm_page_track_notifier_node *n); +void kvm_page_track_unregister_notifier(struct kvm *kvm, + struct kvm_page_track_notifier_node *n); int kvm_write_track_add_gfn(struct kvm *kvm, gfn_t gfn); int kvm_write_track_remove_gfn(struct kvm *kvm, gfn_t gfn); diff --git a/arch/x86/kvm/mmu/page_track.c b/arch/x86/kvm/mmu/page_track.c index 69b6431b394b..6ca644d3c926 100644 --- a/arch/x86/kvm/mmu/page_track.c +++ b/arch/x86/kvm/mmu/page_track.c @@ -157,17 +157,22 @@ int kvm_page_track_init(struct kvm *kvm) * register the notifier so that event interception for the tracked guest * pages can be received. */ -void -kvm_page_track_register_notifier(struct kvm *kvm, - struct kvm_page_track_notifier_node *n) +int kvm_page_track_register_notifier(struct kvm *kvm, + struct kvm_page_track_notifier_node *n) { struct kvm_page_track_notifier_head *head; + if (!kvm || kvm->mm != current->mm) + return -ESRCH; + + kvm_get_kvm(kvm); + head = &kvm->arch.track_notifier_head; write_lock(&kvm->mmu_lock); hlist_add_head_rcu(&n->node, &head->track_notifier_list); write_unlock(&kvm->mmu_lock); + return 0; } EXPORT_SYMBOL_GPL(kvm_page_track_register_notifier); @@ -175,9 +180,8 @@ EXPORT_SYMBOL_GPL(kvm_page_track_register_notifier); * stop receiving the event interception. It is the opposed operation of * kvm_page_track_register_notifier(). */ -void -kvm_page_track_unregister_notifier(struct kvm *kvm, - struct kvm_page_track_notifier_node *n) +void kvm_page_track_unregister_notifier(struct kvm *kvm, + struct kvm_page_track_notifier_node *n) { struct kvm_page_track_notifier_head *head; @@ -187,6 +191,8 @@ kvm_page_track_unregister_notifier(struct kvm *kvm, hlist_del_rcu(&n->node); write_unlock(&kvm->mmu_lock); synchronize_srcu(&head->track_srcu); + + kvm_put_kvm(kvm); } EXPORT_SYMBOL_GPL(kvm_page_track_unregister_notifier); diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c index 898f1f1d308d..d16aced134b4 100644 --- a/drivers/gpu/drm/i915/gvt/kvmgt.c +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c @@ -668,21 +668,19 @@ static bool __kvmgt_vgpu_exist(struct intel_vgpu *vgpu) static int intel_vgpu_open_device(struct vfio_device *vfio_dev) { struct intel_vgpu *vgpu = vfio_dev_to_vgpu(vfio_dev); - - if (!vgpu->vfio_device.kvm || - vgpu->vfio_device.kvm->mm != current->mm) { - gvt_vgpu_err("KVM is required to use Intel vGPU\n"); - return -ESRCH; - } + int ret; if (__kvmgt_vgpu_exist(vgpu)) return -EEXIST; vgpu->track_node.track_write = kvmgt_page_track_write; vgpu->track_node.track_remove_region = kvmgt_page_track_remove_region; - kvm_get_kvm(vgpu->vfio_device.kvm); - kvm_page_track_register_notifier(vgpu->vfio_device.kvm, - &vgpu->track_node); + ret = kvm_page_track_register_notifier(vgpu->vfio_device.kvm, + &vgpu->track_node); + if (ret) { + gvt_vgpu_err("KVM is required to use Intel vGPU\n"); + return ret; + } set_bit(INTEL_VGPU_STATUS_ATTACHED, vgpu->status); @@ -717,7 +715,6 @@ static void intel_vgpu_close_device(struct vfio_device *vfio_dev) kvm_page_track_unregister_notifier(vgpu->vfio_device.kvm, &vgpu->track_node); - kvm_put_kvm(vgpu->vfio_device.kvm); kvmgt_protect_table_destroy(vgpu); gvt_cache_destroy(vgpu); From patchwork Sat Mar 11 00:22:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67883 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp47498wrd; Fri, 10 Mar 2023 16:37:27 -0800 (PST) X-Google-Smtp-Source: AK7set83iexXcw/FtmVUAr9+fbYGR0Sl+gKet4CGBX6leMiABJMaqryzuIE/r/vKnH+PlN9mP0OZ X-Received: by 2002:a05:6a20:3d0b:b0:c9:9312:5f1d with SMTP id y11-20020a056a203d0b00b000c993125f1dmr35959562pzi.4.1678495046978; Fri, 10 Mar 2023 16:37:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678495046; cv=none; d=google.com; s=arc-20160816; b=tkbpgzx19f//RaMgXVSnP8TKdZzBW1JB90/13LjGNycjBJi4roiWfmkc0RxsKGcsVh 7J8oOVjDgFWoSVzSjtFmMMYq2MpAYX6t2OwAaqkXl12aZpbCfQiJkmHeODkdsZw83Elc S2+SdOn+fTzUx2iGSSDgtyqGroka6lDrahVJmDm9DH+UkXJPTqXKPxdxJLB/GrtXD9Mr PPL7Wq5Nr0pqMEJHQ+R/cFeYPjioNLxMhjf94lwYygjidxvzcolNVLjLsQM0sSDX6Hmi SZkRS3rVlqIv7BwnDeWMvmAZ+l9Z/lrXc8tb98wrXoijhN+87a9VGhLFkK8ejLBna2Ai Ueqg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=x2tVYLFtu4+/4LAPARn3E33zkHftYTv9vOX58pVkWHM=; b=PaioeoQAv/rxn18+UElq1yYyCVsLNWN9tJc9gwdgcce5XgPo5ilqCM196ZFEvoCI82 +mW/FWseJy2GFPEZP15WBiv+B6H8mEHGhCPyqsWZkXjn7MIM/eigqDINYQm1iV1UDWzT Who8FWL+SX+vCakzBDpfllrVbd7X5MWv8qUChGEEBQU61+m90EZmjqV2CdzhWpZUjLaE VjQXlbttPOCN2rAma9Kb3XOsGLHJ0cuGlrj2HywcdH3IEmjbIsgmSmi8VbyGkd1eGnMn USliTdS/6kvYJL/TCp/A5C+Lt3BbKurC99XTdPZeVv+ZPTDd1Q+XleZ8nFWWHxhtgKX6 t8GQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=eCTAn9KE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id i16-20020aa796f0000000b005e37ee6d9c1si844483pfq.281.2023.03.10.16.37.14; Fri, 10 Mar 2023 16:37:26 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=eCTAn9KE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231646AbjCKA02 (ORCPT + 99 others); Fri, 10 Mar 2023 19:26:28 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44948 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231522AbjCKAZl (ORCPT ); Fri, 10 Mar 2023 19:25:41 -0500 Received: from mail-pg1-x549.google.com (mail-pg1-x549.google.com [IPv6:2607:f8b0:4864:20::549]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1BA7522CAA for ; Fri, 10 Mar 2023 16:24:22 -0800 (PST) Received: by mail-pg1-x549.google.com with SMTP id d22-20020a63d716000000b00502e3fb8ff3so1649485pgg.10 for ; Fri, 10 Mar 2023 16:24:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678494237; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=x2tVYLFtu4+/4LAPARn3E33zkHftYTv9vOX58pVkWHM=; b=eCTAn9KE2O9xKHWOxj1VUE/UZXTx6Y1mDDTMlkwbdR0Y57s9PpUrM5h9i2cHbxsnki t0637AV0rExfo48KvvrqnyadfUnxBMwpuXsf8bzU9+CnuuH5alcmDXRXkCkOTywDKJEk XcU2Ssqaps8aM9ojs9FjhyBohQxSawze04pO8kWuerEOURvl7R99eb/R/ZcwEpa5D8mU TLGucsOnbjVeWTw9U9PMc6v0xVNdb3bFtznClK5hKBNddFaRNaHEDwN47WSFEGxmM3iV bkMq0Bn8TSiu6JuJ5U2kGO4Zf7ybt6AJeJqWZFsgqPjAfErV+ulDY+iqxXYTBp35bmjn a4Pw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678494237; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=x2tVYLFtu4+/4LAPARn3E33zkHftYTv9vOX58pVkWHM=; b=fKaQ3/afSKuwDoYBCd1GMQHt6vTB+mcZ57hrO1pwBJvtVxXdIUVdo1CjW+imYZsfUf KCVcYkrKhlLjtYyjbJNkaKDGTT3v4dWH631ZibSDtypL/1qVFikSTDeVyNz/CDFTgCNR Pjv9GbsoO26Hhng9iyHaAyFgyiMAALft/dEV9gGd+uUFL8/HcX5Qt6HfrobxLotglaBY 6N+Ub724Sb3qs1wjrWSpzFnWbQBNV7Ys2OA2WVjz0zVcjPW50aAOBfyHshPpWwtIvWaB XqWQWIiwkh/siCpcqT8bb88KwnQWCJ3fr+neNoFjOKuwgoxkJ0AJv/zS0mlCu2RqVuaW GnjQ== X-Gm-Message-State: AO0yUKUb5aGB3BEmLjvM7aNCjE52zkjDHIF0LwBuydbM3lZFzBO+SdNK 622Dfm4X7+Cy4ZjY9YyICjKNSz7MIKg= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:90a:7783:b0:237:9029:c29b with SMTP id v3-20020a17090a778300b002379029c29bmr10323383pjk.0.1678494237678; Fri, 10 Mar 2023 16:23:57 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 16:22:58 -0800 In-Reply-To: <20230311002258.852397-1-seanjc@google.com> Mime-Version: 1.0 References: <20230311002258.852397-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230311002258.852397-28-seanjc@google.com> Subject: [PATCH v2 27/27] drm/i915/gvt: Drop final dependencies on KVM internal details From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Zhenyu Wang , Zhi Wang Cc: kvm@vger.kernel.org, intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Yan Zhao , Ben Gardon X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760029622481303723?= X-GMAIL-MSGID: =?utf-8?q?1760029622481303723?= Open code gpa_to_gfn() in kvmgt_page_track_write() and drop KVMGT's dependency on kvm_host.h, i.e. include only kvm_page_track.h. KVMGT assumes "gfn == gpa >> PAGE_SHIFT" all over the place, including a few lines below in the same function with the same gpa, i.e. there's no reason to use KVM's helper for this one case. No functional change intended. Signed-off-by: Sean Christopherson Reviewed-by: Yan Zhao --- drivers/gpu/drm/i915/gvt/gvt.h | 3 ++- drivers/gpu/drm/i915/gvt/kvmgt.c | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/i915/gvt/gvt.h b/drivers/gpu/drm/i915/gvt/gvt.h index 2d65800d8e93..53a0a42a50db 100644 --- a/drivers/gpu/drm/i915/gvt/gvt.h +++ b/drivers/gpu/drm/i915/gvt/gvt.h @@ -34,10 +34,11 @@ #define _GVT_H_ #include -#include #include #include +#include + #include "i915_drv.h" #include "intel_gvt.h" diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c index d16aced134b4..798d04481f03 100644 --- a/drivers/gpu/drm/i915/gvt/kvmgt.c +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c @@ -1599,7 +1599,7 @@ static void kvmgt_page_track_write(gpa_t gpa, const u8 *val, int len, mutex_lock(&info->vgpu_lock); - if (kvmgt_gfn_is_write_protected(info, gpa_to_gfn(gpa))) + if (kvmgt_gfn_is_write_protected(info, gpa >> PAGE_SHIFT)) intel_vgpu_page_track_handler(info, gpa, (void *)val, len);