From nobody Fri Dec 19 16:05:19 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1744268361; cv=none; d=zohomail.com; s=zohoarc; b=oJS3d3pbDnasMIKx2vbizndF6vIfubgt6qM68cLoqzwy2tOHpsZv9IAY0DSxQcdJ6du2O6K+yAkDQTDF4aVBBkww1vhvGtc+iolu5Qt4m51mvrxlSOXelA3qzv1ZwIJrkEzufHKQEChjAouyc+Cl46cSlJE6KY6DcPdKopP8VYA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1744268361; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id; bh=y0PyJNYnyK92lOlg9b+INNVRddyc3Z8IxyqzVxA/hM0=; b=DblYINsuE7Zel5uaeXNqDStpoh59WFzLyb+aRIXwG+6VrAfTSnoaCm8v8ezk1mh7Z8CtcXXeLv8Bof452KwnjfNiJPNhdr/1FxPHMkD6xhlvtAUmDeB5yfeg809e508UIT9t3QvjqEPWDHf1SvzqLpGIFrYw0qw+BeN9R5pPhFQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1744268361318410.48828174733205; Wed, 9 Apr 2025 23:59:21 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id B28611747; Thu, 10 Apr 2025 02:59:20 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 2EB28173A; Thu, 10 Apr 2025 02:58:40 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id AEF8D1594; Thu, 10 Apr 2025 02:58:35 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 3C1341239 for ; Thu, 10 Apr 2025 02:58:35 -0400 (EDT) Received: from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-498-eaW6kQJ8MkCbqQb99LPtkQ-1; Thu, 10 Apr 2025 02:58:33 -0400 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 7DD231954B33 for ; Thu, 10 Apr 2025 06:58:32 +0000 (UTC) Received: from vhost3.router.laine.org (unknown [10.22.64.128]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id BA28D18009BC; Thu, 10 Apr 2025 06:58:31 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1744268315; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=lOiFaNuP73UBvGbqWT8qG79y22E9F4VW6Up3vKhRpVg=; b=Y5nzaWdDqfW0oxn59BLnsuqe8tIPM9SIlZ6EORqECNmTPBrXNTgpQYEIu8m/JCpvoexhTl Oy7x4sWW7U9UBMXY2Or5WCc94a66Ps6qcHrZBKtbpoc/Qbytd1KSFF+WP+iLNEqmSrCX+V JivN+FAou1vDxJMElx5W+rbWlVTyGDo= X-MC-Unique: eaW6kQJ8MkCbqQb99LPtkQ-1 X-Mimecast-MFC-AGG-ID: eaW6kQJ8MkCbqQb99LPtkQ_1744268312 To: devel@lists.libvirt.org Subject: [PATCH 1/5] qemu: remove nonsensical sanity check in processNetdevStreamDisconnectedEvent() Date: Thu, 10 Apr 2025 02:58:26 -0400 Message-ID: <20250410065830.380720-2-laine@redhat.com> In-Reply-To: <20250410065830.380720-1-laine@redhat.com> References: <20250410065830.380720-1-laine@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: jc9-Ln9wRCAYcAKxMumFCQwb1NQwAX-u3B5Go28Mz9M_1744268312 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 3MS7MDKCYM7GTIFKRIGRWJ57PIPEW5ML X-Message-ID-Hash: 3MS7MDKCYM7GTIFKRIGRWJ57PIPEW5ML X-MailFrom: laine@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: Laurent Vivier , Stefano Brivio X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Laine Stump via Devel Reply-To: Laine Stump X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1744268361826019000 Content-Type: text/plain; charset="utf-8"; x-default="true" By definition QEMU will never send a NETDEV_STREAM_DISCONNECTED event if it doesn't support the reconnect option for a stream netdev (and even if, by some comedy of errors, it did send NETDEV_STREAM_DISCONNECTED in that case, our response to the event doesn't request anything at all of QEMU (much less something that would fail if QEMU didn't understand NETDEV_STREAM_DISCONNETED) - it just starts a new passt process to replace the one that has just been terminated, so we don't need to check the QEMU capabilities for QEMU_CAPS_NETDEV_STREAM_RECONNECT. Signed-off-by: Laine Stump Reviewed-by: Jiri Denemark Reviewed-by: Michal Privoznik --- src/qemu/qemu_driver.c | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 6ce949dd07..411cf79317 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -3612,7 +3612,6 @@ processNetdevStreamDisconnectedEvent(virDomainObj *vm, { virDomainDeviceDef dev; virDomainNetDef *def; - virQEMUCaps *qemuCaps =3D QEMU_DOMAIN_PRIVATE(vm)->qemuCaps; const char *devAlias =3D STRSKIP(netdevId, "host"); =20 /* The event sends us the "netdev-id", but we don't store the @@ -3658,12 +3657,6 @@ processNetdevStreamDisconnectedEvent(virDomainObj *v= m, goto endjob; } =20 - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_NETDEV_STREAM_RECONNECT)) { - VIR_WARN("ignore NETDEV_STREAM_DISCONNECTED event for passt networ= k device %s in domain %s - QEMU binary does not support reconnect", - def->info.alias, vm->def->name); - goto endjob; - } - /* handle the event - restart the passt process with its original * parameters */ --=20 2.49.0 From nobody Fri Dec 19 16:05:19 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1744268384; cv=none; d=zohomail.com; s=zohoarc; b=Uzk3cNkj4DlxtCyb68mYpqfVM9+XQHG1JRi3uYLtq1zfz1bEP7ywr51TzD03ewhmg2HeR5KroXrNzi1CfaaN+/XT4WHC5zzeRFTtT94g/jALkmPQJlZPu8u/HfDP9w0utZuKOksV4XCdMAvIrz8OjCSvylRNp9SkZRJoTnym6lU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1744268384; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id; bh=vKGCjEL9DAgwaktc7VgqRHum8pRIrZ5wMkec4IrsOz8=; b=iVOh3DGXvz62cELuhiuxKWlgLDWUbgntsSjI/SO1Qz80vX6KV8Enj54NAI4kZef4qtsecHdjcmKHmT8pQj4q48XSeWf7F49wqlQk+iMX++PBJ1T8AamdPzWgI3Cpg1vMtr2Pm+PGHaw0ta19Xx9h48sE52zBztPDv9IRFDRqXvc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1744268384965672.6166130845281; Wed, 9 Apr 2025 23:59:44 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 01A141794; Thu, 10 Apr 2025 02:59:43 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id EBFA617AC; Thu, 10 Apr 2025 02:58:42 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 3E0271595; Thu, 10 Apr 2025 02:58:36 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id C16BA1239 for ; Thu, 10 Apr 2025 02:58:35 -0400 (EDT) Received: from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-259--IJ1LtquNYeL_DRw0eGa1Q-1; Thu, 10 Apr 2025 02:58:34 -0400 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 4BA851954B36 for ; Thu, 10 Apr 2025 06:58:33 +0000 (UTC) Received: from vhost3.router.laine.org (unknown [10.22.64.128]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id AEFE6180175D; Thu, 10 Apr 2025 06:58:32 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1744268315; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=rOw2sKGFRLYLMaKmsA0HtbNLyvwDXCEScgRS1fEtONA=; b=KM04L4eyy95UHoXAO3FdCpCF+DYyNU7tLOB6E27J+z6ARK5nyd8nd3ERj1q/T+wZuNvweQ rYBkc3pQcEHO8y3Npcdt1mICitsbASGoY3pPDwMLiLFbC5ifjWaHeI3GuOYF2gc69upVsw k63cnPgGYoDZ33xZ+s5junRLnZt5vc4= X-MC-Unique: -IJ1LtquNYeL_DRw0eGa1Q-1 X-Mimecast-MFC-AGG-ID: -IJ1LtquNYeL_DRw0eGa1Q_1744268313 To: devel@lists.libvirt.org Subject: [PATCH 2/5] qemu: make processNetDevStreamDisconnectedEvent() reusable Date: Thu, 10 Apr 2025 02:58:27 -0400 Message-ID: <20250410065830.380720-3-laine@redhat.com> In-Reply-To: <20250410065830.380720-1-laine@redhat.com> References: <20250410065830.380720-1-laine@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: Z768PmheI6qtwi6CCkLQ_nkYxn7pX7VabPhKC_czbsU_1744268313 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: W2MR7ZYGT2LESR4MKUV7HPKGPUXZSLMM X-Message-ID-Hash: W2MR7ZYGT2LESR4MKUV7HPKGPUXZSLMM X-MailFrom: laine@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: Laurent Vivier , Stefano Brivio X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Laine Stump via Devel Reply-To: Laine Stump X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1744268387954019100 Content-Type: text/plain; charset="utf-8"; x-default="true" We will be adding a new event whose response will be *exactly* the same as the response to NETDEV_STREAM_DISCONNECTED. Rather than doing a copy-paste of the complete function that does the processing, turn that function into something more generic that takes the name of the event as an arg (the event name is only used in log messages). Signed-off-by: Laine Stump Reviewed-by: Jiri Denemark Reviewed-by: Michal Privoznik --- src/qemu/qemu_driver.c | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 411cf79317..f4b4d01d6c 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -3607,8 +3607,9 @@ processDeviceDeletedEvent(virQEMUDriver *driver, =20 =20 static void -processNetdevStreamDisconnectedEvent(virDomainObj *vm, - const char *netdevId) +processNetdevDisconnectedEvent(virDomainObj *vm, + const char *netdevId, + const char *eventName) { virDomainDeviceDef dev; virDomainNetDef *def; @@ -3623,13 +3624,13 @@ processNetdevStreamDisconnectedEvent(virDomainObj *= vm, */ =20 if (!devAlias) { - VIR_WARN("Received NETDEV_STREAM_DISCONNECTED event for unrecogniz= ed netdev %s from domain %p %s", - netdevId, vm, vm->def->name); + VIR_WARN("Received %s event for unrecognized netdev %s from domain= %p %s", + eventName, netdevId, vm, vm->def->name); return; } =20 - VIR_DEBUG("Received NETDEV_STREAM_DISCONNECTED event for device %s fro= m domain %p %s", - devAlias, vm, vm->def->name); + VIR_DEBUG("Received %s event for device %s from domain %p %s", + eventName, devAlias, vm, vm->def->name); =20 if (virDomainObjBeginJob(vm, VIR_JOB_QUERY) < 0) return; @@ -3640,28 +3641,28 @@ processNetdevStreamDisconnectedEvent(virDomainObj *= vm, } =20 if (virDomainDefFindDevice(vm->def, devAlias, &dev, true) < 0) { - VIR_WARN("NETDEV_STREAM_DISCONNECTED event received for non-existe= nt device %s in domain %s", - devAlias, vm->def->name); + VIR_WARN("%s event received for non-existent device %s in domain %= s", + eventName, devAlias, vm->def->name); goto endjob; } if (dev.type !=3D VIR_DOMAIN_DEVICE_NET) { - VIR_WARN("NETDEV_STREAM_DISCONNECTED event received for non-networ= k device %s in domain %s", - devAlias, vm->def->name); + VIR_WARN("%s event received for non-network device %s in domain %s= ", + eventName, devAlias, vm->def->name); goto endjob; } def =3D dev.data.net; =20 if (def->backend.type !=3D VIR_DOMAIN_NET_BACKEND_PASST) { - VIR_DEBUG("ignore NETDEV_STREAM_DISCONNECTED event for non-passt n= etwork device %s in domain %s", - def->info.alias, vm->def->name); + VIR_DEBUG("ignore %s event for non-passt network device %s in doma= in %s", + eventName, def->info.alias, vm->def->name); goto endjob; } =20 /* handle the event - restart the passt process with its original * parameters */ - VIR_DEBUG("process NETDEV_STREAM_DISCONNECTED event for network device= %s in domain %s", - def->info.alias, vm->def->name); + VIR_DEBUG("process %s event for network device %s in domain %s", + eventName, def->info.alias, vm->def->name); =20 if (qemuPasstStart(vm, def) < 0) goto endjob; @@ -3671,6 +3672,14 @@ processNetdevStreamDisconnectedEvent(virDomainObj *v= m, } =20 =20 +static void +processNetdevStreamDisconnectedEvent(virDomainObj *vm, + const char *netdevId) +{ + processNetdevDisconnectedEvent(vm, netdevId, "NETDEV_STREAM_DISCONNECT= ED"); +} + + static void processNicRxFilterChangedEvent(virQEMUDriver *driver, virDomainObj *vm, --=20 2.49.0 From nobody Fri Dec 19 16:05:19 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1744268413; cv=none; d=zohomail.com; s=zohoarc; b=Z2OjJSsjWMYB29EA8+zHbjZGcHrmoFyQeYQxNTHxuWZ8ka4VH4yIgSjLXsdk7gbkWhrP3DJp8I9WJsatnnmihDOWD1JLhkBV3sT6V9twSSOz+5MXnyogXmb5dRNv9nEYvcdy71A4rTFy7uRMJQiC7zhQt7KLbbMAcqFOflAi6VQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1744268413; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id; bh=VBKeHsR9tf/CF1M+Uv/H9HwQC4+s/eixU3nfKpp/jow=; b=K5PtDx+53v4vi9JirCfJobevIe8iaMrOAa0NoHoOz2iNtAyQifDadde1Ln2qxZ9U5V7CMzm8EGQVU+A0LerZV1R3fktRCRaioYhR2x8JZlHsg2Uq6xRIeGBg+t7VTzJ7gjieVRcXQ6qWe9mu6cbwOFUEBjWiUJwYDR7xkjF2n6g= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1744268413837119.93981871014228; Thu, 10 Apr 2025 00:00:13 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id DFC2F1757; Thu, 10 Apr 2025 03:00:12 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id C392B174C; Thu, 10 Apr 2025 02:58:45 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id B743C1239; Thu, 10 Apr 2025 02:58:37 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id F227A1239 for ; Thu, 10 Apr 2025 02:58:36 -0400 (EDT) Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-327-B2eREWJKNbu1a1QJCxWF4w-1; Thu, 10 Apr 2025 02:58:35 -0400 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 3D2171800263 for ; Thu, 10 Apr 2025 06:58:34 +0000 (UTC) Received: from vhost3.router.laine.org (unknown [10.22.64.128]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 7E47E180175D; Thu, 10 Apr 2025 06:58:33 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1744268316; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=QiqdvIR7G9ThSkmGZfRxVu911QixFLkopQvUO4Tv9W8=; b=eQCUUEcYLQZ9AwQA24QRJjpt2HzmmjCNFIv8+F+MAMqPIeJg9f4ncnulpjPF0YC33ehYLs g+rJ/gBXiWySa5V/zk4qpRgLfUGy+S1B6zzTeLgaaDfnbF5WxViPBpnZSITetlw7hI2dXY c81S3owyh2of2r7UveWErWlNALI3WBE= X-MC-Unique: B2eREWJKNbu1a1QJCxWF4w-1 X-Mimecast-MFC-AGG-ID: B2eREWJKNbu1a1QJCxWF4w_1744268314 To: devel@lists.libvirt.org Subject: [PATCH 3/5] qemu: respond to NETDEV_VHOST_USER_DISCONNECTED event Date: Thu, 10 Apr 2025 02:58:28 -0400 Message-ID: <20250410065830.380720-4-laine@redhat.com> In-Reply-To: <20250410065830.380720-1-laine@redhat.com> References: <20250410065830.380720-1-laine@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: xGGuS9udZxKfaW0QKLniE7MxlPDXQikP7B02rx4Wl90_1744268314 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: OF6SQSOAV4EUGY4FLIRDMCAKRPD5LRE6 X-Message-ID-Hash: OF6SQSOAV4EUGY4FLIRDMCAKRPD5LRE6 X-MailFrom: laine@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: Laurent Vivier , Stefano Brivio X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Laine Stump via Devel Reply-To: Laine Stump X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1744268417208019100 Content-Type: text/plain; charset="utf-8"; x-default="true" This response to this event is identical to NETDEV_STREAM_DISCONNECTED (start a new passt process to replace the one that just disappeared - see commitf62ce81b8a5), except that the new passt process will have "--vhost-user" appended to the commandline. Fortunately that difference is already handled based on the virDomainNetDef contents, so we can, in fact, respond to the new event in exactly the same manner. Signed-off-by: Laine Stump Reviewed-by: Jiri Denemark Reviewed-by: Michal Privoznik --- src/qemu/qemu_domain.c | 1 + src/qemu/qemu_domain.h | 1 + src/qemu/qemu_driver.c | 11 +++++++++++ src/qemu/qemu_monitor.c | 11 +++++++++++ src/qemu/qemu_monitor.h | 6 ++++++ src/qemu/qemu_monitor_json.c | 16 ++++++++++++++++ src/qemu/qemu_process.c | 18 ++++++++++++++++++ 7 files changed, 64 insertions(+) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index c3ca4b3040..d4bcc581b0 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -10087,6 +10087,7 @@ qemuProcessEventFree(struct qemuProcessEvent *event) case QEMU_PROCESS_EVENT_WATCHDOG: case QEMU_PROCESS_EVENT_DEVICE_DELETED: case QEMU_PROCESS_EVENT_NETDEV_STREAM_DISCONNECTED: + case QEMU_PROCESS_EVENT_NETDEV_VHOST_USER_DISCONNECTED: case QEMU_PROCESS_EVENT_NIC_RX_FILTER_CHANGED: case QEMU_PROCESS_EVENT_SERIAL_CHANGED: case QEMU_PROCESS_EVENT_GUEST_CRASHLOADED: diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index 70e1fb187f..787f1464aa 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -469,6 +469,7 @@ typedef enum { QEMU_PROCESS_EVENT_GUESTPANIC, QEMU_PROCESS_EVENT_DEVICE_DELETED, QEMU_PROCESS_EVENT_NETDEV_STREAM_DISCONNECTED, + QEMU_PROCESS_EVENT_NETDEV_VHOST_USER_DISCONNECTED, QEMU_PROCESS_EVENT_NIC_RX_FILTER_CHANGED, QEMU_PROCESS_EVENT_SERIAL_CHANGED, QEMU_PROCESS_EVENT_JOB_STATUS_CHANGE, diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index f4b4d01d6c..ef3f1d3763 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -3680,6 +3680,14 @@ processNetdevStreamDisconnectedEvent(virDomainObj *v= m, } =20 =20 +static void +processNetdevVhostUserDisconnectedEvent(virDomainObj *vm, + const char *netdevId) +{ + processNetdevDisconnectedEvent(vm, netdevId, "NETDEV_VHOST_USER_DISCON= NECTED"); +} + + static void processNicRxFilterChangedEvent(virQEMUDriver *driver, virDomainObj *vm, @@ -4078,6 +4086,9 @@ static void qemuProcessEventHandler(void *data, void = *opaque) case QEMU_PROCESS_EVENT_NETDEV_STREAM_DISCONNECTED: processNetdevStreamDisconnectedEvent(vm, processEvent->data); break; + case QEMU_PROCESS_EVENT_NETDEV_VHOST_USER_DISCONNECTED: + processNetdevVhostUserDisconnectedEvent(vm, processEvent->data); + break; case QEMU_PROCESS_EVENT_NIC_RX_FILTER_CHANGED: processNicRxFilterChangedEvent(driver, vm, processEvent->data); break; diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 8262e3a8b2..981975cdd2 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -1264,6 +1264,17 @@ qemuMonitorEmitNetdevStreamDisconnected(qemuMonitor = *mon, } =20 =20 +void +qemuMonitorEmitNetdevVhostUserDisconnected(qemuMonitor *mon, + const char *devAlias) +{ + VIR_DEBUG("mon=3D%p", mon); + + QEMU_MONITOR_CALLBACK(mon, domainNetdevVhostUserDisconnected, + mon->vm, devAlias); +} + + void qemuMonitorEmitSerialChange(qemuMonitor *mon, const char *devAlias, diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 4acf50a166..8d49ada114 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -255,6 +255,9 @@ typedef void (*qemuMonitorDomainDeviceUnplugErrCallback= )(qemuMonitor *mon, typedef void (*qemuMonitorDomainNetdevStreamDisconnectedCallback)(qemuMoni= tor *mon, virDomai= nObj *vm, const ch= ar *devAlias); +typedef void (*qemuMonitorDomainNetdevVhostUserDisconnectedCallback)(qemuM= onitor *mon, + virDo= mainObj *vm, + const= char *devAlias); typedef void (*qemuMonitorDomainNicRxFilterChangedCallback)(qemuMonitor *m= on, virDomainObj *= vm, const char *de= vAlias); @@ -403,6 +406,7 @@ struct _qemuMonitorCallbacks { qemuMonitorDomainMemoryDeviceSizeChange domainMemoryDeviceSizeChange; qemuMonitorDomainDeviceUnplugErrCallback domainDeviceUnplugError; qemuMonitorDomainNetdevStreamDisconnectedCallback domainNetdevStreamDi= sconnected; + qemuMonitorDomainNetdevVhostUserDisconnectedCallback domainNetdevVhost= UserDisconnected; }; =20 qemuMonitor *qemuMonitorOpen(virDomainObj *vm, @@ -490,6 +494,8 @@ void qemuMonitorEmitDeviceUnplugErr(qemuMonitor *mon, const char *devAlias); void qemuMonitorEmitNetdevStreamDisconnected(qemuMonitor *mon, const char *devAlias); +void qemuMonitorEmitNetdevVhostUserDisconnected(qemuMonitor *mon, + const char *devAlias); void qemuMonitorEmitNicRxFilterChanged(qemuMonitor *mon, const char *devAlias); void qemuMonitorEmitSerialChange(qemuMonitor *mon, diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 6fa301577d..dc2eaace96 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -85,6 +85,7 @@ static void qemuMonitorJSONHandleMemoryFailure(qemuMonito= r *mon, virJSONValue *d static void qemuMonitorJSONHandleMemoryDeviceSizeChange(qemuMonitor *mon, = virJSONValue *data); static void qemuMonitorJSONHandleDeviceUnplugErr(qemuMonitor *mon, virJSON= Value *data); static void qemuMonitorJSONHandleNetdevStreamDisconnected(qemuMonitor *mon= , virJSONValue *data); +static void qemuMonitorJSONHandleNetdevVhostUserDisconnected(qemuMonitor *= mon, virJSONValue *data); =20 typedef struct { const char *type; @@ -108,6 +109,7 @@ static qemuEventHandler eventHandlers[] =3D { { "MIGRATION", qemuMonitorJSONHandleMigrationStatus, }, { "MIGRATION_PASS", qemuMonitorJSONHandleMigrationPass, }, { "NETDEV_STREAM_DISCONNECTED", qemuMonitorJSONHandleNetdevStreamDisco= nnected, }, + { "NETDEV_VHOST_USER_DISCONNECTED", qemuMonitorJSONHandleNetdevVhostUs= erDisconnected, }, { "NIC_RX_FILTER_CHANGED", qemuMonitorJSONHandleNicRxFilterChanged, }, { "PR_MANAGER_STATUS_CHANGED", qemuMonitorJSONHandlePRManagerStatusCha= nged, }, { "RDMA_GID_STATUS_CHANGED", qemuMonitorJSONHandleRdmaGidStatusChanged= , }, @@ -1044,6 +1046,20 @@ qemuMonitorJSONHandleNetdevStreamDisconnected(qemuMo= nitor *mon, virJSONValue *da } =20 =20 +static void +qemuMonitorJSONHandleNetdevVhostUserDisconnected(qemuMonitor *mon, virJSON= Value *data) +{ + const char *name; + + if (!(name =3D virJSONValueObjectGetString(data, "netdev-id"))) { + VIR_WARN("missing device in NETDEV_VHOST_USER_DISCONNECTED event"); + return; + } + + qemuMonitorEmitNetdevVhostUserDisconnected(mon, name); +} + + static void qemuMonitorJSONHandleNicRxFilterChanged(qemuMonitor *mon, virJSONValue *da= ta) { diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 015a98d035..ae5349fd30 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -1402,6 +1402,23 @@ qemuProcessHandleNetdevStreamDisconnected(qemuMonito= r *mon G_GNUC_UNUSED, } =20 =20 +static void +qemuProcessHandleNetdevVhostUserDisconnected(qemuMonitor *mon G_GNUC_UNUSE= D, + virDomainObj *vm, + const char *devAlias) +{ + virObjectLock(vm); + + VIR_DEBUG("Device %s Netdev vhost-user Disconnected in domain %p %s", + devAlias, vm, vm->def->name); + + qemuProcessEventSubmit(vm, QEMU_PROCESS_EVENT_NETDEV_VHOST_USER_DISCON= NECTED, + 0, 0, g_strdup(devAlias)); + + virObjectUnlock(vm); +} + + static void qemuProcessHandleNicRxFilterChanged(qemuMonitor *mon G_GNUC_UNUSED, virDomainObj *vm, @@ -1848,6 +1865,7 @@ static qemuMonitorCallbacks monitorCallbacks =3D { .domainMemoryDeviceSizeChange =3D qemuProcessHandleMemoryDeviceSizeCha= nge, .domainDeviceUnplugError =3D qemuProcessHandleDeviceUnplugErr, .domainNetdevStreamDisconnected =3D qemuProcessHandleNetdevStreamDisco= nnected, + .domainNetdevVhostUserDisconnected =3D qemuProcessHandleNetdevVhostUse= rDisconnected, }; =20 static void --=20 2.49.0 From nobody Fri Dec 19 16:05:19 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1744268434; cv=none; d=zohomail.com; s=zohoarc; b=Gj6ZcmuPvfabWTSSnYgx3naVs6ispeMaxEv9k1nk0BpWhJiZDCz3cA8xesnDACSjUQ+kJ7kpGB7GmUdr2mMqGttsZxNaBBW+2jbDYFjNW1SvWxoGthWECmhqY0bq/lqiJZksrNiYcWEd6yDm3DC7Vbd2+LK1D4zIv2U0iWYzn+A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1744268434; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id; bh=0QGdUayrQYtvVFdLuHDJeaLVblf+cKS4lT2btm0kgH0=; b=ERDGo8NlhYJVsdztcs2r/oo8qAPeddJdkLTcJuVAeH20PKCk37hCcHPlTYoF0GsYUrHu39Xaemre2rVWeVGplnZ036U0ZiSkdAuL8MTvo/7lzvh/OD0FRJTnKzK0Azl73tm0DoOWgr703tSnD/Z2cRTKmTkw4CUKABuSdSY9kT8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1744268434898380.86182500785014; Thu, 10 Apr 2025 00:00:34 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 506471784; Thu, 10 Apr 2025 03:00:34 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 7BD9B15A3; Thu, 10 Apr 2025 02:58:48 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 569431595; Thu, 10 Apr 2025 02:58:38 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id D3DBE1239 for ; Thu, 10 Apr 2025 02:58:37 -0400 (EDT) Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-502-45Q-7bB3M02nUQt3MV9p6w-1; Thu, 10 Apr 2025 02:58:35 -0400 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 0BFCA180025A for ; Thu, 10 Apr 2025 06:58:35 +0000 (UTC) Received: from vhost3.router.laine.org (unknown [10.22.64.128]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 7113D18009BC; Thu, 10 Apr 2025 06:58:34 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1744268317; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=AIGPIO2ezcJFxASizu5nO9yvKWBHa8O541ayeWZRSvI=; b=b6DXXGcVZnYjoSXtMciHTJM92jsgs9v2bypQix2X+2ekpoT0sM4ceQd7z1JkgMHEIwhjEn /RuJs4SnuKYVLXuM82uh2Kiz/juvewnAOUNGMRV1jNMF88FijKQWhdDsvuKdiAdSq0pJSL zgZ8nHFDo1frlhe/NABc5tAxTAHQJsU= X-MC-Unique: 45Q-7bB3M02nUQt3MV9p6w-1 X-Mimecast-MFC-AGG-ID: 45Q-7bB3M02nUQt3MV9p6w_1744268315 To: devel@lists.libvirt.org Subject: [PATCH 4/5] qemu: put vhost-user code that's special for passt in a helper function Date: Thu, 10 Apr 2025 02:58:29 -0400 Message-ID: <20250410065830.380720-5-laine@redhat.com> In-Reply-To: <20250410065830.380720-1-laine@redhat.com> References: <20250410065830.380720-1-laine@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: P-1p0j7j6awNdfuc6LqgP_AmAc60Yjda_FMwxbfFYE0_1744268315 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: KCE5D5XUKACMA7736KR25JKTQDV3CFVR X-Message-ID-Hash: KCE5D5XUKACMA7736KR25JKTQDV3CFVR X-MailFrom: laine@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: Laurent Vivier , Stefano Brivio X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Laine Stump via Devel Reply-To: Laine Stump X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1744268436251019000 Content-Type: text/plain; charset="utf-8"; x-default="true" Rather than duplicating these two lines of chr device object setup for hotplug and domain start, put them in a helper function that's called from both places. That way when we need to setup *more* stuff specific to passt+vhostuser, we can just add it in that one place. Signed-off-by: Laine Stump Reviewed-by: Jiri Denemark Reviewed-by: Michal Privoznik --- src/qemu/qemu_hotplug.c | 7 +------ src/qemu/qemu_passt.c | 19 +++++++++++++++++++ src/qemu/qemu_passt.h | 3 +++ src/qemu/qemu_process.c | 9 ++------- 4 files changed, 25 insertions(+), 13 deletions(-) diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 9977662a2c..4562a75d2a 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -1268,12 +1268,7 @@ qemuDomainAttachNetDevice(virQEMUDriver *driver, =20 if (net->backend.type =3D=3D VIR_DOMAIN_NET_BACKEND_PASST) { =20 - /* vhostuser needs socket path in this location, and when - * backend is passt, the path is derived from other info, - * not taken from config. - */ - g_free(net->data.vhostuser->data.nix.path); - net->data.vhostuser->data.nix.path =3D qemuPasstCreateSocketPa= th(vm, net); + qemuPasstPrepareVhostUser(vm, net); =20 if (qemuPasstStart(vm, net) < 0) goto cleanup; diff --git a/src/qemu/qemu_passt.c b/src/qemu/qemu_passt.c index b9616d1c63..bc495eca1e 100644 --- a/src/qemu/qemu_passt.c +++ b/src/qemu/qemu_passt.c @@ -165,6 +165,25 @@ qemuPasstSetupCgroup(virDomainObj *vm, } =20 =20 +void +qemuPasstPrepareVhostUser(virDomainObj *vm, + virDomainNetDef *net) +{ + /* There are some options on the QEMU commandline for a vhost-user + * chr device that are normally configurable, but when it is passt + * speaking to the vhost-user device those things are + * derived/fixed. This function, which is called prior to + * generating the QEMU commandline, sets thos derived/fixed things + * in the chr device object. + */ + + /* The socket path is not user-configurable for passt - it is + * derived from other info + */ + g_free(net->data.vhostuser->data.nix.path); + net->data.vhostuser->data.nix.path =3D qemuPasstCreateSocketPath(vm, n= et); +} + int qemuPasstStart(virDomainObj *vm, virDomainNetDef *net) diff --git a/src/qemu/qemu_passt.h b/src/qemu/qemu_passt.h index e0b9aaac8d..ea545ccf38 100644 --- a/src/qemu/qemu_passt.h +++ b/src/qemu/qemu_passt.h @@ -37,5 +37,8 @@ int qemuPasstSetupCgroup(virDomainObj *vm, virDomainNetDef *net, virCgroup *cgroup); =20 +void qemuPasstPrepareVhostUser(virDomainObj *vm, + virDomainNetDef *net); + char *qemuPasstCreateSocketPath(virDomainObj *vm, virDomainNetDef *net); diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index ae5349fd30..ba54da62ba 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -6022,13 +6022,8 @@ qemuProcessPrepareDomainNetwork(virDomainObj *vm) =20 case VIR_DOMAIN_NET_TYPE_VHOSTUSER: if (net->backend.type =3D=3D VIR_DOMAIN_NET_BACKEND_PASST) { - /* when using the passt backend, the path of the - * unix socket is always derived from other info - * *not* manually given in the config, but all the - * vhostuser code looks for it there. - */ - g_free(net->data.vhostuser->data.nix.path); - net->data.vhostuser->data.nix.path =3D qemuPasstCreateSock= etPath(vm, net); + /* some extra setup of internal data for passt vhostuser m= ode */ + qemuPasstPrepareVhostUser(vm, net); } break; =20 --=20 2.49.0 From nobody Fri Dec 19 16:05:19 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1744268464; cv=none; d=zohomail.com; s=zohoarc; b=YhcOZGwxFv9qXqiTVM1jaZCMPvJGXFBG8NHUOYvReEek0LdZ9dy0TUggwJ0CiuYr9q2sF3CWbnvGEGlWXWnJ55xFLo2RU/r3IacyjFnHThtJ8fVWMJ3Sf0e6XX7QMYJT3oGBT5XBgA4X6VaCuMi41yxvcSm3GNJy366JFfVAw1k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1744268464; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id; bh=eO/NguLEqhRf2CvdBgGxsaheqOdE8yASzopPotPP558=; b=JaFjrhE25vrkvOqmswfPoahoVCgWT28UrascHhmq9GzMW5brS+rgncB6mHgMHSLtOzXnrw40uIFW1Qw5g3Wrqe7VjkNfp4OdCbqxyDEZ9+mUblk9qs3V0AjNNIiULAqPq8/WuoHqW2gc7mY1E7+ipBTQCABffvzyjUhfO1hNU+M= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1744268464040231.62782463676047; Thu, 10 Apr 2025 00:01:04 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 682EA1741; Thu, 10 Apr 2025 03:01:03 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id AD2B317CD; Thu, 10 Apr 2025 02:58:49 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 1B5121594; Thu, 10 Apr 2025 02:58:39 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 8FBBEA2D for ; Thu, 10 Apr 2025 02:58:38 -0400 (EDT) Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-683-5rTeYP-sO2WOhPWoHZ6w2Q-1; Thu, 10 Apr 2025 02:58:36 -0400 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id EF0681801A06 for ; Thu, 10 Apr 2025 06:58:35 +0000 (UTC) Received: from vhost3.router.laine.org (unknown [10.22.64.128]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 4764918009BC; Thu, 10 Apr 2025 06:58:35 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1744268318; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=7KYHH/m+yMkEACsfSZl+Ds3lumqPl7Q7auZkbT1Zy34=; b=D1TT4U/9eLEtz1qK0vYMoU+STQOiHXt/GfWYDGz3fKhTvoMNfDFuHbPaGvuqoOGWpKiTv+ carQM7O8TPWSfyyarcuP1NnQhnH5lKFW0IY3vQMUPHeNC/U4wSER1/SIER3zhtbBv6+mF6 NpNRMwRbX8GYVbM+kyNq1DNyqZDa7XI= X-MC-Unique: 5rTeYP-sO2WOhPWoHZ6w2Q-1 X-Mimecast-MFC-AGG-ID: 5rTeYP-sO2WOhPWoHZ6w2Q_1744268316 To: devel@lists.libvirt.org Subject: [PATCH 5/5] qemu: make passt+vhostuser reconnect behave identically to passt+user Date: Thu, 10 Apr 2025 02:58:30 -0400 Message-ID: <20250410065830.380720-6-laine@redhat.com> In-Reply-To: <20250410065830.380720-1-laine@redhat.com> References: <20250410065830.380720-1-laine@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: Ab_lrRiG9wdHiqXBqYaU4wxw7sxmia52-S6vN7qLszw_1744268316 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: GHJCATFBJR63KRP3LTWAKSWCTMUCWRAR X-Message-ID-Hash: GHJCATFBJR63KRP3LTWAKSWCTMUCWRAR X-MailFrom: laine@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: Laurent Vivier , Stefano Brivio X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Laine Stump via Devel Reply-To: Laine Stump X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1744268464275019000 Content-Type: text/plain; charset="utf-8"; x-default="true" When "original passt" support was added, we decided that we always wanted to reconnect (i.e. restart the passt process) if it was somehow terminated. Generic vhost-user only turns on reconnect if specified in the config, but there is no reason to require this if the other end of the vhost-user socket is a passt process - we know what has happened and what we want to do; no reason to make the default configuration "do the *wrong* thing". Resolves: https://issues.redhat.com/browse/RHEL-80169 Signed-off-by: Laine Stump Reviewed-by: Jiri Denemark Reviewed-by: Michal Privoznik --- src/qemu/qemu_passt.c | 6 ++++++ .../qemuxmlconfdata/net-vhostuser-passt.x86_64-latest.args | 6 +++--- .../schema-reorder-domain-subelements.x86_64-latest.args | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/qemu/qemu_passt.c b/src/qemu/qemu_passt.c index bc495eca1e..018630a5de 100644 --- a/src/qemu/qemu_passt.c +++ b/src/qemu/qemu_passt.c @@ -182,6 +182,12 @@ qemuPasstPrepareVhostUser(virDomainObj *vm, */ g_free(net->data.vhostuser->data.nix.path); net->data.vhostuser->data.nix.path =3D qemuPasstCreateSocketPath(vm, n= et); + + /* reconnect is always enabled, with timeout always at 5 seconds, when + * using passt + */ + net->data.vhostuser->data.nix.reconnect.enabled =3D VIR_TRISTATE_BOOL_= YES; + net->data.vhostuser->data.nix.reconnect.timeout =3D 5; } =20 int diff --git a/tests/qemuxmlconfdata/net-vhostuser-passt.x86_64-latest.args b= /tests/qemuxmlconfdata/net-vhostuser-passt.x86_64-latest.args index 7c030d7067..afbbe188cf 100644 --- a/tests/qemuxmlconfdata/net-vhostuser-passt.x86_64-latest.args +++ b/tests/qemuxmlconfdata/net-vhostuser-passt.x86_64-latest.args @@ -28,13 +28,13 @@ XDG_CONFIG_HOME=3D/var/lib/libvirt/qemu/domain--1-QEMUG= uest1/.config \ -boot strict=3Don \ -blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","no= de-name":"libvirt-1-storage","read-only":false}' \ -device '{"driver":"ide-hd","bus":"ide.0","unit":0,"drive":"libvirt-1-stor= age","id":"ide0-0-0","bootindex":1}' \ --chardev socket,id=3Dcharnet0,path=3D/var/run/libvirt/qemu/passt/-1-QEMUGu= est1-net0.socket \ +-chardev socket,id=3Dcharnet0,path=3D/var/run/libvirt/qemu/passt/-1-QEMUGu= est1-net0.socket,reconnect-ms=3D5000 \ -netdev '{"type":"vhost-user","chardev":"charnet0","id":"hostnet0"}' \ -device '{"driver":"virtio-net-pci","netdev":"hostnet0","id":"net0","mac":= "00:11:22:33:44:55","bus":"pci.0","addr":"0x2"}' \ --chardev socket,id=3Dcharnet1,path=3D/var/run/libvirt/qemu/passt/-1-QEMUGu= est1-net1.socket \ +-chardev socket,id=3Dcharnet1,path=3D/var/run/libvirt/qemu/passt/-1-QEMUGu= est1-net1.socket,reconnect-ms=3D5000 \ -netdev '{"type":"vhost-user","chardev":"charnet1","id":"hostnet1"}' \ -device '{"driver":"virtio-net-pci","netdev":"hostnet1","id":"net1","mac":= "00:11:22:33:44:11","bus":"pci.0","addr":"0x3"}' \ --chardev socket,id=3Dcharnet2,path=3D/var/run/libvirt/qemu/passt/-1-QEMUGu= est1-net2.socket \ +-chardev socket,id=3Dcharnet2,path=3D/var/run/libvirt/qemu/passt/-1-QEMUGu= est1-net2.socket,reconnect-ms=3D5000 \ -netdev '{"type":"vhost-user","chardev":"charnet2","id":"hostnet2"}' \ -device '{"driver":"virtio-net-pci","netdev":"hostnet2","id":"net2","mac":= "00:11:22:33:44:11","bus":"pci.0","addr":"0x4"}' \ -audiodev '{"id":"audio1","driver":"none"}' \ diff --git a/tests/qemuxmlconfdata/schema-reorder-domain-subelements.x86_64= -latest.args b/tests/qemuxmlconfdata/schema-reorder-domain-subelements.x86_= 64-latest.args index d27dd77d9f..76df9c30b0 100644 --- a/tests/qemuxmlconfdata/schema-reorder-domain-subelements.x86_64-latest= .args +++ b/tests/qemuxmlconfdata/schema-reorder-domain-subelements.x86_64-latest= .args @@ -29,7 +29,7 @@ XDG_CONFIG_HOME=3D/var/lib/libvirt/qemu/domain--1-passtvh= ostuu/.config \ -device '{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.0","addr":"0x1.0= x2"}' \ -blockdev '{"driver":"file","filename":"/home/laine/libvirt/images/fedora-= 34.img","node-name":"libvirt-1-storage","read-only":false}' \ -device '{"driver":"virtio-blk-pci","bus":"pci.0","multifunction":true,"ad= dr":"0x3","drive":"libvirt-1-storage","id":"virtio-disk0","bootindex":1}' \ --chardev socket,id=3Dcharnet0,path=3D/var/run/libvirt/qemu/passt/-1-passtv= hostuu-net0.socket \ +-chardev socket,id=3Dcharnet0,path=3D/var/run/libvirt/qemu/passt/-1-passtv= hostuu-net0.socket,reconnect-ms=3D5000 \ -netdev '{"type":"vhost-user","chardev":"charnet0","id":"hostnet0"}' \ -device '{"driver":"virtio-net-pci","netdev":"hostnet0","id":"net0","mac":= "52:54:00:21:de:6c","bus":"pci.0","addr":"0x2"}' \ -chardev pty,id=3Dcharserial0 \ --=20 2.49.0