From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301335; cv=none; d=zohomail.com; s=zohoarc; b=e3xgduZ/phSSNNOceAy4uIo6PPzi7reMccebBo5lOLfXftyVerWMH242Nx2weZ3bMhFzOudbGb9EAEa4h81iWkAGxt/RYQkZOOMnonjMUkprPboORalAJxNyp8RCRZRLXh3h9Ls3Wb2mMBH/T0v8OPTFmPPk+te67ECxwXDB5Io= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301335; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Rwvm0heZz3R0LqIqZgisrHF0J2mZ0hz0l/+i0BlB8Uc=; b=AoIefA9ceBFXrf0LuJAKsQnbdii8j0b6sMYU448t2A7WPWz9ZpnJwUncNds4V28z7DZRzuJdBQ7uXLuj5VyuVdL1M5fsV0mqYxLDHrXTw4KDGP+xNQczWhlpRsLCdVRhXXuzj1bUlJHKOLt3G+7QBYKXdIDw0SDr7DtEu2By8Gw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782301335867118.60771971362954; Wed, 24 Jun 2026 04:42:15 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcLzF-0007YR-GU; Wed, 24 Jun 2026 07:41:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcLzE-0007YG-Ba for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:41:44 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcLzC-0007Xf-Vx for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:41:44 -0400 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-530-Hjf9siIxMRSIX_w-GjRrmA-1; Wed, 24 Jun 2026 07:41:40 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (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 77DEF195604F for ; Wed, 24 Jun 2026 11:41:39 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 60DCE1955F7A; Wed, 24 Jun 2026 11:41:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301302; 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=Rwvm0heZz3R0LqIqZgisrHF0J2mZ0hz0l/+i0BlB8Uc=; b=Gohphz5QFpDDkbKHcr3BaCsEuXEqq2P8EOJPRR6uO/YSACise7bc0h7m4vSMyjLVVjJrPL /OhTtkzgf190qNbhuDMOjrVr8Xk50xjdNcEOU+zqPkGMd6gSPhaWMrylGumVZQpdNH1QNk PoLhTcrBjQJ3ZjG0DB4XdWzmRuggWk0= X-MC-Unique: Hjf9siIxMRSIX_w-GjRrmA-1 X-Mimecast-MFC-AGG-ID: Hjf9siIxMRSIX_w-GjRrmA_1782301299 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:23 +0400 Subject: [GIT PULL 01/35] ui/gtk: fix bad widget realize on non-GFX VC MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-1-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=965; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=Lphq9o9GHi5BJsk5K9YAkkrWmRehPIkRbHAIo+f0RAM=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqO8Jm9vWMl3ly5O/1xbR71zKKLKj5Y8PaEeAEr u9oQ8nQnoWJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajvCZgAKCRDa6OEJdZac 5chrEACLG4RR0hTp9d9AL9KwnLpIx0blkT3Ax1bGxee0mplXmwKdMr+KJhkU5simyVBIkCN2P6J CiJchlB5t8b7O8FH5vBZrvZKVQTizlAmVD/q5YvUkBhRo1vgSsleFM59GUcDqSdBOUb/d8Rjm8C g/sS3o7w4nrHdTFFkg6Di17yvqvCckrjAUeZ7uWQjxqiL2y86DaSGYRRUEjxZlDfHl5KCv83gCY jfF4/GPp9gKPPeCvNArO8TqyLanl21kSCnJK/VYaHZ5VD7+H4OagVbAphgS7LUEjcAWoyAp6kG3 Bh1EmWlarz4aQ1JMag8Trju+zMbgG8DIex/x1aNPXDPSQvzkpXfBlZHOoevgBveH3haWdNaXaIR Om3kmLfsD+NGrnj70PzBWLi+2aGWMesHbz5S4iflD5pCYqtOBQcwQEqcMPuqGXjrCkDeiKvqd6n /L8XFRNfWFS1WscRJVHlnDrzeb8LZrfCR6CblTHoeenws1TNVm3VxKtbTQmJSdtZoylBB+lRlhK ja6O1oXL5qaOCKrI+ZQ5HuaIhsqxqiYjY1LhKOjxhL/0RjNY1wZUxdYFE4+nyXUaRq7e4TDm4wF eg0JGSWSp5ErPozEPtCu68vu33TNFvFRVtBPi+WPK8ldP7mR/UoeqDy/xDHCVjvdBiwCgZZF+L1 syo3fh0RMdiJojg== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301337285158500 The GTK VirtualConsole is a union, it may be .gfx or .vte depending on the type. Fixes: 565f85a9c2 ("ui/gtk: force realization of drawing area") Reviewed-by: Daniel P. Berrang=C3=A9 Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-1-4656aec3398d@redhat.com> --- ui/gtk.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ui/gtk.c b/ui/gtk.c index 4f706c6bbb2..2ee826b56fb 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -2585,7 +2585,9 @@ static void gtk_display_init(DisplayState *ds, Displa= yOptions *opts) if (!con) { break; } - gtk_widget_realize(s->vc[idx].gfx.drawing_area); + if (s->vc[idx].type =3D=3D GD_VC_GFX) { + gtk_widget_realize(s->vc[idx].gfx.drawing_area); + } } =20 if (opts->u.gtk.has_show_menubar && --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301334; cv=none; d=zohomail.com; s=zohoarc; b=Vra4qkNYPnN22tTXK2ThRtmvEidGGVDWzYIq48ljdzjc/btQrxVi8n2LL9tXVuwKqlKV/cjUcYRdBIsibR926hqqnTmgrHDo8yRd9wdV8r1+bxmc4EaTYu3IFvTe2qWil+bacgU69PEKiCTvExVjYMuNJ6D4kRzoEJH7fmvLeZQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301334; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=VzjEEK7YrNrTpbi8DZpcS5OFxDuUwPmVybCtxPdaqVU=; b=bb11hL5kWfa2x3/6FiyxVTy1tEpUZL+BTUOUHXw/5bHZ1SH/WRh4asztPBrkrJLoSAymCFq6pGZ8gKKfU34EGchAnrBAbUb5BuKlV682v5jtNkPrittBs4I1bGsLRPYcJm4a9fZb/3En9k5vsKEG5pYgPOSDGeagyTH9RpZ2big= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782301334218558.0027054429335; Wed, 24 Jun 2026 04:42:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcLzL-0007Z2-UW; Wed, 24 Jun 2026 07:41:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcLzJ-0007Yq-Qw for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:41:49 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcLzI-0007Yd-GG for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:41:49 -0400 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-88-D2tch5eGN4Cq5A5hmLkD5Q-1; Wed, 24 Jun 2026 07:41:46 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (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 8041719541A6 for ; Wed, 24 Jun 2026 11:41:45 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 595C5195609E; Wed, 24 Jun 2026 11:41:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301307; 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=VzjEEK7YrNrTpbi8DZpcS5OFxDuUwPmVybCtxPdaqVU=; b=TDXuFvQPqGjuGC6NJkxVh0uU4iebyLKBXQipTuPVCXEN1IN6pwuoWsP6viN8y78gvc+4AH TvyTua6tZCnTYF32mqXyMSFFbHdcSHTUQsHdqQ3mmOsP0SUu7FpbZFxwpCRKbFANXJ+Yci IFNrkFbe/C27V5N8ieZd8v2Bsn+u4Io= X-MC-Unique: D2tch5eGN4Cq5A5hmLkD5Q-1 X-Mimecast-MFC-AGG-ID: D2tch5eGN4Cq5A5hmLkD5Q_1782301305 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:24 +0400 Subject: [GIT PULL 02/35] build-sys: build with -fno-omit-frame-pointer with ASAN MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-2-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=954; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=OKyKdMZAB0kGR0TgfWSD965c5jqocjT92fK9QE/yKCQ=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqO8JmLu+nFk2LdGTD96sOdyby0XuGehjB7xMYf 1RaEHUNRCqJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajvCZgAKCRDa6OEJdZac 5UKMEACXfkCmeREoNKCF7uMx8PAXiPaZ0wsiHbQPrZmhZQVFm/GPo7oYnLjaK8qrUmEQo8v2V3Z GY5g0GDYLc9TP9JVbsBPQnkX3TpRwfaXwkdgJ8F4ijWLEJ1SwNw5Uw+paTGC1DKRHWGeDA3Iqbs oh5AzHWaYMSldbdgzkcdgqOS+/eTrcEgdmivvlSTUSV8W5+k6cqUJ21pJd9+xWVMUov8FGN2zf3 cyTZZvAmkZTdbsX8re38dCSK+hbJ1ziiIwzNsZZyTiti37ZYTCk+udiD5hNtI6lLRdOHM7ji2Al 1lT8zIDJVTG/sUYGceFodD1GlOFyjYMMIfvnRlqEeFYMUTB0n5xP1NtKOBizkOYGePMvFBwGn8l 0e6RcaSRk1IFHfu5I60IKCWH2lMmNJWZ6YO9wsFjWs9+ZDN7LelwI07Q4MBGxd0JmUS5kx7j76o M+wK2WK1IOmuy1HajaQUI0KUsoqpn4NHeh9d7ZTII/DI2ZgrUkA8LxknPyMj40xH4+TepDpmZDK nEpLY7vfFBej7sz/wUIBbKyBV+kkFDCrL/60FRZZi4MKQquLcUKjZ5JFPQMTgYYs9CEo/bS+Erj rXkzTS8GiXYxJdhjbhiJ8V5foxVXBn+LXyweJX4z044iOwx37429ZUEfNSaMQg4eiEYaI9LtdYO rPDbBOSI1//xbdQ== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301335785158500 On fc44, LSan fails to suppress leak:qemu_irq_intercept_in, because the backtrace isn't deep enough. Reviewed-by: Daniel P. Berrang=C3=A9 Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-2-4656aec3398d@redhat.com> --- meson.build | 2 ++ 1 file changed, 2 insertions(+) diff --git a/meson.build b/meson.build index e026851309e..0d1df06ccc8 100644 --- a/meson.build +++ b/meson.build @@ -545,6 +545,8 @@ if get_option('asan') if cc.has_argument('-fsanitize=3Daddress') qemu_cflags =3D ['-fsanitize=3Daddress'] + qemu_cflags qemu_ldflags =3D ['-fsanitize=3Daddress'] + qemu_ldflags + # Ensure complete stack traces for LSan suppressions to match correctl= y. + qemu_cflags +=3D ['-fno-omit-frame-pointer'] else error('Your compiler does not support -fsanitize=3Daddress') endif --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301367; cv=none; d=zohomail.com; s=zohoarc; b=IWjE4jIqSZiX0clzvEk7releie/NFLZE2jCzEtP1QhtiBb7iTqbaj+u2ERQ4RW299xuz7K7xjrVjZSO0tFCVtoNXPi/PkEKim3p1VCe1p41MJGjQCPPYKSrgGYEZAEascZNWmLBKwhuy/SOey8/ElsaHn0lRDbGqDH1lfmaK3LQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301367; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=kxxSNW/0rLIJXiH+QnSWeyVs1a+aQybhcuyThQb55xo=; b=JFaEzCkQhdKRne6jbMZCHdmVe0oSzYc7oFV7vNS6aGUja26USyostcary6THJRHjXcFnk1+qnyrXb8NuBAOd4Qe1GQtS/Ia5q3KnLbFQKO/1PNUKAeYmfLDANwNly8A/mrx8TdTa82dQI/Dy/AHxOw6CdIdJr/log25SUgDwIB0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782301367365517.9767989896437; Wed, 24 Jun 2026 04:42:47 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcLzQ-0007Zj-Jw; Wed, 24 Jun 2026 07:41:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcLzP-0007Zb-47 for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:41:55 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcLzN-0007ZK-CR for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:41:54 -0400 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-620-Qpt9W6AJN66QqQwqfy58BQ-1; Wed, 24 Jun 2026 07:41:51 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (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 ACAFF1954195 for ; Wed, 24 Jun 2026 11:41:50 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 95CB1195609E; Wed, 24 Jun 2026 11:41:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301312; 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=kxxSNW/0rLIJXiH+QnSWeyVs1a+aQybhcuyThQb55xo=; b=HjsK8rL6jlTG2RgMJlW5yCQYZNCbA41TT21erGzShIz34jas8C3ylaJlgAsRbOmO2UxCbt GwHNpOkGuc810zQ56Eixw8zedHZHNMJg9gysAIejXkGgLSfsjS3vczG+OC2t42BdzIqXMJ Kdvzf3K9KtB19UFHEMopCU3GMCLI0B8= X-MC-Unique: Qpt9W6AJN66QqQwqfy58BQ-1 X-Mimecast-MFC-AGG-ID: Qpt9W6AJN66QqQwqfy58BQ_1782301311 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:25 +0400 Subject: [GIT PULL 03/35] irq: add per-IRQ observer to fix qemu_irq_intercept_in leak MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-3-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=4940; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=SyhThLXVKTt14H6h4alDKK+ub1yL3BsCOMw07A+6K3s=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqO8Jmm/T7x0tfAUSLnes0DpQSCrq+qbKY6n2fY 2eksud3iZOJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajvCZgAKCRDa6OEJdZac 5eXOEACt1J4wilkayY1KSWRzShqSxLsKquMzxxK68n2UYdaYEvoHNAfyEvWi6tL6YRE8gRGgAZ3 N85yGUlveXD9+GTqZZOhfKot/n0c4DGPz4502jbAZBD8QHfa0Q2Lo1RybP8JvkxQIKCu+g+Uep2 aq7uBe2cIilsCer/UZ+zB+n34VcI4drnX6w8u2WlKB/dxVAFGrUfCaAlb15nt7gyZNWMpP+YkDo oRJ5D/GpUB2fLBwHw6hg1+SqRfSWx6lHfswGqwDPVixjVpHEwW2o85I+lVzCrvIQwrsZHqf1484 IwwCkh6Y1mwmTJPsd+ImuPx1CnDYU3PGNBncQszQVwGx2Do+AVocrnt983X4IPqPBxs+XK9aElt ay00F2XFUr8veLagxd1No4w82PakFkU8b+pQiNa+6d68pFbjBiOOCpRMUp3OuMRx3PHvZfySuHp OfzfsBhZDtDcTbW+rbmUU2jN8mRhlzX93SMvfH+cuR2tm0XR7Qb7PcFHFEPx6pVM3DWuiHuSNLX bqmKIYz9bYy53+vzC/cyseAsDzg8z/N8pjSLDF6ECsSmWgB9A4A4cxFgIuHCyeXXT4btkdDywKm 93roOLOmF/toohzmFNmDpcnXJ9PB0o/OqGFJjwB1VQ9hyhIMcgHzttsoDRD9p7enb7q1veii73t XMYtBWBKIN7UWIw== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301369385158500 qemu_irq_intercept_in() saves original IRQ handlers by allocating new QOM objects, which are never freed. On a PC machine, this leaks IRQ objects (one per IOAPIC pin) on every qtest run. Rather than tracking allocations to free later, avoid them: add an "observer" field to IRQState, called by qemu_set_irq() after the real handler. Interception sets the observer instead of rewriting handlers, so there's nothing to save and nothing to leak. Fix qemu_notirq() to route through qemu_set_irq() so inverted IRQs trigger observers too. Drop the LSan suppression. Reviewed-by: Fabiano Rosas Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-3-4656aec3398d@redhat.com> --- include/hw/core/irq.h | 6 +++--- hw/core/irq.c | 12 ++++++------ system/qtest.c | 5 +---- scripts/lsan_suppressions.txt | 8 -------- 4 files changed, 10 insertions(+), 21 deletions(-) diff --git a/include/hw/core/irq.h b/include/hw/core/irq.h index 291fdd67df4..299a4a9a8ce 100644 --- a/include/hw/core/irq.h +++ b/include/hw/core/irq.h @@ -14,6 +14,7 @@ struct IRQState { qemu_irq_handler handler; void *opaque; int n; + qemu_irq_handler observer; }; =20 void qemu_set_irq(qemu_irq irq, int level); @@ -96,9 +97,8 @@ void qemu_free_irq(qemu_irq irq); /* Returns a new IRQ with opposite polarity. */ qemu_irq qemu_irq_invert(qemu_irq irq); =20 -/* For internal use in qtest. Similar to qemu_irq_split, but operating - on an existing vector of qemu_irq. */ -void qemu_irq_intercept_in(qemu_irq *gpio_in, qemu_irq_handler handler, in= t n); +/* For internal use in qtest. */ +void qemu_irq_set_observer(qemu_irq *gpio_in, qemu_irq_handler handler, in= t n); =20 /** * qemu_irq_is_connected: Return true if IRQ line is wired up diff --git a/hw/core/irq.c b/hw/core/irq.c index 106805e2417..1b610e75e15 100644 --- a/hw/core/irq.c +++ b/hw/core/irq.c @@ -32,6 +32,9 @@ void qemu_set_irq(qemu_irq irq, int level) return; =20 irq->handler(irq->opaque, irq->n, level); + if (unlikely(irq->observer)) { + irq->observer(irq->opaque, irq->n, level); + } } =20 static void init_irq_fields(IRQState *irq, qemu_irq_handler handler, @@ -111,7 +114,7 @@ static void qemu_notirq(void *opaque, int line, int lev= el) { IRQState *irq =3D opaque; =20 - irq->handler(irq->opaque, irq->n, !level); + qemu_set_irq(irq, !level); } =20 qemu_irq qemu_irq_invert(qemu_irq irq) @@ -121,14 +124,11 @@ qemu_irq qemu_irq_invert(qemu_irq irq) return qemu_allocate_irq(qemu_notirq, irq, 0); } =20 -void qemu_irq_intercept_in(qemu_irq *gpio_in, qemu_irq_handler handler, in= t n) +void qemu_irq_set_observer(qemu_irq *gpio_in, qemu_irq_handler handler, in= t n) { int i; - qemu_irq *old_irqs =3D qemu_allocate_irqs(NULL, NULL, n); for (i =3D 0; i < n; i++) { - *old_irqs[i] =3D *gpio_in[i]; - gpio_in[i]->handler =3D handler; - gpio_in[i]->opaque =3D &old_irqs[i]; + gpio_in[i]->observer =3D handler; } } =20 diff --git a/system/qtest.c b/system/qtest.c index fd37bcbfaab..cf301239177 100644 --- a/system/qtest.c +++ b/system/qtest.c @@ -326,9 +326,6 @@ void qtest_sendf(CharFrontend *chr, const char *fmt, ..= .) =20 static void qtest_irq_handler(void *opaque, int n, int level) { - qemu_irq old_irq =3D *(qemu_irq *)opaque; - qemu_set_irq(old_irq, level); - if (irq_levels[n] !=3D level) { CharFrontend *chr =3D &qtest->qtest_chr; irq_levels[n] =3D level; @@ -421,7 +418,7 @@ static void qtest_process_command(CharFrontend *chr, gc= har **words) interception_succeeded =3D true; } } else { - qemu_irq_intercept_in(ngl->in, qtest_irq_handler, + qemu_irq_set_observer(ngl->in, qtest_irq_handler, ngl->num_in); interception_succeeded =3D true; } diff --git a/scripts/lsan_suppressions.txt b/scripts/lsan_suppressions.txt index f88bbab18b8..30256bc6d01 100644 --- a/scripts/lsan_suppressions.txt +++ b/scripts/lsan_suppressions.txt @@ -16,11 +16,3 @@ leak:/lib64/libxkbcommon.so.0 # https://github.com/GNOME/glib/blob/main/tools/glib.supp # This avoids false positive leak reports for the qga-ssh-test. leak:g_set_user_dirs - -# qemu_irq_intercept_in is only used by the qtest harness, and -# its API inherently involves a leak. -# While we could keep track of the old IRQ data structure -# in order to free it, it doesn't seem very important to fix -# since it is only used by the qtest test harness. -# Just ignore the leak, at least for the moment. -leak:qemu_irq_intercept_in --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301373; cv=none; d=zohomail.com; s=zohoarc; b=MlvMaZnvjjFuX9/pXKw/2zmu98O3Yep3OlmaEOfneP5KA3+FddNXPTwgClBk8qSx3mT367/BDdENP0WvmLAzYcxZoq5LPoFlpWCpQRm6xQ7E7kj1rkC7Z3iACm4Hyw3MyVxHsvXp2lCofHxm9bO7NAwrrzWAH72QdiQpqkAbH3s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301373; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=vczqbItL4HK30XxRE+DcjNlBuXut/LSRWV0zFWitP9w=; b=M8NFrQSa7jFaxfub3cfZYod3GaQJYSWjhkTA/7rzKdbBXYewLnxbKvbOCVRENRmxjl2GpcR0dDxLBW0K2EBUJiAt6t4/j7Y6xOV1w0ND2MgsrWcv39mBRUKvrldkCzZ313ok46ToQ+VgByoKy80H4c32zKc4v4ZugQfsqY5zkFA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782301373766181.34786696422236; Wed, 24 Jun 2026 04:42:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcLzW-0007am-DJ; Wed, 24 Jun 2026 07:42:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcLzU-0007aH-Lo for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:42:00 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcLzT-0007aW-5h for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:42:00 -0400 Received: from mx-prod-mc-05.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-639--HBPgmWXPx62XmgzD177gw-1; Wed, 24 Jun 2026 07:41:56 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (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-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 0ABCE1955F07 for ; Wed, 24 Jun 2026 11:41:56 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 9ECBA1955F7A; Wed, 24 Jun 2026 11:41:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301318; 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=vczqbItL4HK30XxRE+DcjNlBuXut/LSRWV0zFWitP9w=; b=SQcrR31QVlGZN9eKGKLaBTiU17bUwA8sYUIr6WN5wps6FTmcul7AP5Y9/WvQPQ9R6Ei25C zmvC+qVHRxoR4CiCarDjElKOECGwCdjRT27PEonjFmztMZWtj/hzwZxfsTzHiBRWc8mxK/ Cc70uppNlBORCJidrcYoThnqAuCvCeQ= X-MC-Unique: -HBPgmWXPx62XmgzD177gw-1 X-Mimecast-MFC-AGG-ID: -HBPgmWXPx62XmgzD177gw_1782301316 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:26 +0400 Subject: [GIT PULL 04/35] scripts/lsan_suppressions: suppress fontconfig leaks MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-4-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=1016; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=zt/pQu2Inuys4dVDvXDp2sUcT8roo/0x8IoywLFrTpE=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqO8Jm7ADrHuTxxZ4ttFFSt+QhGYP6qVvxET6hM ZEiODqjO/iJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajvCZgAKCRDa6OEJdZac 5aGwD/9rjrTUdpP1zNPilGd0uBAhNAeF7a4vJ6Dq0x/Vz1gb8fgX/QGpZ1R6oJdjRrBQ4HmWNZI BqR8FscSOkjy+qirmBOgvyeAi+b6/hmM0xw+YvgSmSfRaQbewGbt/qiciZNvcb8Yi+Dl8MITDYL EDtQhk/89ADHxqT2ChsBGvwH/affha0eHXCgu+7GZNC+uFT8fqRFHFvNZYmnd4GH0hkuBS2xiuC zEQ8QwDhmuPIe0TYuVoiUmsJ/7M/p6f21N96cokuyUNWUySZ9whYDaNyW2WaCd+e1hKsZg8ceDl lMMCyZt7VE9OvZXzhhAmlYiLp6Y6aWdILgHoxiHcDFO7O7ph/9qwhRL7iKSrNhZaV0lXsZ9hn34 uqWJXuC9Mgjkj8wPm1JQfpIiLCaU4qDxswoNsxQUGIyy0B6lDxYetxX2NqY5aSmdLqiHeLk6PyX OEXH5rCgL/8vQBGT6xAbARFOiGofXZngdXxZ38nLhb0A3msiSZL95xAA3BC/MHI3zQWDoZxIC/d lghNuThIQCU4Wt+hkc2OsDU5QrShRnBEcUspg3r96xYwAj9SlZdJRreGL9yNa0jbn1B0WbXWzJ/ Fy1/c/okEzWi0UhZWl33hHq3OMrONcyoeNxY47JkkPjzV/pz8ApnrdJitTAAcAUWH4thmSWw0gh 4WT2WArf+LSe+Ng== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301375514158500 Those are annoying reports for gtk/sdl etc. Reviewed-by: Daniel P. Berrang=C3=A9 Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-4-4656aec3398d@redhat.com> --- scripts/lsan_suppressions.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/lsan_suppressions.txt b/scripts/lsan_suppressions.txt index 30256bc6d01..f3b827facff 100644 --- a/scripts/lsan_suppressions.txt +++ b/scripts/lsan_suppressions.txt @@ -10,6 +10,10 @@ leak:/lib64/libtcmalloc_minimal.so.4 # libxkbcommon also leaks in qemu-keymap leak:/lib64/libxkbcommon.so.0 =20 +# libfontconfig leaks are notorious, for ex +# https://gitlab.freedesktop.org/fontconfig/fontconfig/-/work_items/519 +leak:libfontconfig.so + # g_set_user_dirs() deliberately leaks the previous cached g_get_user_* # values. This is documented in upstream glib's valgrind-format # suppression file: --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301363; cv=none; d=zohomail.com; s=zohoarc; b=OsZ7Fi3lpsx5HgoQ5cpCQKrM9052JPaWzOAXwPeYBJHsR5ImWaJ87Y7qTkeVLiJWHwAqAKNmCMnyN7hs3TNX6i2i/qlUc/gVRJg8Igvmgq9+ZVwbjoidZhu1jrfJk+GoWPtiPajMuWxaX0YYlLOsQt5BNsXbiwTPk4dkShYpTtE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301363; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=TCYvLYmEeD5QhRXhLF6IjSZt7kmsPPjuNwnFozuJR7Q=; b=kTxMk8N2O0hY9gKoHwkH2iOgUDCXthKxpGpeluWZLmw3NKLvBvW6s16lDqda5tkldwzC9mh8036NshfzUAMcBb1eteWw73P9WPtoiNINbn7XoKt8ITMn6GdKoM/i2y+o37IokNE76FAhf6YgBl4VSr9bhWmJck/Av8Evjp4CeKw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782301363114520.3308859875946; Wed, 24 Jun 2026 04:42:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcLzc-0007bO-Q1; Wed, 24 Jun 2026 07:42:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcLza-0007au-3r for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:42:06 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcLzY-0007bR-I9 for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:42:05 -0400 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-575-HrR8lrD8NeOyIjViVeCDMw-1; Wed, 24 Jun 2026 07:42:02 -0400 Received: from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93]) (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 28BBD1801F09 for ; Wed, 24 Jun 2026 11:42:01 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id EA66918004D4; Wed, 24 Jun 2026 11:41:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301323; 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=TCYvLYmEeD5QhRXhLF6IjSZt7kmsPPjuNwnFozuJR7Q=; b=e3LqBmha2MT0Jb+DzinvXs4qhH11EOtOoz0b+93R9g8dR8BvaVx4ybdVyigk7GCijl8Eh6 +97i+lAOSUpPd7LaMnAkyH0WQf6FUHp/nKqeFkyDrttCSnyAuMcUjR5mAgQzP9xx3sX7yv jz0e8FAivHniYP9LXG4QAx2v4WDXPZw= X-MC-Unique: HrR8lrD8NeOyIjViVeCDMw-1 X-Mimecast-MFC-AGG-ID: HrR8lrD8NeOyIjViVeCDMw_1782301321 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:27 +0400 Subject: [GIT PULL 05/35] vfio/pci: close display console during unrealize, not finalize MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-5-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=4370; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=LPLSQM+FEtLfSBulNP9xzMByZoehhoO5YKhU9Vpd1bo=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqO8JmpYMx+Ywwp0+MXPG+dWgNUquoHfnJsP7NQ X1OG79mCo6JAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajvCZgAKCRDa6OEJdZac 5Ws3D/9rOawyQhPuorlJwbJY8vAvV3ou5rkf5s/ZMrL+2BgOnhlKFsN5CQYrCVtnqmt9DoaEgdT ewVnKsNc7mKmG0qYiqnD2huigIMDQ4Z8K5g9vidN6k6+ImyoZoSVPY650MqXFUJmB1KDLwU/jJB f/heMR0LyIaSEoPuZZiliwFnKVo17MlECfjgMQuW52aJWt/sQQHBWYYakKsPiWNUq2n69mlf2T1 cB/GhY61Ez5tppW5VNyxYUQpG8VXH1tK9e6jXB0ockqcFWBLn+z45NK5VI/Mzm7GNFop74XwRd9 DxYAQ5/ZrmZ8C4YRCIB0O+NHNjKY2k34H8+teu3MQ52hTo4Qikhuk8KWjrj7u4JnMaUPjwsb+vz O2apBOu8uAa1EXleOqF8YRmIC722eg3JiunMiwSHkYfmcS0jJRIdLjkW0bvIAK6RcQi0svfEh9c OKEq+7FJop2Q0GlvIR6pkrgvMtcykXhYGeXFjALxgdcMb/1k9aZ7Ap9T+if65JGw2xslKGyhnJp rU/PvJKNF0iFKM+fahL4/p2tJ6C95I5Hp6aEX7fVulOkyvlXx9EtsxfVlm/vyevRI9AXdKkW1J+ rwA6QLh5Qzekd1id1leUnwRglxI/LO2940W6mMQjgB7jCydD3y5Q7hIlVpTLX6GtIYvRvtqKFbS lUvMBrgt09hSMxA== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.93 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com 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, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301365732158500 The QemuGraphicConsole holds a strong QOM link back to the device via its "device" property (OBJ_PROP_LINK_STRONG). When graphic_console_close() is only called from vfio_display_finalize() during object finalize, this creates a ref-cycle deadlock: the device can't reach refcount 0 because the console holds a strong ref, but the console's ref is only dropped by graphic_console_close() which runs inside finalize. Split the display teardown into two phases: - vfio_display_exit(): called during unrealize (vfio_exitfn), closes the graphic console to break the ref cycle, and removes display region subregions while the parent memory regions are still alive. - vfio_display_finalize(): remains in finalize (vfio_pci_put_device), frees display region memory, dmabuf, and edid resources. The region memory contains QOM child objects (MemoryRegions) that must stay alive until QOM finalization has processed them. Acked-by: C=C3=A9dric Le Goater Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-5-4656aec3398d@redhat.com> --- MAINTAINERS | 1 + hw/vfio/pci.h | 1 + hw/vfio/display.c | 29 +++++++++++++++++------------ hw/vfio/pci.c | 2 ++ 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS index 93df53d87f6..35f87b7c9a3 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2347,6 +2347,7 @@ S: Supported F: hw/vfio/* F: util/vfio-helpers.c F: include/hw/vfio/ +F: docs/devel/vfio-mdpy.rst F: docs/devel/migration/vfio.rst F: qapi/vfio.json F: migration/vfio-stub.c diff --git a/hw/vfio/pci.h b/hw/vfio/pci.h index c3a1f53d350..cf567115870 100644 --- a/hw/vfio/pci.h +++ b/hw/vfio/pci.h @@ -270,6 +270,7 @@ bool vfio_populate_vga(VFIOPCIDevice *vdev, Error **err= p); =20 void vfio_display_reset(VFIOPCIDevice *vdev); bool vfio_display_probe(VFIOPCIDevice *vdev, Error **errp); +void vfio_display_exit(VFIOPCIDevice *vdev); void vfio_display_finalize(VFIOPCIDevice *vdev); =20 extern const VMStateDescription vfio_display_vmstate; diff --git a/hw/vfio/display.c b/hw/vfio/display.c index 8f91e83da88..cb83d98e9af 100644 --- a/hw/vfio/display.c +++ b/hw/vfio/display.c @@ -505,15 +505,6 @@ static bool vfio_display_region_init(VFIOPCIDevice *vd= ev, Error **errp) return true; } =20 -static void vfio_display_region_exit(VFIODisplay *dpy) -{ - if (!dpy->region.buffer.size) { - return; - } - - vfio_region_exit(&dpy->region.buffer); - vfio_region_finalize(&dpy->region.buffer); -} =20 /* ---------------------------------------------------------------------- = */ =20 @@ -547,17 +538,31 @@ bool vfio_display_probe(VFIOPCIDevice *vdev, Error **= errp) return false; } =20 -void vfio_display_finalize(VFIOPCIDevice *vdev) +void vfio_display_exit(VFIOPCIDevice *vdev) { if (!vdev->dpy) { return; } =20 - qemu_graphic_console_close(vdev->dpy->con); vfio_display_dmabuf_exit(vdev->dpy); - vfio_display_region_exit(vdev->dpy); + qemu_graphic_console_close(vdev->dpy->con); + if (vdev->dpy->region.buffer.size) { + vfio_region_exit(&vdev->dpy->region.buffer); + } +} + +void vfio_display_finalize(VFIOPCIDevice *vdev) +{ + if (!vdev->dpy) { + return; + } + + if (vdev->dpy->region.buffer.size) { + vfio_region_finalize(&vdev->dpy->region.buffer); + } vfio_display_edid_exit(vdev->dpy); g_free(vdev->dpy); + vdev->dpy =3D NULL; } =20 static bool migrate_needed(void *opaque) diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index 9c06b25e637..7d57eb4f478 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -3591,6 +3591,7 @@ static void vfio_pci_realize(PCIDevice *pdev, Error *= *errp) return; =20 out_deregister: + vfio_display_exit(vdev); if (vdev->interrupt =3D=3D VFIO_INT_INTx) { vfio_intx_disable(vdev); } @@ -3624,6 +3625,7 @@ static void vfio_exitfn(PCIDevice *pdev) VFIOPCIDevice *vdev =3D VFIO_PCI_DEVICE(pdev); VFIODevice *vbasedev =3D &vdev->vbasedev; =20 + vfio_display_exit(vdev); vfio_unregister_req_notifier(vdev); vfio_unregister_err_notifier(vdev); pci_device_set_intx_routing_notifier(pdev, NULL); --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301336; cv=none; d=zohomail.com; s=zohoarc; b=VSgZT2v8+W+JfYHAjnQ88bSzTGwcPeUFgB/67/y5WN8kjCqrLwBiUNM1S4G4n5YOXi2YTIhljnOHw7m3fL46jUV+3BiIefKQq0INdFHhiOIvBYyXRcoZRN6CCRcgpjhYZJLTwnNIiW9rbqbg0dk8GF2XxsbfAJ2e8QaoFb75Lxg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301336; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=VxPMwAbJHWARXqBVDJL37vTBIOnzY5ypKFLJNezcI/A=; b=n3f2J52OF6IjT2DKMbxxq0QOgWE9985BXNesOZhScnrbqIcPsflaa8U5KAFpjK/3kgi6ff7LUSUs3dWfHiiNi7curWiSIfbnNZJME5OX6HTBwTr3Lnxck2hDRXCKkSVItYMuoq6Rob8PbFSNXP3uB0wCLqZdlL0LMKlpt/DNN8E= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782301336599792.9606009371226; Wed, 24 Jun 2026 04:42:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcLzh-0007fV-Ed; Wed, 24 Jun 2026 07:42:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcLzf-0007bn-Qi for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:42:11 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcLzd-0007cM-Bi for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:42:11 -0400 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-520-wi0TcqWWN4G7wfhf0yHBuw-1; Wed, 24 Jun 2026 07:42:07 -0400 Received: from mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.95]) (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 95F151800370 for ; Wed, 24 Jun 2026 11:42:06 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 6231E36921; Wed, 24 Jun 2026 11:42:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301328; 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=VxPMwAbJHWARXqBVDJL37vTBIOnzY5ypKFLJNezcI/A=; b=XlG90qL8kNdeordxV7OeTvJ43BXJQCLzYUo7Zo0GhjETLt4uyjGq6ihMn+RVmC9A+oKEG9 mB+hmgHV1YFvoenjm/AvH6yl3EO0JmPwH89/g2VDABXMOAi9uVH6OunS3F2JtVzJMG2eiz MpLTZfJf11BiJhMwNfaonNUVWIqJkJQ= X-MC-Unique: wi0TcqWWN4G7wfhf0yHBuw-1 X-Mimecast-MFC-AGG-ID: wi0TcqWWN4G7wfhf0yHBuw_1782301326 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:28 +0400 Subject: [GIT PULL 06/35] docs: add mdpy mdev vfio display testing guide MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-6-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=3455; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=Dy7irsKVA2yrMbCp9NRN1ooropnjnNEQ2b56VQv9GbM=; b=kA0DAAoB2ujhCXWWnOUByyZiAGo7wmaijLHYOvN8XuKhh3yYZNpJwWzHJD/AUqR4ovCpZfqgp YkCMwQAAQoAHRYhBIepvZM/h8YG0nb2Ldro4Ql1lpzlBQJqO8JmAAoJENro4Ql1lpzlaIUP/3BJ fu7sOZ+ddTdcY/c/iaj1Oiis/z1s5/kk3K2apOEuLQ20APyCVu5CRnMKpVGT510vlQ2IesZOLOV Cj+L5IQGYrFQruOpjRjSv8njIulmJ86aOtg63KGCrPv6hOEqBYy89lhF1i1lEbWBzs4vcWS49Ul puDomLUGKB3eb5LwBU2npZBzPl1+i7Mg70e5hUbVdzeV625L69+V33Dzz856RvStX+ctSoRlcCg BYtLMr0ysa/LarqF6B6zZEe+L+NRQ9WEcwr33T9C51qIja6+874pdHyF0mBw5Zlyr1WppTSOb7e E0VgTyQGoV5IH26QgxgR5kR31h1CVlrmQfr/VSdhy0GfuRJ/FjG6q0OWi8u4D+zpmYAz6YRAjRY NlBiYCqJRGAGNQEfkSiUQXzJ/Um92IY/t/fiDHAWiAchudZ1vum9QOfZqh0jzAPNbAFbIVpakU3 RRVJHvxwP1p2Q1YgYjxdTlL6sYiAzPNiwG0NZwWk/kH8kbsa5dbxyqe52gSS5FC5FU1muiMCG59 r+cwSJ55YTiy1+5CFCVxoYzKehKbEZJcCheYUmOS+GGBxi9fJTxo/jbP67f31+fMfiQPmcTSZIn arCW6DLanW2fT+KP89dLTcQ/1B1SwCmJ1grOn74GBhH3NZLjHlYj4qLAsx/kkH+CLJ6pjq7p7yA uup6y X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.6 on 10.30.177.95 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com 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, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301339282158500 Document how to test VFIO display hotplug using the kernel mdpy mdev sample. Reviewed-by: C=C3=A9dric Le Goater Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-6-4656aec3398d@redhat.com> --- docs/devel/index-internals.rst | 1 + docs/devel/vfio-mdpy.rst | 90 ++++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 91 insertions(+) diff --git a/docs/devel/index-internals.rst b/docs/devel/index-internals.rst index 7a0678cbdd3..198f155247a 100644 --- a/docs/devel/index-internals.rst +++ b/docs/devel/index-internals.rst @@ -22,6 +22,7 @@ Details about QEMU's various subsystems including how to = add features to them. tracing uefi-vars vfio-iommufd + vfio-mdpy writing-monitor-commands virtio-backends crypto diff --git a/docs/devel/vfio-mdpy.rst b/docs/devel/vfio-mdpy.rst new file mode 100644 index 00000000000..7875d00d1e0 --- /dev/null +++ b/docs/devel/vfio-mdpy.rst @@ -0,0 +1,90 @@ +.. SPDX-License-Identifier: GPL-2.0-or-later + +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D +Testing VFIO display with mdev mdpy +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + +.. contents:: Table of Contents + +The kernel provides a sample mediated device driver, ``mdpy`` +(``samples/vfio-mdev/mdpy.c``), that exposes a fake framebuffer through th= e VFIO +display region interface. It can be used to test VFIO display support, inc= luding +hotplug, without any real GPU hardware. + +The kernel modules +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + +The ``mdpy`` driver depends on the ``mdev`` subsystem. Enable, build and l= oad +the modules. + +The minimal set is:: + + CONFIG_SAMPLE_VFIO_MDEV_MDPY=3Dm + CONFIG_SAMPLE_VFIO_MDEV_MDPY_FB=3Dm # guest framebuffer driver + +CONFIG_VFIO_MDEV is selected automatically. + +Verify that the driver registered successfully: + +.. code-block:: bash + + ls /sys/devices/virtual/mdpy/mdpy/mdev_supported_types/ + +Creating an mdev instance +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D + +Available types correspond to different resolutions (e.g. ``mdpy-vga`` +for 640x480, ``mdpy-xga`` for 1024x768, ``mdpy-hd`` for 1920x1080). + +Each mdev instance is identified by a UUID: + +.. code-block:: bash + + uuid=3D$(uuidgen) + echo "$uuid" > /sys/devices/virtual/mdpy/mdpy/mdev_supported_types/mdp= y-xga/create + +To remove the instance later: + +.. code-block:: bash + + echo 1 > /sys/bus/mdev/devices/$uuid/remove + +Make sure your user has the necessary permissions to access the vfio group. +(ex: chmod 666 /dev/vfio/16) + +Starting QEMU +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + +Boot-time attachment +-------------------- + +.. code-block:: bash + + qemu-system-x86_64 -machine q35 -m 1G \ + -device vfio-pci,sysfsdev=3D/sys/bus/mdev/devices/$uuid,display=3D= on \ + -display gtk,gl=3Don + +Hotplug via HMP +--------------- + +Start QEMU with a PCIe root port (required for PCIe hotplug) and a +monitor: + +.. code-block:: bash + + qemu-system-x86_64 -machine q35 -m 1G \ + -device pcie-root-port,id=3Drp0,slot=3D1 \ + -display gtk,gl=3Don \ + -monitor stdio + +Then at the ``(qemu)`` prompt: + +.. code-block:: none + + device_add vfio-pci,sysfsdev=3D/sys/bus/mdev/devices/,display=3D= on,bus=3Drp0,id=3Dmdpy0 + +To hot-unplug: + +.. code-block:: none + + device_del mdpy0 --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301379; cv=none; d=zohomail.com; s=zohoarc; b=SIcA0etDDVMjOqAUshfXzylz7+JV2uuowUYqSJb4GUkNVOSVhEjdMY2m/PM+UcMTE9HmTCi9xrwiURJaiDRGdOW1pDymzDdzIIrlU3BKgOwItBk/dORSGmfyug4oVnZ1t/wGsDk6swZSZAStK24KZODeDgPe8JO4YcSTg3sq/Rc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301379; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=W+CyLVCmYr4kkIYUQEAm4+vhE3xyEAp/Xrk5Da/iYU8=; b=ajo4+ddWeUYNyRpBjNwnbz1sc/nqq213Aau9hb3EbfLTqR7+yL1CNQOQdYQm6uRisu3Ill1nKbhGTc/rpHDpWUU9ULaeJj23uEE30AbEoHXM1l1q1FOVNggwnmmLg+CXOh/TYUCXjSKR7jS+pYqJOW0wmp5A+FM6MhWS/E/Wle4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782301379044602.7746264522489; Wed, 24 Jun 2026 04:42:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcLzo-0007nt-CB; Wed, 24 Jun 2026 07:42:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcLzj-0007kr-Tm for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:42:16 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcLzi-0007dA-Af for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:42:15 -0400 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-464-TJHMypT6Ny6VKcQBQ8JH1A-1; Wed, 24 Jun 2026 07:42:12 -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 97D58180025E for ; Wed, 24 Jun 2026 11:42:11 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 61F97180058F; Wed, 24 Jun 2026 11:42:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301333; 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=W+CyLVCmYr4kkIYUQEAm4+vhE3xyEAp/Xrk5Da/iYU8=; b=TUmDiptJtrwcXmZFQ8t7fNFvqncpWpLIXvpPD9do1UUnWqrhFJ3pNzuOuYvxCdL1IeextV HfTpLlMyer0U5NLUTCdS3UtZflEoEEeJyt/2HAaOQ0n6AHn72Y4NzAUgm+YYcH1EGc/lOB reA6OcChgKienh27tRbtbfe4AHxluG8= X-MC-Unique: TJHMypT6Ny6VKcQBQ8JH1A-1 X-Mimecast-MFC-AGG-ID: TJHMypT6Ny6VKcQBQ8JH1A_1782301331 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:29 +0400 Subject: [GIT PULL 07/35] glib-compat: add fallback for g_clear_fd/g_autofd MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-7-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=1582; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=irLOfrxiAbZTlFF1dzBMOLxOonS+emEKXBZLXRSOrIM=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqO8JmA74NihK1UafBmCqXbDSeM+n1wItAamhIl 7JizEZpvteJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajvCZgAKCRDa6OEJdZac 5dBTEACJniTTzaUiWu5QBLNnCpxPt8OxlNJnR/uCqem/+fnX2H81zPBslcJ4jyNtpcz5y36WO+6 ftQ6MeOGhGB5f3U5jTKM+dTSmQlR1JByn2HY7luqf46e1p0irWxKYJSvljcG5EOAp4Uw+/9y7Iz ox6Hflhh9MQrt5uX0ReCg+whJJYnp1Nqye/UVo9bNbZkTSfcIrSRVDxdwdz9G2Z58Unz9379+dx y+ioIYgk36s0MV/Jfm5c6vR9Y8CJovxL/knH8xDAIGlHVoUH42CW6DSqrwsZJFBN2NdbWdsbwt2 ZgG/bU070VRn5aq0qgQNSumtI0PN8Cvf/KhRkiKYFqrOlPk/nUIIVMhg5evAF/XPN8923J5mnMu ige8GFWtxZQdYB5gRmIJlMtYh3lLcmoxQJFpvFK8Lx9gX+8n2ebDC/2+v/T0YTk0gsc1XqSi6Ak Iz5jmv/z5aKpqbfWL61EscmmR3u17TkLZwLa336vY3nZ7IsYzu6lMYirVmQZYGvo7pP07v8ocmW 89yOuhoKTHpBKxJZmVryv5e9pu+IwWX7heP0+Vh5h9+TijkCSZlw3NZ6H94T658WR2WEWVhONBY EYqZN+IiVxHN+Np9ZmwjKXJHzA1dcan59ebabVioQBcwjUEArHH62IJtBgOW0MYmYmzDW8ju3FZ 4+VCM3qBfR+ScLQ== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com 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, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301379470158500 Those helpers were added in glib 2.76. Reviewed-by: Daniel P. Berrang=C3=A9 Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-7-4656aec3398d@redhat.com> --- include/glib-compat.h | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/include/glib-compat.h b/include/glib-compat.h index 2e32b90f051..32ee2afdcdf 100644 --- a/include/glib-compat.h +++ b/include/glib-compat.h @@ -30,6 +30,7 @@ #pragma GCC diagnostic ignored "-Wdeprecated-declarations" =20 #include +#include #if defined(G_OS_UNIX) #include #include @@ -129,6 +130,34 @@ qemu_g_test_slow(void) #define g_test_thorough() qemu_g_test_slow() #define g_test_quick() (!qemu_g_test_slow()) =20 +static inline gboolean g_clear_fd_qemu(int *fd_ptr, GError **error) +{ +#if GLIB_CHECK_VERSION(2, 76, 0) + return g_clear_fd(fd_ptr, error); +#else + int fd =3D *fd_ptr; + + *fd_ptr =3D -1; + + if (fd < 0) { + return TRUE; + } + + return g_close(fd, error); +#endif +} +#define g_clear_fd(fd, err) g_clear_fd_qemu(fd, err) + +#if !GLIB_CHECK_VERSION(2, 76, 0) +static inline void _g_clear_fd_ignore_error(int *fd_ptr) +{ + int errsv =3D errno; + g_clear_fd(fd_ptr, NULL); + errno =3D errsv; +} +#define g_autofd __attribute__((cleanup(_g_clear_fd_ignore_error))) +#endif + #pragma GCC diagnostic pop =20 #ifndef G_NORETURN --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301373; cv=none; d=zohomail.com; s=zohoarc; b=Zf8qd3Lo3gKqULL/3rfHf81UoIiLJScu69omRs5vXdLQMymx8TvYbY1HZc2KVFMrsBCrFE/2yxGLMpqebQacDSm7BhAPdX6yUYSPROHfMaPzRSTjxkw/3rQAfJqWpnaB0HtmX877IClYQsJ4/n5oyCNqb6yGYq6NqSnG1C8V46w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301373; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=TewsrQjOEEfUbtJfnRuG82VZIS4a9rgFezYVmFt14qI=; b=jDuR0ladvfmqOQHt2svHOcied9BuR1MiXnEsQIAwn4vfd79IRakHgwWQX2v7F3XZmBaxbUYW6OQEkp/iJfImgsh1X54TL0KqUKsQdIVIZZp+NiXpmLVjDnVe+Iy/6XO1HPgRc241CICEpJQKo8+tdYxBFeFWRYqImfGZq+OpkKQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782301373240140.70239689286996; Wed, 24 Jun 2026 04:42:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcM09-00082X-A8; Wed, 24 Jun 2026 07:42:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcLzs-0007oj-Bw for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:42:26 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcLzp-0007ei-NK for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:42:22 -0400 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-663-KFn8AkvCO2Sp9_3PnuXetw-1; Wed, 24 Jun 2026 07:42:17 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (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 0421A1955D97 for ; Wed, 24 Jun 2026 11:42:17 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 7FA1E30001A7; Wed, 24 Jun 2026 11:42:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301339; 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=TewsrQjOEEfUbtJfnRuG82VZIS4a9rgFezYVmFt14qI=; b=go8UpGPnPnYN2UqeGKO/K04pAPUwK51nkIGSs16rASu7AVXf406HF7WImo5djvBErl1db7 zzrWY5KUFB/xfoP3qXmJAowPGdaIlFN6FTcZZUed1BRV/UwxPjUz/nMLi17Dvkdfi/WthM ALFKGEzYWHEwYhtuUCFiboYUMpS+G1E= X-MC-Unique: KFn8AkvCO2Sp9_3PnuXetw-1 X-Mimecast-MFC-AGG-ID: KFn8AkvCO2Sp9_3PnuXetw_1782301337 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:30 +0400 Subject: [GIT PULL 08/35] util: make notifer_remove() safer MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-8-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=793; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=yLgBs2ho0OvcmQtzdxufCxHOw5F5fjwZkyxkY+89Asc=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqO8JnyvMbRCKXmDk5vL/EMP1dsB34XMyTJfzoh hv8hrO0j/+JAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajvCZwAKCRDa6OEJdZac 5SOzEACnILAM/66Azt1a8OmsvOjvrSTFVVZysEDW3cKIOf+uzpuGPbR9JrYI5gq31n9YgKw0vMO UWiHrmEtcbF55n6lLhxsN+sKZRoX0r9dqwR4nrrTjcMnCKATPrmz6MRlyHmN9XItAbtFqjiOMBf Ratj7ZdfxqBNJhJBqjOTTYenhBt1o5MVaX+gAFdvTQT+ITVF+khtSKairsw8DdrGLzDJo6QNjiI QwVZQOokhf6Fcu8WTgTNp2wObpy/TADof0orcfmNfzvPyXp/aoPkUaCBe2VwDuAVR/OJmEEP7hH g+xf6/qMUFX2v0nYRuhw/LPXIrw03G9sRm+0MmBWj6y+1+j58O/OyGPqHUiQ5cWnFziBlg+3PJd Zin5b6RStNcmb6jkbIlY9DM/e5+dRAwvgpsPU+XNvOrwgBpdRP4IDqa0Brz1c6BwsDNblJBk0ze f0T0G3jKqg+tNh/l6/XFy/AAmDuP4LnWRoIotWRrA5Dt5tmYq6bn6B662SGoT+BTgYPelbpI0as /+Ujrw2yJvkTvaVnL5KKnVuJdLKMm7vNVPTCGpX+EwT+OjgnwM9g2ItgGXMAxNEKznLpUuVoAea IHuAtiMUTXacOXcKdf4/FwwI5QOKiIy9nbbIXFJy8yqJpHt3iOafZN1b0H9BITYwi4SqjJukA5m YaWRcJQUQjt56iA== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301375506158500 Allow to call multiple time notifier_remove() safely. This shoudn't impact performance in any measurable way... Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-8-4656aec3398d@redhat.com> --- util/notify.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/notify.c b/util/notify.c index c6e158ffb33..24420a7288e 100644 --- a/util/notify.c +++ b/util/notify.c @@ -28,7 +28,7 @@ void notifier_list_add(NotifierList *list, Notifier *noti= fier) =20 void notifier_remove(Notifier *notifier) { - QLIST_REMOVE(notifier, node); + QLIST_SAFE_REMOVE(notifier, node); } =20 void notifier_list_notify(NotifierList *list, void *data) --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301383; cv=none; d=zohomail.com; s=zohoarc; b=QGC9Hpt7NMuJcFVA5z1wKM3t5LT4VrAooR4EM/N6eIzFE5BPtZktdVWKk8IXqtm/pyLiRsOpFkwAmw0l/6pbAhfC4nzXl+AfIeM9BAIaj6bPPYBL149sUGCzkT3FB1/hglnJNCqEsLOw4Xlv+k0pYGoXL3Dt9Qs3F5nylp2acX0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301383; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=y2smrojAx1RvUhqG1ZWT81uzIAxkwAuZYAeo0lV4SJ8=; b=YsMnwR/uEHXO8I3MrjsQXmQQNlHsgof4CgDBDluaQNjUdib1Uk2WE0jA1pvLwj+OT19coQBiK7Rfpv05COwdhd8Uu0u84nPxAQdhekFx+edbgzKuaLT3figQBYY7uRxphJ8JeshPvtv7Izy+KTdbWpnQGPu0zFAo4r4c4qLtMG4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782301383636654.9546672237408; Wed, 24 Jun 2026 04:43:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcM0A-00087v-Bg; Wed, 24 Jun 2026 07:42:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcLzw-0007pE-3p for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:42:31 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcLzt-0007g5-LO for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:42:26 -0400 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-572-nKOjbaO9OwW9KZcItI7TNw-1; Wed, 24 Jun 2026 07:42:23 -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 7D5C91800675 for ; Wed, 24 Jun 2026 11:42:22 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 8D162180058F; Wed, 24 Jun 2026 11:42:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301344; 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=y2smrojAx1RvUhqG1ZWT81uzIAxkwAuZYAeo0lV4SJ8=; b=eYbXIant+zXIvZ3Zfk3jpoifLFW1GC443GY0RFXkA5Bv3olmDmkctHyJxQnwOAwjh0+WgN lsJIJHVsc57BGtVRn6y8mIHdf/zUnp2MRH5KNXTVGuBzlcHPdUmn6s/GlGmCGxQrZKRxxf 0T0qyAGoO6iL2A56NnUSQPujBkB0VII= X-MC-Unique: nKOjbaO9OwW9KZcItI7TNw-1 X-Mimecast-MFC-AGG-ID: nKOjbaO9OwW9KZcItI7TNw_1782301342 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:31 +0400 Subject: [GIT PULL 09/35] ui/dbus: remove mouse handler on dispose MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-9-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=889; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=tf/GwfRlyVIbAtoL67IvBgK+QJwN8oMS4UmojIw4ED0=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqO8JnN6oSQ0os7qHANXZJdH9PwdypimyS+AL0V yhvs2w1VJuJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajvCZwAKCRDa6OEJdZac 5c7AD/kBgX8ia+XxX2Q68PZK9hvIsiU+XYhIAicjPOcMRaZF+sZTMaDeSfv266wGz1+ANpfsF1U Xpb1BhJznBvsMN0muFMp9lEi4wizWlR5ZBLUzEznzSC9sx289kGOivgzOFX0lJcet0X+VwVXpzJ BlP7RyihCwxA4R7jnp3sTHsEurOfJevBKY8mQuV6E9+qM67wiLv+Cy4wWH9/JD6XZXQbBrlTVwY cNMnkLhI9GTbyogjWd+mQW+KNRvlCN2aWJqDRSSICCsC3+VFTk18PHJK7ljIAABYNC+n2xMn5YS 5bgWy86MIzm/9DXo63SRJpx0c3JYUf8xkf9wqkV7XQ5zJVfzkRaFv31HTDXb155BrERfdPrAnmK 78Xp9Uj2o9bO02JsRJ2NVTQUI95SVXYv4lhCv2iJd5IseQYzSP93FD/bJYFGv+nq0K18F5axT+1 t97tAoxfLGAuIUVQYCaJttsx4YW5wvnVlQ8++mwu592rzNbnQ7LiD0iHe8K9gfZNiFx07F1zlXt 2fr+0u3HnFZnUgca1gM85Ob1Wb2AChIWx0PYmXIHfYFEB0cSNm0GE+IOpyIifWYZ8K0HPpsWgX7 EaYtXhR5c2b0x/+fuQOgPmZeFYGCYRurUAve8OAekxwuVHPCypsQCp4XZIdpZOvbfhNixzMHQVP zQYJ2Xu+Ls4z+gg== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com 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, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301385682158500 Fixes: 142ca628a7 ("ui: add a D-Bus display backend") Reviewed-by: Daniel P. Berrang=C3=A9 Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-9-4656aec3398d@redhat.com> --- ui/dbus-console.c | 1 + 1 file changed, 1 insertion(+) diff --git a/ui/dbus-console.c b/ui/dbus-console.c index 9e154da1eca..bdbc208cf01 100644 --- a/ui/dbus-console.c +++ b/ui/dbus-console.c @@ -154,6 +154,7 @@ dbus_display_console_dispose(GObject *object) =20 qemu_input_led_notifier_remove(&ddc->led_notifier); qemu_console_unregister_listener(&ddc->dcl); + qemu_remove_mouse_mode_change_notifier(&ddc->mouse_mode_notifier); g_clear_object(&ddc->iface_touch); g_clear_object(&ddc->iface_mouse); g_clear_object(&ddc->iface_kbd); --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301367; cv=none; d=zohomail.com; s=zohoarc; b=HZYV5Rddwr+NouVTWmwDhr9miPoVdRsonUpXFF/lCFGTDURuRX6Ukj4lx9FUpKX6fjtA0GrCoFm0JzJV4y+Lr73wo5sFrkxI2wcMG8cWPkZdRv7frxPsNkVKRPNcxI7JmgnC4rOVRmObkF4yZx8eCSYFeLMjFyUPC44wNx2l4BQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301367; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=nm/1DQsW+H85OBSHK9zHCoP/yd4z4ZE5ORDkXPseNS8=; b=ZA8wWVymFLO5wBVijwDB6na6H3k+9hTjyucVh0mYLQrGtVI1jf8ZvbQscQ1WsqOFHqwSoYsAtA2kguhYdHcNeIM5QK3X6rIJYtCEm60RyfG80Xk440beEESjWAXDJBymuD2k6ePd6MZTx4es74EqooWjR4nAlPUNaV1Ncrwhc7U= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782301367177906.5325790758187; Wed, 24 Jun 2026 04:42:47 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcM0B-0008Gy-BZ; Wed, 24 Jun 2026 07:42:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM01-0007pe-KD for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:42:36 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcLzy-0007hr-Hd for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:42:31 -0400 Received: from mx-prod-mc-05.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-448-ElsGdnPnOrmrr7-_dpNGfQ-1; Wed, 24 Jun 2026 07:42:28 -0400 Received: from mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.95]) (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-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id BC97B195604F for ; Wed, 24 Jun 2026 11:42:27 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 528F236924; Wed, 24 Jun 2026 11:42:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301349; 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=nm/1DQsW+H85OBSHK9zHCoP/yd4z4ZE5ORDkXPseNS8=; b=XinoLDEVjx7Kzy4nx6FnwoD/feO6LmjHrIKkKyoTdTmdMLiCXBi6/3HO4fOIjfa8WqBxmm yRMob9sSZDEFkrvBr6w2s6iycF2QgNYA6b9BSlsqytKesIkpnFPslO4mjncYvMlAqogJCA YqYiBl/HwjBy9NmJXAZ3W7mZRy6XbH4= X-MC-Unique: ElsGdnPnOrmrr7-_dpNGfQ-1 X-Mimecast-MFC-AGG-ID: ElsGdnPnOrmrr7-_dpNGfQ_1782301347 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:32 +0400 Subject: [GIT PULL 10/35] ui/qmp: keep a reference of console across yield MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-10-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=1154; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=U2XesYW1uYhneH7r0f1rZL10mXZYOhZlenYF8jtFDcA=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqO8JnrqEXaQ6TvxlOXhXFZKOgZiXe7CQTGmEq6 U02oclnnu+JAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajvCZwAKCRDa6OEJdZac 5a60D/0UAx2YOBZDqg8SizUFbfbfVvy9iZtXx2SkWsv1YSixpwo6TCEWhZ44/YvCIKqHSIA1zcW SzUTtPO1AkqGNTUR+/cu9TdsqJu6myzuAIbSLPFLkp51KqeKQmpxxtU76dyRYy1rkFDo53tHKv2 og7m6fnsBoJz1abJVZOwwiDZ3j5bqvEmJcGO5LyTgXVKpgjkSn/4YRbqat9+T6hd6MptQ1YmN9J S0QPw4J0M+HSbTLRYkmTvj15L5AKTdHa7BbBIaa9Cee3EFhC2PphJkAbmaSEhkJ8UE/Bonyieuf ieULLxHKmUjY4SILKXbTqBO4NjeONcS4sbwv4nhcPlAPwtiFT0QP9wbQKMFtcxRiT0TITxkNMef I+HFa0zvuY2eLb0l4CGFNsaGNWy2iTd7UH/Vw8bfpcnDK5hZAToqo4KqvafMJog2E3EO0fixh5P 5K0F1I+RPjazqZc6KVHzsV7YXoEkod1mmb6dG2Nd1rAuIWBtgyZWTAqlyA4UsV/g9y/Ye6IcI3F 6CLjKEf2lSMSGmxIfFXYD5Xsh8Ky92ytPoyk/0E2SHJD5uWG7GxbbxrlmxWMLv59u6wUQdb7Yea lkbZx5sFjqhjdcVcAYY8dHrIlbrg1aHN5fPVJs7IbRkkzzE57T+R4yrAgxf9xbqColggoGvjuG4 Ia9PUEe3AFDdJBw== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.6 on 10.30.177.95 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301369395158500 While the coroutine is waiting, the console could be finalized. Keep a reference to prevent this. Reviewed-by: Daniel P. Berrang=C3=A9 Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-10-4656aec3398d@redhat.com> --- ui/ui-qmp-cmds.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ui/ui-qmp-cmds.c b/ui/ui-qmp-cmds.c index 1173c82cf7f..753cc2bf522 100644 --- a/ui/ui-qmp-cmds.c +++ b/ui/ui-qmp-cmds.c @@ -348,6 +348,7 @@ qmp_screendump(const char *filename, const char *device, } } =20 + object_ref(con); qemu_console_co_wait_update(con); =20 /* @@ -358,9 +359,11 @@ qmp_screendump(const char *filename, const char *devic= e, surface =3D qemu_console_surface(con); if (!surface) { error_setg(errp, "no surface"); + object_unref(con); return; } image =3D pixman_image_ref(surface->image); + object_unref(con); =20 fd =3D qemu_create(filename, O_WRONLY | O_TRUNC | O_BINARY, 0666, errp= ); if (fd =3D=3D -1) { --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301390; cv=none; d=zohomail.com; s=zohoarc; b=Ij20jWBQHFx+JohFHTjcZUhRhrw73z1rGofgsVAtPaEA8hIix97szkxmIE7ZTLWIFKu6EdG0XDrgvuODnuVfgg52is6vEtNzIXHWna5quELRQ0E9k3xc4zD1xIU5BXUEQfHZGEx8+rFqIxL+6EVlAgYtrFpVGUx0shvzvOl+0Zk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301390; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=TvuDSPKPTbo9TCKH6Hayi9u+gKenhmH8yznODBJIIjI=; b=O/wUlI2zE/VZQB2CRPrsD2L9qWSGW/1OM29TnB6cZ87vNf1JxRABnRBlwD34hW8XehmzWRgmaNIq5DYudcXCK8JADvwfBQx9Madh7UNkjNJmnps+Yc2dO2eVqsMNYJu1UVxSCEA8AhHdgHvMtTydksPySyVjKAMPCa+DJB9YS34= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782301390091163.27658877493423; Wed, 24 Jun 2026 04:43:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcM0C-0008Nu-UR; Wed, 24 Jun 2026 07:42:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM05-00080b-VI for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:42:39 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM04-0007ja-Kj for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:42:37 -0400 Received: from mx-prod-mc-05.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-42-IIpfEAGwPE6JQrRpMs-O_w-1; Wed, 24 Jun 2026 07:42:34 -0400 Received: from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93]) (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-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 5F790195606D for ; Wed, 24 Jun 2026 11:42:33 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 1B552180056E; Wed, 24 Jun 2026 11:42:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301356; 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=TvuDSPKPTbo9TCKH6Hayi9u+gKenhmH8yznODBJIIjI=; b=DkBfH9vFVZt7u01BzcDLMF7zFpuEoR3DLf5jbC5XnECKnmwMUsHeGrvLbWA9H96qE8fHoE qK3wONb1p1Jn875NUT8ZdExIa6eCruHUaUWt0xTkw0KNZYeOGvrLEhf7LkwWds2fV84yWt wgsolai3ZU7pMmfAr36vqnBtGJUDsEI= X-MC-Unique: IIpfEAGwPE6JQrRpMs-O_w-1 X-Mimecast-MFC-AGG-ID: IIpfEAGwPE6JQrRpMs-O_w_1782301353 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:33 +0400 Subject: [GIT PULL 11/35] ui: stop ui timer when closing MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-11-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=913; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=iUWuwyhFg8PvnBuE1m2vUvQRulennOUljpea2xquPQw=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqO8Jn/PArWS2aq9biZeNTpxAyRBP1m4Xd4JNid R+5enKi/XCJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajvCZwAKCRDa6OEJdZac 5TtTEACE72u1wsboW8Y3Dg1KgTsoMDlPX8fsJA6L5+K9wTGyE4bKs8IQwn/4+Q74gME7BeA79Lu QejniKCsbVaJMndOEJmPJGRhOQOfoBFUYp0wfqPlDWnVh+vKtEx2fUHxWzHbZTF4gnWvHVwuvT8 C05Z3g0DpK3CTMNFNXKOAjgwrMDG45c7Cf98VhQh409qNGKFDoueWdS7cGNdvhb7jUy6VQ+tjET mTzVDRxi3+19kbABknjn9VS/iNwA6mFv9a9WhO8sxmlfxlPqD1qM3OsXmdLmMrfmxyhfHu/a+uH 9MzrSjSnSVcLCYYAh0Bvp7Dsa9+oIjLTmlhYRbmn1wSVH5H3eUeG+L8hq6l/6dc0MtF6w1d4A25 wEPCurHRP0bNLCKhKd6wba7AxL129fv1ZrpjIZLwF+k/CzptsINgNaIGaTQvv3NYFUnJXPjxsFj U9mv7E9WoQNznSOC66ZU8+PbdlTj5ixDXQ5o96W6dTMqkqzzClKewsxDiLDNaO59FdfNVoLWHLh 4x3/0KdrryJvrZf9WVtJef3n57gUNNXJl9Unx3yrJIqwqSZgE87Yu7fvfSfTMKXApZiKFhhnMO8 /LrCw74MpxUeSkOxSXjAYyyzf5TaUKBlUJq7fzA+nrDOTGcTm69X7roE2PdSMihPq4QDOjv+h9A 61fOvPr8otYSDNA== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.93 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301391531158500 hwops is reset, so if the UI timer is pending it will crash. Fixes: 9588d67e72 ("console: minimal hotplug suport") Reviewed-by: Daniel P. Berrang=C3=A9 Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-11-4656aec3398d@redhat.com> --- ui/console.c | 1 + 1 file changed, 1 insertion(+) diff --git a/ui/console.c b/ui/console.c index a7c977d0c44..436444723a5 100644 --- a/ui/console.c +++ b/ui/console.c @@ -1136,6 +1136,7 @@ void qemu_graphic_console_close(QemuConsole *con) trace_console_gfx_close(con->index); object_property_set_link(OBJECT(con), "device", NULL, &error_abort); qemu_graphic_console_set_hwops(con, &unused_ops, NULL); + timer_del(con->ui_timer); =20 if (con->gl) { qemu_console_gl_scanout_disable(con); --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301379; cv=none; d=zohomail.com; s=zohoarc; b=Ys0dQfyGYcdav+dGsG8YLFsW56aNsSpdeTwmgOMYiBF9hc9wBao1+byRlq3vWVMx4lkndpAoE3kADNe2fr6BNp4EnmPhKWWB1AassjBLkt1r0o9ixpdgrNzdua5cN8dfsmeQ2dPE6x5PEmWCSm3PswmmY58EPRzlPdwf1eJj61k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301379; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=qQkpf4P397cicQNR4KAc7gU/YnRyu/Sm57F4vFtWlgo=; b=ks0PLav/PiBohoKxRtMT9A6DjyVP+UQvZ5yUSTHU1fwL2Gqy/yuHTJJta6aardB9Mqm2JDifkFLWVqa3Eb7Kq/e1wLAnsA1JKvVpB8D5Vwldvs2cYx7e6z2wa2IKx5zJDxRleU8Ur3VBQSTeo6aZX3IZoP1ePqqqFhmbPpfp16g= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782301379703199.10584440399487; Wed, 24 Jun 2026 04:42:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcM0E-0008Ox-8j; Wed, 24 Jun 2026 07:42:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM0B-0008L3-Rk for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:42:43 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM0A-0007lF-12 for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:42:43 -0400 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-563-bJNCbIsoP2itFwx22E-HIQ-1; Wed, 24 Jun 2026 07:42:39 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (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 C2DE3180266F for ; Wed, 24 Jun 2026 11:42:38 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 64BDE3000B54; Wed, 24 Jun 2026 11:42:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301361; 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=qQkpf4P397cicQNR4KAc7gU/YnRyu/Sm57F4vFtWlgo=; b=ZWd9qfIuTE/jFu+mzi3S1QboNvkXRYRlfG3mMnTfFpw1g4Aaz1XQAVyX0oY4xl2dtNMvkF OKr4thtTVrEtzMytbci6V0LRVG0J/BGhiSVaZZZxtw//oxvIOkUGVDp5WH1owLdcnU3piP Wc5AEZklaEVqT7OJkyH0bX5q30hq9lc= X-MC-Unique: bJNCbIsoP2itFwx22E-HIQ-1 X-Mimecast-MFC-AGG-ID: bJNCbIsoP2itFwx22E-HIQ_1782301358 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:34 +0400 Subject: [GIT PULL 12/35] ui/console: init gl_unblock_timer in qemu_console_init MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-12-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=1494; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=b2hte6KMtSmaFkBeRy7byqPcrxx3sJr5w/kurrPnHO0=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqO8Jnu+2iDBzm6FnauG/lMTEBMfOqzuBso184J qTNBRVM+9uJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajvCZwAKCRDa6OEJdZac 5YpUD/9yqDXJLRRWMfuRsvcdsMaEBxv0VNCaqCmryEM0o0JWAYxYv786w+plTud1CPQr8g0O55E iw/7h8hamV1WMPxPir7yyAyzqL/ItZ+G4PDSyeU//H33c07Ld6X1BxRNwewXYTL2EMTPTa/9R3k J4aCGZDEDBYYM5+mrrT8XWa3GbpKewqMAGluwOnH14Xsd0CHkXyBdJ5CKLQ9XQRr6IZ8xro1NWt Ry7nXhch2+CiOu0oPwwn/Zo4OkJ75w2lyjSJhcoQEtbkc0gBJYfVuna5IxtWixLV9VlUn4jOvpG crUJ1rQoh++fqLeB4f4ZArHGCOeWaOKNc53ddqlkV/3oJ8B/M/QyDatuJZtBUvFOvBdEBgLnaMt 0ZM+AtfNnIY0jS6fLPzrxj4AIdzxMqlOQf8wA/bSIHTHMHn/51C0KZSoZY1662ZrQI7oAwqU/3A yrc2Sjb6YE306fhZi6HIYqaCW6o6HUaWFgI2u5TX2Suk6kyxWbbgjIqaXFBZWJuufo29RwTSOF8 lmLWojnbUOsnOi5jk/9BdAIzNb0GEa4NP0Ho9ghIJfPKBBhSlICqSUsdZDursjuJRAZx3BBpIjT HpJMAr0hiUlTj7Ro4jg8I27aRUIUek+Ju5PdAIj0LlvOuki93hdJyXIt5Ou3PZHpcyZN0O36rsX iEyagOdkdUTpxGQ== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com 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, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301381571158500 Move gl_unblock_timer allocation from graphic_console_init() to qemu_console_init(), similar to what was done in commit cfde05d15b ("ui/console: allocate ui_timer in QemuConsole"). This fixes leaking timers on console recycling. Fixes: a9b1e471e17 ("ui: add a gl-unblock warning timer") Reviewed-by: Daniel P. Berrang=C3=A9 Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-12-4656aec3398d@redhat.com> --- ui/console.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ui/console.c b/ui/console.c index 436444723a5..58f29e82c85 100644 --- a/ui/console.c +++ b/ui/console.c @@ -433,6 +433,8 @@ qemu_console_init(Object *obj) c->window_id =3D -1; c->ui_timer =3D timer_new_ms(QEMU_CLOCK_REALTIME, dpy_set_ui_info_timer, c); + c->gl_unblock_timer =3D timer_new_ms(QEMU_CLOCK_REALTIME, + console_hw_gl_unblock_timer, c); qemu_console_register(c); } =20 @@ -1116,8 +1118,6 @@ QemuConsole *qemu_graphic_console_create(DeviceState = *dev, uint32_t head, =20 surface =3D qemu_create_placeholder_surface(width, height, noinit); qemu_console_set_surface(s, surface); - s->gl_unblock_timer =3D timer_new_ms(QEMU_CLOCK_REALTIME, - console_hw_gl_unblock_timer, s); return s; } =20 --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301397; cv=none; d=zohomail.com; s=zohoarc; b=Dc7aXZ/G6sAsjePYTcEKDp0BxTM3FUtm3p61Iir5u4levFqwnmS3ngCnG3mIYb+Y+CNpoDVFAP2v7AbtDy/AcXViZi3ar4hzSTva4BFq+uz0L1nMO78ff7bxj1gqhUkVy4t0sXnycbnRHz8VozuMMZRAme0wNJOfH9NtELnqJYQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301397; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=IsTLi+Y01BZWXxIXicDJycIYC+DOW8SnwVJnLKinfvY=; b=MDmzbbIVTUpjPYPUl+sanU84ZgPKY/7hKaKcInLuGa83vYEYQU2u5gFf6FYh0uj/fElIIDp+4U0xarP0RO9hyC87OQojv8YFudg6afCPBdmF5cOVfwL1SsJVXa/23xjOeERjWyuBI2OAtcF7irionmGKWNHt+3nLNfuGSs4Aqr4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782301397105907.5022392406215; Wed, 24 Jun 2026 04:43:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcM0I-000050-Gt; Wed, 24 Jun 2026 07:42:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM0H-0008V9-3J for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:42:49 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM0F-0007p2-1Q for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:42:48 -0400 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-70-hXtS7S49NWacDmCe583ZMw-1; Wed, 24 Jun 2026 07:42:45 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (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 36ECE1954B07 for ; Wed, 24 Jun 2026 11:42:44 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id CD5F01955F7A; Wed, 24 Jun 2026 11:42:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301366; 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=IsTLi+Y01BZWXxIXicDJycIYC+DOW8SnwVJnLKinfvY=; b=OZWDMf6Aw0cdvo+13JGBpeEgRrd+XAtmOpXPH/Q8nLNQNOv+hT3dtIJlFaCmotXo7vAsuj /IpgoyGoJj2F+eQteM4TDIpJ0nEmdUiEwbddcIdOQDlTCCCegnKWYXbJCUM+I7vykj9phH dFkVgGNGn+YxBKoYN+pKkQtjZJ6CHhs= X-MC-Unique: hXtS7S49NWacDmCe583ZMw-1 X-Mimecast-MFC-AGG-ID: hXtS7S49NWacDmCe583ZMw_1782301364 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:35 +0400 Subject: [GIT PULL 13/35] ui/spice: remove dead spice_displays MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-13-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=1043; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=6RWiRIl/EpCyDaXLKB7/6zQ9zTNxOh+9UhwoGmrHoQU=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqO8JnDOb9KtReBvwQPPKlBx+0MYi086lydqF/Z wCAduF2bh2JAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajvCZwAKCRDa6OEJdZac 5ZMJD/9VnLrkLKggJVt0j8BRUbEWS2Z0fIAtt+PZlTG+IFXaah7lVAhUbQ5/FKgYHFs9kiOS8NM hJRyl4BsHRqE2VyLpTbve5rQ++OdwNJaegS2J0RuSBgsXh1csExOkJX7ZgLgbKmDRMF5Afa0s6X VIL6Bhk3ubX7NNlSb7eKpDE6eCKL4bqlcnoQ61omKBbUnoKNgUEESEXMAd95Ff0OgzX3cBriald +Ck1xRIaOdWkXpdfWx4sc1TSnaY0svRarCAFHuwu7GsWsS2Runh0LfP9EZUcpuFYL3ZMIpONdkp AACFl8e7lMoHCh5ObMASzs+ZHzUtUmNSgKh470vlPQtS8PGNX3kYYCJFZSpdZCSlSr4intyvoDx XDfbxoCEfofwtfgnmdyqd5yI03VRube7UV9Ub2EXFvLJWgl5EmDSfPoDQN9bhnEQnLd4/Lb6XAN teK4nnB7e88CmLFVZgCAuGeVXM028CvBtSoroJepdyb5GTY136WlTtArVjpfBp8t2mV5S/MRdqU ygZKKNe/QavlhN84GQ/0L8Kuv8vPWrS6Jjx/N3CjGibzLFhrKwpfHOXwxGuBu028GEWUfqx51ww DOszTHlwg4pGvsRGk6j7xRfRyZLTWAwcBMUc4OapVo8EYHMt3lS6ZfzQZeF+UIjDitOhzKYRrPY 3yVuy2bZAzdfCAg== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301397574158500 This is left-over from commit 9fa032866da ("spice: fix multihead support") Reviewed-by: Daniel P. Berrang=C3=A9 Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-13-4656aec3398d@redhat.com> --- include/ui/qemu-spice.h | 7 ------- 1 file changed, 7 deletions(-) diff --git a/include/ui/qemu-spice.h b/include/ui/qemu-spice.h index 111a09ceca3..59a68cd9833 100644 --- a/include/ui/qemu-spice.h +++ b/include/ui/qemu-spice.h @@ -33,13 +33,6 @@ bool qemu_spice_have_display_interface(QemuConsole *con); int qemu_spice_add_display_interface(QXLInstance *qxlin, QemuConsole *con); int qemu_spice_migrate_info(const char *hostname, int port, int tls_port, const char *subject); - -#else /* CONFIG_SPICE */ - -#include "qemu/error-report.h" - -#define spice_displays 0 - #endif /* CONFIG_SPICE */ =20 static inline bool qemu_using_spice(Error **errp) --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301390; cv=none; d=zohomail.com; s=zohoarc; b=fZSQa06saRp1rkULUnyRXjxykOwk8XrFreIx0r7rAbstldKIBRddjXq5tWXD2QSLNmJmmmgOfUJ1LDJCgATsFsiNqMO8R/WMZ0gNkaQmT/oTfOzHeVQsaYBCtGdALDWGVXdFbc2B9xIGz4ENzZ6c0lFoBHTv8hdFI9JdsTprXLU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301390; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=B0oyji9plMv/ZH6kBKOSQwVcmkwRnfnasDQmkANRHvU=; b=FnTlrsoZd+KrZ4f8UMgjVaGCzh8P6KJcOug+pzy0oYd4T3LYBZcT2dq7sa+UFxFAk8Ya6Eo3dAgTCI+64vY8bx31mOu0VxQOicIqOW6WjazfaId60E+1B97gn2m/sdCJJQyGpJl8x1bW0lAKX8VKe/2IlsxuurczFavGC0gV+sY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782301390328349.12508658717195; Wed, 24 Jun 2026 04:43:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcM0O-0000Fx-VL; Wed, 24 Jun 2026 07:42:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM0N-0000Cy-84 for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:42:55 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM0K-0007r5-N1 for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:42:54 -0400 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-328-vPqNARKnP7qSI0f_RSIpGw-1; Wed, 24 Jun 2026 07:42:50 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (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 591351802675 for ; Wed, 24 Jun 2026 11:42:49 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 45E421955F7A; Wed, 24 Jun 2026 11:42:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301371; 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=B0oyji9plMv/ZH6kBKOSQwVcmkwRnfnasDQmkANRHvU=; b=EdE1u9I1lF64lg3PEoTCZa/TxO3H1ELtwMNLkU1zlITmIyrnP6LD5J9Z0+RW/2kzVAEEMu lcJat3yBNSA5b1S9JqW4F/uMn5ES6rLPw+mFki19SZK5F+INuOOToIpeTqhESvVbw/5AeR igh4mRQoUOAL5HmZmEpVP1pyHtTTGsk= X-MC-Unique: vPqNARKnP7qSI0f_RSIpGw-1 X-Mimecast-MFC-AGG-ID: vPqNARKnP7qSI0f_RSIpGw_1782301369 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:36 +0400 Subject: [GIT PULL 14/35] ui/spice: add cleanup on shutdown MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-14-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=12073; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=aJ+DcWhrN/m4YaRyqrJU9xXAnVQopZHmM7CXG1oDdyY=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqO8JnJaFlgfZLthsf18fVXVOjH+Y/lUMH0yvpG HgjyCWf+FiJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajvCZwAKCRDa6OEJdZac 5aOiEACr1wDnqlskbewyo/yxK/l7AKN3n0n0fUfZyfBR/IeHZSeg3xBu22tcJ8F+Arrb7e+XvJg VBE8nQGYdwEBfRSrAJyigl9Thh2muM41rxBnVRW4y2Bw0zw4do6/VulL0GYnj4Yu3Irs5ap/xhz uZn+AmKiUAeu1CcEhkWiHIb/HGwRTzj/FAVzqPLkoxqcGDhDVO71tUIXX897JYOLC4AUqewbnxe TCuxl0TnF6tp6FFN44VR/NIdSATfwed7yRNO/vyqQU1Gwzni3O5z15cR0Yfaq7RPe8TJmuv3+21 efeRp69PFH9Y9yS+pWNwnFifp7IrjDi9UhQ5A2NLxNNPXVG+xSp+nUmxKXxBD6HBeHKSWJ0xtvN 8fToFZfjKEJOz35M5IScPzePUUhnfuNq46tF1H79k/yU1ssBydyRz8uca3EQFYoc5DxUycOD7LP xd6G5mt8pD9TuUik8PTVnQq3vHxBPirD5GPfBY2E0y6lW0BEyz6xggJYNXPHMeoUwKeXt043RKh 2LMrL57tXppOc7FPAetE1vqMhACc8XrsIOgaWPvLMZNa1J0lLM/J5Wy4g3JbPjep87sJ29JM3ol wtzXcLTlFieshHcCjuMVJBqYxW0oz/oz0ifJTPzQqtGTd7/GMurjczH8wyie9WL8efA7G+XW1wm BQ/5HEAtyr0KoZQ== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com 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, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301391710158500 SPICE resources were never freed on shutdown. Add per-subsystem cleanup (display, input, core) and call it from qemu_cleanup(). Move spice-module.c into libui so the qemu_spice ops table links with the rest of the UI code. Add an LSan suppression for a known spice-server leak. Reviewed-by: Daniel P. Berrang=C3=A9 Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-14-4656aec3398d@redhat.com> --- include/ui/qemu-spice-module.h | 1 + include/ui/qemu-spice.h | 2 ++ system/runstate.c | 4 ++++ ui/spice-core.c | 25 ++++++++++++++++++-- ui/spice-display.c | 52 ++++++++++++++++++++++++++++++++++++++= +++ ui/spice-input.c | 53 ++++++++++++++++++++++++++++----------= ---- ui/spice-module.c | 5 ++++ scripts/lsan_suppressions.txt | 5 ++++ ui/meson.build | 4 ++-- 9 files changed, 129 insertions(+), 22 deletions(-) diff --git a/include/ui/qemu-spice-module.h b/include/ui/qemu-spice-module.h index 072efa0c834..bb0f8437c26 100644 --- a/include/ui/qemu-spice-module.h +++ b/include/ui/qemu-spice-module.h @@ -26,6 +26,7 @@ typedef struct SpiceInfo SpiceInfo; =20 struct QemuSpiceOps { void (*init)(void); + void (*cleanup)(void); void (*display_init)(void); int (*migrate_info)(const char *h, int p, int t, const char *s); int (*set_passwd)(const char *passwd, diff --git a/include/ui/qemu-spice.h b/include/ui/qemu-spice.h index 59a68cd9833..2cdf10f0313 100644 --- a/include/ui/qemu-spice.h +++ b/include/ui/qemu-spice.h @@ -27,7 +27,9 @@ #include "qemu/config-file.h" =20 void qemu_spice_input_init(void); +void qemu_spice_input_cleanup(void); void qemu_spice_display_init(void); +void qemu_spice_display_cleanup(void); void qemu_spice_display_init_done(void); bool qemu_spice_have_display_interface(QemuConsole *con); int qemu_spice_add_display_interface(QXLInstance *qxlin, QemuConsole *con); diff --git a/system/runstate.c b/system/runstate.c index 0e1cb3b4e67..d35fa270bd6 100644 --- a/system/runstate.c +++ b/system/runstate.c @@ -62,6 +62,7 @@ #include "system/system.h" #include "system/tpm.h" #include "ui/console.h" +#include "ui/qemu-spice-module.h" =20 #include "trace.h" =20 @@ -1048,6 +1049,9 @@ void qemu_cleanup(int status) user_creatable_cleanup(); #ifdef CONFIG_VNC vnc_cleanup(); +#endif +#ifdef CONFIG_SPICE + qemu_spice.cleanup(); #endif /* TODO: unref root container, check all devices are ok */ } diff --git a/ui/spice-core.c b/ui/spice-core.c index ef1c00134fa..1d2315f0b63 100644 --- a/ui/spice-core.c +++ b/ui/spice-core.c @@ -651,12 +651,15 @@ static void vm_change_state_handler(void *opaque, boo= l running, } } =20 +static VMChangeStateEntry *vm_change_entry; + void qemu_spice_display_init_done(void) { if (runstate_is_running()) { qemu_spice_display_start(); } - qemu_add_vm_change_state_handler(vm_change_state_handler, NULL); + vm_change_entry =3D + qemu_add_vm_change_state_handler(vm_change_state_handler, NULL); } =20 static void qemu_spice_init(void) @@ -894,7 +897,8 @@ static int qemu_spice_add_interface(SpiceBaseInstance *= sin) spice_server =3D spice_server_new(); spice_server_set_sasl_appname(spice_server, "qemu"); spice_server_init(spice_server, &core_interface); - qemu_add_vm_change_state_handler(vm_change_state_handler, NULL); + vm_change_entry =3D + qemu_add_vm_change_state_handler(vm_change_state_handler, NULL= ); } =20 return spice_server_add_interface(spice_server, sin); @@ -1005,8 +1009,25 @@ int qemu_spice_display_is_running(SimpleSpiceDisplay= *ssd) return spice_display_is_running; } =20 +static void qemu_spice_cleanup(void) +{ + if (!spice_server) { + return; + } + + qemu_spice_display_cleanup(); + qemu_spice_input_cleanup(); + migration_remove_notifier(&migration_state); + g_clear_pointer(&spice_consoles, g_slist_free); + g_clear_pointer(&auth_passwd, g_free); + g_clear_pointer(&spice_server, spice_server_destroy); + g_clear_pointer(&vm_change_entry, qemu_del_vm_change_state_handler); + using_spice =3D 0; +} + static struct QemuSpiceOps real_spice_ops =3D { .init =3D qemu_spice_init, + .cleanup =3D qemu_spice_cleanup, .display_init =3D qemu_spice_display_init, .migrate_info =3D qemu_spice_migrate_info, .set_passwd =3D qemu_spice_set_passwd, diff --git a/ui/spice-display.c b/ui/spice-display.c index e3716127203..75c7df7bb5e 100644 --- a/ui/spice-display.c +++ b/ui/spice-display.c @@ -34,6 +34,8 @@ bool spice_opengl; bool spice_remote_client; int spice_max_refresh_rate; =20 +static GPtrArray *spice_displays; + int qemu_spice_rect_is_empty(const QXLRect* r) { return r->top =3D=3D r->bottom || r->left =3D=3D r->right; @@ -1421,6 +1423,54 @@ static void qemu_spice_display_init_one(QemuConsole = *con) qemu_console_set_display_gl_ctx(con, &ssd->dgc); } qemu_console_register_listener(con, &ssd->dcl, ops); + g_ptr_array_add(spice_displays, ssd); +} + +void qemu_spice_display_cleanup(void) +{ + if (!spice_displays) { + return; + } + + for (guint i =3D 0; i < spice_displays->len; i++) { + SimpleSpiceDisplay *ssd =3D g_ptr_array_index(spice_displays, i); + SimpleSpiceUpdate *update; + + qemu_console_unregister_listener(&ssd->dcl); +#ifdef HAVE_SPICE_GL + if (spice_opengl) { + qemu_console_set_display_gl_ctx(ssd->dcl.con, NULL); + } +#endif + + if (ssd->ds) { + qemu_spice_destroy_host_primary(ssd); + } + qemu_spice_del_memslot(ssd, MEMSLOT_GROUP_HOST, 0); + spice_server_remove_interface(&ssd->qxl.base); + + while ((update =3D QTAILQ_FIRST(&ssd->updates)) !=3D NULL) { + QTAILQ_REMOVE(&ssd->updates, update, next); + qemu_spice_destroy_update(ssd, update); + } + g_clear_pointer(&ssd->ptr_define, g_free); + g_clear_pointer(&ssd->ptr_move, g_free); + g_clear_pointer(&ssd->cursor, cursor_unref); + g_clear_pointer(&ssd->surface, pixman_image_unref); + g_clear_pointer(&ssd->mirror, pixman_image_unref); + g_clear_pointer(&ssd->buf, g_free); +#ifdef HAVE_SPICE_GL + g_clear_pointer(&ssd->gl_unblock_bh, qemu_bh_delete); + g_clear_pointer(&ssd->gl_unblock_timer, timer_free); + g_clear_pointer(&ssd->gls, qemu_gl_fini_shader); + egl_fb_destroy(&ssd->guest_fb); + egl_fb_destroy(&ssd->blit_fb); + egl_fb_destroy(&ssd->cursor_fb); +#endif + qemu_mutex_destroy(&ssd->lock); + g_free(ssd); + } + g_clear_pointer(&spice_displays, g_ptr_array_unref); } =20 void qemu_spice_display_init(void) @@ -1431,6 +1481,8 @@ void qemu_spice_display_init(void) const char *str; int i; =20 + spice_displays =3D g_ptr_array_new(); + str =3D qemu_opt_get(opts, "display"); if (str) { int head =3D qemu_opt_get_number(opts, "head", 0); diff --git a/ui/spice-input.c b/ui/spice-input.c index 845abc7387f..34f1b03867c 100644 --- a/ui/spice-input.c +++ b/ui/spice-input.c @@ -242,24 +242,41 @@ static void mouse_mode_notifier(Notifier *notifier, v= oid *data) pointer->absolute =3D is_absolute; } =20 +static QemuSpiceKbd *spice_kbd; +static QemuSpicePointer *spice_pointer; + void qemu_spice_input_init(void) { - QemuSpiceKbd *kbd; - QemuSpicePointer *pointer; - - kbd =3D g_malloc0(sizeof(*kbd)); - kbd->sin.base.sif =3D &kbd_interface.base; - qemu_spice.add_interface(&kbd->sin.base); - kbd->led_notifier.notify =3D kbd_leds; - qemu_input_led_notifier_add(&kbd->led_notifier); - - pointer =3D g_malloc0(sizeof(*pointer)); - pointer->mouse.base.sif =3D &mouse_interface.base; - pointer->tablet.base.sif =3D &tablet_interface.base; - qemu_spice.add_interface(&pointer->mouse.base); - - pointer->absolute =3D false; - pointer->mouse_mode.notify =3D mouse_mode_notifier; - qemu_add_mouse_mode_change_notifier(&pointer->mouse_mode); - mouse_mode_notifier(&pointer->mouse_mode, NULL); + spice_kbd =3D g_new0(QemuSpiceKbd, 1); + spice_kbd->sin.base.sif =3D &kbd_interface.base; + qemu_spice.add_interface(&spice_kbd->sin.base); + spice_kbd->led_notifier.notify =3D kbd_leds; + qemu_input_led_notifier_add(&spice_kbd->led_notifier); + + spice_pointer =3D g_new0(QemuSpicePointer, 1); + spice_pointer->mouse.base.sif =3D &mouse_interface.base; + spice_pointer->tablet.base.sif =3D &tablet_interface.base; + qemu_spice.add_interface(&spice_pointer->mouse.base); + + spice_pointer->absolute =3D false; + spice_pointer->mouse_mode.notify =3D mouse_mode_notifier; + qemu_add_mouse_mode_change_notifier(&spice_pointer->mouse_mode); + mouse_mode_notifier(&spice_pointer->mouse_mode, NULL); +} + +void qemu_spice_input_cleanup(void) +{ + if (spice_pointer) { + qemu_remove_mouse_mode_change_notifier(&spice_pointer->mouse_mode); + if (spice_pointer->absolute) { + spice_server_remove_interface(&spice_pointer->tablet.base); + } + spice_server_remove_interface(&spice_pointer->mouse.base); + g_clear_pointer(&spice_pointer, g_free); + } + if (spice_kbd) { + qemu_input_led_notifier_remove(&spice_kbd->led_notifier); + spice_server_remove_interface(&spice_kbd->sin.base); + g_clear_pointer(&spice_kbd, g_free); + } } diff --git a/ui/spice-module.c b/ui/spice-module.c index 7651c85885f..1961060d128 100644 --- a/ui/spice-module.c +++ b/ui/spice-module.c @@ -62,6 +62,10 @@ static int qemu_spice_display_add_client_stub(int csock,= int skipauth, return -1; } =20 +static void qemu_spice_cleanup_stub(void) +{ +} + struct QemuSpiceOps qemu_spice =3D { .init =3D qemu_spice_init_stub, .display_init =3D qemu_spice_display_init_stub, @@ -69,6 +73,7 @@ struct QemuSpiceOps qemu_spice =3D { .set_passwd =3D qemu_spice_set_passwd_stub, .set_pw_expire =3D qemu_spice_set_pw_expire_stub, .display_add_client =3D qemu_spice_display_add_client_stub, + .cleanup =3D qemu_spice_cleanup_stub, }; =20 #ifdef CONFIG_SPICE diff --git a/scripts/lsan_suppressions.txt b/scripts/lsan_suppressions.txt index f3b827facff..2dd6581a650 100644 --- a/scripts/lsan_suppressions.txt +++ b/scripts/lsan_suppressions.txt @@ -20,3 +20,8 @@ leak:libfontconfig.so # https://github.com/GNOME/glib/blob/main/tools/glib.supp # This avoids false positive leak reports for the qga-ssh-test. leak:g_set_user_dirs + +# spice_server_add_interface allocates internal channel data that +# spice_server_destroy does not free +# https://gitlab.freedesktop.org/spice/spice/-/merge_requests/246 +leak:spice_server_add_interface diff --git a/ui/meson.build b/ui/meson.build index 0c6a432948c..d345f6c70d6 100644 --- a/ui/meson.build +++ b/ui/meson.build @@ -42,13 +42,14 @@ libui_sources =3D files( 'kbd-state.c', 'keymaps.c', 'qemu-pixman.c', + 'spice-module.c', 'vgafont.c', ) if pixman.found() libui_sources +=3D files('cp437.c', 'vt100.c') endif libui =3D static_library('qemuui', libui_sources + genh, - dependencies: [pixman], + dependencies: [pixman, spice_headers], build_by_default: false) ui =3D declare_dependency(objects: libui.extract_all_objects(recursive: fa= lse), dependencies: [pixman]) system_ss.add(png) @@ -64,7 +65,6 @@ system_ss.add(when: pixman, if_true: files('console-vc.c'= ), if_false: files('con if dbus_display system_ss.add(files('dbus-module.c')) endif -system_ss.add([spice_headers, files('spice-module.c')]) system_ss.add(when: spice_protocol, if_true: files('vdagent.c')) =20 if host_os =3D=3D 'linux' --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301397; cv=none; d=zohomail.com; s=zohoarc; b=EmGosE3IUWAWjPOkzIX0vAIW6M3+aBmmjciuFqBGWxuidT+cpznCYY3HAAg1tw9zETlzgSEnI5Yg0+w2xIZPFisEQFr808gT2cl5qapNQuYEzkU3JyzQeZkiCw1CZGjygmF3aZOy7V70FHZW9nFPwsRUM6tEDZh50SpOkx8SOOA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301397; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=7VibF4DmB6a6Uyf/7xkd4O1Y9CakUPfyDVFz6fwYFSs=; b=l96mvaeZCBvOrcVR0EKMjZWBqKJa2rhuBh0Pg7tuv2RllOsTxTfFeayd+9EnViascbVmQELAQ0dNd4/1ejiSILrVOMNe2tyuudrOtcxJa00YXAt8Y2adccalzUWQBw7dO1+byj8dfG5xNZX3bZOkGgtxiKzALVnyio10I2PbjXs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178230139752972.44130041843573; Wed, 24 Jun 2026 04:43:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcM0U-0000ek-0E; Wed, 24 Jun 2026 07:43:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM0R-0000RP-CG for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:42:59 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM0P-0007tF-NH for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:42:59 -0400 Received: from mx-prod-mc-01.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-117-JP0FjHReP9uizHgEr53r5A-1; Wed, 24 Jun 2026 07:42:55 -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-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id B46231955F7D for ; Wed, 24 Jun 2026 11:42:54 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 7E7BB180058F; Wed, 24 Jun 2026 11:42:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301376; 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=7VibF4DmB6a6Uyf/7xkd4O1Y9CakUPfyDVFz6fwYFSs=; b=exZbjasyQaCp47/vmZDa7fUS1PJJeg2AULSxXXluZkK4egTN+I9sa5IErvm0NzsdVGkKcv HwhY9aB9AZA2aC43Q5ouRRU+2G9SF+0fEfcmkVah8iaV/TuHFoKK6HIIusvDV9Vf55RFXX NbPPYrK6e5fid7FZISm24dXpqLuimxM= X-MC-Unique: JP0FjHReP9uizHgEr53r5A-1 X-Mimecast-MFC-AGG-ID: JP0FjHReP9uizHgEr53r5A_1782301374 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:37 +0400 Subject: [GIT PULL 15/35] ui: add display cleanup infrastructure MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-15-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=3413; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=WDzykKKwrOZpaWrlBWb2f++u8+iW4l0VtaHrZraNq3Q=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqO8JnfiiLQScfgE5JGWrcpgZgL0aYTNBHPySzR JZlRkII1Z2JAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajvCZwAKCRDa6OEJdZac 5R2bEACQGfaEee6I2rze4+G0j4e0LSiCzsypNIpWphDNpgJ98/DYDRvL480ovZKo2gS79YZeaqd jYfIIi8zVgHqYmjBHIu/TKAgNVufty2eQhFmgLlUUoBv7YroaVIJtclSnrsdWDl8SyOxur5H+Go WWWtp9aTUBS80lpjlfslAYHb6Bko57dThADhj6dj0nxr8704OaJ7KCGXFYDooqhICok8GtTaUit kR3S5ANt+SpF9+4a+f8+B6qxdtacVCNZeCE2WibMkdxGmsUTAm+jSK+/FRCJndeUNevkX7IOK4O +Gns7q39l9sJslHYYWNIVYmIYZlRo3ZSHk52TclkNfNAlcaWgWrm5jRTN8w5I3Byv6JLPNceeol r8fd/U7r3J9IYZbX6RXaWB7X5o3yBQFhO8Pq6SQ4oMt2zrVfTguOdaEbi2Xz/6OehdaFMfy1tX2 QS3MVbstsG0SNEeRPr/grlqmoViHDov55exk8GY0CrsVHZphjQf3qXRpceFv0phtDOE+IFvoiDO bZMQABL6pCtXFR+ZqwpTtro0o2ekVxkgLJB2InczIxEJc0SmHCyQ6KSJDfYFVpPo9GOJEC2K9YD RFDDfADPcX3A8hyOdVczK5t0FKdBWi0pMr4GjWE3DUBGzSwxeDqltifgTFUGKnMKqhmx6SSFPKz 670l7Cm+h1fLxDw== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301399558158500 Add a cleanup callback to QemuDisplay and a qemu_display_cleanup() function that iterates all registered display types and calls their cleanup handler. Wire it into qemu_cleanup() in runstate.c, replacing the ad-hoc vnc_cleanup() call. This provides a structured alternative to atexit() handlers, giving deterministic teardown ordering and making resource leaks visible to sanitizers. The cleanup should happen before user_creatable_cleanup(), since some display have weak user-creatable references to cleanup before. Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-15-4656aec3398d@redhat.com> --- include/ui/console.h | 2 ++ system/runstate.c | 8 +------- ui/console.c | 20 +++++++++++++++++++- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/include/ui/console.h b/include/ui/console.h index b7bfecb6ee9..5322c56009d 100644 --- a/include/ui/console.h +++ b/include/ui/console.h @@ -403,6 +403,7 @@ struct QemuDisplay { DisplayType type; void (*early_init)(DisplayOptions *opts); void (*init)(DisplayState *ds, DisplayOptions *opts); + void (*cleanup)(void); const char *vc; }; =20 @@ -411,6 +412,7 @@ bool qemu_display_find_default(DisplayOptions *opts); void qemu_display_early_init(DisplayOptions *opts); void qemu_display_init(DisplayState *ds, DisplayOptions *opts); const char *qemu_display_get_vc(DisplayOptions *opts); +void qemu_display_cleanup(void); void qemu_display_help(void); =20 /* vnc.c */ diff --git a/system/runstate.c b/system/runstate.c index d35fa270bd6..18e585be47f 100644 --- a/system/runstate.c +++ b/system/runstate.c @@ -62,7 +62,6 @@ #include "system/system.h" #include "system/tpm.h" #include "ui/console.h" -#include "ui/qemu-spice-module.h" =20 #include "trace.h" =20 @@ -1046,12 +1045,7 @@ void qemu_cleanup(int status) audio_cleanup(); monitor_cleanup(); qemu_chr_cleanup(); + qemu_display_cleanup(); user_creatable_cleanup(); -#ifdef CONFIG_VNC - vnc_cleanup(); -#endif -#ifdef CONFIG_SPICE - qemu_spice.cleanup(); -#endif /* TODO: unref root container, check all devices are ok */ } diff --git a/ui/console.c b/ui/console.c index 58f29e82c85..1fe3e3a3a6c 100644 --- a/ui/console.c +++ b/ui/console.c @@ -42,6 +42,7 @@ #include "qemu/memfd.h" #include "ui/vt100.h" #include "vgafont.h" +#include "ui/qemu-spice.h" =20 #include "console-priv.h" =20 @@ -575,7 +576,7 @@ void qemu_console_set_display_gl_ctx(QemuConsole *con, = DisplayGLCtx *gl) { /* display has opengl support */ assert(con); - if (con->gl) { + if (gl && con->gl) { error_report("The console already has an OpenGL context."); exit(1); } @@ -1414,6 +1415,23 @@ void qemu_display_init(DisplayState *ds, DisplayOpti= ons *opts) dpys[opts->type]->init(ds, opts); } =20 +void qemu_display_cleanup(void) +{ + int i; + + for (i =3D 0; i < DISPLAY_TYPE__MAX; i++) { + if (dpys[i] && dpys[i]->cleanup) { + dpys[i]->cleanup(); + } + } +#ifdef CONFIG_VNC + vnc_cleanup(); +#endif +#ifdef CONFIG_SPICE + qemu_spice.cleanup(); +#endif +} + const char *qemu_display_get_vc(DisplayOptions *opts) { #ifdef CONFIG_PIXMAN --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301413; cv=none; d=zohomail.com; s=zohoarc; b=FOdEYSL3vC/t2xxq6fMA08WIbRBFT8oHLCc+VRvhUUoNOQCQZiPdX8m+S25CElGy8ASR7bNQeyZV3DiI0HVUtm6Le0sB5j2X/Lt2ajpGLny2wAg14KkvZSB2SI3pvOxKmrjM48NujYcbN9O9D/l33x5zU8XjsrcSJPY3rXpZdhk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301413; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=pmyb6KFsCkWBuywTPOMcVFA3AXFEUfPxKP4tklruzFg=; b=F4EngZ/hbwyPJo9rwAg0Al4lecJESOT5VUaEa5T9ZIEPL305aa0C+EEZSl9Ooox6gVQ4XDJLCoBzBB61PojdvMktYqGNhFZLRE4BbrOYyAXmwWw/5q42hwdR0rneINlJWm4H5fD4S098sq5EL0E0msMgWsrOm49yNTZqF4iVkk8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782301413890618.1155618107128; Wed, 24 Jun 2026 04:43:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcM0a-0001Kv-OG; Wed, 24 Jun 2026 07:43:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM0W-0000wI-Pi for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:43:04 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM0V-0007yC-2I for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:43:04 -0400 Received: from mx-prod-mc-01.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-655-BtRfeOcsPyuV_BmjEyGd0g-1; Wed, 24 Jun 2026 07:43:01 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (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-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 457CE1955F45 for ; Wed, 24 Jun 2026 11:43:00 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 0EA9C30001A7; Wed, 24 Jun 2026 11:42:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301382; 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=pmyb6KFsCkWBuywTPOMcVFA3AXFEUfPxKP4tklruzFg=; b=dAaMp4r3uH1nm0eJRC3UpyK48pw5+w/aqrcXVX6geTqas3X49K4UUfvkVfrv1ibbKUFATf +C0JIgHW958BYIUcqOQ937g6L5SbqyueEsxpWTjXcT2AaLUwvjLpB9dT7Z4UWkYavNQWDJ YreWfuKbf6R8tBiqG7PnxH6IjxpgEnI= X-MC-Unique: BtRfeOcsPyuV_BmjEyGd0g-1 X-Mimecast-MFC-AGG-ID: BtRfeOcsPyuV_BmjEyGd0g_1782301380 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:38 +0400 Subject: [GIT PULL 16/35] ui/curses: implement display cleanup MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-16-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=1731; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=aN0mb2OQEcWE/Db2d8SBNtpCggRhui9wk+Rn2KVoRmE=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqO8JnJJu8SnLuYoH1uASlen/nVNlO15FVBKpij UE6VhKqMreJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajvCZwAKCRDa6OEJdZac 5dknD/4ryVarQs9oMGOFufNxu61jdz2L+6+/Db9e2wCwafWALKhoIHX4CHEKya8t/VH0KkHf62S RL5tO87It5jMqXRZg+YxSh7Z6TwhXRfZ6BcNZH7UAxAvRPCxdXbs+/ADNYmKx4ZV58WfJBS/bXj UKJwDYd5Ia/ob9Okwxe1NE5lVrgE3V8vY4YG+UGa64u/5O3sf7FueqaEg1m54UyTUkezYPYn+aj lQlKNOZWf32sq/VSWyQHdawnZxzf3LTiWGpeMOg27ljlX4MIA6PY4LgPb8lOcBkSThSwbhahQRA +zzTcOsQIofqW82Qmz3M3Jr4ZWk9+7rh1Wws4PGNhZZ1dY+2Sk6suUvoHvd+dh+QwXAYOB2TqJP K9i/PJ1FElVXhhkLfM9WXphWy21wqQ+vV4X+eOjs93SB78fp7D7G8IbVQawqtOx9sNRu5v28slA uNYzJARh7GLp7MnGjHPQU/bQXMACxBmv00joaSOvHNMLsvdat7FashkRPvXXOBxe16glTfdRRP1 /yIZzOLZsBZ5UhC0RPUVBOMiCYcS5Hl7JDVSi11cBl46Pf16oRMJC2YwJyhtLDQIMOhWZpu1OPN QMfOM8VVPatxb4nMcmWcv0/ktSY0/gJrWZ2wqye9LVMyAyDap2zKrvMW2TflcZ1TIMj48jCFr4E cm0KOb8Aiq26GEw== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301415882158500 Replace the atexit() handler with a proper cleanup callback. The new curses_cleanup() unregisters the display listener, destroy & free the allocated resources. Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-16-4656aec3398d@redhat.com> --- ui/curses.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/ui/curses.c b/ui/curses.c index 24d3713e57d..4db32b6168d 100644 --- a/ui/curses.c +++ b/ui/curses.c @@ -411,11 +411,19 @@ static void curses_refresh(DisplayChangeListener *dcl) } } =20 -static void curses_atexit(void) +static void curses_cleanup(void) { + if (!dcl) { + return; + } + endwin(); - g_free(vga_to_curses); - g_free(screen); + qemu_console_unregister_listener(dcl); + g_clear_pointer(&dcl, g_free); + g_clear_pointer(&screenpad, delwin); + g_clear_pointer(&vga_to_curses, g_free); + g_clear_pointer(&screen, g_free); + g_clear_pointer(&kbd_layout, kbd_layout_free); } =20 /* @@ -799,8 +807,6 @@ static void curses_display_init(DisplayState *ds, Displ= ayOptions *opts) vga_to_curses =3D g_new0(cchar_t, 256); curses_setup(); curses_keyboard_setup(); - atexit(curses_atexit); - curses_winch_init(); =20 dcl =3D g_new0(DisplayChangeListener, 1); @@ -812,6 +818,7 @@ static void curses_display_init(DisplayState *ds, Displ= ayOptions *opts) static QemuDisplay qemu_display_curses =3D { .type =3D DISPLAY_TYPE_CURSES, .init =3D curses_display_init, + .cleanup =3D curses_cleanup, }; =20 static void register_curses(void) --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301423; cv=none; d=zohomail.com; s=zohoarc; b=IBKVMSMEcdI7bOQ7/P3lOHbI9qN8iwtfXXpmO/1dakiV2djwKPglM/Q4aCIRiok8NQ4VkEYgXT9SwUeKlqfPRDDBDKZOgzNa+K1bu/z3/asMqwkWaYxoEOGukroMdX41JIE8Cui8h+GxTuWgWnGjU9v5VLO7rURD3b9gzF4dyL8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301423; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=qqlC+42zhqeavMxeGPBfk4oSuGA+H9bM4iKdmjjAK00=; b=HIQO0qfvSiDmNHaEYHGPXStFfEIy88LlFNz4l+ih8moXitFoc/4s/U17FpLkuSWy3AwOTM7aaZdYYV7p5I+/QfQb4akoOTvgrJNU8aGaPcwKbskCiUcTgeHjSWmVu0+029rpKrRkGEpdB7nMAs5MyOlbJ8XOEx0mT0ikvsgVWbk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782301423873998.569706961232; Wed, 24 Jun 2026 04:43:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcM0e-0001sc-Ex; Wed, 24 Jun 2026 07:43:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM0b-0001Xn-W1 for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:43:10 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM0a-00082u-Ai for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:43:09 -0400 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-619-xItnjq6RPciAPrkQJUIUYg-1; Wed, 24 Jun 2026 07:43:05 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (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 167EC1801F09 for ; Wed, 24 Jun 2026 11:43:05 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 2924C30001A7; Wed, 24 Jun 2026 11:43:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301387; 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=qqlC+42zhqeavMxeGPBfk4oSuGA+H9bM4iKdmjjAK00=; b=fsXwJDi6CDoMukPrZVmIOgqN/Yz+yo4FaMxVQJq9UpFewhwbt2M43lnwZSE+sLshFOd3tf 5C9BvrcJikFyjL7H5hQwKfLVdkRXlNGPWiLxrDERv+/CqjTQQQse3DGG/rO/AZbVUFDNKw 4ylbsLd0jVL0GHKzJaWmToNdKea3i0s= X-MC-Unique: xItnjq6RPciAPrkQJUIUYg-1 X-Mimecast-MFC-AGG-ID: xItnjq6RPciAPrkQJUIUYg_1782301385 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:39 +0400 Subject: [GIT PULL 17/35] ui/sdl2: implement display cleanup MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-17-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=1990; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=6KH6pNQc0gVStN1cYPWY3mNbdZp2tOf24qcFW+Wjd2k=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqO8Jnj5anSkhlL6HKM97uUlLMJ+OdLqJgTib7z Y6Mi2JbfbaJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajvCZwAKCRDa6OEJdZac 5bk/D/9Fl7zMYUgJMKL193xv0K7cqoj55wwrMNAiYS5+3y2jRyl6U1/MuUdAXyOlImGEMULWV6J mrGXTjYaPJZ3YbylTuIk0uW+QFdzgOngjrpbdqtXAh2WG2IcinM4AnjhU/Z4zDJuY7KREtnhD6P nROi91zxuTL4bG2K3wGe3rKieNpctXR9qG0iFJ/eAkZIYJkRCcdfTDjQQLp41ump8atgt7GeLTz Lhy8c7KfRL/NXlBAENFh+tSwajjYUrUiw+ge+slY4/uudZ7WMPplTy/BwH29buOVtoB3/cL1YrY a5Ykhl3FcccIOcK6qY1u/Sf4Uo1htfMC8oxPLFKYbE3P1h30taRY9O2ckT9XgVxLsJ8LPF7fSWn 2f+RzYVB9LGBZrlxXG+z3/+K7t2vpfYv9AOniBu8uD7lKc+ioi+NFSs4rW1A7xZsjAGUKTyeNiH jOhiiAIHPA/zZ4zPsClzKNB2XOXkZL4hDajFm1vu0hDMwfE8NLqNIT4EOrfn0hpEyYofRy1BFK+ sFGUFML+UC86IuOcn4v+VUsNHop9opTggCpGSU5u4UNnN9vhHa3gci4Gw9VAiFklhJbXtzrfOkH ktRFX2rMpTl7u/ZHRGdqnO+QbJ/izfXHqWDSrqkWHFhRbF1g2SamhJEHlR6yuBiiECMgEXPxVhv oz6zk0Sh+RdC5nQ== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com 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, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301425775158500 Replace the atexit() handler with a proper cleanup callback. Extend sdl_cleanup() to unregister display listeners, free keyboard state, destroy windows, and clean up all cursor resources. Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-17-4656aec3398d@redhat.com> --- ui/sdl2.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/ui/sdl2.c b/ui/sdl2.c index c75f750e00e..1c97d23a47c 100644 --- a/ui/sdl2.c +++ b/ui/sdl2.c @@ -790,9 +790,25 @@ static void sdl_mouse_define(DisplayChangeListener *dc= l, =20 static void sdl_cleanup(void) { - if (guest_sprite) { - SDL_FreeCursor(guest_sprite); + int i; + + if (!sdl2_console) { + return; } + + qemu_remove_mouse_mode_change_notifier(&mouse_mode_notifier); + + for (i =3D 0; i < sdl2_num_outputs; i++) { + qemu_console_unregister_listener(&sdl2_console[i].dcl); + qkbd_state_free(sdl2_console[i].kbd); + sdl2_window_destroy(&sdl2_console[i]); + } + g_clear_pointer(&sdl2_console, g_free); + sdl2_num_outputs =3D 0; + + g_clear_pointer(&guest_sprite, SDL_FreeCursor); + g_clear_pointer(&guest_sprite_surface, SDL_FreeSurface); + g_clear_pointer(&sdl_cursor_hidden, SDL_FreeCursor); SDL_QuitSubSystem(SDL_INIT_VIDEO); } =20 @@ -998,8 +1014,6 @@ static void sdl2_display_init(DisplayState *ds, Displa= yOptions *o) sdl_grab_start(&sdl2_console[0]); } =20 - atexit(sdl_cleanup); - /* SDL's event polling (in dpy_refresh) must happen on the main thread= . */ qemu_main =3D NULL; } @@ -1008,6 +1022,7 @@ static QemuDisplay qemu_display_sdl2 =3D { .type =3D DISPLAY_TYPE_SDL, .early_init =3D sdl2_display_early_init, .init =3D sdl2_display_init, + .cleanup =3D sdl_cleanup, }; =20 static void register_sdl1(void) --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301436; cv=none; d=zohomail.com; s=zohoarc; b=aQ3T1jn5gK7Fqx9IxU9rHcQdAc+kHVptmH22CiGyXlvFoilJ57XITi/5lbzPivm0x3zeYL61qyadmVkXvagxajqiOpO9YqHhHsDJgeV2/na/cajU6Wa/PTCcEI6P3LrFjY9vALaUsDorGK7YQEDGQ8t20uJYrby8BhgG6iUtfns= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301436; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=8oJhp2WWKN8NTZUBbifGfBwbYlJXpITBp+aYDMcfcZw=; b=FKxrNmIQnMHOzpBCPgeNoQCHDIrMoVRYs+iRdbBgHnJQWh11NOQxNZ3Vi9AwnGVhS8kmKj+EbuuB++xIr/vwDHDSVLN3McpJXqQe9PPlhI9J3OFpng/qAxGJEfF1Xw7hTnZJsi5I1SQQTBRIp4CaKxZgbk/UEn3QiF/BEtHwhg0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782301435999815.615998650101; Wed, 24 Jun 2026 04:43:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcM1C-0003no-4R; Wed, 24 Jun 2026 07:43:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM0o-0003Kj-0w for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:43:25 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM0m-000862-2w for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:43:21 -0400 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-232-2y1kQSbzMHCvELb7o3qABw-1; Wed, 24 Jun 2026 07:43:11 -0400 Received: from mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.95]) (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 BA5CF19540D0 for ; Wed, 24 Jun 2026 11:43:10 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 460A53691F; Wed, 24 Jun 2026 11:43:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301399; 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=8oJhp2WWKN8NTZUBbifGfBwbYlJXpITBp+aYDMcfcZw=; b=NvF8ZETJOx/CY6tVtgyIuYvbmAdVez7htNUrtE4saFe6E4pS9k7narRBi6fOQsQDFKnXJy u8zOjVeul2nNtOyVvTzo8RfKaj3DGzfz+Yl+ttof8BZcAnXIEr3YF7SNpMBD4eBZLYEUCA BebtQO84AUScNOrlYuBlakCcnFQP+dM= X-MC-Unique: 2y1kQSbzMHCvELb7o3qABw-1 X-Mimecast-MFC-AGG-ID: 2y1kQSbzMHCvELb7o3qABw_1782301390 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:40 +0400 Subject: [GIT PULL 18/35] ui/spice-app: implement display cleanup MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-18-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=1659; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=rS34HvjOxWg+QK1nnNvoiwkDdDt+ESd4Q1XOuHlRJ9M=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqO8JnUCv3Lo5+1ma9e8BO6E9XURGJd5xMmyZE/ M5ZdrEKy4uJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajvCZwAKCRDa6OEJdZac 5Y7uD/962H/eB8FYjhymQjcWHUO11wU0Bypr1NmtSIBkfnf7Pfyc2V6CGyttNwzaqgdWAlV943C kdHd99Y4WnmKUxAs0t2MV8+yYVw0r9f5x5qTEnAxmdYjiMOU0feyIZ6UvBHmyy4aq5x5J6hl/0O tkMluLo9tfWaxmCko2yZlF++vwj2Iz8jgeCwJkfEE+UeQoKumMo30BI35tVARYzQi14RHff8h5/ ivmu4Yrj3/XEv3CQ5C+7nT3z5p17wKtd/0zhmM6K4q1tToUeD0e6WTxZRVtxvCCCbPAeCORjXFY c/uVYw2qrab6lkQF3zr6LdIIm6B7VgOJwDuRbW6TbOczXDFkwJXeDaWGncNs7wfS7hpXYWlFsME YW15kEFZp+9HhRjAL+MvXoRpZqOyQ+ys8NPvrhfFV6WBQIyyAPfDzLlemqPxEcL0zjUDVw0ylNX YsQ9RU0pmXfVqMZ+EECs+7pJafSTFvXSomDfSjgv3DElWWivFGHTnmQtuCic/bPmiPJ5Uw7qQYJ scZe8sIrYE5e4F6lt84EWcNbJJMlHkoLtY6qn9H8W86BS5SrGomfV3MfQp0Tcbt2nmBMBwT8RSr rAHEVpEtTzpfDzCk4gOHPgbBmGTPI+PeuzksfF5tOKEDRfZdRJqgA/Mkp2dnaBz7aCYY+VNFkig zOCil1jizb6ExcA== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.6 on 10.30.177.95 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301436303158500 Replace the atexit() handler with the display cleanup callback, reusing the existing spice_app_atexit() function. Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-18-4656aec3398d@redhat.com> --- ui/spice-app.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ui/spice-app.c b/ui/spice-app.c index 0df7325e679..fe3df62bfa5 100644 --- a/ui/spice-app.c +++ b/ui/spice-app.c @@ -119,16 +119,17 @@ static const TypeInfo char_vc_type_info =3D { .class_size =3D sizeof(VCChardevClass), }; =20 -static void spice_app_atexit(void) +static void spice_app_cleanup(void) { if (sock_path) { unlink(sock_path); + g_clear_pointer(&sock_path, g_free); } if (tmp_dir) { rmdir(tmp_dir); + tmp_dir =3D NULL; } - g_free(sock_path); - g_free(app_dir); + g_clear_pointer(&app_dir, g_free); } =20 static void spice_app_display_early_init(DisplayOptions *opts) @@ -146,8 +147,6 @@ static void spice_app_display_early_init(DisplayOptions= *opts) exit(1); } =20 - atexit(spice_app_atexit); - if (qemu_name) { app_dir =3D g_build_filename(g_get_user_runtime_dir(), "qemu", qemu_name, NULL); @@ -218,6 +217,7 @@ static QemuDisplay qemu_display_spice_app =3D { .type =3D DISPLAY_TYPE_SPICE_APP, .early_init =3D spice_app_display_early_init, .init =3D spice_app_display_init, + .cleanup =3D spice_app_cleanup, .vc =3D "vc", }; =20 --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301429; cv=none; d=zohomail.com; s=zohoarc; b=M1sRkIQYSM2jFmwE1Bw4n72Ek8qSAG9LcdhQ4coX49f2++RFtx1IRQxrCQq4SEVX/iDodxANgRrIwMdpZ5wR6W3xNo8wWAORHa3timDKGgkasZHvR+SpzxLM7RAPWMGCebGO1jgT0ERz9Qf/i2WKPKqq46eUn4rPYaG4U9Nnx+8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301429; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=wp+gOa7w6okWnqQG9NLVesU9AKbObvi0L3iuKa4JSGk=; b=n+bEeX0GBv0wve9SxNuJRAt8Hru5gMaWeG2//oNGIl3lVKpYB8eCq1fXYSsHP/NLLE34mwiGGilmYkpC9gG3sn36+y3su0N84tlRGfCZ24ssMXdX4uNFHS5BJgbuoTbzGAquXyZNEwMsFhtOTSIYw2tOb9lhVNPISqK4OMB1L9A= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782301429804723.5825508739065; Wed, 24 Jun 2026 04:43:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcM0t-0003MJ-DG; Wed, 24 Jun 2026 07:43:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM0n-0003Ed-61 for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:43:21 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM0l-00085q-Ee for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:43:20 -0400 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-437-gIIE2ibROFSJ4lKQONWxJg-1; Wed, 24 Jun 2026 07:43:17 -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 CDA2B18005A9 for ; Wed, 24 Jun 2026 11:43:16 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 82338180058F; Wed, 24 Jun 2026 11:43:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301398; 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=wp+gOa7w6okWnqQG9NLVesU9AKbObvi0L3iuKa4JSGk=; b=b6ZHocN3koeem4zd67HuMLo7UXC6s/NmOKjcNvSyOlPf7T5KLCPAZzjh2OhX8MTbG+OAEe 6z44Nb/wpbrww0NxWd+r6yneirt2UW4Igp//KGVt0nRn68VAA2mzx7a5e9+NNZSCqrbIaw Z2OhZPuTcAnbyMyNjXvDHlAA18ndUBA= X-MC-Unique: gIIE2ibROFSJ4lKQONWxJg-1 X-Mimecast-MFC-AGG-ID: gIIE2ibROFSJ4lKQONWxJg_1782301396 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:41 +0400 Subject: [GIT PULL 19/35] ui/egl: implement display and EGL cleanup MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-19-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=3887; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=jca7AjPmYbnDHRocndRnhM7EYaiMpafKt5/Xsb12RME=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqO8JoK5IEwXgBVK3nIEpS4l15TIy5Z8SnAp0vf nV0A04AfXOJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajvCaAAKCRDa6OEJdZac 5cpfEACTT4Y0rPMkfa05vklKxlAAAHATVTD71sxGOv4K9XDDjONHHu7NrbpDN2HL/ue5+VLh4+J XfgyfljS9+g9IQnZ0hcZkwPJy7s71zdLxzeOFYH9yzIPEdgILHmA8wbugIEz1Ymm+gzwJX9l2gM pq9t2/t/dv7w/5cA0c3R361IUMPYbHGmy0AlsvS1XuGL1pPsGUwUk9sGo4wDEloRTHdM9uj9zyo VSwCBcv/Qm+FWPCStaUlIqQeXPYh9zbu7xmjyX1ltIVRX4hwP0cLYjezQ8cLIEDYQ66L12yvTuq KxYyEtmef2VwdVekWrkPah8a7HXYZScAQmxaZciEc0n+O4EwcI2spsLnL+KQNzwVlDPH7TSSdMu Ix7B+sLeCMogmPp7+dRXLgtqXWC5813jZq343jNjNqHUc+GD87vYK2rH5X1ZOkHhGLQULGoSXcb Vwgl3FnEOJw6PUduLSG1pumWGkICL9y43PzJhHL///qaPKt9KQphUEhe69OZBqpBNqFnnQbKzyR 7JOEE+i+3oyOtOOMvmAq5PVMXmjFjOKNxeS7NLp81OBjse/1AmuWBgz024760laT8rhN8P/Q/JK Q8UcrzEhQmNy54AHkjlI2tytrQInHK0hFZD1dsSvlH9YJc/rttq6iaCMbid9WV1OoXUIK4xFUJK vhH2nUxn8Jq0G8A== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com 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, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301431740158500 Add egl_cleanup() to tear down the EGL render node context, GBM device, and EGL display. Add egl_headless_cleanup() to unregister listeners, destroy framebuffers, and free per-console state tracked via a new GPtrArray. Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-19-4656aec3398d@redhat.com> --- include/ui/egl-helpers.h | 1 + ui/egl-headless.c | 31 +++++++++++++++++++++++++++++++ ui/egl-helpers.c | 19 +++++++++++++++++++ 3 files changed, 51 insertions(+) diff --git a/include/ui/egl-helpers.h b/include/ui/egl-helpers.h index c97a0d5c248..405ddd91259 100644 --- a/include/ui/egl-helpers.h +++ b/include/ui/egl-helpers.h @@ -81,6 +81,7 @@ EGLContext qemu_egl_init_ctx(void); bool qemu_egl_has_dmabuf(void); =20 bool egl_init(const char *rendernode, DisplayGLMode mode, Error **errp); +void egl_cleanup(void); =20 const char *qemu_egl_get_error_string(void); =20 diff --git a/ui/egl-headless.c b/ui/egl-headless.c index 878bfebb40c..ba27efcf4c3 100644 --- a/ui/egl-headless.c +++ b/ui/egl-headless.c @@ -9,6 +9,7 @@ =20 typedef struct egl_dpy { DisplayChangeListener dcl; + DisplayGLCtx *ctx; DisplaySurface *ds; QemuGLShader *gls; egl_fb guest_fb; @@ -19,6 +20,8 @@ typedef struct egl_dpy { uint32_t pos_y; } egl_dpy; =20 +static GPtrArray *egl_dpys; + /* ------------------------------------------------------------------ */ =20 static void egl_refresh(DisplayChangeListener *dcl) @@ -220,6 +223,8 @@ static void egl_headless_init(DisplayState *ds, Display= Options *opts) egl_dpy *edpy; int idx; =20 + egl_dpys =3D g_ptr_array_new(); + for (idx =3D 0;; idx++) { DisplayGLCtx *ctx; =20 @@ -232,15 +237,41 @@ static void egl_headless_init(DisplayState *ds, Displ= ayOptions *opts) edpy->gls =3D qemu_gl_init_shader(); ctx =3D g_new0(DisplayGLCtx, 1); ctx->ops =3D &eglctx_ops; + edpy->ctx =3D ctx; qemu_console_set_display_gl_ctx(con, ctx); qemu_console_register_listener(con, &edpy->dcl, &egl_ops); + g_ptr_array_add(egl_dpys, edpy); + } +} + +static void egl_headless_cleanup(void) +{ + if (!egl_dpys) { + return; } + + for (guint i =3D 0; i < egl_dpys->len; i++) { + egl_dpy *edpy =3D g_ptr_array_index(egl_dpys, i); + + qemu_console_unregister_listener(&edpy->dcl); + qemu_console_set_display_gl_ctx(edpy->dcl.con, NULL); + egl_fb_destroy(&edpy->guest_fb); + egl_fb_destroy(&edpy->cursor_fb); + egl_fb_destroy(&edpy->blit_fb); + qemu_gl_fini_shader(edpy->gls); + g_free(edpy->ctx); + g_free(edpy); + } + g_clear_pointer(&egl_dpys, g_ptr_array_unref); + + egl_cleanup(); } =20 static QemuDisplay qemu_display_egl =3D { .type =3D DISPLAY_TYPE_EGL_HEADLESS, .early_init =3D early_egl_headless_init, .init =3D egl_headless_init, + .cleanup =3D egl_headless_cleanup, }; =20 static void register_egl(void) diff --git a/ui/egl-helpers.c b/ui/egl-helpers.c index 069a5249554..d689f187c4e 100644 --- a/ui/egl-helpers.c +++ b/ui/egl-helpers.c @@ -733,3 +733,22 @@ bool egl_init(const char *rendernode, DisplayGLMode mo= de, Error **errp) display_opengl =3D 1; return true; } + +void egl_cleanup(void) +{ + if (qemu_egl_rn_ctx) { + eglDestroyContext(qemu_egl_display, qemu_egl_rn_ctx); + qemu_egl_rn_ctx =3D NULL; + } + +#ifdef CONFIG_GBM + g_clear_pointer(&qemu_egl_rn_gbm_dev, gbm_device_destroy); + g_clear_fd(&qemu_egl_rn_fd, NULL); +#endif + + if (qemu_egl_display) { + eglReleaseThread(); + eglTerminate(qemu_egl_display); + qemu_egl_display =3D NULL; + } +} --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301433; cv=none; d=zohomail.com; s=zohoarc; b=EF1fYbxn1xVGYggxxIdI9an44OSy8Cc7so7y0y5V/+zxYNvfmNt338HEGvImuMlp7ABm5yZBkfiq+e+QKaYjnIGflxpvWB/4KwrMD36FjEHxOy+MuCUbkgiqaKfkeNgEpop/6SSUOlMAJ+bT6rx15hOaL8xOxtD9lKrmRSP2FDM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301433; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Q1Zx3Z7/roefkjF/DLzal9CZPmsTs8ulmeW8smuUOww=; b=OWkhgMaHcBMVu+su46gz7xctId51QA6eckO5RW7UyHfQp9omBvofik7ovq/SjfAx1MVEzW8y9KN71McFeFNGXFrWRDM3cMZPdMgWPakJmdURTkqX7g3UzOp7aYLHYuhDaMP/qbNML7GpfF5nOozzYS3UQE078J1SiesVQ5mnqXc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782301433441923.4478091740664; Wed, 24 Jun 2026 04:43:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcM1G-00042Q-Ks; Wed, 24 Jun 2026 07:43:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM0s-0003Vd-7m for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:43:27 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM0q-00087F-RH for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:43:26 -0400 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-80-8ZnQUHvTM9mwF6PZGV_tUg-1; Wed, 24 Jun 2026 07:43:22 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (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 220A018011E6 for ; Wed, 24 Jun 2026 11:43:22 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id E0E2C1955F7A; Wed, 24 Jun 2026 11:43:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301404; 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=Q1Zx3Z7/roefkjF/DLzal9CZPmsTs8ulmeW8smuUOww=; b=gNkx2ZvHFp8CHSisJ0oJ8h7C36IYCbXYKTjKTGF+ElpMGr46SvvvpEfxB9FAX+ZtWPgOdo MQ9SYgQsU7TJPV0lU5VbovJfxnEgNpBwh0H2AgmW4yIBvAFte0JIZEvyHECRvqmoGaIcQt x4x7Gl8eNwNrWpWk8rvuZaDQNIZHKAw= X-MC-Unique: 8ZnQUHvTM9mwF6PZGV_tUg-1 X-Mimecast-MFC-AGG-ID: 8ZnQUHvTM9mwF6PZGV_tUg_1782301402 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:42 +0400 Subject: [GIT PULL 20/35] ui/cocoa: implement display cleanup MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-20-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=1650; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=k2U8DDg4P2uPTVnpL4gsNGkNYmT7oxgRioNKmkKelP0=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqO8Jo5PkdL2qfP03XByEbwMZibt2yRzKOUYe5/ jTDGe8LpbGJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajvCaAAKCRDa6OEJdZac 5elDD/4yKgni9OkBtcHmrLJpOam9QfHKcXv42dw7hSpVS3qxfkPg07I78Enl8Jxi4E9D12bp9Sr MPHL7KSwhQe37YmivP6Pvpj02PW3iaL8S1JJceg/jIYR/r2R0++6diSTyUpmRcxNoUzlFeh1AeA 2GsAyav1EV124MsTPt++X8Z7iEAzi7R23QNL13uWoQE6dmuFUcL2Cra+Fvwuvj3rPFoS0wHrWA2 A3Q3Mj59nNZ9xsJc4anHLhX79bsAgnfEusR+vhyoJ2z+GMd4xYt/IO9tb4rihZMguHOQyKpAZlj ogLUL3u24B+P9ozRuGxrWcr+rbbgHgLSxFuTZz9KtuH4eNCCmcPaP/qLjelbx7I7IeS9/z3tLq6 sBVa1vQ5TAeZmu88QqJC764wUFy7rhTJhOeO9OG1z095fGfW6xMgJeowkA6KMkvnp1mb8JqpBrR 0ImSKiwUqVKPzXSp+xwlJnfHybg6rlGj/IV2bhsYYA97GISqE/sOEnzgN2NINQI8/6WTxCYp+1H rmCjv5sIaentcsOV4yI8zllEsCyOH58U01/TyVdATv6yYLmMwZXS1AFGRTX5e3bClu4CwR6nNks +8rbSlUyFqhbfnbveYn58bgjmuiujfTJwFV6T6IAyAiAk35hsvl74IdBO9ae+UivSzI3QQYWhK0 wYo3xhzXXdY0xNg== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com 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, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301434486158500 Move cbowner release from QemuCocoaAppController -dealloc to cocoa_display_cleanup(), since cbowner is allocated in cocoa_display_init() and cleanup is the symmetric teardown path. Tested-by: Akihiko Odaki Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-20-4656aec3398d@redhat.com> --- ui/cocoa.m | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/ui/cocoa.m b/ui/cocoa.m index e157ad01d85..3751be37922 100644 --- a/ui/cocoa.m +++ b/ui/cocoa.m @@ -1206,8 +1206,6 @@ - (void) dealloc COCOA_DEBUG("QemuCocoaAppController: dealloc\n"); =20 [cocoaView release]; - [cbowner release]; - cbowner =3D nil; =20 [super dealloc]; } @@ -2038,9 +2036,26 @@ static void cocoa_display_init(DisplayState *ds, Dis= playOptions *opts) qemu_main =3D cocoa_main; } =20 +static void cocoa_display_cleanup(void) +{ + if (!kbd) { + return; + } + + qemu_console_unregister_listener(&dcl); + g_clear_pointer(&kbd, qkbd_state_free); + qemu_remove_mouse_mode_change_notifier(&mouse_mode_change_notifier); + qemu_clipboard_peer_unregister(&cbpeer); + g_clear_pointer(&cbinfo, qemu_clipboard_info_unref); + qemu_event_destroy(&cbevent); + [cbowner release]; + cbowner =3D nil; +} + static QemuDisplay qemu_display_cocoa =3D { .type =3D DISPLAY_TYPE_COCOA, .init =3D cocoa_display_init, + .cleanup =3D cocoa_display_cleanup, }; =20 static void register_cocoa(void) --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301454; cv=none; d=zohomail.com; s=zohoarc; b=O3LXEAjDFl+k08ErhL20HAYRYHaKc2At0DqAYBs8AN4oDhlwi2lPpjFqQtCo1DkzElDfqFEXIITdOMHyipp7BGKGFtxZeGEjr7DE4TNJdTfuoc/il/lwKDchyrtbisFHTuN+jQk3sVGtXowiXQLiwZFMp12TqhGis5TevvsE+pA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301454; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=JKq1u3IK8E4v/gdero8qdkjriMcWlHKY69DFqubwGyQ=; b=iYfLixTJXDv4LAGrTh8YYI0DGUzTU0/4OCzVGmHUzuT79dSu/NvCJ6je/VXM69Vzf4dJ1SHpAft4XZdUXErmLeZFdYa2Kyaly/XDq80m7aSkmvd+6NKSQGvqD9+aSb8bpe0wtAvmHYBrxsHGiz7RMwYiYw8KXNECryBS66R/74Q= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782301454033649.375197663707; Wed, 24 Jun 2026 04:44:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcM1O-0004Jz-Hv; Wed, 24 Jun 2026 07:43:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM0x-0003Yg-6r for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:43:34 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM0v-000883-TF for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:43:30 -0400 Received: from mx-prod-mc-05.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-210-KTGZ1b7-PxeDJMKc4Raq-Q-1; Wed, 24 Jun 2026 07:43:28 -0400 Received: from mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.95]) (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-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 2AE831956080 for ; Wed, 24 Jun 2026 11:43:27 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id D74F036921; Wed, 24 Jun 2026 11:43:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301409; 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=JKq1u3IK8E4v/gdero8qdkjriMcWlHKY69DFqubwGyQ=; b=MOiPsggNLYOcT20Kx+/PmjKFpo6Mg9vmoC8onqGYb/eXbhKszZKv1xI+ZUXfb57F9Bsmjv QQttTjpVWzEkKECgKUZxhKTHbBYiPLW1K0T7H96fUTF9oDrXbMiX/AR3lEdlUjLMoTXDVR 3ddrJTZ6FE4OcVxNBiRZHd0ZEkeZST0= X-MC-Unique: KTGZ1b7-PxeDJMKc4Raq-Q-1 X-Mimecast-MFC-AGG-ID: KTGZ1b7-PxeDJMKc4Raq-Q_1782301407 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:43 +0400 Subject: [GIT PULL 21/35] ui/dbus: implement display cleanup MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-21-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=1049; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=2aKIg62VA8XX87mRx2I8fmrL2TNHuzM0RF458V5cBNY=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqO8Jocg85HtX782As1kAky0hPBF/6JwVLaC613 S6nE+facBaJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajvCaAAKCRDa6OEJdZac 5cvvD/42bgMGeUaFeYu6D6+1vnW7ceYSavUgloCxqd+7As5H7rV7xms/Uvj8urXkIf03Cs+WZMX gcI1ocEZKP9++pbZl3FCgPnt7/xkK2bFLayn3DDV9H2z57Go3NX1zcyurmMTvHbKKJJga+5FsUq LqMkhzxLioQiFaofVVneJBoamI6WYP05UUKU7KsaRl72kCqACjXgbYzI/nSCNbalrQ/NeGwCPVW VfAX6wHFtPw4O56GVkYaTM6a7IZlxLfXCFxwmuukI/ToUD3VLjYum3hQth1tZ2ZwdQEYBorYJuq 6OSAI7/UST0NwzE6eBo8DdGCv7Q4ct5Zv6PUPERUSEmJbgGZ9sxYUZZeRntKUY+m3wGV4pg6zNq gocYf+vVihKuVscxN73wUaR37A52XI5skP1jjMTMeWYnF6m3FCTYJPTJq4S/Q4qjHpJbc+yDyaZ rdWtt6uSkEBCYJEZ3r8RTCZ2UqPgSOtaeb3eCk7rw8DQZG61a1S+LuMXa6+pYqQZr2Xtmg70vbQ Sgurn6AfmtX4QqpREsNChkYj3p7Qe08hMtdMlF/jRvA+5228jeOIrnCGp87QbDvDJt+ZI63ENTg qp+s0yq3K4PzGuCbxTj6dOkuaWwFgAGNd+bBWOULUB6w8jSd7JySmu/MtJRVi6OpixtX7kSeW2y 5mA7F/nthuwiBwg== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.6 on 10.30.177.95 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301454412158500 Add dbus_cleanup() to unparent the D-Bus display object, ensuring proper teardown before user_creatable_cleanup() runs. Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-21-4656aec3398d@redhat.com> --- ui/dbus.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/ui/dbus.c b/ui/dbus.c index e02a94df2f3..b23cb44c535 100644 --- a/ui/dbus.c +++ b/ui/dbus.c @@ -615,10 +615,23 @@ static const TypeInfo dbus_display_info =3D { } }; =20 +static void +dbus_cleanup(void) +{ + Object *o; + + o =3D object_resolve_path_component(object_get_objects_root(), + "dbus-display"); + if (o) { + object_unparent(o); + } +} + static QemuDisplay qemu_display_dbus =3D { .type =3D DISPLAY_TYPE_DBUS, .early_init =3D early_dbus_init, .init =3D dbus_init, + .cleanup =3D dbus_cleanup, .vc =3D "vc", }; =20 --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301446; cv=none; d=zohomail.com; s=zohoarc; b=jfSAkBRtCfyK3gCrHrwk9u45U92ulBwd8HAyb5ZuPllYY5I9dv5mMFQA6JS1WdQZDSsJQpOyu3dfzm2JdkdcT1eU0Rw6Qsx9S8tw1yDBfSwLrLC3csJ8cBlHwBjvTHtRorTDT3WDMwaQmldMPMT0ddvkJweWq+2RQFGibhKfgmI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301446; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=roJwGwDY/CRrFTsw73QBHjSB5e7RvHRSUPpyQcbaCuM=; b=dnp41Xb5p+cSxjEy52syeAT6/JP9zXcv+ogFQm3SGeDhJPLSfWHkocsoNCXAZWFEw5deqn6h2GYIetHGAveP1/CNQUY+vb1dzBKHrYsvUgMLr0wkzE6ZNQG6RMWuJB4rmFAWRJvULvwH+FWSDUv2MMYd6d6oxf2FA9FxqEJ6OSE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782301446722824.9898520674435; Wed, 24 Jun 2026 04:44:06 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcM1G-00044c-Qh; Wed, 24 Jun 2026 07:43:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM12-0003ev-V8 for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:43:41 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM11-00089J-Gw for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:43:36 -0400 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-554-SbPxveT4M5ijWyNw9zV3YQ-1; Wed, 24 Jun 2026 07:43:33 -0400 Received: from mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.95]) (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 479D219540CB for ; Wed, 24 Jun 2026 11:43:32 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 4B61F3691F; Wed, 24 Jun 2026 11:43:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301415; 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=roJwGwDY/CRrFTsw73QBHjSB5e7RvHRSUPpyQcbaCuM=; b=Vv1L+BvO2a5/BLPrDFRquoL5hcFbz8UhgrfhieBKgmz3C5veRVyT8rnbiIqLB8NejfMWdL dSa26xkh7yBwtxbEY0Gk6OlJB4ucMDXELsKTlWKeLONl3zhvd/2ixh6zI3N61zSyTFbOY3 2wTcd4jOBB2ygEAVKTN5SXtTSa/XB5w= X-MC-Unique: SbPxveT4M5ijWyNw9zV3YQ-1 X-Mimecast-MFC-AGG-ID: SbPxveT4M5ijWyNw9zV3YQ_1782301412 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:44 +0400 Subject: [GIT PULL 22/35] ui/gtk: implement display cleanup MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-22-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=3883; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=yr5QT2PgTg6KEFWqJKmuI7PbsjQsUObANcfQ1+RHV1E=; b=kA0DAAoB2ujhCXWWnOUByyZiAGo7wmigVy43q62rcR+VBpInThEveZLuv3yrTug+uRedPufE9 YkCMwQAAQoAHRYhBIepvZM/h8YG0nb2Ldro4Ql1lpzlBQJqO8JoAAoJENro4Ql1lpzl4hUP/iQ2 0qUMQKej4Qvf447H15qyBUUO4h2u2VvYGPkTv8Z+ODlICvhfcSKg+lsaAJffH8qH12uvpZ1zqTH NUFmNcO6aSNGl5iEWqjyVFnNHVZJfvwJ5VYklsajJWvznv6RdezqFOmE4kwFE4o0/28QJuK459B RzEct99LtTOF0XiMeVnkuO1FKZflLSeoPZOAzX5SA8rnTDrGsW3C1sp3YGT871j5szld7dhkEWK CRTcGnE6PnDuKyZ6RtumS3C3x4VAHW7HPqu5ZDtiGIMN12cdP0pdQyegItwFzCcj/Jqi9eELaRP K81+aNzkwnwewmrAxfIFcSTzlt+pzxS5RT+2M9L/PDiklq7WkNFV3o0VUbiB2+Q8PJ4DkGJIukb UIgbcWlpfx3hS/uBNcAD0tWA83QRvV3DbxOqj+NHwt2AS2xYmYCkFegPaMJxuTJnzKfcmRJQYo5 IKOj/a012EdNj46WoiKsZXpw/hfZlBMtUllHTAyK31SNffKo8KdhMoSWjpwOGY8y7sdX4AoiPTu McDdbkfz80wvFLsT2k4ethoBfLN8hujflSfHQtLHSOptAXAvDiSk2Q0YMT14blfX/4W/sfuMTZf 1k79ADoOqb3qMYl6roPO/YU7zVJEWBa5BaeYhTam+GgZoR2+5tGZ26NdmbWaXj+C4ciDjEa9iuX ye/Hq X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.6 on 10.30.177.95 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301448429158501 Add gtk_display_cleanup() to properly tear down GTK display state: remove console and mouse notifiers, unregister clipboard peer, destroy the main window and virtual consoles. Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-22-4656aec3398d@redhat.com> --- include/ui/gtk.h | 2 ++ ui/gtk-clipboard.c | 15 +++++++++++++++ ui/gtk.c | 20 +++++++++++++++++++- 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/include/ui/gtk.h b/include/ui/gtk.h index 3e6ce3cb48c..f4c8e6a9f00 100644 --- a/include/ui/gtk.h +++ b/include/ui/gtk.h @@ -140,6 +140,7 @@ struct GtkDisplayState { =20 GdkCursor *null_cursor; Notifier mouse_mode_notifier; + VMChangeStateEntry *vmse; gboolean free_scale; gboolean keep_aspect_ratio; =20 @@ -225,6 +226,7 @@ int gd_gl_area_make_current(DisplayGLCtx *dgc, =20 /* gtk-clipboard.c */ void gd_clipboard_init(GtkDisplayState *gd); +void gd_clipboard_cleanup(GtkDisplayState *gd); =20 void gd_update_scale(VirtualConsole *vc, int ww, int wh, int fbw, int fbh); =20 diff --git a/ui/gtk-clipboard.c b/ui/gtk-clipboard.c index ea9444be70f..476e6b8303c 100644 --- a/ui/gtk-clipboard.c +++ b/ui/gtk-clipboard.c @@ -235,3 +235,18 @@ void gd_clipboard_init(GtkDisplayState *gd) g_signal_connect(gd->gtkcb[QEMU_CLIPBOARD_SELECTION_SECONDARY], "owner-change", G_CALLBACK(gd_owner_change), gd); } + +void gd_clipboard_cleanup(GtkDisplayState *gd) +{ + if (!gd->cbpeer.name) { + return; + } + qemu_clipboard_peer_unregister(&gd->cbpeer); + g_signal_handlers_disconnect_by_data( + gd->gtkcb[QEMU_CLIPBOARD_SELECTION_CLIPBOARD], gd); + g_signal_handlers_disconnect_by_data( + gd->gtkcb[QEMU_CLIPBOARD_SELECTION_PRIMARY], gd); + g_signal_handlers_disconnect_by_data( + gd->gtkcb[QEMU_CLIPBOARD_SELECTION_SECONDARY], gd); + gd->cbpeer.name =3D NULL; +} diff --git a/ui/gtk.c b/ui/gtk.c index 2ee826b56fb..dfef1b10fe3 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -2505,6 +2505,7 @@ static void gd_create_menus(GtkDisplayState *s, Displ= ayOptions *opts) } =20 =20 +static GtkDisplayState *gtk_display_state; static gboolean gtkinit; =20 static void gtk_display_init(DisplayState *ds, DisplayOptions *opts) @@ -2523,6 +2524,7 @@ static void gtk_display_init(DisplayState *ds, Displa= yOptions *opts) } assert(opts->type =3D=3D DISPLAY_TYPE_GTK); s =3D g_malloc0(sizeof(*s)); + gtk_display_state =3D s; s->opts =3D opts; =20 theme =3D gtk_icon_theme_get_default(); @@ -2560,7 +2562,7 @@ static void gtk_display_init(DisplayState *ds, Displa= yOptions *opts) =20 s->mouse_mode_notifier.notify =3D gd_mouse_mode_change; qemu_add_mouse_mode_change_notifier(&s->mouse_mode_notifier); - qemu_add_vm_change_state_handler(gd_change_runstate, s); + s->vmse =3D qemu_add_vm_change_state_handler(gd_change_runstate, s); =20 gtk_window_set_icon_name(GTK_WINDOW(s->window), "qemu"); =20 @@ -2681,10 +2683,26 @@ static void early_gtk_display_init(DisplayOptions *= opts) #endif } =20 +static void gtk_display_cleanup(void) +{ + GtkDisplayState *s =3D gtk_display_state; + + if (!s) { + return; + } + qemu_del_vm_change_state_handler(s->vmse); + qemu_remove_mouse_mode_change_notifier(&s->mouse_mode_notifier); + gd_clipboard_cleanup(s); + g_clear_pointer(&s->window, gtk_widget_destroy); + g_clear_object(&s->null_cursor); + g_clear_pointer(>k_display_state, g_free); +} + static QemuDisplay qemu_display_gtk =3D { .type =3D DISPLAY_TYPE_GTK, .early_init =3D early_gtk_display_init, .init =3D gtk_display_init, + .cleanup =3D gtk_display_cleanup, .vc =3D "vc", }; =20 --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301464; cv=none; d=zohomail.com; s=zohoarc; b=fHKzWddofE+bJuB4lAi3B15RmklXxlNQXqT+12DetVw6WuIxwJVnS/vL7/Itul5pENNoTljLIiJCgeqhgHo8pFWwiQOJYJvSvq82Sv8qyD6eDLrNSXsE9mLqaepNk2SOWa5FId+6MYufLsXf7Ek0OU46l0CMIXCTN6b12LgjK18= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301464; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=BoQVjC+WTHa0GDH7WkxeEaC9ZnFqa3LfuA3gPWnOsK4=; b=KnVZPcMq/7JAjlTAqHjiGWk60NcPNsy1EGsMAw/cohuVh090KaK0dJq/Xkci4rDnKBtCVaCJ7RukarjnE+bkUCGK02Ogk1DYUrwrBLqrVyZexbVUTRTyqX+W+OWCtv1pySL5erqmdCJYBODa30rP+ZmCFUn5YgyFFBkqSGJVJRI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782301464344265.0894448834084; Wed, 24 Jun 2026 04:44:24 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcM1S-0004l2-C3; Wed, 24 Jun 2026 07:44:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM17-0003g1-JA for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:43:43 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM15-0008A6-U8 for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:43:41 -0400 Received: from mx-prod-mc-01.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-447-b8Mt3R67OWKzdK6zk6wiYQ-1; Wed, 24 Jun 2026 07:43:37 -0400 Received: from mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.95]) (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-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 2D30E1955F23 for ; Wed, 24 Jun 2026 11:43:37 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 3FFAB36926; Wed, 24 Jun 2026 11:43:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301419; 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=BoQVjC+WTHa0GDH7WkxeEaC9ZnFqa3LfuA3gPWnOsK4=; b=CAF9rSdbrBIvWg+9zAV7TsHMADuG+AbazMLXA3XrFx2JVOxeht7ATKppV8VTZ6bgd+JLB/ 6bM85O/X7zgxrDFPwahNubsFnHjIN5Kn44WbZU7LeEbK4agxliOeKzXVlUNdAPFz50m+5v I+M+BKGzxmntB2lFpOjy/MSVMhgcc4Y= X-MC-Unique: b8Mt3R67OWKzdK6zk6wiYQ-1 X-Mimecast-MFC-AGG-ID: b8Mt3R67OWKzdK6zk6wiYQ_1782301417 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:45 +0400 Subject: [GIT PULL 23/35] ui/console: add console event notifier infrastructure MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-23-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=3038; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=Sdok16WnTykV6Ni+P4/d9cRAkIbyiKVJ1ig5XtWrP00=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqO8JoZy9engENe7rNbikCDWGwG87Qkf2q978Vi Qzp6ThCGciJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajvCaAAKCRDa6OEJdZac 5dOED/40O6dgyZaNXEAG8q4BFyr7kj/bCHN9I92xD+tPoTVUkLoIPn4yKMipifWVnFcQ9MCi8l4 +hlUJ1Yj4IGRMNcpV5IO4vxCXd9GIDcztOivb2XhBUmHv2zclDdYxzBI8AtAVeSMG3AZZAN+SW7 SrnUbdRWRNuKXehmzDvb1Fgxv4rZGwcPdNA4iOzuU5LFkB8KoTGas4TSBh0TrJ8s4cCCYisdGo3 Aq8yolNQKyIfZiwaMLfAmoPh7nOU0nKOcxDtWHxfiJaFAFdIfpuALOsj8fCPazAHP8aTBHocwQy vIIW1RFF4HpDV/TK1MV5mrpnLDCIKFoooMNY85nn+GeMGcCV7rft8Bio6Uj/et6xBENGdL/ujt0 PDZKZhkvmNaLUxdXQKkT06bw5VxmHanCWqvJXh/Jz0WQUADpHZozi76qzfcQopZtSAMldTZ8Esn sbUq0zSDBeFhizVzscaD9Zi6d4dVJlK0yO9R8VlJ3LJ0MSS/SZaOOwsU5TrLB9QL3onBHXPHNmb 2PAZEIp+Iv6ZFVODl2PtJBDULF5LQkCjRxiAaCTHooXpLDu8hPNfG6E4hzhfIigd7qyIddpfXMO 5PdxYo56aBK2Yxhasz24HsLKELtHfCz3sgm8eskrELSwwM0ouP4jirWXCtcxnu7e8gmX76R2AfT LzwZDgqCCYY9POg== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.6 on 10.30.177.95 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301466477158500 Add a NotifierList to DisplayState so display backends can be notified when consoles are added or removed at runtime. No events are fired yet, that follows in the next commits. Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-23-4656aec3398d@redhat.com> --- include/ui/console.h | 18 ++++++++++++++++++ ui/console.c | 23 +++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/include/ui/console.h b/include/ui/console.h index 5322c56009d..29bf7228883 100644 --- a/include/ui/console.h +++ b/include/ui/console.h @@ -415,6 +415,24 @@ const char *qemu_display_get_vc(DisplayOptions *opts); void qemu_display_cleanup(void); void qemu_display_help(void); =20 +/* + * Console notifications: + * Handlers must be idempotent, it may notify multiple times. + */ +typedef enum { + QEMU_CONSOLE_ADDED, + QEMU_CONSOLE_REMOVED, +} QemuConsoleEventType; + +typedef struct QemuConsoleEvent { + QemuConsoleEventType type; + QemuConsole *con; +} QemuConsoleEvent; + +void qemu_console_add_notifier(Notifier *notifier); +void qemu_console_remove_notifier(Notifier *notifier); +void qemu_console_notify(QemuConsoleEventType type, QemuConsole *con); + /* vnc.c */ void vnc_display_add_client(const char *id, int csock, bool skipauth); int vnc_display_password(const char *id, const char *password, Error **err= p); diff --git a/ui/console.c b/ui/console.c index 1fe3e3a3a6c..76851bc129d 100644 --- a/ui/console.c +++ b/ui/console.c @@ -70,6 +70,7 @@ struct DisplayState { bool refreshing; =20 QLIST_HEAD(, DisplayChangeListener) listeners; + NotifierList console_notifiers; }; =20 static DisplayState *display_state; @@ -84,6 +85,16 @@ static bool console_compatible_with(QemuConsole *con, static QemuConsole *qemu_graphic_console_lookup_unused(void); static void dpy_set_ui_info_timer(void *opaque); =20 +void qemu_console_notify(QemuConsoleEventType type, QemuConsole *con) +{ + DisplayState *ds =3D get_alloc_displaystate(); + QemuConsoleEvent event =3D { + .type =3D type, + .con =3D con, + }; + notifier_list_notify(&ds->console_notifiers, &event); +} + static void gui_update(void *opaque) { uint64_t interval =3D GUI_REFRESH_INTERVAL_IDLE; @@ -1056,10 +1067,22 @@ static DisplayState *get_alloc_displaystate(void) { if (!display_state) { display_state =3D g_new0(DisplayState, 1); + notifier_list_init(&display_state->console_notifiers); } return display_state; } =20 +void qemu_console_add_notifier(Notifier *notifier) +{ + DisplayState *ds =3D get_alloc_displaystate(); + notifier_list_add(&ds->console_notifiers, notifier); +} + +void qemu_console_remove_notifier(Notifier *notifier) +{ + notifier_remove(notifier); +} + /* * Called by main(), after creating QemuConsoles * and before initializing ui (sdl/vnc/...). --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301609; cv=none; d=zohomail.com; s=zohoarc; b=mGQzKXypwxmGTUd0W+8lLI7pwHE6QF137xw8LaSu9NOp0/SaSMKpmwdMwjSlTDJsrIJjmTqriNflDrmXH5/w2we4dL74LW3FqdyJZ/b+adxOMxbPKAHWt8XKrSxx6ielBQC3bhWK54FZuqLTIqSHMZ1Sb74Z8g8gzp6zIQYYMOc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301609; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=VAL/ZeGpAeKjHQz8lnwn6zmTPAbMzg3ySLg+WHFGrWk=; b=P//Z3+NN1npi6gnH/HCQ7Wimqa8PWwqAxwDFJSZRMtuQYZMD+iqH0Z9LsIz5f/KgXHqe5lpKQ+h9ShkKWK3kWO6mjahjuxJS+KJrswQr1ZrF+C9WRyZnNLhKG/IeNhjmQb82zS9ua5NTB6Ol+AqcSMa3qzpWE3C2UD5r9kLECsI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782301609940495.47330339114; Wed, 24 Jun 2026 04:46:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcM1R-0004ad-7z; Wed, 24 Jun 2026 07:44:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM1E-00044f-Uf for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:43:50 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM1D-0008Bp-CN for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:43:48 -0400 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-637-6CEZ6F7NMbGOcasg9R2whw-1; Wed, 24 Jun 2026 07:43:43 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (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 7D38E1801F09 for ; Wed, 24 Jun 2026 11:43:42 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 204B3195609E; Wed, 24 Jun 2026 11:43:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301426; 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=VAL/ZeGpAeKjHQz8lnwn6zmTPAbMzg3ySLg+WHFGrWk=; b=I4ylJF6ETT3+8y+IvGgNaLTvLSmMqmnfkkljHrvrWD76VuPCzYVZ/AKmtyq14rQf0t2FeM AmnDBDcyUjnYYUDPGo2bBanFKsAOfUFXi48yKNM0QMrAQLTWknOQSGVc5AQo3NuUppYup7 OfDAtT4Ee0Z9/vq+QSEIUVamM4veVEo= X-MC-Unique: 6CEZ6F7NMbGOcasg9R2whw-1 X-Mimecast-MFC-AGG-ID: 6CEZ6F7NMbGOcasg9R2whw_1782301422 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:46 +0400 Subject: [GIT PULL 24/35] ui/console: fire console ADDED/REMOVED notifications MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-24-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=1430; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=rOBUfopW4WHLebYreqzIPIp0XyUwE3HTsA+4ZujwCcI=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqO8JoAdcwD+SicS53ND+ytTLQ4/LRhJdhhz2uc dY3n1aZ862JAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajvCaAAKCRDa6OEJdZac 5RGcD/92FxS8HZqtnxh0WysHzPxmyQzV63lAM5EAPZk+ewJ30AuNXJyREqMFTbcofmHaOLFyHyG 5gkywTF5OyrV1cLad6L8uzGQX/LnSaE5LLXjxNjqy3C6wTynPcwsxFi8WH/NsB0WGmN9zaqucXy ESgN1862ghjK4oPs9Fg5JyawJrmGQTZ+DYhErkuegjrVsZ1fDuzyEbvfn6Y0UJV7qVH8x/wO+4j JzKR7TT6u782JieYCZkhsYGaYDu/NRIm7ekJHRu4XBLS+9BuR6g5WFbCL1Untq0exVhF0Bz03zq HW1BuqoOaEPlr1GGK+JGNrwtzFzIwYJgG0WUUC7g90Y4mVoVBNthSAOI7a0SqMTVK5oWEIWhI6a xVWrL4K31Sy2gAVAy9dktvV7G/BUOvdqkx3ilr9QNJxCfZEK7/84oZJMfbKCJSrMlYXifqYejDe QPgVJ9hHlUHhG1Fm7WVRA4F6F536aeeWlUC1kpjd5uYMAlXClpQzTRC3L+axYJk4gvWmMlrUMMn 8JEGbkV3G8IAuEOYmKzukBqE4RrHaYbDLycgQRz0ZUJqdnLv41ZioMsn/I9juHh8Pj6u8hxMFtu pQZT4hrvRew1VnrM73uYckPKdnQ8A5wUhqRMBejnAMMMzdwWLUdlABHjVHFVG+H10fH/w8tSoYH NzSAs04EAOBJ0ew== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com 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, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301611483158500 Fire CONSOLE_ADDED at the end of graphic_console_init() and CONSOLE_REMOVED at the start of graphic_console_close(), so display backends can react to console hotplug/unplug events. REMOVED fires before the device link is cleared and before the placeholder surface swap, so handlers can unregister their DCL while the console is still in a known state. Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-24-4656aec3398d@redhat.com> --- ui/console.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ui/console.c b/ui/console.c index 76851bc129d..975eaf15706 100644 --- a/ui/console.c +++ b/ui/console.c @@ -1142,6 +1142,7 @@ QemuConsole *qemu_graphic_console_create(DeviceState = *dev, uint32_t head, =20 surface =3D qemu_create_placeholder_surface(width, height, noinit); qemu_console_set_surface(s, surface); + qemu_console_notify(QEMU_CONSOLE_ADDED, s); return s; } =20 @@ -1158,6 +1159,7 @@ void qemu_graphic_console_close(QemuConsole *con) int height =3D qemu_console_get_height(con, 480); =20 trace_console_gfx_close(con->index); + qemu_console_notify(QEMU_CONSOLE_REMOVED, con); object_property_set_link(OBJECT(con), "device", NULL, &error_abort); qemu_graphic_console_set_hwops(con, &unused_ops, NULL); timer_del(con->ui_timer); --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301567; cv=none; d=zohomail.com; s=zohoarc; b=nVhZmxxINM9f8uWvaYWK3x65aipwy03ruMXg2SbOau1lo0PqsdeoQ18CfMDyuyNHcr1IjKJl23/K7R/0kGaG6Gr2SSg8nF70AV4o4zrpH6LhDVEPCvT9hxBB0Qxthl1Y1VA2yFYITFSPqxeb4n/H8MguR+tYRovHGs/Qc4cWfsk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301567; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=bV+JszmrvNfV8KS2Z0d82nA11LCXYNDlPGROWbfg65g=; b=ABfYcTYDqkcJtM8TAPA147Tsg5ysbPfCgapzilocZ6GvJCYlQ4XOM0hDjteBfM1XFIbhFpAgau0aLOFuexVbrvwNVtHI1hxrJi75IM8wynXWY6eiXREgNgvor+7u/G+yEB0IgzPE5398+BA8UdsHOPXTMrmLPmfsE2Ym13b9kpk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782301567252263.67136579705846; Wed, 24 Jun 2026 04:46:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcM1R-0004fZ-PM; Wed, 24 Jun 2026 07:44:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM1I-0004Do-Sc for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:43:54 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM1H-0008Cl-Dp for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:43:52 -0400 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-592-4F5Ey6OoPQuy9iZllpqcbQ-1; Wed, 24 Jun 2026 07:43:48 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (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 E5873180064B for ; Wed, 24 Jun 2026 11:43:47 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id A9209195609E; Wed, 24 Jun 2026 11:43:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301430; 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=bV+JszmrvNfV8KS2Z0d82nA11LCXYNDlPGROWbfg65g=; b=NYwQCX65kEWt6OrvivLegbxCJ2Nxe41BdwcIyr49JQ6mJ/fblNLdHPd6cPGa8OKiEYV80j 1Hz4mhvjMvsv44uNsaG4J42yNXlk+6zKr93yyHX9wTQUMA4ANoF3TG2Z3O6beX27mA8AVU zKmxg0dO8uV84AzcnUH7NBjFbnqZ3zE= X-MC-Unique: 4F5Ey6OoPQuy9iZllpqcbQ-1 X-Mimecast-MFC-AGG-ID: 4F5Ey6OoPQuy9iZllpqcbQ_1782301428 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:47 +0400 Subject: [GIT PULL 25/35] ui/console-vc: fire ADDED/REMOVED notifications MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-25-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=1651; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=bVI4QNS/ekAdRQLw5pAosXwCaMQhDLh1E4BCtCQXSyw=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqO8JoBqQJQycKYKF1Oma9e+13WK431l02dYXSF 4OPvhscoVWJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajvCaAAKCRDa6OEJdZac 5Un8EACQ27CjECcATryD+4M209mebOQizw0FJlJGPSUHu00KhnlsE67RCZH3GjQEvBn8Edx+0jd jlXptaS9iB7zN86HjvB8wigo+9f+7ZDhusXsLkMrXgwTCfh7UaMKkl36OrFmAy0wDJYmv+8BUDL Qjy/U9PFvC3xu6eUABtz/gYflBIohJ9xz5659EHV/ngYPsAva3JEPOVckyFEWrRQCTTDeSPlShi f/d7/R5KjlTxjkNQ4pJFbixjf20XQ2y8vqbli8lvde0EKJUkNK1eqVA6B7oBh0xHx9PmLw2Z280 EGeDqI28gZ60ONQPaDadqB080kcGeh4ZWHlhR8g4U+4On+MSzPP4su2kMxZmBpWRNspRxWBU4yF kgbQR6pQrvhyI5CBTXO2SAPrYR42TfqcwWmFs1MDhq7h6V3rJu7wPcfZJPWaa2SYp4HsPkoX1Sg uI02rWpC0OZQl/wUfMZkTIVgjho7I/bZRN/273Seus5oU4wuFoCKppEN2BiV4C9HCARtPtdX4gz gy8KMTgEUDMYWQuQyB46dqJfF0IAXBW+8Niu0ZrDX75GfKlBMQaf3/RqvyoxUcdr18jGwVaKvuK x7ad6ILfd6ctBon6a582YkwyUqUZlK6SZdmpVcTEqwMg4lCptxdg9mIT2xR501WFNg/9S0AVVWK kTFOUlWo9oXav4Q== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com 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, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301569224158500 Fire CONSOLE_ADDED when the chardev is opened. Fire CONSOLE_REMOVED in char_vc_finalize() before dropping the console reference, so the console is still in a valid state when listeners handle the event. Also fixes a console object leak by adding the missing object_unref(). Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-25-4656aec3398d@redhat.com> --- ui/console-vc.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/ui/console-vc.c b/ui/console-vc.c index 828e78c41ea..53d9e9d39b3 100644 --- a/ui/console-vc.c +++ b/ui/console-vc.c @@ -255,6 +255,7 @@ static bool vc_chr_open(Chardev *chr, ChardevBackend *b= ackend, Error **errp) } =20 qemu_chr_be_event(chr, CHR_EVENT_OPENED); + qemu_console_notify(QEMU_CONSOLE_ADDED, QEMU_CONSOLE(s)); return true; } =20 @@ -327,12 +328,24 @@ static void char_vc_init(Object *obj) vc->encoding =3D CHARDEV_VC_ENCODING_UTF8; } =20 +static void char_vc_finalize(Object *obj) +{ + VCChardev *vc =3D VC_CHARDEV(obj); + QemuConsole *con =3D QEMU_CONSOLE(vc->console); + + if (con) { + qemu_console_notify(QEMU_CONSOLE_REMOVED, con); + object_unref(con); + } +} + static const TypeInfo char_vc_type_info =3D { .name =3D TYPE_CHARDEV_VC, .parent =3D TYPE_CHARDEV, .instance_size =3D sizeof(VCChardev), .instance_init =3D char_vc_init, .instance_post_init =3D object_apply_compat_props, + .instance_finalize =3D char_vc_finalize, .class_init =3D char_vc_class_init, }; =20 --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301462; cv=none; d=zohomail.com; s=zohoarc; b=UdcGwL283LqEt8Wl8HUqjIQoYXkXQBJKYMvHrocrd6kiHtQSjMojL82Q8Z7vhhbC0j/70lhgfpAToHN/F1ra3KFmia+OipuWcwQERcZRQA+DQUulJmSkJWCx4skyTKhXWp8+KYErGKOyyZ6QhhhdKGByaiXy06VuqBHnZuthXyc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301462; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=wlnRelJYZ7N6V0C9oUj8LEcdLFQgp3DNoWkL/SrARDY=; b=llhIrUEjtWFRz9dzDCbYDocStQBPtrmNO8I/GWisFPkRd34DlkrENSUqaHQLAsGogrFhHJbbT+jCxEAuPAwfMVxzgI4Da0Q6Qlln0g2iRzeNyCijs9ihX1inlxWBj41P0pHE2nhk8J3w44XIYvy69qsS+R07F4ffFXVrO5NOgQs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782301462933543.2487234751814; Wed, 24 Jun 2026 04:44:22 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcM1T-0004vO-AK; Wed, 24 Jun 2026 07:44:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM1O-0004Sv-NG for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:44:00 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM1M-0008Ds-O1 for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:43:58 -0400 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-482-wja1q_YiNQGWymlD4muf6Q-1; Wed, 24 Jun 2026 07:43:54 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (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 1551E180065B for ; Wed, 24 Jun 2026 11:43:54 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id D17EE3000B54; Wed, 24 Jun 2026 11:43:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301436; 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=wlnRelJYZ7N6V0C9oUj8LEcdLFQgp3DNoWkL/SrARDY=; b=VgY+AGpQKFcs61pEO8OSK809Rvp8bHpAxUjyt6qn6l2iUBv3JoUmF4Q1sl1KtaZwvt1P+u SCsyhNYZVwvDeCEwJRkiH6xvgrwFW12QvkaafSUH9kZmbkKNPJPI10kQFd8Zuz4nE4CS1s zoV3lltLqqw3vE+eS7F4Q1sL0dvk9TM= X-MC-Unique: wja1q_YiNQGWymlD4muf6Q-1 X-Mimecast-MFC-AGG-ID: wja1q_YiNQGWymlD4muf6Q_1782301434 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:48 +0400 Subject: [GIT PULL 26/35] ui/gtk: convert VirtualConsole storage from fixed array to GPtrArray MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-26-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=7551; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=+xAMyavIGgCohLyjcKrLBT2Gg8rDwRVJE6wf71fNNr4=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqO8JowfmbPAzg1LBhFT4XUuDcAOiWgi8o6YeC5 nV9mproLC2JAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajvCaAAKCRDa6OEJdZac 5TRwD/4xmj7r+n7P2q6OUej4+Ksrd0yJLVjTbF/Ni5qhRwLxlbfB818LI1kWWFyZdbt5h1WS7vZ IfYV8iq0Qqqnr7Ix8cw5PARt8zLl4YhW5lLgz5BWgyAT10xP+27hc+I69wh4GadG40zPNHCyYQw v9mCt0pBX4Nw94Eh2iiimDSXQcyTR4k3ACjdqjxI2rTV8fmfgQrhDvmc1V+8m0As3MS2RDcv24X sh0auWaDu4iUeypWLrrluotSQLyfZwOhVM03URqz0DodRqJKjtRotQkTYWrgZVM/FPVcZ5pa1Ah aDyo00VmPVbpXpqxqfi4paFiXq+7LxNapjQY9OLMM8YPzQ02ZH20HRRfNBqG2F9VkxV9k6WytRk gIWUL7IAK4yYZ3BcPlDkT435sFr1N+l1SyiBtJiMwhaHtUsee8e4Csfz26+8q6cwsPTwuzij+uA FWFlXPG9vspqqeaKfAypKt1HR5eX2MAX7vB7kxSqPRwAf14hYtvL0rjgsko9UElM4aOSXiODIww 14x8gc9Oo8LbrAkxG3m8gg0stdHQ5EghTgBplbmVVpu7volhjS1EiSApEgvCJt/S7mc6D8ssI4i HTpmWOdeuIu2RZpvPNe7tu3BIonjr57p6i370uSl86I/k3EjjH8Vbwu0IMUXrZr5/qTKrroghaH MKOiyW8us5Od8kg== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com 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, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301464584158500 Replace the fixed-size vc[MAX_VCS] with GPtrArray. This is a preparatory refactoring for console hotplug support, which needs to add/remove VCs dynamically. Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-26-4656aec3398d@redhat.com> --- include/ui/gtk.h | 3 +- ui/gtk.c | 108 +++++++++++++++++++++++++++++++++++++++++++--------= ---- 2 files changed, 87 insertions(+), 24 deletions(-) diff --git a/include/ui/gtk.h b/include/ui/gtk.h index f4c8e6a9f00..fb60cbfda5d 100644 --- a/include/ui/gtk.h +++ b/include/ui/gtk.h @@ -118,8 +118,7 @@ struct GtkDisplayState { GtkWidget *grab_item; GtkWidget *grab_on_hover_item; =20 - int nb_vcs; - VirtualConsole vc[MAX_VCS]; + GPtrArray *vcs; =20 GtkWidget *show_tabs_item; GtkWidget *untabify_item; diff --git a/ui/gtk.c b/ui/gtk.c index dfef1b10fe3..b4dcdcd9a44 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -150,8 +150,8 @@ static VirtualConsole *gd_vc_find_by_menu(GtkDisplaySta= te *s) VirtualConsole *vc; gint i; =20 - for (i =3D 0; i < s->nb_vcs; i++) { - vc =3D &s->vc[i]; + for (i =3D 0; i < s->vcs->len; i++) { + vc =3D g_ptr_array_index(s->vcs, i); if (gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM(vc->menu_item))) { return vc; @@ -165,8 +165,11 @@ static VirtualConsole *gd_vc_find_by_page(GtkDisplaySt= ate *s, gint page) VirtualConsole *vc; gint i, p; =20 - for (i =3D 0; i < s->nb_vcs; i++) { - vc =3D &s->vc[i]; + if (!s->vcs) { + return NULL; + } + for (i =3D 0; i < s->vcs->len; i++) { + vc =3D g_ptr_array_index(s->vcs, i); p =3D gtk_notebook_page_num(GTK_NOTEBOOK(s->notebook), vc->tab_ite= m); if (p =3D=3D page) { return vc; @@ -247,8 +250,8 @@ static void gd_update_caption(GtkDisplayState *s) gtk_window_set_title(GTK_WINDOW(s->window), title); g_free(title); =20 - for (i =3D 0; i < s->nb_vcs; i++) { - VirtualConsole *vc =3D &s->vc[i]; + for (i =3D 0; i < s->vcs->len; i++) { + VirtualConsole *vc =3D g_ptr_array_index(s->vcs, i); =20 if (!vc->window) { continue; @@ -357,7 +360,7 @@ static void gtk_release_modifiers(GtkDisplayState *s) { VirtualConsole *vc =3D gd_vc_find_current(s); =20 - if (vc->type !=3D GD_VC_GFX || + if (!vc || vc->type !=3D GD_VC_GFX || !qemu_console_is_graphic(vc->gfx.dcl.con)) { return; } @@ -702,8 +705,8 @@ static void gd_mouse_mode_change(Notifier *notify, void= *data) gd_ungrab_pointer(s); } } - for (i =3D 0; i < s->nb_vcs; i++) { - VirtualConsole *vc =3D &s->vc[i]; + for (i =3D 0; i < s->vcs->len; i++) { + VirtualConsole *vc =3D g_ptr_array_index(s->vcs, i); gd_update_cursor(vc); } } @@ -2114,9 +2117,10 @@ static void gd_vcs_init(GtkDisplayState *s, GSList *= group, int i; =20 for (i =3D 0; i < nb_vcs; i++) { - VirtualConsole *vc =3D &s->vc[s->nb_vcs]; - group =3D gd_vc_vte_init(s, vc, vcs[i], s->nb_vcs, group, view_men= u); - s->nb_vcs++; + VirtualConsole *vc =3D g_new0(VirtualConsole, 1); + g_ptr_array_add(s->vcs, vc); + group =3D gd_vc_vte_init(s, vc, vcs[i], s->vcs->len - 1, + group, view_menu); } } #endif /* CONFIG_VTE */ @@ -2441,13 +2445,14 @@ static GtkWidget *gd_create_menu_view(GtkDisplaySta= te *s, DisplayOptions *opts) =20 /* gfx */ for (vc =3D 0;; vc++) { + VirtualConsole *v; con =3D qemu_console_lookup_by_index(vc); if (!con) { break; } - group =3D gd_vc_gfx_init(s, &s->vc[vc], con, - vc, group, view_menu); - s->nb_vcs++; + v =3D g_new0(VirtualConsole, 1); + g_ptr_array_add(s->vcs, v); + group =3D gd_vc_gfx_init(s, v, con, vc, group, view_menu); } =20 #if defined(CONFIG_VTE) @@ -2505,6 +2510,64 @@ static void gd_create_menus(GtkDisplayState *s, Disp= layOptions *opts) } =20 =20 +static void gd_vc_free(void *p) +{ + VirtualConsole *vc =3D p; + + switch (vc->type) { + case GD_VC_GFX: + qemu_console_unregister_listener(&vc->gfx.dcl); +#if defined(CONFIG_OPENGL) + if (display_opengl) { + qemu_console_set_display_gl_ctx(vc->gfx.dcl.con, NULL); + } + if (vc->gfx.ectx) { + eglMakeCurrent(qemu_egl_display, vc->gfx.esurface, + vc->gfx.esurface, vc->gfx.ectx); + } else if (gtk_use_gl_area) { + gtk_gl_area_make_current(GTK_GL_AREA(vc->gfx.drawing_area)); + } + if (vc->gfx.gls) { + surface_gl_destroy_texture(vc->gfx.gls, vc->gfx.ds); + qemu_gl_fini_shader(vc->gfx.gls); + } + egl_fb_destroy(&vc->gfx.guest_fb); + egl_fb_destroy(&vc->gfx.win_fb); + egl_fb_destroy(&vc->gfx.cursor_fb); + if (vc->gfx.esurface) { + eglDestroySurface(qemu_egl_display, vc->gfx.esurface); + } + if (vc->gfx.ectx) { + eglDestroyContext(qemu_egl_display, vc->gfx.ectx); + } +#endif + qkbd_state_free(vc->gfx.kbd); + if (vc->gfx.surface) { + cairo_surface_destroy(vc->gfx.surface); + } + if (vc->gfx.convert) { + pixman_image_unref(vc->gfx.convert); + } + break; + case GD_VC_VTE: +#ifdef CONFIG_VTE + fifo8_destroy(&vc->vte.out_fifo); +#endif + break; + } + + if (vc->window) { + gtk_widget_destroy(vc->window); + } else if (vc->tab_item) { + gtk_widget_destroy(vc->tab_item); + } + if (vc->menu_item) { + gtk_widget_destroy(vc->menu_item); + } + g_free(vc->label); + g_free(vc); +} + static GtkDisplayState *gtk_display_state; static gboolean gtkinit; =20 @@ -2525,6 +2588,7 @@ static void gtk_display_init(DisplayState *ds, Displa= yOptions *opts) assert(opts->type =3D=3D DISPLAY_TYPE_GTK); s =3D g_malloc0(sizeof(*s)); gtk_display_state =3D s; + s->vcs =3D g_ptr_array_new_with_free_func(gd_vc_free); s->opts =3D opts; =20 theme =3D gtk_icon_theme_get_default(); @@ -2582,13 +2646,10 @@ static void gtk_display_init(DisplayState *ds, Disp= layOptions *opts) =20 gtk_widget_show_all(s->window); =20 - for (idx =3D 0;; idx++) { - QemuConsole *con =3D qemu_console_lookup_by_index(idx); - if (!con) { - break; - } - if (s->vc[idx].type =3D=3D GD_VC_GFX) { - gtk_widget_realize(s->vc[idx].gfx.drawing_area); + for (idx =3D 0; idx < s->vcs->len; idx++) { + VirtualConsole *v =3D g_ptr_array_index(s->vcs, idx); + if (v->type =3D=3D GD_VC_GFX) { + gtk_widget_realize(v->gfx.drawing_area); } } =20 @@ -2693,6 +2754,9 @@ static void gtk_display_cleanup(void) qemu_del_vm_change_state_handler(s->vmse); qemu_remove_mouse_mode_change_notifier(&s->mouse_mode_notifier); gd_clipboard_cleanup(s); + g_signal_handlers_disconnect_by_func(s->notebook, + G_CALLBACK(gd_change_page), s); + g_clear_pointer(&s->vcs, g_ptr_array_unref); g_clear_pointer(&s->window, gtk_widget_destroy); g_clear_object(&s->null_cursor); g_clear_pointer(>k_display_state, g_free); --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301464; cv=none; d=zohomail.com; s=zohoarc; b=Z3nZjka/3DGvUuCzWKhWmMdZctt9QX0mUx0SnCUQyEkaEmX3mm3RrQdgIMoAl4TDsT4pkbZtKQ6PskmqFuBiVQqbsdU1GguIh9VzpAWm7dfinsGIpzugYoMHLZijH7YYCxO0g4Fge7XzY616fsy67GCO5DQ7Y+xzber9Dlsm/VE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301464; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=rE0rbc1W8WQri077mYJc24bwE+yLX9BU7lf3LJ2qwBw=; b=g6mKZkRqBkw7R/RP2C8JZyjIolGNVaeBOfkJyRR3tekPUvlbxtc38CFMy3bcoO6XuTzHRlFFWHnRAiqtJqEeLPs4ORW1CMA0hX5nRRjXvHDqAhI8+u7nhzQv87eSssu7BO9kxfO6EoPSPDSsoWwBgUCJCjxJPkgM9lOY7bTf1Ps= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782301464129290.9839114721781; Wed, 24 Jun 2026 04:44:24 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcM1Y-0005GS-AF; Wed, 24 Jun 2026 07:44:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM1T-0004xr-N7 for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:44:03 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM1S-0008F3-3h for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:44:03 -0400 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-520-3prqVybdMvCHyfv-LDsfRA-1; Wed, 24 Jun 2026 07:44:00 -0400 Received: from mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.95]) (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 38E9B1955D9C for ; Wed, 24 Jun 2026 11:43:59 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 05B743691F; Wed, 24 Jun 2026 11:43:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301441; 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=rE0rbc1W8WQri077mYJc24bwE+yLX9BU7lf3LJ2qwBw=; b=SsDKNbpSr2TQPccgF5yhlZS9W0c6kulZdq75x0jlY00X7Q0QyDRRD/1+e30+ThMkoqIGeB J8bPAZvb4ItSpK7sd2/Mze5SBoAoQ1K+pcN1TbOkadaFuGQHv3xF14Z0vPA6H5hjwRZ0Bo 0AJPfO8Ib3OkRjvjQNxzJhL82GPosGg= X-MC-Unique: 3prqVybdMvCHyfv-LDsfRA-1 X-Mimecast-MFC-AGG-ID: 3prqVybdMvCHyfv-LDsfRA_1782301439 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:49 +0400 Subject: [GIT PULL 27/35] ui/gtk: move global display settings out of per-console init MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-27-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=3212; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=ZUBXtPJlX2OWT/sTPMuuEumHPHaM//93HxlNryQXaXc=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqO8Jo0WC1H/Z/vvRGLcW+JX0iPRosPS5cyDkQ4 aG/Ot9vsqOJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajvCaAAKCRDa6OEJdZac 5ULHD/0V0Ll1o2kLD/QeAbxm3QxmukVw+uKkgOnaskRbvc5WBj04gxZXn0q/jXDzWVryxj3/gGO E8vgSD3CXJKVr2efRImaZ7BPJcqk7+VJu8/6jfVhaeE/bNEOrTbmC9/kT5kf6dF7HkaQN7tAa28 iEnDfmTTEdvobkpkno/Abd7H4af3GRp3bcV6P8xj8UBi0LWYBxSXzT0vkPXTxRZcve9h1Y0hriU SdaN/UIgdPMDqNmrDHnItohKvtctLVw4DzEjGng72TY/m/RLS8DYRJpxXSy8iowdYbndfTOOfyL YMKVcY7uEIkBGFdWba/IzVSFzb1Fkp4JX+4yR9Y46uu9vgCNuxZZuJxU2YjH5G3GF2WhwxDENkq X/G/eOIpPsaUbIOmrK2sdnWabcNqT1HnzGiUAae6WGOUKd8q9ss3CuYDmTL3WTtbbr5SSTJshWs 6HlIZeaz8Jqz7m25JOY0Q6SwiVSgg+JCi/nVInEZOABIjfwUeAg03GoaQWECDnD9xU2tVaf/Ogi b8Xksmz3o3MYV7jyESZvDBpMsT6EmR2lmjxVnbiztldq5OQg9YlM1S7tAakknolVZqdsxJZOhKB vgrxo/c9CHYk2eFJNxEC/VPImgGII/sAYYbIarkTHwOnreBajvgxkAQLP4dbywI+eTbok7y5T2f NhwWXrf1m79z9xA== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.6 on 10.30.177.95 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301464504158500 Move zoom_to_fit, keep_aspect_ratio and touch_slots initialisation from gd_vc_gfx_init() to gd_create_menu_view(). These are global display settings that should be set once after all consoles are created, not repeated on every per-console init (where the last iteration's values silently win). Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-27-4656aec3398d@redhat.com> --- ui/gtk.c | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/ui/gtk.c b/ui/gtk.c index b4dcdcd9a44..929e4cf43f7 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -2269,8 +2269,6 @@ static GSList *gd_vc_gfx_init(GtkDisplayState *s, Vir= tualConsole *vc, GSList *group, GtkWidget *view_menu) { const DisplayChangeListenerOps *ops =3D &dcl_ops; - bool zoom_to_fit =3D false; - int i; =20 vc->label =3D qemu_console_get_label(con); vc->s =3D s; @@ -2350,26 +2348,6 @@ static GSList *gd_vc_gfx_init(GtkDisplayState *s, Vi= rtualConsole *vc, gd_connect_vc_gfx_signals(vc); group =3D gd_vc_menu_init(s, vc, idx, group, view_menu); =20 - if (qemu_console_ui_info_supported(vc->gfx.dcl.con)) { - zoom_to_fit =3D true; - } - if (s->opts->u.gtk.has_zoom_to_fit) { - zoom_to_fit =3D s->opts->u.gtk.zoom_to_fit; - } - if (zoom_to_fit) { - gtk_menu_item_activate(GTK_MENU_ITEM(s->zoom_fit_item)); - s->free_scale =3D true; - } - - s->keep_aspect_ratio =3D true; - if (s->opts->u.gtk.has_keep_aspect_ratio) - s->keep_aspect_ratio =3D s->opts->u.gtk.keep_aspect_ratio; - - for (i =3D 0; i < INPUT_EVENT_SLOTS_MAX; i++) { - struct touch_slot *slot =3D &touch_slots[i]; - slot->tracking_id =3D -1; - } - return group; } =20 @@ -2379,7 +2357,8 @@ static GtkWidget *gd_create_menu_view(GtkDisplayState= *s, DisplayOptions *opts) GtkWidget *view_menu; GtkWidget *separator; QemuConsole *con; - int vc; + bool zoom_to_fit =3D false; + int vc, i; =20 view_menu =3D gtk_menu_new(); gtk_menu_set_accel_group(GTK_MENU(view_menu), s->accel_group); @@ -2453,6 +2432,27 @@ static GtkWidget *gd_create_menu_view(GtkDisplayStat= e *s, DisplayOptions *opts) v =3D g_new0(VirtualConsole, 1); g_ptr_array_add(s->vcs, v); group =3D gd_vc_gfx_init(s, v, con, vc, group, view_menu); + if (qemu_console_ui_info_supported(con)) { + zoom_to_fit =3D true; + } + } + + if (s->opts->u.gtk.has_zoom_to_fit) { + zoom_to_fit =3D s->opts->u.gtk.zoom_to_fit; + } + if (zoom_to_fit) { + gtk_menu_item_activate(GTK_MENU_ITEM(s->zoom_fit_item)); + s->free_scale =3D true; + } + + s->keep_aspect_ratio =3D true; + if (s->opts->u.gtk.has_keep_aspect_ratio) { + s->keep_aspect_ratio =3D s->opts->u.gtk.keep_aspect_ratio; + } + + for (i =3D 0; i < INPUT_EVENT_SLOTS_MAX; i++) { + struct touch_slot *slot =3D &touch_slots[i]; + slot->tracking_id =3D -1; } =20 #if defined(CONFIG_VTE) --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301563; cv=none; d=zohomail.com; s=zohoarc; b=n8uDSzDdUnptdX87PaVYz7QNJMysC5XBFoJApGHlQ5vPXnuAHKmPpbdXZye1fJqf0hGHUTYS73RRxrm3+tNW7UQPlXrHM7wrSNNg5r9lnpPM9b8virqfygdXXVEokOK4oobdmbZrI865ZRgmexsg0Ybly2uaR3lHVr/EzvGR5MY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301563; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ouQtgpEKDL4W4jan/ZrtcFmVZ7T7iX7dyBOwLcB+sj8=; b=UepZtUPdRuEHosuAsL8Ps7GWE1pCPw/uVDqEmPZEPxh29IOSTykOg41cTgQqCrJ4nHRR1wO9MxiXwwM1+cea5rGl9vR4/5gab+uIspQ5b4gNrI7xC6geLK64fuOIMe3Em8IxgVu5k7MwKIi6sZSTT2WaniHiDRk2ygpL5JcCGkU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782301563379714.4094190495895; Wed, 24 Jun 2026 04:46:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcM1g-0005gg-26; Wed, 24 Jun 2026 07:44:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM1a-0005ZV-Av for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:44:12 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM1X-0008Fz-3D for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:44:09 -0400 Received: from mx-prod-mc-05.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-97-zLJQNRZWNyqr0GXp1WAOng-1; Wed, 24 Jun 2026 07:44:05 -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-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 650BE1955E7E for ; Wed, 24 Jun 2026 11:44:04 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 2810B180058F; Wed, 24 Jun 2026 11:44:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301446; 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=ouQtgpEKDL4W4jan/ZrtcFmVZ7T7iX7dyBOwLcB+sj8=; b=FFBmgn0zh3NdNF9MTCe9iCnoSbx/JHJj2KB7CwepKkCoK/RAyxhDHIW4hllAj1K9bxR63S qSphESmbfYg3Tk3B7QWruUYTl0K8Ot+H8OOkEPr+uYyQfKfqJcpwTWgw/lpsWzm8qs5OV7 Mfkqm2XsPze9epO1Jfl046ROWUCNWNg= X-MC-Unique: zLJQNRZWNyqr0GXp1WAOng-1 X-Mimecast-MFC-AGG-ID: zLJQNRZWNyqr0GXp1WAOng_1782301444 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:50 +0400 Subject: [GIT PULL 28/35] ui/gtk: fix tab re-insertion order on window close MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-28-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=2129; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=wdcE/AMI0pHtm512zheMCDtwC3flWPBG3wwf/2Hj1lQ=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqO8JoudLxFiVOWinrK1IR4JAMggTjnmI7qhNDC ucC4f6lSvmJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajvCaAAKCRDa6OEJdZac 5SC0D/0eppKnCWtcconlg9DYYzRav03Of+3HCqXiFKzXf9Ly7NqZ/S5lWTkvxrD2c3J5ElT4U32 JuQ/yTdzhGIAYKMdb4WE4DY+M6IuEEHWWsk/sfxc7DiCVEgZ6YXqWqKxaL2lhk22RmOVhoNqrFl 3u9xGgAAdHxEKnTL3xofktGfvt+NCHMaE6hGdDbDh7l8TsGRRmnjBIslnnp2H8D1K+h5jGQ3OT3 fGwrfburZbO760KXv9F9y8206lWu/pGT32Ar/pxAnS0wAQrvobvQcbRQRTeLTuIDQYYHFVFOIoJ fxbTvXaVM9PbbW9TiAQzRSGZgLpa9YrHqmOyCf1zyoZOiCKPQ5udCqTf74hHMNszFKqIoVgtPkY RpOb6ZAoC062vYTR4NSbAQOi4MfV/Sh81UFHlWc0zpWbfauIH4qfbHcd6AtE2F2bPHs6CsbTRgs +leGzWee8dbeT02MBtY87VWOxEP4/PxESkqe+K2wx0ZLN32vCMyknjf/QKM+Cdsl4jMqdplUANu zabMP6CfcKoFqslLJzcnhFSzrT1Fj03JJXEHGgcFaE1fGgw7SDvecED0pf2ljs40BKBBNu5j1du kl3cf/EkR8i9qZgA1WALw79wum0mrgIGs+ej8CTnlwAJC50MDaV7taKXuDf+uRFdQbidCGd++SP MMBb4V933CjnHAg== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301565191158500 Add gd_vc_notebook_pos() which computes the correct notebook position for a console by counting only non-detached (non-windowed) tabs before it. Use it in gd_tab_window_close() so a re-attached tab is inserted at its logical position rather than appended at the end. Reviewed-by: Daniel P. Berrang=C3=A9 Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-28-4656aec3398d@redhat.com> --- ui/gtk.c | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/ui/gtk.c b/ui/gtk.c index 929e4cf43f7..741f7bfe373 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -1464,16 +1464,37 @@ static void gd_menu_show_tabs(GtkMenuItem *item, vo= id *opaque) gd_update_windowsize(vc); } =20 +static int gd_vc_notebook_pos(GtkDisplayState *s, VirtualConsole *target) +{ + int pos =3D 0; + guint i; + + for (i =3D 0; i < s->vcs->len; i++) { + VirtualConsole *vc =3D g_ptr_array_index(s->vcs, i); + if (vc =3D=3D target) { + return pos; + } + if (!vc->window) { + pos++; + } + } + g_assert_not_reached(); +} + static gboolean gd_tab_window_close(GtkWidget *widget, GdkEvent *event, void *opaque) { VirtualConsole *vc =3D opaque; GtkDisplayState *s =3D vc->s; + int page; =20 gtk_widget_set_sensitive(vc->menu_item, true); - gd_widget_reparent(vc->window, s->notebook, vc->tab_item); - gtk_notebook_set_tab_label_text(GTK_NOTEBOOK(s->notebook), - vc->tab_item, vc->label); + g_object_ref(vc->tab_item); + gtk_container_remove(GTK_CONTAINER(vc->window), vc->tab_item); + page =3D gd_vc_notebook_pos(s, vc); + gtk_notebook_insert_page(GTK_NOTEBOOK(s->notebook), + vc->tab_item, gtk_label_new(vc->label), page); + g_object_unref(vc->tab_item); gtk_widget_destroy(vc->window); vc->window =3D NULL; #if defined(CONFIG_OPENGL) --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301551; cv=none; d=zohomail.com; s=zohoarc; b=GPT/I8Ws2NZNiPDfRSQIQOrgSS3zBMgqseUQS42Z63koPRsch4qjzi6dtsCAf8wZzIgKNfC/K2C47zQHmkXj4wflxx0OfxDJ3AVlV/L6ZlQhFKHIpwSRL5JvIivvegkXBjqV/c6TtuArCl/qzHJTY7Od4ZoQhQOYRYIvwMMtPao= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301551; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=UQ+AmLqOBXswCrNh2TEozyDCdA3KR/XjPZRFYDEEfn0=; b=I9HtCBWOVRQLGPQ9bWgRVfGbiXcxiHKJWOHBsy8rB5kpUvVo5oo0//Ovq/eUaIqJTtdUceQCSR9aN79/cAR/rIlr7fgJpKU48QYChkSr4ti6yXpFjdXgaZ9FWjZ7tWXhYQPebLkJFx4IlMugJTH+lypjvD48/IZb1C4KMe6Q9bg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782301551118611.714335321141; Wed, 24 Jun 2026 04:45:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcM1j-0005sh-L7; Wed, 24 Jun 2026 07:44:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM1g-0005iJ-6W for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:44:16 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM1c-0008Gq-No for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:44:15 -0400 Received: from mx-prod-mc-05.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-533-ybv6DdIjOx27AW6RJ8S4OQ-1; Wed, 24 Jun 2026 07:44:10 -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-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 8D0761955F44 for ; Wed, 24 Jun 2026 11:44:09 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 4A218180028B; Wed, 24 Jun 2026 11:44:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301451; 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=UQ+AmLqOBXswCrNh2TEozyDCdA3KR/XjPZRFYDEEfn0=; b=ejTzU0tFHboqjGc8y6uv/TXr5Goujc1oYFVKuefoaylIiKXeKB6jBbHXRxE3Eu0jdsSpYu ZTiEGVeIzXQpArx5VrQuwsaQnfq9k0jS47FcRKNYSP9WjCcTdSDIFhwYR8WiK/oEkRPEQN RmQCx6USxL2c77dVmT5eJyeoShD12go= X-MC-Unique: ybv6DdIjOx27AW6RJ8S4OQ-1 X-Mimecast-MFC-AGG-ID: ybv6DdIjOx27AW6RJ8S4OQ_1782301449 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:51 +0400 Subject: [GIT PULL 29/35] ui/gtk: centralize console menu and shortcut management MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-29-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=11758; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=zRVnHYFnOTV49gZmsELLbX0EIR4iua2PFIT11izje5w=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqO8JoT3HAYSAQLJpwI2c16B+Nf9FHIoAWQ90I2 dA5Uj3n1RWJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajvCaAAKCRDa6OEJdZac 5VPoD/9eQWVdmj5vr6/iA1cbfCDGWBiYQVGK/xzYag0GU105e1jXy25TTwAAIb0wj9YaVnNV0Qa s1+N94vOirseWFdultFvA5EFtRplB1FNGE5TQQTqG/mbE0eK6wzQSkU+vHuKZZdVrHgtxA5271Z n1dDzCtskiDVNs9W91FmN5FFVxZcvMBtWQQs11HqRFwxl6IIMpax6xiCQnR9bEMi+L2QSpQTUJP DASlLAcXhmN2sr1xFMbhv8xgALY7Q/sd9/Rmq50XHnBTFg3r5hizmh3dtvMvzOlpkvau7IyUypi bxsLlSxMsXHiCjJfmBb9dlLIjMF2VAlSJtHpsAYTyouaVJn+MHgbKrXKSSDPWlmLAbpCPNr4veK /5Cq3ojygM1iawdDA50Gr2FYDwzoMPFhiO7nKZLAjtcpuZoYDnfrAraKkPMGws3rxFBtrfoed1n T6ZmMnng5QIYG4zkdKLLRBfB31IiOHZMz94Lk2mpaZvu68kjDEgVXjEf0Is3H6RHpoB2n6+yFIp DDi7g6fiVu+wjeHWnT+FLEhyJ+6p/OnttZwBXVQWcKpdEyBdf2TZKgaI4o2p2ZXT6YgtbfzrKHI Ct5f9XAgSInmZoWT7DAT1piLGyo2EdUMms82Gv1WG8kYzhN9VeGEXeEwNQBkOT004z8/ZOP3sgb jNeR3xSMeNZU/4w== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301553251158500 Replace the per-console gd_vc_menu_init() with gd_rebuild_vc_menu() that tears down and rebuilds all console radio menu items and Ctrl+Alt+N accelerators at once. This is called from initialization and whenever consoles are detached or reattached. Shortcuts now skip detached (windowed) consoles, so they always map to reachable tabs. Rename gd_vc_gfx_init() to add_gfx_console() and simplify the init function signatures now that menu creation is decoupled. Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-29-4656aec3398d@redhat.com> --- include/ui/gtk.h | 1 + ui/gtk.c | 127 ++++++++++++++++++++++++++++++++++++---------------= ---- 2 files changed, 85 insertions(+), 43 deletions(-) diff --git a/include/ui/gtk.h b/include/ui/gtk.h index fb60cbfda5d..53d0e447a23 100644 --- a/include/ui/gtk.h +++ b/include/ui/gtk.h @@ -120,6 +120,7 @@ struct GtkDisplayState { =20 GPtrArray *vcs; =20 + GtkWidget *vc_menu_separator; GtkWidget *show_tabs_item; GtkWidget *untabify_item; GtkWidget *show_menubar_item; diff --git a/ui/gtk.c b/ui/gtk.c index 741f7bfe373..e7a9156f206 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -142,6 +142,7 @@ static void gd_grab_pointer(VirtualConsole *vc, const c= har *reason); static void gd_ungrab_pointer(GtkDisplayState *s); static void gd_grab_keyboard(VirtualConsole *vc, const char *reason); static void gd_ungrab_keyboard(GtkDisplayState *s); +static void gd_rebuild_vc_menu(GtkDisplayState *s); =20 /** Utility Functions **/ =20 @@ -1488,7 +1489,6 @@ static gboolean gd_tab_window_close(GtkWidget *widget= , GdkEvent *event, GtkDisplayState *s =3D vc->s; int page; =20 - gtk_widget_set_sensitive(vc->menu_item, true); g_object_ref(vc->tab_item); gtk_container_remove(GTK_CONTAINER(vc->window), vc->tab_item); page =3D gd_vc_notebook_pos(s, vc); @@ -1508,6 +1508,8 @@ static gboolean gd_tab_window_close(GtkWidget *widget= , GdkEvent *event, } #endif =20 + gd_rebuild_vc_menu(s); + if (vc =3D=3D gd_vc_find_by_menu(s)) { gtk_widget_grab_focus(vc->focus); } @@ -1539,7 +1541,6 @@ static void gd_menu_untabify(GtkMenuItem *item, void = *opaque) FALSE); } if (!vc->window) { - gtk_widget_set_sensitive(vc->menu_item, false); vc->window =3D gtk_window_new(GTK_WINDOW_TOPLEVEL); #if defined(CONFIG_OPENGL) if (vc->gfx.esurface) { @@ -1566,6 +1567,7 @@ static void gd_menu_untabify(GtkMenuItem *item, void = *opaque) gtk_accel_group_connect(ag, GDK_KEY_g, HOTKEY_MODIFIERS, 0, cb= ); } =20 + gd_rebuild_vc_menu(s); gd_update_geometry_hints(vc); gd_update_caption(s); } @@ -1906,22 +1908,73 @@ static gboolean gd_configure(GtkWidget *widget, =20 /** Virtual Console Callbacks **/ =20 -static GSList *gd_vc_menu_init(GtkDisplayState *s, VirtualConsole *vc, - int idx, GSList *group, GtkWidget *view_men= u) +static void gd_rebuild_vc_menu(GtkDisplayState *s) { - vc->menu_item =3D gtk_radio_menu_item_new_with_mnemonic(group, vc->lab= el); - gtk_accel_group_connect(s->accel_group, GDK_KEY_1 + idx, - HOTKEY_MODIFIERS, 0, - g_cclosure_new_swap(G_CALLBACK(gd_accel_switch_vc), vc, NULL)); - gtk_accel_label_set_accel( - GTK_ACCEL_LABEL(gtk_bin_get_child(GTK_BIN(vc->menu_item))), - GDK_KEY_1 + idx, HOTKEY_MODIFIERS); + GSList *group =3D NULL; + VirtualConsole *vc; + GList *children; + gint insert_pos; + int shortcut_idx =3D 0; + guint i; + + for (i =3D 0; i < s->vcs->len; i++) { + vc =3D g_ptr_array_index(s->vcs, i); + if (vc->menu_item) { + gtk_widget_destroy(vc->menu_item); + vc->menu_item =3D NULL; + } + } + + for (i =3D 0; i < 9; i++) { + gtk_accel_group_disconnect_key(s->accel_group, + GDK_KEY_1 + i, HOTKEY_MODIFIERS); + } + + /* find insertion position (just before vc_menu_separator) */ + children =3D gtk_container_get_children(GTK_CONTAINER(s->view_menu)); + insert_pos =3D g_list_index(children, s->vc_menu_separator); + g_list_free(children); + + /* create new menu items for each console */ + for (i =3D 0; i < s->vcs->len; i++) { + vc =3D g_ptr_array_index(s->vcs, i); =20 - g_signal_connect(vc->menu_item, "activate", - G_CALLBACK(gd_menu_switch_vc), s); - gtk_menu_shell_append(GTK_MENU_SHELL(view_menu), vc->menu_item); + vc->menu_item =3D gtk_radio_menu_item_new_with_mnemonic(group, + vc->label); + group =3D gtk_radio_menu_item_get_group( + GTK_RADIO_MENU_ITEM(vc->menu_item)); + + if (vc->window) { + gtk_widget_set_sensitive(vc->menu_item, false); + } else if (shortcut_idx < 9) { + guint key =3D GDK_KEY_1 + shortcut_idx; + gtk_accel_group_connect(s->accel_group, key, + HOTKEY_MODIFIERS, 0, + g_cclosure_new_swap(G_CALLBACK(gd_accel_switch_vc), + vc, NULL)); + gtk_accel_label_set_accel( + GTK_ACCEL_LABEL(gtk_bin_get_child(GTK_BIN(vc->menu_ite= m))), + key, HOTKEY_MODIFIERS); + shortcut_idx++; + } =20 - return gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(vc->menu_item= )); + g_signal_connect(vc->menu_item, "activate", + G_CALLBACK(gd_menu_switch_vc), s); + gtk_menu_shell_insert(GTK_MENU_SHELL(s->view_menu), + vc->menu_item, insert_pos + i); + gtk_widget_show(vc->menu_item); + } + + /* sync active menu item with current notebook page */ + vc =3D gd_vc_find_current(s); + if (vc && vc->menu_item) { + g_signal_handlers_block_by_func(vc->menu_item, + gd_menu_switch_vc, s); + gtk_check_menu_item_set_active( + GTK_CHECK_MENU_ITEM(vc->menu_item), TRUE); + g_signal_handlers_unblock_by_func(vc->menu_item, + gd_menu_switch_vc, s); + } } =20 #if defined(CONFIG_VTE) @@ -2064,9 +2117,8 @@ static gboolean gd_vc_in(VteTerminal *terminal, gchar= *text, guint size, return TRUE; } =20 -static GSList *gd_vc_vte_init(GtkDisplayState *s, VirtualConsole *vc, - Chardev *chr, int idx, - GSList *group, GtkWidget *view_menu) +static void gd_vc_vte_init(GtkDisplayState *s, VirtualConsole *vc, + Chardev *chr, int idx) { char buffer[32]; GtkWidget *box; @@ -2082,7 +2134,6 @@ static GSList *gd_vc_vte_init(GtkDisplayState *s, Vir= tualConsole *vc, =20 snprintf(buffer, sizeof(buffer), "vc%d", idx); vc->label =3D g_strdup(vc->vte.chr->label ? : buffer); - group =3D gd_vc_menu_init(s, vc, idx, group, view_menu); =20 vc->vte.terminal =3D vte_terminal_new(); g_signal_connect(vc->vte.terminal, "commit", G_CALLBACK(gd_vc_in), vc); @@ -2128,20 +2179,16 @@ static GSList *gd_vc_vte_init(GtkDisplayState *s, V= irtualConsole *vc, gtk_label_new(vc->label)); =20 qemu_chr_be_event(vc->vte.chr, CHR_EVENT_OPENED); - - return group; } =20 -static void gd_vcs_init(GtkDisplayState *s, GSList *group, - GtkWidget *view_menu) +static void gd_vcs_init(GtkDisplayState *s) { int i; =20 for (i =3D 0; i < nb_vcs; i++) { VirtualConsole *vc =3D g_new0(VirtualConsole, 1); g_ptr_array_add(s->vcs, vc); - group =3D gd_vc_vte_init(s, vc, vcs[i], s->vcs->len - 1, - group, view_menu); + gd_vc_vte_init(s, vc, vcs[i], s->vcs->len - 1); } } #endif /* CONFIG_VTE */ @@ -2285,12 +2332,12 @@ static bool gd_scale_valid(double scale) return scale >=3D VC_SCALE_MIN && scale <=3D VC_SCALE_MAX; } =20 -static GSList *gd_vc_gfx_init(GtkDisplayState *s, VirtualConsole *vc, - QemuConsole *con, int idx, - GSList *group, GtkWidget *view_menu) +static void add_gfx_console(GtkDisplayState *s, QemuConsole *con) { + VirtualConsole *vc =3D g_new0(VirtualConsole, 1); const DisplayChangeListenerOps *ops =3D &dcl_ops; =20 + g_ptr_array_add(s->vcs, vc); vc->label =3D qemu_console_get_label(con); vc->s =3D s; vc->gfx.preferred_scale =3D 1.0; @@ -2367,14 +2414,10 @@ static GSList *gd_vc_gfx_init(GtkDisplayState *s, V= irtualConsole *vc, qemu_console_register_listener(con, &vc->gfx.dcl, ops); =20 gd_connect_vc_gfx_signals(vc); - group =3D gd_vc_menu_init(s, vc, idx, group, view_menu); - - return group; } =20 -static GtkWidget *gd_create_menu_view(GtkDisplayState *s, DisplayOptions *= opts) +static void gd_create_menu_view(GtkDisplayState *s, DisplayOptions *opts) { - GSList *group =3D NULL; GtkWidget *view_menu; GtkWidget *separator; QemuConsole *con; @@ -2382,6 +2425,7 @@ static GtkWidget *gd_create_menu_view(GtkDisplayState= *s, DisplayOptions *opts) int vc, i; =20 view_menu =3D gtk_menu_new(); + s->view_menu =3D view_menu; gtk_menu_set_accel_group(GTK_MENU(view_menu), s->accel_group); =20 s->full_screen_item =3D gtk_menu_item_new_with_mnemonic(_("_Fullscreen= ")); @@ -2445,14 +2489,11 @@ static GtkWidget *gd_create_menu_view(GtkDisplaySta= te *s, DisplayOptions *opts) =20 /* gfx */ for (vc =3D 0;; vc++) { - VirtualConsole *v; con =3D qemu_console_lookup_by_index(vc); if (!con) { break; } - v =3D g_new0(VirtualConsole, 1); - g_ptr_array_add(s->vcs, v); - group =3D gd_vc_gfx_init(s, v, con, vc, group, view_menu); + add_gfx_console(s, con); if (qemu_console_ui_info_supported(con)) { zoom_to_fit =3D true; } @@ -2478,11 +2519,13 @@ static GtkWidget *gd_create_menu_view(GtkDisplaySta= te *s, DisplayOptions *opts) =20 #if defined(CONFIG_VTE) /* vte */ - gd_vcs_init(s, group, view_menu); + gd_vcs_init(s); #endif =20 - separator =3D gtk_separator_menu_item_new(); - gtk_menu_shell_append(GTK_MENU_SHELL(view_menu), separator); + s->vc_menu_separator =3D gtk_separator_menu_item_new(); + gtk_menu_shell_append(GTK_MENU_SHELL(view_menu), s->vc_menu_separator); + + gd_rebuild_vc_menu(s); =20 s->show_tabs_item =3D gtk_check_menu_item_new_with_mnemonic(_("Show _T= abs")); gtk_menu_shell_append(GTK_MENU_SHELL(view_menu), s->show_tabs_item); @@ -2501,8 +2544,6 @@ static GtkWidget *gd_create_menu_view(GtkDisplayState= *s, DisplayOptions *opts) GTK_ACCEL_LABEL(gtk_bin_get_child(GTK_BIN(s->show_menubar_item= ))), GDK_KEY_m, HOTKEY_MODIFIERS); gtk_menu_shell_append(GTK_MENU_SHELL(view_menu), s->show_menubar_item); - - return view_menu; } =20 static void gd_create_menus(GtkDisplayState *s, DisplayOptions *opts) @@ -2511,7 +2552,7 @@ static void gd_create_menus(GtkDisplayState *s, Displ= ayOptions *opts) =20 s->accel_group =3D gtk_accel_group_new(); s->machine_menu =3D gd_create_menu_machine(s); - s->view_menu =3D gd_create_menu_view(s, opts); + gd_create_menu_view(s, opts); =20 s->machine_menu_item =3D gtk_menu_item_new_with_mnemonic(_("_Machine")= ); gtk_menu_item_set_submenu(GTK_MENU_ITEM(s->machine_menu_item), --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301466; cv=none; d=zohomail.com; s=zohoarc; b=HtfX2R1TX0sFVWuPMvQjKsbjNIO2mIGEEfxlh74Qf6SSNPn4/ytZ1SQIiUAjw+Z/kYKyVMUBPNOpp7TwZMTpJG4OhTR2oWOvgEpBihkze5VEbiqkl7GIzRd/8bGN2sY9bomnOfLhiDaJUNItJT0UYSBgq2qiML2pKesDx77Rs6w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301466; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=LMJGqPCB7/Q2ImivU61P/WtWAZlTP9zza2YC/cPPjIg=; b=Un2VfaZ5Dr0/bp0P3OdEayjzMgNt4QQ5mHJjpzQxJOes7f0WOfwTaHWKzNB3HMbHM4ySPsfvqS9UBmqyKL3zV56hLNlD3orquLlkgXI0hSCbH4Lwa8TxAjBdK5DHQBBvC7tNNxyzfnveD3hTjyQXM8147KuQbWlxOxKFQhgtgdM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782301466568638.6514243200018; Wed, 24 Jun 2026 04:44:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcM1m-0006QP-9o; Wed, 24 Jun 2026 07:44:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM1k-00065p-9b for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:44:20 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM1i-0008Hq-4R for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:44:19 -0400 Received: from mx-prod-mc-01.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-590-z10TLBsrPwiOD2fra6sYNg-1; Wed, 24 Jun 2026 07:44:16 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (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-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 70AC71955F11 for ; Wed, 24 Jun 2026 11:44:15 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 3253D195609F; Wed, 24 Jun 2026 11:44:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301457; 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=LMJGqPCB7/Q2ImivU61P/WtWAZlTP9zza2YC/cPPjIg=; b=TS/h2b0E+maFWDj/jEbVchd1kxLHeuNzngckShNCO4mcJSxh2NAUtusH6/HdZn0+9uBH4R NZnvpJ4llsSrt4b9TrymLAjud2Yb2rgbKP+f6JB/IxBT/QB47cUXmR+6g2PYkO1kmycMFf A7o0QQ3RvNxRnuu8oMzAdZGbSw372Gw= X-MC-Unique: z10TLBsrPwiOD2fra6sYNg-1 X-Mimecast-MFC-AGG-ID: z10TLBsrPwiOD2fra6sYNg_1782301455 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:52 +0400 Subject: [GIT PULL 30/35] ui/gtk: handle console hotplug/unplug events MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-30-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=4177; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=EHnnlH/qv29Cu9NeDZAM54dpMmMb6B5GcdzhzH2LPr0=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqO8JpuoTXJwjl4C5c+oerk0Nt4SrVaOSNLOLRY dlm8amzyHyJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajvCaQAKCRDa6OEJdZac 5be3D/9DuTr0/mgyfZC+B7tM1y0TFA1exlGnFMwZncL+IQfukOLO6iA7L1q1wqRePyBKh5YFa+n YSuaeEgW/Uo/dULbIS+QNHEYeIiIS9nsidHRWNweXvolsSvAm5gxkXkITecss2h8TXvuZ6f/6as k20/5uMeNJ1XQxKvni12jyuLncBgAOukYSh8X+ALMWjjiQZsLLGzfNUydXJ5dUdABq4WLxxwktJ OoZyhm4fTDevBA7rbwBqfGdtBiDEzVlw022/Az3PGvQg4KjPaO/0Ea+aEor+ridsvYKqxFol1Qt BUGQ9MBfCQgZGi/aep/FL1Bco88OpK8bX4WnOucx5Kv3eqAJHFTiBinma8EsdBk1JqEG/Lfu1b1 TUvL63JqC9LfdJ1LyasIMa8Xs/SFYPRSZsIWXdHS4V/qQyIvkNGguO3yGQfRqFoANY401PLKgej Cud3zNNnHhgd3stVFLUSZSJV/NisxGQP61mESDr7CXBC2asjFUdb/NDXPFiWLSziqaMnt+JwxZh jVMit32SUSlSoJQ4mkimn4HuLNkMXaJzpD1xt7U4KvQZzZJvZ3IHh4yu9lOf+WblPnPKyuWw27h 1KEfPNi5PeriBKgNihmpsnb3lbpcyVg3cXQYYjs0ZF07KcyPSjazIU3fUx8qCQKQzfeEwlgRs6p JP/LtS5OUbXZ70Q== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301468471158500 Register a console notifier so the GTK display dynamically creates and destroys VirtualConsole tabs when graphic consoles are added or removed at runtime (e.g. vfio-pci with display=3Don hotplug). Add skips consoles that already have a VC binding, remove skips unknown consoles. Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-30-4656aec3398d@redhat.com> --- include/ui/gtk.h | 1 + ui/gtk.c | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++= +++- 2 files changed, 75 insertions(+), 1 deletion(-) diff --git a/include/ui/gtk.h b/include/ui/gtk.h index 53d0e447a23..5c9c34a069e 100644 --- a/include/ui/gtk.h +++ b/include/ui/gtk.h @@ -141,6 +141,7 @@ struct GtkDisplayState { GdkCursor *null_cursor; Notifier mouse_mode_notifier; VMChangeStateEntry *vmse; + Notifier console_notifier; gboolean free_scale; gboolean keep_aspect_ratio; =20 diff --git a/ui/gtk.c b/ui/gtk.c index e7a9156f206..7078d89d679 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -2332,7 +2332,8 @@ static bool gd_scale_valid(double scale) return scale >=3D VC_SCALE_MIN && scale <=3D VC_SCALE_MAX; } =20 -static void add_gfx_console(GtkDisplayState *s, QemuConsole *con) +static VirtualConsole * +add_gfx_console(GtkDisplayState *s, QemuConsole *con) { VirtualConsole *vc =3D g_new0(VirtualConsole, 1); const DisplayChangeListenerOps *ops =3D &dcl_ops; @@ -2414,6 +2415,74 @@ static void add_gfx_console(GtkDisplayState *s, Qemu= Console *con) qemu_console_register_listener(con, &vc->gfx.dcl, ops); =20 gd_connect_vc_gfx_signals(vc); + return vc; +} + +static void gd_vc_add_gfx(GtkDisplayState *s, QemuConsole *con) +{ + VirtualConsole *vc; + int i; + + for (i =3D 0; i < (int)s->vcs->len; i++) { + VirtualConsole *v =3D g_ptr_array_index(s->vcs, i); + if (v->type =3D=3D GD_VC_GFX && v->gfx.dcl.con =3D=3D con) { + return; + } + } + + vc =3D add_gfx_console(s, con); + gtk_widget_show_all(vc->tab_item); + gtk_widget_realize(vc->gfx.drawing_area); + + if (s->free_scale) { + gd_update_windowsize(vc); + } + + gd_update_caption(s); + gd_rebuild_vc_menu(s); +} + +static void gd_vc_remove_gfx(GtkDisplayState *s, QemuConsole *con) +{ + VirtualConsole *vc =3D NULL; + guint idx; + + for (idx =3D 0; idx < s->vcs->len; idx++) { + VirtualConsole *v =3D g_ptr_array_index(s->vcs, idx); + if (v->type =3D=3D GD_VC_GFX && v->gfx.dcl.con =3D=3D con) { + vc =3D v; + break; + } + } + if (!vc) { + return; + } + + if (s->kbd_owner =3D=3D vc) { + gd_ungrab_keyboard(s); + } + if (s->ptr_owner =3D=3D vc) { + gd_ungrab_pointer(s); + } + + g_ptr_array_remove_index(s->vcs, idx); + gd_rebuild_vc_menu(s); + gd_update_caption(s); +} + +static void gd_console_notify(Notifier *n, void *data) +{ + GtkDisplayState *s =3D container_of(n, GtkDisplayState, console_notifi= er); + QemuConsoleEvent *event =3D data; + + switch (event->type) { + case QEMU_CONSOLE_ADDED: + gd_vc_add_gfx(s, event->con); + break; + case QEMU_CONSOLE_REMOVED: + gd_vc_remove_gfx(s, event->con); + break; + } } =20 static void gd_create_menu_view(GtkDisplayState *s, DisplayOptions *opts) @@ -2694,6 +2763,9 @@ static void gtk_display_init(DisplayState *ds, Displa= yOptions *opts) =20 gd_create_menus(s, opts); =20 + s->console_notifier.notify =3D gd_console_notify; + qemu_console_add_notifier(&s->console_notifier); + gd_connect_signals(s); =20 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(s->notebook), FALSE); @@ -2814,6 +2886,7 @@ static void gtk_display_cleanup(void) return; } qemu_del_vm_change_state_handler(s->vmse); + qemu_console_remove_notifier(&s->console_notifier); qemu_remove_mouse_mode_change_notifier(&s->mouse_mode_notifier); gd_clipboard_cleanup(s); g_signal_handlers_disconnect_by_func(s->notebook, --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301620; cv=none; d=zohomail.com; s=zohoarc; b=Flq6yuwB0anGelUY98Y7OcUnIaQBRrr5ENMKp8xXKiy0L7iQTv1LSLNFe+gKQ8nB9zLWfYv4scR+/apylOqCB8orI0GgF1LAvATYRBbHsX8mK36FiMQVAZpsCLRpm/6k4Vv5tfcjmC+soyC1wwGDKvrvtpCb8QNJi7wP0lLoq48= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301620; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=rA0q9DcPM5/f4+PbY7T73EQOB8BG7DyNQr5nJhN2zNI=; b=FeexlEA3vN0fgLIYT/O3nz8MGHoOW5D5yYMyYkzfAQKC1HCLknyttcKGJc43M58rKTp9jDmYroUfz/usqJbyeUGaq6e4qXHn0w/Y7NYarvqOHUkpAfQuHnmGGhLEBbTWUYoZSI7L6IEgY0TGDxwHfWmDFpdZ3191vqi1AfY5gOg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782301620186843.4263312578124; Wed, 24 Jun 2026 04:47:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcM1u-0007AO-Ax; Wed, 24 Jun 2026 07:44:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM1q-000728-3E for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:44:26 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM1o-0008Is-AZ for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:44:25 -0400 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-64-hxy01CEJPIOhHOTy1w4b1w-1; Wed, 24 Jun 2026 07:44:22 -0400 Received: from mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.95]) (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 C09EE1801326 for ; Wed, 24 Jun 2026 11:44:20 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 749C536924; Wed, 24 Jun 2026 11:44:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301463; 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=rA0q9DcPM5/f4+PbY7T73EQOB8BG7DyNQr5nJhN2zNI=; b=Lou8FuGTI9DfVpIEOi+Apf0zkKP4k6Oc/sKTqI4zCLom0j84kAiWwzizg72qMEJ7xA6d3s BevvBP8lHmUA9YdPO8hhxpwTiOluOoiNOjXNu1lenHEQnzxVuP1IIrdhu5jZe2Il4qPjal /DAO1ut51atpvx8ZgRorlUExyKcbda0= X-MC-Unique: hxy01CEJPIOhHOTy1w4b1w-1 X-Mimecast-MFC-AGG-ID: hxy01CEJPIOhHOTy1w4b1w_1782301461 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:53 +0400 Subject: [GIT PULL 31/35] ui/console: register console in QOM tree dynamically MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-31-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=2402; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=eo/F9jEsUV6ERVf+hKfhWAKiQgI+iE7YRBT/y12gavA=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqO8JpbS5WV1kAgrMt8Z3cLs88NRNmP3Oay76ge FU62/ZE/kWJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajvCaQAKCRDa6OEJdZac 5bZ0D/4863dZl06oYqWKtAPK7bmqvf1wshCZuR1Uv0iR9csNO8Jh27BBYCxkXiA6sNHgVm9IsEE dHbAd2JHAGajwv2VCcfJ/vr2NH+aO3le8Qajo8XOulacioi1yOvWAbhF1NUjR7bRj2/eeu8Ove2 0oqMhaqxLDyvKqkBDbaNVMjYLM4B51F1Iku8tUFQREa5uJ1i2OkTavRaw3UgdKxB/1qo5M9W6/b xmv9dgoNm9btt6SBdvA7ykdj6ayB4++PD+y4uUwBZf5TClje5+lkIozld28f8Fa1Gnzu3zDNos+ XrRnQ47HcA62r8egMtTCJ0Wt4Rs7XO8McVrUxu1zm982FSNDVdNfpdI+HPWANuUd8MkQKjH47DH zkfUq+6jz3rgycQeCqzIXcbC2sHmGo0rcKVVLF5g/6GdXSQdQsG9xP7VpDzIWi+nH5QNUygZ8n9 n4cwTrwZ5RdXHt/d71cF5B3YCqBJ93CPOdYSGqpXGqWPnCfqLtb7JbFPa7wVlPhuySRfAL7t1B4 uR6tRI25usTbkjXJwdDS2jNVmu+J3LMLDIW4iWjBUxagjlDQXmiVxQDMCx0K1hki+QRS/quJ4rn ecR0wmXzvfV/SubdqKXkroc++Nr7kyDGphL3Y1Ux45AhwaWb6FezexpJvB11oy4x1RtQv4MG4Pe bAtGnmHLw5MVhCg== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.6 on 10.30.177.95 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com 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, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301621552158500 Consoles created after init_displaystate() (e.g. hotplugged display devices) were never added to the /backend/console[N] QOM tree. Extract qemu_console_add_to_qom() and call it from qemu_console_register() when the display is already initialized. Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-31-4656aec3398d@redhat.com> --- ui/console.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/ui/console.c b/ui/console.c index 975eaf15706..db9aaf85f59 100644 --- a/ui/console.c +++ b/ui/console.c @@ -68,6 +68,7 @@ struct DisplayState { uint64_t last_update; uint64_t update_interval; bool refreshing; + bool initialized; =20 QLIST_HEAD(, DisplayChangeListener) listeners; NotifierList console_notifiers; @@ -376,6 +377,13 @@ void qemu_text_console_put_string(QemuTextConsole *s, = const char *str, int len) } } =20 +static void qemu_console_add_to_qom(QemuConsole *con) +{ + g_autofree gchar *name =3D g_strdup_printf("console[%d]", con->index); + object_property_add_child(object_get_container("backend"), + name, OBJECT(con)); +} + static void qemu_console_register(QemuConsole *c) { @@ -413,6 +421,10 @@ qemu_console_register(QemuConsole *c) } } } + + if (c->ds->initialized) { + qemu_console_add_to_qom(c); + } } =20 static void @@ -1089,20 +1101,19 @@ void qemu_console_remove_notifier(Notifier *notifie= r) */ DisplayState *init_displaystate(void) { - gchar *name; + DisplayState *ds =3D get_alloc_displaystate(); QemuConsole *con; =20 QTAILQ_FOREACH(con, &consoles, next) { /* Hook up into the qom tree here (not in object_new()), once * all QemuConsoles are created and the order / numbering * doesn't change any more */ - name =3D g_strdup_printf("console[%d]", con->index); - object_property_add_child(object_get_container("backend"), - name, OBJECT(con)); - g_free(name); + qemu_console_add_to_qom(con); } =20 - return display_state; + ds->initialized =3D true; + + return ds; } =20 void qemu_graphic_console_set_hwops(QemuConsole *con, --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301603; cv=none; d=zohomail.com; s=zohoarc; b=OrnZu86jWzyVd6IMciqx1YAzDh1ohEt4wQWnia5zA/SKr6Ih5avJqY0HF+imKMm2rMXd3yzYBZZCBjU7oc9EQv8TTTzxI9gIrMZrbA1TgZnyNfv0JNIrdLJeTy0UlJnhZ4kefHJ8hD286Iup3wtfjYUg+cyuOzpc7eip+NhB6RU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301603; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=jn7ES4jiZNX9FsQjb9M//qTryK5m3dJw0Pe0NKBIzs8=; b=EEDmz7MRn8m87IjOxsQxclh9PrC2uh3hMMEfr5viS3vGDQhuohEgT/KZGUXFL8GYAp2uyolHp+PRQdgq0EpE1jK05/U6B9c6kqBMXtmm/t2PBdne+C6OCU/1UVRi0+qoUqrvgKl4nPYzAiQr9Mwt3zfPCXn6sWI+cLX+mZDW5UQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782301603641668.9621549379688; Wed, 24 Jun 2026 04:46:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcM25-0007YK-9R; Wed, 24 Jun 2026 07:44:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM1x-0007K6-IM for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:44:36 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM1w-0008KB-8B for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:44:33 -0400 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-204-UJr2SydnMa6IcyfLWoLp7w-1; Wed, 24 Jun 2026 07:44:26 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (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 2747B195398C for ; Wed, 24 Jun 2026 11:44:26 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id CCA811955F7A; Wed, 24 Jun 2026 11:44:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301470; 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=jn7ES4jiZNX9FsQjb9M//qTryK5m3dJw0Pe0NKBIzs8=; b=Wftx+CmuUTZUrrAsLkFeGZzoFSD+ssfis7nqjHdgU6gYBL6mhMs8crsRBruR7R8BpY7BcV HlC6BjlsRMSaKfS4Ggc8RU4pP1CxU56zCTSOZacgirD5fGBzL7dl6SFqBoD36aEvxqUrXm sxyYGIV/LnVr7D1QQbwAvy+IVztIyS0= X-MC-Unique: UJr2SydnMa6IcyfLWoLp7w-1 X-Mimecast-MFC-AGG-ID: UJr2SydnMa6IcyfLWoLp7w_1782301466 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:54 +0400 Subject: [GIT PULL 32/35] ui/console: unregister console from QOM tree on close MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-32-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=1441; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=7H/9RUpTaqtfP5P3TCRB3XrgwsOR3LJp54NEWFMgNDM=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqO8JpLPo2niUchNPX5mzFygu9FGUI+c/p1U/Wr T7cnlycYGGJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajvCaQAKCRDa6OEJdZac 5XiUEACoi+UtTjSOkniw7wFnPJmXzTXW1WhmV+bvb0UidBWLbH9fPtdYIeKDG9uRQidb3eMTBsa hTva0Da8DI3EwS42deN2eIPVeFGdhaA32z/AVaWYu9gHrKhXs5dx6suPocItgYbwCjdxRLJrTVB cjCZN1USQFsKVplgpDcDUAgICJdIhNkqp0puDQSOUvgjzrqUy758oCyemWPC/idf48eyitDh6h1 vLeMG9EPBwy7huOmi/1+TdupJeYcAVVjqdDjbJVci+pYtw43liwoH5QQOWdKFWFdV9DGWCQRaWi 7dGkeY5K1lDdQpNPLGrhM9rkY1JdQ8syvTVxQF3Cz0qmo9zxmDC3PbK4oHcw0KxkMcQPNUKZpF7 oVKakdp+45OVP/Kj2lmwW/8jI1JQKXd20vRdhM9WW+uOYopql4JiYBOJeKg2tceQqGT0jZmM3wf jzETIul16t9vllibWbMx1DoTyah3ElUeJuHkyVTd7CG8vlhxtucDyPxuyHryMDy+HkURgZLz6cI yFnDWl49VGwsQO5YcSVGQf5gcwBmJ/C1yTS0acsCXpfgFp6k/zkRJ6+aEwk2cVhKPp2JJWZycLF AkQzYwyX9oGRtIIXtFAiIQR6R60qGHBok/tDJNquEBelVx6IEpLxKEiDd6LZPer0DFLeLs7sCf/ ne18X0TeGZp7q8w== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301605436158500 Call object_unparent() in graphic_console_close() to remove the console from /backend/console[N]. This drops the QOM tree reference, while the initial object_new() reference keeps the console alive for potential reuse. When graphic_console_init() reuses a closed console, re-register it in the QOM tree. Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-32-4656aec3398d@redhat.com> --- ui/console.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ui/console.c b/ui/console.c index db9aaf85f59..a8a2a247d8f 100644 --- a/ui/console.c +++ b/ui/console.c @@ -1140,6 +1140,9 @@ QemuConsole *qemu_graphic_console_create(DeviceState = *dev, uint32_t head, trace_console_gfx_reuse(s->index); width =3D qemu_console_get_width(s, 0); height =3D qemu_console_get_height(s, 0); + if (s->ds->initialized) { + qemu_console_add_to_qom(s); + } } else { trace_console_gfx_new(); s =3D (QemuConsole *)object_new(TYPE_QEMU_GRAPHIC_CONSOLE); @@ -1180,6 +1183,7 @@ void qemu_graphic_console_close(QemuConsole *con) } surface =3D qemu_create_placeholder_surface(width, height, unplugged); qemu_console_set_surface(con, surface); + object_unparent(OBJECT(con)); } =20 QemuConsole *qemu_console_lookup_default(void) --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301596; cv=none; d=zohomail.com; s=zohoarc; b=LRejx37jjXuMYV6u+wFrMqsGC6FfYnyysPRIwrvLihboVWJwY+rEUcQVdet40Blv2IUNHfybLbGhx+ICEQBH6lOqfy8J0uX3bMZ2XKzqBLpzkE4hkpNzUHjDH1b4d7RWhXdtgsn0Y4BUNaA9vQJiZpJyEuqgblk0oYNCjPTalwA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301596; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=qqKXza3XqDBqaBj2G9I+Ugfz3/4bOggOYUKyR7YIOpw=; b=lo7sUtJQkPVxyrDIDZ5IBLCd3pnWPCAOhiX6C0LPP5qYI8eaZnVPTebCz89CTGE6Nr46dPYnlEBhP2dgi1XEDaGkJ1HAQk+KuNDwTEJaP42opRgkaMBWPV9S/ppZ/dniKoRB5WAX2d0meKPkNpDgeEJ6hVh7IHZcCtpgKsPA+v0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782301596886677.745724876005; Wed, 24 Jun 2026 04:46:36 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcM25-0007cY-Uy; Wed, 24 Jun 2026 07:44:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM1z-0007KD-Or for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:44:36 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM1y-0008Ko-1a for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:44:35 -0400 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-509-I2oOQbssMVCP97EdIXAHGg-1; Wed, 24 Jun 2026 07:44:31 -0400 Received: from mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.95]) (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 2592C1805C18 for ; Wed, 24 Jun 2026 11:44:31 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 2B24136921; Wed, 24 Jun 2026 11:44:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301473; 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=qqKXza3XqDBqaBj2G9I+Ugfz3/4bOggOYUKyR7YIOpw=; b=f8lDpy11QBc8DG3bgMwcmXEPpnKGCa2Pk0kJOxQn3YXWZM0oM77BXOKL9gqKPRY16wDHv2 iihHiePApj07Ln4Nz2uMCql17sqVFnEDcv7RpSl4fOQeMeOsFRajiDQPnDdiCuHKsMwphk PPrdgQnOXrKlkVdbUP4jRiRn+bRx7eQ= X-MC-Unique: I2oOQbssMVCP97EdIXAHGg-1 X-Mimecast-MFC-AGG-ID: I2oOQbssMVCP97EdIXAHGg_1782301471 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:55 +0400 Subject: [GIT PULL 33/35] ui/dbus: handle console hotplug/unplug events MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-33-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=6685; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=J3uUyMW3tLzfjLa1Ww2EDgdJ7qhydiSN5sxYNJZ2pAg=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqO8Jpv4y5HT0e67r2OPgzwcRvB20AD7/ikppwa foJpFaY9+mJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajvCaQAKCRDa6OEJdZac 5Sq1D/9kxHvLdf8gSnKfgkXOo+/xstJaaJHgWRMtuFgrLSsrG2EPW/EyOaaFEfBR9x+muA/mIU/ /y7DU0pnZG0pjf1mf5KN7QDvL/t9fMCVMNU6jBPEq73OLEixA9FP+3Ok4kTDZlMi79mpNjZfimX FBGOLZ7+J82s+WjPWtX+gUC9JgnosmCvzbPMa7aFqmc2M/L05tv2ZJdqRLeszj1XQ+110Ma28w6 I0lZfs8j4cmlx6+PH+Zv9IgPXpMgCJOHczG1984iscI5MvjdV4IwPEcDlsvu0T5nOaa68ZFNJpT eyukKivMrSPeP2F/RBAdDADqq3/D6owOJhpEtOySODTKJoRbXaQ8GOaQ0kJt8XcF/iZntw9D5gv ng8PhgmCK/a9MRmOSK1n0uwG+r9ac+cZi9KhjyoiPmm1iSGoQUt74mdZ+Cnr1+Dhoy+xNukKDQO RglVO12bsn0JPHhlfyPI49JjnwRSgg7odpcR95U3i64cAedEdYzvI5fg6NoRjlJnrdcG4CxTbk3 j3rslYWlOXSsxYzxykgOat57zw2uoWpnI2zWw/gVqh9voRPAjZhqzd7H9nkTK7bZsE97TQWr8Tl PhcR5WgoTT0Wq/GsesG9snjEWEOx046ggnjzOEqgirrFgnF+8gR9+pdIUt0aVeI/YsVLWKdpben p5g7oPWP5t2/MQA== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.6 on 10.30.177.95 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com 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, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301597362158500 Subscribe to QemuConsoleEvent notifications to dynamically add and remove D-Bus display consoles. This mirrors the GTK backend's handling added in the previous commits. Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-33-4656aec3398d@redhat.com> --- ui/dbus.h | 3 ++ ui/dbus-console.c | 5 +++ ui/dbus.c | 93 +++++++++++++++++++++++++++++++++++++++++++++------= ---- 3 files changed, 84 insertions(+), 17 deletions(-) diff --git a/ui/dbus.h b/ui/dbus.h index e4e78590b49..d2cc176648a 100644 --- a/ui/dbus.h +++ b/ui/dbus.h @@ -60,6 +60,7 @@ struct DBusDisplay { DBusClipboardRequest clipboard_request[QEMU_CLIPBOARD_SELECTION__COUNT= ]; =20 Notifier notifier; + Notifier console_notifier; }; =20 #ifdef WIN32 @@ -86,6 +87,8 @@ dbus_display_console_new(DBusDisplay *display, QemuConsol= e *con); int dbus_display_console_get_index(DBusDisplayConsole *ddc); =20 +QemuConsole * +dbus_display_console_get_qemu_console(DBusDisplayConsole *ddc); =20 extern const DisplayChangeListenerOps dbus_console_dcl_ops; =20 diff --git a/ui/dbus-console.c b/ui/dbus-console.c index bdbc208cf01..e1ac06814ba 100644 --- a/ui/dbus-console.c +++ b/ui/dbus-console.c @@ -533,6 +533,11 @@ int dbus_display_console_get_index(DBusDisplayConsole = *ddc) return qemu_console_get_index(ddc->dcl.con); } =20 +QemuConsole *dbus_display_console_get_qemu_console(DBusDisplayConsole *ddc) +{ + return ddc->dcl.con; +} + DBusDisplayConsole * dbus_display_console_new(DBusDisplay *display, QemuConsole *con) { diff --git a/ui/dbus.c b/ui/dbus.c index b23cb44c535..7be0f8e2611 100644 --- a/ui/dbus.c +++ b/ui/dbus.c @@ -142,6 +142,9 @@ dbus_display_finalize(Object *o) { DBusDisplay *dd =3D DBUS_DISPLAY(o); =20 + if (dd->console_notifier.notify) { + qemu_console_remove_notifier(&dd->console_notifier); + } if (dd->notifier.notify) { dbus_display_notifier_remove(&dd->notifier); } @@ -164,14 +167,35 @@ dbus_display_finalize(Object *o) dbus_display =3D NULL; } =20 +static void +dbus_update_console_ids(DBusDisplay *dd) +{ + g_autoptr(GArray) arr =3D g_array_new(FALSE, FALSE, sizeof(guint32)); + + for (guint i =3D 0; i < dd->consoles->len; i++) { + DBusDisplayConsole *ddc =3D g_ptr_array_index(dd->consoles, i); + guint32 idx =3D dbus_display_console_get_index(ddc); + g_array_append_val(arr, idx); + } + + g_object_set(dd->iface, "console-ids", + g_variant_new_fixed_array(G_VARIANT_TYPE("u"), + arr->data, arr->len, + sizeof(guint32)), + NULL); +} + static bool -dbus_display_add_console(DBusDisplay *dd, int idx, Error **errp) +dbus_display_add_console(DBusDisplay *dd, QemuConsole *con, Error **errp) { - QemuConsole *con; DBusDisplayConsole *dbus_console; =20 - con =3D qemu_console_lookup_by_index(idx); - assert(con); + for (guint i =3D 0; i < dd->consoles->len; i++) { + DBusDisplayConsole *ddc =3D g_ptr_array_index(dd->consoles, i); + if (dbus_display_console_get_qemu_console(ddc) =3D=3D con) { + return true; + } + } =20 if (qemu_console_is_graphic(con) && dd->gl_mode !=3D DISPLAY_GL_MODE_OFF) { @@ -179,20 +203,58 @@ dbus_display_add_console(DBusDisplay *dd, int idx, Er= ror **errp) } =20 dbus_console =3D dbus_display_console_new(dd, con); - g_ptr_array_insert(dd->consoles, idx, dbus_console); + g_ptr_array_add(dd->consoles, dbus_console); g_dbus_object_manager_server_export(dd->server, G_DBUS_OBJECT_SKELETON(dbus_consol= e)); + dbus_update_console_ids(dd); return true; } =20 +static void +dbus_display_remove_console(DBusDisplay *dd, QemuConsole *con) +{ + for (guint i =3D 0; i < dd->consoles->len; i++) { + DBusDisplayConsole *ddc =3D g_ptr_array_index(dd->consoles, i); + if (dbus_display_console_get_qemu_console(ddc) =3D=3D con) { + if (display_opengl) { + qemu_console_set_display_gl_ctx(con, NULL); + } + g_dbus_object_manager_server_unexport( + dd->server, + g_dbus_object_get_object_path(G_DBUS_OBJECT(ddc))); + g_ptr_array_remove_index(dd->consoles, i); + dbus_update_console_ids(dd); + break; + } + } +} + +static void +dbus_console_notify(Notifier *n, void *data) +{ + DBusDisplay *dd =3D container_of(n, DBusDisplay, console_notifier); + QemuConsoleEvent *event =3D data; + + switch (event->type) { + case QEMU_CONSOLE_ADDED: { + Error *err =3D NULL; + if (!dbus_display_add_console(dd, event->con, &err)) { + error_report_err(err); + } + break; + } + case QEMU_CONSOLE_REMOVED: + dbus_display_remove_console(dd, event->con); + break; + } +} + static void dbus_display_complete(UserCreatable *uc, Error **errp) { DBusDisplay *dd =3D DBUS_DISPLAY(uc); g_autoptr(GError) err =3D NULL; g_autofree char *uuid =3D qemu_uuid_unparse_strdup(&qemu_uuid); - g_autoptr(GArray) consoles =3D NULL; - GVariant *console_ids; int idx; =20 if (!object_resolve_path_type("", TYPE_DBUS_DISPLAY, NULL)) { @@ -233,27 +295,24 @@ dbus_display_complete(UserCreatable *uc, Error **errp) } } =20 - consoles =3D g_array_new(FALSE, FALSE, sizeof(guint32)); for (idx =3D 0;; idx++) { - if (!qemu_console_lookup_by_index(idx)) { + QemuConsole *con =3D qemu_console_lookup_by_index(idx); + if (!con) { break; } - if (!dbus_display_add_console(dd, idx, errp)) { + if (!dbus_display_add_console(dd, con, errp)) { return; } - g_array_append_val(consoles, idx); } =20 - console_ids =3D g_variant_new_from_data( - G_VARIANT_TYPE("au"), - consoles->data, consoles->len * sizeof(guint32), TRUE, - (GDestroyNotify)g_array_unref, consoles); - g_steal_pointer(&consoles); g_object_set(dd->iface, "name", qemu_name ?: "QEMU " QEMU_VERSION, "uuid", uuid, - "console-ids", console_ids, NULL); + dbus_update_console_ids(dd); + + dd->console_notifier.notify =3D dbus_console_notify; + qemu_console_add_notifier(&dd->console_notifier); =20 if (dd->bus) { g_dbus_object_manager_server_set_connection(dd->server, dd->bus); --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301531; cv=none; d=zohomail.com; s=zohoarc; b=NtUIBfmdqJmGKD+WXOcSqwmmxtB1NH441turI1E6maLA6w7XFdsVMfEznX4/ykNRMnibMegDlBUZ7eYoUz9KbzGVkbL5b67D70X+9JiRIRZcvUAXFOaneetq9ACTmk/aP6iapGE4iiHTMk4hwP0i9nTge9xQ0mzrFHZCI1NrtE8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301531; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Y9HL0Um6kBW91xJ8S0xBGfdPNY/jI5DPqhpdawHVeCU=; b=Mi/smiZY3vV/f2bE3JgYwVBJBPZQqvU4YJbBPCuWLSFiJJo7WKxXA0iA3wXDv88FNICp6dT2/e5390scvHLoIJ+QdtdFvZRI8UyDYkPd8zpxJU6WauqfFED311RqIjpWtlHKvPhw+fHn5tufY7luXMzWaYLGX/Kvv0WEqzDKzmU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178230153188528.641104671502944; Wed, 24 Jun 2026 04:45:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcM26-0007dh-2x; Wed, 24 Jun 2026 07:44:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM24-0007UO-Pm for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:44:40 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM23-0008NJ-5S for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:44:40 -0400 Received: from mx-prod-mc-05.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-670-UIaACyiUMN20Ovn5GY_yHQ-1; Wed, 24 Jun 2026 07:44:37 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (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-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 50131195608F for ; Wed, 24 Jun 2026 11:44:36 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 1B96E30001A7; Wed, 24 Jun 2026 11:44:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301478; 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=Y9HL0Um6kBW91xJ8S0xBGfdPNY/jI5DPqhpdawHVeCU=; b=Q9Qy8umvyveOHuJ4xecaVRGGr+kBZsKXWgjCm6L7MyPfn0wfVI49vQuNvSHHrkxKQytRGs gw+csbXE6uX8y05FWx43CvseJNuDMm9QbNK/6HknVruFT4ip28T+W7h7a82Z9gwH2KVcw8 zzo1szLedHUUgNPduCh9cEA6/XUuX10= X-MC-Unique: UIaACyiUMN20Ovn5GY_yHQ-1 X-Mimecast-MFC-AGG-ID: UIaACyiUMN20Ovn5GY_yHQ_1782301476 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:56 +0400 Subject: [GIT PULL 34/35] tests/qtest: add D-Bus display hotplug test MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-34-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=5105; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=4V5lLEpnMWH65LJiWlW1jqcq8EjqVL2+wiVFWhhSGi0=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqO8JpfV9toiCqaXB7dXmS0wZ1OIuZN8u5myM7T qJ8nRBppbmJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajvCaQAKCRDa6OEJdZac 5XGpD/9U+DbsTG4zx0vQ1tKCm1QpiiDJgEINza3AMO422+OOdBiiacYw7UaHlXqZVBRChZ8CnbU 73h8nxSf1nug6WWVXbiWRXnIHgMwBBeXKRF5OHfruHrBYZkrrA1baaKogbViaPoxiPbec/PRkWS AO224FxflWLqybm3BziK1lo7L2m8R/HsdhjmKBZ7mUqbJKqwwMKjcv8fzZ2/vfv/XpUveLNIyKA TckmDKKfZ7yJltsn3Urh1ENmJXXqme8vp0oXRQmWabYdkr3M6dab2M/ir24gtdxSnOZJDpLePn+ BfquLQWG1ZigdligJc5UI5bhkEANulA1AHUU+waeYx1NXrHpx+BWMbLNBTS89hWEMcoV5bkUeo+ +cA1vDb93Ip/ELeB3LXzJIzQadzP29urnUDYTabs4xd+8nKx54ZrAswy6T++QJM3bqoE5jYJhwK +AAR00LZTDAFV19/Jmd5bYj7/ezk/sCzf2haznZe3cwFGQIMW2Q0qx8u/Hw8UlEgz+wVwvm/gDl ax/npXIau/XBNFJ0UX/ecQz2YvUjAzmQ6lR8J2RokFJCYDrYpTOkdjK8GyLdvY1sVWEpuDNsDEf d85/xKj70luhfAsUn8UXWKdHjHnQfn7tIvec7GdvOyKoEYMb8wAbwCybS6Vfjy6jQEpX3S74xq0 PCzAIeKQ0K5px4w== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301532942158500 Add a qtest that verifies display consoles are dynamically added and removed over D-Bus when a bochs-display device is hotplugged and unplugged on a q35 machine. The test plugs device_add a bochs-display, waits for the DEVICE_ADDED QMP event, and checks that the D-Bus VM interface reports a second console. It then device_del it, forces a system reset (q35 removal is ACPI-based and needs guest cooperation qtest cannot provide), waits for DEVICE_DELETED, and checks the console count again. Reviewed-by: Fabiano Rosas Reviewed-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260623-b4-ui-v4-34-4656aec3398d@redhat.com> --- tests/qtest/dbus-display-test.c | 101 ++++++++++++++++++++++++++++++++++++= +++- 1 file changed, 99 insertions(+), 2 deletions(-) diff --git a/tests/qtest/dbus-display-test.c b/tests/qtest/dbus-display-tes= t.c index 5773776cad5..7838ce7323f 100644 --- a/tests/qtest/dbus-display-test.c +++ b/tests/qtest/dbus-display-test.c @@ -7,6 +7,8 @@ #include #include #include "libqtest.h" +#include "qobject/qdict.h" +#include "qobject/qstring.h" #include "ui/dbus-display1.h" =20 static GDBusConnection* @@ -38,11 +40,11 @@ test_dbus_p2p_from_fd(int fd) } =20 static void -test_setup(QTestState **qts, GDBusConnection **conn) +test_setup_args(QTestState **qts, GDBusConnection **conn, const char *args) { int pair[2]; =20 - *qts =3D qtest_init("-display dbus,p2p=3Dyes -name dbus-test"); + *qts =3D qtest_init(args); =20 g_assert_cmpint(qemu_socketpair(AF_UNIX, SOCK_STREAM, 0, pair), =3D=3D= , 0); =20 @@ -52,6 +54,12 @@ test_setup(QTestState **qts, GDBusConnection **conn) g_dbus_connection_start_message_processing(*conn); } =20 +static void +test_setup(QTestState **qts, GDBusConnection **conn) +{ + test_setup_args(qts, conn, "-display dbus,p2p=3Dyes -name dbus-test"); +} + static void test_dbus_display_vm(void) { @@ -360,6 +368,92 @@ test_dbus_display_keyboard(void) qtest_quit(qts); } =20 +static gsize +get_console_ids_count(GDBusConnection *conn) +{ + g_autoptr(GError) err =3D NULL; + g_autoptr(QemuDBusDisplay1VMProxy) vm =3D NULL; + GVariant *console_ids; + gsize n_ids =3D 0; + + vm =3D QEMU_DBUS_DISPLAY1_VM_PROXY( + qemu_dbus_display1_vm_proxy_new_sync( + conn, + G_DBUS_PROXY_FLAGS_NONE, + NULL, + DBUS_DISPLAY1_ROOT "/VM", + NULL, + &err)); + g_assert_no_error(err); + + console_ids =3D qemu_dbus_display1_vm_get_console_ids( + QEMU_DBUS_DISPLAY1_VM(vm)); + if (console_ids) { + n_ids =3D g_variant_n_children(console_ids); + } + return n_ids; +} + +static void +wait_device_event(QTestState *qts, const char *event_name, const char *id) +{ + QDict *resp, *data; + QString *qstr; + + for (;;) { + resp =3D qtest_qmp_eventwait_ref(qts, event_name); + data =3D qdict_get_qdict(resp, "data"); + if (!data || !qdict_get(data, "device")) { + qobject_unref(resp); + continue; + } + qstr =3D qobject_to(QString, qdict_get(data, "device")); + if (!strcmp(qstring_get_str(qstr), id)) { + qobject_unref(resp); + break; + } + qobject_unref(resp); + } +} + +static void +test_dbus_display_hotplug(void) +{ + g_autoptr(GDBusConnection) conn =3D NULL; + QTestState *qts =3D NULL; + gsize n; + + test_setup_args(&qts, &conn, + "-machine q35" + " -device pcie-root-port,id=3Drp0" + " -display dbus,p2p=3Dyes" + " -name dbus-test"); + + n =3D get_console_ids_count(conn); + g_assert_cmpuint(n, =3D=3D, 1); + + qtest_qmp_device_add(qts, "bochs-display", "bochs0", + "{'bus': 'rp0'}"); + + n =3D get_console_ids_count(conn); + g_assert_cmpuint(n, =3D=3D, 2); + + /* + * On q35, PCI device removal is ACPI-based and requires guest + * acknowledgement. Since qtest has no guest OS, issue the delete + * request and force removal via system reset. + */ + qtest_qmp_device_del_send(qts, "bochs0"); + qtest_system_reset_nowait(qts); + wait_device_event(qts, "DEVICE_DELETED", "bochs0"); + + n =3D get_console_ids_count(conn); + g_assert_cmpuint(n, =3D=3D, 1); + + g_clear_object(&conn); + qtest_quit(qts); +} + int main(int argc, char **argv) { @@ -369,6 +463,9 @@ main(int argc, char **argv) qtest_add_data_func("/dbus-display/console", GINT_TO_POINTER(false), t= est_dbus_display_console); qtest_add_data_func("/dbus-display/console/map", GINT_TO_POINTER(true)= , test_dbus_display_console); qtest_add_func("/dbus-display/keyboard", test_dbus_display_keyboard); + if (qtest_has_machine("q35") && qtest_has_device("bochs-display")) { + qtest_add_func("/dbus-display/hotplug", test_dbus_display_hotplug); + } =20 return g_test_run(); } --=20 2.54.0 From nobody Sun Jul 26 11:51:00 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1782301562; cv=none; d=zohomail.com; s=zohoarc; b=j1SOH/08AlOXH2+Mrn0665UcnGMjYfmV5o08ObWsHZXhdBc0A/6YnheNIjkz4oZ9Ngut+LDbcXP94Fqb04uUnob2fFNdfc+VRYnYuS/tE5nHhtqJt1DPlTbO4nm7au+kIsMVV5UlnZDhvA1eIdjJZ4cyI/0nVORncew7ZV+qX24= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782301562; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Cw37MLYe4JL3eomyC5TftfpblK/jJOsSIUjzz8Hwoj4=; b=eMMSEi2vzP2XhHTtpSx3UwHDxcS/YSpM4FRAFsJ2tVC6z6g0mq1782YyvrHyOEDlEnCioBkFvEFiQEAWLagJLuNsvNnAPsN/NdRTO03Rk8dbtAY2cwCCkKtVyCMpoT5byaahXTlvPfZ17DSM7DuiV/ujg2jlhTkieY+3mCWg+6A= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1782301562761847.6539513132037; Wed, 24 Jun 2026 04:46:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wcM2D-0008PI-66; Wed, 24 Jun 2026 07:44:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM2A-0008Bu-6P for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:44:46 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wcM28-0008R7-EA for qemu-devel@nongnu.org; Wed, 24 Jun 2026 07:44:45 -0400 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-462-eHMedxbGOjCpKL4LZ4_axw-1; Wed, 24 Jun 2026 07:44:42 -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 85DE91800841 for ; Wed, 24 Jun 2026 11:44:41 +0000 (UTC) Received: from localhost (unknown [10.44.24.16]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 52EE2180058F; Wed, 24 Jun 2026 11:44:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782301483; 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=Cw37MLYe4JL3eomyC5TftfpblK/jJOsSIUjzz8Hwoj4=; b=EdHjXnGBhSK1a2dSJ0Y7C2rvkO44n15O/B3KPZZWgElvW0pxXl9RcV4zwLqPnb9WeSmGu0 gSk/sx8q4Z1Hrl8m17pTIKqdsj+NNvWzZCqpqORptm2FxPgeYz2dUEm3TIAB6dPyJnMcay 66O9KWW5WcP8U2DQMIh5fkj6fIaZ0FY= X-MC-Unique: eHMedxbGOjCpKL4LZ4_axw-1 X-Mimecast-MFC-AGG-ID: eHMedxbGOjCpKL4LZ4_axw_1782301481 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Wed, 24 Jun 2026 15:41:57 +0400 Subject: [GIT PULL 35/35] vga: implement text mode character blink MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260624-ui-v1-35-482147b0a7af@redhat.com> References: <20260624-ui-v1-0-482147b0a7af@redhat.com> In-Reply-To: <20260624-ui-v1-0-482147b0a7af@redhat.com> To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi X-Developer-Signature: v=1; a=openpgp-sha256; l=3736; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=jPlHF8uxSTi/iiSrhf6Uyjsrv1BONf9nTUXGshN9O7w=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqO8JpxZPRzuqkwqi/+gaCk8CQyFbTW6qW9Ugc2 la8ehCqf16JAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajvCaQAKCRDa6OEJdZac 5UVwD/4w/ix5NeiEbc5ACoGVMdVdrGqQ6+yEY/EqQBgxuPK7mr5n5olSug2C8JV5pvuK6H3dFOs vJq2D22aiOffpZBPts9iKUr5qkrJ75DNoS4CqsiMMg/fhd1jDx4xOb1kMJtcfoDiOWoKMok17PM m85TG8kj4Oty/yCNjHySL5Kq6BLtDnzneEeGIafn3v9pFjVrh10S2hrTBosdcxjV3+x0eO/WX8C rkGbzOwOhtFDbRQFA+bkN/FmI/yeQaIvD66Mx1i88GN3yhOsHv96p6lPg6uFUw7BtUBGTHCnIl0 pUiOwinYa8gAhbdQt/ORt++6o4WRaepiE8nDkTD52KqUwi+Skn1AxpVgk5ivtj6vPZvfzSRhUyi r2yi1zD7ENzX/C1AT+GnMO+GjpyyprZwgaBSP+YmVwP4bzHMRXTthQbHJV6RZ/KLG9Hufj14psQ L1rxZC6Lg7BHEsXbFebk20FxdOBIHNdZ99LMcPfHDfVFFelnmiyH2dAMWFfSiMshI5cK1rBrXiu fD2tL1pWOqCHx9881URpJc6zhhelzg1mKS8g0OmWIdkyBIcwYct/Ia61GpdLatdHeocZN6OGvDC QzIej96NG+ivKtbbFNj00Mlb746jYH21Axq9SK6bgycbymFrjIIRXG6Rn7UhOTqLL8MFqxq5DMR wF17vmYyJ6CdBVw== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com 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, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782301563434158501 When bit 3 of the VGA Attribute Mode Control register is set, attribute bit 7 switches from selecting bright background colors to enabling character blink. Implement this by tracking a separate blink phase timer that toggles every 32 frames (matching real VGA hardware frame counter bit 5 @60hz), and rendering blinking characters by replacing their foreground with background during the off phase. As with cursor, no VMState migration of the fields, as they are transient display-side states. Related to: https://gitlab.com/qemu-project/qemu/-/work_items/1585 Acked-by: Gerd Hoffmann Signed-off-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260525081944.1494798-1-marcandre.lureau@redhat.com> --- hw/display/vga_int.h | 2 ++ hw/display/vga.c | 25 +++++++++++++++++++++---- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/hw/display/vga_int.h b/hw/display/vga_int.h index 747b5cc6cf8..5664317ecd6 100644 --- a/hw/display/vga_int.h +++ b/hw/display/vga_int.h @@ -130,6 +130,8 @@ typedef struct VGACommonState { uint8_t cursor_start, cursor_end; bool cursor_visible_phase; int64_t cursor_blink_time; + bool blink_visible_phase; + int64_t blink_time; uint32_t cursor_offset; const GraphicHwOps *hw_ops; bool full_update_text; diff --git a/hw/display/vga.c b/hw/display/vga.c index 3ea20d7b0f8..abe3f8e0775 100644 --- a/hw/display/vga.c +++ b/hw/display/vga.c @@ -45,8 +45,10 @@ =20 bool have_vga =3D true; =20 -/* 16 state changes per vertical frame @60 Hz */ +/* frame counter bit 4: cursor blink toggles every 16 frames @60 Hz */ #define VGA_TEXT_CURSOR_PERIOD_MS (1000 * 2 * 16 / 60) +/* frame counter bit 5: character blink toggles every 32 frames @60 Hz */ +#define VGA_TEXT_BLINK_PERIOD_MS (1000 * 2 * 32 / 60) =20 /* Address mask for non-VESA modes. */ #define VGA_VRAM_SIZE (256 * KiB) @@ -1190,7 +1192,6 @@ static void vga_get_text_resolution(VGACommonState *s= , int *pwidth, int *pheight * - double scan * - double width * - underline - * - flashing */ static void vga_draw_text(VGACommonState *s, int full_update) { @@ -1286,6 +1287,13 @@ static void vga_draw_text(VGACommonState *s, int ful= l_update) s->cursor_blink_time =3D now + VGA_TEXT_CURSOR_PERIOD_MS / 2; s->cursor_visible_phase =3D !s->cursor_visible_phase; } + if (now >=3D s->blink_time) { + s->blink_time =3D now + VGA_TEXT_BLINK_PERIOD_MS / 2; + s->blink_visible_phase =3D !s->blink_visible_phase; + if (s->ar[VGA_ATC_MODE] & 0x08) { + full_update =3D 1; + } + } =20 dest =3D surface_data(surface); linesize =3D surface_stride(surface); @@ -1317,8 +1325,17 @@ static void vga_draw_text(VGACommonState *s, int ful= l_update) #endif font_ptr =3D font_base[(cattr >> 3) & 1]; font_ptr +=3D 32 * 4 * ch; - bgcol =3D palette[cattr >> 4]; - fgcol =3D palette[cattr & 0x0f]; + if (s->ar[VGA_ATC_MODE] & 0x08) { + bgcol =3D palette[(cattr >> 4) & 0x07]; + if ((cattr & 0x80) && !s->blink_visible_phase) { + fgcol =3D bgcol; + } else { + fgcol =3D palette[cattr & 0x0f]; + } + } else { + bgcol =3D palette[cattr >> 4]; + fgcol =3D palette[cattr & 0x0f]; + } if (cw =3D=3D 16) { vga_draw_glyph16(d1, linesize, font_ptr, cheight, fgcol, bgcol); --=20 2.54.0