KVM: x86/mmu: Make kvm_mmu_page definition and accessor internal-only
authorSean Christopherson <sean.j.christopherson@intel.com>
Mon, 22 Jun 2020 20:20:32 +0000 (13:20 -0700)
committerPaolo Bonzini <pbonzini@redhat.com>
Wed, 8 Jul 2020 20:21:54 +0000 (16:21 -0400)
Make 'struct kvm_mmu_page' MMU-only, nothing outside of the MMU should
be poking into the gory details of shadow pages.

Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
Message-Id: <20200622202034.15093-5-sean.j.christopherson@intel.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/include/asm/kvm_host.h
arch/x86/kvm/mmu/mmu_internal.h

index 2357763..97cb005 100644 (file)
@@ -322,43 +322,6 @@ struct kvm_rmap_head {
        unsigned long val;
 };
 
-struct kvm_mmu_page {
-       struct list_head link;
-       struct hlist_node hash_link;
-       struct list_head lpage_disallowed_link;
-
-       bool unsync;
-       u8 mmu_valid_gen;
-       bool mmio_cached;
-       bool lpage_disallowed; /* Can't be replaced by an equiv large page */
-
-       /*
-        * The following two entries are used to key the shadow page in the
-        * hash table.
-        */
-       union kvm_mmu_page_role role;
-       gfn_t gfn;
-
-       u64 *spt;
-       /* hold the gfn of each spte inside spt */
-       gfn_t *gfns;
-       int root_count;          /* Currently serving as active root */
-       unsigned int unsync_children;
-       struct kvm_rmap_head parent_ptes; /* rmap pointers to parent sptes */
-       DECLARE_BITMAP(unsync_child_bitmap, 512);
-
-#ifdef CONFIG_X86_32
-       /*
-        * Used out of the mmu-lock to avoid reading spte values while an
-        * update is in progress; see the comments in __get_spte_lockless().
-        */
-       int clear_spte_count;
-#endif
-
-       /* Number of writes since the last time traversal visited this page.  */
-       atomic_t write_flooding_count;
-};
-
 struct kvm_pio_request {
        unsigned long linear_rip;
        unsigned long count;
@@ -384,6 +347,8 @@ struct kvm_mmu_root_info {
 
 #define KVM_MMU_NUM_PREV_ROOTS 3
 
+struct kvm_mmu_page;
+
 /*
  * x86 supports 4 paging modes (5-level 64-bit, 4-level 64-bit, 3-level 32-bit,
  * and 2-level 32-bit).  The kvm_mmu structure abstracts the details of the
@@ -1560,13 +1525,6 @@ static inline gpa_t translate_gpa(struct kvm_vcpu *vcpu, gpa_t gpa, u32 access,
        return gpa;
 }
 
-static inline struct kvm_mmu_page *page_header(hpa_t shadow_page)
-{
-       struct page *page = pfn_to_page(shadow_page >> PAGE_SHIFT);
-
-       return (struct kvm_mmu_page *)page_private(page);
-}
-
 static inline u16 kvm_read_ldt(void)
 {
        u16 ldt;
index d7938c3..8afa60f 100644 (file)
@@ -2,6 +2,54 @@
 #ifndef __KVM_X86_MMU_INTERNAL_H
 #define __KVM_X86_MMU_INTERNAL_H
 
+#include <linux/types.h>
+
+#include <asm/kvm_host.h>
+
+struct kvm_mmu_page {
+       struct list_head link;
+       struct hlist_node hash_link;
+       struct list_head lpage_disallowed_link;
+
+       bool unsync;
+       u8 mmu_valid_gen;
+       bool mmio_cached;
+       bool lpage_disallowed; /* Can't be replaced by an equiv large page */
+
+       /*
+        * The following two entries are used to key the shadow page in the
+        * hash table.
+        */
+       union kvm_mmu_page_role role;
+       gfn_t gfn;
+
+       u64 *spt;
+       /* hold the gfn of each spte inside spt */
+       gfn_t *gfns;
+       int root_count;          /* Currently serving as active root */
+       unsigned int unsync_children;
+       struct kvm_rmap_head parent_ptes; /* rmap pointers to parent sptes */
+       DECLARE_BITMAP(unsync_child_bitmap, 512);
+
+#ifdef CONFIG_X86_32
+       /*
+        * Used out of the mmu-lock to avoid reading spte values while an
+        * update is in progress; see the comments in __get_spte_lockless().
+        */
+       int clear_spte_count;
+#endif
+
+       /* Number of writes since the last time traversal visited this page.  */
+       atomic_t write_flooding_count;
+};
+
+static inline struct kvm_mmu_page *page_header(hpa_t shadow_page)
+{
+       struct page *page = pfn_to_page(shadow_page >> PAGE_SHIFT);
+
+       return (struct kvm_mmu_page *)page_private(page);
+}
+
 void kvm_mmu_gfn_disallow_lpage(struct kvm_memory_slot *slot, gfn_t gfn);
 void kvm_mmu_gfn_allow_lpage(struct kvm_memory_slot *slot, gfn_t gfn);
 bool kvm_mmu_slot_gfn_write_protect(struct kvm *kvm,