[{"id":1760603,"web_url":"http://patchwork.ozlabs.org/comment/1760603/","msgid":"<20170831021838.GG17741@lemon.lan>","list_archive_url":null,"date":"2017-08-31T02:18:38","subject":"Re: [Qemu-devel] [PATCHv5 01/03] qemu-iothread: IOThread supports\n\tthe GMainContext event loop","submitter":{"id":24872,"url":"http://patchwork.ozlabs.org/api/people/24872/","name":"Fam Zheng","email":"famz@redhat.com"},"content":"On Tue, 08/29 15:22, Wang yong wrote:\n> From: Wang Yong <wang.yong155@zte.com.cn>\n> \n> IOThread uses AioContext event loop and does not run a GMainContext.\n> Therefore,chardev cannot work in IOThread,such as the chardev is\n> used for colo-compare packets reception.\n> \n> This patch makes the IOThread run the GMainContext event loop,\n> chardev and IOThread can work together.\n> \n> Signed-off-by: Wang Yong <wang.yong155@zte.com.cn>\n> Signed-off-by: Wang Guang <wang.guang55@zte.com.cn>\n> ---\n>  include/sysemu/iothread.h |  4 ++++\n>  iothread.c                | 45 +++++++++++++++++++++++++++++++++++++++++++++\n>  2 files changed, 49 insertions(+)\n> \n> diff --git a/include/sysemu/iothread.h b/include/sysemu/iothread.h\n> index e6da1a4..d2985b3 100644\n> --- a/include/sysemu/iothread.h\n> +++ b/include/sysemu/iothread.h\n> @@ -24,6 +24,9 @@ typedef struct {\n>  \n>      QemuThread thread;\n>      AioContext *ctx;\n> +    GMainContext *worker_context;\n> +    GMainLoop *main_loop;\n> +    GOnce once;\n>      QemuMutex init_done_lock;\n>      QemuCond init_done_cond;    /* is thread initialization done? */\n>      bool stopping;\n> @@ -41,5 +44,6 @@ typedef struct {\n>  char *iothread_get_id(IOThread *iothread);\n>  AioContext *iothread_get_aio_context(IOThread *iothread);\n>  void iothread_stop_all(void);\n> +GMainContext *iothread_get_g_main_context(IOThread *iothread);\n>  \n>  #endif /* IOTHREAD_H */\n> diff --git a/iothread.c b/iothread.c\n> index beeb870..44c8944 100644\n> --- a/iothread.c\n> +++ b/iothread.c\n> @@ -57,6 +57,23 @@ static void *iothread_run(void *opaque)\n>  \n>      while (!atomic_read(&iothread->stopping)) {\n>          aio_poll(iothread->ctx, true);\n> +\n> +        if (atomic_read(&iothread->worker_context)) {\n> +            GMainLoop *loop;\n> +\n> +            g_main_context_push_thread_default(iothread->worker_context);\n> +            iothread->main_loop =\n> +                g_main_loop_new(iothread->worker_context, TRUE);\n> +            loop = iothread->main_loop;\n> +\n> +            g_main_loop_run(iothread->main_loop);\n> +            iothread->main_loop = NULL;\n> +            g_main_loop_unref(loop);\n> +\n> +            g_main_context_pop_thread_default(iothread->worker_context);\n> +            g_main_context_unref(iothread->worker_context);\n> +            iothread->worker_context = NULL;\n> +        }\n>      }\n>  \n>      rcu_unregister_thread();\n> @@ -73,6 +90,9 @@ static int iothread_stop(Object *object, void *opaque)\n>      }\n>      iothread->stopping = true;\n>      aio_notify(iothread->ctx);\n> +    if (atomic_read(&iothread->main_loop)) {\n> +        g_main_loop_quit(iothread->main_loop);\n> +    }\n>      qemu_thread_join(&iothread->thread);\n>      return 0;\n>  }\n> @@ -125,6 +145,7 @@ static void iothread_complete(UserCreatable *obj, Error **errp)\n>  \n>      qemu_mutex_init(&iothread->init_done_lock);\n>      qemu_cond_init(&iothread->init_done_cond);\n> +    iothread->once = (GOnce) G_ONCE_INIT;\n\nIn last review I suggested removing this type cast, otherwise looks good. Drop\nit and please add\n\nReviewed-by: Fam Zheng <famz@redhat.com>\n\n>  \n>      /* This assumes we are called from a thread with useful CPU affinity for us\n>       * to inherit.\n> @@ -309,3 +330,27 @@ void iothread_stop_all(void)\n>  \n>      object_child_foreach(container, iothread_stop, NULL);\n>  }\n> +\n> +static gpointer iothread_g_main_context_init(gpointer opaque)\n> +{\n> +    AioContext *ctx;\n> +    IOThread *iothread = opaque;\n> +    GSource *source;\n> +\n> +    iothread->worker_context = g_main_context_new();\n> +\n> +    ctx = iothread_get_aio_context(iothread);\n> +    source = aio_get_g_source(ctx);\n> +    g_source_attach(source, iothread->worker_context);\n> +    g_source_unref(source);\n> +\n> +    aio_notify(iothread->ctx);\n> +    return NULL;\n> +}\n> +\n> +GMainContext *iothread_get_g_main_context(IOThread *iothread)\n> +{\n> +    g_once(&iothread->once, iothread_g_main_context_init, iothread);\n> +\n> +    return iothread->worker_context;\n> +}\n> -- \n> 1.8.3.1\n> \n>","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":["ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)","ext-mx10.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com","ext-mx10.extmail.prod.ext.phx2.redhat.com;\n\tspf=fail smtp.mailfrom=famz@redhat.com"],"Received":["from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xjQzq63gHz9s83\n\tfor <incoming@patchwork.ozlabs.org>;\n\tThu, 31 Aug 2017 12:19:17 +1000 (AEST)","from localhost ([::1]:53588 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1dnF4d-00025r-8r\n\tfor incoming@patchwork.ozlabs.org; Wed, 30 Aug 2017 22:19:15 -0400","from eggs.gnu.org ([2001:4830:134:3::10]:43192)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <famz@redhat.com>) id 1dnF4D-00024Y-7P\n\tfor qemu-devel@nongnu.org; Wed, 30 Aug 2017 22:18:50 -0400","from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <famz@redhat.com>) id 1dnF49-0007oU-8Q\n\tfor qemu-devel@nongnu.org; Wed, 30 Aug 2017 22:18:49 -0400","from mx1.redhat.com ([209.132.183.28]:33754)\n\tby eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <famz@redhat.com>) id 1dnF48-0007o5-UT\n\tfor qemu-devel@nongnu.org; Wed, 30 Aug 2017 22:18:45 -0400","from smtp.corp.redhat.com\n\t(int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mx1.redhat.com (Postfix) with ESMTPS id 6D5CC5F739;\n\tThu, 31 Aug 2017 02:18:43 +0000 (UTC)","from localhost (ovpn-12-59.pek2.redhat.com [10.72.12.59])\n\tby smtp.corp.redhat.com (Postfix) with ESMTP id D00BC8B29C;\n\tThu, 31 Aug 2017 02:18:39 +0000 (UTC)"],"DMARC-Filter":"OpenDMARC Filter v1.3.2 mx1.redhat.com 6D5CC5F739","Date":"Thu, 31 Aug 2017 10:18:38 +0800","From":"Fam Zheng <famz@redhat.com>","To":"Wang yong <wang.yong155@zte.com.cn>","Message-ID":"<20170831021838.GG17741@lemon.lan>","References":"<1503991359-3353-1-git-send-email-wang.yong155@zte.com.cn>\n\t<1503991359-3353-2-git-send-email-wang.yong155@zte.com.cn>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<1503991359-3353-2-git-send-email-wang.yong155@zte.com.cn>","User-Agent":"Mutt/1.8.3 (2017-05-23)","X-Scanned-By":"MIMEDefang 2.79 on 10.5.11.15","X-Greylist":"Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.39]);\n\tThu, 31 Aug 2017 02:18:43 +0000 (UTC)","X-detected-operating-system":"by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]\n\t[fuzzy]","X-Received-From":"209.132.183.28","Subject":"Re: [Qemu-devel] [PATCHv5 01/03] qemu-iothread: IOThread supports\n\tthe GMainContext event loop","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.21","Precedence":"list","List-Id":"<qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<http://lists.nongnu.org/archive/html/qemu-devel/>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Cc":"lizhijian@cn.fujitsu.com, zhang.zhanghailiang@huawei.com,\n\tzhangchen.fnst@cn.fujitsu.com, wang.guang55@zte.com.cn,\n\tjasowang@redhat.com, qemu-devel@nongnu.org, stefanha@redhat.com,\n\tpbonzini@redhat.com","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>"}},{"id":1760687,"web_url":"http://patchwork.ozlabs.org/comment/1760687/","msgid":"<20170831064511.GI17741@lemon.lan>","list_archive_url":null,"date":"2017-08-31T06:45:11","subject":"Re: [Qemu-devel] [PATCHv5 01/03] qemu-iothread: IOThread supports\n\tthe GMainContext event loop","submitter":{"id":24872,"url":"http://patchwork.ozlabs.org/api/people/24872/","name":"Fam Zheng","email":"famz@redhat.com"},"content":"On Thu, 08/31 10:18, Fam Zheng wrote:\n> On Tue, 08/29 15:22, Wang yong wrote:\n> > From: Wang Yong <wang.yong155@zte.com.cn>\n> > \n> > IOThread uses AioContext event loop and does not run a GMainContext.\n> > Therefore,chardev cannot work in IOThread,such as the chardev is\n> > used for colo-compare packets reception.\n> > \n> > This patch makes the IOThread run the GMainContext event loop,\n> > chardev and IOThread can work together.\n> > \n> > Signed-off-by: Wang Yong <wang.yong155@zte.com.cn>\n> > Signed-off-by: Wang Guang <wang.guang55@zte.com.cn>\n> > ---\n> >  include/sysemu/iothread.h |  4 ++++\n> >  iothread.c                | 45 +++++++++++++++++++++++++++++++++++++++++++++\n> >  2 files changed, 49 insertions(+)\n> > \n> > diff --git a/include/sysemu/iothread.h b/include/sysemu/iothread.h\n> > index e6da1a4..d2985b3 100644\n> > --- a/include/sysemu/iothread.h\n> > +++ b/include/sysemu/iothread.h\n> > @@ -24,6 +24,9 @@ typedef struct {\n> >  \n> >      QemuThread thread;\n> >      AioContext *ctx;\n> > +    GMainContext *worker_context;\n> > +    GMainLoop *main_loop;\n> > +    GOnce once;\n> >      QemuMutex init_done_lock;\n> >      QemuCond init_done_cond;    /* is thread initialization done? */\n> >      bool stopping;\n> > @@ -41,5 +44,6 @@ typedef struct {\n> >  char *iothread_get_id(IOThread *iothread);\n> >  AioContext *iothread_get_aio_context(IOThread *iothread);\n> >  void iothread_stop_all(void);\n> > +GMainContext *iothread_get_g_main_context(IOThread *iothread);\n> >  \n> >  #endif /* IOTHREAD_H */\n> > diff --git a/iothread.c b/iothread.c\n> > index beeb870..44c8944 100644\n> > --- a/iothread.c\n> > +++ b/iothread.c\n> > @@ -57,6 +57,23 @@ static void *iothread_run(void *opaque)\n> >  \n> >      while (!atomic_read(&iothread->stopping)) {\n> >          aio_poll(iothread->ctx, true);\n> > +\n> > +        if (atomic_read(&iothread->worker_context)) {\n> > +            GMainLoop *loop;\n> > +\n> > +            g_main_context_push_thread_default(iothread->worker_context);\n> > +            iothread->main_loop =\n> > +                g_main_loop_new(iothread->worker_context, TRUE);\n> > +            loop = iothread->main_loop;\n> > +\n> > +            g_main_loop_run(iothread->main_loop);\n> > +            iothread->main_loop = NULL;\n> > +            g_main_loop_unref(loop);\n> > +\n> > +            g_main_context_pop_thread_default(iothread->worker_context);\n> > +            g_main_context_unref(iothread->worker_context);\n> > +            iothread->worker_context = NULL;\n> > +        }\n> >      }\n> >  \n> >      rcu_unregister_thread();\n> > @@ -73,6 +90,9 @@ static int iothread_stop(Object *object, void *opaque)\n> >      }\n> >      iothread->stopping = true;\n> >      aio_notify(iothread->ctx);\n> > +    if (atomic_read(&iothread->main_loop)) {\n> > +        g_main_loop_quit(iothread->main_loop);\n> > +    }\n> >      qemu_thread_join(&iothread->thread);\n> >      return 0;\n> >  }\n> > @@ -125,6 +145,7 @@ static void iothread_complete(UserCreatable *obj, Error **errp)\n> >  \n> >      qemu_mutex_init(&iothread->init_done_lock);\n> >      qemu_cond_init(&iothread->init_done_cond);\n> > +    iothread->once = (GOnce) G_ONCE_INIT;\n> \n> In last review I suggested removing this type cast, otherwise looks good. Drop\n> it and please add\n\nNo, Yong is right, because this is not varialble initializer, type cast is\nrequired by C. Sorry for the noise.\n\nFam","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":["ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)","ext-mx05.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com","ext-mx05.extmail.prod.ext.phx2.redhat.com;\n\tspf=fail smtp.mailfrom=famz@redhat.com"],"Received":["from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xjY6G5L7yz9s7F\n\tfor <incoming@patchwork.ozlabs.org>;\n\tThu, 31 Aug 2017 16:55:18 +1000 (AEST)","from localhost ([::1]:54203 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1dnJNk-000085-QI\n\tfor incoming@patchwork.ozlabs.org; Thu, 31 Aug 2017 02:55:16 -0400","from eggs.gnu.org ([2001:4830:134:3::10]:52462)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <famz@redhat.com>) id 1dnJEB-0000aI-VX\n\tfor qemu-devel@nongnu.org; Thu, 31 Aug 2017 02:45:25 -0400","from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <famz@redhat.com>) id 1dnJE8-0007ID-Sj\n\tfor qemu-devel@nongnu.org; Thu, 31 Aug 2017 02:45:24 -0400","from mx1.redhat.com ([209.132.183.28]:38278)\n\tby eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <famz@redhat.com>) id 1dnJE8-0007Hv-J5\n\tfor qemu-devel@nongnu.org; Thu, 31 Aug 2017 02:45:20 -0400","from smtp.corp.redhat.com\n\t(int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mx1.redhat.com (Postfix) with ESMTPS id 7EF4B461FB;\n\tThu, 31 Aug 2017 06:45:19 +0000 (UTC)","from localhost (ovpn-12-59.pek2.redhat.com [10.72.12.59])\n\tby smtp.corp.redhat.com (Postfix) with ESMTP id 03283908E0;\n\tThu, 31 Aug 2017 06:45:13 +0000 (UTC)"],"DMARC-Filter":"OpenDMARC Filter v1.3.2 mx1.redhat.com 7EF4B461FB","Date":"Thu, 31 Aug 2017 14:45:11 +0800","From":"Fam Zheng <famz@redhat.com>","To":"Wang yong <wang.yong155@zte.com.cn>","Message-ID":"<20170831064511.GI17741@lemon.lan>","References":"<1503991359-3353-1-git-send-email-wang.yong155@zte.com.cn>\n\t<1503991359-3353-2-git-send-email-wang.yong155@zte.com.cn>\n\t<20170831021838.GG17741@lemon.lan>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<20170831021838.GG17741@lemon.lan>","User-Agent":"Mutt/1.8.3 (2017-05-23)","X-Scanned-By":"MIMEDefang 2.79 on 10.5.11.11","X-Greylist":"Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.29]);\n\tThu, 31 Aug 2017 06:45:19 +0000 (UTC)","X-detected-operating-system":"by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]\n\t[fuzzy]","X-Received-From":"209.132.183.28","Subject":"Re: [Qemu-devel] [PATCHv5 01/03] qemu-iothread: IOThread supports\n\tthe GMainContext event loop","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.21","Precedence":"list","List-Id":"<qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<http://lists.nongnu.org/archive/html/qemu-devel/>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Cc":"lizhijian@cn.fujitsu.com, zhang.zhanghailiang@huawei.com,\n\tzhangchen.fnst@cn.fujitsu.com, wang.guang55@zte.com.cn,\n\tjasowang@redhat.com, qemu-devel@nongnu.org, stefanha@redhat.com,\n\tpbonzini@redhat.com","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>"}},{"id":1760878,"web_url":"http://patchwork.ozlabs.org/comment/1760878/","msgid":"<20170831101322.GL13619@stefanha-x1.localdomain>","list_archive_url":null,"date":"2017-08-31T10:13:22","subject":"Re: [Qemu-devel] [PATCHv5 01/03] qemu-iothread: IOThread supports\n\tthe GMainContext event loop","submitter":{"id":17227,"url":"http://patchwork.ozlabs.org/api/people/17227/","name":"Stefan Hajnoczi","email":"stefanha@redhat.com"},"content":"On Tue, Aug 29, 2017 at 03:22:37PM +0800, Wang yong wrote:\n> From: Wang Yong <wang.yong155@zte.com.cn>\n> \n> IOThread uses AioContext event loop and does not run a GMainContext.\n> Therefore,chardev cannot work in IOThread,such as the chardev is\n> used for colo-compare packets reception.\n> \n> This patch makes the IOThread run the GMainContext event loop,\n> chardev and IOThread can work together.\n> \n> Signed-off-by: Wang Yong <wang.yong155@zte.com.cn>\n> Signed-off-by: Wang Guang <wang.guang55@zte.com.cn>\n> ---\n>  include/sysemu/iothread.h |  4 ++++\n>  iothread.c                | 45 +++++++++++++++++++++++++++++++++++++++++++++\n>  2 files changed, 49 insertions(+)\n\nReviewed-by: Stefan Hajnoczi <stefanha@redhat.com>","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":["ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)","ext-mx06.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com","ext-mx06.extmail.prod.ext.phx2.redhat.com;\n\tspf=fail smtp.mailfrom=stefanha@redhat.com"],"Received":["from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xjgnD6DqRz9s72\n\tfor <incoming@patchwork.ozlabs.org>;\n\tThu, 31 Aug 2017 21:56:00 +1000 (AEST)","from localhost ([::1]:55184 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1dnO4l-0000g5-19\n\tfor incoming@patchwork.ozlabs.org; Thu, 31 Aug 2017 07:55:59 -0400","from eggs.gnu.org ([2001:4830:134:3::10]:35205)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <stefanha@redhat.com>) id 1dnO46-0000Yl-2i\n\tfor qemu-devel@nongnu.org; Thu, 31 Aug 2017 07:55:23 -0400","from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <stefanha@redhat.com>) id 1dnO42-0000jA-Ui\n\tfor qemu-devel@nongnu.org; Thu, 31 Aug 2017 07:55:18 -0400","from mx1.redhat.com ([209.132.183.28]:58154)\n\tby eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <stefanha@redhat.com>) id 1dnO42-0000ir-Nt\n\tfor qemu-devel@nongnu.org; Thu, 31 Aug 2017 07:55:14 -0400","from smtp.corp.redhat.com\n\t(int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mx1.redhat.com (Postfix) with ESMTPS id 7F035267DF;\n\tThu, 31 Aug 2017 11:55:13 +0000 (UTC)","from localhost (ovpn-117-62.ams2.redhat.com [10.36.117.62])\n\tby smtp.corp.redhat.com (Postfix) with ESMTP id 82F069D5F4;\n\tThu, 31 Aug 2017 11:55:09 +0000 (UTC)"],"DMARC-Filter":"OpenDMARC Filter v1.3.2 mx1.redhat.com 7F035267DF","Date":"Thu, 31 Aug 2017 11:13:22 +0100","From":"Stefan Hajnoczi <stefanha@redhat.com>","To":"Wang yong <wang.yong155@zte.com.cn>","Message-ID":"<20170831101322.GL13619@stefanha-x1.localdomain>","References":"<1503991359-3353-1-git-send-email-wang.yong155@zte.com.cn>\n\t<1503991359-3353-2-git-send-email-wang.yong155@zte.com.cn>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<1503991359-3353-2-git-send-email-wang.yong155@zte.com.cn>","User-Agent":"Mutt/1.8.3 (2017-05-23)","X-Scanned-By":"MIMEDefang 2.79 on 10.5.11.16","X-Greylist":"Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.30]);\n\tThu, 31 Aug 2017 11:55:13 +0000 (UTC)","X-detected-operating-system":"by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]\n\t[fuzzy]","X-Received-From":"209.132.183.28","Subject":"Re: [Qemu-devel] [PATCHv5 01/03] qemu-iothread: IOThread supports\n\tthe GMainContext event loop","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.21","Precedence":"list","List-Id":"<qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<http://lists.nongnu.org/archive/html/qemu-devel/>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Cc":"lizhijian@cn.fujitsu.com, famz@redhat.com, zhang.zhanghailiang@huawei.com,\n\tzhangchen.fnst@cn.fujitsu.com, wang.guang55@zte.com.cn,\n\tjasowang@redhat.com, qemu-devel@nongnu.org, pbonzini@redhat.com","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>"}},{"id":1764488,"web_url":"http://patchwork.ozlabs.org/comment/1764488/","msgid":"<ef26ee5f-af16-46ec-8f9a-57155d04c302@cn.fujitsu.com>","list_archive_url":null,"date":"2017-09-07T03:22:56","subject":"Re: [Qemu-devel] [PATCHv5 02/03] colo-compare: Use IOThread to\n\tCheck old packet regularly and Process pactkets of the primary","submitter":{"id":67759,"url":"http://patchwork.ozlabs.org/api/people/67759/","name":"Zhang Chen","email":"zhangchen.fnst@cn.fujitsu.com"},"content":"On 08/29/2017 03:22 PM, Wang yong wrote:\n> From: Wang Yong <wang.yong155@zte.com.cn>\n>\n> Remove the task which check old packet in the comparing thread,\n> then use IOthread context timer to handle it.\n>\n> Process pactkets in the IOThread which arrived over the socket.\n> we use iothread_get_g_main_context to create a new g_main_loop in\n> the IOThread.then the packets from the primary and the secondary\n> are processed in the IOThread.\n>\n> Finally remove the colo-compare thread using the IOThread instead.\n>\n> Signed-off-by: Wang Yong <wang.yong155@zte.com.cn>\n> Signed-off-by: Wang Guang <wang.guang55@zte.com.cn>\n\nReviewed-by: Zhang Chen<zhangchen.fnst@cn.fujitsu.com>\n\nHi~ Jason.\nHave any comments to this series?\n\nThanks\nZhang Chen\n\n> ---\n>   net/colo-compare.c | 83 +++++++++++++++++++++++++++++-------------------------\n>   1 file changed, 45 insertions(+), 38 deletions(-)\n>\n> diff --git a/net/colo-compare.c b/net/colo-compare.c\n> index 5fe8e3f..b2a2a13 100644\n> --- a/net/colo-compare.c\n> +++ b/net/colo-compare.c\n> @@ -29,6 +29,7 @@\n>   #include \"qemu/sockets.h\"\n>   #include \"qapi-visit.h\"\n>   #include \"net/colo.h\"\n> +#include \"sysemu/iothread.h\"\n>   \n>   #define TYPE_COLO_COMPARE \"colo-compare\"\n>   #define COLO_COMPARE(obj) \\\n> @@ -82,11 +83,10 @@ typedef struct CompareState {\n>       GQueue conn_list;\n>       /* hashtable to save connection */\n>       GHashTable *connection_track_table;\n> -    /* compare thread, a thread for each NIC */\n> -    QemuThread thread;\n>   \n> +    IOThread *iothread;\n>       GMainContext *worker_context;\n> -    GMainLoop *compare_loop;\n> +    QEMUTimer *packet_check_timer;\n>   } CompareState;\n>   \n>   typedef struct CompareClass {\n> @@ -597,22 +597,40 @@ static void compare_sec_chr_in(void *opaque, const uint8_t *buf, int size)\n>    * Check old packet regularly so it can watch for any packets\n>    * that the secondary hasn't produced equivalents of.\n>    */\n> -static gboolean check_old_packet_regular(void *opaque)\n> +static void check_old_packet_regular(void *opaque)\n>   {\n>       CompareState *s = opaque;\n>   \n>       /* if have old packet we will notify checkpoint */\n>       colo_old_packet_check(s);\n> +    timer_mod(s->packet_check_timer, qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL) +\n> +                REGULAR_PACKET_CHECK_MS);\n> +}\n> +\n> +static void colo_compare_timer_init(CompareState *s)\n> +{\n> +    AioContext *ctx = iothread_get_aio_context(s->iothread);\n>   \n> -    return TRUE;\n> +    s->packet_check_timer = aio_timer_new(ctx, QEMU_CLOCK_VIRTUAL,\n> +                                SCALE_MS, check_old_packet_regular,\n> +                                s);\n> +    timer_mod(s->packet_check_timer, qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL) +\n> +                    REGULAR_PACKET_CHECK_MS);\n>   }\n>   \n> -static void *colo_compare_thread(void *opaque)\n> +static void colo_compare_timer_del(CompareState *s)\n>   {\n> -    CompareState *s = opaque;\n> -    GSource *timeout_source;\n> +    if (s->packet_check_timer) {\n> +        timer_del(s->packet_check_timer);\n> +        timer_free(s->packet_check_timer);\n> +        s->packet_check_timer = NULL;\n> +    }\n> + }\n>   \n> -    s->worker_context = g_main_context_new();\n> +static void colo_compare_iothread(CompareState *s)\n> +{\n> +    object_ref(OBJECT(s->iothread));\n> +    s->worker_context = iothread_get_g_main_context(s->iothread);\n>   \n>       qemu_chr_fe_set_handlers(&s->chr_pri_in, compare_chr_can_read,\n>                                compare_pri_chr_in, NULL, NULL,\n> @@ -621,20 +639,7 @@ static void *colo_compare_thread(void *opaque)\n>                                compare_sec_chr_in, NULL, NULL,\n>                                s, s->worker_context, true);\n>   \n> -    s->compare_loop = g_main_loop_new(s->worker_context, FALSE);\n> -\n> -    /* To kick any packets that the secondary doesn't match */\n> -    timeout_source = g_timeout_source_new(REGULAR_PACKET_CHECK_MS);\n> -    g_source_set_callback(timeout_source,\n> -                          (GSourceFunc)check_old_packet_regular, s, NULL);\n> -    g_source_attach(timeout_source, s->worker_context);\n> -\n> -    g_main_loop_run(s->compare_loop);\n> -\n> -    g_source_unref(timeout_source);\n> -    g_main_loop_unref(s->compare_loop);\n> -    g_main_context_unref(s->worker_context);\n> -    return NULL;\n> +    colo_compare_timer_init(s);\n>   }\n>   \n>   static char *compare_get_pri_indev(Object *obj, Error **errp)\n> @@ -759,12 +764,10 @@ static void colo_compare_complete(UserCreatable *uc, Error **errp)\n>   {\n>       CompareState *s = COLO_COMPARE(uc);\n>       Chardev *chr;\n> -    char thread_name[64];\n> -    static int compare_id;\n>   \n> -    if (!s->pri_indev || !s->sec_indev || !s->outdev) {\n> +    if (!s->pri_indev || !s->sec_indev || !s->outdev || !s->iothread) {\n>           error_setg(errp, \"colo compare needs 'primary_in' ,\"\n> -                   \"'secondary_in','outdev' property set\");\n> +                   \"'secondary_in','outdev','iothread' property set\");\n>           return;\n>       } else if (!strcmp(s->pri_indev, s->outdev) ||\n>                  !strcmp(s->sec_indev, s->outdev) ||\n> @@ -799,12 +802,7 @@ static void colo_compare_complete(UserCreatable *uc, Error **errp)\n>                                                         g_free,\n>                                                         connection_destroy);\n>   \n> -    sprintf(thread_name, \"colo-compare %d\", compare_id);\n> -    qemu_thread_create(&s->thread, thread_name,\n> -                       colo_compare_thread, s,\n> -                       QEMU_THREAD_JOINABLE);\n> -    compare_id++;\n> -\n> +    colo_compare_iothread(s);\n>       return;\n>   }\n>   \n> @@ -848,6 +846,10 @@ static void colo_compare_init(Object *obj)\n>       object_property_add_str(obj, \"outdev\",\n>                               compare_get_outdev, compare_set_outdev,\n>                               NULL);\n> +    object_property_add_link(obj, \"iothread\", TYPE_IOTHREAD,\n> +                            (Object **)&s->iothread,\n> +                            object_property_allow_set_link,\n> +                            OBJ_PROP_LINK_UNREF_ON_RELEASE, NULL);\n>   \n>       s->vnet_hdr = false;\n>       object_property_add_bool(obj, \"vnet_hdr_support\", compare_get_vnet_hdr,\n> @@ -861,16 +863,21 @@ static void colo_compare_finalize(Object *obj)\n>       qemu_chr_fe_deinit(&s->chr_pri_in, false);\n>       qemu_chr_fe_deinit(&s->chr_sec_in, false);\n>       qemu_chr_fe_deinit(&s->chr_out, false);\n> -\n> -    g_main_loop_quit(s->compare_loop);\n> -    qemu_thread_join(&s->thread);\n> -\n> +    if (s->iothread) {\n> +        colo_compare_timer_del(s);\n> +    }\n>       /* Release all unhandled packets after compare thead exited */\n>       g_queue_foreach(&s->conn_list, colo_flush_packets, s);\n>   \n>       g_queue_clear(&s->conn_list);\n>   \n> -    g_hash_table_destroy(s->connection_track_table);\n> +    if (s->connection_track_table) {\n> +        g_hash_table_destroy(s->connection_track_table);\n> +    }\n> +\n> +    if (s->iothread) {\n> +        object_unref(OBJECT(s->iothread));\n> +    }\n>       g_free(s->pri_indev);\n>       g_free(s->sec_indev);\n>       g_free(s->outdev);","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":"ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)","Received":["from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xnm2x4lfMz9s7f\n\tfor <incoming@patchwork.ozlabs.org>;\n\tThu,  7 Sep 2017 13:22:00 +1000 (AEST)","from localhost ([::1]:38673 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1dpnOA-0008KF-0N\n\tfor incoming@patchwork.ozlabs.org; Wed, 06 Sep 2017 23:21:58 -0400","from eggs.gnu.org ([2001:4830:134:3::10]:53844)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <zhangchen.fnst@cn.fujitsu.com>) id 1dpnNc-0008K2-4p\n\tfor qemu-devel@nongnu.org; Wed, 06 Sep 2017 23:21:25 -0400","from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <zhangchen.fnst@cn.fujitsu.com>) id 1dpnNY-0007Qh-Sm\n\tfor qemu-devel@nongnu.org; Wed, 06 Sep 2017 23:21:24 -0400","from mail.cn.fujitsu.com ([183.91.158.132]:32089\n\thelo=heian.cn.fujitsu.com) by eggs.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <zhangchen.fnst@cn.fujitsu.com>) id 1dpnNY-0007Ph-2Z\n\tfor qemu-devel@nongnu.org; Wed, 06 Sep 2017 23:21:20 -0400","from localhost (HELO cn.fujitsu.com) ([10.167.33.5])\n\tby heian.cn.fujitsu.com with ESMTP; 07 Sep 2017 11:21:12 +0800","from G08CNEXCHPEKD02.g08.fujitsu.local (unknown [10.167.33.83])\n\tby cn.fujitsu.com (Postfix) with ESMTP id A7E614727AA0;\n\tThu,  7 Sep 2017 11:21:08 +0800 (CST)","from [10.167.226.56] (10.167.226.56) by\n\tG08CNEXCHPEKD02.g08.fujitsu.local (10.167.33.89) with Microsoft SMTP\n\tServer (TLS) id 14.3.361.1; Thu, 7 Sep 2017 11:21:08 +0800"],"X-IronPort-AV":"E=Sophos;i=\"5.42,356,1500912000\"; d=\"scan'208\";a=\"25358689\"","To":"Wang yong <wang.yong155@zte.com.cn>, <pbonzini@redhat.com>,\n\t<stefanha@redhat.com>, <famz@redhat.com>, <jasowang@redhat.com>,\n\t<zhang.zhanghailiang@huawei.com>","References":"<1503991359-3353-1-git-send-email-wang.yong155@zte.com.cn>\n\t<1503991359-3353-3-git-send-email-wang.yong155@zte.com.cn>","From":"Zhang Chen <zhangchen.fnst@cn.fujitsu.com>","Message-ID":"<ef26ee5f-af16-46ec-8f9a-57155d04c302@cn.fujitsu.com>","Date":"Thu, 7 Sep 2017 11:22:56 +0800","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101\n\tThunderbird/52.2.1","MIME-Version":"1.0","In-Reply-To":"<1503991359-3353-3-git-send-email-wang.yong155@zte.com.cn>","Content-Type":"text/plain; charset=\"utf-8\"; format=flowed","Content-Transfer-Encoding":"7bit","Content-Language":"en-US","X-Originating-IP":"[10.167.226.56]","X-yoursite-MailScanner-ID":"A7E614727AA0.AB212","X-yoursite-MailScanner":"Found to be clean","X-yoursite-MailScanner-From":"zhangchen.fnst@cn.fujitsu.com","X-detected-operating-system":"by eggs.gnu.org: Genre and OS details not\n\trecognized.","X-Received-From":"183.91.158.132","Subject":"Re: [Qemu-devel] [PATCHv5 02/03] colo-compare: Use IOThread to\n\tCheck old packet regularly and Process pactkets of the primary","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.21","Precedence":"list","List-Id":"<qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<http://lists.nongnu.org/archive/html/qemu-devel/>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Cc":"qemu-devel@nongnu.org, lizhijian@cn.fujitsu.com,\n\tzhangchen.fnst@cn.fujitsu.com, wang.guang55@zte.com.cn","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>"}},{"id":1765034,"web_url":"http://patchwork.ozlabs.org/comment/1765034/","msgid":"<99e96941-cd9f-3c6c-e4dc-b64762cd329a@redhat.com>","list_archive_url":null,"date":"2017-09-08T01:32:01","subject":"Re: [Qemu-devel] [PATCHv5 00/03] Replace the COLO comparing thread\n\twith IOThread","submitter":{"id":5225,"url":"http://patchwork.ozlabs.org/api/people/5225/","name":"Jason Wang","email":"jasowang@redhat.com"},"content":"On 2017年08月29日 15:22, Wang yong wrote:\n> From: Wang Yong <wang.yong155@zte.com.cn>\n>\n> It's a good idea to use IOThread instead of COLO comparing thread.\n> comparing thread can be completely replaced by IOThread, so this idea came.\n>\n> This series of updates mainly include IOThread supports the GMainContext\n> event loop, then the old packet regularly check and primary/secondary network\n> packets compare all into the IOThread processing.\n>\n> Please review,thanks.\n>\n> wangyong(3):\n> qemu-iothread: IOThread supports the GMainContext event loop\n> colo-compare: Use IOThread to Check old packet regularly and\n>   Process pactkets of the primary\n> colo-compare: Update the COLO document to add the IOThread\n>   configuration\n>\n>   include/sysemu/iothread.h | 10 +++++++++\n>   iothread.c                | 54 +++++++++++++++++++++++++++++++++++++++++++++++\n>   net/colo-compare.c | 75 ++++++++++++++++++++++++++++--------------------------\n>   docs/colo-proxy.txt | 3 ++-\n>   4 file changed, 97 insertions(+), 39 deletions(-)\n>\n> --\n> 1.8.3.1\n>\n\nApplied.\n\nThanks","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":["ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)","ext-mx08.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com","ext-mx08.extmail.prod.ext.phx2.redhat.com;\n\tspf=fail smtp.mailfrom=jasowang@redhat.com"],"Received":["from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xpKZf1bdHz9sCZ\n\tfor <incoming@patchwork.ozlabs.org>;\n\tFri,  8 Sep 2017 11:32:56 +1000 (AEST)","from localhost ([::1]:42877 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1dq8A8-0004iL-Qo\n\tfor incoming@patchwork.ozlabs.org; Thu, 07 Sep 2017 21:32:52 -0400","from eggs.gnu.org ([2001:4830:134:3::10]:48595)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <jasowang@redhat.com>) id 1dq89e-0004i2-Lj\n\tfor qemu-devel@nongnu.org; Thu, 07 Sep 2017 21:32:27 -0400","from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <jasowang@redhat.com>) id 1dq89Z-0003xK-Kq\n\tfor qemu-devel@nongnu.org; Thu, 07 Sep 2017 21:32:22 -0400","from mx1.redhat.com ([209.132.183.28]:55366)\n\tby eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <jasowang@redhat.com>) id 1dq89Z-0003vP-FY\n\tfor qemu-devel@nongnu.org; Thu, 07 Sep 2017 21:32:17 -0400","from smtp.corp.redhat.com\n\t(int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mx1.redhat.com (Postfix) with ESMTPS id 909E8C057FAD;\n\tFri,  8 Sep 2017 01:32:14 +0000 (UTC)","from [10.72.12.98] (ovpn-12-98.pek2.redhat.com [10.72.12.98])\n\tby smtp.corp.redhat.com (Postfix) with ESMTPS id 7778360BEF;\n\tFri,  8 Sep 2017 01:32:04 +0000 (UTC)"],"DMARC-Filter":"OpenDMARC Filter v1.3.2 mx1.redhat.com 909E8C057FAD","To":"Wang yong <wang.yong155@zte.com.cn>, pbonzini@redhat.com,\n\tstefanha@redhat.com, famz@redhat.com, zhangchen.fnst@cn.fujitsu.com, \n\tzhang.zhanghailiang@huawei.com","References":"<1503991359-3353-1-git-send-email-wang.yong155@zte.com.cn>","From":"Jason Wang <jasowang@redhat.com>","Message-ID":"<99e96941-cd9f-3c6c-e4dc-b64762cd329a@redhat.com>","Date":"Fri, 8 Sep 2017 09:32:01 +0800","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101\n\tThunderbird/52.2.1","MIME-Version":"1.0","In-Reply-To":"<1503991359-3353-1-git-send-email-wang.yong155@zte.com.cn>","Content-Type":"text/plain; charset=utf-8; format=flowed","Content-Language":"en-US","X-Scanned-By":"MIMEDefang 2.79 on 10.5.11.13","X-Greylist":"Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.32]);\n\tFri, 08 Sep 2017 01:32:14 +0000 (UTC)","Content-Transfer-Encoding":"quoted-printable","X-detected-operating-system":"by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]\n\t[fuzzy]","X-Received-From":"209.132.183.28","Subject":"Re: [Qemu-devel] [PATCHv5 00/03] Replace the COLO comparing thread\n\twith IOThread","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.21","Precedence":"list","List-Id":"<qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<http://lists.nongnu.org/archive/html/qemu-devel/>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Cc":"qemu-devel@nongnu.org, lizhijian@cn.fujitsu.com, wang.guang55@zte.com.cn","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>"}}]