Message ID | 1345021819-892-1-git-send-email-e.voevodin@samsung.com |
---|---|
State | New |
Headers | show |
On 15 August 2012 10:10, Evgeny Voevodin <e.voevodin@samsung.com> wrote: > Casting of 0x0101010101010101ULL to long will truncate it to 32 > bits on 32bit hosts, and won't truncate on 64bit hosts. > > Signed-off-by: Evgeny Voevodin <e.voevodin@samsung.com> Dup of http://patchwork.ozlabs.org/patch/177217/ I'm afraid. -- PMM
On 08/15/2012 01:30 PM, Peter Maydell wrote: > On 15 August 2012 10:10, Evgeny Voevodin <e.voevodin@samsung.com> wrote: >> Casting of 0x0101010101010101ULL to long will truncate it to 32 >> bits on 32bit hosts, and won't truncate on 64bit hosts. >> >> Signed-off-by: Evgeny Voevodin <e.voevodin@samsung.com> > > Dup of http://patchwork.ozlabs.org/patch/177217/ I'm afraid. > > -- PMM > > Don't be afraid, it's true. I didn't see it in the mailing list and didn't know that the bug is already fixed there.
On 15.08.2012 13:10, Evgeny Voevodin wrote: > Casting of 0x0101010101010101ULL to long will truncate it to 32 > bits on 32bit hosts, and won't truncate on 64bit hosts. > > Signed-off-by: Evgeny Voevodin <e.voevodin@samsung.com> > --- > savevm.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/savevm.c b/savevm.c > index 0ea10c9..9ab4d83 100644 > --- a/savevm.c > +++ b/savevm.c > @@ -2473,7 +2473,7 @@ int xbzrle_encode_buffer(uint8_t *old_buf, uint8_t *new_buf, int slen, > /* word at a time for speed, use of 32-bit long okay */ > if (!res) { > /* truncation to 32-bit long okay */ > - long mask = 0x0101010101010101ULL; > + long mask = (long)0x0101010101010101ULL; > while (i < slen) { > xor = *(long *)(old_buf + i) ^ *(long *)(new_buf + i); > if ((xor - mask) & ~xor & (mask << 7)) { Um, how it is ugly... Can't we use unsigned types for all this stuff? Including slen too - the function parameter... Thanks, /mjt
diff --git a/savevm.c b/savevm.c index 0ea10c9..9ab4d83 100644 --- a/savevm.c +++ b/savevm.c @@ -2473,7 +2473,7 @@ int xbzrle_encode_buffer(uint8_t *old_buf, uint8_t *new_buf, int slen, /* word at a time for speed, use of 32-bit long okay */ if (!res) { /* truncation to 32-bit long okay */ - long mask = 0x0101010101010101ULL; + long mask = (long)0x0101010101010101ULL; while (i < slen) { xor = *(long *)(old_buf + i) ^ *(long *)(new_buf + i); if ((xor - mask) & ~xor & (mask << 7)) {
Casting of 0x0101010101010101ULL to long will truncate it to 32 bits on 32bit hosts, and won't truncate on 64bit hosts. Signed-off-by: Evgeny Voevodin <e.voevodin@samsung.com> --- savevm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)