From patchwork Fri May 15 11:11:38 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukas Straub X-Patchwork-Id: 282670 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 32BE1C433E0 for ; Fri, 15 May 2020 11:15:27 +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 F4199204EF for ; Fri, 15 May 2020 11:15:26 +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="brbWciR+" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org F4199204EF 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]:47846 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jZYJK-0004pD-07 for qemu-devel@archiver.kernel.org; Fri, 15 May 2020 07:15:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55842) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jZYFx-0001k0-Ug for qemu-devel@nongnu.org; Fri, 15 May 2020 07:11:57 -0400 Received: from mout.web.de ([212.227.17.12]:45535) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jZYFw-0008EZ-TU for qemu-devel@nongnu.org; Fri, 15 May 2020 07:11:57 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1589541100; bh=V8Ro8PCn+awct1ifQ7K17SdfEaWVDnw4fl1+hJCAEU0=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=brbWciR+gwN+EtGsRqLvfv+KYpyupVDNlJAn5fWby/RuZwefC1ciUiZ1YfF26mf93 NPl72WGnnOgJS+4pVGMyksdSw5/q5fLHjP5gc1WZnWu/15AYNTcEjtiC+mABREG4kt 2lpWyiLelLJSzfozjQI8xAElmtq024voOMKpvy/0= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from luklap ([94.134.180.164]) by smtp.web.de (mrweb105 [213.165.67.124]) with ESMTPSA (Nemesis) id 1M59jC-1jYSK73Nqe-001DJe; Fri, 15 May 2020 13:11:39 +0200 Date: Fri, 15 May 2020 13:11:38 +0200 From: Lukas Straub To: qemu-devel Subject: [PATCH v5 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:UaxdX+O290qLgsa8UWIDFt/lMcbTzHlpvbL0edd/IFhzpw4v/1d SORb9A9UL/KTQ6rxE6Go7XXpKFjtk1aOm/oxsQN/jP89JkqzETx9/OwOaq7WJwlxhQ8IEQZ Lmh59fHCpzjijH/dUet0pKhVyOB7JVduIA5/A/NrbdlyGy8zhwnusKh0AQ7NP7+VZ+jKmpt dUxQ8Ks1l/YnEuTyHtfVg== X-UI-Out-Filterresults: notjunk:1; V03:K0:TAbGL+UbG44=:OtnPRtzapNhuLA15sfnaxC /O3tv15JhxB8Rb5pVnthvS22YQH8fmzkNGSwTphdq2TCRn257NwMkhdpSDrm8FQP27mGrj3sL PV02w0novpyyyb9qLixgmYQYemZHf/W0GavCLIc1IZKb/oC0uoYX3MB4KeyJYkrWn5zjtDDKW 32++zTAPHBaaqDPXFYqZTMrK2f2MvpaV89wEPa4DAl2IF9nnbqteIZgf1p0JKIQH7KLRyFpSh 4zPuAVrHVw6WcyHyFXLyiP/vGsqFNSRGSjU3aA7/RjGv7XwzXzB7U/49UzCrnPCiOJjlTcFDx F1FQgTZHzwJWq6u/RZvc07V+pLEA4lR8bGSShUu6qoE9HMh/h1mBNJMsHE2y0S8W/elgrW6Rq 4vmgF4qx7Wafh2rCdybT7c3FCQ7Gpg5VV/DkK2vx8R4/9uZ8njGqVcu+JPCuageJTvEE5nQnG T2+qjVumFT20RywgsJAt9QzsY2ZE6A6taB/ELc/CV8scRBcSqDKIzdfVEQxBRxiWczCjXHmgc vm/mxScoqF0WLsNcsic2e289EfpAYCEcTzLu+fUvfstBo9bTKZU6e1ezzh8bCEindQbo+nAps O1qrU5KLJXPaA3MTM7du3/YAIHqJvKT1yJhdtDlTKEUDn2uHNEeb52h9Mcyykyo8NXjHQXgfn mzJd5mWjIY540ycJlHt43op4KgiXYhRhrKUcRlbILAjk6JJzAoKdG/EyPW2/VIS/JRfai/fS6 0hh1wWun0oK1w7KOZzNA4oaC4z8qw7/1ctEwxdDNMqY1wu2TSvC/O/mTkGAN4kakaKFphX8Bh qjZscL+TXC+pxAq/3j5CWBPF2P2kybFghu4VC0z9uJuUJ9puXcCFlmkXGdd4UkTg1joD2sPnI BD5n8fS+u/XI5zhjxo4+WnRDKKL23EbWb3Eo9PAHQujBJs0wTK41RideqYFPuTLu6jY6jeCzn 6GEi60ALhcIh62pO7Eol5vQQCnyIqLCqa8aS8Ciqupxpk9EKn/4+AR0oa+gEKlx3iguaHp60o ZUvcnEQP1jVsBTY/MoI921S7IInBvltqrX/3hSmWGhuhS9Zqi0z5tvm1Vz8uo4Lf0FOzAESdz HD5Tu9iUckEvpmu3IPPlEEq5LmuuX60GJ8OKxNaBmVNUMndaXlYTpya08oYh6e898oW33YNct R3RAu76TXYawB6FHbIRreUk9T5BLlqNtgsqyRZRvIoMzFyI7GVLr564w0VD9oJnd7nINhQoHn f42cL/CLZyyttMVIf Received-SPF: pass client-ip=212.227.17.12; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/05/15 07:11:55 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action 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 Fri May 15 11:11:53 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukas Straub X-Patchwork-Id: 282668 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 B6414C433DF for ; Fri, 15 May 2020 11:26:35 +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 7BE73204EF for ; Fri, 15 May 2020 11:26:35 +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="K6fFhFN8" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7BE73204EF 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]:40898 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jZYU6-0008AZ-Db for qemu-devel@archiver.kernel.org; Fri, 15 May 2020 07:26:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55864) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jZYG6-0001pl-Fk for qemu-devel@nongnu.org; Fri, 15 May 2020 07:12:06 -0400 Received: from mout.web.de ([212.227.17.12]:58527) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jZYG4-0008FH-Tq for qemu-devel@nongnu.org; Fri, 15 May 2020 07:12:06 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1589541115; bh=/BRR383xwz8e/cdtXOCGs/9bda64NE7CUbfcKKkSXtM=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=K6fFhFN8Asw3AJuU03sGHKyPqYXhFBF54uqC8Y33To6BJQW9aKfVITX7ri9z7/6TJ bZL3NGl+cdZcaswtBkMb37Jux3jZIJIncGcReB5boOlI7Dn+QNIVHomILfrBRMNtvi vtFDu8oX0v6AJUAfi6J0KbgGkxgfMhni2C2XIJS8= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from luklap ([94.134.180.164]) by smtp.web.de (mrweb102 [213.165.67.124]) with ESMTPSA (Nemesis) id 0LshWf-1j7Fp40H2f-012EZZ; Fri, 15 May 2020 13:11:55 +0200 Date: Fri, 15 May 2020 13:11:53 +0200 From: Lukas Straub To: qemu-devel Subject: [PATCH v5 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:zisGVcRHWVRf/jgsmBo3phHB4561wcsKRzPvPIek1z4aZ/W5q5G c+2lVHWMTMyaKNoa8sO3n3re/tYlnTH2EPvvc4Zp9vOS104+arD1ZEhPLWXbnN+zrpf5V6g vQIDHn5eQtBpJ1F3AAIy8vkQ2WCd2tayD31KOTLP6eRqfg53wi3swlruJpG6OtKi+Ovm2ef NMOGwN3EMb27LzydTtFMQ== X-UI-Out-Filterresults: notjunk:1; V03:K0:eBXHk8LzAHI=:4RuLsRscCmhekSUyogFh1o MduYPqZp/yd1PpDwN6P+Kmv4MAEGtbuE4nPL/LSh7z/ZlBZRzRoHvNLpl7r26slYjJHDQT/o0 ZCcj6jToD17pUbjxHBH2uP6ITLkdgskStElI2oSIqu8+IdX9UNnPvs/AntW/4AxFZRZI1HlyX k+z8VyyTPvRu87I53caNwIAITGas8k5CDVFASSsKTcJwytd4g7hoKvct5wHvgWy/8QUc45UVV 9j4U3uEmkw7yO2tjK6hMUGsZQLc3lVtBRmFFEVIuFxC6KEzJ6QbQ39Rxxa+YZwR1HROSyFZix 61GVYzOibSoq77wbtVcVXY0cuurwllqYN8bsSQxiDw1ZCpSG75Q5c0gS/hdAFPPmWieyypbM0 rUvEa9+greVAEQChp+vYfGlmbIuOYI7FNqzwUxtsPOgb7MABZPmBjxSERwWgvkQWW0D/QLhej DTRxj9u7l5/WmE44dkLMBtdyNg821tiU5eJTpxQIkqoXo4ZFj5i1pA/pI6o7dJr64jihESMbC +nZqVptIxz9LqAhUwGRFJHLIdPGfWHdMZYPUDYqysb2vXsyV1HKwBXrrS+w/iYR0Gg2cfsCMZ 9c/YJJU0Z2XJnjnjmQikIKCuJtJb69wIOHDBqWUz//lk5ZGHf4d3pm/AVeVG85VVzVwiDa28p 0ZwdvDsYfaUSEwTJa6JeZUKFxePw43aT1svvrOQyJZFLuRX2agQx2eOmoEsN/hxFK8+UTPxJB cPdNxSPggWDSvthSZ0x1Q4tfoWxiUvZiygK6wVBtKknyNI+VswCuq6Dgq79A+tXiypKfMf5ZF JIMFrkfJ4WHNRPwlZ3FokHmrfoRYnfSGJxkwPPyR3Nej3P3kOQ05xYoq1cGWGcprpBaioI42H 7S0qLZw/VXc88MpD85y/sx3rftTQ5iKr4ZL5sIe3IW4iVILHA8b9AMKOZNBShZ9wgPDs0wgAy nGzSj23KBS81TZCakUZ8dZcPQZ/jLVZn1aZjaGjWQgB2iG7wuMe7oGIqmc/FD9pSc6C8QHYCw cp6IKKcqTWIpqbKHuLV3bucqCWhJMab1z9KqEkCenovKTIU+v0qQYF/wjVyIzL2eRSF85P7iW ZZOTIXZ8vKV8arXQRYMDrds3oN6eWSU5EhedoKT/vTWSJ+7ljEvSOrWQqUC6heZpYzqAwVXUV GxwU//i7Fo9m0ovzHmJC0fZ7FOcChlVWAHIvgheneMjamqf/oAWqYx/PpBRVcPGGXFF9gtTqS /Js65jfKOm4a54yur Received-SPF: pass client-ip=212.227.17.12; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/05/15 07:11:55 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action 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 7886444cdf..7205fdac29 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; @@ -906,6 +908,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) { @@ -919,6 +927,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) @@ -1274,7 +1283,14 @@ 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->out_sendco.s = s; s->out_sendco.chr = &s->chr_out; @@ -1292,9 +1308,6 @@ static void colo_compare_complete(UserCreatable *uc, Error **errp) 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, @@ -1386,12 +1399,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); AioContext *ctx = iothread_get_aio_context(s->iothread); aio_context_acquire(ctx); @@ -1419,15 +1439,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 Fri May 15 11:11:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukas Straub X-Patchwork-Id: 282669 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 024EEC433DF for ; Fri, 15 May 2020 11:21:43 +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 BF7FF204EF for ; Fri, 15 May 2020 11:21:42 +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="eZ6lwOBv" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org BF7FF204EF 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]:58994 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jZYPN-0002MS-P2 for qemu-devel@archiver.kernel.org; Fri, 15 May 2020 07:21:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55912) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jZYGH-0001yb-HD for qemu-devel@nongnu.org; Fri, 15 May 2020 07:12:17 -0400 Received: from mout.web.de ([212.227.15.4]:36617) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jZYGG-0008IY-IV for qemu-devel@nongnu.org; Fri, 15 May 2020 07:12:17 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1589541118; bh=BYrK+knR+D/cawytbYf3E0l4+H25EAb667xb1e3Ktog=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=eZ6lwOBvZ0B7ozoEWD1Hqx58pzQR3T/YD6T1xK62WBauU9E5tN0xLnXlXZ+rc6oI8 gXA72p+xwr2O5hCuNlglzNuDupt3hsys2G/JI65ZkIF943Qm6SiSqF8q9BC4wXRY9d CTEBMzWnxrP4W9H+2N6puJhQLVDZfWMMxDZVM5DA= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from luklap ([94.134.180.164]) by smtp.web.de (mrweb001 [213.165.67.108]) with ESMTPSA (Nemesis) id 0M2Mq4-1jGvPO1gLE-00s2PJ; Fri, 15 May 2020 13:11:58 +0200 Date: Fri, 15 May 2020 13:11:57 +0200 From: Lukas Straub To: qemu-devel Subject: [PATCH v5 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:FQ+36GBUVENmTy3GC2bdyjjbghZ/xJ5un8p2CYuUY3xrySLu9H2 JLOUgXryGD/XOIZUEC/7ILqEllRgo2FEXd/QM+hB/TSECLrf/l3FbiEPDfkCIBZ2kuG8zNn FkMy9IyQu6DCrulXhvUNeNn8Uo6IsjlSZJflBJEP8urkvtvxEyQwMvn4XNX7P7ru5/XL0y5 a4tXTEY1xSbiAVTTz355w== X-UI-Out-Filterresults: notjunk:1; V03:K0:zBsY1PSxvXE=:SSvs3vrwi/ycdYa0uaDrUy jncR8wC7jB6acd+w0iWbPQH1ukeI+HdkqRviAd1sLTHCA3maQHHhw9FDyRbFPa5hAGrK8BhH7 KeD0TrdS7gvG9Y1KSwHp8S7jk26TZghv3U34k13++SdRVCaeLx6NhTICp8M0VSzzGPW/e6LDH Byovfv0ckgMWcMikyruyryjbs7lJy6F9LA76m7R8/I+zWn2BSh3V9a3LHX8+ntP77NkYezTXS uw+whDYw7dwhLomN4q5rSy1u7esVhhRo+lE/PuNwIYDgonTe3Qjey+2oYwOc9WkkXyVKmEuwW 3+BDkGWNhuTcAUezfNYjH6lWf9LGHYNRSatZoslMNWQMsr99JNB3NYfqzsPdN1DEj8zrcCGy6 NIYHg849d2woV+UKuVdQ0ZL1p8MfBOW905qLLOWDMgit0JteGai1qfEyshw8KXROTAByfFhPY qj+Q0nPqwNla/AzDF9sOLIY5c6DkHS6SnRy0LlD1obGb7fY23DsivMcBvUaqlyqKOMa2OzQpU n3/fRCRE6usTySyKwWfhhrwugEaa8NkzE4rRvLpcoxHnKB+pteE9CXiCQRSZrdejCp2RxONt2 gKuQg8qQuDnYA0pW3jjp67Ilkans03o5JdQ7/4yE1i3jdcfl2xDl+rSDqDHAK3zbYTjdnO4n1 FUMeIHlGYQWhtVY0cqXYsKPmmeyrjivrwEtfkJxJhWNZttBnFv7mkA7ZlDrtikdx76mwYnzGi zrPu7A3bKbs16ZyBrfY8WriHifeV0LKGeVxb3VpUPssDykKzoP2LRodQ4CcsKyKmy3nZPfC0g i+4P4Zn49GVlrIXV9Ybgde5q4wQVGM7Eq7+7R3R2Rr1I/yOYow6DdatcMBKFKuD81gVN+WRcR MkRP5XB7rZzeEWUbYM3MQ9xUIysHS5tLaLJNP+nMrlvtpy81h0AozSLhJtlAcKUyT0NtTsn7e immjGDdatlV93FUkRTpRtrWk3Yr2kvdQgK9+zBk3MeArCare78tiRwb+4mPCcC3Is8ilT6bX2 RpRSpOjubCn2P/tYwSRcYh0PaUhiMP3Mb/u87RJBq/iC8ukZ3abRlPG2FLyQnEvm+iL2BJnA2 HnfhwR7L/8wUk7byrK2p+AxucqSAxflBrDw8IIni5CFL1YUdkfnTKnZIiiguOg6x5a0Li0mV9 hRGTQF90xLMU3Hi0IZXrsVTuM/EeNn63hXl1K6VbYkG19tCxV0W10I92Ufg5E7RusOMnG3DSa FKHXS4UaAOmhN+ueA 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/05/15 07:12:15 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action 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 Reviewed-by: Zhang Chen --- net/colo-compare.c | 45 +++++++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/net/colo-compare.c b/net/colo-compare.c index 7205fdac29..fddc955229 100644 --- a/net/colo-compare.c +++ b/net/colo-compare.c @@ -1283,15 +1283,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->out_sendco.s = s; s->out_sendco.chr = &s->chr_out; s->out_sendco.notify_remote_frame = false; @@ -1314,6 +1305,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; } @@ -1386,19 +1387,6 @@ static void colo_compare_finalize(Object *obj) CompareState *s = COLO_COMPARE(obj); CompareState *tmp = NULL; - qemu_chr_fe_deinit(&s->chr_pri_in, false); - qemu_chr_fe_deinit(&s->chr_sec_in, false); - qemu_chr_fe_deinit(&s->chr_out, false); - if (s->notify_dev) { - qemu_chr_fe_deinit(&s->chr_notify_dev, false); - } - - if (s->iothread) { - colo_compare_timer_del(s); - } - - qemu_bh_delete(s->event_bh); - qemu_mutex_lock(&colo_compare_mutex); QTAILQ_FOREACH(tmp, &net_compares, next) { if (tmp == s) { @@ -1413,6 +1401,19 @@ static void colo_compare_finalize(Object *obj) } qemu_mutex_unlock(&colo_compare_mutex); + qemu_chr_fe_deinit(&s->chr_pri_in, false); + qemu_chr_fe_deinit(&s->chr_sec_in, false); + qemu_chr_fe_deinit(&s->chr_out, false); + if (s->notify_dev) { + qemu_chr_fe_deinit(&s->chr_notify_dev, false); + } + + if (s->iothread) { + colo_compare_timer_del(s); + } + + qemu_bh_delete(s->event_bh); + AioContext *ctx = iothread_get_aio_context(s->iothread); aio_context_acquire(ctx); AIO_WAIT_WHILE(ctx, !s->out_sendco.done);