From nobody Tue Jun 9 23:07:22 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1781032648; cv=none; d=zohomail.com; s=zohoarc; b=V2aHVecKBdP71rAkRaPrBm3QatkFVrKjanqB2gkw9S7FcF9Hd+SfHaP3VkjS4fsQ8pHkO+RIoJgDg69hZRsjPoDZHptDdxDu/rpHNhI2Rvx1ja6kcPpZdf24X7pSIXR2Sql12vw9Hvh8tE1VrcG7D5/EIloouT2/ylA/4OQO1EU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781032648; 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=OH4Q74ERPGJwIH9McuO1k6xhWrHxhqiSPJG1425IFTs=; b=ROeA/U/KFfihBvuYafub/cQiMXVe+65y93tQBKoviv2nLj5f+zsInHOLEt/lztXhwijnFNHB6pLoiyz4PbXcC9tb35uZKu/Fc7ApvPQA3OXYSHrWK/MUPdHVbM8PE/SAiGuFXu6tD2zqM22zBD5BAZiHJGDtGJyJuBEahm5AoB8= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1781032648596594.18206434926; Tue, 9 Jun 2026 12:17:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wX1wY-000629-1D; Tue, 09 Jun 2026 15:16: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 1wX1wO-0005zK-Ex for qemu-devel@nongnu.org; Tue, 09 Jun 2026 15:16:48 -0400 Received: from mail-wm1-x32b.google.com ([2a00:1450:4864:20::32b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wX1wM-00064y-RP for qemu-devel@nongnu.org; Tue, 09 Jun 2026 15:16:48 -0400 Received: by mail-wm1-x32b.google.com with SMTP id 5b1f17b1804b1-490ac357c55so64417655e9.1 for ; Tue, 09 Jun 2026 12:16:46 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4601f351d69sm115984364f8f.29.2026.06.09.12.16.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 12:16:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781032605; x=1781637405; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=OH4Q74ERPGJwIH9McuO1k6xhWrHxhqiSPJG1425IFTs=; b=TcaW0SIEhx0GNjrRmmG/VnFEtS+Gb0hrmUg7vNo4g6fvRNbNYitsa5vg2Onxp1V72R CCvy0pa+/LOkpWqFVXeMNJGq3HL/vqmkpxWhp2qqCcnBPYxROw7mAP6tfECItYjqlLp6 5IDORGscXkORK6BjCJV7LhbpYjKb4M4dHiqc1x/12Q/m+FLGH3RgO4YyPwBFk8abBZtw Cz2HpmB5lBjS1YjPwue5wjuVa34mkkg4jNZkYnpHI7wUJ/Qno0lfZ0He/MSRjL+Hoc+r 7YT5G/GJpzwwwEMG8EEPMZwu96NDFFM9y3lf80GFFyDJc7FVqc6GpbaRPjnQwJCvEXKN rnLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781032605; x=1781637405; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=OH4Q74ERPGJwIH9McuO1k6xhWrHxhqiSPJG1425IFTs=; b=ZkgVh7iTPZKMQVuplFDnfHZnIYhOJ/SgZz5OGMdCnKRwUGCNdJOnUfYISgGJYFZrmS Kalgs/GyLc02ceXPw50DZwhPt9ZCUOy7CpVIsRRTjIpWBsYLJ/z3HmbKg+ILVcnkZDmF pe1U/U8sDh68BGmtqkBsodwI7MVMf1OIdNa84yD4YW0sSu8ESUj4ABMH3J0tKtN8UDkq MAcmBNoOFdBmjJvzdl47yeh4Po5PQ4G2SnDX+ZwpV5AXkONy/XRPcrPElxuyNDqyC/ue le1XHg6HUzxzoo2HskRXKieyF4Qw1qxroFtEtbJeZgmc0XySahbip0QOFnzus/sdPkWs I1tw== X-Gm-Message-State: AOJu0Yy6n0OgWfOEVHwepO5fr+0/SaqFfQxO8Nn+k2jEmn0kzKQ19UgJ ngGmVNyC3W6P1Ce4yShkCu/Hmc+4jnxIDB9alj+DPQ/FScBzUV5k8gNv X-Gm-Gg: Acq92OE76QlFLk1OIVh6wtOBe8xCtwY8Sxb8W+xTinEVyI7rWH3lUyRBxY+kCwet8Fd 9WugUBzw4gfqhznb47szW0FIn1itfYKVavBP7FfsZowX+p3WWO/SVMcGCHBuA1ERLJUBIxMRTzo CgRGyfdt29inF6BOkTzYYa/QpMmb1lKSb3jilamgJf4WJZxp8zbY42mXICPfrs3ee6uL33Q0gPZ URKugdTr5SZ+ddNcgrUzQndTVj7dTXDK83Kzs+z9pX0JBSCprGWsJubjh/o+XUt8akDv9Bf4Mey q7jow7d5ayX/bWHcAw6xg4P/k7RDVfue/Mixy8GC4hq8IhC3Qh2NoXsrqr0E+nDvZcDHRQT3gKA TBAfgp+5sKIpeJCvcu4YZyrZfLTjidF+gq72waeqq0+/DSmSal/UhA+1SsaOlCFuxpNlRdleSHK erVO8i6jSULMpSHJcEBnad0UnKB1pW0rW/aBt4ec2G3WoTlUgy7agcJGXfxd1qAqo= X-Received: by 2002:a05:600c:4708:b0:490:bd66:e522 with SMTP id 5b1f17b1804b1-490c26038d2mr343852385e9.29.1781032604927; Tue, 09 Jun 2026 12:16:44 -0700 (PDT) From: Filip Hejsek Date: Tue, 09 Jun 2026 21:16:11 +0200 Subject: [PATCH v7 01/12] chardev: add cols, rows fields MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260609-console-resize-v7-1-0c550fdcec15@gmail.com> References: <20260609-console-resize-v7-0-0c550fdcec15@gmail.com> In-Reply-To: <20260609-console-resize-v7-0-0c550fdcec15@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Szymon Lukasz X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1781032602; l=2201; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=9+RA4/uRgkyYUZwZVDrcY1V52SqthzJ4VPoz0W5p3dU=; b=9bTaaLuF5xIqXgktzI943lEKRWKFzOs+8QCZkGZ9d+JvKgWFn3nU/lRAu/AYVnjiEu9FgkQUR julBy1wtjjEDjKQOOPJB0AgPgrt8ptoI/Rparf23mQsP8lXByK7b+Xe X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= 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=2a00:1450:4864:20::32b; envelope-from=filip.hejsek@gmail.com; helo=mail-wm1-x32b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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 @gmail.com) X-ZM-MESSAGEID: 1781032651006154100 From: Szymon Lukasz These fields should be interpreted as the size of the terminal connected to a given chardev. Signed-off-by: Szymon Lukasz Reviewed-by: Daniel P. Berrang=C3=A9 [Filip: CharBackend -> CharFrontend] Signed-off-by: Filip Hejsek --- chardev/char-fe.c | 13 +++++++++++++ include/chardev/char-fe.h | 10 ++++++++++ include/chardev/char.h | 1 + 3 files changed, 24 insertions(+) diff --git a/chardev/char-fe.c b/chardev/char-fe.c index a44f267373..c61c91f779 100644 --- a/chardev/char-fe.c +++ b/chardev/char-fe.c @@ -329,6 +329,19 @@ void qemu_chr_fe_set_echo(CharFrontend *c, bool echo) } } =20 +void qemu_chr_fe_get_winsize(CharFrontend *c, uint16_t *cols, uint16_t *ro= ws) +{ + Chardev *chr =3D c->chr; + + if (chr) { + *cols =3D chr->cols; + *rows =3D chr->rows; + } else { + *cols =3D 0; + *rows =3D 0; + } +} + void qemu_chr_fe_set_open(CharFrontend *c, bool is_open) { Chardev *chr =3D c->chr; diff --git a/include/chardev/char-fe.h b/include/chardev/char-fe.h index 5f8a6df17d..53b8d2a1dc 100644 --- a/include/chardev/char-fe.h +++ b/include/chardev/char-fe.h @@ -157,6 +157,16 @@ int qemu_chr_fe_wait_connected(CharFrontend *c, Error = **errp); */ void qemu_chr_fe_set_echo(CharFrontend *c, bool echo); =20 +/** + * qemu_chr_fe_get_winsize: + * @cols: the address for storing columns + * @rows: the address for storing rows + * + * Get the size of the terminal connected to the chardev backend. + * Returns *cols =3D *rows =3D 0, if no associated Chardev. + */ +void qemu_chr_fe_get_winsize(CharFrontend *c, uint16_t *cols, uint16_t *ro= ws); + /** * qemu_chr_fe_set_open: * @c: a CharFrontend diff --git a/include/chardev/char.h b/include/chardev/char.h index 7377d8e60a..6394ec2ffe 100644 --- a/include/chardev/char.h +++ b/include/chardev/char.h @@ -66,6 +66,7 @@ struct Chardev { bool logtimestamp; bool log_line_start; int be_open; + uint16_t cols, rows; /* used to coordinate the chardev-change special-case: */ bool handover_yank_instance; GSource *gsource; --=20 2.54.0 From nobody Tue Jun 9 23:07:22 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1781032648; cv=none; d=zohomail.com; s=zohoarc; b=RLVREC1LQfd99HZz/RbmIBWnj7WPMB5zbx+0q0nkeC7lxsiBMSxMGYGpAYbuHMDRZtzIjJY1gDrYmf20nFfIBKxfL63adBsxE+BKD/nel+OfS/0CqVlSV88hK6qplyNdnN+tOExopU13nHcJk7XqfSvKod24cl4hWfT51iMV1fY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781032648; 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=2QODK7RAjxhHXMpZAuJ64mc/CMmtLi4OimG2D3V5RTI=; b=Zk/Dc5a9ef+768tmCutU/IoczrQtdVR+NwNNANrrRZL5g6YE+rf8kZp4W6v2Ua55wNn8X8BptZ2A11POPk6sc6vLS1Aq1ICVB2eXqWoftBNPg6UMJYIIE0LsBzm0z9HizVLze0shRUzFa3k0B3PUXQcZm/DgomVR3dg5miPXcxA= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1781032648631619.6734614912923; Tue, 9 Jun 2026 12:17:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wX1we-00067h-DY; Tue, 09 Jun 2026 15:17:04 -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 1wX1wT-00062A-JB for qemu-devel@nongnu.org; Tue, 09 Jun 2026 15:16:53 -0400 Received: from mail-wm1-x329.google.com ([2a00:1450:4864:20::329]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wX1wN-00068y-Qp for qemu-devel@nongnu.org; Tue, 09 Jun 2026 15:16:53 -0400 Received: by mail-wm1-x329.google.com with SMTP id 5b1f17b1804b1-490ae94a89eso50997205e9.1 for ; Tue, 09 Jun 2026 12:16:47 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490dc47d474sm4069785e9.1.2026.06.09.12.16.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 12:16:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781032606; x=1781637406; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=2QODK7RAjxhHXMpZAuJ64mc/CMmtLi4OimG2D3V5RTI=; b=cbONm4XY5o2PAKYcBqqiJrBttCAMjDt1lIqXb11mJL/DxUrWU5C5Bh45cGeZg+GMWc 2MIHnpFNL7OCrlUTqoAlelXvcmfWpOrVSgkPgQzxC3HCoGPCIaP2YEEJytwODuqCDJ6m 0wVmm/ABvM2KvRzwFzfKrf/Mx5G8/X5J9dbKzSq2na9MaRTRhAWAzOL9hbTzAG9tOkiU QyhLYFWmGCLzIw90PL87PFhN1um8ZIMqq4c0hFgUbYxB5u3nb+ByQpNaerCw5VyWa65y LYNSbPB4A1K34IMJcHolzkw/PD/7fOkTo9UDkEn36Dph6ArEvmeSTI1tx+F2uCddzIDg zLXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781032606; x=1781637406; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=2QODK7RAjxhHXMpZAuJ64mc/CMmtLi4OimG2D3V5RTI=; b=dCTt7fbm0Xoy0Poe0P75XWEF1zC9f341ysNp5C8NzMaaVEu7khynmht9ZrPsyoor8K XIDL6RkhWxni40L+UTc5V6VAnLtEdOMeBdd8DrHptUb+zfaNFJYkU5BRVbEyAk6009Ec Fsf37uUOH5Pz51FR469aYgMIwRa9VQlXHM9bXqs7wyS+VwUveA6fxcWdrXwJkYUXmRcH e5929TIPdxL9iQ3xPC1qQxl8MwZH2XhMOLUR+GPI8bnwZ+bHfISgGC/VtRqOC6SmgKBt eesdtLkQxgQfZU7HhcvOf7hSRf7kVKPo6+0Wxlmt10VpSHGqiwSOZt2dLYlG8+AHnwOu oYYA== X-Gm-Message-State: AOJu0YzYKArr81Dr/YB3aMqlBoqgnAcCKlgZqxj8kS3+PVZi8Ub+Jlm4 Ozbh5sTz2QOnCYKTNc+8zgguth9k+oN2GQVvlWmcyseMZkdkH/HaEict X-Gm-Gg: Acq92OEWc2NtPW75vi/ggIG5lnL4knixV7dJ6mvpHHA1LLTphCNKvGUtPJDHnwtmckv UrTzgmL/jZ1kK3BGETLjYoyFOsMJrh+ghYb9Isf2czdb5IKI7cx7VGUgCyQHo76PjPmbflwgUmS 3JyW6l6WIlzp9A3p+bbZUtLSpPut6Y0Owg2Mpc13GjliQ325CbyXhI/1R/ZDmh3hj6rj8Qy3EqJ wYvIgE2mdO6gW1HiAaPrl8ifnB8CcTSGEb4R6Y6DbGE6KSqjo1E4rWrlrUtzcRGlhIKZSnCmgBo taQXHb7Wa6sEsmyVI3mhb8wXfXlR7ux7a90NONOwKt0M/iAsWLZvIlCrPJ2Ppw6qvUJt43BpmCJ BR6j2VVsmwxSD1L3Cn91aZ6bpLAYzDoDaKikMg5xJIs7gBQrq2rblycLvknb94JAfT6ESX5GZUZ 5S94uNId5TNlTo9dr9nXziWoz0Xa7qXkG5+0lmRplIbLXntOZHefN7ld1MUXLcgKs= X-Received: by 2002:a05:600c:458a:b0:490:389:7644 with SMTP id 5b1f17b1804b1-490c25fbd78mr313630745e9.17.1781032606069; Tue, 09 Jun 2026 12:16:46 -0700 (PDT) From: Filip Hejsek Date: Tue, 09 Jun 2026 21:16:12 +0200 Subject: [PATCH v7 02/12] chardev: add CHR_EVENT_RESIZE MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260609-console-resize-v7-2-0c550fdcec15@gmail.com> References: <20260609-console-resize-v7-0-0c550fdcec15@gmail.com> In-Reply-To: <20260609-console-resize-v7-0-0c550fdcec15@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Szymon Lukasz X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1781032602; l=8384; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=0OvxJqbqPXFzNV6XFwCbd3OGUDwljXUyBxJXxSuRTW4=; b=T/8/ASTvPCk+wxNjmjJw5aZoZfnjhxbwpAkOgYAcjyJlUGPdLKYChQYRE+QU/Y5BecuKEmvM4 5kPb2l/tM5rAZ43tE9Nrt06c4ze7EGuxx5nyxtNjvYWvpni2paaYhWb X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= 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=2a00:1450:4864:20::329; envelope-from=filip.hejsek@gmail.com; helo=mail-wm1-x329.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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 @gmail.com) X-ZM-MESSAGEID: 1781032651077154100 From: Szymon Lukasz Add a new chardev event, CHR_EVENT_RESIZE, which a backend should trigger if it detects the size of the connected terminal changed. Signed-off-by: Szymon Lukasz [Filip: add note that only the focused frontend gets the event] Signed-off-by: Filip Hejsek --- backends/cryptodev-vhost-user.c | 1 + chardev/char.c | 1 + hw/block/vhost-user-blk.c | 1 + hw/char/terminal3270.c | 1 + hw/char/virtio-console.c | 1 + hw/ipmi/ipmi_bmc_extern.c | 1 + hw/scsi/vhost-user-scsi.c | 1 + hw/usb/ccid-card-passthru.c | 1 + hw/usb/dev-serial.c | 1 + hw/usb/redirect.c | 1 + hw/virtio/vhost-user-base.c | 1 + hw/virtio/vhost-user-scmi.c | 1 + include/chardev/char.h | 6 ++++++ monitor/hmp.c | 1 + monitor/qmp.c | 1 + net/passt.c | 1 + net/vhost-user.c | 1 + 17 files changed, 22 insertions(+) diff --git a/backends/cryptodev-vhost-user.c b/backends/cryptodev-vhost-use= r.c index cc478d9902..36564d4307 100644 --- a/backends/cryptodev-vhost-user.c +++ b/backends/cryptodev-vhost-user.c @@ -173,6 +173,7 @@ static void cryptodev_vhost_user_event(void *opaque, QE= MUChrEvent event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/chardev/char.c b/chardev/char.c index ca8b37ed8d..5e62f2949e 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -75,6 +75,7 @@ void qemu_chr_be_event(Chardev *s, QEMUChrEvent event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/block/vhost-user-blk.c b/hw/block/vhost-user-blk.c index c151e83677..16c1a536f1 100644 --- a/hw/block/vhost-user-blk.c +++ b/hw/block/vhost-user-blk.c @@ -413,6 +413,7 @@ static void vhost_user_blk_event(void *opaque, QEMUChrE= vent event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/char/terminal3270.c b/hw/char/terminal3270.c index 989b6f6ee1..acd754bcfa 100644 --- a/hw/char/terminal3270.c +++ b/hw/char/terminal3270.c @@ -169,6 +169,7 @@ static void chr_event(void *opaque, QEMUChrEvent event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/char/virtio-console.c b/hw/char/virtio-console.c index 4737b9a56e..36ad2ddc3f 100644 --- a/hw/char/virtio-console.c +++ b/hw/char/virtio-console.c @@ -165,6 +165,7 @@ static void chr_event(void *opaque, QEMUChrEvent event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/ipmi/ipmi_bmc_extern.c b/hw/ipmi/ipmi_bmc_extern.c index fa08ed6c21..bd7c61b2d2 100644 --- a/hw/ipmi/ipmi_bmc_extern.c +++ b/hw/ipmi/ipmi_bmc_extern.c @@ -436,6 +436,7 @@ static void chr_event(void *opaque, QEMUChrEvent event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/scsi/vhost-user-scsi.c b/hw/scsi/vhost-user-scsi.c index 3612897d4b..5601097bc9 100644 --- a/hw/scsi/vhost-user-scsi.c +++ b/hw/scsi/vhost-user-scsi.c @@ -226,6 +226,7 @@ static void vhost_user_scsi_event(void *opaque, QEMUChr= Event event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/usb/ccid-card-passthru.c b/hw/usb/ccid-card-passthru.c index 5ab7855272..3f4052ec82 100644 --- a/hw/usb/ccid-card-passthru.c +++ b/hw/usb/ccid-card-passthru.c @@ -323,6 +323,7 @@ static void ccid_card_vscard_event(void *opaque, QEMUCh= rEvent event) case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: case CHR_EVENT_CLOSED: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/usb/dev-serial.c b/hw/usb/dev-serial.c index b238cb7937..98d2abbd56 100644 --- a/hw/usb/dev-serial.c +++ b/hw/usb/dev-serial.c @@ -576,6 +576,7 @@ static void usb_serial_event(void *opaque, QEMUChrEvent= event) break; case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c index bde821e214..7a492c1e54 100644 --- a/hw/usb/redirect.c +++ b/hw/usb/redirect.c @@ -1387,6 +1387,7 @@ static void usbredir_chardev_event(void *opaque, QEMU= ChrEvent event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/virtio/vhost-user-base.c b/hw/virtio/vhost-user-base.c index 01ab9ca56b..fd3a9d6265 100644 --- a/hw/virtio/vhost-user-base.c +++ b/hw/virtio/vhost-user-base.c @@ -267,6 +267,7 @@ static void vub_event(void *opaque, QEMUChrEvent event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/virtio/vhost-user-scmi.c b/hw/virtio/vhost-user-scmi.c index f9264c4374..180787ec6d 100644 --- a/hw/virtio/vhost-user-scmi.c +++ b/hw/virtio/vhost-user-scmi.c @@ -214,6 +214,7 @@ static void vu_scmi_event(void *opaque, QEMUChrEvent ev= ent) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/include/chardev/char.h b/include/chardev/char.h index 6394ec2ffe..ee9f24038b 100644 --- a/include/chardev/char.h +++ b/include/chardev/char.h @@ -22,6 +22,12 @@ typedef enum { CHR_EVENT_OPENED, /* new connection established */ CHR_EVENT_MUX_IN, /* mux-focus was set to this terminal */ CHR_EVENT_MUX_OUT, /* mux-focus will move on */ + CHR_EVENT_RESIZE, /* + * the size of the terminal connected to + * the chardev has changed. NOTE: this event is only + * sent to the focused frontend, so you should also + * update the size on receiving CHR_EVENT_MUX_IN. + */ CHR_EVENT_CLOSED /* connection closed. NOTE: currently this event * is only bound to the read port of the chardev. * Normally the read port and write port of a diff --git a/monitor/hmp.c b/monitor/hmp.c index cc4390486e..67d3fcba6d 100644 --- a/monitor/hmp.c +++ b/monitor/hmp.c @@ -1496,6 +1496,7 @@ static void monitor_event(void *opaque, QEMUChrEvent = event) break; =20 case CHR_EVENT_BREAK: + case CHR_EVENT_RESIZE: /* Ignored */ break; } diff --git a/monitor/qmp.c b/monitor/qmp.c index 687019811f..3d5ab8ff4f 100644 --- a/monitor/qmp.c +++ b/monitor/qmp.c @@ -486,6 +486,7 @@ static void monitor_qmp_event(void *opaque, QEMUChrEven= t event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/net/passt.c b/net/passt.c index 45440c399b..e65198960e 100644 --- a/net/passt.c +++ b/net/passt.c @@ -428,6 +428,7 @@ static void passt_vhost_user_event(void *opaque, QEMUCh= rEvent event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/net/vhost-user.c b/net/vhost-user.c index 2d0fc49b4d..b849de92da 100644 --- a/net/vhost-user.c +++ b/net/vhost-user.c @@ -363,6 +363,7 @@ static void net_vhost_user_event(void *opaque, QEMUChrE= vent event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } --=20 2.54.0 From nobody Tue Jun 9 23:07:22 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1781032753; cv=none; d=zohomail.com; s=zohoarc; b=nV4hlOf98NO594yN/81WD3ILNfkF7c5uy5f4yGHEVULfRqavhCZSN709ppUyV78Eu6SIFapSXXJksKSRpUNrgFanGSyrdjPjavOYzEC22r8V0QCRHG6UPvMe/bNjMjxJsdzIGbg0bsLJ1adpL4eWlfvWzcEtbK/qFKbtoXSM/TU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781032753; 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=9B/5E6JiMUlKt4qUW1t+m5CI7s5nzI7dp/Xg9QWxW90=; b=nMF6ra531fXA6UKLvwkxsQ8D6VP7x0EqxuPnRRarXPGRv9qYoNg3cazVxD1yJAk65xjJ4ZLRuQd6VvZGnla//jqWrFbaGDJZMpQM6wM569YzFhAaEbuXnrRJy7qfqlAUzaJU82Xmgq6vMtiyRGpedBrS3hKUm000X0qW9EbC10k= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1781032753628430.85393209783035; Tue, 9 Jun 2026 12:19:13 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wX1wo-00069S-3A; Tue, 09 Jun 2026 15:17:15 -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 1wX1wQ-00060t-Hu for qemu-devel@nongnu.org; Tue, 09 Jun 2026 15:16:52 -0400 Received: from mail-wm1-x334.google.com ([2a00:1450:4864:20::334]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wX1wO-0006CS-Oq for qemu-devel@nongnu.org; Tue, 09 Jun 2026 15:16:50 -0400 Received: by mail-wm1-x334.google.com with SMTP id 5b1f17b1804b1-490b7866869so66343095e9.2 for ; Tue, 09 Jun 2026 12:16:48 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490bc413541sm540304905e9.14.2026.06.09.12.16.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 12:16:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781032607; x=1781637407; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=9B/5E6JiMUlKt4qUW1t+m5CI7s5nzI7dp/Xg9QWxW90=; b=fFSz3iBfbArGhPYOH00Hlswk9pCTkx7wIZyjSYqn5CiPWWbLdGp0IUpXuxYuiDodgs Rux+IcxdNQiLbp+tvDZTzpk4bu2JNNWeiVjFXuwHsd1792mJsHKJWsYHkBQtLzAPIYFc A2qU42gvk1X61eIxZiyeYo0US94x7zAeXLqyH9bzZ5jwtk3JGQJ5rRAwuxqKRWliuUld ZfI5P1nUQOSMRpYue97rq/a52jW1wt3nU/33Z3Ax99VPZk3KWdNnm/ZpfVMvZoLp7ko1 YK17iRQn6b0MvgM3VW8X8tycgDl6bWR+NrGpCl4aNFtnKuzcXJkWtkM3xeELiXHrSAgr 9Kfw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781032607; x=1781637407; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=9B/5E6JiMUlKt4qUW1t+m5CI7s5nzI7dp/Xg9QWxW90=; b=YjO4bkdt8t64JVljO4LIGPMMVMpu4V2w1sD3/HXwOwHUEoFAVfi9LxkehoIIb/6XTE DpYubsn4bWGUkecmBR+poXEVF7ZmqNyH2z4wLxshMtxgSw3W99TIs9HelvHNxyco8ylU F4vrea1TpOKgHKz8Ym7j9DGY9svttjcZ4s95uYsJY2E+tjuOgOUlczBRvw+zZrK/Mghk YirJHlUSucS/ZPiHnBIuDwn9Ciq6A/R43brucG1kohRWDNzJJVYnnDdSdg/nLa5/Vck8 C1sLpD+xGbkcYvlgpprKxbdR4GThz0Ks1dSIUF4+Sk+TPXDFPGvH6oWduIbJEUnZteta /plQ== X-Gm-Message-State: AOJu0YyIXvSZkXBSeKt9ZoArnb7Wk/SDOiplBNNxJjlryrTb651UV8sq 509uD8DbOalBM+2B9Bf7XKad4KeJm0nJJD5cpQfGGstsQccSqVByIK5K X-Gm-Gg: Acq92OG0Lc9I+0V519u1GyFk4w79ctgIz1RlwkY3clTHlMBi5iDl+EW4C09GO9hSmNv Fzpo3cWwdWfFeE3EA9nYiNDMhTkQ5mOAB9n1A+UfOw0eYAVQXaeI6YJhuf9R8mH07+elzoNvvj5 HK6PW3XeVpx8M6NwujtI4lhEfLgQsNtoKCRtyb2jKrlzJhW5cJWjM+8DC2UWjk64qVVYpSkrtSm 5kdjc45vRAqx+gOu9v3bbKaZRIkmBGUs9ti8OdFoijAeCNGC4Ue+rC20hBvGGtihPnlor44ItPq JaJNWLnopaw967Rp1RB2k1dzugAxUgUCvP6PK3DF2oxnJmPnT8QUudOFYmCSaamcLNyV6lQTq2k 9YZGi0ePIKsC5ygp2DjLO+ORG54An8iZmfHX24nxxQ2OxaSSlLq7Di52a90mWJ9amPuMOq38IXW LDP5c+kgYde/LHV8mDSxSEPVCYPZVIb3TJtOd+zPD09aKYSJXtXS18CHhlwAu+PG4= X-Received: by 2002:a05:600c:3107:b0:490:9588:bdb6 with SMTP id 5b1f17b1804b1-490c264cc2emr364165075e9.33.1781032607150; Tue, 09 Jun 2026 12:16:47 -0700 (PDT) From: Filip Hejsek Date: Tue, 09 Jun 2026 21:16:13 +0200 Subject: [PATCH v7 03/12] chardev: add qemu_chr_resize() MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260609-console-resize-v7-3-0c550fdcec15@gmail.com> References: <20260609-console-resize-v7-0-0c550fdcec15@gmail.com> In-Reply-To: <20260609-console-resize-v7-0-0c550fdcec15@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Szymon Lukasz X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1781032602; l=1613; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=uSUCdVC3f6uZBZ1BrcWPv0sdcMuziw41oxVRB1g/F+Q=; b=4mlBCeHcmFdwRamnV9YtkmGSCdXrPu3Kkbw3uavLWOF7Glu5kDkkdIQfdeg0ggATr6rP1rgK6 Pi3aZmX3jN+AVFKGpbmjQUzHvH8tV09DQf2gCc0Qz7T2aT2okalR0dz X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= 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=2a00:1450:4864:20::334; envelope-from=filip.hejsek@gmail.com; helo=mail-wm1-x334.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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 @gmail.com) X-ZM-MESSAGEID: 1781032756313154100 From: Szymon Lukasz This function should be called whenever we learn about a new size of the terminal connected to a chardev. Signed-off-by: Szymon Lukasz Reviewed-by: Daniel P. Berrang=C3=A9 Signed-off-by: Filip Hejsek --- chardev/char.c | 11 +++++++++++ include/chardev/char.h | 2 ++ 2 files changed, 13 insertions(+) diff --git a/chardev/char.c b/chardev/char.c index 5e62f2949e..d4ef717c56 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -386,6 +386,17 @@ int qemu_chr_wait_connected(Chardev *chr, Error **errp) return 0; } =20 +void qemu_chr_resize(Chardev *chr, uint16_t cols, uint16_t rows) +{ + if (cols !=3D chr->cols || rows !=3D chr->rows) { + chr->cols =3D cols; + chr->rows =3D rows; + if (chr->be_open) { + qemu_chr_be_event(chr, CHR_EVENT_RESIZE); + } + } +} + QemuOpts *qemu_chr_parse_compat(const char *label, const char *filename, bool permit_mux_mon) { diff --git a/include/chardev/char.h b/include/chardev/char.h index ee9f24038b..2616c19cc0 100644 --- a/include/chardev/char.h +++ b/include/chardev/char.h @@ -235,6 +235,8 @@ int qemu_chr_write(Chardev *s, const uint8_t *buf, int = len, bool write_all); #define qemu_chr_write_all(s, buf, len) qemu_chr_write(s, buf, len, true) int qemu_chr_wait_connected(Chardev *chr, Error **errp); =20 +void qemu_chr_resize(Chardev *chr, uint16_t cols, uint16_t rows); + #define TYPE_CHARDEV "chardev" OBJECT_DECLARE_TYPE(Chardev, ChardevClass, CHARDEV) =20 --=20 2.54.0 From nobody Tue Jun 9 23:07:22 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1781032694; cv=none; d=zohomail.com; s=zohoarc; b=c5G4uHE2Yvo2J/0WrPQ1ZSYEAxE3HVW4tCBsQHWnMWdX8u+9x7e7/EA05/ghK0a37q9FC8uONddqDKgx+XtRkPkfDkfpQG1agwm1jqbOSupuzylKSy2+zWZ3SEaM1UcFkABSSe4T4dJZTtMbhFsPtpOXCBETkDJMDNB4mAVUDvg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781032694; 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=c+dr2YiBQ+7LoFZn8iiS6Nf0W/hS4pbeXFQ7c1bY7RU=; b=RlKIdK0OWMI77C1+MLxnTQ5+N3LXpykyP5Bv+Ad5bRegj59bV3IhmkNz9HeRZdGhkh+d55RS4Kvu2YqcmMGRVaYx5paitOHPOTfu0VB56DknNDQxV1M04Vq9Gewts39DzeVFA0jHi3922GOmzUfvbhac8LQcn9+Ry2VxxCS7dNA= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1781032694729358.3777363565715; Tue, 9 Jun 2026 12:18:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wX1wj-00068w-VU; Tue, 09 Jun 2026 15:17:10 -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 1wX1wR-00061K-MA for qemu-devel@nongnu.org; Tue, 09 Jun 2026 15:16:52 -0400 Received: from mail-wm1-x333.google.com ([2a00:1450:4864:20::333]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wX1wP-0006Fz-Vz for qemu-devel@nongnu.org; Tue, 09 Jun 2026 15:16:51 -0400 Received: by mail-wm1-x333.google.com with SMTP id 5b1f17b1804b1-490ace40f4bso68729265e9.3 for ; Tue, 09 Jun 2026 12:16:49 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4601f0a43e9sm64596889f8f.0.2026.06.09.12.16.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 12:16:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781032608; x=1781637408; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=c+dr2YiBQ+7LoFZn8iiS6Nf0W/hS4pbeXFQ7c1bY7RU=; b=Q1nKdhyuIG1dGBUMrOBXpKWS3Y1HfZTBT/eHaC/xLBnfTG46WwD9iBYqaLQvTAUt90 K7rx7+bfvUsGSw0XDR7jEswgWJKR5UWab1kUdq35uGiDO9sKhyCgFLyN013V6okM9rVk fBrcZSmrnd7ensZY6dLkjIjl1YcKc5Ah0p/6UkDZ7w/Ws7+ZrnsnTwuueEJv0ol3Moie nMASTvI0v4GSR+TDhaoLmZDLyR/8x7/FVUCzYAg+VjKdXRrrVMnu4RUYnbmuRpl/dnKC jqpcgCI3jhtWMHXYDDTViSsS7IIPenMbHOTUxuSse6mPltNAYeB5FbJFWS9EFt24scC7 +mmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781032608; x=1781637408; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=c+dr2YiBQ+7LoFZn8iiS6Nf0W/hS4pbeXFQ7c1bY7RU=; b=llRd63MhjdwqkSbKqqTEEyyd1IjQfB3gowNQPgk9Xv6TKP6ESDFlN6ukMck7/wqxuZ 9KDZWbwLSW5TX+6M+/uI9MUqHs0nRmtkSvtduL1UG1bONt5qNdYrLQEmUuc0lEFTQJ8N SETvd9LY7v2cqyDJsRTDDf2cYJqJZwOZKwrdlA2ThBRzAcTNUNjlEzNKxNHgAnJyM28D 0hcMyEQsQGoCWNRFzA7pTsZ5bgyrd8SyXo9qQPwCIXsxuHKFQFLLcsW/lNWzltsQw1Y3 qALCETbHAzf29oYk1nZ2Gw3xhEJ8XPEkKkjWqt1/9n1OVMf7a/lOZdfywP4kL+QWlzkR FT2Q== X-Gm-Message-State: AOJu0YyahxZm/STlQa2u/ipzSADYJNhKvlCcpZEdV+eRr8En9SuGXYoq vvB7fF9Ls9XjiTplUS3I146bRD0xXecwNTZxTDNk/fqomz3IPMhv1o5L X-Gm-Gg: Acq92OGS4Z885r3xtAO1gUidXyzBUv0ljoTN3wnTiBJyGt23pqIEYNMmthUJaqKMp1V Qzlkud4p9O1fmHPNJa5pe1vIj0uG3YDwHl6Gyx5NdsHXYmYxYcUpnyjuPKsuJPO8ptuoRXXTkqv pcBn++ANCTtYu3lWyabXgQVVsHxgkd9CBzwHktbK3qQ0wHEqQ8E/wYdj/Oiij14KtRlW84WJypv UkuXdzpeuZFjJJ/tG+kzvVN63oDBzLQEtcAyk8UsYdU177EFC5Rc8x+Idp8SwtSPDyrwCRrUxB4 j9yZflgHcEkVg6W54l8s1PvuSZ0en95n8jYoVifOnZKYPwmw4RjkLmBOHIUmC06H72TcRQZzLRr 5AYZgkIaiDKp8Y3FBbQ0f9RYfaVLTuTjFNQzASMj8fdZKN/blJUmBBP93/3KoSlRjLz4Fntmnyc h9s98rBRGFyy6L4XJu//+3+4oZNV5cGvKkQWCO8PrgLTRqXmbkuYZbLZEo02z0Ozo= X-Received: by 2002:a05:600c:6792:b0:48a:f18:ece4 with SMTP id 5b1f17b1804b1-490c25ee920mr364215185e9.24.1781032608249; Tue, 09 Jun 2026 12:16:48 -0700 (PDT) From: Filip Hejsek Date: Tue, 09 Jun 2026 21:16:14 +0200 Subject: [PATCH v7 04/12] char-mux: add support for the terminal size MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260609-console-resize-v7-4-0c550fdcec15@gmail.com> References: <20260609-console-resize-v7-0-0c550fdcec15@gmail.com> In-Reply-To: <20260609-console-resize-v7-0-0c550fdcec15@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Szymon Lukasz X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1781032602; l=1674; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=NeR36JL0tdGPnl41UctbgG46PQzdHkSZ0rBEOEK3RZQ=; b=AJ8qYSPUsd5BbjD9iBTMJCVPQaJaPPk/vjP5V1qnO0opjFSrSf6Yg3cktDmZ6RuQrUuTC7rrP W+0AhcTUzA0CsIcOo6QJFHodxyMH9esLGWjC27w7c0hp4KQi9s04bUX X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= 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=2a00:1450:4864:20::333; envelope-from=filip.hejsek@gmail.com; helo=mail-wm1-x333.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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 @gmail.com) X-ZM-MESSAGEID: 1781032697537154100 From: Szymon Lukasz The terminal size of a mux chardev should be the same as the real chardev, so listen for CHR_EVENT_RESIZE to be up to date. We forward CHR_EVENT_RESIZE only to the focused frontend. This means frontends should update their view of the terminal size on receiving CHR_EVENT_MUX_IN. Signed-off-by: Szymon Lukasz Reviewed-by: Daniel P. Berrang=C3=A9 Signed-off-by: Filip Hejsek --- chardev/char-mux.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/chardev/char-mux.c b/chardev/char-mux.c index 881443d869..5a90f0221b 100644 --- a/chardev/char-mux.c +++ b/chardev/char-mux.c @@ -264,9 +264,24 @@ void mux_chr_send_all_event(Chardev *chr, QEMUChrEvent= event) } } =20 +static void mux_update_winsize(Chardev *chr) +{ + MuxChardev *d =3D MUX_CHARDEV(chr); + uint16_t cols, rows; + + qemu_chr_fe_get_winsize(&d->chr, &cols, &rows); + qemu_chr_resize(chr, cols, rows); +} + static void mux_chr_event(void *opaque, QEMUChrEvent event) { - mux_chr_send_all_event(CHARDEV(opaque), event); + Chardev *chr =3D CHARDEV(opaque); + + if (event =3D=3D CHR_EVENT_RESIZE) { + mux_update_winsize(chr); + } else { + mux_chr_send_all_event(chr, event); + } } =20 static GSource *mux_chr_add_watch(Chardev *s, GIOCondition cond) @@ -378,6 +393,8 @@ static bool mux_chr_open(Chardev *chr, ChardevBackend *= backend, Error **errp) return false; } =20 + mux_update_winsize(chr); + /* * Only move to opened state if we've realized * the initial set of muxes: --=20 2.54.0 From nobody Tue Jun 9 23:07:22 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1781032745; cv=none; d=zohomail.com; s=zohoarc; b=klNy/C4+phrf+7F2sZn8kDLXXzuZW8h24TYpirFhHhRHBUywKMod4HVyqJoUa22FwvejjRn3QiW68hWIx+4XsdyxIpbljjQLrvvWUlH6M6BA7yBUKvel5E3hP1UobFb45GtIe6gTsPakPcHuFpp6bjDrijnc5IjQT9oKcRch0iU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781032745; 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=8Lfe6LFdLVNOGpPU3ziss9O+P1hifgFDq9+jCMVKyio=; b=IXPWE6Tz5yurovcIQlYZzK/H1gKdHyAcOovdSGxhZ1oDdU3kj9XorxEvi64RuTGmYIZHItZXag+uQO6rzBb1NLQkXoJd3K9lKVdmqUFudsJZD3sNI4RXsCx1qIf8B0HDGdXwSmXJcfWDjaa7Qf4lQDt7tGBiZ7l/3/DVnxchK2k= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1781032745585285.77159686980417; Tue, 9 Jun 2026 12:19:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wX1wb-00065m-2v; Tue, 09 Jun 2026 15:17: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 1wX1wT-000627-5G for qemu-devel@nongnu.org; Tue, 09 Jun 2026 15:16:53 -0400 Received: from mail-wm1-x335.google.com ([2a00:1450:4864:20::335]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wX1wR-0006K9-DW for qemu-devel@nongnu.org; Tue, 09 Jun 2026 15:16:52 -0400 Received: by mail-wm1-x335.google.com with SMTP id 5b1f17b1804b1-490b1bbcf3aso49407565e9.1 for ; Tue, 09 Jun 2026 12:16:50 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4601f2f67c6sm62218513f8f.16.2026.06.09.12.16.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 12:16:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781032609; x=1781637409; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=8Lfe6LFdLVNOGpPU3ziss9O+P1hifgFDq9+jCMVKyio=; b=MrvbFIL24wMKhrp5/f6gfaxyKf5ARbI2zPuruI4yQwQKmEEhXqZuGohCzG6dafLuDM 69bDBLzKVp39ufCX8/DX1D2+AO0iXIF1JH8sCLXRuNMqx0nOBNkT1c2qgN+XKvA1M6BP BLnwGAcv+5ua6xacx4+Sc3+6sdzz6kC+ejCH/M29vEoLtBBTBYPmofmY40dGz0WUTZ57 ZzH21Bwcm75cilnBWDmeEQTtotzC6Sj4z9AbbbOF2DbRP1Tvj71UGdPZEgikDfMVA/M8 I1k/X12ny8Wn6WbVvE9lTeGxso1GrkcMBNRZ304CYKmTzJ2+fBt4RtP8BQmlVRGPhLNB 5knQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781032609; x=1781637409; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=8Lfe6LFdLVNOGpPU3ziss9O+P1hifgFDq9+jCMVKyio=; b=RZiC2IhqrgHs55uct73GC+wMVF/jCZw8giwoc7kKAl7l8Y++etGOxEIiawejAQbzwV sqSnbS2A0jnafehgfgagJwiIn8oOhdvgpGvgdIjiU5nlz2fd8tFg4RW3vXbhtAa0oRkn 5axmDPdFKKP9rJYuQgJOkK5nb66P1D/J4dqe44H2+BmRGjw4b+vVewGnq6GC+NmRKxU+ xhyDNvYYwpLNptUicf04P/CDGE0r2Q0WT4X1jbOxbPVK/YKDeQzE6i9zC7iZaemTHvrw I64ngKvKhIEn5GGHGA1+Brdks3z7ZEyp37J9735Vokroo0lFpXOIF+Rfu1Wm4DhU4z4Q IWxQ== X-Gm-Message-State: AOJu0YybluCSOiidghXhV2dL1ysveMzq0pnD3MBdnhoj6N/WPAUkRrzF wwaiGvS/wHTzfMXQhJ4CVab+y/jdM4bO12fhno7fVF3Ig2rQ/X1oZFqE X-Gm-Gg: Acq92OHemijqQKFNj4qNAq/KsSkJ/jGt5HhO0sEKrPSbDc4becHs3zYZNJuCiG9Xdv+ NeuSD26EDA50Vlv9qPBVKIuCyV5pTKdLgPgzKwOu4EG+UylFhSatXo/FVQuszU0vtPopSdpvEA+ zyPqG1Qqs53xaWNvd8irsvqekspe89xyLKV/xnqX2TCr14OIKhokm1ybjrLDOn9Hr9x2dt64HdV 1x3cDDOapS0XQ84p0tzxvh6t8t/4oTlR6jqMhzZJkqPm1WJCUW5woEawIS4kjvFuULD8LI9O1YQ R/l7bIvUmORXnhxUqDc5qBCOoMfQQFMwaDTpHwJwTa2LR7h+KMc/WDKp7Anpfjnzr6FEh8Ep6Fc ZGxKCAcXnj0F7AOeLa5v/2zVhgykELeEUnYczty0obI1ADn8eGqHIFqSKUm54xA5ZjaIHW+zbOq 4gdCWipgrYEMCaTg6KyBc0iQf/AAwGUVSAyS7Gf0oOQfJVpJYWEIJf0TSzfNbWBu0= X-Received: by 2002:a05:600c:3f0a:b0:490:be1e:6ce6 with SMTP id 5b1f17b1804b1-490d71fa51cmr52247975e9.9.1781032609422; Tue, 09 Jun 2026 12:16:49 -0700 (PDT) From: Filip Hejsek Date: Tue, 09 Jun 2026 21:16:15 +0200 Subject: [PATCH v7 05/12] main-loop: change the handling of SIGWINCH MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260609-console-resize-v7-5-0c550fdcec15@gmail.com> References: <20260609-console-resize-v7-0-0c550fdcec15@gmail.com> In-Reply-To: <20260609-console-resize-v7-0-0c550fdcec15@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Szymon Lukasz X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1781032602; l=3291; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=F2toV5Jkz/m648aoZpamMhXSKmY5U/TELmEzMUEgOa4=; b=BLIuA6Itqs9hzzZWNj+YsRrrAoLUlAL2lG0jDmg/XqibM03emIxTOf2QPFVzw/djkkhmZ1hbN +IIQP1yEaxTARxqyQT9jM0upQO8T7aKOeM8knCziaeetKSeSSC6gBuE X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= 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=2a00:1450:4864:20::335; envelope-from=filip.hejsek@gmail.com; helo=mail-wm1-x335.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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 @gmail.com) X-ZM-MESSAGEID: 1781032748217154100 From: Szymon Lukasz Block SIGWINCH, so it is delivered only via signalfd. Install a handler that uses NotifierList to tell interested parties about SIGWINCH delivery. Signed-off-by: Szymon Lukasz Reviewed-by: Daniel P. Berrang=C3=A9 Signed-off-by: Filip Hejsek --- include/qemu/main-loop.h | 4 ++++ ui/curses.c | 11 ++++++----- util/main-loop.c | 21 +++++++++++++++++++++ 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/include/qemu/main-loop.h b/include/qemu/main-loop.h index 8c1241a2c1..ff41346b0b 100644 --- a/include/qemu/main-loop.h +++ b/include/qemu/main-loop.h @@ -449,4 +449,8 @@ typedef struct MainLoopPoll { void main_loop_poll_add_notifier(Notifier *notify); void main_loop_poll_remove_notifier(Notifier *notify); =20 +#ifndef _WIN32 +void sigwinch_add_notifier(Notifier *n); +#endif + #endif diff --git a/ui/curses.c b/ui/curses.c index 24d3713e57..04feaeb390 100644 --- a/ui/curses.c +++ b/ui/curses.c @@ -33,6 +33,7 @@ #include =20 #include "qapi/error.h" +#include "qemu/main-loop.h" #include "qemu/module.h" #include "ui/console.h" #include "ui/input.h" @@ -149,7 +150,7 @@ static void curses_resize(DisplayChangeListener *dcl, } =20 #if !defined(_WIN32) && defined(SIGWINCH) && defined(KEY_RESIZE) -static volatile sig_atomic_t got_sigwinch; +static bool got_sigwinch; static void curses_winch_check(void) { struct winsize { @@ -172,17 +173,17 @@ static void curses_winch_check(void) invalidate =3D 1; } =20 -static void curses_winch_handler(int signum) +static void curses_winch_handler(Notifier *n, void *data) { got_sigwinch =3D true; } =20 static void curses_winch_init(void) { - struct sigaction old, winch =3D { - .sa_handler =3D curses_winch_handler, + static Notifier n =3D { + .notify =3D curses_winch_handler }; - sigaction(SIGWINCH, &winch, &old); + sigwinch_add_notifier(&n); } #else static void curses_winch_check(void) {} diff --git a/util/main-loop.c b/util/main-loop.c index ad8645c30a..136886e4ee 100644 --- a/util/main-loop.c +++ b/util/main-loop.c @@ -100,6 +100,7 @@ static int qemu_signal_init(Error **errp) sigaddset(&set, SIGIO); sigaddset(&set, SIGALRM); sigaddset(&set, SIGBUS); + sigaddset(&set, SIGWINCH); /* SIGINT cannot be handled via signalfd, so that ^C can be used * to interrupt QEMU when it is being run under gdb. SIGHUP and * SIGTERM are also handled asynchronously, even though it is not @@ -124,6 +125,26 @@ static int qemu_signal_init(Error **errp) return 0; } =20 +static NotifierList sigwinch_notifiers =3D + NOTIFIER_LIST_INITIALIZER(sigwinch_notifiers); + +static void sigwinch_handler(int signum) +{ + notifier_list_notify(&sigwinch_notifiers, NULL); +} + +void sigwinch_add_notifier(Notifier *n) +{ + if (notifier_list_empty(&sigwinch_notifiers)) { + struct sigaction action =3D { + .sa_handler =3D sigwinch_handler, + }; + sigaction(SIGWINCH, &action, NULL); + } + + notifier_list_add(&sigwinch_notifiers, n); +} + #else /* _WIN32 */ =20 static int qemu_signal_init(Error **errp) --=20 2.54.0 From nobody Tue Jun 9 23:07:22 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1781032752; cv=none; d=zohomail.com; s=zohoarc; b=FtfLyIc+nF/V6exRX7E5vNhbVnraTtZFcz8dPSmETY5FRCLKIcuP9Ibb66DBP+gC/JFLC82Is/4nvc9ACZ8fdM1qDIDQPLSzG+CngRtegwfmpdPvJDSuTx258nPmRNmbqd1uY4b7KBlp5MzXUCKVRnzAKCfIhdiASQ8F4IJjsSY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781032752; 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=8KjtEs6GXuaSZvO/otOHVOhYdruaUkymc1cfvg/uON4=; b=aFUxhOGLEo4lIRq/OGGzfPtASfZl5IUKPND6JKaWSXebRTn5XF5XVC2YJboe5uBHE3yyJrppzyKiAPjgP1+KGjMyZDM2B7rKd8JAGz5zktW+Me1v+32xnYgrwj19PZtfXwp00hAxHCtycxYi5BgnWvNUKUoqWD3ksWMFlIz6e9Q= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1781032752852277.5130132364409; Tue, 9 Jun 2026 12:19:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wX1wb-00066Z-UX; Tue, 09 Jun 2026 15:17: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 1wX1wT-00062B-Py for qemu-devel@nongnu.org; Tue, 09 Jun 2026 15:16:53 -0400 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wX1wS-0006NJ-8Q for qemu-devel@nongnu.org; Tue, 09 Jun 2026 15:16:53 -0400 Received: by mail-wr1-x42f.google.com with SMTP id ffacd0b85a97d-45ef616daf6so5439825f8f.3 for ; Tue, 09 Jun 2026 12:16:51 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4601f2ed944sm66954852f8f.13.2026.06.09.12.16.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 12:16:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781032611; x=1781637411; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=8KjtEs6GXuaSZvO/otOHVOhYdruaUkymc1cfvg/uON4=; b=NBvMvszLn1Zrb5nMwOXijZva+jcFEFBCI7G4fphMDS/qx/exy3yo1ppNQ8ogcVI2aX qmBnTs0aZ/2YNd/iaPmcxWq9IWS/RpP5G+nc93xotAchEwPfYRRaB5oPQTkUYdKzWaLj TK3G2cme4WdCbHx5Kmlt/71adtddVTw1TtIdJjIIwCRrBnzvFodlEy7NAxqo9q7TSXLH BN9plo4DxsecxIh/VlM74JMqA+ez798gK2TmxdksGmajifpfAL6I8ALhG14eCrFrMa9S lKD3/lpTFiFSSjzpnLYjK9Xk2sEKMM795jW7FWXN1tg+54zUCZ9BtqtG5eYFlLEbp4h2 qRGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781032611; x=1781637411; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=8KjtEs6GXuaSZvO/otOHVOhYdruaUkymc1cfvg/uON4=; b=VeF5NuQSyY4btjwBGYAB1K2HD2fXub1b7I3dCeM3Vibo8GnO51bFVlhmvRzDjzkICp BkIJnXgQFcS0PtOLthlaO3Cy4v0nzyzsO7O0Ma08cB5P0EQoFTth2IML3XGUQCcBd1QW 9zxw7qlosilWHF2qYuZiy4VBb+03GluJfEOaPo2DVUKcYUnzrYhPjAISZzJJOPaz6A7P 3dnAZ34RytRx+tF0efXhwrhDswxSWahx4J0Nt1poZelqHBYVUED5XHpETyTsjK59Cupu 70zBfsCjWDjdotJzj0fgCB29x2j2r0lWMCP7Us6vfpp7jpB7nwg8HtSQ590OC/D8zRUX bQZg== X-Gm-Message-State: AOJu0YwuNhKrca2S/55b9ilRJ3Xzq1vhiwYVkIfyRzQXmcOFz/G+ngkX 5bREHlMCChoJPVM6vUPb/48dd8w3GGlteG3MTWZXuITx/Gh9PeRHQ0fT X-Gm-Gg: Acq92OH+souZutiYmKTNhAcWapQxtgGPNvoHMB9HGDMCtf55sRuUCGnPSedegMnR1Cl Ru4LeB/rus10jWcBA3SWEO36EBki7W8IfeERJpsgBHjQNLKj5P9M7GxWuQjA5vLCU41nCZ5ihE3 N93qlLCPCQSpOONr/o5yoRqfhpWhc7QEmDst191v7MBWjlkDGr48z3cuBJMnAcIzdW01UOaTGrf YwUGNa4mcnTbCEQJknStrCkFpG1GvzvjyQ3eS3VxIC50egTStdwd+rZh2GN2SgmWyS/4aInt1Hx WlwjShbvD+iaF226aDQWXUti2q6vWSDFfrX2nIo8gP+F3enaGAR2bkhiROCayDQh8XCyqNdMN3h DcA9vSMbGLhkLfyh2vgZ7g76a1BmTvWEKRum40bN/efDFZYNb1fUwHrLTf+W3Ox7iGM6VHIyGHR E62p4xLbFnIgEqneU/n0vvfIOG/wBlKPlDRleXrBtV6hB6L+Ui70+kbC75wkX9dqA= X-Received: by 2002:a5d:4d8b:0:b0:439:b8b2:fad0 with SMTP id ffacd0b85a97d-460302dcc97mr24590061f8f.5.1781032610627; Tue, 09 Jun 2026 12:16:50 -0700 (PDT) From: Filip Hejsek Date: Tue, 09 Jun 2026 21:16:16 +0200 Subject: [PATCH v7 06/12] char-stdio: add support for the terminal size MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260609-console-resize-v7-6-0c550fdcec15@gmail.com> References: <20260609-console-resize-v7-0-0c550fdcec15@gmail.com> In-Reply-To: <20260609-console-resize-v7-0-0c550fdcec15@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Szymon Lukasz X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1781032602; l=2540; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=eLrLa7zEPvB9zEiINHUOH8R1e+jO8eJ0+Xg53clUYDw=; b=49gLciysqQ7WDqK+ha+TR8JcRNi5bL1OUV945TbVMb1CQAhpARkG/ocRYjk23KdqywIGdujZF qiSssKdlE24Bf88V7Nbe1wum+oQsU2P7SD0frfFIpwJRArU6f8Z9jJ8 X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= 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=2a00:1450:4864:20::42f; envelope-from=filip.hejsek@gmail.com; helo=mail-wr1-x42f.google.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_GMAIL_RCVD=1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=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 @gmail.com) X-ZM-MESSAGEID: 1781032754081158500 From: Szymon Lukasz Update the terminal size upon SIGWINCH delivery. Signed-off-by: Szymon Lukasz [Filip: use DECLARE_INSTANCE_CHECKER, qemu_chr_resize_stdio -> stdio_chr_re= size] Reviewed-by: Daniel P. Berrang=C3=A9 Signed-off-by: Filip Hejsek --- chardev/char-stdio.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/chardev/char-stdio.c b/chardev/char-stdio.c index fe1cbb2d88..4fc8db212c 100644 --- a/chardev/char-stdio.c +++ b/chardev/char-stdio.c @@ -34,7 +34,9 @@ #include "chardev/char-win-stdio.h" #else #include +#include #include "chardev/char-fd.h" +#include "qemu/main-loop.h" #endif =20 #ifndef _WIN32 @@ -46,6 +48,14 @@ static bool stdio_in_use; static bool stdio_allow_signal; static bool stdio_echo_state; =20 +typedef struct { + FDChardev parent; + Notifier resize_notifier; +} StdioChardev; + +DECLARE_INSTANCE_CHECKER(StdioChardev, STDIO_CHARDEV, + TYPE_CHARDEV_STDIO) + static void term_exit(void) { if (stdio_in_use) { @@ -85,8 +95,23 @@ static void term_stdio_handler(int sig) stdio_chr_set_echo(NULL, stdio_echo_state); } =20 +static void stdio_chr_resize(Chardev *chr) +{ + struct winsize ws; + if (ioctl(1, TIOCGWINSZ, &ws) !=3D -1) { + qemu_chr_resize(chr, ws.ws_col, ws.ws_row); + } +} + +static void term_resize_notify(Notifier *n, void *data) +{ + StdioChardev *s =3D container_of(n, StdioChardev, resize_notifier); + stdio_chr_resize(CHARDEV(s)); +} + static bool stdio_chr_open(Chardev *chr, ChardevBackend *backend, Error **= errp) { + StdioChardev *s =3D STDIO_CHARDEV(chr); ChardevStdio *opts =3D backend->u.stdio.data; struct sigaction act; =20 @@ -121,6 +146,10 @@ static bool stdio_chr_open(Chardev *chr, ChardevBacken= d *backend, Error **errp) stdio_allow_signal =3D !opts->has_signal || opts->signal; stdio_chr_set_echo(chr, false); =20 + s->resize_notifier.notify =3D term_resize_notify; + sigwinch_add_notifier(&s->resize_notifier); + stdio_chr_resize(chr); + qemu_chr_be_event(chr, CHR_EVENT_OPENED); return true; } @@ -162,6 +191,7 @@ static const TypeInfo char_stdio_type_info =3D { .parent =3D TYPE_CHARDEV_WIN_STDIO, #else .parent =3D TYPE_CHARDEV_FD, + .instance_size =3D sizeof(StdioChardev), #endif .instance_finalize =3D char_stdio_finalize, .class_init =3D char_stdio_class_init, --=20 2.54.0 From nobody Tue Jun 9 23:07:22 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1781032798; cv=none; d=zohomail.com; s=zohoarc; b=JQEZ/xqhAx0tIeamOIfBZ5+64W4kgtLYf6/RBwh/IvwlI5+SQIB9qcxVe8ywkcu3/+e5OgCmlwVyzNPfEyt5GtDgYBKWIdV0FhJ2jfVdV9F1MU6XwzPePu9BvOepck+sNjK9Nxgya2HJQLK72LL1jhXvdwfIJMrC2oRCickdhJE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781032798; 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=S6jSm4Mi9XKgjjqZh5KQVJBGlx7yAY6ZGbKU8eIlcy0=; b=HLe8rGiaiZQKouOif8F5pWbp049Jojg9F85xH4H/S3ud0bgNKZggDz9oEL0NbUGngN/CUDyNkQlEPzu6CaSY+br6kpXGo8A2WgWFRvKYp7IOA+ZLpws+l7m0KPufucyNW9AGd5ODXu+kNi4+uOiXt5tDT13JkT74hJysk8IlIPU= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1781032798674308.5073177981277; Tue, 9 Jun 2026 12:19:58 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wX1wp-00069r-Q2; Tue, 09 Jun 2026 15:17: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 1wX1wV-00062T-CU for qemu-devel@nongnu.org; Tue, 09 Jun 2026 15:16:58 -0400 Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wX1wT-0006PV-A4 for qemu-devel@nongnu.org; Tue, 09 Jun 2026 15:16:54 -0400 Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-490ae94a89eso50998075e9.1 for ; Tue, 09 Jun 2026 12:16:52 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4601f2f67c6sm62218751f8f.16.2026.06.09.12.16.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 12:16:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781032612; x=1781637412; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=S6jSm4Mi9XKgjjqZh5KQVJBGlx7yAY6ZGbKU8eIlcy0=; b=sQReY5v3xxUK4pX8wVdA+62lE/zQJn77nEIaOcJRaW5O9dmzWnkKVDFgQ1yLMRDpn8 feC7U0fd2mCwR90p3tQbhqgaqneMFq1Fmz89STzBoRYg4D4LHQI0o7gv25Ht35ohS/B9 D5O0/hYuUSK+VA8ccNKqLFFen0iXpGIluBeHc4B2Id3O8DkKAT1DMKz8s9DQISrjnsA7 jjerd10X3U63p2W4LzxQE4WIbt2gemFqSvo5DvoEpvrf7LAllJqrEcG2beg7ZPGwlNYn iwsM/l4a2asGjh9wQSXeXBb0iT8+qGZYk2GCIhC849+u8p1gLkEk+gW3ShWlcVIuUkDd Qm8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781032612; x=1781637412; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=S6jSm4Mi9XKgjjqZh5KQVJBGlx7yAY6ZGbKU8eIlcy0=; b=tLg5hjB3h5AM9VwNHO+3sbH4f0c4JlbsdC8XMcPrqYSAPeLLRYFUvrEj5G5ocMdnuH uZAU63TCpWMQTBhSUNMjCGKRcc49YNZudlbQEPZrbZFrKqtYtdKPff8Uk89LAN0CJ/DP iC7eqhEoDWIIGHEKEQj90cJs/ZdeShV+W8UDFPnuC2DVfa8A5I/VCjnr2lr1dfXWZL41 JtLgSzLgjXe+F2yN67p2v0k6KZusvQFvNNcUfDd5MNz+rPiAbwON4iM1SvwMcbDjy6Gq VvymMhcmi4eOkJVgHn+bjZ6G3lukNG85NwTIgA5VOOtqTcqiKpuGyqrdES84+D4P3iGP kUzw== X-Gm-Message-State: AOJu0YxpgmUk7//a0P5lf/qRPeedLE1LqMj3b7/h/E0hVWVyX1NkhucZ CSIaDJ+RcqJXSyHKzwQUIpDP56VNB/ciHxn30hULC1Fe6UThHrQl40MY X-Gm-Gg: Acq92OHc+Sme2xFcIQpjVubbuAOs5yYeJZguJFUMiNAO1tX3ZB7ITWUr8idsOqxK9yf 86hmSSxhX66UiBiskSrD0iEs5WeFKfJFw8NItJ6BwKeOLr+c3yKdtOCAEX0+6/StCCUdFs/eW5Q ypDff+wz68moM1I+5FnJakZd1p1vnDKYMJ/nn/be+4BIxwT9YH+ZtuoFzajA//oWYiqX5EmSFVn OnR4RFaTrtJ5BtLomxqlUHiWwokFBCcCWgffDKsEqu2YSwN5Up2TdMBLCg/Fj4jp/v28SL+EL/F HGqEGo5/h6QNr4rkiQNvGZD6XC0zTuAm5hN43LYwHKAHqSM9rngrIXoJo+TDBdwvzvcdG5mstrb IyZJx9DEIzpQYUlKdeMApvMVqWgey8+UWSh00utIRvvvNg5bnKbpNzEyymPh1/NtT+kMXPyOWHK HcJEhdhDBav11ISpBWLjfbW0OEgYtptr/aQUtmqNt/4xHuEtHT4/3iGYzEOXKi/J4= X-Received: by 2002:a05:600c:1908:b0:490:b5d0:598f with SMTP id 5b1f17b1804b1-490c25b5f6cmr360246245e9.13.1781032611689; Tue, 09 Jun 2026 12:16:51 -0700 (PDT) From: Filip Hejsek Date: Tue, 09 Jun 2026 21:16:17 +0200 Subject: [PATCH v7 07/12] char-win-stdio: add support for terminal size MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260609-console-resize-v7-7-0c550fdcec15@gmail.com> References: <20260609-console-resize-v7-0-0c550fdcec15@gmail.com> In-Reply-To: <20260609-console-resize-v7-0-0c550fdcec15@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1781032602; l=1838; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=Zdzf8kR2p+Yk8aUvofodNOe4lBaihFirTsXeIEwC6zo=; b=p0nIIgDOrrSGUiX+XVmiwnzqizlTpv5o406SXU+Fd6QxD1vPMnrW90yoAD4I8K5XLNnFhNY3j mXNADHrd75kB4dGJr+jkaatu+94DAnk4roRor87s6RT+J1rIAKkfgvj X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= 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=2a00:1450:4864:20::330; envelope-from=filip.hejsek@gmail.com; helo=mail-wm1-x330.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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 @gmail.com) X-ZM-MESSAGEID: 1781032800293158500 Use GetConsoleScreenBufferInfo to obtain terminal size and set ENABLE_WINDOW_INPUT to receive resize notifications. Reviewed-by: Daniel P. Berrang=C3=A9 Signed-off-by: Filip Hejsek --- chardev/char-win-stdio.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/chardev/char-win-stdio.c b/chardev/char-win-stdio.c index bb9c195a8b..188d26502d 100644 --- a/chardev/char-win-stdio.c +++ b/chardev/char-win-stdio.c @@ -44,6 +44,20 @@ typedef struct WinStdioChardev WinStdioChardev; DECLARE_INSTANCE_CHECKER(WinStdioChardev, WIN_STDIO_CHARDEV, TYPE_CHARDEV_WIN_STDIO) =20 +static void win_stdio_chr_resize(Chardev *chr) +{ + HANDLE hStdOut =3D GetStdHandle(STD_OUTPUT_HANDLE); + CONSOLE_SCREEN_BUFFER_INFO ScreenBufferInfo; + + if (GetConsoleScreenBufferInfo(hStdOut, &ScreenBufferInfo)) { + uint16_t cols =3D ScreenBufferInfo.srWindow.Right + 1 + - ScreenBufferInfo.srWindow.Left; + uint16_t rows =3D ScreenBufferInfo.srWindow.Bottom + 1 + - ScreenBufferInfo.srWindow.Top; + qemu_chr_resize(chr, cols, rows); + } +} + static void win_stdio_wait_func(void *opaque) { Chardev *chr =3D CHARDEV(opaque); @@ -75,6 +89,9 @@ static void win_stdio_wait_func(void *opaque) } } } + if (buf[i].EventType =3D=3D WINDOW_BUFFER_SIZE_EVENT) { + win_stdio_chr_resize(chr); + } } } =20 @@ -201,6 +218,8 @@ static bool win_stdio_chr_open(Chardev *chr, } else { dwMode &=3D ~ENABLE_PROCESSED_INPUT; } + dwMode |=3D ENABLE_WINDOW_INPUT; + win_stdio_chr_resize(chr); } =20 SetConsoleMode(stdio->hStdIn, dwMode); --=20 2.54.0 From nobody Tue Jun 9 23:07:22 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1781032694; cv=none; d=zohomail.com; s=zohoarc; b=aIAG9iOV3hY/Xat8uDF9sTvfeeO8kJWgHzPPL4k7tbXsvkBnKjaBoLKKOOQtDNmV8kVSM9LFKrV/CsSYMF2H94cqyXTKILLn6HAmzJ578vXEoXCpkbINJUKSfVKFUvqZXAk5ev704//t8HQWF2fF0NQssJD3INpNfxOvByKvcPk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781032694; 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=UddDIjGWqVzUF3+xkE4iOnIhAz8+dhzDkVGO8DGPO8I=; b=ERmhzcujfTHJFv2hV/UdKWguvmymH1Tt7xHe5+2lCE8vxzd89cOTI2Kdn1xnU2D/aJtvcBBfJBLyO19tryLw00MiKn6F1HVFStlzrdJ54wLzSNyV+HVCaGQjUksjCU4IXMfZ3vf0oBH73bbCckMJ3+iv7CBCethHSfcx+sPUYhU= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1781032694494678.6313300489866; Tue, 9 Jun 2026 12:18:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wX1wc-00066r-LW; Tue, 09 Jun 2026 15:17: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 1wX1wY-00063L-AL for qemu-devel@nongnu.org; Tue, 09 Jun 2026 15:16:59 -0400 Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wX1wV-0006Qj-4m for qemu-devel@nongnu.org; Tue, 09 Jun 2026 15:16:56 -0400 Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-490b4e1ade7so64267355e9.0 for ; Tue, 09 Jun 2026 12:16:54 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490c2d5d2b4sm336349425e9.2.2026.06.09.12.16.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 12:16:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781032613; x=1781637413; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=UddDIjGWqVzUF3+xkE4iOnIhAz8+dhzDkVGO8DGPO8I=; b=jjegZnrfRczzX5fwZzhD+/a1xgQMJcn+6xnq43kUjBF2xhb7sLNK3b15+xFQ/sM6Uw qfGEiyDWhJ/WjM71IdQykm0WL5vE7nxW0WShavNXY++YeytTc3Lv+MMJboFZsOPq5x+n Evw22FRytu07vxiOlpqPrM/RV8or3kxqeHsVpJU8N/MkY8bJTBZCvOLycL/WenGa8m7D p+vTYXZPe/KepU960jtCrV9oC5oiC3u6W9v43iiWSGmDfDG0uhJxDwQil80/RIVJLJ9x zPNsE/TpUBGLL9B5IoDq6huDiYftRT4f/C5iAQ6NPNC+NuqXb1JlHikHys46MJIqguN1 minA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781032613; x=1781637413; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=UddDIjGWqVzUF3+xkE4iOnIhAz8+dhzDkVGO8DGPO8I=; b=AV/9cgbv2sFsWik5DeRd+qGtEgSPVhzyoFkuMG0n1/6qg0jDWjE+dOQYB7jEI+nHtJ k9meKPvEofr8Y7DWh94EJRlMDEm7f5oxlq851rgiOYD7gHH6hn6hgNteq3/y+mfuu9PW zG6xInKGhyaj3Cm1YJn9kG7wV+BCt+COAxKK7lURynG5JXxzMVaduBHvuVpTLPZCqg4v uACcHcMiibmbTMpJACIpRgwiOQgpgs/IWWfG0ygeUzjEAJUR4Gz8FIyqbWH95HVxspKP b8M5DIgTfXoFFyErfUMub9649qh7SCjRff7HR8dY8nYtLrPHeVHM5CgyjdPx6i8Q6JtO yyNA== X-Gm-Message-State: AOJu0Yx873IjeV0ulBlDLEIKa67fNvWQ2lezTPx3nSmQhtTfupw/WM8/ cgKmMH9JBCCqk7S4ywtAVIjP51Q8eR/BW/v8XaBJB6XN0bjUFXd9QBOi X-Gm-Gg: Acq92OFE0whtj+ubmEcr4t75OxYSgz9A/TlsKNA7rmbsWZekFvxbtT0OqhwqEWFAxpi jL0wHjOJzEXtrSoef+feVb0GFkhmyK/Z+e7skAm16GMQRku6bn0sxFpwAh9lsZ6cDbdSR2GfFFI 2TDr2DQX2ydTbW7zOJGA1loyb5PK1wMErfXT2KoENaQlj1P/YlJa5QQxNiqTZgYmyGk8ryR4QS5 +tnK5F7OVMYLIG93qkm9w0j5RBb2k23aUYlwQebg8ZhNUpyLxJ5WqPPYEIDNoBn1GL1IBgkvtDW TeDfZxMhR3zRj5Llb/23WwgvymRxZduN6qu1vYeqCw1NO8lGe+IGcFWTwcfDKRN8mF8npDnMajo n/Dj4Rby6/hpUcxG03VucZOanszoLqZbpRl3mBUPsOCWPFctLZ3FetpytW4EsDcF4Kw+NPc+x7U L60WBejh/ppMZj/P0K6c05ku0IdG3dBr0toMnzfSUhcq4haD1MZmhcQppVdjnB3Q+hEu1G6Kukf g== X-Received: by 2002:a05:600c:4ec6:b0:490:9d1b:201f with SMTP id 5b1f17b1804b1-490c2629be6mr339149865e9.32.1781032612791; Tue, 09 Jun 2026 12:16:52 -0700 (PDT) From: Filip Hejsek Date: Tue, 09 Jun 2026 21:16:18 +0200 Subject: [PATCH v7 08/12] ui/console-vc: forward text console size to vc chardev MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260609-console-resize-v7-8-0c550fdcec15@gmail.com> References: <20260609-console-resize-v7-0-0c550fdcec15@gmail.com> In-Reply-To: <20260609-console-resize-v7-0-0c550fdcec15@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1781032602; l=1615; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=DHc+lJ6sK+uKzZxifFYM+/fKtfP51y1qRwbMH3sWjuQ=; b=Uamv0PlvqH/Zoc5qN/eqL0LbwDD2esEXdjObD1u5t2QANV7j7ot+kDomAfY/tPk9IBlfakGiX hrgwO0U+JaXCBvJzvbmXKuwI1fF9GQI/WyFCGyyssikSPov6p+y4rkd X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= 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=2a00:1450:4864:20::336; envelope-from=filip.hejsek@gmail.com; helo=mail-wm1-x336.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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 @gmail.com) X-ZM-MESSAGEID: 1781032695785158500 Update the vc chardev size when initializing the console and after changing the surface image. NOTE: There seems to be a bug in the code where the dpy_text_resize callback is not called when the size changes due to changing the surface image. (Though it doesn't cause any problem in practice because the callback is only used by ui/ncurses for fixed consoles, whose size never changes.) Signed-off-by: Filip Hejsek --- ui/console-vc.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ui/console-vc.c b/ui/console-vc.c index 828e78c41e..d28dc4cdb7 100644 --- a/ui/console-vc.c +++ b/ui/console-vc.c @@ -115,12 +115,19 @@ static int vc_chr_write(Chardev *chr, const uint8_t *= buf, int len) return vt100_input(&s->vt, buf, len); } =20 +static void text_console_chr_resize(QemuTextConsole *s) +{ + qemu_chr_resize(s->chr, s->vt.width, s->vt.height); +} + static void text_console_invalidate(void *opaque) { QemuTextConsole *s =3D QEMU_TEXT_CONSOLE(opaque); =20 if (!QEMU_IS_FIXED_TEXT_CONSOLE(s)) { vt100_set_image(&s->vt, QEMU_CONSOLE(s)->surface->image); + text_console_chr_resize(s); + /* XXX Shouldn't qemu_text_console_update_size() also be called he= re? */ } vt100_refresh(&s->vt); } @@ -254,6 +261,7 @@ static bool vc_chr_open(Chardev *chr, ChardevBackend *b= ackend, Error **errp) s->vt.t_attrib =3D TEXT_ATTRIBUTES_DEFAULT; } =20 + text_console_chr_resize(s); qemu_chr_be_event(chr, CHR_EVENT_OPENED); return true; } --=20 2.54.0 From nobody Tue Jun 9 23:07:22 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1781032650; cv=none; d=zohomail.com; s=zohoarc; b=TjuHUDgDGXA9xvh7MtO4E2m2xo5iIKJWiIOp9qnIIPQidC7g+zDWoSoo08z04h0eW1I2lrnv1s4iTAxoqkWpBBIpkPcrqBv6GlYajKfWAP0RfuFsi0E354N73DpbcvYFL+4CP3eZINWGU+EJhQes3MgvwHoLzCp7rcgp5ex0ndg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781032650; 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=6iqHGexK+vCP754AjDTgGogqrGkh9urwL3DyWoOCneM=; b=X7oBj3pA/hcywqRH4pNAGh4Oc8b+gWX6StCkWpWvf/fH2m/9hT5NWOgNA0gzZu7e+cy8LvZF32VBXHgHnJEM5wJYDgjtMaFeJJGpMXa0eAPZ7ybVwh5bwSzu34p4U2dXm26ZKthYH5TjHzI4pdSeS4qOmURCzRalDAj7a1n2Btg= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1781032650527370.7569120840209; Tue, 9 Jun 2026 12:17:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wX1wo-00069T-3J; Tue, 09 Jun 2026 15:17:15 -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 1wX1wY-00063O-AF for qemu-devel@nongnu.org; Tue, 09 Jun 2026 15:16:58 -0400 Received: from mail-wm1-x32f.google.com ([2a00:1450:4864:20::32f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wX1wV-0006RF-El for qemu-devel@nongnu.org; Tue, 09 Jun 2026 15:16:57 -0400 Received: by mail-wm1-x32f.google.com with SMTP id 5b1f17b1804b1-490b7866869so66344105e9.2 for ; Tue, 09 Jun 2026 12:16:55 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4601f344558sm62088214f8f.18.2026.06.09.12.16.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 12:16:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781032614; x=1781637414; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=6iqHGexK+vCP754AjDTgGogqrGkh9urwL3DyWoOCneM=; b=TVNtu+NP+wAcIO9AOKurMjN+1lEI+mDT10vyNfisviwqbmAlwhLX7tl9u5pPnOYxbb 9v4g8FT3oeA4t8KHHbZ7oLtttzLsIua/370qsWXPr8kIYm5MC/Abc5eXsmbHmesJhlF/ DwNQRlUWrlAUoa20ERb0RHtFja7xDqIajb56eb+6Zg3rlYnEWtQo01YgvnFKgqvUm8vg C9kmOCP+03ziTztl9fiFDei7OcCFP9Bh+017k7tBhxCRyaevdIFKDjgKB3fNtw2qbgB2 a02WfuBd5ftv4HHuZMkUY0ZTK30iaaxkbZky2F51Gj9dYBjDW1xR6Cl2GmzdH1lw9SXV +Grw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781032614; x=1781637414; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=6iqHGexK+vCP754AjDTgGogqrGkh9urwL3DyWoOCneM=; b=nTe9nA0TeQM+ChZEhFHoEnj4oeRLIPfs91hVzFxr0cdF2RGZp87Pc5OJ3qwfdpaJDw UpCCGvaxsrG4lCblN4S1Ui0ntxDAdJhWgbqk0c/1sMXCWQIkZG7Cj8pyW/DD4Et2mFra OHQ58H25bnpgoO2aiFWMmw12wMRNgUwO7ZOqPi4E/4NL4ko4dvKwHy6F3Pcd8M6qngr7 UKNp3JnWJYa6upO9G9dj1dFU9rVDjh346MvwOgXLQ28Eshx61VElB4P1V+P7Npfl2qQX VlNR6tzMuT0wn+T76QKwY9Hpv/7VzLUnNx6mEnAP1e1j2zMqx/WnzMVfMM45YcUBXpp1 5lAA== X-Gm-Message-State: AOJu0YzqiHPBqQlSQJZBEist4CY2sDQuXmulMyKk5fqoGadD/e4ZfxM7 CrVcLZFMjepN/bJloVXU9tnVxFrBntg13v8tCh5Odxf8y7Vb3TLqCl0s X-Gm-Gg: Acq92OEEo+8pPfQMrw9Eu/F26q4AX6gMp5Vz7k2XUdTNA7gocEKwN8fbiYlHkImwcx7 13eM0TX3jRnNGNHPDfTs68ou1NzyZnvd2PdLuY0TeVeTyaGv5ofnL9P3EyH+7FpExJqopA9uMym zcAQ+W4US2cvOQdgshcZLqh1zYt64lYJd4lOOGkVwddMX+yYjURpqW84oAC4hqHwy4EW858TE3n Q967MrqlyApXl5UrLYT2bNds0vJ+8QKrOz/qxVNLg5+eHmkXQyUO0hpzy+i7sq4Kd1HBMz7oWlN 2D+1xwhNXCr8N57uWgwjdyA2K0yI+RbKVJdAlSe6cfgYERDJSLlCF6HSKSbikEqxNz30K6iqzx0 EEj1Qihb/ItElA5JKa/beNs0/Ca5yJdreVd3dqK0a8e/1tjASAu8jZvdYV6v5zQNjvThUm6I/6M s1zSTCiL01e+z2qBmPoc6dNoh46NLTXQQugafCT2etw5YYliGWaDcu7C1XPfaz4mI= X-Received: by 2002:adf:e906:0:b0:44f:da08:18f2 with SMTP id ffacd0b85a97d-46030507507mr25315840f8f.12.1781032613955; Tue, 09 Jun 2026 12:16:53 -0700 (PDT) From: Filip Hejsek Date: Tue, 09 Jun 2026 21:16:19 +0200 Subject: [PATCH v7 09/12] ui/gtk: forward gtk console size to vc chardev MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260609-console-resize-v7-9-0c550fdcec15@gmail.com> References: <20260609-console-resize-v7-0-0c550fdcec15@gmail.com> In-Reply-To: <20260609-console-resize-v7-0-0c550fdcec15@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1781032602; l=2089; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=jrD1GBiOkHpgLl9ivCJc+GAm0IqpUnS1q9BucxS0ujw=; b=YOhkIUlHtyq90OzshcPLLxgYeAWj5zZbBC0BcU8+lumgX3oQhJDfNVr1E6KKZALVpTXhAtWFC FWczqgXp6+xAAYCWZY5jLS7kx1GF8kKbsEWAkXZHuR7YMRI2xnyMIgq X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= 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=2a00:1450:4864:20::32f; envelope-from=filip.hejsek@gmail.com; helo=mail-wm1-x32f.google.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_GMAIL_RCVD=1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=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 @gmail.com) X-ZM-MESSAGEID: 1781032652245158500 Query the terminal size from the vte library when creating the console and every time it might change. Vte doesn't send any signal specifically for terminal size changes, so instead we register callbacks for size-allocate and char-size-changed. Reviewed-by: Daniel P. Berrang=C3=A9 Signed-off-by: Filip Hejsek --- ui/gtk.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/ui/gtk.c b/ui/gtk.c index 4f706c6bbb..2863082a24 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -2040,6 +2040,28 @@ static gboolean gd_vc_in(VteTerminal *terminal, gcha= r *text, guint size, return TRUE; } =20 +static void gd_vc_vte_update_size(VirtualConsole *vc) +{ + uint16_t cols, rows; + cols =3D vte_terminal_get_column_count(VTE_TERMINAL(vc->vte.terminal)); + rows =3D vte_terminal_get_row_count(VTE_TERMINAL(vc->vte.terminal)); + qemu_chr_resize(vc->vte.chr, cols, rows); +} + +static void gd_vc_size_allocate(VteTerminal *terminal, + GtkAllocation *allocation, gpointer user_d= ata) +{ + VirtualConsole *vc =3D user_data; + gd_vc_vte_update_size(vc); +} + +static void gd_vc_char_size_changed(VteTerminal *terminal, guint width, + guint height, gpointer user_data) +{ + VirtualConsole *vc =3D user_data; + gd_vc_vte_update_size(vc); +} + static GSList *gd_vc_vte_init(GtkDisplayState *s, VirtualConsole *vc, Chardev *chr, int idx, GSList *group, GtkWidget *view_menu) @@ -2105,6 +2127,12 @@ static GSList *gd_vc_vte_init(GtkDisplayState *s, Vi= rtualConsole *vc, =20 qemu_chr_be_event(vc->vte.chr, CHR_EVENT_OPENED); =20 + g_signal_connect(vc->vte.terminal, "size-allocate", + G_CALLBACK(gd_vc_size_allocate), vc); + g_signal_connect(vc->vte.terminal, "char-size-changed", + G_CALLBACK(gd_vc_char_size_changed), vc); + gd_vc_vte_update_size(vc); + return group; } =20 --=20 2.54.0 From nobody Tue Jun 9 23:07:22 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1781032694; cv=none; d=zohomail.com; s=zohoarc; b=dRdPUc0Tdprq8ysgoXFIOQyvcuqe27NvrTil8PznhBQPZM7fUcrrMPpVaidF6pAxFdM8iujshk3pUJTKFsXYgZ00SzWZoeCdHmb8+ZGnkUQ7/Nny6YyRzQ4HtRtuPuQhENF6hedyKk7g3pSaP3WTqbRyRhLge5BuEW2fHc17ihQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781032694; 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=QpO8HP+PFHdvEFU4knPliKS2+GJF2NSMI5lVUskX8as=; b=mRRspwK0AnRoxjupud8QRELutPG+UCm1FLiYP+oM/TEad5f4oIUXoG3U3ckc+A9JywR7OAF1FCnVdIUBI2eGuHY/ZlREQfQkfcuGd02jhFsfinxdKtCCV4DgySh+XEqZRbD5m9Iveegfhu0ANDeKYk473b3r9Bg49JsqYHtjT5M= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1781032694129184.32980827802783; Tue, 9 Jun 2026 12:18:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wX1xF-0006Lq-8F; Tue, 09 Jun 2026 15:17: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 1wX1wa-000658-HT for qemu-devel@nongnu.org; Tue, 09 Jun 2026 15:17:00 -0400 Received: from mail-wm1-x334.google.com ([2a00:1450:4864:20::334]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wX1wY-0006Rb-1j for qemu-devel@nongnu.org; Tue, 09 Jun 2026 15:16:59 -0400 Received: by mail-wm1-x334.google.com with SMTP id 5b1f17b1804b1-490b8a97b11so65564165e9.0 for ; Tue, 09 Jun 2026 12:16:56 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490dc47d474sm4076915e9.1.2026.06.09.12.16.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 12:16:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781032615; x=1781637415; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=QpO8HP+PFHdvEFU4knPliKS2+GJF2NSMI5lVUskX8as=; b=Mqw2b1tPmJRxinwNS3UHVg2TG33KaHPlrHB4xfZxINfeOwXswNQi1jloPRE5Fz+Ytq hMsndtLn9arcrtwyl1Pxucajj/enaCTmqI1uAngyr3S9tkMPo/NSA6bJJW8eeBenzyMb 8H2wN5VAfxyD7rQWNnk00DpHqO4m9AgVIiF/X2zWrW5ED+4c5H2utzQ+TGfaxqLuJU8g cCkoC6BzQkA21kJ/McKGVAtQ05UgvvYQdu+NzhvZ8Kygt6IhnMirSyWpjEoGkXoElGXh Cwt+JVe9pk6KDviRErAYB4OsP9T6KR5jb70iBqntDgxuos/g7h18bAgqyqcCuoPVquA3 cWkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781032615; x=1781637415; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=QpO8HP+PFHdvEFU4knPliKS2+GJF2NSMI5lVUskX8as=; b=SnQvXDh0qrGtFqfaXUpNcRkE4oWX8Tyj9nvxPkjOjaJTOtWgkOskKpATxjf2yU4iEc V9gEP06h/T7s/ZaWi6IaZXxulyXguaLXMS8tURzm7Z1OdVhM2zdJm6aKxOB6fvihV8KF vm3gnTPq9IYvyPoL+ji02JsyAHBWLu+uz5y5OSfdxBE7CSacsV8DbsjXUoUpQarmQ/yS J29+5Qxg1T1xqEmBvwO5AQSkBfN52aV2Z9/RkUKRlSqYPbVn5OUPd8ndFa2nIovTy01M +9YPjXFPfkJkZaLEhefdIIh1K6FcGj7gHP9d1W5ZJdK9q0p1j2UHO/lGgEIq68emMcLq Ir2A== X-Gm-Message-State: AOJu0Yw8qf86Txm0MMpSn1HHD4b76Gzy5/tEWwhQHBhqJADdL//uDozW cDo1Sa4RJWjSzdCwhC45v+SW5RahpLgqyDMn+M9V7/qF04YHNRuOCDlf X-Gm-Gg: Acq92OHtf2sz1V/Q6naeYnNKuPEl+vl8vz1vX5UL+gYnj2JiIx1ybLYic30MaBAFZMh rit6VYzfizM6MbVyHxKonbkd0E1lfEF4oWckK8EgNTDVsLR57GSkSXvMie5hXN4qmXBv46SFaBn 3h1yyz37Pr4CyY2VuXvDXrBJeOiZy09JRxkQe6eApQtM8avXDkvzjmfKFmb8cNlVhwTkcid8CZu 2CvWg3W7Z5SyHKFammxXN06OJlGbYmhZOCM8kbrxMibkS7xFBbNu+8IlrNac0WwRQ/+ACSkTFQn 8IxNQgZAXklvMcCvOkAWx+M7Za9oySCHX5hDhxq/NxM9PeqYl5dOkeHDgXL+/P+8UZSll3Eclmk I2RKQO7MVPF2P1Rf+6/kZEAtvqqufkg0e1wEeCqUMu/hxz/tERNBQGH0xjLkrgj3aQcHdqAG8D9 ZqlEzwY4ET8unrBMX7zNp74XGIpPXwBCiEaFvdWO1vrWjs4KcZE764tJBURz4jCHc= X-Received: by 2002:a05:600c:470c:b0:490:3c15:7146 with SMTP id 5b1f17b1804b1-490c25dd118mr365017945e9.19.1781032615335; Tue, 09 Jun 2026 12:16:55 -0700 (PDT) From: Filip Hejsek Date: Tue, 09 Jun 2026 21:16:20 +0200 Subject: [PATCH v7 10/12] qmp: add chardev-window-size-changed command MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260609-console-resize-v7-10-0c550fdcec15@gmail.com> References: <20260609-console-resize-v7-0-0c550fdcec15@gmail.com> In-Reply-To: <20260609-console-resize-v7-0-0c550fdcec15@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Szymon Lukasz X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1781032602; l=2599; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=oVW2OU4JaqUxxATANHkEVJwpWo5oQ7U5cSyn9nx6HvY=; b=AGKK8ixirLF40UqbkptUTsrltrCh0j9h+LUqsTaS34V5ClolEiMPLsFZYGr8W6mENAxNCrjli vxY5fzVXzXICJG696SvRbMzeBhYFtMWVFyYpzaS646eTEw6QOVACVAQ X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= 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=2a00:1450:4864:20::334; envelope-from=filip.hejsek@gmail.com; helo=mail-wm1-x334.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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 @gmail.com) X-ZM-MESSAGEID: 1781032697508154100 From: Szymon Lukasz The managment software can use this command to notify QEMU about the size of the terminal connected to a chardev, QEMU can then forward this information to the guest if the chardev is connected to a virtio console device. Signed-off-by: Szymon Lukasz Suggested-by: Daniel P. Berrang=C3=A9 [Filip: rename command, change documentation] Reviewed-by: Daniel P. Berrang=C3=A9 Acked-by: Markus Armbruster Signed-off-by: Filip Hejsek --- chardev/char.c | 14 ++++++++++++++ qapi/char.json | 31 +++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/chardev/char.c b/chardev/char.c index d4ef717c56..96e67de815 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -1339,6 +1339,20 @@ bool qmp_add_client_char(int fd, bool has_skipauth, = bool skipauth, return true; } =20 +void qmp_chardev_window_size_changed(const char *id, uint16_t cols, + uint16_t rows, Error **errp) +{ + Chardev *chr; + + chr =3D qemu_chr_find(id); + if (chr =3D=3D NULL) { + error_setg(errp, "Chardev '%s' not found", id); + return; + } + + qemu_chr_resize(chr, cols, rows); +} + /* * Add a timeout callback for the chardev (in milliseconds), return * the GSource object created. Please use this to add timeout hook for diff --git a/qapi/char.json b/qapi/char.json index aa5ee9ffcd..d26af6bcc3 100644 --- a/qapi/char.json +++ b/qapi/char.json @@ -891,6 +891,37 @@ { 'command': 'chardev-send-break', 'data': { 'id': 'str' } } =20 +## +# @chardev-window-size-changed: +# +# Notifies a chardev about the current size of the terminal connected +# to this chardev. The information will be forwarded to the guest if +# the chardev is connected to a virtio console device. +# +# The initial size is 0x0, which should be interpreted as an unknown +# size. +# +# Some backends detect the terminal size automatically, in which case +# the size may unpredictably revert to the detected one at any time. +# +# @id: the chardev's ID +# +# @cols: the number of columns +# +# @rows: the number of rows +# +# Since: 11.1 +# +# .. qmp-example:: +# +# -> { "execute": "chardev-window-size-changed", "arguments": { "id": = "foo", "cols": 80, "rows": 24 } } +# <- { "return": {} } +## +{ 'command': 'chardev-window-size-changed', + 'data': { 'id': 'str', + 'cols': 'uint16', + 'rows': 'uint16' } } + ## # @VSERPORT_CHANGE: # --=20 2.54.0 From nobody Tue Jun 9 23:07:22 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1781032717; cv=none; d=zohomail.com; s=zohoarc; b=a4LAVWTGIKAglOd/AGXcMY6N0Ys+on5NUXmxtuBjQPWeYdJnfMegZoqB7/T2QWRuZ0SD5IcQIG1m9g34Be1ugp12yy6LbT4udRIN4o0WZjF2EfKcBA8g/UJCN4498iej0vCBs+fdcjM/g6dM67uH5s4XYf/0lhxyJFVTV8CqOTo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781032717; 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=R1ZZAoljY9LdKgDA6VF2zEzprsuGdMG5+tOF++0esww=; b=BvLZbujr0Tw2LLssYZpR2lGBrGiA2d2uxTZsTGy2JFCn1wmOgrZZ+j7+zf41NVb1eM8cazCnp0EqGz/p49vCp8nw0GCr7zFCRcwyckAcFMmCg0d8ePGuJ7WLNIa0gO9G0KjsaK2aPhp65E39OuycDnQ7R1znvoTFJJHG9i608p4= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1781032717874962.9076824076934; Tue, 9 Jun 2026 12:18:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wX1we-00067o-JA; Tue, 09 Jun 2026 15:17:04 -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 1wX1wa-00065A-I2 for qemu-devel@nongnu.org; Tue, 09 Jun 2026 15:17:00 -0400 Received: from mail-wm1-x334.google.com ([2a00:1450:4864:20::334]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wX1wY-0006Rt-2t for qemu-devel@nongnu.org; Tue, 09 Jun 2026 15:16:59 -0400 Received: by mail-wm1-x334.google.com with SMTP id 5b1f17b1804b1-490c1915793so40645185e9.2 for ; Tue, 09 Jun 2026 12:16:57 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-46028a6dcbdsm53026696f8f.7.2026.06.09.12.16.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 12:16:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781032616; x=1781637416; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=R1ZZAoljY9LdKgDA6VF2zEzprsuGdMG5+tOF++0esww=; b=pqpBoWY5PwBzaj1INwRLqhVyK3XlAjCIiEP85QSM447qluv/hUPdKJUxAYkh3NS2+b HXlsn3SuE3Q8ZjfBjszq14IuG4P/tAHbrJgUK1d4aY46SQDUDQ1IPKSCzbQsdrEEBsC4 DPULGCE8mq/uB5lxgZAsLKEcsXjz3n0Chf+ZrL3r3AjkKPQkW27Nb8+iGz5hZPpucPdU UmgZA9fi7xIbzQXGfFj35vFEaGgPVYB2BsInDZisJs8LKtV30MXDx+JDKcWODSByEKYy mXNbYpbfyoTSf8nkZSwc/TLmQiAvdlojZ8zujOXfvcDRgVka5I7zWQSwJb4qH79/DbzG K9kQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781032616; x=1781637416; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=R1ZZAoljY9LdKgDA6VF2zEzprsuGdMG5+tOF++0esww=; b=k7LtOSmBD4dqWvVmHj/c8ZvdUwwoUz8VQV0YMpLpZq3bjHapGBnoTrmvMOAgA3KSZE MmYns2+WVGoG64ue/GYVMpyJyvqHvkfI00TjJE798+QTjptaa6hd0fGj2gHgdwBRb9GG T1t7PZblk2eJvfpj37rI/QJ5tCixIb4BZx2A56/LBoh2QF+MZH2K7OgRdsLCnY5bxlIM 8z/Xp6J8WXyRDETMmhi7nIOYFlW/c+elpbnKKnsREQlhdETEGg34I5KfuCRzqHeF6XZI +w0608JH7fXpYt87dj2ncrktlkgoOkpfxyhv8fumIzGzLG+eRk2GnmPeL8uZuuO2ivOp nkuA== X-Gm-Message-State: AOJu0YzfN/kxktotnKdy/zbmHaeeo/Vg++bO+oTrTYWRirc2ochCBLAR x0NOj0fzy8qG90TsQ3q99QrS9KEhe+zuIy6RUeFf1PNjDvW3kfSPpM+c X-Gm-Gg: Acq92OE/Jwj+eOCRtXE2PQzA5U1+TGP9asKfoxMDitrYYGZxY2z96PQmn9Yq9MDrLDq q98ZijCmZcsx3yoZvBVvEm2NPOKyiqAfIezPR3ckSvixC0JKJkN9nwEf9I6969w1R4NtvK0eYhF 6fnc1te1WL0REEjqbNk9/dcHoJ3EixLhRlKALVtt/bkUHZXOps/9avMixPwOzJoGc49xqzdvCEW an2mNzotvr3Qn/MtOcByvduox8LUNh+IcWZk4zt9Va05is0nB81x2FL5y7wvJVOqd9H/qcQm5Fe HVIRtfprkS4POkd9tqBWo+zShB6OdObMafVrC8eYkARLuoh8swXlnyTLKUXP+BPavTG7peyAG/D f/zfJFludzI3mSaWMTxsEYjKAuw5TeNYfEP3efjXCdZLLNFHb9JrlnwWOXU9Cj7pUSrlfRC8ubV UuEe6q5urhgGTfwJ5g0SsnY6txxG+1Dry8VNT0yuBcbz8jrC1FiDZ7Tkq7v+d4uKE= X-Received: by 2002:a05:600c:34cb:b0:490:4b89:5361 with SMTP id 5b1f17b1804b1-490c25afa03mr347008385e9.7.1781032616460; Tue, 09 Jun 2026 12:16:56 -0700 (PDT) From: Filip Hejsek Date: Tue, 09 Jun 2026 21:16:21 +0200 Subject: [PATCH v7 11/12] virtio-serial-bus: add terminal resize messages MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260609-console-resize-v7-11-0c550fdcec15@gmail.com> References: <20260609-console-resize-v7-0-0c550fdcec15@gmail.com> In-Reply-To: <20260609-console-resize-v7-0-0c550fdcec15@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Szymon Lukasz X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1781032602; l=8016; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=Y8P6NoW4mR1gnJTshCWApS9hxNntWjZ0ipmI52G4ISI=; b=v3L0ODSNgufTyYoNQ9OIs2vbh+CGF6j1jwYaZleNZXsmB5TVbGfbFMA1V14sUOqj//8EQuxoQ skyivIZIe6zAoGr2slwYWNK2OX+YRyZgfjSmqIIoJwch4SEacreWShH X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= 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=2a00:1450:4864:20::334; envelope-from=filip.hejsek@gmail.com; helo=mail-wm1-x334.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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 @gmail.com) X-ZM-MESSAGEID: 1781032720030158500 Implement the part of the virtio spec that allows to notify the virtio driver about terminal resizes. Gate the new resize support behind the console-size property, which defaults to off. To implement the property, restore VirtIOSerial::host_features (previously removed by commit d0660e5b7fc7e97926232d13d2500a16df32b310). The virtio spec contains two methods to inform the guest about console size: For legacy drivers, we have only one port and we put the terminal size in the config space and inject the config changed interrupt. For multiport devices, we use the control virtqueue to send a packet containing the terminal size. Unfortunately, old versions of the Linux kernel used an incorrect order for the fields (rows then cols instead of cols then rows), until it was fixed by commit 5326ab737a47278dbd16ed3ee7380b26c7056ddd. As a result, when running an old guest kernel, the number of rows and columns will be swapped. Based on a patch originally written by Szymon Lukasz , but partially rewritten to fix various corner cases. Signed-off-by: Szymon Lukasz Signed-off-by: Filip Hejsek --- hw/char/trace-events | 1 + hw/char/virtio-serial-bus.c | 81 +++++++++++++++++++++++++++++++++++= +++- include/hw/virtio/virtio-serial.h | 7 ++++ 3 files changed, 87 insertions(+), 2 deletions(-) diff --git a/hw/char/trace-events b/hw/char/trace-events index a3fcc77287..e387c8853f 100644 --- a/hw/char/trace-events +++ b/hw/char/trace-events @@ -11,6 +11,7 @@ serial_update_parameters(uint64_t baudrate, char parity, = int data_bits, int stop =20 # virtio-serial-bus.c virtio_serial_send_control_event(unsigned int port, uint16_t event, uint16= _t value) "port %u, event %u, value %u" +virtio_serial_send_console_resize(unsigned int port, uint16_t cols, uint16= _t rows) "port %u, cols %u, rows %u" virtio_serial_throttle_port(unsigned int port, bool throttle) "port %u, th= rottle %d" virtio_serial_handle_control_message(uint16_t event, uint16_t value) "even= t %u, value %u" virtio_serial_handle_control_message_port(unsigned int port) "port %u" diff --git a/hw/char/virtio-serial-bus.c b/hw/char/virtio-serial-bus.c index cd234dc6db..a31e80cfde 100644 --- a/hw/char/virtio-serial-bus.c +++ b/hw/char/virtio-serial-bus.c @@ -260,6 +260,68 @@ static size_t send_control_event(VirtIOSerial *vser, u= int32_t port_id, return send_control_msg(vser, &cpkt, sizeof(cpkt)); } =20 +/* + * This struct should be added to the Linux kernel uapi headers + * and later imported to standard-headers/linux/virtio_console.h + */ +struct virtio_console_resize { + __virtio16 cols; + __virtio16 rows; +}; + +static void send_console_resize(VirtIOSerialPort *port) +{ + VirtIOSerial *vser =3D port->vser; + VirtIODevice *vdev =3D VIRTIO_DEVICE(vser); + + if (!virtio_has_feature(vser->host_features, VIRTIO_CONSOLE_F_SIZE)) { + return; + } + + trace_virtio_serial_send_console_resize(port->id, port->cols, port->ro= ws); + + if (use_multiport(vser)) { + struct { + struct virtio_console_control control; + struct virtio_console_resize resize; + } buffer; + + virtio_stl_p(vdev, &buffer.control.id, port->id); + virtio_stw_p(vdev, &buffer.control.event, VIRTIO_CONSOLE_RESIZE); + virtio_stw_p(vdev, &buffer.resize.cols, port->cols); + virtio_stw_p(vdev, &buffer.resize.rows, port->rows); + + send_control_msg(vser, &buffer, sizeof(buffer)); + } +} + +void virtio_serial_resize_console(VirtIOSerialPort *port, + uint16_t cols, uint16_t rows) +{ + VirtIOSerial *vser =3D port->vser; + VirtIODevice *vdev =3D VIRTIO_DEVICE(vser); + + if (port->cols =3D=3D cols && port->rows =3D=3D rows) { + return; + } + + port->cols =3D cols; + port->rows =3D rows; + + if (port->id =3D=3D 0 && !use_multiport(vser) && + virtio_vdev_has_feature(vdev, VIRTIO_CONSOLE_F_SIZE)) { + virtio_notify_config(vdev); + } + + /* + * We will send these messages even before we told the guest that + * it is a console port (by sending VIRTIO_CONSOLE_CONSOLE_PORT + * message), but that should be fine as the guest will likely + * ignore them. + */ + send_console_resize(port); +} + /* Functions for use inside qemu to open and read from/write to ports */ int virtio_serial_open(VirtIOSerialPort *port) { @@ -408,6 +470,7 @@ static void handle_control_message(VirtIOSerial *vser, = void *buf, size_t len) */ if (vsc->is_console) { send_control_event(vser, port->id, VIRTIO_CONSOLE_CONSOLE_PORT= , 1); + send_console_resize(port); } =20 if (port->name) { @@ -557,6 +620,7 @@ static uint64_t get_features(VirtIODevice *vdev, uint64= _t features, =20 vser =3D VIRTIO_SERIAL(vdev); =20 + features |=3D vser->host_features; features |=3D BIT_ULL(VIRTIO_CONSOLE_F_EMERG_WRITE); if (vser->bus.max_nr_ports > 1) { virtio_add_feature(&features, VIRTIO_CONSOLE_F_MULTIPORT); @@ -568,11 +632,18 @@ static uint64_t get_features(VirtIODevice *vdev, uint= 64_t features, static void get_config(VirtIODevice *vdev, uint8_t *config_data) { VirtIOSerial *vser =3D VIRTIO_SERIAL(vdev); + VirtIOSerialPort *port; struct virtio_console_config *config =3D (struct virtio_console_config *)config_data; =20 - config->cols =3D 0; - config->rows =3D 0; + port =3D find_port_by_id(vser, 0); + if (port) { + config->cols =3D virtio_tswap16(vdev, port->cols); + config->rows =3D virtio_tswap16(vdev, port->rows); + } else { + config->cols =3D 0; + config->rows =3D 0; + } config->max_nr_ports =3D virtio_tswap32(vdev, vser->serial.max_virtserial_port= s); } @@ -735,6 +806,10 @@ static void virtio_serial_post_load_timer_cb(void *opa= que) port->host_connected); } vsc =3D VIRTIO_SERIAL_PORT_GET_CLASS(port); + /* + * TODO: let the guest know about new console size if it has chang= ed + * (this will require sending old size in the migration stream) + */ if (vsc->set_guest_connected) { vsc->set_guest_connected(port, port->guest_connected); } @@ -1151,6 +1226,8 @@ static const VMStateDescription vmstate_virtio_consol= e =3D { static const Property virtio_serial_properties[] =3D { DEFINE_PROP_UINT32("max_ports", VirtIOSerial, serial.max_virtserial_po= rts, 31), + DEFINE_PROP_BIT64("console-size", VirtIOSerial, host_features, + VIRTIO_CONSOLE_F_SIZE, false), }; =20 static void virtio_serial_class_init(ObjectClass *klass, const void *data) diff --git a/include/hw/virtio/virtio-serial.h b/include/hw/virtio/virtio-s= erial.h index da0c91e1a4..bda6d5312a 100644 --- a/include/hw/virtio/virtio-serial.h +++ b/include/hw/virtio/virtio-serial.h @@ -145,6 +145,9 @@ struct VirtIOSerialPort { bool host_connected; /* Do apps not want to receive data? */ bool throttled; + + /* Terminal size reported to the guest. Only used for consoles. */ + uint16_t cols, rows; }; =20 /* The virtio-serial bus on top of which the ports will ride as devices */ @@ -186,6 +189,8 @@ struct VirtIOSerial { struct VirtIOSerialPostLoad *post_load; =20 virtio_serial_conf serial; + + uint64_t host_features; }; =20 /* Interface to the virtio-serial bus */ @@ -220,5 +225,7 @@ size_t virtio_serial_guest_ready(VirtIOSerialPort *port= ); */ void virtio_serial_throttle_port(VirtIOSerialPort *port, bool throttle); =20 +void virtio_serial_resize_console(VirtIOSerialPort *port, + uint16_t cols, uint16_t rows); =20 #endif --=20 2.54.0 From nobody Tue Jun 9 23:07:22 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1781032788; cv=none; d=zohomail.com; s=zohoarc; b=QKrQ5G9HPgh+5nql9FKbWMbYU/OQOPJTDEM7HFlQJTfHSYbJBtENGQvyOG3vL+lDqVHTbVcQLH1iI3feFoA9GAMW61LXvcP4Vm04RgBvkSbR8RShkVkBX3tGI+VeNNRZnTVtU9Icu7f7ZIpZppaZAAaCRD9f6lh/+XAAGaHAXp8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781032788; 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=GE2kR1xeXVrOYrQ1L5yk3M3rSjJjGyLlFBLdmYC2OsI=; b=UtBsogqDQW0FXRsLEAkKT/nSb3q9MqlRknr3Zfx3EVMzGd3pknhIt3SNxRp2iYrxJX6NYHJdigx1prDepLMp5piegbD/ea3a9A/tN8BxGvPk4UU/HYupWVYcxyVwuonHeUXfin5pawRHmlEk6WEMh2Wx1DZyiU2ViqIgdIW51Bw= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1781032788829300.87686477770217; Tue, 9 Jun 2026 12:19:48 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wX1xN-0006Qp-Dd; Tue, 09 Jun 2026 15:17: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 1wX1wb-00065y-BC for qemu-devel@nongnu.org; Tue, 09 Jun 2026 15:17:01 -0400 Received: from mail-wm1-x334.google.com ([2a00:1450:4864:20::334]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wX1wY-0006SF-Vf for qemu-devel@nongnu.org; Tue, 09 Jun 2026 15:17:01 -0400 Received: by mail-wm1-x334.google.com with SMTP id 5b1f17b1804b1-490b7866869so66344755e9.2 for ; Tue, 09 Jun 2026 12:16:58 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4601f2f67c6sm62219375f8f.16.2026.06.09.12.16.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 12:16:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781032618; x=1781637418; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=GE2kR1xeXVrOYrQ1L5yk3M3rSjJjGyLlFBLdmYC2OsI=; b=IwaCDbXkOmxe0iKq7Q/LUv7YCfTMApLAZVP0v99gQTSzsqXg5/5+1bfQ277uoVdpr6 c70oPlp6RvwPnkSVfsAEYKf1KAER86HHcNrUhVmpst3Z3rgeseKnpJSRMKxJIlspgwCL lPwGP36iyrFMAyYtjOiYNfhHSxNqYjZJq+6IL1t11v4VTVOksdXo81Hvu2VMYnkA8WJI aUQ+nW86QFN5+V2rol4vb4nA/hXaScA9EaMcKhaazCt5uGGbuuRhmQQ+p3FP3cPNuFf+ 9nag5sF8+NTxuIDqnzhulIm9t8SNog3cyg/n0RI0Bf7umT4poWEGwaeQhKNc5VVZenZQ GBKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781032618; x=1781637418; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=GE2kR1xeXVrOYrQ1L5yk3M3rSjJjGyLlFBLdmYC2OsI=; b=otkptKa1bE2P2oRgcclDCZN3sBlsXUJkw7ROZZ8DaOmhxG4EzeVLgQWxgKSKV/bvgX dRjmckOwoAK5DBs8OPRBswSJoRPmkzAPMD7SjP2bw1+WYuFoGcmSRypGNsae7RpjKEX2 N1DPwdbqVIGTLivkg4/5NnfKQKZ3T39WmeHWrjdvysXontgR7+gz2f6vx63vr/ORf0+f vM69dspJ5q3ggq3KpcP0+VOoSu2xZpwjqCm+SRLK2RBrnDTTAH6ly4cSMm012NtBURzt iXNhgqlspnpNnQoPFC5taHsVZAxSiesFIa7wZ7kSV+hz40wGqd2ZVD2NhrS0Lbxg+02R vUPw== X-Gm-Message-State: AOJu0YxYKnLPHXf6aRU8ZvnEABYWNvCm+HHmrYXJuOYhJkWPW2a31vbe A2wBxYqode2zkt7eygi2YpMJF0WSMwgGErF+zjTYWv+eST0W1910NYjE X-Gm-Gg: Acq92OFcRfSvgq/e6npBL3lYNeTC2S4xfJFiG9G0sT2LiVUCBPPNhoH5v+o4xbDjoFm WnbP5DQkBCNYWV60OUPVubwpV2B9nrgiFNj/p7kA8xqlJFfURxhzLTMQ7ye1/5Nyud166OFdnVI scaf8M8FitOxHjD7ll3QAIsP56XAhs2vK0HNkWwsBdnC5owbA9hFWA90qyjj8+6q+mG3KDN7G9H 55+9f41gWA+PpCGD6GeB/GcY1bBaiEyle2eZCUGjljDEq+vEKNjn9Qc39FEFRHofb1ai+xAyO3/ 725CvOdBFQbOq31lmBXFkvpEglApyl3MI9wZi42o0xpHheT/8nAQWtTDdtPJRdz2DXdBvsNUaCa wX/HyRLMj1UpeQ59YF2ov8coHsyHBxFbe6Q5gW34ZWuQIeYBt+LDpUJ8gk99In6twNghVjSGLHJ GNnRZxVCOCQcop3DOBoVCHwVFw1reNSI+MPDIgRST4LrSDkx1MIpYljwx6RyIn+xs= X-Received: by 2002:a05:600c:3107:b0:490:9588:bdb6 with SMTP id 5b1f17b1804b1-490c264cc2emr364171355e9.33.1781032617606; Tue, 09 Jun 2026 12:16:57 -0700 (PDT) From: Filip Hejsek Date: Tue, 09 Jun 2026 21:16:22 +0200 Subject: [PATCH v7 12/12] virtio-console: notify the guest about terminal resizes MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260609-console-resize-v7-12-0c550fdcec15@gmail.com> References: <20260609-console-resize-v7-0-0c550fdcec15@gmail.com> In-Reply-To: <20260609-console-resize-v7-0-0c550fdcec15@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Szymon Lukasz X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1781032602; l=3302; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=S52O78eqfhcrqS9wQGdogkWPgjv5YHOanEgZT+Knbnk=; b=fGTEd/QoCbP4Oy1Sajn9ql36kt6eTL7rTTRbhn/3zRyOUvLBhZC19QDBjQYK3aHlwSyR4hONQ wzHzWfBr4elBE5aeCqEOdFRgvs1/E6x8jt0ifsBZO4+5RfrhPbHI3xR X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= 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=2a00:1450:4864:20::334; envelope-from=filip.hejsek@gmail.com; helo=mail-wm1-x334.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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 @gmail.com) X-ZM-MESSAGEID: 1781032790993154100 From: Szymon Lukasz If a virtio serial port is a console port, forward terminal resize messages from the chardev backend to the guest. Signed-off-by: Szymon Lukasz [Filip: rename things, remove logic that is now handled in virtio-serial-bu= s.c] Signed-off-by: Filip Hejsek --- hw/char/virtio-console.c | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/hw/char/virtio-console.c b/hw/char/virtio-console.c index 36ad2ddc3f..db9d8ca797 100644 --- a/hw/char/virtio-console.c +++ b/hw/char/virtio-console.c @@ -107,6 +107,15 @@ static ssize_t flush_buf(VirtIOSerialPort *port, return ret; } =20 +static void virtconsole_update_size(VirtIOSerialPort *port) +{ + uint16_t cols, rows; + VirtConsole *vcon =3D VIRTIO_CONSOLE(port); + + qemu_chr_fe_get_winsize(&vcon->chr, &cols, &rows); + virtio_serial_resize_console(port, cols, rows); +} + /* Callback function that's called when the guest opens/closes the port */ static void set_guest_connected(VirtIOSerialPort *port, int guest_connecte= d) { @@ -171,6 +180,23 @@ static void chr_event(void *opaque, QEMUChrEvent event) } } =20 +static void chr_event_console(void *opaque, QEMUChrEvent event) +{ + VirtConsole *vcon =3D opaque; + VirtIOSerialPort *port =3D VIRTIO_SERIAL_PORT(vcon); + + trace_virtio_console_chr_event(port->id, event); + switch (event) { + case CHR_EVENT_OPENED: + case CHR_EVENT_MUX_IN: + case CHR_EVENT_RESIZE: + virtconsole_update_size(port); + break; + default: + break; + } +} + static int chr_be_change(void *opaque) { VirtConsole *vcon =3D opaque; @@ -179,7 +205,9 @@ static int chr_be_change(void *opaque) =20 if (k->is_console) { qemu_chr_fe_set_handlers(&vcon->chr, chr_can_read, chr_read, - NULL, chr_be_change, vcon, NULL, true); + chr_event_console, chr_be_change, + vcon, NULL, true); + virtconsole_update_size(port); } else { qemu_chr_fe_set_handlers(&vcon->chr, chr_can_read, chr_read, chr_event, chr_be_change, vcon, NULL, fal= se); @@ -207,7 +235,7 @@ static void virtconsole_enable_backend(VirtIOSerialPort= *port, bool enable) VirtIOSerialPortClass *k =3D VIRTIO_SERIAL_PORT_GET_CLASS(port); =20 qemu_chr_fe_set_handlers(&vcon->chr, chr_can_read, chr_read, - k->is_console ? NULL : chr_event, + k->is_console ? chr_event_console : chr_e= vent, chr_be_change, vcon, NULL, false); } else { qemu_chr_fe_set_handlers(&vcon->chr, NULL, NULL, NULL, @@ -239,7 +267,7 @@ static void virtconsole_realize(DeviceState *dev, Error= **errp) */ if (k->is_console) { qemu_chr_fe_set_handlers(&vcon->chr, chr_can_read, chr_read, - NULL, chr_be_change, + chr_event_console, chr_be_change, vcon, NULL, true); virtio_serial_open(port); } else { --=20 2.54.0