From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hollis Blanchard Subject: Re: [PATCH] Use Little Endian for Dirty Bitmap Date: Mon, 28 Sep 2009 17:08:00 -0700 Message-ID: <1254182880.15622.157.camel@slab.beaverton.ibm.com> References: <1248691134-54120-1-git-send-email-agraf@suse.de> Mime-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: 7bit Cc: kvm-ppc@vger.kernel.org, kvm@vger.kernel.org, benh@kernel.crashing.org, Avi Kivity To: Alexander Graf Return-path: Received: from e7.ny.us.ibm.com ([32.97.182.137]:56687 "EHLO e7.ny.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753525AbZI2AH7 (ORCPT ); Mon, 28 Sep 2009 20:07:59 -0400 In-Reply-To: <1248691134-54120-1-git-send-email-agraf@suse.de> Sender: kvm-owner@vger.kernel.org List-ID: On Mon, 2009-07-27 at 12:38 +0200, Alexander Graf wrote: > 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 > --- > virt/kvm/kvm_main.c | 5 +++-- > 1 files changed, 3 insertions(+), 2 deletions(-) > > diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c > index 17d8688..3482ad1 100644 > --- a/virt/kvm/kvm_main.c > +++ b/virt/kvm/kvm_main.c > @@ -48,6 +48,7 @@ > #include > #include > #include > +#include > > #ifdef KVM_COALESCED_MMIO_PAGE_OFFSET > #include "coalesced_mmio.h" > @@ -1656,8 +1657,8 @@ void mark_page_dirty(struct kvm *kvm, gfn_t gfn) > unsigned long rel_gfn = gfn - memslot->base_gfn; > > /* avoid RMW */ > - if (!test_bit(rel_gfn, memslot->dirty_bitmap)) > - set_bit(rel_gfn, memslot->dirty_bitmap); > + if (!generic_test_le_bit(rel_gfn, memslot->dirty_bitmap)) > + generic___set_le_bit(rel_gfn, memslot->dirty_bitmap); > } > } I don't think I've ever exercised the dirty bitmap code, and I don't really have an opinion. Avi? -- Hollis Blanchard IBM Linux Technology Center From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hollis Blanchard Date: Tue, 29 Sep 2009 00:08:00 +0000 Subject: Re: [PATCH] Use Little Endian for Dirty Bitmap Message-Id: <1254182880.15622.157.camel@slab.beaverton.ibm.com> List-Id: References: <1248691134-54120-1-git-send-email-agraf@suse.de> In-Reply-To: <1248691134-54120-1-git-send-email-agraf@suse.de> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: Alexander Graf Cc: kvm-ppc@vger.kernel.org, kvm@vger.kernel.org, benh@kernel.crashing.org, Avi Kivity On Mon, 2009-07-27 at 12:38 +0200, Alexander Graf wrote: > 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 > --- > virt/kvm/kvm_main.c | 5 +++-- > 1 files changed, 3 insertions(+), 2 deletions(-) > > diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c > index 17d8688..3482ad1 100644 > --- a/virt/kvm/kvm_main.c > +++ b/virt/kvm/kvm_main.c > @@ -48,6 +48,7 @@ > #include > #include > #include > +#include > > #ifdef KVM_COALESCED_MMIO_PAGE_OFFSET > #include "coalesced_mmio.h" > @@ -1656,8 +1657,8 @@ void mark_page_dirty(struct kvm *kvm, gfn_t gfn) > unsigned long rel_gfn = gfn - memslot->base_gfn; > > /* avoid RMW */ > - if (!test_bit(rel_gfn, memslot->dirty_bitmap)) > - set_bit(rel_gfn, memslot->dirty_bitmap); > + if (!generic_test_le_bit(rel_gfn, memslot->dirty_bitmap)) > + generic___set_le_bit(rel_gfn, memslot->dirty_bitmap); > } > } I don't think I've ever exercised the dirty bitmap code, and I don't really have an opinion. Avi? -- Hollis Blanchard IBM Linux Technology Center