Message ID | 20221223005739.1295925-1-seanjc@google.com |
---|---|
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:e747:0:0:0:0:0 with SMTP id c7csp69129wrn; Thu, 22 Dec 2022 16:58:23 -0800 (PST) X-Google-Smtp-Source: AMrXdXvUC5sgUWTz61UiWsZJHJa1Po1Vblsw4hP7C+bn8lIhoO1YevcOpdd2JZyEPxNnCTUWVKj0 X-Received: by 2002:a62:1909:0:b0:574:6795:ff5e with SMTP id 9-20020a621909000000b005746795ff5emr23805944pfz.24.1671757103018; Thu, 22 Dec 2022 16:58:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1671757103; cv=none; d=google.com; s=arc-20160816; b=AW7YayhNIttqu6DGTUbwf+Ufzo3eFIdhe2ffM14IvPQSY68Jpr4qGxqr1vYqfpJ16i t+CVzRp4udFKgwkYXzNlJMxJN0jUYYleLQ/jMSzteDr87Fw8C1TbqOk6Jn+eRNhX0TH+ JQoF1YxWtwTb0oS7hK38W1PsdYkjl09X94ShS1oX/vYrQ1c3+J1PtqCNAALyjoNVcK9d lL5KgiHerrRVGHS6zSObI9Cq6cXM+VUlpX0lRTF2kX662lad3ZFQbkEWPXBmbvtuSr92 V0QD8arsD+F6NvvzZHS6FRltU2VvwkSLsJ0rFKDBv2EYoq6FHPdWgS58UQN912fmpduP 4eDA== 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:mime-version:date :reply-to:dkim-signature; bh=b29o5HSnDYTmWKzTtpaXEeYgrw2TDFKr2p0Q8+HjsNM=; b=YMFO5PrSnI11hPLVL3bGNofeHw0prooyvn3D2sYhY1ZBh5FmoeXIYL3FPpEYaaD0OW bbHudXbJcF9Mp1+CAkfWoqNfNxmlP6wLP7gynCu307sFzllvNMI9RClc8Mj7R/+8rWEU fpt++ZriDbZnLvGz3mKeP5InVCGgqcnAkC5NmTaahXPmYQTIa+SvS3SpueVD4oORDxi1 oVnUsi0El6DVSSLn1qJWXoI0p9IX8aagE8vDq09Zi4DRyKpRPoekglxY8QAxnybzeVAW oStNSyK8tPPHGP+/35HER4VKXQdZgGu1RQk3EdOWB8yLkwtzkLw0fm4stdYZIfa8KhZF NtLg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=ElUFGASv; 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 i27-20020aa796fb000000b0056242234478si1940913pfq.164.2022.12.22.16.58.09; Thu, 22 Dec 2022 16:58:22 -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=ElUFGASv; 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 S230040AbiLWA5t (ORCPT <rfc822;pacteraone@gmail.com> + 99 others); Thu, 22 Dec 2022 19:57:49 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56910 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229506AbiLWA5r (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Thu, 22 Dec 2022 19:57:47 -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 5D56521892 for <linux-kernel@vger.kernel.org>; Thu, 22 Dec 2022 16:57:46 -0800 (PST) Received: by mail-pj1-x104a.google.com with SMTP id r17-20020a17090aa09100b0021903e75f14so1770662pjp.9 for <linux-kernel@vger.kernel.org>; Thu, 22 Dec 2022 16:57:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:mime-version:date:reply-to:from:to:cc :subject:date:message-id:reply-to; bh=b29o5HSnDYTmWKzTtpaXEeYgrw2TDFKr2p0Q8+HjsNM=; b=ElUFGASvo+SEqmf91jQ7pr4vVjOmXfyFl7KvLXWpDNbxIU5k3lCNmSBWHsYc4izHGT K9reZTzg3Pi/r4XOJJU5+EuAWfrR/NQCZdtaWZN4UuzSAX32pxagnCxgQAKIyqGZl1q5 fInmcehDeJjBJFNRRpgH6ZAXA5DTPoJLacO4DmKKMttX0uFBC9UXy1PpG5QSuh9Vu/QU FNXDe4PQz7L3uuyUHN7Q6TjQJEogC6Fw461JKiT+qo7B1nna606DzaowIs8M33Iho1U6 HtVF8X79gFbB2PPPLE+aK7jxdRtvJZwGkfemnOq/WGU3ktjrHYgjfc1LyUg3h2n1yF7O jWdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:mime-version:date:reply-to :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=b29o5HSnDYTmWKzTtpaXEeYgrw2TDFKr2p0Q8+HjsNM=; b=Xr6MKMldrd2wjkb8L4uHmQtDVA6E/6h1l7iaAwxS9oK00LBy4ekhIL1rGnAHXMbWzG FsML4OgvHAjG4IjwqWdDgjxidkbWRhAIKJUzKjv8hjFvUydq7nMHRwU3LvWr3ynOo9uR eLOIQNIo+NJ41biKQnH09N0Uc529S2bRxfS1xHHyx20zjM4BlzwcV/sRJykXhM5AkrmI AewRrKVchLGrInv5XWUKFvUD6CJGoMfAie6dIQu1lDsPXqzaqhbc76oyjB7s/XOtO9Gj 09WMK8e8znMiM1WcQ4BkyCYQOVIctCZ3QvXyYsQM42vFrmQyx1N5exHzjU9NT1Q5XJne VnDw== X-Gm-Message-State: AFqh2kqQkCVTigH0lHpLJsvGqVOAzlinCXKixKViE85frRlZk+89Enia BphKXIsfo1OUlUqdR7+F/FA7nHyZylk= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:90a:c292:b0:219:828e:ba8 with SMTP id f18-20020a17090ac29200b00219828e0ba8mr927461pjt.118.1671757065401; Thu, 22 Dec 2022 16:57:45 -0800 (PST) Reply-To: Sean Christopherson <seanjc@google.com> Date: Fri, 23 Dec 2022 00:57:12 +0000 Mime-Version: 1.0 X-Mailer: git-send-email 2.39.0.314.g84b9a713c41-goog Message-ID: <20221223005739.1295925-1-seanjc@google.com> Subject: [PATCH 00/27] drm/i915/gvt: KVM: KVMGT fixes and page-track cleanups From: Sean Christopherson <seanjc@google.com> To: Sean Christopherson <seanjc@google.com>, Paolo Bonzini <pbonzini@redhat.com>, Zhenyu Wang <zhenyuw@linux.intel.com>, Zhi Wang <zhi.a.wang@intel.com> Cc: kvm@vger.kernel.org, intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Yan Zhao <yan.y.zhao@intel.com>, Ben Gardon <bgardon@google.com> Content-Type: text/plain; charset="UTF-8" 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: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1752964375988863450?= X-GMAIL-MSGID: =?utf-8?q?1752964375988863450?= |
Series |
drm/i915/gvt: KVM: KVMGT fixes and page-track cleanups
|
|
Message
Sean Christopherson
Dec. 23, 2022, 12:57 a.m. UTC
Fix a variety of found-by-inspection bugs in KVMGT, and overhaul KVM's page-track APIs to provide a leaner and cleaner interface. The motivation for this series is to (significantly) reduce the number of KVM APIs that KVMGT uses, with a long-term goal of making all kvm_host.h headers KVM-internal. That said, I think the cleanup itself is worthwhile, e.g. KVMGT really shouldn't be touching kvm->mmu_lock. Note! The KVMGT changes are compile tested only as I don't have the necessary hardware (AFAIK). Testing, and lots of it, on the KVMGT side of things is needed and any help on that front would be much appreciated. Sean Christopherson (24): drm/i915/gvt: Verify pfn is "valid" before dereferencing "struct page" KVM: x86/mmu: Factor out helper to get max mapping size of a memslot drm/i915/gvt: Incorporate KVM memslot info into check for 2MiB GTT entry drm/i915/gvt: Verify VFIO-pinned page is THP when shadowing 2M gtt entry drm/i915/gvt: Put the page reference obtained by KVM's gfn_to_pfn() drm/i915/gvt: Don't rely on KVM's gfn_to_pfn() to query possible 2M GTT drm/i915/gvt: Use an "unsigned long" to iterate over memslot gfns drm/i915/gvt: Hoist acquisition of vgpu_lock out to kvmgt_page_track_write() drm/i915/gvt: Protect gfn hash table with dedicated mutex KVM: x86/mmu: Don't rely on page-track mechanism to flush on memslot change KVM: x86/mmu: Don't bounce through page-track mechanism for guest PTEs KVM: drm/i915/gvt: Drop @vcpu from KVM's ->track_write() hook KVM: x86: Reject memslot MOVE operations if KVMGT is attached drm/i915/gvt: Don't bother removing write-protection on to-be-deleted slot KVM: x86/mmu: Move KVM-only page-track declarations to internal header KVM: x86/mmu: Use page-track notifiers iff there are external users KVM: x86/mmu: Drop infrastructure for multiple page-track modes KVM: x86/mmu: Rename page-track APIs to reflect the new reality KVM: x86/mmu: Assert that correct locks are held for page write-tracking KVM: x86/mmu: Bug the VM if write-tracking is used but not enabled KVM: x86/mmu: Drop @slot param from exported/external page-track APIs KVM: x86/mmu: Handle KVM bookkeeping in page-track APIs, not callers KVM: x86/mmu: Add page-track API to query if a gfn is valid drm/i915/gvt: Drop final dependencies on KVM internal details Yan Zhao (3): KVM: x86: Add a new page-track hook to handle memslot deletion drm/i915/gvt: switch from ->track_flush_slot() to ->track_remove_region() KVM: x86: Remove the unused page-track hook track_flush_slot() arch/x86/include/asm/kvm_host.h | 16 +- arch/x86/include/asm/kvm_page_track.h | 67 +++--- arch/x86/kvm/mmu.h | 2 + arch/x86/kvm/mmu/mmu.c | 61 +++--- arch/x86/kvm/mmu/mmu_internal.h | 2 + arch/x86/kvm/mmu/page_track.c | 283 +++++++++++++++----------- arch/x86/kvm/mmu/page_track.h | 59 ++++++ arch/x86/kvm/x86.c | 13 +- drivers/gpu/drm/i915/gvt/gtt.c | 45 ++-- drivers/gpu/drm/i915/gvt/gvt.h | 4 +- drivers/gpu/drm/i915/gvt/kvmgt.c | 138 ++++++------- drivers/gpu/drm/i915/gvt/page_track.c | 10 +- drivers/gpu/drm/i915/gvt/vgpu.c | 1 + 13 files changed, 386 insertions(+), 315 deletions(-) create mode 100644 arch/x86/kvm/mmu/page_track.h base-commit: 9d75a3251adfbcf444681474511b58042a364863
Comments
On Fri, Dec 23, 2022 at 12:57:12AM +0000, Sean Christopherson wrote: > Fix a variety of found-by-inspection bugs in KVMGT, and overhaul KVM's > page-track APIs to provide a leaner and cleaner interface. The motivation > for this series is to (significantly) reduce the number of KVM APIs that > KVMGT uses, with a long-term goal of making all kvm_host.h headers > KVM-internal. That said, I think the cleanup itself is worthwhile, > e.g. KVMGT really shouldn't be touching kvm->mmu_lock. > > Note! The KVMGT changes are compile tested only as I don't have the > necessary hardware (AFAIK). Testing, and lots of it, on the KVMGT side > of things is needed and any help on that front would be much appreciated. hi Sean, Thanks for the patch! Could you also provide the commit id that this series is based on? I applied them on top of latest master branch (6.1.0+, 8395ae05cb5a2e31d36106e8c85efa11cda849be) in repo https://github.com/torvalds/linux.git, yet met some conflicts and I fixed them manually. (patch 11 and patch 25). A rough test shows that below mutex_init is missing. But even with this fix, I still met guest hang during guest boots up. Will look into it and have a detailed review next week. diff --git a/drivers/gpu/drm/i915/gvt/vgpu.c b/drivers/gpu/drm/i915/gvt/vgpu.c index a7ac2ec00196..c274b6a05555 100644 --- a/drivers/gpu/drm/i915/gvt/vgpu.c +++ b/drivers/gpu/drm/i915/gvt/vgpu.c @@ -331,6 +331,7 @@ int intel_gvt_create_vgpu(struct intel_vgpu *vgpu, vgpu->id = ret; vgpu->sched_ctl.weight = conf->weight; mutex_init(&vgpu->vgpu_lock); + mutex_init(&vgpu->gfn_lock); mutex_init(&vgpu->dmabuf_lock); INIT_LIST_HEAD(&vgpu->dmabuf_obj_list_head); INIT_RADIX_TREE(&vgpu->page_track_tree, GFP_KERNEL); Thanks Yan
On Fri, Dec 23, 2022, Yan Zhao wrote: > On Fri, Dec 23, 2022 at 12:57:12AM +0000, Sean Christopherson wrote: > > Fix a variety of found-by-inspection bugs in KVMGT, and overhaul KVM's > > page-track APIs to provide a leaner and cleaner interface. The motivation > > for this series is to (significantly) reduce the number of KVM APIs that > > KVMGT uses, with a long-term goal of making all kvm_host.h headers > > KVM-internal. That said, I think the cleanup itself is worthwhile, > > e.g. KVMGT really shouldn't be touching kvm->mmu_lock. > > > > Note! The KVMGT changes are compile tested only as I don't have the > > necessary hardware (AFAIK). Testing, and lots of it, on the KVMGT side > > of things is needed and any help on that front would be much appreciated. > hi Sean, > Thanks for the patch! > Could you also provide the commit id that this series is based on? The commit ID is provided in the cover letter: base-commit: 9d75a3251adfbcf444681474511b58042a364863 Though you might have a hard time finding that commit as it's from an old version of kvm/queue that's probably since been force pushed. > I applied them on top of latest master branch (6.1.0+, > 8395ae05cb5a2e31d36106e8c85efa11cda849be) in repo > https://github.com/torvalds/linux.git, yet met some conflicts and I > fixed them manually. (patch 11 and patch 25). > > A rough test shows that below mutex_init is missing. > But even with this fix, I still met guest hang during guest boots up. > Will look into it and have a detailed review next week. Thanks again for the reviews and testing! I'll get a v2 out in the next week or so (catching up from holidays) and will be more explicit in documenting the base version.
On Wed, Jan 04, 2023 at 01:01:13AM +0000, Sean Christopherson wrote: > On Fri, Dec 23, 2022, Yan Zhao wrote: > > On Fri, Dec 23, 2022 at 12:57:12AM +0000, Sean Christopherson wrote: > > > Fix a variety of found-by-inspection bugs in KVMGT, and overhaul KVM's > > > page-track APIs to provide a leaner and cleaner interface. The motivation > > > for this series is to (significantly) reduce the number of KVM APIs that > > > KVMGT uses, with a long-term goal of making all kvm_host.h headers > > > KVM-internal. That said, I think the cleanup itself is worthwhile, > > > e.g. KVMGT really shouldn't be touching kvm->mmu_lock. > > > > > > Note! The KVMGT changes are compile tested only as I don't have the > > > necessary hardware (AFAIK). Testing, and lots of it, on the KVMGT side > > > of things is needed and any help on that front would be much appreciated. > > hi Sean, > > Thanks for the patch! > > Could you also provide the commit id that this series is based on? > > The commit ID is provided in the cover letter: > > base-commit: 9d75a3251adfbcf444681474511b58042a364863 > > Though you might have a hard time finding that commit as it's from an old > version of kvm/queue that's probably since been force pushed. > > > I applied them on top of latest master branch (6.1.0+, > > 8395ae05cb5a2e31d36106e8c85efa11cda849be) in repo > > https://github.com/torvalds/linux.git, yet met some conflicts and I > > fixed them manually. (patch 11 and patch 25). > > > > A rough test shows that below mutex_init is missing. > > But even with this fix, I still met guest hang during guest boots up. > > Will look into it and have a detailed review next week. > > Thanks again for the reviews and testing! I'll get a v2 out in the next week or > so (catching up from holidays) and will be more explicit in documenting the base > version. That's fine and it's a pleasure to me :)