From: Paolo Bonzini <pbonzini@redhat.com>
To: John Snow <jsnow@redhat.com>,
Vladimir Sementsov-Ogievskiy <vsementsov@parallels.com>,
qemu-devel@nongnu.org
Cc: kwolf@redhat.com, den@openvz.org, stefanha@redhat.com
Subject: Re: [Qemu-devel] [PATCH 4/9] hbitmap: store / restore
Date: Thu, 08 Jan 2015 22:37:50 +0100 [thread overview]
Message-ID: <54AEF8AE.7070607@redhat.com> (raw)
In-Reply-To: <54AEF4E8.5070106@redhat.com>
On 08/01/2015 22:21, John Snow wrote:
> Why are the conversions to little endian, though? Shouldn't we be
> serializing to a Big Endian format?
Because reading two 32-bit little-endian longs or a 64-bit little-endian
long gives the same value. This is not true for big-endian.
Take the following two 32-bit values:
0x04030201 0x08070605
representing offsets 0 and 32 in the bitmap. Parse them back as one
64-bit little endian value:
0x0807060504030201 = 0x04030201 + 0x08070605 * 2^32
Now parse them as as one 64-bit big endian value:
0x0403020108070605 => 0x08070605 + 0x04030201 * 2^32
so the values are swapped.
>> +void hbitmap_restore_data(HBitmap *hb, uint8_t *buf,
>> + uint64_t start, uint64_t count)
>> +{
>> + uint64_t last = start + count - 1;
>> + unsigned long *in = (unsigned long *)buf;
>> +
>> + if (count == 0) {
>> + return;
>> + }
>> +
>> + start = (start >> hb->granularity) >> BITS_PER_LEVEL;
>> + last = (last >> hb->granularity) >> BITS_PER_LEVEL;
>> + count = last - start + 1;
>> +
>> +#ifdef __BIG_ENDIAN_BITFIELD
>> + for (i = start; i <= last; ++i) {
>> + hb->levels[HBITMAP_LEVELS - 1][i] =
>> + (BITS_PER_LONG == 32 ? be32_to_cpu(in[i]) :
>> be64_to_cpu(in[i]));
>> + }
>> +#else
>> + memcpy(&hb->levels[HBITMAP_LEVELS - 1][start], in,
>> + count * sizeof(unsigned long));
>> +#endif
>> +}
>> +
>
> ...? We're storing as LE but restoring from BE? I'm confused.
>
> I'm also not clear on the __BIG_ENDIAN_BITFIELD macro. Why do we want to
> pack differently based on how C-bitfields are packed by the compiler? I
> don't think that has any impact on how longs are stored (always in the
> host native format.)
I agree.
Paolo
next prev parent reply other threads:[~2015-01-08 21:38 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-11 14:17 [Qemu-devel] [PATCH 0/8] Dirty bitmaps migration Vladimir Sementsov-Ogievskiy
2014-12-11 14:17 ` [Qemu-devel] [PATCH 1/9] block: rename bdrv_reset_dirty_bitmap Vladimir Sementsov-Ogievskiy
2015-01-08 21:19 ` John Snow
2014-12-11 14:17 ` [Qemu-devel] [PATCH 2/9] block-migration: fix pending() return value Vladimir Sementsov-Ogievskiy
2015-01-08 21:20 ` John Snow
2015-01-09 19:01 ` Dr. David Alan Gilbert
2014-12-11 14:17 ` [Qemu-devel] [PATCH 3/9] block: fix spoiling all dirty bitmaps by mirror and migration Vladimir Sementsov-Ogievskiy
2015-01-08 21:20 ` John Snow
2014-12-11 14:17 ` [Qemu-devel] [PATCH 4/9] hbitmap: store / restore Vladimir Sementsov-Ogievskiy
2015-01-08 21:21 ` John Snow
2015-01-08 21:37 ` Paolo Bonzini [this message]
2015-01-13 12:59 ` Vladimir Sementsov-Ogievskiy
2015-01-13 17:08 ` John Snow
2015-01-14 10:29 ` Vladimir Sementsov-Ogievskiy
2014-12-11 14:17 ` [Qemu-devel] [PATCH 5/9] block: BdrvDirtyBitmap store/restore interface Vladimir Sementsov-Ogievskiy
2015-01-08 21:22 ` John Snow
2015-01-14 11:27 ` Vladimir Sementsov-Ogievskiy
2014-12-11 14:17 ` [Qemu-devel] [PATCH 6/9] block-migration: tiny refactoring Vladimir Sementsov-Ogievskiy
2015-01-08 21:23 ` John Snow
2015-01-14 12:26 ` Vladimir Sementsov-Ogievskiy
2015-01-14 16:53 ` John Snow
2014-12-11 14:17 ` [Qemu-devel] [PATCH 7/9] block-migration: remove not needed iothread lock Vladimir Sementsov-Ogievskiy
2015-01-08 21:24 ` John Snow
2015-01-16 12:54 ` Vladimir Sementsov-Ogievskiy
2015-01-08 22:28 ` Paolo Bonzini
2015-01-16 13:03 ` Vladimir Sementsov-Ogievskiy
2014-12-11 14:17 ` [Qemu-devel] [PATCH 8/9] migration: add dirty parameter Vladimir Sementsov-Ogievskiy
2014-12-11 15:18 ` Eric Blake
2014-12-15 8:33 ` Vladimir Sementsov-Ogievskiy
2015-01-08 21:51 ` John Snow
2015-01-08 22:29 ` Eric Blake
2015-01-08 22:31 ` John Snow
2015-01-08 22:37 ` Paolo Bonzini
2014-12-11 14:17 ` [Qemu-devel] [PATCH 9/9] block-migration: add named dirty bitmaps migration Vladimir Sementsov-Ogievskiy
2015-01-08 22:05 ` John Snow
2015-01-17 17:17 ` Vladimir Sementsov-Ogievskiy
2015-01-20 17:25 ` John Snow
2015-01-08 22:36 ` Paolo Bonzini
2015-01-08 22:45 ` Eric Blake
2015-01-08 22:49 ` Paolo Bonzini
2015-01-12 14:20 ` Vladimir Sementsov-Ogievskiy
2015-01-12 14:42 ` Paolo Bonzini
2015-01-12 16:48 ` Paolo Bonzini
2015-01-12 17:31 ` John Snow
2015-01-12 19:09 ` Paolo Bonzini
2015-01-13 9:16 ` Vladimir Sementsov-Ogievskiy
2015-01-13 16:35 ` John Snow
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=54AEF8AE.7070607@redhat.com \
--to=pbonzini@redhat.com \
--cc=den@openvz.org \
--cc=jsnow@redhat.com \
--cc=kwolf@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
--cc=vsementsov@parallels.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).