From nobody Sun May 19 06:04:49 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1586371350; cv=none; d=zohomail.com; s=zohoarc; b=jau7SGs/Ux1Da1pjdLVcAUl0aA2FYOKFRQr/oyTZos98J4I2AZAEuR5G1eWkjzzYs9EbWHwaHgD0SjAQBMZNr7UjQPEZoRxkQjbTCqiRespc2lGzcsIQwXKT0DPCKyevbvYh7lBtfP9PIaDXMAtnSitcovGnC7AjUTUOvoYqxCw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1586371350; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ki96Rsv8ukGkeYFVLl7hXuysCDJ7ptV5JcTpG2tiuS0=; b=F0Vv2qGeHG0oGIz4hN5EcVTVob+ZT0pHVDTr1bVPvlkTOUnqsP3fBkffUtM5Kz4kGFY0mNqTdT17ygjahJHKXZehIHZuGpWO559uaEM85evJXU5EWGSr1JjScWCb2TRnfcLWHRUnCPdyqTilH/DlbvU9aB5VJrfZGCqSEMD+xtE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1586371350155246.70048523650394; Wed, 8 Apr 2020 11:42:30 -0700 (PDT) Received: from localhost ([::1]:39550 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jMFed-0008G4-5y for importer@patchew.org; Wed, 08 Apr 2020 14:42:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58022) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jMFWa-0006dy-QT for qemu-devel@nongnu.org; Wed, 08 Apr 2020 14:34:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jMFWZ-0004TB-PI for qemu-devel@nongnu.org; Wed, 08 Apr 2020 14:34:08 -0400 Received: from mout.web.de ([212.227.15.4]:38207) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jMFWZ-0004Qz-B7 for qemu-devel@nongnu.org; Wed, 08 Apr 2020 14:34:07 -0400 Received: from luklap ([88.130.61.62]) by smtp.web.de (mrweb002 [213.165.67.108]) with ESMTPSA (Nemesis) id 0LdmgV-1ivkXU29pr-00j2Rc; Wed, 08 Apr 2020 20:33:51 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1586370831; bh=w3iV2InOTr+OaFsy3Tv/Ld/RwwZF35icTcq2qLOoinc=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=WyesaHeA3VGLUr2X3l/h/2sFEdSpARmEoLQWh/6j9QmPifbdSzV5J5Fd0iRWJjbwr hOwND/EplZQe2O0XU7pPR1WQ5FwPqZGhnQ/pLOQlGs1Bef/nbNd6j3xFXnqnfa5/G7 PlLg5DlZiMr+zK+UoBh04xKdKnk8xYrqlfvK/MNg= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Date: Wed, 8 Apr 2020 20:33:49 +0200 From: Lukas Straub To: qemu-devel Subject: [PATCH 1/3] net/colo-compare.c: Create event_bh with the right AioContext Message-ID: In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/gJox=Qwe7=7KJydb8QH+p0D"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Provags-ID: V03:K1:a9zfYhdq6WD3p57xVTNR97ZmTuwTC78GUI//Eu+/9hozsshzWdH Z6XRQbkOWu9SyFw0HSHDwp3PbaSuiPlckgmXwzi1BAklnudNovtyHOBty699Qj6ZRk8ge/H TLubcIXZnfBkGu4ynQIZcNuiDx+IMnjjOHtkuB9lWeUnzLt2c81FkqA2W0WbSPeAw12SP6x n9+Ulzm9NiRgJ/rvz9a1Q== X-UI-Out-Filterresults: notjunk:1;V03:K0:yllrF+KxOW4=:GSiDFyfxRFgVKhlWsMVzWY B0JY4dl+W4RSvQ2AIPycUWjyJvAgxjbaX1CUZxVLYvYd5EriNIvDai6Nx5hW58VpNixhYhzBq tFqgq7CgxN/xNJXpN9hxMkJm0dzUb0ebiYUlrhP0AcFTCH+/u84gqxrGtQxHQV2XlaOC9x5AM /K/fJ22sEUAWBAumRTKX6hEa7MaU1qjRq15UReqT/P9jHs3DCUDgEa6rdNMxgXcrtpv8TQvpM 7GZahOLjviGKPJ0oOS20ESbmD7OPyGJf6GqdNLHtYZNcYNIgFSH0FE2tMGwnI92nPuK7rUIJr jbVWFuIq8l0yQMFe63gbP2N9PnB5rY8mC+sH0CINW6cspr7SjBbkkGEyAGM86U2XPhcCVcsDN fjvH/4xSrbb0NjGXmflcgOKuiGTHAi+mKOBVxjAoHozjScuSFkFU2tjEI4yerMdOOy6jOfakZ NkQ72en8Us6ADvk/b2wiJG0hxq5lbHUa/Uu3JqEM5lBoqk6h/D329igTv2zEQ6qHtZ3zsoEoJ juV52dXeDo0S2AdA7tjVPsg8taQS0yupRWD+1yGnQCUhb9Q3st8x8Wf/fwjRFuGoF3vddKkcT SnT81j/3ZGnOyspD4qbTrbFj7RZG/nXJNlzePxGW6rCewFVr3QfeyCsn0YjXbi4LUNb+cFj4B 000L7/0+oQWKWby8emUST7Icg5PypzO2UlkUfrLupgqqwkfq7pq0paZ0xfebRtzbBzPMTwbHR 7v29hDSl4oJqVq4vBueB9eLMMjlvMUPZJ93I1SilCPezeRlnmwV3PED1XKU/QbAuTlKrTf/d3 DQMmv1yAPTwaD8nBp003tubWcrhLsEchekAJrsq5BcHC5zbwghZKwoBRNOz1pQ/kzvZ5ZlV2q pfUlqsX9QDkkM7qDonjGtgOqOo3VRu3RU09oRdV+kLpu4BLPogTK/B/cW2iUt7FPlgqY/msob GoS0wHf1CAs3WQK7ENNGO/3Y/mzpIIR9tsoZKIeXi9AWeeZFguN1SxCEUJelpjBGkUC0FK/We 44PD7gx5+HWcLZWIcozyVmmGdiXfGea+jOv6BqZRocuQSkJ8ubV8emo/HIqB9pcjS0WoVgm4n J+Ogul3LyMsjMJN3BvRt2kZunU2F5jV57Bz3rF8/HgGz3ZIVy2yVr5WKKOtMxz60nmlXVzzJx 2ovU4eA83z3Hla0YWM9pQWLjEWOQ9XRRdTLyK6ZB5i45m/yydB8e9XBqPZUUz+Fs0DqNNOhJG FgrO9LmZ48HrhZ8/T X-detected-operating-system: by eggs.gnu.org: GNU/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?B?TWFyYy1BbmRyw6k=?= Lureau Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: fail (Header signature does not verify) --Sig_/gJox=Qwe7=7KJydb8QH+p0D Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" qemu_bh_new will set the bh to be executed in the main loop. This causes problems as colo_compare_handle_event assumes that it has exclusive access the queues, which are also accessed in the iothread. It also assumes that it runs in a different thread than the caller and takes the appropriate locks. Create the bh with the AioContext of the iothread to fulfill these assumptions. Signed-off-by: Lukas Straub Reviewed-by: Derek Su Reviewed-by: Zhang Chen 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) =20 static void colo_compare_iothread(CompareState *s) { + AioContext *ctx =3D iothread_get_aio_context(s->iothread); object_ref(OBJECT(s->iothread)); s->worker_context =3D iothread_get_g_main_context(s->iothread); =20 @@ -906,7 +907,7 @@ static void colo_compare_iothread(CompareState *s) } =20 colo_compare_timer_init(s); - s->event_bh =3D qemu_bh_new(colo_compare_handle_event, s); + s->event_bh =3D aio_bh_new(ctx, colo_compare_handle_event, s); } =20 static char *compare_get_pri_indev(Object *obj, Error **errp) --=20 2.20.1 --Sig_/gJox=Qwe7=7KJydb8QH+p0D Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAl6OGQ0ACgkQNasLKJxd slivIBAAkR0gFmbZqoX0iumAopzcoTmqQXl4eiNqECHlHGV0Abkz8bkvAoZEIZh+ 3q8C5rg2FX4hqV1oQU9yJGd/ZIR/1AnqQ8UBmJ1HnOLwT5wuMil672o40bN3Jsmo kzxGjVkXOx3PO69+UoIYrk7Bp9ZcPqXtTsc3D875JUPC/Ew4RpU3XePc07DPaUGv BbRFpTxhg9uj7d+FIUenj88kSXcd7431fkWHONOn0BLvICr/VjggZrQFqiDL6V5W 1OPDkyZJ/MPTvicRPRiROlq4WU0177+7fn0SrVnLQTi+bSw/3S1VNE/0eJAHgXk+ Zgt08g8xLqLdTnSMZ38HzwiR/XssL0I0Vc5LUstaIEE3e6RReRce309AfjDMpWgP BU83qpg/si0nMNaubT/1TdZv5+xIQYj/mQ1l7lGTYgnyiaNCDukYCXuReOamBy5q KCmwizmgJhsUguhonxlIflMudqSiov4UmIdHjxEK7dR9YGhg4tDXiTCbVCSX3Hh8 kmQyXw/+kkY4H0JgNeMTUzwbWbg0FFEQjtdVavqRVKNwS5VcC7NQlKLSTRgdI4sZ Qrxl5DharptNxHwuB55out9x+WP7Tr2v6wpWTM+YEb1SAclXzOHKi/P4eC+zePxj 8BcGSXM9iPhJbQtVyQb0gn37mAK6GOWeEM3hcNCFhtPoJi90tWg= =r0Ay -----END PGP SIGNATURE----- --Sig_/gJox=Qwe7=7KJydb8QH+p0D-- From nobody Sun May 19 06:04:49 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1586371386; cv=none; d=zohomail.com; s=zohoarc; b=U6e1sWXdpR8/3GGINj6JTwQk8WeDtSQgB4qXD2vg4bZ2MNW2aWaIKXKRc+pzM1/R42vjgKJ+S0GkhWSnjKQq4GWCjYq1n+UOuESQoN5Eyz4srclrnBeid9hvOkZerQmEVAecUqJOXY03lsNOX8yKQp2NOVS24CkmV/29ifD32zw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1586371386; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=fRP2gILodyTCxtBpjxPvO86JxJT1ry1c/baMXHHFOfA=; b=XAx+OKZgY5aEPak5Dh0abrXzJYgmRohW7GBc/KEyPlipJQ5SJ6NUhyhjuLkQrHWu7v2OlHM2Sk5iN0Ttrx/f9pep4wHvsrj0KjW6kXxkwD05ceLqWJtVj8C5Jvuod8wYjEuZhVDZgNpleyakXIQlFE9Ki0YioKrB6w0usQ1WInI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1586371386611372.70913819831105; Wed, 8 Apr 2020 11:43:06 -0700 (PDT) Received: from localhost ([::1]:39552 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jMFfF-0008Jr-2s for importer@patchew.org; Wed, 08 Apr 2020 14:43:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58060) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jMFWh-0006eu-BL for qemu-devel@nongnu.org; Wed, 08 Apr 2020 14:34:16 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jMFWg-0004Yk-Ee for qemu-devel@nongnu.org; Wed, 08 Apr 2020 14:34:15 -0400 Received: from mout.web.de ([212.227.17.11]:46761) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jMFWg-0004XN-1J for qemu-devel@nongnu.org; Wed, 08 Apr 2020 14:34:14 -0400 Received: from luklap ([88.130.61.62]) by smtp.web.de (mrweb103 [213.165.67.124]) with ESMTPSA (Nemesis) id 0MPHKO-1jQdEZ10wC-004VBS; Wed, 08 Apr 2020 20:33:55 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1586370835; bh=Ok7tKtjZZkKFvWc5NnUyDQ4Xr69cRQd1e1Rf/HuBLN4=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=B1+Ng5uxSFUmv9TQKe59ZQw7wMAeif7QVySz8Qk5lgdi/OuzsMQ39iUV8dUkXfMlS qN2TebgTZcHTMXOPa57u/lib5CFj8ojcUOJneKzSOLGRG/cpYgI2ZKkcu65H/dTKJm au3pl3oLW3b127PJMaL6f8F6V1gqWpI2zhiSeKJc= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Date: Wed, 8 Apr 2020 20:33:53 +0200 From: Lukas Straub To: qemu-devel Subject: [PATCH 2/3] chardev/char.c: Use qemu_co_sleep_ns if in coroutine Message-ID: In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/DuFjdNgzUpI/ZMtZtNsb/0T"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Provags-ID: V03:K1:k1fw5k77W1NyeRTs3Wjdh2c+m6balKpYGf7d4/4vCZqFPea4tjl BVfTjA1Ncywgbt9jQcPTrx9yc2Ao5r85wGiirMnGgm2Ngvgp+b3J59IrUXdRELkWYlbwzeY IZsNmuECb3fybvWOu7Y7q5X8DYq3za/fYO0cYfTxsLgmUmrE/6UnDCRZP+JH4fzx0Bbxmm6 84mFVf8IDwPT1SWI7OEJg== X-UI-Out-Filterresults: notjunk:1;V03:K0:BT95PjSaaH4=:z8+hTZBDLXdQXzvWczBjN9 YLLVsE5cQDTIWeRviWWwKIAUReIh+nj2FK/H6Y7nQOQDvnLVdPyzJBlr6gSg1dgCb25Srm5ub ESSles58iTVkMNY/uaXNa7QdmE8w445UMK6nLmL1ApytZ9OAdXGD79O16gYThPvBsnT1me+4f QnnSN/1PTaZfkAXLIaQGU8z0G8oG2AwfDSeDiprZmhNCqhLii1ddn+ZMmIlXPkBv11AcWQbSf xzEHoT/lr7NwOBDnuge5Lfr5cs4xqNi74UjGYAvIMAvLuGrQ+3HC/NNqXQRzlY0dtPyHgsr4m F+FxWvlUA3fEoZD7FiWZKH9fOMfBaMZyLBO/W1/dc1U4n4k9SFpf2WiGqv/YYQr+M6TGydKIr 5ccx2iX6u8w40roWYuIv/+9XIOeAUjzTlntNJeCfMTkSNV5mCEqO7nREfQ4xDKLJoF/6QJyRE Pg1yiY6DDCOLViB8sLwihfAcBBuz8VcLtH/vxF6lOQNIiWb8AtH5bkAB86BLSUxvfJaE4K/4g uwNKsUgAf2voX++A7yCah6kU5HfZ4S16/pxBSHOde2N4J/B8AjxdpkPuy3J6JQlWeYyN1lt0L papGKVVxU+kijHQrfrtw3eZc1xm2cqivZCGY9T3eYa77QG96OM+Qv4mrG8Q1SEiR9X2FWduGZ 1s6jGBPQYxDpcsNMyYD7RQE/Af8MvDwXrEzgDCuG+TdBEw3OwXCEG2nL2YCVlkUlnk8tJdfrD GZphpvJVHtVJ5NiarpR5V7J1ewB9jH4jSYOjDM+hehmVfzj2j/vEJlml3vEiYi/Gg+IEDD8kO sXGG47ZPAia2u3G90SHFTKnQNR0+a9g5znuAoJJPyKwV2HtmuYFyXvq0NwqlODSkg7jLnC90D 5iF8Bd/S+ytJQaHOhVMepmFnZjGQjFOiFUCwn0b/+khtncbmuyXQ+11qNW+oMfgqvfJ0w1Ysh yEWpWi7Ft1983+G5WRalf8iFpQoItmajGl1dwJrNkZHvAioAYWQ08M7MXMWwJba4+646176xK ZKh81YbaCpeS+Y4TVE9Z/cKE15QaD0Sjd7XgwxIFbXK5gnevH+hh1dansm+kdm5YFIhdDS7fB SmFXBwpXKfd6+H0uZ1jyDfhoUUgqda1PNKhB7ugDTqs7akWZR+rlNjG2i2qvdFauv2X3nuFvH 8Hh8KkTlufSupu6CZ7oyxUm83xJ0XOlSu+xRu4q3fZmx5EaMTKupaKJFXdMssX7vpCp07kKpd fV7HbzSUjwQZPPGmJ X-detected-operating-system: by eggs.gnu.org: GNU/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?B?TWFyYy1BbmRyw6k=?= Lureau Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: fail (Header signature does not verify) --Sig_/DuFjdNgzUpI/ZMtZtNsb/0T Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This will be needed in the next patch. Signed-off-by: Lukas Straub Reviewed-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Zhang Chen --- chardev/char.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/chardev/char.c b/chardev/char.c index 04075389bf..51ad0dc6b3 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -38,6 +38,7 @@ #include "qemu/module.h" #include "qemu/option.h" #include "qemu/id.h" +#include "qemu/coroutine.h" =20 #include "chardev/char-mux.h" =20 @@ -119,7 +120,11 @@ static int qemu_chr_write_buffer(Chardev *s, retry: res =3D cc->chr_write(s, buf + *offset, len - *offset); if (res < 0 && errno =3D=3D EAGAIN && write_all) { - g_usleep(100); + if (qemu_in_coroutine()) { + qemu_co_sleep_ns(QEMU_CLOCK_REALTIME, 100000); + } else { + g_usleep(100); + } goto retry; } =20 --=20 2.20.1 --Sig_/DuFjdNgzUpI/ZMtZtNsb/0T Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAl6OGREACgkQNasLKJxd slhKcQ/+On2FKNMk/h0d2MJTB2FPl+Ve+/mVVexpjwZke1c1rH5k6PXt70EcWdA5 hoKVBuo2aUlK93gs2OFt7ms+NI6Mn7+XbIMnJtSKa6C/pEjC+O27IgLWP8gP2Awx k/gmvJZ2WO062Gg7iK23h+vxhCMz2XahjqdZvuRw2YyLSZdUrfmNT0OUe5fg+xMz /dzKeUKaUGeoZOeIapn1nlF+RCBFH18QdgGlGBrn9y+eDqzTm6ZWpbh+k9WKahhx ucysuyILVQSec51VWGOzodSd/YmFNlhFqp3RhK7s/qUaRuqfKUREyh798FGhibd7 sn0map37KLw2u4iAhY1+/tUat1pOgUQtS9zY3uqX6qveHMWgkMZFo2jU8/Dj3EyJ JWOLhgH3vFZKfOwqUqdPREpPAt8hMpAqEBNXAtjDVQzMjOM02TkfwQuOuINTCczr i141LN/48g3B1YU2B7CJ0b4N/hJI2ukIwj2e1NvdbNdZfZsTweKi+IoSImWpPSE/ rZL7CaC1et4c+qgUMPN9O7QODC27La+TL3fuieK+HEJYhD3gQv+MC3Iy41Fx0o2W SZ8kNTVCfATOBurNGGQxInunE3XwT5SOCbYRTW6CIW9pOLnhaTgsne6iRYjBEfrJ fD6H+sVo09Pq26jfVmnagq7dqOJGXxjbD+18ZCZndqNngT71bSg= =zSeq -----END PGP SIGNATURE----- --Sig_/DuFjdNgzUpI/ZMtZtNsb/0T-- From nobody Sun May 19 06:04:49 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1586371409; cv=none; d=zohomail.com; s=zohoarc; b=cw4TyLaWVugEJqL5l1xusBNbgSX2O07yKWx+gt1DTn50gJC9Ew8aglyINEy9jke21cgcwNPhKTdQCfnb7ULlFFfO6t6aW6u13HPPww7IoCKVInRqDCxndvXrEDhWWKXq3N4z4FUl2WcohlHgNfHBH3JsXXQqvgFzyfkITXHpIFQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1586371409; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=njRyg4qGwKSf0iprtxIVY3kATJaDfHGEg7q0GtSzP9M=; b=l7h2b4vrs+Rs1oHTIwfmlshWET77J6OcI5gkKoxQexIAJjJsoRfF18sInRGgSbf7BLYREXn1Pwglx4urJAtGaNqslC42Gda9slvpxIng9T1hm46T/+SOlUjzjGHZtaxH3n3OOKOR72Jg0LoVkzpC938oX8u+Xs6Q/8vX2/DDBJA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1586371409093852.8216028274163; Wed, 8 Apr 2020 11:43:29 -0700 (PDT) Received: from localhost ([::1]:39554 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jMFfZ-0008MN-Kf for importer@patchew.org; Wed, 08 Apr 2020 14:43:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58101) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jMFWl-0006fj-57 for qemu-devel@nongnu.org; Wed, 08 Apr 2020 14:34:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jMFWj-0004bM-EY for qemu-devel@nongnu.org; Wed, 08 Apr 2020 14:34:19 -0400 Received: from mout.web.de ([212.227.15.14]:45147) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jMFWi-0004a6-Tb for qemu-devel@nongnu.org; Wed, 08 Apr 2020 14:34:17 -0400 Received: from luklap ([88.130.61.62]) by smtp.web.de (mrweb002 [213.165.67.108]) with ESMTPSA (Nemesis) id 0M6ml2-1j890k1HAi-00wV2b; Wed, 08 Apr 2020 20:33:58 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1586370838; bh=RhytEYIToMDE5YHdnIg0FVpbU4nEuG0hSpwe6f7bLJU=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=AID12IoXhOz6+9wbx67GZ7YWliMxBfdzv5mHrgbxD1gpPWeqGC8X9o/d+Mu936ETq jZVFnHieq7ePj8Xn89kQ871GFk39wfJJF6nd5T1lC9i+cwpyHpFf2i2HNFaORwHBPE zCx/hQlUMR7i2H+HdltCHBtFKE3FrErmOc6MbXnk= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Date: Wed, 8 Apr 2020 20:33:57 +0200 From: Lukas Straub To: qemu-devel Subject: [PATCH 3/3] net/colo-compare.c: Fix deadlock Message-ID: <87c2f42b46f93fb89867f82e45aa2689eff98432.1586370737.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/L+2.h.Ec3Jq0qZHEGzP5U43"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Provags-ID: V03:K1:6P0btB26cQR3S1W4ZnWoZmq2Q1A9azBS5IUKaWKmKtcj4u8oa6i cboZDiG6i5kWVsTZnXUy46S3owUkD+RM+ydU9GfyOtStf9RuuIExC2ciDbOx1zg8vDyDamU ehLUCpS76hdFsoLajMpX7XzH3gA2HAwGnXSKDiGz9ghcyFj4ymmGlalfbgQF3vsm8K+aJ5C SmL7duObJkyGWFadBwNvg== X-UI-Out-Filterresults: notjunk:1;V03:K0:mkh/OnB4Thw=:zlGTC46mkMPzvm9NVyLQFr rNSMPiSVRO5WgPjSyvGr9VvOEKFnKv5Z/GI7GBcJfSpMgt6v5deJN1lO8LKpHcjD2yNcBJMXD x8SDmI8RKO0UDT7g48VvqU9G8pGyt500fL+8a3wbnjS34je+dRANsGygGvCwFb+T1+7JXYNfz CIB9jLJ/ZrJEd0WYtWmE68Tj9x0NsSAoc9cx3twwtmbyT+HoCGwMB9qhLFuMitW9GuIdyhVcV JgIU4f6f7+Ik2GZuI7t1vZtkAkn5yiZiGJHZSVxyrfnSQiF10HpoYqYdi+yNgD4hWUhFKm20F RBVVSsMkVD5CvNL1G9ftIaNu6Xr4LgfpYiYzR/kwIjkojS2HA2bKRzYQF0SdJ5fInRPu2f25T 23kccOeNcPD76Gl6qX+86FLXmygXCn1ep2LFW8EUB9TU8oJwpY2pNYIImHDICgEX4nPPXjvcX eNflK8lF9ROVP1pHvoLIjDsiO8I2mss+RdkLvMNcHIm8BjLejraGhpPOwamVciFtMmgd2+2Xm VR9WOHqjiTiAe3h/+7niB6x4dGLh6jLQFZw+9DwAfb3gLmYWgSFtxVe9pW9ChYrXbGqC2Xlkf 4eaW261ixYNIq7+J1gTt02Zu1O2pIGk73Ku1D+ZXOTtb/O8nePxrsGEhwiqmJ9Pc5eLZxowd2 PyU2j/7Z6GPCAuIQMqHe7P0Ybcc3XRcPDr0xdZJhkSEJGqcaUlI8sLxBw96+YvG/oSMwzzvYu Pu/mwyYEMeP1pD1+CBZlTHQ08e6bfbkbI4D9CZE9y9jx/q3k8BuLtE3WRwdHh8aK91yXsUaUQ fSlOKFSAZrn0grS+cfzywI6P3psKrfRt+ifOG8xmC3XO5JlMpUHcJOqr8vYe3+YIl6HtU1MsG IIZstG5grCvD61hQanHML6di/Ss/Aw4QwtbJzSi3P4qVCeIWZQi7BIvK1ff6ZQxDJ7vSjwr3d BC5OMpYvw1xmU6n/HHlHfMVlj7lLNtXb1Px5vePZF0EHl23Eu1tbxuk/GAFtOQgHuRV//OL5u scLwn//bbr8QWmCHfZAs8ZK1n73bgi+Az0wS6TAyjdkb7s8E42+irc+nJ0tR+F4vnWnmv9qmJ UdzfgPWxprVSiEEWO4rSZANEDjJ7YKaNvknyjEnPWValK/Ja27hvmssdWfBgba17bQtlSaeU8 8tCTTvEf2DEnrXQpcLysXsDlQjfgl2533aG1mOpa1CFO/ZdSiMYmKbxow6SP3VaX64D0l8gxI dYrzJcCMN+HXysdVO X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 212.227.15.14 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?B?TWFyYy1BbmRyw6k=?= Lureau Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: fail (Header signature does not verify) --Sig_/L+2.h.Ec3Jq0qZHEGzP5U43 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The chr_out chardev is connected to a filter-redirector running in the main loop. qemu_chr_fe_write_all might block here in compare_chr_send if the (socket-)buffer is full. If another filter-redirector in the main loop want's to send data to chr_pri_in it might also block if the buffer is full. This leads to a deadlock because both event loops get blocked. Fix this by converting compare_chr_send to a coroutine and return error if it is in use. Signed-off-by: Lukas Straub --- net/colo-compare.c | 82 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 71 insertions(+), 11 deletions(-) diff --git a/net/colo-compare.c b/net/colo-compare.c index 1de4220fe2..82787d3055 100644 --- a/net/colo-compare.c +++ b/net/colo-compare.c @@ -32,6 +32,9 @@ #include "migration/migration.h" #include "util.h" =20 +#include "block/aio-wait.h" +#include "qemu/coroutine.h" + #define TYPE_COLO_COMPARE "colo-compare" #define COLO_COMPARE(obj) \ OBJECT_CHECK(CompareState, (obj), TYPE_COLO_COMPARE) @@ -77,6 +80,17 @@ static int event_unhandled_count; * |packet | |packet + |packet | |packet + * +--------+ +--------+ +--------+ +--------+ */ + +typedef struct SendCo { + Coroutine *co; + uint8_t *buf; + uint32_t size; + uint32_t vnet_hdr_len; + bool notify_remote_frame; + bool done; + int ret; +} SendCo; + typedef struct CompareState { Object parent; =20 @@ -91,6 +105,7 @@ typedef struct CompareState { SocketReadState pri_rs; SocketReadState sec_rs; SocketReadState notify_rs; + SendCo sendco; bool vnet_hdr; uint32_t compare_timeout; uint32_t expired_scan_cycle; @@ -699,19 +714,17 @@ static void colo_compare_connection(void *opaque, voi= d *user_data) } } =20 -static int compare_chr_send(CompareState *s, - const uint8_t *buf, - uint32_t size, - uint32_t vnet_hdr_len, - bool notify_remote_frame) +static void coroutine_fn _compare_chr_send(void *opaque) { + CompareState *s =3D opaque; + SendCo *sendco =3D &s->sendco; + const uint8_t *buf =3D sendco->buf; + uint32_t size =3D sendco->size; + uint32_t vnet_hdr_len =3D sendco->vnet_hdr_len; + bool notify_remote_frame =3D sendco->notify_remote_frame; int ret =3D 0; uint32_t len =3D htonl(size); =20 - if (!size) { - return 0; - } - if (notify_remote_frame) { ret =3D qemu_chr_fe_write_all(&s->chr_notify_dev, (uint8_t *)&len, @@ -754,10 +767,50 @@ static int compare_chr_send(CompareState *s, goto err; } =20 - return 0; + sendco->ret =3D 0; + goto out; =20 err: - return ret < 0 ? ret : -EIO; + sendco->ret =3D ret < 0 ? ret : -EIO; +out: + sendco->co =3D NULL; + g_free(sendco->buf); + sendco->buf =3D NULL; + sendco->done =3D true; + aio_wait_kick(); +} + +static int compare_chr_send(CompareState *s, + const uint8_t *buf, + uint32_t size, + uint32_t vnet_hdr_len, + bool notify_remote_frame) +{ + SendCo *sendco =3D &s->sendco; + + if (!size) { + return 0; + } + + if (sendco->done) { + sendco->co =3D qemu_coroutine_create(_compare_chr_send, s); + sendco->buf =3D g_malloc(size); + sendco->size =3D size; + sendco->vnet_hdr_len =3D vnet_hdr_len; + sendco->notify_remote_frame =3D notify_remote_frame; + sendco->done =3D false; + memcpy(sendco->buf, buf, size); + qemu_coroutine_enter(sendco->co); + if (sendco->done) { + /* report early errors */ + return sendco->ret; + } else { + /* else assume success */ + return 0; + } + } + + return -ENOBUFS; } =20 static int compare_chr_can_read(void *opaque) @@ -1146,6 +1199,8 @@ static void colo_compare_complete(UserCreatable *uc, = Error **errp) CompareState *s =3D COLO_COMPARE(uc); Chardev *chr; =20 + s->sendco.done =3D true; + if (!s->pri_indev || !s->sec_indev || !s->outdev || !s->iothread) { error_setg(errp, "colo compare needs 'primary_in' ," "'secondary_in','outdev','iothread' property set"); @@ -1281,6 +1336,11 @@ static void colo_compare_finalize(Object *obj) CompareState *s =3D COLO_COMPARE(obj); CompareState *tmp =3D NULL; =20 + AioContext *ctx =3D iothread_get_aio_context(s->iothread); + aio_context_acquire(ctx); + AIO_WAIT_WHILE(ctx, !s->sendco.done); + aio_context_release(ctx); + 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); --=20 2.20.1 --Sig_/L+2.h.Ec3Jq0qZHEGzP5U43 Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAl6OGRUACgkQNasLKJxd slifIQ/7Bd9MoM7cQKU/zp+g74f73NtSsFn7C5K2EFq63kPCdvn/wY/nqJ2tNNv5 sUsBxcFuMdNnRisyEBR+ClJ//cf7WLind7rR1pTDsU1tAJt/IHQDTQTEANpF7Ym6 2JaTZRuWIebbMhklBI3OX/B5LKKTb3qs3cBdV6dKuuG5TSfBAhzvrTjKEKhiJ2dj EZb1ZroIGqEVTXAw2QTbDm+HcmcM3EoUK5ctfXi+YDat2qDyMMni41j9tXWsqtX1 iLXfp28hMObbwa4Tvb2qKve0KA8LgB9fiFVa5Vvr2As5Hgrxfr5+PSD/6ZldsQAU loJwzQapTh31Co3g5jxid+3tZIkhYND1KkZ50Ad4Wys9CIubLZH5JYQS9fcWDncF ITgOtHDW9l9Py35daa6EpwLsQ9yhoL/jyxarvxGXXxx4gtupTScmqXOLRN1d2wwM VYuPGqulA8c2harNIBuxIMJpErS+zsCnEPke4ACZzNzemEdRixEVo72pRD1qJH+3 16nO9LObWL27GD/8BsYBYinaYJRRjbk+XsGtJgcXJgjem8gD0l7FpSsGJM7lVAom IdJD1U/ZqKmN2Lvi40ry0dlo2F+ObsSrW9Ga5qSr/RdxX79Ni1FsPsotB/nom7NC CNbDRfXiMm+O7yYjXjBt47C7vwSk5RtvTDLAFqCcXbykj6YHmjk= =U53D -----END PGP SIGNATURE----- --Sig_/L+2.h.Ec3Jq0qZHEGzP5U43--