From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paolo Bonzini Subject: Re: [RFC PATCH 7/6] savevm: Create a new continue flag to avoid resending block name Date: Wed, 09 Jun 2010 00:29:17 +0200 Message-ID: <4C0EC43D.7050908@redhat.com> References: <0100608191447.4451.47795.stgit@localhost.localdomain> <20100608211131.10053.73203.stgit@localhost.localdomain> <1276032766.3079.18.camel@x201> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Cc: qemu-devel@nongnu.org, anthony@codemonkey.ws, kvm@vger.kernel.org, quintela@redhat.com, chrisw@redhat.com To: Alex Williamson Return-path: Received: from mail-fx0-f46.google.com ([209.85.161.46]:42051 "EHLO mail-fx0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755335Ab0FHW3X (ORCPT ); Tue, 8 Jun 2010 18:29:23 -0400 Received: by fxm8 with SMTP id 8so3272366fxm.19 for ; Tue, 08 Jun 2010 15:29:21 -0700 (PDT) In-Reply-To: <1276032766.3079.18.camel@x201> Sender: kvm-owner@vger.kernel.org List-ID: On 06/08/2010 11:32 PM, Alex Williamson wrote: > On Tue, 2010-06-08 at 15:11 -0600, Alex Williamson wrote: >> Allows us to compress the protocol a bit. > ... >> @@ -284,6 +290,33 @@ int ram_save_live(Monitor *mon, QEMUFile *f, int stage, void *opaque) >> return (stage == 2)&& (expected_time<= migrate_max_downtime()); >> } >> >> +static inline void *host_from_stream_offset(QEMUFile *f, >> + ram_addr_t offset, >> + int flags) > > This probably shouldn't be inline. When sending, we'll continue from > COMPRESS or PAGE. We'd get out of sync on the recv if the compiler > created separate static blocks. Compiler folks correct me if this can't > happen. There is only one static variable even if the inlining happens in multiple places. In fact, inlining is totally transparent. Example: $ cat > x.c <<\EOF #ifndef force_inline #define force_inline inline __attribute__((always_inline)) #endif static force_inline int f() { static int i; return i++; } int main() { printf ("%d\n", f()); printf ("%d\n", f()); printf ("%d\n", f()); printf ("%d\n", f()); } EOF $ gcc -o - -Dforce_inline= -S x.c | egrep -cw _?f 7 $ gcc -o - -S x.c | egrep -cw _?f 0 $ gcc x.c && ./a.out 0 1 2 3 Paolo