Commit d126363d authored by Jike Song's avatar Jike Song Committed by Paolo Bonzini

kvm/page_track: call notifiers with kvm_page_track_notifier_node

The user of page_track might needs extra information, so pass
the kvm_page_track_notifier_node to callbacks.
Signed-off-by: default avatarJike Song <jike.song@intel.com>
Reviewed-by: default avatarXiao Guangrong <guangrong.xiao@linux.intel.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent ae7cd873
...@@ -29,17 +29,20 @@ struct kvm_page_track_notifier_node { ...@@ -29,17 +29,20 @@ struct kvm_page_track_notifier_node {
* @gpa: the physical address written by guest. * @gpa: the physical address written by guest.
* @new: the data was written to the address. * @new: the data was written to the address.
* @bytes: the written length. * @bytes: the written length.
* @node: this node
*/ */
void (*track_write)(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new, void (*track_write)(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new,
int bytes); int bytes, struct kvm_page_track_notifier_node *node);
/* /*
* It is called when memory slot is being moved or removed * It is called when memory slot is being moved or removed
* users can drop write-protection for the pages in that memory slot * users can drop write-protection for the pages in that memory slot
* *
* @kvm: the kvm where memory slot being moved or removed * @kvm: the kvm where memory slot being moved or removed
* @slot: the 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); void (*track_flush_slot)(struct kvm *kvm, struct kvm_memory_slot *slot,
struct kvm_page_track_notifier_node *node);
}; };
void kvm_page_track_init(struct kvm *kvm); void kvm_page_track_init(struct kvm *kvm);
......
...@@ -4405,7 +4405,8 @@ static u64 *get_written_sptes(struct kvm_mmu_page *sp, gpa_t gpa, int *nspte) ...@@ -4405,7 +4405,8 @@ static u64 *get_written_sptes(struct kvm_mmu_page *sp, gpa_t gpa, int *nspte)
} }
static void kvm_mmu_pte_write(struct kvm_vcpu *vcpu, gpa_t gpa, static void kvm_mmu_pte_write(struct kvm_vcpu *vcpu, gpa_t gpa,
const u8 *new, int bytes) const u8 *new, int bytes,
struct kvm_page_track_notifier_node *node)
{ {
gfn_t gfn = gpa >> PAGE_SHIFT; gfn_t gfn = gpa >> PAGE_SHIFT;
struct kvm_mmu_page *sp; struct kvm_mmu_page *sp;
...@@ -4618,7 +4619,8 @@ void kvm_mmu_setup(struct kvm_vcpu *vcpu) ...@@ -4618,7 +4619,8 @@ void kvm_mmu_setup(struct kvm_vcpu *vcpu)
} }
static void kvm_mmu_invalidate_zap_pages_in_memslot(struct kvm *kvm, static void kvm_mmu_invalidate_zap_pages_in_memslot(struct kvm *kvm,
struct kvm_memory_slot *slot) struct kvm_memory_slot *slot,
struct kvm_page_track_notifier_node *node)
{ {
kvm_mmu_invalidate_zap_all_pages(kvm); kvm_mmu_invalidate_zap_all_pages(kvm);
} }
......
...@@ -222,7 +222,7 @@ void kvm_page_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new, ...@@ -222,7 +222,7 @@ void kvm_page_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new,
idx = srcu_read_lock(&head->track_srcu); idx = srcu_read_lock(&head->track_srcu);
hlist_for_each_entry_rcu(n, &head->track_notifier_list, node) hlist_for_each_entry_rcu(n, &head->track_notifier_list, node)
if (n->track_write) if (n->track_write)
n->track_write(vcpu, gpa, new, bytes); n->track_write(vcpu, gpa, new, bytes, n);
srcu_read_unlock(&head->track_srcu, idx); srcu_read_unlock(&head->track_srcu, idx);
} }
...@@ -247,6 +247,6 @@ void kvm_page_track_flush_slot(struct kvm *kvm, struct kvm_memory_slot *slot) ...@@ -247,6 +247,6 @@ void kvm_page_track_flush_slot(struct kvm *kvm, struct kvm_memory_slot *slot)
idx = srcu_read_lock(&head->track_srcu); idx = srcu_read_lock(&head->track_srcu);
hlist_for_each_entry_rcu(n, &head->track_notifier_list, node) hlist_for_each_entry_rcu(n, &head->track_notifier_list, node)
if (n->track_flush_slot) if (n->track_flush_slot)
n->track_flush_slot(kvm, slot); n->track_flush_slot(kvm, slot, n);
srcu_read_unlock(&head->track_srcu, idx); srcu_read_unlock(&head->track_srcu, idx);
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment