kvm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 00/29] drm/i915/gvt: KVM: KVMGT fixes and page-track cleanups
@ 2023-07-29  1:35 Sean Christopherson
  2023-07-29  1:35 ` [PATCH v4 01/29] drm/i915/gvt: Verify pfn is "valid" before dereferencing "struct page" Sean Christopherson
                   ` (29 more replies)
  0 siblings, 30 replies; 52+ messages in thread
From: Sean Christopherson @ 2023-07-29  1:35 UTC (permalink / raw)
  To: Sean Christopherson, Paolo Bonzini, Zhenyu Wang, Zhi Wang
  Cc: kvm, intel-gvt-dev, intel-gfx, linux-kernel, Yan Zhao, Yongwei Ma,
	Ben Gardon

Fix a handful of minor 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.

If there are no objections or issues, my plan is to take this through the
KVM tree for 6.6 (I had it ready early last week, and then forgot to actually
post v4, /facepalm).

Thanks much for all the help!

v4:
 - Collect tags. [Yongwei, Zhi, Yan]
 - Add a patch to fix a benign (other than a WARN) bug where KVMGT would
   attempt to unpin an empty range. [Yan]
 - Move the check for an attached vGPU all the way up to shadow_ppgtt_mm(). [Zhi]

v3:
 - https://lore.kernel.org/all/20230513003600.818142-1-seanjc@google.com
 - Collect reviewed/tested tags (I apologize if I missed any, I manually
   gathered them this time due to a goof in my workflow). [Yan]
 - Drop check on max KVM paging size from KVMGT. [Yan]
 - Drop the explicit change on THP pages, and instead validate that the
   pfns (not struct page pointers) are contiguous. [Yan]
 - Fix buggy intel_gvt_dma_map_guest_page() usage by eliminating a helper
   for shadowing 2MiB GTT entries. [Yan]
 - Move kvm_arch_flush_shadow_{all,memslot}() to mmu.c instead of exposing
   kvm_mmu_zap_all_fast() outside of mmu.c. [Yan]
 - Fix an alignment goof in hlist_for_each_entry_srcu() usage. [Yan]
 - Wrap full definition of external page track structures with
   CONFIG_KVM_EXTERNAL_WRITE_TRACKING. [Yan]

v2:
 - https://lore.kernel.org/all/20230311002258.852397-1-seanjc@google.com
 - Reuse vgpu_lock to protect gfn hash instead of introducing a new (and
   buggy) mutext. [Yan]
 - Remove a spurious return from kvm_page_track_init(). [Yan]
 - Take @kvm directly in the inner __kvm_page_track_write(). [Yan]
 - Delete the gfn sanity check that relies on kvm_is_visible_gfn() instead
   of providing a dedicated interface. [Yan]

v1: https://lore.kernel.org/lkml/20221223005739.1295925-1-seanjc@google.com

Sean Christopherson (24):
  drm/i915/gvt: Verify pfn is "valid" before dereferencing "struct page"
  drm/i915/gvt: Verify hugepages are contiguous in physical address
    space
  drm/i915/gvt: Put the page reference obtained by KVM's gfn_to_pfn()
  drm/i915/gvt: Explicitly check that vGPU is attached before shadowing
  drm/i915/gvt: Error out on an attempt to shadowing an unknown GTT
    entry type
  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: Drop unused helper intel_vgpu_reset_gtt()
  drm/i915/gvt: Protect gfn hash table with vgpu_lock
  KVM: x86/mmu: Move kvm_arch_flush_shadow_{all,memslot}() to mmu.c
  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
  drm/i915/gvt: Drop final dependencies on KVM internal details

Yan Zhao (5):
  drm/i915/gvt: remove interface intel_gvt_is_valid_gfn
  drm/i915/gvt: Don't try to unpin an empty page range
  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 |  73 +++-----
 arch/x86/kvm/mmu.h                    |   2 +
 arch/x86/kvm/mmu/mmu.c                |  51 +++--
 arch/x86/kvm/mmu/page_track.c         | 256 +++++++++++++-------------
 arch/x86/kvm/mmu/page_track.h         |  58 ++++++
 arch/x86/kvm/x86.c                    |  22 +--
 drivers/gpu/drm/i915/gvt/gtt.c        | 102 ++--------
 drivers/gpu/drm/i915/gvt/gtt.h        |   1 -
 drivers/gpu/drm/i915/gvt/gvt.h        |   3 +-
 drivers/gpu/drm/i915/gvt/kvmgt.c      | 120 +++++-------
 drivers/gpu/drm/i915/gvt/page_track.c |  10 +-
 12 files changed, 322 insertions(+), 392 deletions(-)
 create mode 100644 arch/x86/kvm/mmu/page_track.h


base-commit: fdf0eaf11452d72945af31804e2a1048ee1b574c
-- 
2.41.0.487.g6d72f3e995-goog


^ permalink raw reply	[flat|nested] 52+ messages in thread

end of thread, other threads:[~2023-08-31 16:11 UTC | newest]

