From nobody Sat Feb 7 10:08:19 2026 Delivered-To: importer@patchew.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=1598952073; cv=none; d=zohomail.com; s=zohoarc; b=UPHbLNrggVlu23ZLhLgEoTgTtr9M3XvTuY0TwZXXAMQw0c4HvsBd8ASxNoGv3GQVWLRKgJRbIPwYJRNC199xKc8zCVhA9CWaMoImcLpcq/EWpugRqmyhc3pW3rPYHo/gvemFvWztDJpqhLO4LX0TC4YDoR2j5eSYd3oV0qibtk8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598952073; 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=I+BSMJNj+krIYt5OHB/ZSiOjRnDPCuwY3h+YcaZnhpg=; b=G3n1ZZP2mtNgQ1ESudv52TfImbfygt6m3gw2KSImjRBFTDHZ3pIJgOwU2J46/Y8tI7/Hgok0WJWBl8wa5GNL7ogzjO8sioVfVd1Cv6BJcsGbh6lJDiTJqD3n6wnG6RaDfwG+SIhA0nvc2SooOg9DFsAYrIAVud90qVaSaDbfl8M= 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 1598952072978704.4233105051602; Tue, 1 Sep 2020 02:21:12 -0700 (PDT) Received: from localhost ([::1]:60608 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kD2TX-0003EE-R2 for importer@patchew.org; Tue, 01 Sep 2020 05:21:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34646) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kD2Np-00023W-PU; Tue, 01 Sep 2020 05:15:17 -0400 Received: from mout.web.de ([212.227.17.12]:51301) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kD2Nm-00079z-RO; Tue, 01 Sep 2020 05:15:17 -0400 Received: from luklap ([88.130.61.220]) by smtp.web.de (mrweb106 [213.165.67.124]) with ESMTPSA (Nemesis) id 1MBjMM-1kIaIL0ptE-00CPAE; Tue, 01 Sep 2020 11:15:09 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1598951709; bh=FGVcXS49B3ghj8/SIYCEvRl6W4CeHpT1H1JlfjhaCys=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=GcgBZoPH8O/FGqxdogSiRXICLIdGhlV1/udfhazUwiHjO7AawyqMl/6rukZNUReQo gTo59UyEo9SoCqPtK5jRK08Q0FshO/hFgx0tIIToIes3H++DtunREnfx2MBfh05xgy tjhkhLZ2oVUh886SnkeHl4JNNqhN51cAfm0UH+ew= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Date: Tue, 1 Sep 2020 11:15:07 +0200 From: Lukas Straub To: qemu-devel Subject: [PATCH v8 1/8] Introduce yank feature Message-ID: In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/zYu_kxxZNYSvNzwqWL33vlG"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Provags-ID: V03:K1:xOwm8OxUfjmWV2ElLILfkcf/Vrj61Vlbx4rsBr3aQjWadl4OReg vTX6689dN/05SjsWP0NdkcGk4BMxkSF+N8AvIdF/AzpePy9YKPLRu8LmTsE1/J9gPCgMqEE OvlBSpVbePAllRfsF0vt1PpOnBAMd0M+4qTdL5kFNRXYFQrZ2kgGSzQKWZ+0vEPrJRs8o33 vLX+SWeQKS+LPhngnjrpg== X-UI-Out-Filterresults: notjunk:1;V03:K0:t7OeT9xk4Ww=:S7BINj6kvjPamrtcuctuS8 iFN9dG0NQX3HYpd8riBCtXT/K5oVFvmSmItfdKBVs9QSMmXD5SDtlBRcdECgRuJd9nqMzNurl GGTOCrIxV8yKBQLjEGk0hbQKX6ype/Fl7iwRvuQi24tSKMca0Bt7rLeLHF4tRL88zUMSy/DTa h5VWv/WfHUM87GEvNwi7DqnKB2QxiDokWL8lCAxgfw4iBmf+rqbhH0qo+LUleSW1/eNwYjEmT iRfpaw2CH12yGb7+jd0yd+LSL+3AGFhm4WRzriJnmQqVwrabTEy2NSp6mZM0ScyUw5QGILWrh dOUtzZln3tsLEjdlYSzERwmTK0iE0TTb8uRQPiLpoaYX1mjMgoDgepn4QZte2zUoLS8Byq8J9 gNrIH5jAcUpB8XXv3BPpDxrvFeNukXzMORIvla5bUNUlaUwX7knwT63dm8aHx8k5gLWF1tz9n UUltiyEtXXyQHWitJmLDHI3Pw8swGTTVsY4DMXi4OgBkVOzpLYlfWkzPxCNcu7bWoFte87x38 rmAU1XiPorK/uB0AlwnkGM+ra/BwpGBBbnurm5EHFqvxHidddzZPbGjRcwT14CSBNnnhPlRqE j1ZeooH4VVJiuMw0kH9pqRwmjsfbwu0YWjOpoesapTJZbbv9FoBCtmkF/GsYveAxIKE/rTKCf nd3Io/m4Mr8pW/5tos6GCrrR96ZHlLGfFDGn/cjQetPU0cLDmgw1ZJe0fNuSntWacpB1PgT8M kjZFCeL9m2kOh1kUkniT4JBSgVi3/LGaZYdZetLHma6Sm031WhvjEz/aEXhukvBsfDPk4EnfM uL4D+C4vIx8VSCcmgvj+4QfLUClJQRmAS9KlihCYRRCt0UaiDvXACvMK/bs3/nCZodqGLva7p UrjQPe+dRUaKrIZen9GpUXldm8cvxin1Ph0OCPNO7C+w/F/eF6YrShAyYG9yLu2HGJAUd56zD OIadn4bnsYFBaMfZuNPOqwmzNLHqO9mudMwwpgBZV33+oGr/LwYKWoNuqWSDLs9tgQdZl+BUG x35Yn0p4ZoTR3xYXGFys4Y7ejdbtGKz3Mp2KPsiW2wD05j2NGx15Z7kVaW1VPAlUoKHgcAU2l A2c6l/Ng9gmhPpb2EykKtj01iSuwSxhzRpB4JzIu7/NVqTaGd0ww3kx+Ld7U+cg6Qb8hr9C1h ClqVan9Xcno206CMeSfndJWeDNXM18xgbXtQzZeeD4JARZWHoidNiWegeRgqZvy+PbLZv2ptq gnrqpxX1DkBbhwvQVMGsdpeXXrHBcE/MpyCbhsQ== 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; 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/09/01 05:15:13 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_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no 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: Kevin Wolf , "Daniel P. =?UTF-8?B?QmVycmFuZ8Op?=" , qemu-block , Juan Quintela , Markus Armbruster , "Dr. David Alan Gilbert" , Max Reitz , Paolo Bonzini , =?UTF-8?B?TWFyYy1BbmRy?= =?UTF-8?B?w6k=?= 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_/zYu_kxxZNYSvNzwqWL33vlG Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The yank feature allows to recover from hanging qemu by "yanking" at various parts. Other qemu systems can register themselves and multiple yank functions. Then all yank functions for selected instances can be called by the 'yank' out-of-band qmp command. Available instances can be queried by a 'query-yank' oob command. Signed-off-by: Lukas Straub Acked-by: Stefan Hajnoczi Reviewed-by: Daniel P. Berrang=C3=A9 --- include/qemu/yank.h | 81 +++++++++++++++++++ qapi/misc.json | 62 +++++++++++++++ util/meson.build | 1 + util/yank.c | 187 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 331 insertions(+) create mode 100644 include/qemu/yank.h create mode 100644 util/yank.c diff --git a/include/qemu/yank.h b/include/qemu/yank.h new file mode 100644 index 0000000000..c5ab53965a --- /dev/null +++ b/include/qemu/yank.h @@ -0,0 +1,81 @@ +/* + * QEMU yank feature + * + * Copyright (c) Lukas Straub + * + * This work is licensed under the terms of the GNU GPL, version 2 or late= r. + * See the COPYING file in the top-level directory. + */ + +#ifndef YANK_H +#define YANK_H + +typedef void (YankFn)(void *opaque); + +/** + * yank_register_instance: Register a new instance. + * + * This registers a new instance for yanking. Must be called before any ya= nk + * function is registered for this instance. + * + * This function is thread-safe. + * + * @instance_name: The globally unique name of the instance. + * @errp: Error object. + */ +void yank_register_instance(const char *instance_name, Error **errp); + +/** + * yank_unregister_instance: Unregister a instance. + * + * This unregisters a instance. Must be called only after every yank funct= ion + * of the instance has been unregistered. + * + * This function is thread-safe. + * + * @instance_name: The name of the instance. + */ +void yank_unregister_instance(const char *instance_name); + +/** + * yank_register_function: Register a yank function + * + * This registers a yank function. All limitations of qmp oob commands app= ly + * to the yank function as well. See docs/devel/qapi-code-gen.txt under + * "An OOB-capable command handler must satisfy the following conditions". + * + * This function is thread-safe. + * + * @instance_name: The name of the instance + * @func: The yank function + * @opaque: Will be passed to the yank function + */ +void yank_register_function(const char *instance_name, + YankFn *func, + void *opaque); + +/** + * yank_unregister_function: Unregister a yank function + * + * This unregisters a yank function. + * + * This function is thread-safe. + * + * @instance_name: The name of the instance + * @func: func that was passed to yank_register_function + * @opaque: opaque that was passed to yank_register_function + */ +void yank_unregister_function(const char *instance_name, + YankFn *func, + void *opaque); + +/** + * yank_generic_iochannel: Generic yank function for iochannel + * + * This is a generic yank function which will call qio_channel_shutdown on= the + * provided QIOChannel. + * + * @opaque: QIOChannel to shutdown + */ +void yank_generic_iochannel(void *opaque); +#endif diff --git a/qapi/misc.json b/qapi/misc.json index 9d32820dc1..7de330416a 100644 --- a/qapi/misc.json +++ b/qapi/misc.json @@ -1615,3 +1615,65 @@ ## { 'command': 'query-vm-generation-id', 'returns': 'GuidInfo' } +## +# @YankInstances: +# +# @instances: List of yank instances. +# +# A yank instance can be yanked with the "yank" qmp command to recover fro= m a +# hanging qemu. +# +# Yank instances are named after the following schema: +# "blockdev:" refers to a block device. Currently only nbd block +# devices are implemented. +# "chardev:" refers to a chardev. Currently only socket char= devs +# are implemented. +# "migration" refers to the migration currently in progress. +# +# Currently implemented yank instances: +# -nbd block device: +# Yanking it will shutdown the connection to the nbd server without +# attempting to reconnect. +# -socket chardev: +# Yanking it will shutdown the connected socket. +# -migration: +# Yanking it will shutdown all migration connections. +# +# Since: 5.2 +## +{ 'struct': 'YankInstances', 'data': {'instances': ['str'] } } + +## +# @yank: +# +# Recover from hanging qemu by yanking the specified instances. See +# "YankInstances" for more information. +# +# Takes @YankInstances as argument. +# +# Returns: nothing. +# +# Example: +# +# -> { "execute": "yank", "arguments": { "instances": ["blockdev:nbd0"] } } +# <- { "return": {} } +# +# Since: 5.2 +## +{ 'command': 'yank', 'data': 'YankInstances', 'allow-oob': true } + +## +# @query-yank: +# +# Query yank instances. See "YankInstances" for more information. +# +# Returns: @YankInstances +# +# Example: +# +# -> { "execute": "query-yank" } +# <- { "return": { "instances": ["blockdev:nbd0"] } } +# +# Since: 5.2 +## +{ 'command': 'query-yank', 'returns': 'YankInstances', 'allow-oob': true } diff --git a/util/meson.build b/util/meson.build index e6b207a99e..f3989a1869 100644 --- a/util/meson.build +++ b/util/meson.build @@ -50,6 +50,7 @@ endif if have_system util_ss.add(when: 'CONFIG_GIO', if_true: [files('dbus.c'), gio]) + util_ss.add(files('yank.c')) endif if have_block diff --git a/util/yank.c b/util/yank.c new file mode 100644 index 0000000000..f63bfdca50 --- /dev/null +++ b/util/yank.c @@ -0,0 +1,187 @@ +/* + * QEMU yank feature + * + * Copyright (c) Lukas Straub + * + * This work is licensed under the terms of the GNU GPL, version 2 or late= r. + * See the COPYING file in the top-level directory. + */ + +#include "qemu/osdep.h" +#include "qapi/error.h" +#include "qemu/thread.h" +#include "qemu/queue.h" +#include "qapi/qapi-commands-misc.h" +#include "io/channel.h" +#include "qemu/yank.h" + +struct YankFuncAndParam { + YankFn *func; + void *opaque; + QLIST_ENTRY(YankFuncAndParam) next; +}; + +struct YankInstance { + char *name; + QLIST_HEAD(, YankFuncAndParam) yankfns; + QLIST_ENTRY(YankInstance) next; +}; + +/* + * This lock protects the yank_instance_list below. + */ +static QemuMutex yank_lock; + +static QLIST_HEAD(, YankInstance) yank_instance_list + =3D QLIST_HEAD_INITIALIZER(yank_instance_list); + +static struct YankInstance *yank_find_instance(const char *name) +{ + struct YankInstance *instance; + + QLIST_FOREACH(instance, &yank_instance_list, next) { + if (!strcmp(instance->name, name)) { + return instance; + } + } + return NULL; +} + +void yank_register_instance(const char *instance_name, Error **errp) +{ + struct YankInstance *instance; + + qemu_mutex_lock(&yank_lock); + + if (yank_find_instance(instance_name)) { + error_setg(errp, "duplicate yank instance name: '%s'", + instance_name); + qemu_mutex_unlock(&yank_lock); + return; + } + + instance =3D g_slice_new(struct YankInstance); + instance->name =3D g_strdup(instance_name); + QLIST_INIT(&instance->yankfns); + QLIST_INSERT_HEAD(&yank_instance_list, instance, next); + + qemu_mutex_unlock(&yank_lock); +} + +void yank_unregister_instance(const char *instance_name) +{ + struct YankInstance *instance; + + qemu_mutex_lock(&yank_lock); + instance =3D yank_find_instance(instance_name); + assert(instance); + + assert(QLIST_EMPTY(&instance->yankfns)); + QLIST_REMOVE(instance, next); + g_free(instance->name); + g_slice_free(struct YankInstance, instance); + + qemu_mutex_unlock(&yank_lock); +} + +void yank_register_function(const char *instance_name, + YankFn *func, + void *opaque) +{ + struct YankInstance *instance; + struct YankFuncAndParam *entry; + + qemu_mutex_lock(&yank_lock); + instance =3D yank_find_instance(instance_name); + assert(instance); + + entry =3D g_slice_new(struct YankFuncAndParam); + entry->func =3D func; + entry->opaque =3D opaque; + + QLIST_INSERT_HEAD(&instance->yankfns, entry, next); + qemu_mutex_unlock(&yank_lock); +} + +void yank_unregister_function(const char *instance_name, + YankFn *func, + void *opaque) +{ + struct YankInstance *instance; + struct YankFuncAndParam *entry; + + qemu_mutex_lock(&yank_lock); + instance =3D yank_find_instance(instance_name); + assert(instance); + + QLIST_FOREACH(entry, &instance->yankfns, next) { + if (entry->func =3D=3D func && entry->opaque =3D=3D opaque) { + QLIST_REMOVE(entry, next); + g_slice_free(struct YankFuncAndParam, entry); + qemu_mutex_unlock(&yank_lock); + return; + } + } + + abort(); +} + +void yank_generic_iochannel(void *opaque) +{ + QIOChannel *ioc =3D QIO_CHANNEL(opaque); + + qio_channel_shutdown(ioc, QIO_CHANNEL_SHUTDOWN_BOTH, NULL); +} + +void qmp_yank(strList *instances, + Error **errp) +{ + strList *tail; + struct YankInstance *instance; + struct YankFuncAndParam *entry; + + qemu_mutex_lock(&yank_lock); + for (tail =3D instances; tail; tail =3D tail->next) { + instance =3D yank_find_instance(tail->value); + if (!instance) { + error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND, + "Instance '%s' not found", tail->value); + qemu_mutex_unlock(&yank_lock); + return; + } + } + for (tail =3D instances; tail; tail =3D tail->next) { + instance =3D yank_find_instance(tail->value); + assert(instance); + QLIST_FOREACH(entry, &instance->yankfns, next) { + entry->func(entry->opaque); + } + } + qemu_mutex_unlock(&yank_lock); +} + +YankInstances *qmp_query_yank(Error **errp) +{ + struct YankInstance *instance; + YankInstances *ret; + + ret =3D g_new0(YankInstances, 1); + ret->instances =3D NULL; + + qemu_mutex_lock(&yank_lock); + QLIST_FOREACH(instance, &yank_instance_list, next) { + strList *entry; + entry =3D g_new0(strList, 1); + entry->value =3D g_strdup(instance->name); + entry->next =3D ret->instances; + ret->instances =3D entry; + } + qemu_mutex_unlock(&yank_lock); + + return ret; +} + +static void __attribute__((__constructor__)) yank_init(void) +{ + qemu_mutex_init(&yank_lock); +} -- 2.20.1 --Sig_/zYu_kxxZNYSvNzwqWL33vlG Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAl9OERsACgkQNasLKJxd slhnag/+Ms32VzsWhfcvXUNfln4sVViHITgFs5rT7qIizozAxBMeJX36NrhmChrG MSfEVijkRs9uLz7DN8ekqKVeZtypq3wq4qDAuopXl1jwhcEF/WOK6Ryt8+rGyd/I n0V/89fmPvp/N1egixVHQCLo4v/6TyEfO6QuqlWHtFCqcuV47kAxkL2KoYFDvZC/ XDY7WhZbYpNDS/ZTm9l5zBjqpfObusBnlrRadmcfcJaI6K53vPSM7EFyrNMS+MVf uoYYIBnWyydDPxOQql8jmg9AZbjC/cBgGBze5LE4aUcwQXsinS+74Nn5lBuppmf1 s2eEE3PBI8IVIP/x/0roAMa0oBbPi9yqoTOthNEcbFL+dRIJ1AHqWpvquUHOpkzB LU6eAoJlVDvrYvBd+ZDMkKf7oFILcAkMAeiVCJov+3VfnDcaH/u5+P9jeuEdyvrB TWee34wHiXuE2FWxM0tuSvXE8PdaguY0bNT9w3xRJ8RsyIsAIl3BhhxRDnkIiH6Q sebDIOx7zsjut+ZfZiNaVyV9hwwGcvonqLHLds8CYDxn42JV0moN/UIFq6nzJ9E6 iaXWQmpCN82F8J5gm0W4ogdtmG8C/On9fERFMTueKYwYYgnn/vyH22JiCg4AQFL8 Fge5oXpEHZGpI4zhNiRC+r45rJhvlsdBIfyL6jkUBU1vooPNrj8= =wEBD -----END PGP SIGNATURE----- --Sig_/zYu_kxxZNYSvNzwqWL33vlG-- From nobody Sat Feb 7 10:08:19 2026 Delivered-To: importer@patchew.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=1598953022; cv=none; d=zohomail.com; s=zohoarc; b=HJGIom07oq8AX/yt4S3VfZsQ2QUOHk41UKy4k3izrkTzMg+LXjw3QqMnz1reAHXFNkbPKbgamXprq3CTnW/OjcImrUwsZCta/8Wu246vFXnmd6lECK9OgGnRzbfa2m56hlFU463FBf5n4uDXe6qhAYea7vAzQuWkX70YciirNE8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598953022; 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=U3Obe1iROJ7tO9VU6dPGLACWG8UT9CGYrsZmVJk/vXw=; b=G5bJGcYeKDwhiuvUT1rP4+38I5aNU8vluyfKb5sVGCxypd9/uMzlJmrAf11LXjXwyMn1kl2ybXMCU+d7Y9oJCkRr1hPQdrWavYAof8TdyKrIgq7aCMAlRYemhCzqR/TNKxMG9SVzaSqqrSRVfdEEHL7H6G10pFUhOIN0sngO4S8= 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 1598953022464778.6253737791211; Tue, 1 Sep 2020 02:37:02 -0700 (PDT) Received: from localhost ([::1]:47842 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kD2ir-0004Wf-Go for importer@patchew.org; Tue, 01 Sep 2020 05:37:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34666) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kD2Nt-0002Cr-63; Tue, 01 Sep 2020 05:15:21 -0400 Received: from mout.web.de ([212.227.17.11]:42121) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kD2Nq-0007D0-JF; Tue, 01 Sep 2020 05:15:20 -0400 Received: from luklap ([88.130.61.220]) by smtp.web.de (mrweb106 [213.165.67.124]) with ESMTPSA (Nemesis) id 1MxHYA-1kX2DI2xrc-00xv7M; Tue, 01 Sep 2020 11:15:12 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1598951713; bh=K8YzrMQvhHn8jZMBCZPM/yDOgR8brq0MaGoNVd5aNxI=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=dpYG40KfTwOJ0ZFz73UD0lLCnQz4rWOzrIwlbAYyiIcO5hLpl/g7R0ybEhcPN90Iw t2is0geojkB8cx2jV+TMtVVvXaOIt890IjdmSDEbX/aCsdik+WhCb9NrkezmnCx1k2 FPfAXZ/aGGIZSKHUT9t2gDS6NP2MiJCYGVOL2L6U= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Date: Tue, 1 Sep 2020 11:15:11 +0200 From: Lukas Straub To: qemu-devel Subject: [PATCH v8 2/8] block/nbd.c: Add yank feature Message-ID: <6a5a75fcca2180193d6fe10576f7a28adbe2f843.1598951375.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/XiMG1fi7w7o._Ooz03Eefkk"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Provags-ID: V03:K1:mMvv26aTDxOkJ13MtLKia8HZJcz7j/8u7O1dD7JqNX51DLGyohP wOP0l3aOH+1CWEVDIefy31ZeSnZyFEIJCi2K/DFxXcn84cRkfHR2jlxKXiwAIDAWfj0gMmj LIxQzCGVYw2UbmYHjxmfRCTrn2TiEguAPpJTdORyXEx+C5gqISKwfn+elmKMx96Em/cc3dE GSS8nM2n1xZOAJ1PtRqeQ== X-UI-Out-Filterresults: notjunk:1;V03:K0:qyZXF5MWD3k=:jJC6fgWjHvIBtc2Zej40dn dgsaibQnkRsCFzut6nvbWjUJ5O3vOxXBTh01JlvfXyWJQJx4GysuEGL9sbEaF29GortRSp2R/ PihdMZ8x9qXKVDHF5eAulwIb6/GZ5fWRkat3MNmG4gcdWx4/FUYCah2u6QU0lRntHqpkctZ6y SiBp+T9yWgC8Ko6+O7kXWRY8ttcryRvlOCdV8G8/430fzuzPoLRi7ESr92M+ubDa93xWiwkwl 1GjI13XfQYl//DCxJadKHpl1AWLTuWVRbgnTr4fxHq5qbxddHXNq5Kra5U1CV+1Vy9WD5Cwzt 3oLjv3iqus8rJmmlvCYfTwP2QaOVpnA9pfu1W0a6R+qAGctNzz8QtOGi4SFo32GRNUl1jErOW E7i52P71Fn3GNg2AZE12YEf6XC8U8LlDon0IJkK7SlQkduUbsWt0WPKumyVRlceB4doZVfvWs Ior5FqY94DZtYBfoT3EEYtnsW1l7TjT1BJzgnVHfQY5MUnuKoSiEZmB+0zCd8dFt2dhMweE5b Wfn4cEqUHmqiNn34SZife7I+kfXOrcEBvaeHrMUI65BkWUB/tK1wBS47u2Z85GEdVRfbpJNJF A7zG7g/hEdifkhnaHwL+W7EbTS44o8RIkwdrYvPM1PWftGsBBHANREDAf6SJHhxb1uWpib225 qUQluBJhGACoNxhPyQoWZGH5F4bzn10xFGDh0mCdqp/I+s3WG/EKAY2ALi1c8Bdbn9jE8h1Zz kSIzSYWfABacUUWUElRu3tB58RKhTJWMMrVHmWcLmSar4fihQBTbTzNvN1E/A7jlxeFWqNcr9 UtY1JXYKW9mG3ZcF041BRpdYSzLYPPs0Mbsbc0T9z9ujVvETe5nG9u+Ii1zlrObOnFAx5z7Rh Ccxb4Slp2yRiwml9Qxj6lcsKJUuPVfXOM3mL+dfJBQq9d/+Ss9tym76JPMPsaQginlE9nOIz4 r6wjfB+NnoI0Rvrd3bL7xXUgr3qQmAOZa/gSSG5AqDgqT9SWi/VHjwkoqPsatp8Fge1Jad9sS mlFn3fICZdxwb8TMzjnS0bNaicxIfOhGYkpR7WXYlVURlJNL7K3Kkxs4RhVUiwh6KorVPDRrp Fo3bq2MxBgYxecHgEoP0N6izhid8Q5XuFeOCWalm/XrTTe+zXAN1Y0eXjuAYdgi7HppVVTH8M S5BV2+sr3Bqcb/iaqrq8S26IDGmwuQ6Jtyl7bDJhL7wjZvkl9pok7G4mfrX59leemYqPMSrui u/t8o2zY/rndAQbaB5/1ks7LfToP09PiEC2WRVA== 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; 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/09/01 05:15:16 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_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no 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: Kevin Wolf , "Daniel P. =?UTF-8?B?QmVycmFuZ8Op?=" , qemu-block , Juan Quintela , Markus Armbruster , "Dr. David Alan Gilbert" , Max Reitz , Paolo Bonzini , =?UTF-8?B?TWFyYy1BbmRy?= =?UTF-8?B?w6k=?= 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_/XiMG1fi7w7o._Ooz03Eefkk Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Register a yank function which shuts down the socket and sets s->state =3D NBD_CLIENT_QUIT. This is the same behaviour as if an error occured. Signed-off-by: Lukas Straub Acked-by: Stefan Hajnoczi Reviewed-by: Daniel P. Berrang=C3=A9 --- block/nbd.c | 129 ++++++++++++++++++++++++++++++++-------------------- 1 file changed, 80 insertions(+), 49 deletions(-) diff --git a/block/nbd.c b/block/nbd.c index 7bb881fef4..8632cf5340 100644 --- a/block/nbd.c +++ b/block/nbd.c @@ -35,6 +35,7 @@ #include "qemu/option.h" #include "qemu/cutils.h" #include "qemu/main-loop.h" +#include "qemu/atomic.h" #include "qapi/qapi-visit-sockets.h" #include "qapi/qmp/qstring.h" @@ -43,6 +44,8 @@ #include "block/nbd.h" #include "block/block_int.h" +#include "qemu/yank.h" + #define EN_OPTSTR ":exportname=3D" #define MAX_NBD_REQUESTS 16 @@ -84,6 +87,8 @@ typedef struct BDRVNBDState { NBDReply reply; BlockDriverState *bs; + char *yank_name; + /* Connection parameters */ uint32_t reconnect_delay; SocketAddress *saddr; @@ -93,10 +98,10 @@ typedef struct BDRVNBDState { char *x_dirty_bitmap; } BDRVNBDState; -static QIOChannelSocket *nbd_establish_connection(SocketAddress *saddr, - Error **errp); -static int nbd_client_handshake(BlockDriverState *bs, QIOChannelSocket *si= oc, - Error **errp); +static int nbd_establish_connection(BlockDriverState *bs, SocketAddress *s= addr, + Error **errp); +static int nbd_client_handshake(BlockDriverState *bs, Error **errp); +static void nbd_yank(void *opaque); static void nbd_clear_bdrvstate(BDRVNBDState *s) { @@ -109,17 +114,19 @@ static void nbd_clear_bdrvstate(BDRVNBDState *s) s->tlscredsid =3D NULL; g_free(s->x_dirty_bitmap); s->x_dirty_bitmap =3D NULL; + g_free(s->yank_name); + s->yank_name =3D NULL; } static void nbd_channel_error(BDRVNBDState *s, int ret) { if (ret =3D=3D -EIO) { - if (s->state =3D=3D NBD_CLIENT_CONNECTED) { + if (atomic_load_acquire(&s->state) =3D=3D NBD_CLIENT_CONNECTED) { s->state =3D s->reconnect_delay ? NBD_CLIENT_CONNECTING_WAIT : NBD_CLIENT_CONNECTING_NOWAIT; } } else { - if (s->state =3D=3D NBD_CLIENT_CONNECTED) { + if (atomic_load_acquire(&s->state) =3D=3D NBD_CLIENT_CONNECTED) { qio_channel_shutdown(s->ioc, QIO_CHANNEL_SHUTDOWN_BOTH, NULL); } s->state =3D NBD_CLIENT_QUIT; @@ -170,7 +177,7 @@ static void nbd_client_attach_aio_context(BlockDriverSt= ate *bs, * s->connection_co is either yielded from nbd_receive_reply or from * nbd_co_reconnect_loop() */ - if (s->state =3D=3D NBD_CLIENT_CONNECTED) { + if (atomic_load_acquire(&s->state) =3D=3D NBD_CLIENT_CONNECTED) { qio_channel_attach_aio_context(QIO_CHANNEL(s->ioc), new_context); } @@ -237,20 +244,20 @@ static void nbd_teardown_connection(BlockDriverState = *bs) static bool nbd_client_connecting(BDRVNBDState *s) { - return s->state =3D=3D NBD_CLIENT_CONNECTING_WAIT || - s->state =3D=3D NBD_CLIENT_CONNECTING_NOWAIT; + NBDClientState state =3D atomic_load_acquire(&s->state); + return state =3D=3D NBD_CLIENT_CONNECTING_WAIT || + state =3D=3D NBD_CLIENT_CONNECTING_NOWAIT; } static bool nbd_client_connecting_wait(BDRVNBDState *s) { - return s->state =3D=3D NBD_CLIENT_CONNECTING_WAIT; + return atomic_load_acquire(&s->state) =3D=3D NBD_CLIENT_CONNECTING_WAI= T; } static coroutine_fn void nbd_reconnect_attempt(BDRVNBDState *s) { int ret; Error *local_err =3D NULL; - QIOChannelSocket *sioc; if (!nbd_client_connecting(s)) { return; @@ -283,21 +290,21 @@ static coroutine_fn void nbd_reconnect_attempt(BDRVNB= DState *s) /* Finalize previous connection if any */ if (s->ioc) { nbd_client_detach_aio_context(s->bs); + yank_unregister_function(s->yank_name, nbd_yank, s->bs); object_unref(OBJECT(s->sioc)); s->sioc =3D NULL; object_unref(OBJECT(s->ioc)); s->ioc =3D NULL; } - sioc =3D nbd_establish_connection(s->saddr, &local_err); - if (!sioc) { + if (nbd_establish_connection(s->bs, s->saddr, &local_err) < 0) { ret =3D -ECONNREFUSED; goto out; } bdrv_dec_in_flight(s->bs); - ret =3D nbd_client_handshake(s->bs, sioc, &local_err); + ret =3D nbd_client_handshake(s->bs, &local_err); if (s->drained) { s->wait_drained_end =3D true; @@ -334,7 +341,7 @@ static coroutine_fn void nbd_co_reconnect_loop(BDRVNBDS= tate *s) nbd_reconnect_attempt(s); while (nbd_client_connecting(s)) { - if (s->state =3D=3D NBD_CLIENT_CONNECTING_WAIT && + if (atomic_load_acquire(&s->state) =3D=3D NBD_CLIENT_CONNECTING_WA= IT && qemu_clock_get_ns(QEMU_CLOCK_REALTIME) - start_time_ns > delay= _ns) { s->state =3D NBD_CLIENT_CONNECTING_NOWAIT; @@ -371,7 +378,7 @@ static coroutine_fn void nbd_connection_entry(void *opa= que) int ret =3D 0; Error *local_err =3D NULL; - while (s->state !=3D NBD_CLIENT_QUIT) { + while (atomic_load_acquire(&s->state) !=3D NBD_CLIENT_QUIT) { /* * The NBD client can only really be considered idle when it has * yielded from qio_channel_readv_all_eof(), waiting for data. Thi= s is @@ -386,7 +393,7 @@ static coroutine_fn void nbd_connection_entry(void *opa= que) nbd_co_reconnect_loop(s); } - if (s->state !=3D NBD_CLIENT_CONNECTED) { + if (atomic_load_acquire(&s->state) !=3D NBD_CLIENT_CONNECTED) { continue; } @@ -441,6 +448,7 @@ static coroutine_fn void nbd_connection_entry(void *opa= que) s->connection_co =3D NULL; if (s->ioc) { nbd_client_detach_aio_context(s->bs); + yank_unregister_function(s->yank_name, nbd_yank, s->bs); object_unref(OBJECT(s->sioc)); s->sioc =3D NULL; object_unref(OBJECT(s->ioc)); @@ -465,7 +473,7 @@ static int nbd_co_send_request(BlockDriverState *bs, qemu_co_queue_wait(&s->free_sema, &s->send_mutex); } - if (s->state !=3D NBD_CLIENT_CONNECTED) { + if (atomic_load_acquire(&s->state) !=3D NBD_CLIENT_CONNECTED) { rc =3D -EIO; goto err; } @@ -492,7 +500,7 @@ static int nbd_co_send_request(BlockDriverState *bs, if (qiov) { qio_channel_set_cork(s->ioc, true); rc =3D nbd_send_request(s->ioc, request); - if (rc >=3D 0 && s->state =3D=3D NBD_CLIENT_CONNECTED) { + if (rc >=3D 0 && atomic_load_acquire(&s->state) =3D=3D NBD_CLIENT_= CONNECTED) { if (qio_channel_writev_all(s->ioc, qiov->iov, qiov->niov, NULL) < 0) { rc =3D -EIO; @@ -807,7 +815,7 @@ static coroutine_fn int nbd_co_do_receive_one_chunk( s->requests[i].receiving =3D true; qemu_coroutine_yield(); s->requests[i].receiving =3D false; - if (s->state !=3D NBD_CLIENT_CONNECTED) { + if (atomic_load_acquire(&s->state) !=3D NBD_CLIENT_CONNECTED) { error_setg(errp, "Connection closed"); return -EIO; } @@ -966,7 +974,7 @@ static bool nbd_reply_chunk_iter_receive(BDRVNBDState *= s, NBDReply local_reply; NBDStructuredReplyChunk *chunk; Error *local_err =3D NULL; - if (s->state !=3D NBD_CLIENT_CONNECTED) { + if (atomic_load_acquire(&s->state) !=3D NBD_CLIENT_CONNECTED) { error_setg(&local_err, "Connection closed"); nbd_iter_channel_error(iter, -EIO, &local_err); goto break_loop; @@ -991,7 +999,8 @@ static bool nbd_reply_chunk_iter_receive(BDRVNBDState *= s, } /* Do not execute the body of NBD_FOREACH_REPLY_CHUNK for simple reply= . */ - if (nbd_reply_is_simple(reply) || s->state !=3D NBD_CLIENT_CONNECTED) { + if (nbd_reply_is_simple(reply) || + atomic_load_acquire(&s->state) !=3D NBD_CLIENT_CONNECTED) { goto break_loop; } @@ -1423,6 +1432,15 @@ static int nbd_client_reopen_prepare(BDRVReopenState= *state, return 0; } +static void nbd_yank(void *opaque) +{ + BlockDriverState *bs =3D opaque; + BDRVNBDState *s =3D (BDRVNBDState *)bs->opaque; + + atomic_store_release(&s->state, NBD_CLIENT_QUIT); + qio_channel_shutdown(QIO_CHANNEL(s->sioc), QIO_CHANNEL_SHUTDOWN_BOTH, = NULL); +} + static void nbd_client_close(BlockDriverState *bs) { BDRVNBDState *s =3D (BDRVNBDState *)bs->opaque; @@ -1435,52 +1453,53 @@ static void nbd_client_close(BlockDriverState *bs) nbd_teardown_connection(bs); } -static QIOChannelSocket *nbd_establish_connection(SocketAddress *saddr, - Error **errp) +static int nbd_establish_connection(BlockDriverState *bs, + SocketAddress *saddr, + Error **errp) { ERRP_GUARD(); - QIOChannelSocket *sioc; + BDRVNBDState *s =3D (BDRVNBDState *)bs->opaque; - sioc =3D qio_channel_socket_new(); - qio_channel_set_name(QIO_CHANNEL(sioc), "nbd-client"); + s->sioc =3D qio_channel_socket_new(); + qio_channel_set_name(QIO_CHANNEL(s->sioc), "nbd-client"); + yank_register_function(s->yank_name, nbd_yank, bs); - qio_channel_socket_connect_sync(sioc, saddr, errp); + qio_channel_socket_connect_sync(s->sioc, saddr, errp); if (*errp) { - object_unref(OBJECT(sioc)); - return NULL; + yank_unregister_function(s->yank_name, nbd_yank, bs); + object_unref(OBJECT(s->sioc)); + s->sioc =3D NULL; + return -1; } - qio_channel_set_delay(QIO_CHANNEL(sioc), false); + qio_channel_set_delay(QIO_CHANNEL(s->sioc), false); - return sioc; + return 0; } -/* nbd_client_handshake takes ownership on sioc. On failure it is unref'ed= . */ -static int nbd_client_handshake(BlockDriverState *bs, QIOChannelSocket *si= oc, - Error **errp) +/* nbd_client_handshake takes ownership on s->sioc. On failure it's unref'= ed. */ +static int nbd_client_handshake(BlockDriverState *bs, Error **errp) { BDRVNBDState *s =3D (BDRVNBDState *)bs->opaque; AioContext *aio_context =3D bdrv_get_aio_context(bs); int ret; trace_nbd_client_handshake(s->export); - - s->sioc =3D sioc; - - qio_channel_set_blocking(QIO_CHANNEL(sioc), false, NULL); - qio_channel_attach_aio_context(QIO_CHANNEL(sioc), aio_context); + qio_channel_set_blocking(QIO_CHANNEL(s->sioc), false, NULL); + qio_channel_attach_aio_context(QIO_CHANNEL(s->sioc), aio_context); s->info.request_sizes =3D true; s->info.structured_reply =3D true; s->info.base_allocation =3D true; s->info.x_dirty_bitmap =3D g_strdup(s->x_dirty_bitmap); s->info.name =3D g_strdup(s->export ?: ""); - ret =3D nbd_receive_negotiate(aio_context, QIO_CHANNEL(sioc), s->tlscr= eds, + ret =3D nbd_receive_negotiate(aio_context, QIO_CHANNEL(s->sioc), s->tl= screds, s->hostname, &s->ioc, &s->info, errp); g_free(s->info.x_dirty_bitmap); g_free(s->info.name); if (ret < 0) { - object_unref(OBJECT(sioc)); + yank_unregister_function(s->yank_name, nbd_yank, bs); + object_unref(OBJECT(s->sioc)); s->sioc =3D NULL; return ret; } @@ -1508,7 +1527,7 @@ static int nbd_client_handshake(BlockDriverState *bs,= QIOChannelSocket *sioc, } if (!s->ioc) { - s->ioc =3D QIO_CHANNEL(sioc); + s->ioc =3D QIO_CHANNEL(s->sioc); object_ref(OBJECT(s->ioc)); } @@ -1524,9 +1543,10 @@ static int nbd_client_handshake(BlockDriverState *bs= , QIOChannelSocket *sioc, { NBDRequest request =3D { .type =3D NBD_CMD_DISC }; - nbd_send_request(s->ioc ?: QIO_CHANNEL(sioc), &request); + nbd_send_request(s->ioc ?: QIO_CHANNEL(s->sioc), &request); - object_unref(OBJECT(sioc)); + yank_unregister_function(s->yank_name, nbd_yank, bs); + object_unref(OBJECT(s->sioc)); s->sioc =3D NULL; return ret; @@ -1918,7 +1938,6 @@ static int nbd_open(BlockDriverState *bs, QDict *opti= ons, int flags, { int ret; BDRVNBDState *s =3D (BDRVNBDState *)bs->opaque; - QIOChannelSocket *sioc; ret =3D nbd_process_options(bs, options, errp); if (ret < 0) { @@ -1929,17 +1948,28 @@ static int nbd_open(BlockDriverState *bs, QDict *op= tions, int flags, qemu_co_mutex_init(&s->send_mutex); qemu_co_queue_init(&s->free_sema); + s->yank_name =3D g_strconcat("blockdev:", bs->node_name, NULL); + yank_register_instance(s->yank_name, errp); + if (*errp) { + g_free(s->yank_name); + s->yank_name =3D NULL; + return -EEXIST; + } + /* * establish TCP connection, return error if it fails * TODO: Configurable retry-until-timeout behaviour. */ - sioc =3D nbd_establish_connection(s->saddr, errp); - if (!sioc) { + if (nbd_establish_connection(bs, s->saddr, errp) < 0) { + yank_unregister_instance(s->yank_name); + g_free(s->yank_name); + s->yank_name =3D NULL; return -ECONNREFUSED; } - ret =3D nbd_client_handshake(bs, sioc, errp); + ret =3D nbd_client_handshake(bs, errp); if (ret < 0) { + yank_unregister_instance(s->yank_name); nbd_clear_bdrvstate(s); return ret; } @@ -1997,6 +2027,7 @@ static void nbd_close(BlockDriverState *bs) BDRVNBDState *s =3D bs->opaque; nbd_client_close(bs); + yank_unregister_instance(s->yank_name); nbd_clear_bdrvstate(s); } -- 2.20.1 --Sig_/XiMG1fi7w7o._Ooz03Eefkk Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAl9OER8ACgkQNasLKJxd slhWFRAArnNM7t2TYUje/by1v56yOu6k0httSjqG1e4cW9RaZzM1fTzAs1mtwL+V DpMPtTskktf6JCrCoSE+k/RzA4gM0zfJPXvJC05lL6e/u8+cBbW1cnRWV9uyCecz g/BldI/KtjW6zs+roU1zEtctHHk309qTVJK2twuQiSrHGLPLuPN3TRf40op8DroZ o+BfLYbH40MZUSLsQqWetM0jtZcHLRgASnT9PG60LnZHvGSF3FNrWKPHz/ZkrqKd x6xS8Di4jFBQs1wDztUmegxotiheWWbQyA1sSNOu0dOd5JmxFbZ/Scjf0c0TrLEC caAm02f5KaHg7XvVhyva0rkfxV9BzOdL3qPj/xQsPs2Ocsnfz8cLWuBy3YyXdpIX qNaAFHuNbPKteHE5o715jrWvXZ/gwd1WP+ouWIvLGn93Iat5g9Ep/dwiSjoiGObt 8sAg2AVd8e/aUWLZlXIJzQSRjoZI+KUFpBk8MbPs4YUUDKlA7iWw8BCtZf5gXyKj xVu/hjPblcW3ocBRd7pcupD0jPy641lax4lHuHXDzFT5eCOVqhFjHheAayk+O0xM HhN6hlckI1GbHjuSmgpVzZDpBUFiYvX2ZrNE5Im+su/RiAmkRVMLabzY9A8QaBCP xiQ3xBsd6jS8bUpSBWWtRw56QIOnzZNwtbv4fraw1pM4Ps1mvuA= =vndL -----END PGP SIGNATURE----- --Sig_/XiMG1fi7w7o._Ooz03Eefkk-- From nobody Sat Feb 7 10:08:19 2026 Delivered-To: importer@patchew.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=1598952423; cv=none; d=zohomail.com; s=zohoarc; b=NOB+vHF4sY7qzglFPWeVsX+Eul/yrEpGRAlMOLKU0XdS1GvObV6nFhYheyW+mAIHGyym0gM2obbiMSHWXKZSDpvExbDWyi2T+Fk63Y70/EpY/l7Nq/fmJvR7vRH1FtxFSuytHGXD3SN0kVcg3lSn/7FdPVZxUJB6IeFutePr2pA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598952423; 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=QMcb3HwUqG2zu7saBWhrdscb+ZAJsWvmME9lOwSBHeI=; b=n9uGNjyR2wuWWNCdBEjXn2Gl+E9SfAO3nsNAn3ESC0uC8P5ef29kN/NH5kCSGS1eU0cI1SL4vqa0Yqtw6kY9aqn6BnZ/M08zgPFH3Bqsq//OK8yXlMgs3ftFzMDFNgdJi8iXpt5/F6a7p2OuTX7PP0tBgss9hZn74SaicHS7/M8= 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 1598952423648614.5401118708643; Tue, 1 Sep 2020 02:27:03 -0700 (PDT) Received: from localhost ([::1]:51976 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kD2ZC-0002s8-Ls for importer@patchew.org; Tue, 01 Sep 2020 05:27:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34684) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kD2Nv-0002KD-VG; Tue, 01 Sep 2020 05:15:23 -0400 Received: from mout.web.de ([212.227.17.11]:34845) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kD2Nt-0007GL-QA; Tue, 01 Sep 2020 05:15:23 -0400 Received: from luklap ([88.130.61.220]) by smtp.web.de (mrweb101 [213.165.67.124]) with ESMTPSA (Nemesis) id 0LdEsP-1kvTs50xiD-00iVuK; Tue, 01 Sep 2020 11:15:16 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1598951716; bh=75ECl9bX1EGfY3DMAQC4Qu0/MXJlbsQoukpW/VUFgz0=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=cFky8VPmbrQ8rP24faNszi5Cl8Cm+wVI4qeFo2+oGYAl44kPRV4s1dFz/6h7DP1E0 7V6yFABMXzs/guyScrmccArwAqWnTKDJR3EAv6/zPauSqenSI7RzsYQklMeNJ7ZNEy of30ThqB5lg6BcS0tMZimXuc/QanyVXPbSF5d6pc= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Date: Tue, 1 Sep 2020 11:15:14 +0200 From: Lukas Straub To: qemu-devel Subject: [PATCH v8 3/8] chardev/char-socket.c: Add yank feature Message-ID: In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/mF_.EjoPRGRfufbh6DGgakM"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Provags-ID: V03:K1:SWIqchQkfqMgjfjcTWWMUeWHuAzyddrcMgMwuAikZRMKfM8goQl TiZEgK+99+WZPdd3SyxB2oOnPx8SWmTnHYlCcOBJVqshjeYe1ixUKvAOQc+xT/a1/TFZd1P n9ZoCO3YZLYBELXoycswjVNdX3ofMd1dHAYrN7NWspY8fGnrjCI9IEMqFkMK7vizhx7GdAQ zM8UY5XjREK7qDqf/wCAQ== X-UI-Out-Filterresults: notjunk:1;V03:K0:QqNDNFckpWY=:2LApKKugsQJyw5mCnBAjuz 0yVlQS5KiJmdNtRShoWBgy4vyxGwX2vVrLT4IWrINVonl1uHpvWfN6NxQEffxaB0hOkEaDgrd yNGRvKsaZrnwmAH2zMwOq4vCnVl/eP7W8gUDQFR2I5OTuT6HNErAh8szrwWyaVy/eGBHjNt/x yi3BCmy2MfUO05yOon9xMtTqpEepsc/iodJRkaHKx1dD3fGc0pnp1P5ehSS0RgMpOdCn1Rdle DFl0KNq15fPd/gTz1qIQgfDqvLJpvLVPoYjrp4YAMLBUC59xjEd5A++i4Mm21q5m4KxCobjQl qTYaU8TAHMwbkIOglRNk+Xahos8FCHwZ2eCFmaFifPyqj/ey2+QtKdqWDYNGmP3DqoNSWFIh0 9A6B9a9G0/sEYrArGE8gw/qnkUCjFlV0x7/U1hxNJYrp+C7Qm/BsIO1t1rCs2n1f0N8W5i+8Y ZpBOIN+K7hBU+V9utdn7NFiLcoZKXXh6fdsro0m6KqeyQK+0vUv1w1pulLnOxum7jQiD1NRJc AIE5c1PGklAFUA0bw87zLP0AVpjndgb4AxTyD59c7BBxccTUyu05vDD1V5xFSo0UweaFulGUk zDDll/gzerTHhokuqRvqstrxA/WFKm0rRL/T/jpWlo0vvCKsX831MQ5F6I9tNKgsA0Myri1c0 tBS2SHtACIqrugf9UmxH0e1c1RvYu4aNsWHr1fynDGZVtLWKtaM0t6MWmbLVo8fpocye9o+sm 2qO2mr94uOV/osVNd/YgGWZTjmFW7lUIyeIsq2kmh4q6J3psL1GEM7GzOYqwY2KVPyTJBzNWC IA88/rUBLr4sjboK4sHcFrPdVuBP+ZJDk9rNNoD9I4nQs1sgu9dwKf8yPmv3zeh/wuGI72K5q 7KCPY0MieiDDWjB9FR7nnKmvxEPNwrUpgMJgZbMGpHEakmtArxuWlNoK/6f4dAWfYVldJqDfR jLeK8WIIVee1wMCIZ9J0n6613eDtDCkfykSj0NltwLZ0jKoUzXloqVB823UJ9KHjP+/sBP4SI wZUbG3TSl8SbM+LKj0fzQ2vEAlvbLmIbalwd/5E8Rt3CNRpKil0NQNBLCiLtc4Ait+fqt503S PxK/0NbMPvGEl04VWve1VuA0KEJruIebvLk39ZwFsNDFPb9KoqZfs9UifpP/ooaDDLbsiLbsr sA9GayjMVaV5r+QMbGWbXYXl3ACuuY8YnbhwyzHrlnGrpY+iPeEgSL/S4H5YdMhQywJAxGdz/ osxJJIeXciYIgBqVXvllrX1/HR85GWC5rB/SGiA== 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; 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/09/01 05:15:16 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_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no 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: Kevin Wolf , "Daniel P. =?UTF-8?B?QmVycmFuZ8Op?=" , qemu-block , Juan Quintela , Markus Armbruster , "Dr. David Alan Gilbert" , Max Reitz , Paolo Bonzini , =?UTF-8?B?TWFyYy1BbmRy?= =?UTF-8?B?w6k=?= 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_/mF_.EjoPRGRfufbh6DGgakM Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Register a yank function to shutdown the socket on yank. Signed-off-by: Lukas Straub Acked-by: Stefan Hajnoczi Reviewed-by: Daniel P. Berrang=C3=A9 --- chardev/char-socket.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/chardev/char-socket.c b/chardev/char-socket.c index ef62dbf3d7..8e2865ca83 100644 --- a/chardev/char-socket.c +++ b/chardev/char-socket.c @@ -34,6 +34,7 @@ #include "qapi/error.h" #include "qapi/clone-visitor.h" #include "qapi/qapi-visit-sockets.h" +#include "qemu/yank.h" #include "chardev/char-io.h" @@ -69,6 +70,7 @@ typedef struct { size_t read_msgfds_num; int *write_msgfds; size_t write_msgfds_num; + char *yank_name; SocketAddress *addr; bool is_listen; @@ -413,6 +415,11 @@ static void tcp_chr_free_connection(Chardev *chr) tcp_set_msgfds(chr, NULL, 0); remove_fd_in_watch(chr); + if (s->state =3D=3D TCP_CHARDEV_STATE_CONNECTING + || s->state =3D=3D TCP_CHARDEV_STATE_CONNECTED) { + yank_unregister_function(s->yank_name, yank_generic_iochannel, + QIO_CHANNEL(s->sioc)); + } object_unref(OBJECT(s->sioc)); s->sioc =3D NULL; object_unref(OBJECT(s->ioc)); @@ -916,6 +923,8 @@ static int tcp_chr_add_client(Chardev *chr, int fd) } tcp_chr_change_state(s, TCP_CHARDEV_STATE_CONNECTING); tcp_chr_set_client_ioc_name(chr, sioc); + yank_register_function(s->yank_name, yank_generic_iochannel, + QIO_CHANNEL(sioc)); ret =3D tcp_chr_new_client(chr, sioc); object_unref(OBJECT(sioc)); return ret; @@ -930,6 +939,8 @@ static void tcp_chr_accept(QIONetListener *listener, tcp_chr_change_state(s, TCP_CHARDEV_STATE_CONNECTING); tcp_chr_set_client_ioc_name(chr, cioc); + yank_register_function(s->yank_name, yank_generic_iochannel, + QIO_CHANNEL(cioc)); tcp_chr_new_client(chr, cioc); } @@ -945,6 +956,8 @@ static int tcp_chr_connect_client_sync(Chardev *chr, Er= ror **errp) object_unref(OBJECT(sioc)); return -1; } + yank_register_function(s->yank_name, yank_generic_iochannel, + QIO_CHANNEL(sioc)); tcp_chr_new_client(chr, sioc); object_unref(OBJECT(sioc)); return 0; @@ -960,6 +973,8 @@ static void tcp_chr_accept_server_sync(Chardev *chr) tcp_chr_change_state(s, TCP_CHARDEV_STATE_CONNECTING); sioc =3D qio_net_listener_wait_client(s->listener); tcp_chr_set_client_ioc_name(chr, sioc); + yank_register_function(s->yank_name, yank_generic_iochannel, + QIO_CHANNEL(sioc)); tcp_chr_new_client(chr, sioc); object_unref(OBJECT(sioc)); } @@ -1070,6 +1085,10 @@ static void char_socket_finalize(Object *obj) object_unref(OBJECT(s->tls_creds)); } g_free(s->tls_authz); + if (s->yank_name) { + yank_unregister_instance(s->yank_name); + g_free(s->yank_name); + } qemu_chr_be_event(chr, CHR_EVENT_CLOSED); } @@ -1085,6 +1104,8 @@ static void qemu_chr_socket_connected(QIOTask *task, = void *opaque) if (qio_task_propagate_error(task, &err)) { tcp_chr_change_state(s, TCP_CHARDEV_STATE_DISCONNECTED); + yank_unregister_function(s->yank_name, yank_generic_iochannel, + QIO_CHANNEL(sioc)); check_report_connect_error(chr, err); goto cleanup; } @@ -1118,6 +1139,8 @@ static void tcp_chr_connect_client_async(Chardev *chr) tcp_chr_change_state(s, TCP_CHARDEV_STATE_CONNECTING); sioc =3D qio_channel_socket_new(); tcp_chr_set_client_ioc_name(chr, sioc); + yank_register_function(s->yank_name, yank_generic_iochannel, + QIO_CHANNEL(sioc)); /* * Normally code would use the qio_channel_socket_connect_async * method which uses a QIOTask + qio_task_set_error internally @@ -1360,6 +1383,14 @@ static void qmp_chardev_open_socket(Chardev *chr, qemu_chr_set_feature(chr, QEMU_CHAR_FEATURE_FD_PASS); } + s->yank_name =3D g_strconcat("chardev:", chr->label, NULL); + yank_register_instance(s->yank_name, errp); + if (*errp) { + g_free(s->yank_name); + s->yank_name =3D NULL; + return; + } + /* be isn't opened until we get a connection */ *be_opened =3D false; -- 2.20.1 --Sig_/mF_.EjoPRGRfufbh6DGgakM Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAl9OESIACgkQNasLKJxd slhMvg/8Chh74xXK/C30xYZdPVNZzskJ4CrBW2z9f6CxQbK/NINt1HBZMUP7NY9+ gSvJ/mo3M5Uheri3UIExt99bqMcRy424udOU7aaAm1viKZIZHyn3P3A9jF7iDgDv Egf0MqLokUY/Tij4MIDTwBOWg3VxYs26GmfBXYxHKsoXoktPpZLCS45duny6qmPm Tgtv2QrQ1IPMZDveW1nkIDxrLFjEcWLptQnmxaD0f0OMQGWUhnCG2wmgJMg4tjMl 3wtblxyeRWuoQKvfaLYcNrvkhDH4E67NRcMdmrnzTODOlOhHeO/mXFVD8UbVeIyV MAmQ4f0/6HXLPwM+Lx5eJHhDUYlYCHvw/pwNfdl8eIJFGpEc48wepMU84lMjF6WW Xqlc6tbplMvyhFMUHLWZfdGCcXKBsPawJVgy5OP3GfPxJdlJz3B/6ot77n6cWBlW t/a4qs7FAnpuE3sKWhZ53vQXRLfLxnmOj0lAoRDi7Gx+Nmb/c8kbfoyiyD23nhbV NIFzn5ELCKLEmdDod35czz1jNVEbOcI9XwU7RCH+uUwL3ZpMJ3HAwS990zYz7bWN bH2tnBAEPT0MOQJjRx1yT+xINYheB7Oc7AXTFjAr+wbtgrytkp3q8ZONWpMXAAh/ 3eiVQWeYcM61kH+sb0eExwJOEJu+6+tZRiHRxvYY0OOR5oR8ghM= =Jf6V -----END PGP SIGNATURE----- --Sig_/mF_.EjoPRGRfufbh6DGgakM-- From nobody Sat Feb 7 10:08:19 2026 Delivered-To: importer@patchew.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=1598952397; cv=none; d=zohomail.com; s=zohoarc; b=VhFFnqhgdFhjap8bO7W3Acn1E5NHpdq/M+6tye0GrcgRPnQBNoXS1gEba+S5mRGVAvq7+seL0JWX6nw6gGYsyLlsSetaxdBVaJMnxnYZyVPV2qR2WpXPIVeUI8PD/1G7hv12JdCIMlPV6f6hOOQareWs7N7u9/LxZLewSv1WVhU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598952397; 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=4ktGk/OV+D6vD6j75bWmHUt+WOTVkeSlSI7oICiA2qY=; b=JHzjui6WlI+VSfo82EW0Zv8p4VeoROWmQtOe4PS3gfy8y5yyrtJJSOFTOyURD3LLCsaFYlgekxh38D1MtX0aj/E3wtDE1Npms9m1cD2q7JseKyUTRAMUndzZb/Cc0Xr6lSgIWe9snPwOIW7zDNeH1WWF1Ail6EWfY3UoQrtPYpk= 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 1598952397631449.14847964091507; Tue, 1 Sep 2020 02:26:37 -0700 (PDT) Received: from localhost ([::1]:51298 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kD2Ym-0002bO-Me for importer@patchew.org; Tue, 01 Sep 2020 05:26:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34722) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kD2Nz-0002TN-KF; Tue, 01 Sep 2020 05:15:27 -0400 Received: from mout.web.de ([212.227.17.12]:52179) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kD2Nx-0007H2-3V; Tue, 01 Sep 2020 05:15:27 -0400 Received: from luklap ([88.130.61.220]) by smtp.web.de (mrweb106 [213.165.67.124]) with ESMTPSA (Nemesis) id 1MjPU0-1ksT4H3eLC-00lBic; Tue, 01 Sep 2020 11:15:20 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1598951720; bh=tfgirQq1nfSsCQ6/t2B2E/IbTgtjw5i5MPxiCrHomWI=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=NoaCo2VLXu7G+qsd4c6sUgQvAAukqTZGFxPd1pgrBFHaUL2JtH/NuPcymMOzgkN4G woOwjz3+Tk/eDwF1zNazllTTY0S2Cq9nvexQTy6JANzbKrjde48t5kFgM2yMc1tCdu fX5Q+Nkbk/n1Lo159aXDkHdpTsc8JjFHGcDvFjHQ= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Date: Tue, 1 Sep 2020 11:15:18 +0200 From: Lukas Straub To: qemu-devel Subject: [PATCH v8 4/8] migration: Add yank feature Message-ID: <1a2255fed79dbbc60ba2fd53d9dee23e00a9ba76.1598951375.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/uLo.04FiQOt2FneibgvhQPk"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Provags-ID: V03:K1:Rif3NMarG7jL1/HX9cYJO4Oak7P2h4NbOiJ06X58+PXfBtIXWLu q0iVeGsFxrINtnzTe/KRAXUH8eZoqwehLqfhGMHCa3h+HQwI0w964FL3ZeFGld3TBTz1EZB iJkyqyobSUPmCVjHgeRrfsyzLtR/8FhsswYeDgPeJxdDOsWyGMlUiVEqb+IXd22EzxaTsIJ mDeQhKB3OkxtCkOcPK4RQ== X-UI-Out-Filterresults: notjunk:1;V03:K0:x1MSb+x8Jio=:7W6Y46MkgXRWiD84HVmhlV GB4mhK5P52U/S5hfw9+ErwNLCic18umfUBVbQSF9u7D3Z+eJk37u64XWFjkKCJ2sk7/ndPcIx DecMY5DY91jIzg+lOaKpmLEJq+lgCMPD3w/g4zPuSN5F2Cp1XPpYThzgJSx5Vyc3+2EMmcHcP NWr7akPtUbOW8drFDDGq/sj/RdkRkThyV7PydBK8nF4z4ePbTOqRkJ1WJG84XiZpVAj8c60VM K2kO2XOcHqXY6EnCXY4n75UWsvpahzOjLto94xL+tw87ymVzrjkTnmc0++xpA8WOd21wR+m0v SGlJuShj0zyJWv246ZrbuEPpDKbB4AotA6kkDN8MMxdUD9ASvn2ypX/gRvsUge+TSG34CiAwQ uovEc7QztzQx80y2zhWIIQVrKZzJ0ciRHoqe7HMv/eP0WeRR9VxY/uIlqR1btN9jAbApSWJ0S U3tE1WI9Tp0Lx3Ne+UnZdD4U06Ott9hlPIEMQozij53wFbbTiF1c0RQBE1vnLnzADEJcs/gwQ jQ/W4C1EI6RABzgFFMsgYGy1fkK1R+M0tUa4pPRqNulsnk1nPvHBnPobkB7hhmfdHu/EwgFaA /A6OG+pKkwec3QpJ0NKQ2huAtpLL50NRhqA6CmfzUY6QLzZUVpYLRdiIPx8byacw3JtFkOrIy hpbl8ySzhVK6xieGn87psFuElJjSanYhldGs36NIO8WzDRSHfkszRMV/ZXGj1WgJetIUJScV6 rOfwemVm4sL5TTaIB5aZxr2FZKr0k1qBxGFteK2Gb7gGQmsv8Zi5ImCpqQHDc4ZFM3YgirnyX /8ARut6d+T0HYiq9kGz0SuRZniRmooMxlOAMZycVpf77ipAEaVnfEz719tvstQO/X2ibQpYBs GbY2+QWT1M3v9eVvePaTkPnkNkeW4QEtLpYJpGBONtry13yTzaubry3vC9M9eUdAVP5G5scu1 Rr9kT4ApTHsYkOImBjaPmUiAqmxekpH3tUFFEcuvRbqYS9CuXVYN5voUXopV4eC1Rp6iEczqS XRnz1vq4Z3DV00ZOFCjo04XAhDcpkexR/A+EveCKfzAJqiXOscgSN/pDfF9MVryxqnHavP1Wo Hck4QcsJhIj2kLv9Gu/9uTiV5kKGR/m0dHK+1PC20hbRV7fz0iG5aUJykHoEjN3IUmMFSd4Qi xGu0Hg/2Bb1S53BHhUl0pKbuvO84+ad5CFBAJFIACxGvRrwsYMPVtiXiqZCNs2539uQptEkaU odJpDtFM0czVXJHLIOqhAA9FSnfd6UeT4T5H6HA== 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; 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/09/01 05:15:13 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_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no 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: Kevin Wolf , "Daniel P. =?UTF-8?B?QmVycmFuZ8Op?=" , qemu-block , Juan Quintela , Markus Armbruster , "Dr. David Alan Gilbert" , Max Reitz , Paolo Bonzini , =?UTF-8?B?TWFyYy1BbmRy?= =?UTF-8?B?w6k=?= 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_/uLo.04FiQOt2FneibgvhQPk Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Register yank functions on sockets to shut them down. Signed-off-by: Lukas Straub Acked-by: Stefan Hajnoczi Acked-by: Dr. David Alan Gilbert Reviewed-by: Daniel P. Berrang=C3=A9 --- migration/channel.c | 12 ++++++++++++ migration/migration.c | 25 +++++++++++++++++++++++++ migration/multifd.c | 10 ++++++++++ migration/qemu-file-channel.c | 6 ++++++ migration/savevm.c | 6 ++++++ 5 files changed, 59 insertions(+) diff --git a/migration/channel.c b/migration/channel.c index 20e4c8e2dc..21fc8046b9 100644 --- a/migration/channel.c +++ b/migration/channel.c @@ -18,6 +18,8 @@ #include "trace.h" #include "qapi/error.h" #include "io/channel-tls.h" +#include "io/channel-socket.h" +#include "qemu/yank.h" /** * @migration_channel_process_incoming - Create new incoming migration cha= nnel @@ -35,6 +37,11 @@ void migration_channel_process_incoming(QIOChannel *ioc) trace_migration_set_incoming_channel( ioc, object_get_typename(OBJECT(ioc))); + if (object_dynamic_cast(OBJECT(ioc), TYPE_QIO_CHANNEL_SOCKET)) { + yank_register_function("migration", yank_generic_iochannel, + QIO_CHANNEL(ioc)); + } + if (s->parameters.tls_creds && *s->parameters.tls_creds && !object_dynamic_cast(OBJECT(ioc), @@ -67,6 +74,11 @@ void migration_channel_connect(MigrationState *s, ioc, object_get_typename(OBJECT(ioc)), hostname, error); if (!error) { + if (object_dynamic_cast(OBJECT(ioc), TYPE_QIO_CHANNEL_SOCKET)) { + yank_register_function("migration", yank_generic_iochannel, + QIO_CHANNEL(ioc)); + } + if (s->parameters.tls_creds && *s->parameters.tls_creds && !object_dynamic_cast(OBJECT(ioc), diff --git a/migration/migration.c b/migration/migration.c index 58a5452471..61a9e87d22 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -56,6 +56,7 @@ #include "net/announce.h" #include "qemu/queue.h" #include "multifd.h" +#include "qemu/yank.h" #define MAX_THROTTLE (32 << 20) /* Migration transfer speed throttli= ng */ @@ -244,6 +245,8 @@ void migration_incoming_state_destroy(void) qapi_free_SocketAddressList(mis->socket_address_list); mis->socket_address_list =3D NULL; } + + yank_unregister_instance("migration"); } static void migrate_generate_event(int new_state) @@ -380,8 +383,14 @@ void qemu_start_incoming_migration(const char *uri, Er= ror **errp) { const char *p =3D NULL; + yank_register_instance("migration", errp); + if (*errp) { + return; + } + qapi_event_send_migration(MIGRATION_STATUS_SETUP); if (!strcmp(uri, "defer")) { + yank_unregister_instance("migration"); deferred_incoming_migration(errp); } else if (strstart(uri, "tcp:", &p) || strstart(uri, "unix:", NULL) || @@ -396,6 +405,7 @@ void qemu_start_incoming_migration(const char *uri, Err= or **errp) } else if (strstart(uri, "fd:", &p)) { fd_start_incoming_migration(p, errp); } else { + yank_unregister_instance("migration"); error_setg(errp, "unknown migration protocol: %s", uri); } } @@ -1692,6 +1702,7 @@ static void migrate_fd_cleanup(MigrationState *s) } notifier_list_notify(&migration_state_notifiers, s); block_cleanup_parameters(s); + yank_unregister_instance("migration"); } static void migrate_fd_cleanup_schedule(MigrationState *s) @@ -1965,6 +1976,7 @@ void qmp_migrate_recover(const char *uri, Error **err= p) * only re-setup the migration stream and poke existing migration * to continue using that newly established channel. */ + yank_unregister_instance("migration"); qemu_start_incoming_migration(uri, errp); } @@ -2102,6 +2114,13 @@ void qmp_migrate(const char *uri, bool has_blk, bool= blk, return; } + if (!(has_resume && resume)) { + yank_register_instance("migration", errp); + if (*errp) { + return; + } + } + if (strstart(uri, "tcp:", &p) || strstart(uri, "unix:", NULL) || strstart(uri, "vsock:", NULL)) { @@ -2115,6 +2134,9 @@ void qmp_migrate(const char *uri, bool has_blk, bool = blk, } else if (strstart(uri, "fd:", &p)) { fd_start_outgoing_migration(s, p, &local_err); } else { + if (!(has_resume && resume)) { + yank_unregister_instance("migration"); + } error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "uri", "a valid migration protocol"); migrate_set_state(&s->state, MIGRATION_STATUS_SETUP, @@ -2124,6 +2146,9 @@ void qmp_migrate(const char *uri, bool has_blk, bool = blk, } if (local_err) { + if (!(has_resume && resume)) { + yank_unregister_instance("migration"); + } migrate_fd_error(s, local_err); error_propagate(errp, local_err); return; diff --git a/migration/multifd.c b/migration/multifd.c index d0441202aa..2c9863e770 100644 --- a/migration/multifd.c +++ b/migration/multifd.c @@ -24,6 +24,9 @@ #include "trace.h" #include "multifd.h" +#include "qemu/yank.h" +#include "io/channel-socket.h" + /* Multiple fd's */ #define MULTIFD_MAGIC 0x11223344U @@ -866,6 +869,13 @@ int multifd_load_cleanup(Error **errp) for (i =3D 0; i < migrate_multifd_channels(); i++) { MultiFDRecvParams *p =3D &multifd_recv_state->params[i]; + if (object_dynamic_cast(OBJECT(p->c), TYPE_QIO_CHANNEL_SOCKET) + && OBJECT(p->c)->ref =3D=3D 1) { + yank_unregister_function("migration", + yank_generic_iochannel, + QIO_CHANNEL(p->c)); + } + object_unref(OBJECT(p->c)); p->c =3D NULL; qemu_mutex_destroy(&p->mutex); diff --git a/migration/qemu-file-channel.c b/migration/qemu-file-channel.c index d2ce32f4b9..d8f8384fea 100644 --- a/migration/qemu-file-channel.c +++ b/migration/qemu-file-channel.c @@ -27,6 +27,7 @@ #include "qemu-file.h" #include "io/channel-socket.h" #include "qemu/iov.h" +#include "qemu/yank.h" static ssize_t channel_writev_buffer(void *opaque, @@ -104,6 +105,11 @@ static int channel_close(void *opaque, Error **errp) int ret; QIOChannel *ioc =3D QIO_CHANNEL(opaque); ret =3D qio_channel_close(ioc, errp); + if (object_dynamic_cast(OBJECT(ioc), TYPE_QIO_CHANNEL_SOCKET) + && OBJECT(ioc)->ref =3D=3D 1) { + yank_unregister_function("migration", yank_generic_iochannel, + QIO_CHANNEL(ioc)); + } object_unref(OBJECT(ioc)); return ret; } diff --git a/migration/savevm.c b/migration/savevm.c index 304d98ff78..39d5ba9a2e 100644 --- a/migration/savevm.c +++ b/migration/savevm.c @@ -63,6 +63,7 @@ #include "migration/colo.h" #include "qemu/bitmap.h" #include "net/announce.h" +#include "qemu/yank.h" const unsigned int postcopy_ram_discard_version =3D 0; @@ -2935,6 +2936,11 @@ int load_snapshot(const char *name, Error **errp) qemu_system_reset(SHUTDOWN_CAUSE_NONE); mis->from_src_file =3D f; + yank_register_instance("migration", errp); + if (*errp) { + ret =3D -EINVAL; + goto err_drain; + } aio_context_acquire(aio_context); ret =3D qemu_loadvm_state(f); migration_incoming_state_destroy(); -- 2.20.1 --Sig_/uLo.04FiQOt2FneibgvhQPk Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAl9OESYACgkQNasLKJxd slgwNg/+JJACIwtPed7tcciey2gvLMK56Xzy5Pb2jar/J+vDJDqeq9lq21ozLq3S 1Rf1+LQ3ZkqwSxb84Ics5En4QgxhD5ywWInQ/tcPySMvhWpYJA4sNuUCaffozhW3 jBT6oeC7FbShoT6QtXGOlOaJQHJM2Rq9s/h3ldh+L1XvZYgWBkKn9CEKU2w8VsHc PYwWwZNJi279drzZc7AjUnkuMuTfMaau9jXywZE5bBQyVAcLe3TS0nLMwX483lqQ tcJK11Etzfr21JUp4OLj0X4cx9yIfTNRvuT+WLOKQ0KbFC+sYynFj3wynfnGnfR2 niRW8XJOlv+IbjjUSl2IbKiJvqmX7wlfxbeadfTO/VfLGvUgXl4z4QEmDLLkt545 pNkarhz2DKx0RmEhY+azSqmP2d2AjklGHy5V3MqqyUlJUzHO0a9DVSX/fSXr6+xQ Qr91nAGHvFJqQjw+FjuFcZtIDDwoseeESXDgYQGgl0xuICIoSj64+jlzIQ5rsDTy HEnjnqBv6lFSN3J2fEPGvB6q9Q+u+pYe/1lD2faegLyAW49zAIXGdStnx1e35wJm 0bopty71l2dQ7j9drRroWo/ASoS+NvyLp5/MNnKM6gKxFTZcPjyva6PZGa4i1OnD GGE6J8TgNHH+R0YF8NyULeI8PdwaSujzNNvJ7LUnWcZRws0w96I= =KybB -----END PGP SIGNATURE----- --Sig_/uLo.04FiQOt2FneibgvhQPk-- From nobody Sat Feb 7 10:08:19 2026 Delivered-To: importer@patchew.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=1598953159; cv=none; d=zohomail.com; s=zohoarc; b=dP3TK74Qb8fyth6zXskP29bPUBL9rNsqiz8HvbfKnOZGrKhUcbDsiCbntiaKY4/Lgy/qgtf2VQkgVrw60XCTW4yZfUM+/cHIBl2TgH5KAdaMjfafh+t1xPp+ND9r1U8NgSkcLEfQq61u9w+sttv3MKRHBrtAWA7ITZnqTAB5k6A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598953159; 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=W4MTtWxrEtT+Ogn3UknFl8BlZX7S7HUxcPNZjyuqGzQ=; b=G8thPPqYiLWGNAlKnsb/ngG9s6WKtolKOsVPx45JyBNufT/iDUMBomVbTZmIxwcABT+hPHU8df8Ao2Fty7DhP+uJAmpZvGAk8rBSW3jk/lRVAbEIGi2d7NxpaEEvnSsebPRGI/WAJR+N0tCkovw/HcIPvjBcnFQZFaMW/AKpPno= 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 1598953159369557.075193179473; Tue, 1 Sep 2020 02:39:19 -0700 (PDT) Received: from localhost ([::1]:52202 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kD2l3-0006Qx-5x for importer@patchew.org; Tue, 01 Sep 2020 05:39:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34790) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kD2O8-0002o8-3K; Tue, 01 Sep 2020 05:15:36 -0400 Received: from mout.web.de ([217.72.192.78]:40851) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kD2O5-0007Jn-9d; Tue, 01 Sep 2020 05:15:35 -0400 Received: from luklap ([88.130.61.220]) by smtp.web.de (mrweb106 [213.165.67.124]) with ESMTPSA (Nemesis) id 1McZjb-1kjMOc39pd-00chaH; Tue, 01 Sep 2020 11:15:23 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1598951724; bh=wGa1Vmn2SbeAvZdU/7dQ4fM84V6LwRiSr+jRdIG+9yw=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=ckC2NE+VGKGvOfpPjP/Y0GYk0QTb+Zs+k383lJXS/wd03NSwHCDDRIgacDLOiwM15 FiFaGv9ey2VmaIhgJqR+3sOr5xTE1y8yKdnoEnugj+t+NwgGvEAUT+txQsK/a5uhsW IsRNSuwJ84Kw+Z8rPrLauu9KaLvo/NmGTo4+MJig= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Date: Tue, 1 Sep 2020 11:15:22 +0200 From: Lukas Straub To: qemu-devel Subject: [PATCH v8 5/8] io/channel-tls.c: make qio_channel_tls_shutdown thread-safe Message-ID: <460bb32096f77e892cc3555c1a70613a58855a4b.1598951375.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/cmu7pFd7wlYcVSTV2LpusMo"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Provags-ID: V03:K1:CqWcWJ73tYPM4kOGRhTkaJS48bHYUTS2RvNuygb78Qg5S94hrzM cMzmZdboMQsbEufdk2Drv9G5d+KwjtnmVpcmMCN6R/hpAly5ZyG0YIruobAc/oNLYUuGx98 h8VXMrtoZQiDzmOwdnT+WPYpJ3GlPYe9E8JjqRQ5P7soxD/1kE5UoikfKs2HScOs9P6FuwT yTPpiLwkF5ikF/YWvC6qA== X-UI-Out-Filterresults: notjunk:1;V03:K0:IGJjJT6m8Sc=:1n7PXbZfgBjd+vHridWlbj 8SzBZsowJlSoakDmBhws20ViD31Vt6uQvurn2eHtSijMzsrq88vX8U0WAJgIGb4x0Vb97nMZG YtPb+f+6ZLdgBEMepxbBmNTYcI9J6Z86Fzor2GezAoit3L9gE3j5SM8UfTgAsU6bN2QyDkxFm QLSOaOfviLEWTMbSNTTIhh7bi5b2Q4ym5wItBCquf463iHj9VO14c3VFYfSHm3oQ0oysr+bSB 28E2sp1wkRTnmDYGAhZJHXOp4/aY0JdSAVWReqdSAtZhl6E/ZScex9fmoNEh8oIjD6LcefMTg MGWuU3QclUwJYEoSF2giHBnQOZ6Zzfjjk6vLs+05DG3Swf6DjZQXcdPuQpLSXBUxAeBqo6uxN M4UDwNDrA1GKemzw/0fCfM8Wl4LSatHJegincHWV37DDFATnGFD4gYSOTU9wyJULcWYrfILFh Pjt2BO1NyH3RTvRKKSg+X9eH9lyjgOqDEAizxs5Ghas90p+lbA9FwhcJ9IKtPKO3o8zYgJ0O6 Ewklu1Kn6LhAcG5s+9vn18t/C+CPZPLnAy4x4vzKfYZmnsTu63nL7qylpmphB03U8xxvYRjNx q53eG8+4sE58b7GsrcCqwyI7+26O9jQ83SyCChH+OGj/86R0wgZsnI9Y/KAErQw3L6NCtw+r1 mbn9hXRmJ/4BoSRMhXhoB9Lw8ilGXCTCeUW7jQN/9V8Et0LeXkMKMvwKJlJRa0/psPeE44HJh /0MqfqwOkdhOo41E7t4IWSM7DpSs298AFnwQHAcgOVSOiP/l3QBD8DnsNRCpUYYb3/DdC7AVq J4B/IX6jQdmZiKNiy5PXOKw7og/ZNAMSyfdiXcd4x3fRHXUMPiHm3aT1Xh/nWACDtu+CZLO+w oteXBtYBsyp4OTtcnCy1vAQMHd7zNfLv+xnh34gyRv4Sv4nDO+In5mNnFCrQGtG9CNEw4flTw X3kSr9aixwPOasLYrBl/javOeOuW73mzUSx7QUizuzwTVERpDSKh2nMfYWkS6Vnfah+10pnKT SPcnK+TH5RZcesB/43FTyvsih/z1xHf5LZ4nK7CqUPWXaOsmuA+co/KE7sbfjVhkk1gmCU5MR kH2jNKQ2yziGtgZN9k9gwaU/gCGQcZOj8ES4LQF6ExlKtpxagLKQZKETuenFBQ67XFL5iFkoS BP37YYszFfx0V+JzjjcVMPIHmRDxNQoYX0ATKznIPu7ivTm7Gj4eou3ywbCsG1O0HHACtFCiy dp4PcYq5zT4U6qBsiL40hF+/FHjC6vH+UbUD4Eg== 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; Received-SPF: pass client-ip=217.72.192.78; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/01 05:15:08 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_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no 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: Kevin Wolf , "Daniel P. =?UTF-8?B?QmVycmFuZ8Op?=" , qemu-block , Juan Quintela , Markus Armbruster , "Dr. David Alan Gilbert" , Max Reitz , Paolo Bonzini , =?UTF-8?B?TWFyYy1BbmRy?= =?UTF-8?B?w6k=?= 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_/cmu7pFd7wlYcVSTV2LpusMo Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Make qio_channel_tls_shutdown thread-safe by using atomics when accessing tioc->shutdown. Signed-off-by: Lukas Straub Acked-by: Stefan Hajnoczi Reviewed-by: Daniel P. Berrang=C3=A9 --- io/channel-tls.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/io/channel-tls.c b/io/channel-tls.c index 7ec8ceff2f..b350c84640 100644 --- a/io/channel-tls.c +++ b/io/channel-tls.c @@ -23,6 +23,7 @@ #include "qemu/module.h" #include "io/channel-tls.h" #include "trace.h" +#include "qemu/atomic.h" static ssize_t qio_channel_tls_write_handler(const char *buf, @@ -277,7 +278,8 @@ static ssize_t qio_channel_tls_readv(QIOChannel *ioc, return QIO_CHANNEL_ERR_BLOCK; } } else if (errno =3D=3D ECONNABORTED && - (tioc->shutdown & QIO_CHANNEL_SHUTDOWN_READ)) { + (atomic_load_acquire(&tioc->shutdown) & + QIO_CHANNEL_SHUTDOWN_READ)) { return 0; } @@ -361,7 +363,7 @@ static int qio_channel_tls_shutdown(QIOChannel *ioc, { QIOChannelTLS *tioc =3D QIO_CHANNEL_TLS(ioc); - tioc->shutdown |=3D how; + atomic_or(&tioc->shutdown, how); return qio_channel_shutdown(tioc->master, how, errp); } -- 2.20.1 --Sig_/cmu7pFd7wlYcVSTV2LpusMo Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAl9OESoACgkQNasLKJxd sljGBQ/8DUlluAiGJ5GPVAQtBZueLii/nUh5CR8+vZEf2tjLJsZGT5ao8LlcgllZ /U/oAxyP2Z01xJLvfCbhzKnIaSQcJ5cywXDD0jKL+A/7WPZW/D16y0NSE6/bPJhR /abetnLOlafybm8xhGdK2XJUIQXcGPxhUYDnKjy+aDCkOyXvzzKriCsnu6Nthj3C ZmFv/0PF3K8l5Nj2d8/gz1fqvyLDp6uTHbzx1L6b0aWcsV9c1t7zvUsoEWhVLRxx a5pPbBCiAvq1j/q0/Imtv3ZM2ixyIOeKi89pXxcD8BoPwU7uAWAI0WWI2ZQsywRM qdIkWECnQuyXT2j+PtaL2k2Y1ZjEkmWZXaeIpXvMYG9p9+jmn+PNbfdTjAewGCZo DPL2dkTt6wSxFhN/cF02Hv2U3VjnA5rItRLxjpLpOSbM/4Lrz3ryOAHU01pD/xiv kPH2NcjsaSO1SjDh1/126XSNXgT/aBI6oaii3x5fUq3UwsBvHkWANmN9HTRc9H+X ++JNbxWb2QyNJfxyOlRmqnpRe7YCoJu8hLS1MpnGiYfuOMiqBGQJUBZsqWCamBYM QzCObXjw2aesoxm8mi0X6f5UFoJ/lWzusoZJergSWAfJPWsDYTawP5PTAPdrJ5IA fnpOIYe3+eNvAjUcvJ8xaAGDooNfUIK88gFaEAW84JfSxjy+Dqw= =vAFY -----END PGP SIGNATURE----- --Sig_/cmu7pFd7wlYcVSTV2LpusMo-- From nobody Sat Feb 7 10:08:19 2026 Delivered-To: importer@patchew.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=1598952782; cv=none; d=zohomail.com; s=zohoarc; b=JffAhm+qFZu3upyfoLvvj3OYw0jamzwxL0KCugawetDuJO3CqZBUve/BtmcfirDPVWDa7k+J2AY5hCcet+7Ar/9KFyMb+o08WBX0TBKVDkXGymxlGqCjcpCIiHyULm8hAHmvkNH4NeM9+79ZlEQGcXX1S7fQT5ttI3NRa+iQEOY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598952782; 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=n/HpuvNPzki7r9v9Pej6Z+bEwmUl1Zrjf4iFa3bhR00=; b=YWdhy5gM7foX2GIxYtH32WLheFf3E7J8spKy/BhA9UJeukNGuIod8vAmL0mS02y4LO51jQsQ4OHNYzTDWcD4S5jlN4hq8rNe/cxxlBxDpkt++M8zB1JfD+LTdLcyU4dIj27Pe41Tidx+2SCkkNljyVdqjj5La7Pv/Esnq11cUXw= 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 159895278208642.51015796701881; Tue, 1 Sep 2020 02:33:02 -0700 (PDT) Received: from localhost ([::1]:37786 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kD2ez-0000Ft-5f for importer@patchew.org; Tue, 01 Sep 2020 05:33:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34776) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kD2O6-0002lK-QT; Tue, 01 Sep 2020 05:15:34 -0400 Received: from mout.web.de ([212.227.17.12]:34913) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kD2O4-0007JS-Pm; Tue, 01 Sep 2020 05:15:34 -0400 Received: from luklap ([88.130.61.220]) by smtp.web.de (mrweb102 [213.165.67.124]) with ESMTPSA (Nemesis) id 0Lc8c5-1kuNwY2Icv-00jZtU; Tue, 01 Sep 2020 11:15:27 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1598951727; bh=xAfFk+1GpNfhWU5jVhEM5S9s3tlNI5aCZKFADiMs8rs=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=DtMH31QBhti5RV02/tizZ5kdNJcATWnln1yV4AeFS8UrPAOjw6PNjDLq4gdHOEMqF riYdFzTaCKAFUh2t0PR4QLjDNfQyzqu77zLcQ025CR+CtInARr7VEbeAFu8LCh6EVr gmQEheqiVwhCAiKNWQQ/9M7A4TMgo7BGmrYNX6wE= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Date: Tue, 1 Sep 2020 11:15:25 +0200 From: Lukas Straub To: qemu-devel Subject: [PATCH v8 6/8] io: Document qmp oob suitability of qio_channel_shutdown and io_shutdown Message-ID: In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/gZoCt9kruQ_rV2X1IiLrSn_"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Provags-ID: V03:K1:GZthgDTWeDdi57QP0iqQtvXjml5F/NRUmThVXeJAHBKiPYRactx YaFuhmbhxIiqebyCYID4RiM/PrGx0KTFfKzExVaQOokjTHC8MUl8Xva/b7TpL+sYLQwy7f8 Mdyt8GpFGj3atNXa5G8GePWEXCUiTTY9vrKp4NxomDD1XiIY67fCGM67IRvXTqqigrOVenm TNRtk3aielVoXau5rewXg== X-UI-Out-Filterresults: notjunk:1;V03:K0:QqAxWhWLByg=:pKA1esqGSXSDGiB3m3n2gN VL2aCzP49Kj+C1wkk30wIXCsaX2YXAaMOg+t3AreOhTrM2fcy6WXrNHLBANQIXvKetNidFtW/ x7mV6HEnvXkzvlTUiapmmkwNncNQwdaNff49WuK/tJq8PfxC1r+I/9arJfWfGpXX6Yw5UQXHP aa7CHp9yA4ynMb5crWpnv38YZQ63YsMMaShm8jB7SvpLGJsQWixoryUAd8BoF18W635TTxapH ibrZjC9frE1Q2dS0XKNV0Ub9gcNIXIk/HxAVOUM54UBwamOVl9UdMwPkczjUoN2rlo99+el8S Fd6gBzSteOPVzAvr6N34qHsE+xNPTLmR8fn7IH+Ko9lP6hr6fBt/wtBYR7zLbDFwIRYQkY2Vu pCndaEIgIP2EnYc8uoveLVW64Q8gCWeTOFb0HAFtKQ2tkA5P1qn5gPCY30yNOIKYLUxzRgIKW 0ZoOCAte4u3wfwYIme54DU7AN6TQUUMl2y0MjxcnG0HQyoH81IrkLwj4jvU6BS91AStrOqW6J /FCbf44HKhPvYfrHRrZTj0YcYm+5kbrQRjbHIf03b6UedrbrwSQC6LgCWScp5FLVs+YtlXSOf 4rXoI6Px1z7KSq1z5MlPYqSd1TA/VZqGrwfzc4e+xC4LjB5XlIToxt2udfE+KAtSxMjQR6mco S8OpsKgok3407nM3xK9fmlmOT/oYk6IeAOzziJKsnE2NoVeXxJObjJgPh5+IKE+m+IUpSPdfJ UFNUYPfw9CTjz20AaTkEPMopy2G4AJYL9i+d9rzsx+lrDc781DZ9UhVyY0VBxTyQQpuYMAMiF 231LWVm/wxQJCvSUchTjRjrBQnshBU49ez76+MwCn7NsMTteq8UxwKN+ESzw9h1dnPV53+maZ StQdFaCmWUBOYqKcNfiX/nB+mZe5tQ9YbgQ9Yw3HXKEk5JcWyFLR9W5UmjHqVJ7khD6X4I0Z0 05v52TmA1LMjxU0s/jT2x2lv684d3GTU1ibujDm2Yw1ToOWsvdJJo3NMKxtQH2fiaApa5lkrS 6MGM8fu2eBUPMuaiJKbrbz6IOFuePTe673uvsNK7TI/wKHb/CMHbS4Ti1XzNNL7St+uRHunfv os+Ty2iXp2cHiKo6/X1kDTbrWJyp8mLTK0YXFB2+wivNhbfqTc7/A2e4H8qt7O6aatzm0ZnJv /YWFVyMv/lluGaxg+WFh9hIOhueWXHpXByzviKTr9kAzg5WeZulDOn17AG25xW4lVvaCAh7QZ 54Pyc4qdMvdwxZ4p2qrK/p4wIQ40hk9rqJR5sjA== 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; 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/09/01 05:15:13 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_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no 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: Kevin Wolf , "Daniel P. =?UTF-8?B?QmVycmFuZ8Op?=" , qemu-block , Juan Quintela , Markus Armbruster , "Dr. David Alan Gilbert" , Max Reitz , Paolo Bonzini , =?UTF-8?B?TWFyYy1BbmRy?= =?UTF-8?B?w6k=?= 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_/gZoCt9kruQ_rV2X1IiLrSn_ Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Migration and yank code assume that qio_channel_shutdown is thread -safe and can be called from qmp oob handler. Document this after checking the code. Signed-off-by: Lukas Straub Acked-by: Stefan Hajnoczi Reviewed-by: Daniel P. Berrang=C3=A9 --- include/io/channel.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/include/io/channel.h b/include/io/channel.h index d4557f0930..46156d84f5 100644 --- a/include/io/channel.h +++ b/include/io/channel.h @@ -98,7 +98,8 @@ struct QIOChannel { * provide additional optional features. * * Consult the corresponding public API docs for a description - * of the semantics of each callback + * of the semantics of each callback. io_shutdown in particular + * must be thread-safe, terminate quickly and must not block. */ struct QIOChannelClass { ObjectClass parent; @@ -516,6 +517,8 @@ int qio_channel_close(QIOChannel *ioc, * QIO_CHANNEL_FEATURE_SHUTDOWN prior to calling * this method. * + * This function is thread-safe, terminates quickly and does not block. + * * Returns: 0 on success, -1 on error */ int qio_channel_shutdown(QIOChannel *ioc, -- 2.20.1 --Sig_/gZoCt9kruQ_rV2X1IiLrSn_ Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAl9OES0ACgkQNasLKJxd sljgbQ//ViBrC+Cn+nhiU5HNeyljFEHuM0QQT3Nl4QDTNvVW+pQB6xa0vRdhiO5R O/jARDR21pJ2ThQVX2a+72Z4IxVSDhBJEXJkx2RXN7wdvruq2nwfeBQvEfhuzKaY 7ekASknDbwKIKKM0OMebLUfp9lD3IgrsfO7JOvnmLwL6JMI6CUhMKHurgmTzUPzf ALuLw1eVut71VJAymoLy1PL6ar2yoYq8lmYsu5ZlnXV0w5Gdab51CK84D86aFw3p ukRZF0itdIEzM6hvBWV4yTJ8YiqiD4C8NIqvbVhAy5SE59n9Lop1paZJ43fRZZNd NzY1w6x7wqcfQzDmKbranAUdDbyzkFutITa8R1e1BBzUt+7sZtScDxUPqJ5S8MZF a9sKxuZcjFG2UIrUrsMCyU+gpt6KKQRjv52+U1cchIWwkNVbDMXUba/jKEq35JlD AtVwYq61ouzwxL3FTIxrFq7NfeXVUxqvy+fp5wrRQ7ZZ38qQtBD+jFFOpTmbSlV+ Jyb+US7qn9o5nLNQmhXdePGGOUsDPmWOAtCayPB0JzqZ06o45cSxJ4x/RXL9NUuQ mQfWuDaFlbzRGhhaAFzZ5wyHB8+04knEvGNdaVjhC6eWqq3IRhpMtjYPqACDvlii KPnZD8uNY0WAy0RCKaaoJdW7MMwPYj+qMYNUBKc4EUlc+0s3pA8= =nqT3 -----END PGP SIGNATURE----- --Sig_/gZoCt9kruQ_rV2X1IiLrSn_-- From nobody Sat Feb 7 10:08:19 2026 Delivered-To: importer@patchew.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=1598953485; cv=none; d=zohomail.com; s=zohoarc; b=Zbb6nsGlBoap0vZizgW+0rkPRxB1xCIN6OJlprbIDNw/k6G9lsEcPAE63TxltZooTcNRTNjLga7jeiNnXVieRi8R64SoWGvh84+LP6ueVykUbt68063Bi92XMvKOFUgC3uRwvkaYpWA6z2pcIPEIWADo/GO9dlq5JFjK0D0oe2I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598953485; 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=UYMICoXZcQUgCRi75B0dKXjg7htZrckMaqi4u2ILlj0=; b=YrajwMh0OahByOLve1AnwnEok9/ku+ei1J8lX0i4gz2AgmvaDo2tF7Ade7St04qb+pPyLp5J2ChN7Ocyd+LR0+VVFK/pC+j6yV52vz5PXYHlLmo9+4F7g4elhfVQyM5O8XZELshBJDsWD/MHpoQ3bt4dP8GA5noK0yyaUXUYIW8= 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 1598953485508920.9282057387366; Tue, 1 Sep 2020 02:44:45 -0700 (PDT) Received: from localhost ([::1]:60564 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kD2qK-0001im-KO for importer@patchew.org; Tue, 01 Sep 2020 05:44:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34824) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kD2OC-0002so-6a; Tue, 01 Sep 2020 05:15:40 -0400 Received: from mout.web.de ([212.227.17.12]:56797) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kD2OA-0007MC-3q; Tue, 01 Sep 2020 05:15:39 -0400 Received: from luklap ([88.130.61.220]) by smtp.web.de (mrweb102 [213.165.67.124]) with ESMTPSA (Nemesis) id 0LshWf-1kblAQ0VYn-012Dvs; Tue, 01 Sep 2020 11:15:31 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1598951731; bh=UYMICoXZcQUgCRi75B0dKXjg7htZrckMaqi4u2ILlj0=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=pgSVpdSybPci8y23cvGZrr3s6s/1EeVRqSKE+IPMSnT8UGcWox79C7HT3wYpkxjuZ slFZRSqAS77FmSrACLuaT+LcdIOOX3QFVCZV+cRVYOF+wGOrD5ESR68/DJh8oJqzgG E95+LT1nUWnn8pSmI9KbClgPlSRgiR3E2ETrfuk0= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Date: Tue, 1 Sep 2020 11:15:29 +0200 From: Lukas Straub To: qemu-devel Subject: [PATCH v8 7/8] MAINTAINERS: Add myself as maintainer for yank feature Message-ID: <6c7fabd06fd7ba0c6ce405b871f94c7587a50328.1598951375.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/OLk+N6f=xJvx_NAAxN5dq/l"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Provags-ID: V03:K1:d/IIh62pio8PHLuKwohc/6MNFq7zoOxJ3Ic5rPw/3wx4zuzTStl nJgNkfWJ6R3ZtVM/mTQ3MmW3Tr2MbfClpcNL5Tw0sqg+465tTJHWSQxa4eIe2c7Fah1Mbs+ ClOgNHyFiauv3xjZuh/o9TAlBvN6O7M79GB8AIm8BGtKjN5LsWAl7/cMIkUfLLO5SNfc2da x/GKuf+/nwKtWTG2QB1GA== X-UI-Out-Filterresults: notjunk:1;V03:K0:5eKK3QK1h04=:dxxo/Ja2qFYIjKdQ+yr5fc 1zX+fJR25hUp5tFXaRI+TgcsG/l7geTdDCDufBoqI7IvpVjAXxJiJGIjnNQ24K2wcmk5HXMPw ZGsuYTbUU+z86W8g5SDM+lyVRFSLR0Y9lihNWrJfcaKMYKkOK81JWszV71/2HEkx6V+VWB0NG X4WYzwEHvfo4jOD0BNAJMN9GgmsI7NFM3wJnRN8DtElThDcPAsGxTetS3jvCsxth5ENPMZoZv gUrLWwNr6WAZsR64G6FwuiZgPqSjXjQsB7YtXB47ClOv2FC4XalnCrSRf4YxHzsGSvfHiyAoO vw09dm9eu0xBNsacEzgNj8EWUQoKzlR7fQlV3l1DH+yMojNTZJRrYsUD2hbn+wqeykqATDyNm 3q3pSh654375bj9BWvox7RoTEW1Ad37EuGN9sIBflV7bssgjQzx1uqG7wThRgQWMoKoXvwxpg nVUBJQKSJd+PJOR3XdmQmOX16MgtNWhSkAllF4WcHaAxwmh6RAmcSiziiShPBVxRGXN9uvmEM Shq2ExVPZHGCBgEQYHq0OrJTR2lxGUBJpS5BeoAmCezMI381J7H+z1nWZM4xOuWWYWR9HDlTH VwJyVPRl1VLiGa3ExVVWFPMFrIgrjuVYP2fFAJFqtqxhfDOwXBtxfrXHJBcaDVRlEwfYZN646 /7TSaxT5s3VW2/88o8x1w8viUK7/+xbPYh/IxwfII5dukbyoJI33zmmE+AJBSq5+UBuACb8KX TEvISWl9A6O8uT/dObr3BSMioIRP1eVRzqrHtvLHJDhbi+5E2pim7+1ZnXz/OYuAKG7Ihc4xR /NkfTTURcdP8CSKqjJI52kVuHpCiwDyxX9fQU4tZlEoIYVV0CwNfqr1TzfXzY3+zAN+eSzZhE 4XtlMKH3v3lT6OyUikuwXodBkdh184HCJ1G4Rd0nHQwjG6sXxceAkOuLFXKniLeg4oUJ6xuRx LCmF0+FLjJGzYl9zgjKvvVS6Y/sE/KEpEaQut53IpHpWGybiUh9UVyydelU8LXfhoB6i2oQ+h PswkcUTmub/whLl2D4jtnfjDsIFLzqyZzC3rmk+7ZNuYmCw0foVCX2wsrKKYU169erod1BAnm mn8OuuTGvaTMWKhm6td4jJ7DtpHCsDi/yxbsrwTRzPGL4UsZ/DwMImKDnRCLhDcPxhpnEY/vZ 85f0CVIQYNk7rCgYtoTC7gi0UvAk/NsoW6v/7D5/1TkfO2zvHoFf9wIBsRau+blSAHzdfETau 67wM+SqpqtyK1ghYKQdlQdysC3kUPtkd6S3wWIw== 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; 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/09/01 05:15:13 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_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no 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: Kevin Wolf , "Daniel P. =?UTF-8?B?QmVycmFuZ8Op?=" , qemu-block , Juan Quintela , Markus Armbruster , "Dr. David Alan Gilbert" , Max Reitz , Paolo Bonzini , =?UTF-8?B?TWFyYy1BbmRy?= =?UTF-8?B?w6k=?= 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_/OLk+N6f=xJvx_NAAxN5dq/l Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" I'll maintain this for now as the colo usecase is the first user of this functionality. Signed-off-by: Lukas Straub Acked-by: Stefan Hajnoczi Reviewed-by: Daniel P. Berrang=C3=A9 --- MAINTAINERS | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 5a22c8be42..c1d450e25a 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2615,6 +2615,12 @@ F: util/uuid.c F: include/qemu/uuid.h F: tests/test-uuid.c +Yank feature +M: Lukas Straub +S: Odd fixes +F: util/yank.c +F: include/qemu/yank.h + COLO Framework M: zhanghailiang S: Maintained -- 2.20.1 --Sig_/OLk+N6f=xJvx_NAAxN5dq/l Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAl9OETEACgkQNasLKJxd slgQEQ//YGFoftrojhXoOQpIDWtbN44QL5l8++saLj9ePxlSKwF1YaO98mqpvIUj LV/6mFDcGuoO5YtXH2jYKtDQSuzL4DUtX5kVfxbzuNJNsy8vnXJjIAOfSzbVOIbV IHLCZEdOFQBDY7UZZbS14KHtP2XvcEsCRsQ03D+Vp2xG4q8kttqyeb2CqFyNvZul bn8ReJBqYOp8RT35q7V06lbRmL3l3NPh9uBBQ7dtmWah5aGp0fvFO7wBYNPT9x0g kXB6aTyOsuOiJva9WEe2FWvSvjhLHDlvCOfptw325JS79bKKLGr1Gl3ApU+e4sJO 22+P8FCmNBl+3Ja7CfGk0ffWtSqa1slGMH3msx2GEYtMVm5cLYD5KkQkJ+TRBh+L PxcaaHoX4FBbxbxdiiETepimk90ZKVZJUeM6Mdv3yITwaQ3zpfZvCqPd4+gNEAX5 x2nAcxz6J1lhIEvU3KKeYWHCZToWVwa2MaMk+Acupr5zPbcf7jIP2Jminv8PPjJy kV0q1CnLA8CT0t8EaPY1bC8fe2PNzwQTzcpOg95SCop40yHQjtTNWItN6ySGmL1A QMLEJM3wGlSm+tCACX8qSUr0VTgh7VS7j6giFuanvmqtvRv0dm6qGskGUyK6dVMc L8uaOPQ561KDEWFTjDB6fQMcL9ymbgVQ0SC3c5gOBIJ9KeQv7a8= =TbvH -----END PGP SIGNATURE----- --Sig_/OLk+N6f=xJvx_NAAxN5dq/l-- From nobody Sat Feb 7 10:08:19 2026 Delivered-To: importer@patchew.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=1598953355; cv=none; d=zohomail.com; s=zohoarc; b=PZ9rf2DCVzxA6niRGOkueb0+6JXtKqO9hYJeqQciVOowtk3YYLsED3HbPwiTAFCyRrb8sxQyGvlCXVT0LesB3H7a4H/6L4uXx9ZEOSzOMH0l6PSpaLg6htzhH+jOwC+nWIKfYHHH6JAD98X76+TcuV0pqHEBsfkTtruXyTZMMVA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598953355; 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=mvSRwJlZ8rFCLQTm2ucJN48Fu4RMax5StF0DcGwKf1g=; b=XksESrMcsrIVBB3WwBeNM7FssEhiDutsZXsNyrwvh+PKSL5SQ8+pZmRw3HhQCb5p00G13bIVT2vmuoIv0KYWpqKIX2a1VKqCv0T6K1LBBu/A9Zf6jH9elNEX4P2YUgwjtS23nkBWLoY2jo7Wv+hv+rIId+psvEUaK1W4EjwAUnc= 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 1598953355742183.80159092713836; Tue, 1 Sep 2020 02:42:35 -0700 (PDT) Received: from localhost ([::1]:57304 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kD2oC-0000Iy-MG for importer@patchew.org; Tue, 01 Sep 2020 05:42:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34834) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kD2OD-0002tu-Ld; Tue, 01 Sep 2020 05:15:42 -0400 Received: from mout.web.de ([217.72.192.78]:42531) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kD2OB-0007OA-Gw; Tue, 01 Sep 2020 05:15:41 -0400 Received: from luklap ([88.130.61.220]) by smtp.web.de (mrweb101 [213.165.67.124]) with ESMTPSA (Nemesis) id 0LiCx5-1kzJcj2urD-00nNDr; Tue, 01 Sep 2020 11:15:34 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1598951734; bh=5Ru4+rBV+K+onBUzRUv2vnLe/gWCnDAJyTD5IvZPjAI=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=MxgByNQUcLF/Wr4p0DDeQ9tm47isswj+WbNY4oBoSSCwA+k8wMfpn50zSdFkF+oRI CH7lLGHuGuoP2Empeu30ZG5xH8Ph49A4MPs/Oro87kJazqZ2PuQ3ibyQhX/OkLgigp IUdZjcwE9zrV8tNDmlQv99YeVukxhMA2203kXoAk= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Date: Tue, 1 Sep 2020 11:15:33 +0200 From: Lukas Straub To: qemu-devel Subject: [PATCH v8 8/8] tests/test-char.c: Wait for the chardev to connect in char_socket_client_dupid_test Message-ID: <613e42af4f7219cba082acb2533fcdf95fc098cb.1598951375.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/SyW1wVCwxX5bhE85ag8/sy9"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Provags-ID: V03:K1:r9EJSI9MAlnesvO4kWkt1JtcVh32jssS9wMze4dW2So/znYxAqm Fg1WX8Qx2929IjCvQkXx9NKrig6hapiizA0aeIVXrlamiCmAw2W0ZAcLkCpm8edb5CVUOqL /5qaJcH1sCnAwv+4Qz0RSXZFiBh4TwWY10VBUesKLbd5V/EI4/k/QZpU1+gw/MD5gJ3/kG3 mtAClBzTQRZ5uTSZykjwQ== X-UI-Out-Filterresults: notjunk:1;V03:K0:e3PCHK0CH4c=:VubaWAuSmReSSNCqBnmXlw FJl0j2MgvuzViKohQk15M9kxF3BwJ81U5Jeo/yt4yON7le6Q7UnlRI9v+GNIDrdLsw0JxvNDz 14neHPu3Xg6lE80IuGED2xxdLudJg3bJbFktfJCcOn+9Cvonk8jAIuZ1e5M/j075aO4otIutG VkP33xZLKpoXR8c7zdlftyL9HRu7MhxAOjYfGjtLbMln+udyy28Zo3iUc5YQaS6h+vkJ/g/z2 FE7snDPtB9eG0OjWt1oGpeo7qrWQIDAJucs7odj2VobMBkB3hpJuxqMy9uwpt95YGk8/7KG0L 2coJwRWUsM+qCizlIIcY6XRPja0Yvl9t4D1kk/QkDZBbHLUoJdze1ioU3HevefolE3LG5h+GO kKjKuvfNXnZCCZxkhiHiW5mowXKEJB5/3mGxGHzvFOp2zdu3FIrg9YQshE+v0Nms9K0D5N9sJ hkSdcWbtWAzFReKGIAw6umXM73pGO/hZ98F1NEtsOy/U+ssnE/cfZSqFGNu4Scc8eE74DRSao FI5GyWNPvg+GcjrTdUxuXXxTkt3LOYhSV5r9RIZqAoweZw2GzBqvCZEME6RZRrxe8HB1ouL2V z3Qe0gbgG//NENqRCDdoHajjlqBAPECke5am96f5Go0zlnkJWHhy2usFiQoFeesU/zlgp9ANx 06MK+p/b2c1jYXJUCzhTjkv4MZu1Vlu996EgRxqsjOfd5J9lenN/ZpJTuNjLSI4NIpiI6noDt r+3DKn4MKODFS5zB1UlozFrHyi92Y1WktKPcwpPs3V492x3Jl3++i6OixYhYHHaVvRzEYI+2P 5VKm1gX6N5otZufmwkP1ruRZ04ThaWAAxKOWh8ijdgfVO2H2BQQR9obhXrfT7a4xc8dlliO0C WXV0sD5UczBDz4Z6PSdAh7/2+LNq61ahuVdPjCh+AqZhoet2uTmRlDqcQ2BOcx4cT8Ecb4uoJ 74B2l2lofNE/dpJqGNykYMNiwbrmaeKqIt0OusPZ/PjKixDwMO43I/XUV2jtNzhtvrzWHWW3f 5+5uL38rpbSyr9MQsjU7wl8Q6Pv+DPKYw31qv1j3+aBoTd9s4rAN0XnDZprKNkxejrEfCcMt3 RdjCBbprwk/BmBABM5vbqAOL31U5n0+O3dVLIv4y3NaTsT+KDG2+HMGJ0GzNwQZ1xjtoSZlRa uLddVewP90tJ6tLUi9s2KK15um20lm9CNlcz7F9k28CuoajzCo57Ayk36kTOyJGHOrbIxd6uz VZVcTWcCL+xVw0k50FFLhJteYG237X9pLMTootA== 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; Received-SPF: pass client-ip=217.72.192.78; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/01 05:15:08 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_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no 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: Kevin Wolf , "Daniel P. =?UTF-8?B?QmVycmFuZ8Op?=" , qemu-block , Juan Quintela , Markus Armbruster , "Dr. David Alan Gilbert" , Max Reitz , Paolo Bonzini , =?UTF-8?B?TWFyYy1BbmRy?= =?UTF-8?B?w6k=?= 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_/SyW1wVCwxX5bhE85ag8/sy9 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" A connecting chardev object has an additional reference by the connecting thread, so if the chardev is still connecting by the end of the test, then the chardev object won't be freed. This in turn means that the yank instance won't be unregistered and when running the next test-case yank_register_instance will abort, because the yank instance is already/still registered. Signed-off-by: Lukas Straub Reviewed-by: Daniel P. Berrang=C3=A9 --- tests/test-char.c | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test-char.c b/tests/test-char.c index d35cc839bc..2ced07de69 100644 --- a/tests/test-char.c +++ b/tests/test-char.c @@ -937,6 +937,7 @@ static void char_socket_client_dupid_test(gconstpointer= opaque) g_assert_nonnull(opts); chr1 =3D qemu_chr_new_from_opts(opts, NULL, &error_abort); g_assert_nonnull(chr1); + qemu_chr_wait_connected(chr1, &error_abort); chr2 =3D qemu_chr_new_from_opts(opts, NULL, &local_err); g_assert_null(chr2); -- 2.20.1 --Sig_/SyW1wVCwxX5bhE85ag8/sy9 Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAl9OETUACgkQNasLKJxd slgYoBAAgrlkduKYqkrzRw/lwpuqroimrFPAjEAl0aLrA6QBHePtYtS4r67iULwv oR+pVUOaBn+LpEyOb3hNuBlNzqxHXtMbMMNk0tVlXotS6KAKfZN1Q9PPn4RFn1hQ cqertEZnZFqRKyApzMckyJ47V7pi47a7/ikan7mf6v9/XJKpgLK2p3TxvTZ2JhHu ITnhPmWEC1488abRm8Bee66a4Yidiia2CbtWbPBY6JGzrUhZI125qTkA11N6m8sn 1/HrsmMBH9NHqpoozCvePg1OKCKHs3FGsS5aJFIpm8ZJa0ouoTHdh8VpOfZ8fAFi C1uCf7mBbwjXuM5oftRkE/2Tr1tXPc6dnydCRi39Wdaogemex1cAE6v/eFYxn/te Pwai21HADMyTbk4fRx6Hn5+qN+sgSInqoddJo2Z0OSatXvo83GXc8X1/tngXkm9p 1x/2w70ntd+moMXIqp9Q39LLbY2ZavQ762V2YsC5Y8OP3F1pNgAOnQvR07yPUtON CLBnruodpE0aSIBs/ep10q8MMZM1Ec3vU5/sdzOM0+7cH3ydve6Hwpzg5W2HbGCG /rfpRGutRDFCQfktOBmXEXNm5kxSsYZQgMQeov5yiy+eciqyjzQy+6PkVWDGzQ6/ VwcjlKrctUHZLYvH+QRytcHCjYMdhuBq8o3g0gcrujiO8NZoIPg= =FpIY -----END PGP SIGNATURE----- --Sig_/SyW1wVCwxX5bhE85ag8/sy9--