aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Graf <agraf@suse.de>2009-10-30 01:47:26 -0400
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2009-11-05 00:50:27 -0500
commitc8240bd6f0b4b1b21ffd36dd44114d05c7afe0c0 (patch)
treebea42ed16cf9f2b2e252155842282aa524f32a0d
parent346b2762a72c60e97d2825e60423c84a869f3266 (diff)
Use Little Endian for Dirty Bitmap
We currently use host endian long types to store information in the dirty bitmap. This works reasonably well on Little Endian targets, because the u32 after the first contains the next 32 bits. On Big Endian this breaks completely though, forcing us to be inventive here. So Ben suggested to always use Little Endian, which looks reasonable. We only have dirty bitmap implemented in Little Endian targets so far and since PowerPC would be the first Big Endian platform, we can just as well switch to Little Endian always with little effort without breaking existing targets. Signed-off-by: Alexander Graf <agraf@suse.de> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
-rw-r--r--virt/kvm/kvm_main.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 7495ce347344..cdca63917e77 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -48,6 +48,7 @@
48#include <asm/io.h> 48#include <asm/io.h>
49#include <asm/uaccess.h> 49#include <asm/uaccess.h>
50#include <asm/pgtable.h> 50#include <asm/pgtable.h>
51#include <asm-generic/bitops/le.h>
51 52
52#ifdef KVM_COALESCED_MMIO_PAGE_OFFSET 53#ifdef KVM_COALESCED_MMIO_PAGE_OFFSET
53#include "coalesced_mmio.h" 54#include "coalesced_mmio.h"
@@ -1665,8 +1666,8 @@ void mark_page_dirty(struct kvm *kvm, gfn_t gfn)
1665 unsigned long rel_gfn = gfn - memslot->base_gfn; 1666 unsigned long rel_gfn = gfn - memslot->base_gfn;
1666 1667
1667 /* avoid RMW */ 1668 /* avoid RMW */
1668 if (!test_bit(rel_gfn, memslot->dirty_bitmap)) 1669 if (!generic_test_le_bit(rel_gfn, memslot->dirty_bitmap))
1669 set_bit(rel_gfn, memslot->dirty_bitmap); 1670 generic___set_le_bit(rel_gfn, memslot->dirty_bitmap);
1670 } 1671 }
1671} 1672}
1672 1673