Marcelo Tosatti wrote:
Account pages that only have global entries. Such pages need to be
synced on cr4 writes, but not cr3 writes.

@@ -1147,18 +1148,22 @@ struct page *gva_to_page(struct kvm_vcpu
 static void mmu_set_spte(struct kvm_vcpu *vcpu, u64 *shadow_pte,
                         unsigned pt_access, unsigned pte_access,
                         int user_fault, int write_fault, int dirty,
-                        int *ptwrite, int largepage, gfn_t gfn,
-                        pfn_t pfn, bool speculative)
+                        int global, int *ptwrite, int largepage,
+                        gfn_t gfn, pfn_t pfn, bool speculative)

bool global

One option to stop the ever-increasing m_s_s() parameter list is to put it into pte_access. Not sure if it's a good idea.

===================================================================
--- kvm.orig/include/asm-x86/kvm_host.h
+++ kvm/include/asm-x86/kvm_host.h
@@ -199,6 +199,7 @@ struct kvm_mmu_page {
                u64 *parent_pte;               /* !multimapped */
                struct hlist_head parent_ptes; /* multimapped, kvm_pte_chain */
        };
+       unsigned long flags;
 };

bool global;

(or: bool global : 1; if we run out of space)

 int kvm_unmap_hva(struct kvm *kvm, unsigned long hva);
 int kvm_age_hva(struct kvm *kvm, unsigned long hva);
+enum kvm_page_flags {
+       KVM_PG_global,
+};
+
+#define KVMPGFLAG(name)                                                        
\
+static inline int kvm_page_##name(struct kvm_mmu_page *sp)             \
+       { return test_bit(KVM_PG_##name, &sp->flags); }                  \
+static inline void kvm_set_pg_##name(struct kvm_mmu_page *sp)          \
+       { set_bit(KVM_PG_##name, &sp->flags); }                          \
+static inline void kvm_clear_pg_##name(struct kvm_mmu_page *sp)                
\
+       { clear_bit(KVM_PG_##name, &sp->flags); }                        \
+static inline int kvm_test_clear_pg_##name(struct kvm_mmu_page *sp)    \
+       { return test_and_clear_bit(KVM_PG_##name, &sp->flags); }
+
+KVMPGFLAG(global);
+

Ugh. Note you're using locked operations even though the structure is protected by the mmu lock.

--
error compiling committee.c: too many arguments to function

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to