Thread overview: 52+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-07-29  1:35 [PATCH v4 00/29] drm/i915/gvt: KVM: KVMGT fixes and page-track cleanups Sean Christopherson
2023-07-29  1:35 ` [PATCH v4 01/29] drm/i915/gvt: Verify pfn is "valid" before dereferencing "struct page" Sean Christopherson
2023-08-01 11:21   ` Wang, Zhi A
2023-07-29  1:35 ` [PATCH v4 02/29] drm/i915/gvt: remove interface intel_gvt_is_valid_gfn Sean Christopherson
2023-07-29  1:35 ` [PATCH v4 03/29] drm/i915/gvt: Verify hugepages are contiguous in physical address space Sean Christopherson
2023-08-01  1:47   ` Yan Zhao
2023-08-01 11:22     ` Wang, Zhi A
2023-07-29  1:35 ` [PATCH v4 04/29] drm/i915/gvt: Don't try to unpin an empty page range Sean Christopherson
2023-08-01 11:18   ` Wang, Zhi A
2023-07-29  1:35 ` [PATCH v4 05/29] drm/i915/gvt: Put the page reference obtained by KVM's gfn_to_pfn() Sean Christopherson
2023-08-01 11:25   ` Wang, Zhi A
2023-07-29  1:35 ` [PATCH v4 06/29] drm/i915/gvt: Explicitly check that vGPU is attached before shadowing Sean Christopherson
2023-08-01  1:44   ` Yan Zhao
2023-08-01 23:20     ` Sean Christopherson
2023-07-29  1:35 ` [PATCH v4 07/29] drm/i915/gvt: Error out on an attempt to shadowing an unknown GTT entry type Sean Christopherson
2023-08-01  1:45   ` Yan Zhao
2023-07-29  1:35 ` [PATCH v4 08/29] drm/i915/gvt: Don't rely on KVM's gfn_to_pfn() to query possible 2M GTT Sean Christopherson
2023-08-01 11:28   ` Wang, Zhi A
2023-07-29  1:35 ` [PATCH v4 09/29] drm/i915/gvt: Use an "unsigned long" to iterate over memslot gfns Sean Christopherson
2023-08-01 11:28   ` Wang, Zhi A
2023-07-29  1:35 ` [PATCH v4 10/29] drm/i915/gvt: Drop unused helper intel_vgpu_reset_gtt() Sean Christopherson
2023-08-01 11:30   ` Wang, Zhi A
2023-07-29  1:35 ` [PATCH v4 11/29] drm/i915/gvt: Protect gfn hash table with vgpu_lock Sean Christopherson
2023-08-01 11:32   ` Wang, Zhi A
2023-07-29  1:35 ` [PATCH v4 12/29] KVM: x86/mmu: Move kvm_arch_flush_shadow_{all,memslot}() to mmu.c Sean Christopherson
2023-08-03 23:50   ` Isaku Yamahata
2023-07-29  1:35 ` [PATCH v4 13/29] KVM: x86/mmu: Don't rely on page-track mechanism to flush on memslot change Sean Christopherson
2023-07-29  1:35 ` [PATCH v4 14/29] KVM: x86/mmu: Don't bounce through page-track mechanism for guest PTEs Sean Christopherson
2023-07-29  1:35 ` [PATCH v4 15/29] KVM: drm/i915/gvt: Drop @vcpu from KVM's ->track_write() hook Sean Christopherson
2023-08-01 11:35   ` Wang, Zhi A
2023-07-29  1:35 ` [PATCH v4 16/29] KVM: x86: Reject memslot MOVE operations if KVMGT is attached Sean Christopherson
2023-08-30 15:04   ` Like Xu
2023-08-30 20:50     ` Sean Christopherson
2023-08-31  6:20       ` Like Xu
2023-08-31 16:11         ` Sean Christopherson
2023-07-29  1:35 ` [PATCH v4 17/29] drm/i915/gvt: Don't bother removing write-protection on to-be-deleted slot Sean Christopherson
2023-08-01 11:37   ` Wang, Zhi A
2023-07-29  1:35 ` [PATCH v4 18/29] KVM: x86: Add a new page-track hook to handle memslot deletion Sean Christopherson
2023-07-29  1:35 ` [PATCH v4 19/29] drm/i915/gvt: switch from ->track_flush_slot() to ->track_remove_region() Sean Christopherson
2023-08-01 11:39   ` Wang, Zhi A
2023-07-29  1:35 ` [PATCH v4 20/29] KVM: x86: Remove the unused page-track hook track_flush_slot() Sean Christopherson
2023-07-29  1:35 ` [PATCH v4 21/29] KVM: x86/mmu: Move KVM-only page-track declarations to internal header Sean Christopherson
2023-07-29  1:35 ` [PATCH v4 22/29] KVM: x86/mmu: Use page-track notifiers iff there are external users Sean Christopherson
2023-07-29  1:35 ` [PATCH v4 23/29] KVM: x86/mmu: Drop infrastructure for multiple page-track modes Sean Christopherson
2023-07-29  1:35 ` [PATCH v4 24/29] KVM: x86/mmu: Rename page-track APIs to reflect the new reality Sean Christopherson
2023-07-29  1:35 ` [PATCH v4 25/29] KVM: x86/mmu: Assert that correct locks are held for page write-tracking Sean Christopherson
2023-07-29  1:35 ` [PATCH v4 26/29] KVM: x86/mmu: Bug the VM if write-tracking is used but not enabled Sean Christopherson
2023-07-29  1:35 ` [PATCH v4 27/29] KVM: x86/mmu: Drop @slot param from exported/external page-track APIs Sean Christopherson
2023-07-29  1:35 ` [PATCH v4 28/29] KVM: x86/mmu: Handle KVM bookkeeping in page-track APIs, not callers Sean Christopherson
2023-07-29  1:35 ` [PATCH v4 29/29] drm/i915/gvt: Drop final dependencies on KVM internal details Sean Christopherson
2023-08-01 11:42   ` Wang, Zhi A
2023-08-04  0:41 ` [PATCH v4 00/29] drm/i915/gvt: KVM: KVMGT fixes and page-track cleanups Sean Christopherson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).