On 09/01/2017 05:11 PM, David Hildenbrand wrote: > @@ -466,11 +458,7 @@ static int pin_guest_page(struct kvm *kvm, gpa_t gpa, hpa_t *hpa) > /* Unpins a page previously pinned via pin_guest_page, marking it as dirty. */ > static void unpin_guest_page(struct kvm *kvm, gpa_t gpa, hpa_t hpa) > { > - struct page *page; > - > - page = virt_to_page(hpa); > - set_page_dirty_lock(page); > - put_page(page); > + kvm_release_pfn_dirty(hpa >> PAGE_SHIFT); > /* mark the page always as dirty for migration */ > mark_page_dirty(kvm, gpa_to_gfn(gpa)); > } This is probably ok but can you maybe outline why we no longer need the _lock variant of set_page_dirty? (Or asked differently: why did we use the _locked varaint) Other than that everything looks sane, I am just not sure about this part.