From patchwork Sun Apr 26 21:18:43 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukas Straub X-Patchwork-Id: 283925 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.3 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8F817C54FCB for ; Sun, 26 Apr 2020 21:27:53 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 5A022206BF for ; Sun, 26 Apr 2020 21:27:53 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=web.de header.i=@web.de header.b="gYBWYSW4" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5A022206BF Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=web.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:46490 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jSooZ-0007ME-A6 for qemu-devel@archiver.kernel.org; Sun, 26 Apr 2020 17:27:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33784) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jSog6-0004Dv-EN for qemu-devel@nongnu.org; Sun, 26 Apr 2020 17:19:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jSofy-0005Lo-JR for qemu-devel@nongnu.org; Sun, 26 Apr 2020 17:19:06 -0400 Received: from mout.web.de ([212.227.15.4]:40645) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jSofy-0005JI-0f for qemu-devel@nongnu.org; Sun, 26 Apr 2020 17:18:58 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1587935925; bh=KlCniyLWMcP5meR1EMfh+9J/dqnOAwFcyGmWU0KJCdg=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=gYBWYSW4FDWXgautvwygWZODJtfrNr0R0Vx6CaKYyt7jdBckgm6yYjwuR5PPRG27O qVThMIi3HQDGf5ukXHqtmRbedo2yBPVNhq5nmBuRKzTQ/CdEKNltoO91ix28MYCx1R EpsIc6rpWutyYobkFedpl1v7wzEyKPnnR2te2lpg= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from luklap ([94.134.180.69]) by smtp.web.de (mrweb003 [213.165.67.108]) with ESMTPSA (Nemesis) id 0MTPjb-1jaguA08sp-00SOp0; Sun, 26 Apr 2020 23:18:45 +0200 Date: Sun, 26 Apr 2020 23:18:43 +0200 From: Lukas Straub To: qemu-devel Subject: [PATCH v3 1/6] net/colo-compare.c: Create event_bh with the right AioContext Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Provags-ID: V03:K1:Y+e1XuD7bAxwd1lKicD6/cC+P9/ujCZvW4cX1iaIzwlQeyBnK6W IKBMQxWOtnu8ulz0AQDdf584Rt+MF2Stj+53kkw/3W52vo4pnyq2hWvswPNL9SZE+A8skyS ohOV47+rjqHoZTSA1HS89//qqoHzWT0CwUComk5GJ3VtZVRLQgFUdaVmLAS0URtriydswMz MvVYXy8Bnp7+DW4308gdg== X-UI-Out-Filterresults: notjunk:1; V03:K0:QSlz2Tr0d38=:Qdg/N1F122ByJ4TikGf1d6 2wrnaqWPxWYZ9B8QUtTC9oJZtd/jrFcQvZMShc/mCmuBdHI1VmxJ4UVL32tPG6PZ8cTmjhr8Y pnqrl3z3PhSYPZBVYuxsij8nupdhm1PxB0RxXJSdxnAKL9QhulmCwhwyKGHQXjbjcvJq7R+xj nErmZ/AyWvFvmfuP/eSJQlnqxVFsNHRbgpHzCVwQ5GsqSNEigxhazbHtEYBNKjVGbPO+MwU/Z uf9nEL3FGgExyJ8XkwHD+waWgyyKPbrfAnI8LUQomCQ2VJ1zBs013cjc4MbR1OGVS1M/ggaeB 0TkU/an/7MrwefSjmQHWTbdXH64fEdfZqcjcNcrQH4hyD/8Jr7kWzZTIrMQR/aI6UVWTEfNEo yMNNCXeSsSnIMdbqI0Gmd7loWJxglzCHdiyjDipzW31jA0XJNfMVA5kcaBitmA3hMQGzk0llo AkRCvvHy1mp472id16cX0VvMYhK818U1UF5JwcN426aqYmFnISDZpK1wZHUSlYfPpREdokWUY 5vULvm2HheNDYWFAN+/qVXDMoZKyngv6CysYvoUnrfUB2Dyc1Mt4lYm7VdKJKc/0Bq25oqTMW IupgyUnnMHFkTUZi1Chs7YjWiCHqw4VVc/ejUvSrApZLfp7+WHidwn+s7E9fmJmCrEUQuv+I7 0ffgtOyHOgDiVOykQffeGFi/oeAJUQHBTHgK7uo/8SG7pdYRwPiAxQz3qdQXNasPNbP0Bod5g OWmo/QSe8GkV447anime1ltUOxcKlAK0kqIGdI+0SHp9FZgtLt4m+YesUQQ7KaEu1s8Oc7KjR kxYZe42hgIxUwgOOMu1naPUBZVukpIQ71drnbhbFYJBKZtDS/U+0cfwkeE+5iv8F52ifYw8RE Fsub1HCkhNUu6iuG9Tk0fq133i3tcc4pq8tCxvrLIxDGN68M7BMcYdugF5QZwoYe1dIWTqt2B kvZ+tr0DMDN8OB8V3zNXN5Fxzz5TyX/QgTown4A2ZMVfuRXchupsiIpNIBXN+3XvvzgfVyLXg RwDxnUQUIUv6zKumuN+tLPP5WP1MFqCo+WdWNZOqcNtL2wjGZzqRDmhmZl5tpHyrpv6HvYAc2 wfln/IvGhQdujWuiF3QIKFcBr7NOt9GRL3XkYmO5chEnn3DP36m5vBgDJbPhpIlJaz4jBe9r+ iAc37i83AFmLBODgflbzUnKu/4qj99EhPoM+BVGyBT9bR+vE1vWDsBUH0AFA1A18K2CmCYEmz 08wmAp72Es6tMlGbz Received-SPF: pass client-ip=212.227.15.4; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/04/26 15:25:56 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Received-From: 212.227.15.4 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Zhang Chen , Jason Wang , Paolo Bonzini , Li Zhijian , =?utf-8?q?Marc-Andr=C3=A9?= Lureau Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" qemu_bh_new will set the bh to be executed in the main loop. This causes crashes as colo_compare_handle_event assumes that it has exclusive access the queues, which are also concurrently accessed in the iothread. Create the bh with the AioContext of the iothread to fulfill these assumptions and fix the crashes. This is safe, because the bh already takes the appropriate locks. Signed-off-by: Lukas Straub Reviewed-by: Zhang Chen Reviewed-by: Derek Su Tested-by: Derek Su --- net/colo-compare.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/net/colo-compare.c b/net/colo-compare.c index 10c0239f9d..1de4220fe2 100644 --- a/net/colo-compare.c +++ b/net/colo-compare.c @@ -890,6 +890,7 @@ static void colo_compare_handle_event(void *opaque) static void colo_compare_iothread(CompareState *s) { + AioContext *ctx = iothread_get_aio_context(s->iothread); object_ref(OBJECT(s->iothread)); s->worker_context = iothread_get_g_main_context(s->iothread); @@ -906,7 +907,7 @@ static void colo_compare_iothread(CompareState *s) } colo_compare_timer_init(s); - s->event_bh = qemu_bh_new(colo_compare_handle_event, s); + s->event_bh = aio_bh_new(ctx, colo_compare_handle_event, s); } static char *compare_get_pri_indev(Object *obj, Error **errp) From patchwork Sun Apr 26 21:19:02 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukas Straub X-Patchwork-Id: 283924 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.3 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 98F65C54FCB for ; Sun, 26 Apr 2020 21:42:01 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 5BF0D2070A for ; Sun, 26 Apr 2020 21:42:01 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=web.de header.i=@web.de header.b="as2t8rGx" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5BF0D2070A Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=web.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:46714 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jSp2G-0005D3-7V for qemu-devel@archiver.kernel.org; Sun, 26 Apr 2020 17:42:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33836) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jSogH-0004Hn-DR for qemu-devel@nongnu.org; Sun, 26 Apr 2020 17:19:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jSogG-0006Ol-Jz for qemu-devel@nongnu.org; Sun, 26 Apr 2020 17:19:17 -0400 Received: from mout.web.de ([212.227.15.3]:34949) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jSogF-0006Jt-Vq for qemu-devel@nongnu.org; Sun, 26 Apr 2020 17:19:16 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1587935944; bh=v2Q48Pm+/yCuuYhe8oHV9FjEBrga9YLYBk3qMRI8HgU=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=as2t8rGxoJwg7aJU+ubbiN1761Gd4peU+KAAYHVrdGgefEL+HsJ8dAnyD/4OnK4dk ZUxytoElnZDLiwKbFV7dG3lNLzg3tkBxW7trSmXSYnzqzLWIFT0pDY2CkZsTZ00/Mc v/Kopz/Rf+HxlxS1zgpq4eEV03UVELnmAjMb05YY= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from luklap ([94.134.180.69]) by smtp.web.de (mrweb002 [213.165.67.108]) with ESMTPSA (Nemesis) id 0LkPRz-1ivwhP00lf-00cSqY; Sun, 26 Apr 2020 23:19:04 +0200 Date: Sun, 26 Apr 2020 23:19:02 +0200 From: Lukas Straub To: qemu-devel Subject: [PATCH v3 5/6] net/colo-compare.c, softmmu/vl.c: Check that colo-compare is active Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Provags-ID: V03:K1:llL/+uvtLCZWp63V8/ykZa9fER6BWDPZOT0FhR+pxpKFWOPVh2w crQKxDAQX5mZKh81dZsEXArBorBcf1L5py1ksOS44WHAEsGarYwKrMBz+7pWbmVKaXKvKwM AzfJgZZ7vU8pb4IMbPuD7UOjDxDngPHLtK4nXlJwnDVRcFZ06saLumROXfjDkQ/hdzlmRD3 AAqGS4xnhL2GQbu3gKbQQ== X-UI-Out-Filterresults: notjunk:1; V03:K0:AtAt9V8m+EQ=:nXmvzuByTsGwcmghQuGjMh ash9UnW/jxVbALYFieXPXSc44y87D+rNaeRwkV0IHl9cqWxmu9+21SvZKtKPyY8LKtralwcCN QWh6o6XwW9UXjb3waPvEjHXty38w1gbWCY68Xr5blq4iK+sH54mRwiXwR3tbjKKnYykKgfPYR dpcrExhpya5f64LLpudw2032j50s9HOVQW1YvXTX7ai9WabK7cJKa08zNnL/3cnidenT8//7z wtA1/khr1JRegaPl32IBSZ/SVthNnLev8opeSBxXwlFpxIVeOmsLXybhD1/rEkldwyBbWn/b/ nYAFbij28BpytRF7kg6S3Uny8XTqrN/vo1lZ5eNlqxtZx4h3HYwNewMCCvoqKX1fT9qnAwQo4 gC2GW7zP3NQYfDwmMJLBjkf2jFzglQQFz+o0ipDvK8AOSKRzBLwGm2+qWlvYN+u1pOs0AjEYR p3RAZNbPwK3xJpgyfAyEnY/KRZ7HtEhv1wG5vlxQMhUU+rPNXBRQK111pR3PBAHlsYFwipKEf EQQvEDIwoXhG2OPM9ppmKYewzwc/tCKrDx11w1Mlf4uHpObFC/WzzHWZeJFj+iqzuckbiRBQh nIYO+sU1z3usdntRTwDGqcyJcTUVF5+OArT0dXUGFrwINBxEQIkA70bgHjgYeoPzcHVC+vaiW BuVEVQIrs/LIV3TGa5HxDzkbgW6hgtE8LshQgYw0XpSWjc81vjDs6YvHbvXfPHyzUVUVVNjFc aNuZSGU1R5zSlTvnTKT5AT2Oge6Ld+8kAWDHVWiuBDbuwJv9SNQlx2DIPalxV5/PTMegHam/f 81uyS++/eNSEnbrtHR4ZhPumMN61l+YLGmTgfXFs0ITcBdIh3A6zs+UXiQQBTUqQsbWfFHX4X X0x2DPQiyEHnwnNJKaxNNLGcZI6A13tZXjr+tyrJ+Ner75P0WqF+kp3jWOACr6I914EZbnDbc KaajQFtjwKML5sRtahPny1lhnPpbj8Oioou5oyWV14lJoQ3MuPhVozNcRc1/nmp3JZUr6GLLD 4Wc36M7wJCQ+eSZZj4GRh+AlIcapsebTaD2Q0PtQnCoAO9JQRxz8QUOtXg4BuFTiiMsQ+v5am P4VZxHX8Uh7z/GwZTtftG5uFRujaDGelfJ9j+StZcbDig9g52GrPEJfSUlLLx7NXXcFyRuGc8 NYMWJ9nHeRFmZeQBO5Y1nnfSKc91uZBMeS5TatejV4MXhNdZ0j2Ee2vl/G5d/dXZyYM4u3T2T oGJuqjl7YZZoIdCNQ Received-SPF: pass client-ip=212.227.15.3; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/04/26 15:25:46 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Received-From: 212.227.15.3 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Zhang Chen , Jason Wang , Paolo Bonzini , Li Zhijian , =?utf-8?q?Marc-Andr=C3=A9?= Lureau Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" If the colo-compare object is removed before failover and a checkpoint happens, qemu crashes because it tries to lock the destroyed event_mtx in colo_notify_compares_event. Fix this by checking if everything is initialized by introducing a new variable colo_compare_active which is protected by a new mutex colo_compare_mutex. The new mutex also protects against concurrent access of the net_compares list and makes sure that colo_notify_compares_event isn't active while we destroy event_mtx and event_complete_cond. With this it also is again possible to use colo without colo-compare (periodic mode) and to use multiple colo-compare for multiple network interfaces. Signed-off-by: Lukas Straub --- net/colo-compare.c | 35 +++++++++++++++++++++++++++++------ net/colo-compare.h | 1 + softmmu/vl.c | 2 ++ 3 files changed, 32 insertions(+), 6 deletions(-) diff --git a/net/colo-compare.c b/net/colo-compare.c index 6634911770..f3074ee3ff 100644 --- a/net/colo-compare.c +++ b/net/colo-compare.c @@ -54,6 +54,8 @@ static NotifierList colo_compare_notifiers = #define REGULAR_PACKET_CHECK_MS 3000 #define DEFAULT_TIME_OUT_MS 3000 +static QemuMutex colo_compare_mutex; +static bool colo_compare_active; static QemuMutex event_mtx; static QemuCond event_complete_cond; static int event_unhandled_count; @@ -912,6 +914,12 @@ static void check_old_packet_regular(void *opaque) void colo_notify_compares_event(void *opaque, int event, Error **errp) { CompareState *s; + qemu_mutex_lock(&colo_compare_mutex); + + if (!colo_compare_active) { + qemu_mutex_unlock(&colo_compare_mutex); + return; + } qemu_mutex_lock(&event_mtx); QTAILQ_FOREACH(s, &net_compares, next) { @@ -925,6 +933,7 @@ void colo_notify_compares_event(void *opaque, int event, Error **errp) } qemu_mutex_unlock(&event_mtx); + qemu_mutex_unlock(&colo_compare_mutex); } static void colo_compare_timer_init(CompareState *s) @@ -1278,16 +1287,20 @@ static void colo_compare_complete(UserCreatable *uc, Error **errp) s->vnet_hdr); } + qemu_mutex_lock(&colo_compare_mutex); + if (!colo_compare_active) { + qemu_mutex_init(&event_mtx); + qemu_cond_init(&event_complete_cond); + colo_compare_active = true; + } QTAILQ_INSERT_TAIL(&net_compares, s, next); + qemu_mutex_unlock(&colo_compare_mutex); s->sendco.done = true; g_queue_init(&s->sendco.send_list); g_queue_init(&s->conn_list); - qemu_mutex_init(&event_mtx); - qemu_cond_init(&event_complete_cond); - s->connection_track_table = g_hash_table_new_full(connection_key_hash, connection_key_equal, g_free, @@ -1382,12 +1395,19 @@ static void colo_compare_finalize(Object *obj) qemu_bh_delete(s->event_bh); + qemu_mutex_lock(&colo_compare_mutex); QTAILQ_FOREACH(tmp, &net_compares, next) { if (tmp == s) { QTAILQ_REMOVE(&net_compares, s, next); break; } } + if (QTAILQ_EMPTY(&net_compares)) { + colo_compare_active = false; + qemu_mutex_destroy(&event_mtx); + qemu_cond_destroy(&event_complete_cond); + } + qemu_mutex_unlock(&colo_compare_mutex); /* Release all unhandled packets after compare thead exited */ g_queue_foreach(&s->conn_list, colo_flush_packets, s); @@ -1403,15 +1423,18 @@ static void colo_compare_finalize(Object *obj) object_unref(OBJECT(s->iothread)); } - qemu_mutex_destroy(&event_mtx); - qemu_cond_destroy(&event_complete_cond); - g_free(s->pri_indev); g_free(s->sec_indev); g_free(s->outdev); g_free(s->notify_dev); } +void colo_compare_init_globals(void) +{ + colo_compare_active = false; + qemu_mutex_init(&colo_compare_mutex); +} + static const TypeInfo colo_compare_info = { .name = TYPE_COLO_COMPARE, .parent = TYPE_OBJECT, diff --git a/net/colo-compare.h b/net/colo-compare.h index 22ddd512e2..eb483ac586 100644 --- a/net/colo-compare.h +++ b/net/colo-compare.h @@ -17,6 +17,7 @@ #ifndef QEMU_COLO_COMPARE_H #define QEMU_COLO_COMPARE_H +void colo_compare_init_globals(void); void colo_notify_compares_event(void *opaque, int event, Error **errp); void colo_compare_register_notifier(Notifier *notify); void colo_compare_unregister_notifier(Notifier *notify); diff --git a/softmmu/vl.c b/softmmu/vl.c index 32c0047889..a913ed5469 100644 --- a/softmmu/vl.c +++ b/softmmu/vl.c @@ -112,6 +112,7 @@ #include "qapi/qmp/qerror.h" #include "sysemu/iothread.h" #include "qemu/guest-random.h" +#include "net/colo-compare.h" #define MAX_VIRTIO_CONSOLES 1 @@ -2906,6 +2907,7 @@ void qemu_init(int argc, char **argv, char **envp) precopy_infrastructure_init(); postcopy_infrastructure_init(); monitor_init_globals(); + colo_compare_init_globals(); if (qcrypto_init(&err) < 0) { error_reportf_err(err, "cannot initialize crypto: "); From patchwork Sun Apr 26 21:19:06 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukas Straub X-Patchwork-Id: 283923 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.3 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B8C89C54FCB for ; Sun, 26 Apr 2020 21:54:56 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 7F97720700 for ; Sun, 26 Apr 2020 21:54:56 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=web.de header.i=@web.de header.b="K7gTE+N0" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7F97720700 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=web.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:46994 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jSpEl-00025w-EZ for qemu-devel@archiver.kernel.org; Sun, 26 Apr 2020 17:54:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33880) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jSogY-0004OC-78 for qemu-devel@nongnu.org; Sun, 26 Apr 2020 17:19:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jSogI-0006Tj-Rb for qemu-devel@nongnu.org; Sun, 26 Apr 2020 17:19:34 -0400 Received: from mout.web.de ([212.227.17.11]:49365) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jSogI-0006R1-9k for qemu-devel@nongnu.org; Sun, 26 Apr 2020 17:19:18 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1587935947; bh=OKrJYPQYFYSKUAa7NoCdFf6KnsK6PjCuDGPnWMhKDbI=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=K7gTE+N0eYE/937499J09aZUvMxMfdMVgR7+HGSHNAY7xYR8LGXJ2tuxF5y1f0IfI ao5BF4SVDwje+tccA+uCAXWHkRR7vipnFIMAbBbm0xVbriePPzNQzY/ZE1nkCdlPWD VYrf50KQyzFUjPyoYL7Xh4Q1b4cbwuIBLTJg7aNs= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from luklap ([94.134.180.69]) by smtp.web.de (mrweb101 [213.165.67.124]) with ESMTPSA (Nemesis) id 0MWjAd-1jiMOu151n-00Xp7P; Sun, 26 Apr 2020 23:19:07 +0200 Date: Sun, 26 Apr 2020 23:19:06 +0200 From: Lukas Straub To: qemu-devel Subject: [PATCH v3 6/6] net/colo-compare.c: Correct ordering in complete and finalize Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Provags-ID: V03:K1:e97cc28SczBHZR8grl3MOyvXZzNnq2oWlTt0IbCvnTy8wj5F3ib p/83W/QzgWr14jkbMe42CIo4uidzQp7e6jvtHUYz0Xwo28+mV5T8CYcKTLRXzNqbEwwCqWf LTPxvRbvJFNm8Zk+jX/7r9KjfLzmS1ptF84gw6YahggojXoVWXF57gjTRMYpJZEhdIQtOjP 7G8YEDAZRSXuKdrUPOoKA== X-UI-Out-Filterresults: notjunk:1; V03:K0:ynnV0hqCJ+s=:EOtlW70vzoGDSPOMfPABUg KZLNwkx1M6T1FA8kQlV7asRqZ5hI4D55D4pcgHpphw4JbHC13xrHbjIm64PUM4EQwYJTl5f0T 8c0uk44yuuzkTwABstTc54IeS3IO/eL1WDuqYNLI/Qt2MA8Q4+tn4d2DGx6ZMOxgBU3JaaRac jYe0p7Nzr+0iYLNSZ4DUMipQoPNTT4oM/ZgHijaKCjOUUvbvG083aDQSmd+k9yki1/BbsYhhw c57q7MDn4+vNJP3p6dGOKNA2x6lClMdZtecK5Wpqt34gUSyX5txBAspgkwJt3dzNbLcTpLb4K etsKpg7FxI5hT9r6MbW+DFaojLr06fbCxYEnY86ZOORJhddDBB14vj/DqPE9pQ50jqdNEwUeX sqBd8uqBO+fJbdCRNxJMEoEiJtzoxqPos0M9OcvP8hVfqhAFUJGa0kPwFMGe84rT61kSI4Jdu iyLcxDV9dBq0sDjBx84axqROCTXpxHCVl82jmUpHmhU4C6yxPu3Xt3lQZIjYH2z1aMsBwl+Qw oQoj4ozmPdoTyEc875uB1vqBMdt9AZoPhGPKX+HJZh6Qy4kvSIh4hsLc8XdhLITa2UlaAA2aa oRKzIJZAiM0sAfgsEwWZYXyDXA2DNEAsLOhIOp8albdcoAAx1L5PL5+juRMjFn9GscvnPJjil bVGn5UiSSjtguVdYf7BxalG2huv3J2d1AITyfU5akiGgaCrDRFY/r1azf8eTtzQNKq0A/TF+Q uAaCSFdFVrtbWuBoOTpglyYdyUHxshuz2Gp749+Ujcrm6A/YlIQXCjDuVvVWsnFI17Hg+/Xnb mt3aq7zE2oed8LsEEYgskr45NXDXWoWT13u9KvCdiH/ZY8zEUBRQ9rqSlgvdiTA5QerXeuhZx A6HHkyydstK+ByhZJwBfAb/iEYHHY7FI7r9NoWpKIAFWOLQkTJu9GZqEqBm8UihaNRTT6iSEj lBQMrVEPA7st/fWCpuCYz/RvrdDd+RC7dvSTbtif1c7wKcLZRU27ZtN5ATKPbaCdlb6zYyFVP A0/nzEVxo87ToeppxgdpNE0fJ8Q4mLDUll696HDL0bEF12MjRH4Aup6zw00VdVa5o1Jw6GH5Q fZdDqdRq6rNka1kVsbNmCg2Lkm65TGS0MoCJbTSp6Yab3F23IhLSGHF86lrCSNl8auGxMSqkf aIvStvoqQmcLFVL756eIF8P0DbjUE5aqcZUDuNmBrIz72c0TrBRgj7TpKRtU292e3qCYMZ7GD V+0ZC6TJBkV+L8zNX Received-SPF: pass client-ip=212.227.17.11; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/04/26 17:18:55 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Received-From: 212.227.17.11 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Zhang Chen , Jason Wang , Paolo Bonzini , Li Zhijian , =?utf-8?q?Marc-Andr=C3=A9?= Lureau Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" In colo_compare_complete, insert CompareState into net_compares only after everything has been initialized. In colo_compare_finalize, remove CompareState from net_compares before anything is deinitialized. Signed-off-by: Lukas Straub --- net/colo-compare.c | 47 +++++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/net/colo-compare.c b/net/colo-compare.c index f3074ee3ff..e86dd72f02 100644 --- a/net/colo-compare.c +++ b/net/colo-compare.c @@ -1287,15 +1287,6 @@ static void colo_compare_complete(UserCreatable *uc, Error **errp) s->vnet_hdr); } - qemu_mutex_lock(&colo_compare_mutex); - if (!colo_compare_active) { - qemu_mutex_init(&event_mtx); - qemu_cond_init(&event_complete_cond); - colo_compare_active = true; - } - QTAILQ_INSERT_TAIL(&net_compares, s, next); - qemu_mutex_unlock(&colo_compare_mutex); - s->sendco.done = true; g_queue_init(&s->sendco.send_list); @@ -1307,6 +1298,16 @@ static void colo_compare_complete(UserCreatable *uc, Error **errp) connection_destroy); colo_compare_iothread(s); + + qemu_mutex_lock(&colo_compare_mutex); + if (!colo_compare_active) { + qemu_mutex_init(&event_mtx); + qemu_cond_init(&event_complete_cond); + colo_compare_active = true; + } + QTAILQ_INSERT_TAIL(&net_compares, s, next); + qemu_mutex_unlock(&colo_compare_mutex); + return; } @@ -1377,6 +1378,20 @@ static void colo_compare_finalize(Object *obj) CompareState *s = COLO_COMPARE(obj); CompareState *tmp = NULL; + qemu_mutex_lock(&colo_compare_mutex); + QTAILQ_FOREACH(tmp, &net_compares, next) { + if (tmp == s) { + QTAILQ_REMOVE(&net_compares, s, next); + break; + } + } + if (QTAILQ_EMPTY(&net_compares)) { + colo_compare_active = false; + qemu_mutex_destroy(&event_mtx); + qemu_cond_destroy(&event_complete_cond); + } + qemu_mutex_unlock(&colo_compare_mutex); + AioContext *ctx = iothread_get_aio_context(s->iothread); aio_context_acquire(ctx); AIO_WAIT_WHILE(ctx, !s->sendco.done); @@ -1395,20 +1410,6 @@ static void colo_compare_finalize(Object *obj) qemu_bh_delete(s->event_bh); - qemu_mutex_lock(&colo_compare_mutex); - QTAILQ_FOREACH(tmp, &net_compares, next) { - if (tmp == s) { - QTAILQ_REMOVE(&net_compares, s, next); - break; - } - } - if (QTAILQ_EMPTY(&net_compares)) { - colo_compare_active = false; - qemu_mutex_destroy(&event_mtx); - qemu_cond_destroy(&event_complete_cond); - } - qemu_mutex_unlock(&colo_compare_mutex); - /* Release all unhandled packets after compare thead exited */ g_queue_foreach(&s->conn_list, colo_flush_packets, s);