We are now using generic___set_le_bit() to make dirty bitmaps le. Though this works well, we have to replace __set_bit() to appropriate uaccess function to move dirty bitmaps to user space. So this patch splits generic___set_le_bit() and prepares for that. Signed-off-by: Takuya Yoshikawa <yoshikawa.takuya@xxxxxxxxxxxxx> Signed-off-by: Fernando Luis Vazquez Cao <fernando@xxxxxxxxxxxxx> --- virt/kvm/kvm_main.c | 16 +++++++++++----- 1 files changed, 11 insertions(+), 5 deletions(-) diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 6908304..66c4daf 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -1194,6 +1194,15 @@ int kvm_clear_guest(struct kvm *kvm, gpa_t gpa, unsigned long len) } EXPORT_SYMBOL_GPL(kvm_clear_guest); +static int __mark_page_dirty(unsigned long nr, + unsigned long *dirty_bitmap) +{ +#ifdef __BIG_ENDIAN + nr = nr ^ BITOP_LE_SWIZZLE; +#endif + __set_bit(nr, dirty_bitmap); +} + void mark_page_dirty(struct kvm *kvm, gfn_t gfn) { struct kvm_memory_slot *memslot; @@ -1203,11 +1212,8 @@ void mark_page_dirty(struct kvm *kvm, gfn_t gfn) if (memslot && memslot->dirty_bitmap) { unsigned long rel_gfn = gfn - memslot->base_gfn; - /* avoid RMW */ - if (!generic_test_le_bit(rel_gfn, memslot->dirty_bitmap)) { - generic___set_le_bit(rel_gfn, memslot->dirty_bitmap); - memslot->is_dirty = true; - } + __mark_page_dirty(rel_gfn, memslot->dirty_bitmap); + memslot->is_dirty = true; } } -- 1.6.3.3 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html