On 21/12/19 02:49, Peter Xu wrote: > The context will be needed to implement the kvm dirty ring. > > Signed-off-by: Peter Xu <peterx@xxxxxxxxxx> > --- > virt/kvm/kvm_main.c | 24 ++++++++++++++---------- > 1 file changed, 14 insertions(+), 10 deletions(-) > > diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c > index c80a363831ae..17969cf110dd 100644 > --- a/virt/kvm/kvm_main.c > +++ b/virt/kvm/kvm_main.c > @@ -144,7 +144,9 @@ static void hardware_disable_all(void); > > static void kvm_io_bus_destroy(struct kvm_io_bus *bus); > > -static void mark_page_dirty_in_slot(struct kvm_memory_slot *memslot, gfn_t gfn); > +static void mark_page_dirty_in_slot(struct kvm *kvm, > + struct kvm_memory_slot *memslot, > + gfn_t gfn); > > __visible bool kvm_rebooting; > EXPORT_SYMBOL_GPL(kvm_rebooting); > @@ -2053,8 +2055,9 @@ int kvm_vcpu_read_guest_atomic(struct kvm_vcpu *vcpu, gpa_t gpa, > } > EXPORT_SYMBOL_GPL(kvm_vcpu_read_guest_atomic); > > -static int __kvm_write_guest_page(struct kvm_memory_slot *memslot, gfn_t gfn, > - const void *data, int offset, int len, > +static int __kvm_write_guest_page(struct kvm *kvm, > + struct kvm_memory_slot *memslot, gfn_t gfn, > + const void *data, int offset, int len, > bool track_dirty) > { > int r; > @@ -2067,7 +2070,7 @@ static int __kvm_write_guest_page(struct kvm_memory_slot *memslot, gfn_t gfn, > if (r) > return -EFAULT; > if (track_dirty) > - mark_page_dirty_in_slot(memslot, gfn); > + mark_page_dirty_in_slot(kvm, memslot, gfn); > return 0; > } > > @@ -2077,7 +2080,7 @@ int kvm_write_guest_page(struct kvm *kvm, gfn_t gfn, > { > struct kvm_memory_slot *slot = gfn_to_memslot(kvm, gfn); > > - return __kvm_write_guest_page(slot, gfn, data, offset, len, > + return __kvm_write_guest_page(kvm, slot, gfn, data, offset, len, > track_dirty); > } > EXPORT_SYMBOL_GPL(kvm_write_guest_page); > @@ -2087,7 +2090,7 @@ int kvm_vcpu_write_guest_page(struct kvm_vcpu *vcpu, gfn_t gfn, > { > struct kvm_memory_slot *slot = kvm_vcpu_gfn_to_memslot(vcpu, gfn); > > - return __kvm_write_guest_page(slot, gfn, data, offset, > + return __kvm_write_guest_page(vcpu->kvm, slot, gfn, data, offset, > len, true); > } > EXPORT_SYMBOL_GPL(kvm_vcpu_write_guest_page); > @@ -2202,7 +2205,7 @@ int kvm_write_guest_offset_cached(struct kvm *kvm, struct gfn_to_hva_cache *ghc, > r = __copy_to_user((void __user *)ghc->hva + offset, data, len); > if (r) > return -EFAULT; > - mark_page_dirty_in_slot(ghc->memslot, gpa >> PAGE_SHIFT); > + mark_page_dirty_in_slot(kvm, ghc->memslot, gpa >> PAGE_SHIFT); > > return 0; > } > @@ -2269,7 +2272,8 @@ int kvm_clear_guest(struct kvm *kvm, gpa_t gpa, unsigned long len) > } > EXPORT_SYMBOL_GPL(kvm_clear_guest); > > -static void mark_page_dirty_in_slot(struct kvm_memory_slot *memslot, > +static void mark_page_dirty_in_slot(struct kvm *kvm, > + struct kvm_memory_slot *memslot, > gfn_t gfn) > { > if (memslot && memslot->dirty_bitmap) { > @@ -2284,7 +2288,7 @@ void mark_page_dirty(struct kvm *kvm, gfn_t gfn) > struct kvm_memory_slot *memslot; > > memslot = gfn_to_memslot(kvm, gfn); > - mark_page_dirty_in_slot(memslot, gfn); > + mark_page_dirty_in_slot(kvm, memslot, gfn); > } > EXPORT_SYMBOL_GPL(mark_page_dirty); > > @@ -2293,7 +2297,7 @@ void kvm_vcpu_mark_page_dirty(struct kvm_vcpu *vcpu, gfn_t gfn) > struct kvm_memory_slot *memslot; > > memslot = kvm_vcpu_gfn_to_memslot(vcpu, gfn); > - mark_page_dirty_in_slot(memslot, gfn); > + mark_page_dirty_in_slot(vcpu->kvm, memslot, gfn); > } > EXPORT_SYMBOL_GPL(kvm_vcpu_mark_page_dirty); > > Reviewed-by: Paolo Bonzini <pbonzini@xxxxxxxxxx>