From nobody Wed Sep 30 15:28:47 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=1790700130; cv=none; d=zohomail.com; s=zohoarc; b=miqucRIcoJ5tnlwOySM4O9hDm6/6AbtZaQfUeucrcuX0644K2YzpvWn8DRd19X/pSRGEoNfKGJDzSHShnJd0j8oGY33/0SKPcDosdCNP7C0znqsgGbc/aoKvsoxLDsucaeemmliZlIvLUr6dqFKVoMZlEgNo7sdx+19+MCG3vTQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790700130; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=umrn8HLPDOvFFL2RpBiWvZyNCiuGMe8R/n/m430ufD8=; b=dlSWY68Z8dm00Pz5itRuEACZZvI0rxGkWdmB6r2z821x4KqKJE9Fb0z0ACfOpk2mqBeLpgKAfI3L1BoXvUVWW75ctxy6Qcnqs3H0J+0QH/H/q+kOEYl8encfOmdAHJXyoWg/vPiHQ9XzmBCiMpW669CXqKzm6pFVo1cewU1gtzQ= 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 1790700130689488.67052695743587; Tue, 29 Sep 2026 09:42:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xBasj-00057Q-0l; Tue, 29 Sep 2026 12:40:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1xBase-00056a-Ue for qemu-devel@nongnu.org; Tue, 29 Sep 2026 12:40:37 -0400 Received: from mail-wm2-x11.google.com ([2a00:1450:4864:31::11]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xBasd-0006Lq-7z for qemu-devel@nongnu.org; Tue, 29 Sep 2026 12:40:36 -0400 Received: by mail-wm2-x11.google.com with SMTP id 5b1f17b1804b1-49d1fb0cf5eso41578315e9.3 for ; Tue, 29 Sep 2026 09:40:34 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4a00cf8f93csm97948635e9.5.2026.09.29.09.40.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Sep 2026 09:40:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1790700032; x=1791304832; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=umrn8HLPDOvFFL2RpBiWvZyNCiuGMe8R/n/m430ufD8=; b=hq83/uydCBHGZHmPZrwrVFGqiGpx9euf/nunsXao4ySj8l4x0z2ZOEWg1uePwhG8zD 2p153p+LYfJi4fyBwNufTpDIi3CgqJoxB4pVtMCT211GlPFlXaCceF35AJVr9pQaEjJb y9rKCkPkrsFMHDwD5eCdbuqs8wq7L/EyryXbdqgsqM3bdEACZazaviZeMONjAODQa8cV r8X50ifXeq8KwzpG6KcwFOWIYJnFDUzqe0xyxEKZUUve3NA6xZHnIdtXLoUlY5o45pqg 4wncqXke3Mzp9aDTvGv4hAu75ux1P/3bmJvH6A65SrmDCGokQL1PsJLcdmJrtMNPrHc/ BFVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790700032; x=1791304832; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=umrn8HLPDOvFFL2RpBiWvZyNCiuGMe8R/n/m430ufD8=; b=SBL7Q5/ptelh2M1If+7wc/tU7Xzk3f/Lg5OWY078Y2mQalxFu8MRBpyIEBRnNBXxpk nBS2X2u9SGnYhv2/cKMo0SuQjU3so2fKXV5aWq1uSIyzBpMmBP8VpJ+dtdDbBaNE4+Fm ZMT7kug9yGVM/ZmlCZKIsHIKc6Mep2WvvyUStPbJyB+RbWaXtkaf5tZn7474efZOar7k nMEjJ1Cqd3clyK/hYNwrUUgpStPzHkny49erblnbFQPNptXsv4GnAp3+42Q2dpitiL7f nvSKQ8OESIyA/YgD4WLSwT3Jm8fC8jVQwPHnaTLHgolNmoMyXQY+U3s7ArErPqh2phpi 5M2A== X-Gm-Message-State: AFuF++kS6koIHk9Rq+NvVE7Hl0jUAy81z6IYN/uSxMmWkzTNC+gIqcw4 ymnWOrWgrnry6ZIGheC0do0i5MvXv82XSQMdlFKaWumFuA0K2ayYoFsc X-Gm-Gg: AYBFou30qEgPZ6Y7UIZYcXP5EQX2YUbd+NS/A5oZE7SYeq6QYudSV4Ccr1c5NaJ2gD7 gzwzVCbUB2yKu8QQjTl3JXF6SzIH0f3h7VAwExzZg7O2mTTDxTbaHqRUs0IA5pgeRbRQ5tsx56K OEjTRfbPK4p8U2AASIe9JKClVxVRK/rcJvXMa/eed1QubrWvsS0t+D+NPwQCSiMhHkr5XAMNwOE EhOdaAp/mUMmiDZXTYV1OCRMI9siEqDvQNKDMdDA0vsnVnQxO4W47GUgfPA1YejoDcuWJvaFQVL Oyj4+25q9bBOjP2i6PHXRYWIElqH1wL+WSGq67FsTa4zsxLd5gFcO8raa47Dt6mjVY7MWuWb4ZL 44Jw226rLeyXCgvoBa+FR1bS3KovgnqIDwZncmyALFRCsTLHrBb4Uv484aS1rGx/TUv6rLWoWB+ hCsccj/2uHFOdtXB1mc50ZpEQUbyZvYoZy4IxtEH0dilyf2UikUs4PwoGPRle5VITSjHmowqgbJ TY+bX1LBwRArdom6LfynNKOZUffmcYzm5jRtQ== X-Received: by 2002:a05:600c:6216:b0:49f:fbad:29be with SMTP id 5b1f17b1804b1-49ffbad2ce8mr186756055e9.34.1790700032255; Tue, 29 Sep 2026 09:40:32 -0700 (PDT) From: Filip Hejsek Date: Tue, 29 Sep 2026 18:38:29 +0200 Subject: [PATCH v8 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: <20260929-console-resize-v8-1-2ff9183f8750@gmail.com> References: <20260929-console-resize-v8-0-2ff9183f8750@gmail.com> In-Reply-To: <20260929-console-resize-v8-0-2ff9183f8750@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 , Dominique Martinet , =?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=1790700030; l=2201; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=t7htNSgqNPHw6qhkEHekMIj+qcr4FpFc1lUoQVqaq/E=; b=UeBCnc37/BYGVP2pPx4Ze+VysdDIaLQ0WLvLlLYCiX0YQ9HCvtYpiJrg8wOlcBpgv07uTmWFF MMaPU6h6m7MCxPLhdGEsD1UxZir7zsMWv9qLWSe8TkaH9JxxIpENti5 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:31::11; envelope-from=filip.hejsek@gmail.com; helo=mail-wm2-x11.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: 1790700132608158500 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 a82894e1d5..e4a3801e7d 100644 --- a/include/chardev/char-fe.h +++ b/include/chardev/char-fe.h @@ -168,6 +168,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.55.0 From nobody Wed Sep 30 15:28:47 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=1790700139; cv=none; d=zohomail.com; s=zohoarc; b=HvqTO6AvyGkUBOJLD7rdZxCcF0eD1VjyPqgDqpEtFo4JKfG2/fcq35yrkh6PAGexoaFXug5ASiWAD3Eb2NR61f+Ah1hOCOfDYOPnV0/p/Va+zUOOmQVAM/u8fWVRWJvj6VSKRCVaXjXIMhTfAt0nFHBr7tiZjp4XQHFIQz7DwLw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790700139; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=oWIkUj1yFeaQWlWBHcLADbfPchqUgz63VyyNsj5XG3Y=; b=KVrx+0s0jO0tkouXM3IWiymb0cnj5A28xjGPa5qlA2IBUyYeH/vxpBUGCFOiIZwfleEpwBEVUivo1Hfy41fYzM2+T6mBvmR/AEFWx+GpFIFS5Br95dk03sxJkAJPvHKUEza8P8bvtH0KzBUjIi75YVVkfXi78Ru9+ruzgmvcaFc= 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 1790700139953937.6536534492484; Tue, 29 Sep 2026 09:42:19 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xBasl-00058Z-6J; Tue, 29 Sep 2026 12:40: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 1xBash-00057O-6H for qemu-devel@nongnu.org; Tue, 29 Sep 2026 12:40:40 -0400 Received: from mail-wm2-x10.google.com ([2a00:1450:4864:31::10]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xBase-0006ME-El for qemu-devel@nongnu.org; Tue, 29 Sep 2026 12:40:38 -0400 Received: by mail-wm2-x10.google.com with SMTP id 5b1f17b1804b1-49ffb83bf7aso27227215e9.2 for ; Tue, 29 Sep 2026 09:40:36 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4a013d3c85fsm6577765e9.4.2026.09.29.09.40.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Sep 2026 09:40:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1790700035; x=1791304835; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=oWIkUj1yFeaQWlWBHcLADbfPchqUgz63VyyNsj5XG3Y=; b=kgWzlRpdiv/qIv8/lK3wdsbqJXIYSMoFNSij6hHZm0DITINxvtQHHaf02LhEixEjlF IvlTGBbsUS805yunIBiqnSY8SqR4Ml4avwACiouTv6RmKx9eeO2fKFuCLeEJtR7iSc4z uP1xj3iNqiWwl5r05P+/eC6AxEgFfIO+QRFO3+RQTT9S44JGJxssdRIRhs5/bhvck58P 3nXYggd1h9A597cP0ce+4lFnwq5Ch8TjoMgbURzYsyoeZEEoNmKtul87jiv5pAZO+uQe 1gVsZNEVPr58Vvoo/y8k2v0l3Vebk8QP8bT95XRrs8rEs68JRrk0u4uEjV8q8YZoZJnX lP1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790700035; x=1791304835; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=oWIkUj1yFeaQWlWBHcLADbfPchqUgz63VyyNsj5XG3Y=; b=1iJaomam8gyjZ9tmuv+BHZBht/GchbY3OdS32ubdIqDJbKA8YmmWKly1GHCBWnuVd2 jfmNg3OZOHBLlEU9+OEapn2x/GH3zkcCKH2UlrqhevMUf1Iaa8Cldiul5w9WVDWubmNN Oi8/KcNV2uxZJS34JLZzVC8J0n8vORxyktNWCjoenchNzjOo33KhXL8Vg22Hf3CuxdzW VETwQ1YkOx5wmJKRo4mYhQnoc8moJv2ElovGH4ueQ5GpsyPkxwcUb0l6iouJKuvH72A5 t+85eR87rikAGoNRpyGv/+N02ibrmJaAeCpOno5/N/O9xcmMqUugdlLGGacr+bnPb+jt mWBA== X-Gm-Message-State: AFuF++nsMjudryaVJegiFaoGBJdvXe/fsTuxHqfe+W1p0krYEmVaNIq7 CHqhwMtraGZKoYo+NF+RxGO6jEloFWyhUYecTe1An1X4jXRdZEdrTJ/A X-Gm-Gg: AYBFou1jOKy3VyjkU0SE097znjH0BtOZgeY2zunL0Z+ic7M4n3VZxatuSPe0UWpezDM 7sYVNsbSnB56Nhc5ihsVGBXqxvfNU0BxWbPa+ii+LfnMF394XLme+yYCMWmPWyHryjlCtXlsUhg 5AAw7C2j9rDMU8WiBDB045QxeHAh7MnCvqZCepdoJysymHuyiCWwsfv/cR0DWB+RCcYdB0hE4OX UQ/Y4UcQ/vyZYuxeIsGrsmiCr6wmtiqiulCflAPFy3CB40g8qPc4mgF5jkqs1UrSSFfTzHTjLnj RvSuXT8nmr/89kgJmN7b3P99Xim6LXiIIvkiLl5iRdPRlb87wUsqIS8KXxNj46D/WPMWiKeSO8a VopJMHLCgv4fO1IIf+mmUdcNJ8mlDXfw+wrRfpl6FqSkuyAlEF2ZHEKmrUWsPoRda7V20cbixeF A6rhWC9+x7ViJAoiNqwQPxHCMFQoFild1wusrAYPOKwPU7/fBIKYR+Lsacg2h4EXZ9nnuLXzE1m HJayIGBqXDQbngNIBfhd5mBNok= X-Received: by 2002:a05:600c:37c4:b0:4a0:b6:460f with SMTP id 5b1f17b1804b1-4a001e8c579mr134367835e9.33.1790700033229; Tue, 29 Sep 2026 09:40:33 -0700 (PDT) From: Filip Hejsek Date: Tue, 29 Sep 2026 18:38:30 +0200 Subject: [PATCH v8 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: <20260929-console-resize-v8-2-2ff9183f8750@gmail.com> References: <20260929-console-resize-v8-0-2ff9183f8750@gmail.com> In-Reply-To: <20260929-console-resize-v8-0-2ff9183f8750@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 , Dominique Martinet , =?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=1790700030; l=8913; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=JMEv0Ha1KdOHv17m7jIqBI35vnSmAKBqsx5HxeK1exM=; b=+59IfzgEZiltyi/f/Vi7/6UHDjmZJDO3+E+VnI+TAM++iqH1ZEumyDat7zA0mMoM6SuKOKeDC 8Nco9QG8ghNDosOPMyEDTKZEYyEpiukLHUX17vN0l0uiKHNShizvppZ 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:31::10; envelope-from=filip.hejsek@gmail.com; helo=mail-wm2-x10.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: 1790700140666158500 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] Reviewed-by: Daniel P. Berrang=C3=A9 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/display/vhost-user-media.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 + 18 files changed, 23 insertions(+) diff --git a/backends/cryptodev-vhost-user.c b/backends/cryptodev-vhost-use= r.c index 3334e280a2..b0e325e47e 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 9da0911e50..40d2180ce7 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 3dade143c9..1352a0cf57 100644 --- a/hw/block/vhost-user-blk.c +++ b/hw/block/vhost-user-blk.c @@ -441,6 +441,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/display/vhost-user-media.c b/hw/display/vhost-user-media.c index 851af8ddc2..3d76aaba58 100644 --- a/hw/display/vhost-user-media.c +++ b/hw/display/vhost-user-media.c @@ -241,6 +241,7 @@ static void vu_media_event(void *opaque, QEMUChrEvent e= vent) 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 5070178dc2..7687f2804f 100644 --- a/hw/scsi/vhost-user-scsi.c +++ b/hw/scsi/vhost-user-scsi.c @@ -225,6 +225,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 dfd9e8bb50..a666b1e8d7 100644 --- a/hw/usb/redirect.c +++ b/hw/usb/redirect.c @@ -1390,6 +1390,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 1a377016e7..3cb59fc173 100644 --- a/hw/virtio/vhost-user-base.c +++ b/hw/virtio/vhost-user-base.c @@ -277,6 +277,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 c4692bd6aa..29d37716b3 100644 --- a/hw/virtio/vhost-user-scmi.c +++ b/hw/virtio/vhost-user-scmi.c @@ -215,6 +215,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 488ec23937..7b80d84800 100644 --- a/monitor/hmp.c +++ b/monitor/hmp.c @@ -1587,6 +1587,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 aec0315775..eb44012643 100644 --- a/monitor/qmp.c +++ b/monitor/qmp.c @@ -663,6 +663,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.55.0 From nobody Wed Sep 30 15:28:47 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=1790700106; cv=none; d=zohomail.com; s=zohoarc; b=L823qCLOA3O2cL1yKXgbuO+al7oFPdvLlAEpaQHPjUKCa+TDMYrpdXKZ4IWwjYBkhC/4vdZ+rWalQK97//jY2uEo29/kNwJmNhAcNUvQk7StRydD8QTrPDzg6TsZCbzvVDs/qnEeEhrL0i2Tk+0D7LUz9YGmSKJzwpY113HSJPM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790700106; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=9gDqotaOATlDOXa0rNj0zFQhV79ejJvu8quNLxZWaS4=; b=SSYZb3Au/5NJLxLIDO0qQyRKgaxN3iKSUAJOI5QPvQ9dJQNcOuZqLTERtNnjb2mD7sxGw4HHJ2JRUYCnLltg7WUaSNwTqXDsiRGr571hjoCX3HTrli4gsvfpR2+KGQ42FIiPyGjhbAqdp9Ad6LnUtih609gEmo+pm8WSgIQBm2Q= 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 1790700106100460.2625716078993; Tue, 29 Sep 2026 09:41:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xBasj-00057P-0t; Tue, 29 Sep 2026 12:40:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1xBasg-00056s-7P for qemu-devel@nongnu.org; Tue, 29 Sep 2026 12:40:38 -0400 Received: from mail-wm2-x11.google.com ([2a00:1450:4864:31::11]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xBasd-0006M3-En for qemu-devel@nongnu.org; Tue, 29 Sep 2026 12:40:37 -0400 Received: by mail-wm2-x11.google.com with SMTP id 5b1f17b1804b1-49ffe817151so17989395e9.0 for ; Tue, 29 Sep 2026 09:40:35 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4a01489a5a0sm638935e9.2.2026.09.29.09.40.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Sep 2026 09:40:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1790700034; x=1791304834; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=9gDqotaOATlDOXa0rNj0zFQhV79ejJvu8quNLxZWaS4=; b=tAsIAOu2bDJiLeI7/6aUPK8tdnkS5OdinAqryo9nY67ogLwMod1GNLP0VpZ8DivRr1 ERYdTckmRbGsVT3oDvyRi8eqnb5KKm382ckEy2IhGFXRJOqes7V6jng5EHnaZrdpb/SM ErQ5tJsdHd6wJXLSObMPdcBTqCYxCldK9bGfcVRobNKkROpVPMRhtXBoa1Lx32w+RrAE W+nJX0E2NtKJI4dKWSrePu4dPXpx9lBx3KIjsg6MWB40CCoD3F2nrs3gf2+Cusqvw2M3 o9mrRWCfE+lNOrVPViylfMDB10sZGsV7dHixJ427sZoQOHLnV/cyh0TNriLYXaNN7KJV uZHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790700034; x=1791304834; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=9gDqotaOATlDOXa0rNj0zFQhV79ejJvu8quNLxZWaS4=; b=pp/E7yhqzKYN0MkfW9jS+UJabc+SqRiwNVJdbhDoXGybTrK5oea0xI05/RyhRx6BUK WPgXFWUaLLg/qhuVb0RIcs2qB6thvooJUO94wM5KfOSfDMcLDaKAO55682GS9bBHRx09 xCVBLem+iTzyVVD28T3jvgc6k4FBC/YkwcEn8rxv3hVBI2xQPzW/EuACb9CGzwr+st+T vs5AsDh+MWSC6rW5XsGlIWxudIhSZcYXN5yze/0R/KIHeLSxJyYITWwMGcuEsHSnWrSN 7EAEJ6bc2Jd0TC9XTI0AjAgsHlknm86K7WTWLqKblGLO+o2wISQcgtHIR2NEaRi6J3wA hohQ== X-Gm-Message-State: AFuF++mp0ZX+GbxIOEDStU6Nv7ZI5x4VNDNGh40OdTQyk7OpqIPa1DtU IN2SS+vDBe4SJM2j+9OeYM/3pNv1OVliDoH2KxxW8mv0/oZoxO2/BuTX X-Gm-Gg: AYBFou2zpNSXPIx8Aj/TOOJM3CAPEjma22D3JAPSRIjOLrXZYkhxJHRTsmZ6FUhffRf yA2w1crpMIplFc1W0rXxBrmBo1wv4HUjlSC7KB7+Ya3/s2iG31GO8hfmPvo/3AnoEBdwzTLKO9N dlmUwylsUBTj43IcDeeBTSkmqSrA9ILkVXdYCzeLuERZwNqQiVFmTbba63f7I+0SrIGss75kZ9+ k/2meISPgdb3gGiCJeG/AB40Vxx5hxMWV1RJe/vGT0COVg3NjTVf8KsqLFqINYpJD5gq10uAmrX pOrOy9wxGS1tGvdYTO5mXrQ/5fN5pWxZcAkcZt6dJIGIIge14E6O3S3RGM/AZ8R9/ohPH+NUWJ8 mXYM8bnlb0lPa3THkYIVCT+gv0uYKm6ZgMQqSvZdKHXuZl+skWHmr04ZrXKGNB9xMfobky29Ghe 3YlIsVqA01GyyXuHpfwz1ohJtz6+rSYWEzvtL1pZo+jTxi9UgEQa6T8osnzT1O6qMxXd9csDENQ kk/Vx9K1syqNZuncdS01ofy4AI= X-Received: by 2002:a05:600c:8b31:b0:49f:fd66:5fec with SMTP id 5b1f17b1804b1-49ffd66616bmr174290625e9.0.1790700034075; Tue, 29 Sep 2026 09:40:34 -0700 (PDT) From: Filip Hejsek Date: Tue, 29 Sep 2026 18:38:31 +0200 Subject: [PATCH v8 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: <20260929-console-resize-v8-3-2ff9183f8750@gmail.com> References: <20260929-console-resize-v8-0-2ff9183f8750@gmail.com> In-Reply-To: <20260929-console-resize-v8-0-2ff9183f8750@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 , Dominique Martinet , =?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=1790700030; l=1613; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=1oPOGauhzyfxQQGSsUE3ivOXrylJK7I3Igkgzq+/mqo=; b=vdyMaDQfM96HQFacnbNyrZK2J4PvNnLZBBbKCtY6wLWPZS9lFThbqiHaZJ86A/utCW8Y1u/kh HHMSi++V/l/BDHNDZzo8GYdBrq/jao9ayVRPYy4siC0dbosBx9KDH/u 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:31::11; envelope-from=filip.hejsek@gmail.com; helo=mail-wm2-x11.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: 1790700106490158500 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 40d2180ce7..8c8386e5b5 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.55.0 From nobody Wed Sep 30 15:28:47 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=1790700062; cv=none; d=zohomail.com; s=zohoarc; b=lwd5Q/UR/Ltf4vALtATSGbTQGH1rlw2VStgOuOPNCbDVLXMAEL4+xc83XMxiePprW8HdtRKbyynilwTm55ILzxAvjU54TvQOvkcu2qB7rxrbNzU1XO3rJyn6GNyB2gpcH3h0TGHDtOFgtdejmJrmTk0OjP244Ghq7Ve2MqG+9ro= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790700062; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=BDO7HoZUC0vaCcSc1ZJEVSQSCXum+jLLbmSe/0aiZnY=; b=Bz71vy+yKFepa3nTw01pbUJ//+dNDuRGqk19aa4a2FdoAlckLXbvZVQkallsDSYzrDqDMuFfCafkba5D6Pr+UUhHJaoY7Qz1ReRZMcNVhdI5eljHpqHK9zCvJeFe1MnwJeo4QGU5Wv1lOBdjM0uyr7NKQGe2ET+WjJKU+ezcA3g= 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 1790700062674952.245215289919; Tue, 29 Sep 2026 09:41:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xBasj-00057a-7G; Tue, 29 Sep 2026 12:40:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1xBasg-00057C-Kb for qemu-devel@nongnu.org; Tue, 29 Sep 2026 12:40:38 -0400 Received: from mail-wm2-x10.google.com ([2a00:1450:4864:31::10]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xBase-0006MB-7F for qemu-devel@nongnu.org; Tue, 29 Sep 2026 12:40:38 -0400 Received: by mail-wm2-x10.google.com with SMTP id 5b1f17b1804b1-49b912d37b6so24397215e9.0 for ; Tue, 29 Sep 2026 09:40:35 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48af502cf08sm5948283f8f.9.2026.09.29.09.40.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Sep 2026 09:40:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1790700035; x=1791304835; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=BDO7HoZUC0vaCcSc1ZJEVSQSCXum+jLLbmSe/0aiZnY=; b=f4VNVVyFNi02oYnzm3IOVFifHYuw0EOvaLW8zrcarkkwr2GKdmmDxgVrWs9o7mRtfq BfAU7Hx/5itI3h3wEOsOx2aYB57i28zYg+SiB4wMIbucKwXqd7SS+oX/ipmBdl9kmVLK 3JKwt2+7fKIxs4xKraJfWZXygGZIxgm6jw5AD+1BFLjx/eCRAH3bnryRinBm/wUE7GIT bU7ansOpdrs4g9ahDesc59WP4MQHuexG6j1BUtiN7/N0VrP0ywye3z+L4yVjFUb9L78W aW6yueW8hSLnKmdDNdJhUEsOKB4mmhJ6a7A31FTcG8306JrwoSsYnTl+37IfN1oAYiP/ kZcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790700035; x=1791304835; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=BDO7HoZUC0vaCcSc1ZJEVSQSCXum+jLLbmSe/0aiZnY=; b=PNGeDn+/DY3xIUCWX5nzfk8p+i9SuTAtVOuxCD4kDF316qBvoRORyvdkubpoSLvtWr gW+Qo1rOYRxewvepDxCXJP6B2YK0HCTdJbCYQuQgZg4DSsNe0MEo7RBOLMo2hMBZcCAR QRiQ+Un91YaBbR5qmKnioHoEeXiddhOwlOXRr+Kom1ilQSysMUB+MZFPVoYoL9hlBwtk 6XxoNuhtbceLo4dt5o8RJU6yp7G/ZgGx2ZPUF1F4okWmSgAhpH34RyYBFOOxxW/erHLa GqLh0OZ9nQhY/bq7WcC6kXLuaG//bL2QK+v8BXmBXE8XFpDIzcvlM6Y7RgVbolA42OlA jdVQ== X-Gm-Message-State: AFuF++nuP0UY15e5ldXBKiBpbdHrpIrHLY+7qw+FvLdg5rKVNb7TLk7X 0X+iL9gKrGoJZ/e1sjJH13DKkPUJfdu0qM1OwGoLgtgdhH4pL8Q+B0+5 X-Gm-Gg: AYBFou23U6+ZIpsG+p3Qd+A/snNfyqXPqbJwv6hbd7mf3Vfhbz7rg+ae1PBLF+BbX+y enI29UsEJYPAw8Z36DoafEE5AFVw0wrjtrehpGGKXY5i/r12rHpKX6n4HQZ6ENu9bjcU4W1yPl8 qzPXWj1n2lSPaIQ5ziSn6C3nDWH/5nFS8IHVjhMLsqw+METJGn12YksxzraCFrvPotMNCoDQT8T CHxiKgImc504gvI8Q8C3jzfkVqTqkTBdGaETkNElT71PyxEyzjIinLN4iF0paS7wP/lFH2ME1M7 Dss3+EeMJco54CQlDVneKPe1O6YglIM++rDe26EixuaP04pZXCNs8qr2POB7ACllHLH2x26Do3t eAb5pG/bQFt5OBR6ToKHKZy3RoEpsyQubFTqOidT4E8tgUNaK2Z7R27WR5FANbhR5pGGCSPnFG6 syMUqXt8XpEgHuO0WhqGHb3lapBPKmDzMmpgbBZkAWDxciYBohS/lWIrTaR+riwcdgEUiR+GM/z RwlYqW6iKJ6JROFcpEVXHCrzqI= X-Received: by 2002:a05:600c:698d:b0:49f:ff32:803c with SMTP id 5b1f17b1804b1-49fff32848dmr135382165e9.16.1790700034825; Tue, 29 Sep 2026 09:40:34 -0700 (PDT) From: Filip Hejsek Date: Tue, 29 Sep 2026 18:38:32 +0200 Subject: [PATCH v8 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: <20260929-console-resize-v8-4-2ff9183f8750@gmail.com> References: <20260929-console-resize-v8-0-2ff9183f8750@gmail.com> In-Reply-To: <20260929-console-resize-v8-0-2ff9183f8750@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 , Dominique Martinet , =?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=1790700030; l=1674; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=XIo18sGrguMXRnYff57wk94laXzZTbeg8upSKiNp6+Q=; b=XXvK5neTkleB8mB1Nm0cQcNd2TflHgUO8uPAU9A22BxbGJCB9dVCYT6VGXd1jmD3jWcW5l49o mzOoStvVyypDTqBMre+qTc7Lix0hZXkgo7uEeAPHtfOs3B3riQt8fZe 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:31::10; envelope-from=filip.hejsek@gmail.com; helo=mail-wm2-x10.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: 1790700064355158500 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.55.0 From nobody Wed Sep 30 15:28:47 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=1790700137; cv=none; d=zohomail.com; s=zohoarc; b=RnVI0nqGhrhUrjEeY54L6Ks8N/4N8TypvgdqMHIev9gURcO7t/PuJJLJZYi68/q+SgwI0Sa7AVxShpgVe4kFycNXuKFjvxZX4Zvl46Ab3va2LAwwgiAz+V3he3mWs8t2esyFt6TM4ZXL/liP9qLVExtq8QCYx2TnxF2qGhP1ux4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790700137; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=dBwnFanueDtb+QItNjZPWm5x6yrITqXYwMZ8MKnQNfo=; b=l1sTfJwLHVfOaILFFUpGstD6a1rC8QyoFA5o1m7OFD1mW5yfjbaTX4PVknV2JOojvPi6NMZf2oH+91nNp6CA1ksuYVNvJ2+r48/lE/FHW7Fos29vTzuRGqIPGb+tpM8R+jdRSnpjkGF1JcdkfgpgZP7jiYBPlUmyGW5IN0kAZpM= 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 1790700137224668.6880825631569; Tue, 29 Sep 2026 09:42:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xBasl-00058W-4e; Tue, 29 Sep 2026 12:40: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 1xBash-00057N-78 for qemu-devel@nongnu.org; Tue, 29 Sep 2026 12:40:40 -0400 Received: from mail-wm2-x10.google.com ([2a00:1450:4864:31::10]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xBasf-0006MT-At for qemu-devel@nongnu.org; Tue, 29 Sep 2026 12:40:38 -0400 Received: by mail-wm2-x10.google.com with SMTP id 5b1f17b1804b1-49b912d8239so35924165e9.0 for ; Tue, 29 Sep 2026 09:40:36 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4a013d3c85fsm6578805e9.4.2026.09.29.09.40.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Sep 2026 09:40:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1790700036; x=1791304836; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=dBwnFanueDtb+QItNjZPWm5x6yrITqXYwMZ8MKnQNfo=; b=hXl7Dg/q06HR3J241vqRVYTVVdOUTYs15Em0huW7GZ2FwIo+cNQnCf5ZJMLRsbNFo1 B8ezgiYh/6VEMGQMtCd2XefRHUIzHD9GPWEGfqVCSKvUjH6Bj8lbaXnduK0XcaYPl3MT wWIgB1h2sotBRulHC+skwd+Hug8ymBcQNCE0Hvkuo+lAhut2DJVHXmt0RRG4sYLR5BTf gO1S1mjCr70wVTXQWwo1H23+wXSFaDVq9DL0hxL28twZeP6pBfoOc6p727XGAVYBrcfZ XUvTgrX2/cVlqAFQLgdxrHDJNpwT7QauLFB3GH38cu/sQ0O5s+I33WxSoIXvLROBrc2U X+jw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790700036; x=1791304836; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=dBwnFanueDtb+QItNjZPWm5x6yrITqXYwMZ8MKnQNfo=; b=J8vcdsTOrSNXOQppSebVwwOm6Gtjcdt7nBdS6Lvm9m5rQxw2k9re4A0GkROKMwxC11 H/qES4RgryoGukrTFtJ9l3ktrpJvLqbNBpY2pq33/8Om7vLkTj4OpEbSR0GgjW+g8ly5 WCvwYoKVhVYd+g4XKt0THm3MNWfystOfVkyYunWyQe3lgpyOkg/fr5a2JRA8NVDWa3tr xwjJV6MKeGb2PiNWEm9x6N7ALbdKl9CLGSKcfLU4yZcaiV5Ie6yTHP5kVWJ06e0jPbza lAaNiDl7crIQZulqebSeJx0A++hMX+GB7u2ryzUCzyce12/+Te1eUhEfxAOwyGUeTsoA mvAQ== X-Gm-Message-State: AFuF++lPNOnYG/loPdNUysCLnbkC0c+4A7B5r9M54MHddOJU/p0V8Q49 zuLRAMG1UTLBZputYXq6FS9Vt02pzgrbMeKq+jC6Qn/yF1OVRaAz7Ob+ X-Gm-Gg: AYBFou1sucagGgp+c9+qb973C+Uyzg3qNUx/26uKHBlMEl2k99ynIdJ8EFNclw9Lkd6 XJVFlB7edXyidFo2vuBN6uxaoGTeMAA2SVaJd8if0HtazXX19vOIQzaLA5MQfLWM6bfM7X5iEaz FSJSpidK5mOBQsELTdfdw5pXwCbK304MoXAn09NHWNrbttADAYQ1rqtAJ1nkzBCXskrFt4e6niJ hpg0g8cK6RkwBWYqsyOpD7WwaWop+uGEIkAOr6TWW0Ei5vqyw6SF+lAl9fgBHFNokJBzF3BHTZs NmoOHoiiUng4cHkweiZ+7GVPSaBOjOBYTCCDMtyaXb3opbQsY8smcdqwVdiggGEIJ4cYqeJQ1C0 4cPL29EphT4iLVBYbi8pDFpziRRV7oilhBUiiJVkoqEZNEuois9bL8yp1cnc3IDNFHLhw/w9TAO Q//DO3epA6DsOfIeYhqWtnfvjWY2+NHX6S7UuI7E2wpHe7bSbND+XVEsDUhSyBOVq2CQkfQywzl fffL63QCKdeQcgXJnpJhhMRiabS X-Received: by 2002:a05:600c:8a0c:10b0:4a0:62d:4424 with SMTP id 5b1f17b1804b1-4a0062d4712mr75257965e9.8.1790700035788; Tue, 29 Sep 2026 09:40:35 -0700 (PDT) From: Filip Hejsek Date: Tue, 29 Sep 2026 18:38:33 +0200 Subject: [PATCH v8 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: <20260929-console-resize-v8-5-2ff9183f8750@gmail.com> References: <20260929-console-resize-v8-0-2ff9183f8750@gmail.com> In-Reply-To: <20260929-console-resize-v8-0-2ff9183f8750@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 , Dominique Martinet , =?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=1790700030; l=3291; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=8/mXswQFwyFusVK5OVQJSrjJSZwOL/1OBUtr2Ho2tlw=; b=IZWfKdgBzvj5qj3jf3uRcpkKoc5LAT7DQHJSBqjDjBhTtC/5UfxwHfnZZgBJtCiTlxsW5e//5 +uMxCGHn7ltA+V/wKguUzuYdxAFzE8UBMv9d+n/FjL5qHYTJH815iHH 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:31::10; envelope-from=filip.hejsek@gmail.com; helo=mail-wm2-x10.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: 1790700138631158500 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 4db32b6168..ced5fd1216 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 65e5dbcc94..d867b30389 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.55.0 From nobody Wed Sep 30 15:28:47 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=1790700136; cv=none; d=zohomail.com; s=zohoarc; b=erHDUkI7FztsCHpA8Mh88GB90WlYMg447Hh53KpjnSW/NQbLmgSBbCmtfrXh/OFEa7J7xGVXaH1V3gTnmevSVpu7gAtR7a+Gte48pZwj9OeUfvQ48yDDTMiOUa3juEnM5IsbzHgQPUvEdJ/lJdlL/EarxN1kYWTO4tZb5JnGg+k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790700136; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=GUvdc5pSabY72yhnIxUmFj2RHWlQFpUyB4LPoq4EGO4=; b=Hn8FFHaB76v1ACzqvfU6qe0IQT+aOJObVUFGngzZPbHcvxJDWrFbfCgclkvJZoZ1nBp6kiCFu67zINCPMYLqKm2ihJtfw4FY9X40S/n0r2bl0juCktzVxoZ9X50chlgXBHPUj9mxQmn6KiLqiHQJIXIBA6YZn92fLKD+3jGidrY= 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 179070013686047.508063592084; Tue, 29 Sep 2026 09:42:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xBasl-00058j-5h; Tue, 29 Sep 2026 12:40: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 1xBasj-00057m-7T for qemu-devel@nongnu.org; Tue, 29 Sep 2026 12:40:41 -0400 Received: from mail-wr2-x0f.google.com ([2a00:1450:4864:30::f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xBasg-0006Mg-2v for qemu-devel@nongnu.org; Tue, 29 Sep 2026 12:40:39 -0400 Received: by mail-wr2-x0f.google.com with SMTP id ffacd0b85a97d-4888129c46eso2525847f8f.1 for ; Tue, 29 Sep 2026 09:40:37 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48af502cd22sm5337497f8f.13.2026.09.29.09.40.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Sep 2026 09:40:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1790700036; x=1791304836; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=GUvdc5pSabY72yhnIxUmFj2RHWlQFpUyB4LPoq4EGO4=; b=hU3PQhH5g9p5vUkJtZJdTejdYTaxbUe+lyfWe2V+JzjiPijGyR+3MVdkM26X39KKxZ AzHo4ugfUYRtVrA0f9tl6iPwYC/Pu3moEjkVCRYqq+wa2si1l3fe6GCKp70n28B4oxfP 9mIPwwHU9Cax2iU51NtG/bpgfTgFvzEPkLrAyXEUGtScc5qDjAzeGOTJAXz37J1Wn4M9 kAjO7vmzSL4k/dUVQthLUB3BFHo/xR2CrkPqWCkhUJKDBHr8MR53hw9xhqkrohbddfkB E4KSeCnKUOqCbcKKapVv+/YORzcf8wzR3QN+sLaQUT5cipkkiiNkWcopzSTbhZjNtR3N nmyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790700036; x=1791304836; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=GUvdc5pSabY72yhnIxUmFj2RHWlQFpUyB4LPoq4EGO4=; b=21YadMGhm01ZpU80nDw3vhX0b0wfe+V3QLPt+S+2wALXSPPAZOTNR7nsbKdCbAx34W pm3M5Q5qzpyCwp39BcSqNSLHNg0AmOPNNj4FGXsiKzbj0lke30B6mecesXbWzM+rS234 3j/tdMa+lHYcvvOQD6gctRfFwSpsdakPspQC8PEDVWoMI2VK6z92BMLAUjSoGvY4t7Fd 7gUSm6nrRl/V2wf3uWWQQLEvAV9GlYZeCNefBqE74UCO7wny6TjYE8t/dkPbDi5/zfSY 1y0hVd3cn6gquxcpR0tJ+ScFKMpQbpMh53AiQI/D5hFdsCwsuMzKxgmIdYQ9aZkrXEfA 5dKw== X-Gm-Message-State: AFq9FYIStcSwwiFX2AHsFETyeTkGVO2u96nrjm4hB7cEHYFYxHfV3bOc xTbWb6T77T+55XuGTEI4ctwvdFseGkxj6AX+rGS2VCKx5SEzhuRmLRmc X-Gm-Gg: AYBFou3/y18OhPXweNvNmiJUOLbZkJXdnaZGveOf12n3pVyseAsXjyIZhe9BPaapbka /PfZPosUIOJL6Oj6T4+eWmbOFhER6unS3On0DlKBXqsSDOwBqE1YHMmwSah/wTk/8m5gWEll7hz cZ3457TUJOr4fvVEejRq2XlvHceQAOZrbS1e3NbfW5F/bM2h+5Bv6X3WWDpp35fduTp/xVgNROx CCftxEmq1Y8YmAcFzVARR4T4LkLrl9J3+yfS0p/sQ0eCiZ5CYNLGSsLJr5ywLC/ykTJG3k0l6UW K5yrAGGgGI96Yins3PWST4GPg3+qCLHgUmy5krJCpRsT/EV0DMBetslnO9J/hJFN2JrXIfjuE9f 978w+qB0JvWmpJm4H7c29rVm9X6RLchIKJoVCN24LZugovyU1Qi7RTIQHuILrPSYQldArsk/gw1 5AzLCV+xIw1boK1M4DfNR7cSfGrn4sJ9gjcjPXjZHEUpDE3ycJol9PtZAyOrFed54+ifDGjRURg qAf9F8kOXJavsLu6ohgDU2AmP/4yBMgQ6gKmw== X-Received: by 2002:a05:6000:29d8:b0:488:764a:c09c with SMTP id ffacd0b85a97d-488764ac355mr17912758f8f.27.1790700036592; Tue, 29 Sep 2026 09:40:36 -0700 (PDT) From: Filip Hejsek Date: Tue, 29 Sep 2026 18:38:34 +0200 Subject: [PATCH v8 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: <20260929-console-resize-v8-6-2ff9183f8750@gmail.com> References: <20260929-console-resize-v8-0-2ff9183f8750@gmail.com> In-Reply-To: <20260929-console-resize-v8-0-2ff9183f8750@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 , Dominique Martinet , =?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=1790700030; l=2540; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=/0oOnfdCRy+yf2x3epn+eJzVEaL2oF++Lo4YaOLKmXg=; b=98PG3WiMRN08z3hSZGw+uZVpqyFsXy8/h394+i6NsjiVFpu6+ZMgqaEXqgMnLUItqdlGxmYB7 Wvy95StcB1PAy8YnTDtqPqOk+578F83lQFDhcJFc3+4Ml7YBtNzo27h 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:30::f; envelope-from=filip.hejsek@gmail.com; helo=mail-wr2-x0f.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: 1790700138615158500 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.55.0 From nobody Wed Sep 30 15:28:47 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=1790700086; cv=none; d=zohomail.com; s=zohoarc; b=Uw6OTjkrLisU6z7+G2o2PAgiRzZUBOYvImZqD5xx84qhB0eS/NOw4TsjmLP3jNhhDZWW/k24jkZU0KL+CbsuAdmVxlX9NWdX8C4Tzrwix+BZSJASu7yPxjQxYiSTL2/zdivraeqRYUc33tFkPUZ3WhLdE4cLwp6oxVXbi9dp9ok= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790700086; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=NmesPj5lqe1vOZQeIah2oHq6vnwIyh0er//hx3RTff8=; b=RToIq/nKUiJg02GbDFV/Ctv7ovSISgT/qdIAFDbGzdTHMEKT0do1bLOWxRNotVjuFDHBITjYvhVnvCIKK+j04dKpcsohQkYF5SwPS9Rp9EEgnt0ZuaqWY1pAwpliK5jQk9CVuWP07BGqWs3Rqu9wVOo0TM8Vr+K2aytmuW47Hak= 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 1790700086695667.4312772216782; Tue, 29 Sep 2026 09:41:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xBasl-000590-LK; Tue, 29 Sep 2026 12:40: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 1xBasj-00057l-6c for qemu-devel@nongnu.org; Tue, 29 Sep 2026 12:40:41 -0400 Received: from mail-wm2-x10.google.com ([2a00:1450:4864:31::10]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xBasg-0006My-Uj for qemu-devel@nongnu.org; Tue, 29 Sep 2026 12:40:40 -0400 Received: by mail-wm2-x10.google.com with SMTP id 5b1f17b1804b1-49ffbd83a92so25951825e9.0 for ; Tue, 29 Sep 2026 09:40:38 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4a00cfec703sm84798375e9.6.2026.09.29.09.40.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Sep 2026 09:40:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1790700037; x=1791304837; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=NmesPj5lqe1vOZQeIah2oHq6vnwIyh0er//hx3RTff8=; b=W3GwcTro20t4P73oYEXitJS2ChAUY160UfXWZB8HW4ffbFSIPAUzj60yeKfn2AZeBU InQPX0vw+TEG+zFPNlNHqS+KBdRJArfWHPCeHmyBTTx+lIVeDthtyf0/nmpQ4rZ6Jvz6 li5XcE6tSBju3kaEl6mdvj4++rZV/Io1aXvfTCbk/FxIY8KXO5d9e1SItrNHBcS2CBSj 4HgTIDnKKME/42Sv8Lz4zlmw3Qsj7qpjWRjSxGoIn4N6iZP84fcsgYAYzBdzG8/Q+rZW lxzCm5hpt180XHHx4WvW0q23OrpDachSDbJNzQStE6IERey0/DxKsM2Z4COXvXIEEu7D pQYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790700037; x=1791304837; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=NmesPj5lqe1vOZQeIah2oHq6vnwIyh0er//hx3RTff8=; b=fDcMmc4UesjscNzogFdwRamulW76Y28SlFYAfdMZKpPWTMvVM1SKrwdqZcMtjZh4mm S0hm5v1k6d6L3gNuv9BwIvNQnxPigWc4U07dT0UF+UMMQlFX6j0LtlqnxyXhxvE69ZrE u7tykw3un8RETB4wH9oSApit8cXf9sf5VR4DT84/+0BNsS/ijXzng3Ywd3yIEv7ud1uO m5s8JpXf+Nt7/AjIZlkzHUEzefOzEAMVliKzcQSH7V0YOOUrtc7I+qDHDUtRC502wbc8 74A67bQPvzC3CiyalaQy3Mvrlj5APpTfi6f+MMAo3dAfD3ArSprVSgN9BqfeAFL/+zz9 DrNQ== X-Gm-Message-State: AFuF++lCVVh2csAtAnYDdt79GEQA5yS9JJHpIHKnEd2YEf2OA4kl9YbW cO7oIwim47eYfJYILFHWyW3z5/KU+S+O911sPLIvXL2MGtlhlKHyaGeP X-Gm-Gg: AYBFou3WziSCqHIwBkpB6RtNaSvdZknN6bZ3r1AC94zVwKRT+zEZ/BgyfA6z3yXuHcH DqRwIuDnScmDNs0ZoJlUfiViR+CO48Cr6QFwT42Ii8Shulq1HAsILk6RemQm2Oc8K4dLGifk1Kb ApTqZ/jrEjIfWGLRk28f/C7IdB3iriQmQaBVb9dx3vZf1KJqwMyULF4zNQKCWqktP1oqrC3yV36 ZGl74WtsHm4pXjVPcS7uw9egKoiLzv9svOZ8t7Uvw8KKLH3L6lmGGPnoezMtZ02C1lbRCRWQgti haLIWxKPxd4rRED8TkfK34gJmrK7JOzYp/lEpp2F9IurOyI3anx7AANhv5lXeZhuATUdC3maQBi 5VwJ8si+KXYRiaR212XnT7Rmxd7qSzoF8eGRDUB9VJxX0Z3Us1H4ee88svhjOppMGfipkL1C2a0 eKXP+TTn8ap3z7zRplriGE5XSn66eTmXSV0K4MioolnXQCt2lO3PaVAkqdAvZyj9tQWx8APWokq eikqWd5ifHdwqDBxDMFBKuCb8a1rfBSBSbyuQ== X-Received: by 2002:a05:600c:198f:b0:49f:bd3c:bc23 with SMTP id 5b1f17b1804b1-49fe6707f90mr303885325e9.30.1790700037368; Tue, 29 Sep 2026 09:40:37 -0700 (PDT) From: Filip Hejsek Date: Tue, 29 Sep 2026 18:38:35 +0200 Subject: [PATCH v8 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: <20260929-console-resize-v8-7-2ff9183f8750@gmail.com> References: <20260929-console-resize-v8-0-2ff9183f8750@gmail.com> In-Reply-To: <20260929-console-resize-v8-0-2ff9183f8750@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 , Dominique Martinet , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1790700030; l=1838; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=AlK9dpw0pK3QXBcL0KO8rXDaSPzAjmGSoh0r1UYfc3w=; b=+G2UFULzvCdVHS8J5wf48uFs/99rUR3SRh1CMeCX6h1hGc4FT+o8UsAfp8YYDaJxkaUdXBCRr uQh61VfYyv9CRbEnesNTk9Os5m7iSy/Hqp6z23lkZhkNOZau0kVZu78 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:31::10; envelope-from=filip.hejsek@gmail.com; helo=mail-wm2-x10.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: 1790700088327158500 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 0deba3bffb..2132ae9a6b 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.55.0 From nobody Wed Sep 30 15:28:47 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=1790700089; cv=none; d=zohomail.com; s=zohoarc; b=PW0U3VtAeMlxmPCkpUI5bdT8rFN6MgU3rpIywz63RQG1jVZj5qUGdSzZ3lRBcKFt+I+lwh9dHJ8wzVy7WiIV5Z8EjBMZalIXFtBa7ODuuEgm3GdpYpR5hxO/jANAiFX3Y8Pb8H3sDNOYh16osMybMcTpoOg3Awo+rztbGBdD4U8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790700089; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=99vdgR8t502cGUytZGyz+LgFykzw94POK58wRnB9i0U=; b=h//EHHzZU8xe2+EL9+19I0ziDYKHraMM7c+wpfz2qb9xv8Aotes+kASXxe5tedK8fiWlVsHnO7a4Xq2rGismtIxtZ07e+yavbt0O9FHjo/Bnaqly6SRtKD1gBqSYe3ekn8zgcnVr0EcxXmQO5SN9365+mcPmMNxJo8maC1lrMuo= 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 1790700089358526.9050279891383; Tue, 29 Sep 2026 09:41:29 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xBasr-0005G2-4K; Tue, 29 Sep 2026 12:40:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1xBask-00058I-G4 for qemu-devel@nongnu.org; Tue, 29 Sep 2026 12:40:42 -0400 Received: from mail-wr2-x10.google.com ([2a00:1450:4864:30::10]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xBasi-0006NH-PP for qemu-devel@nongnu.org; Tue, 29 Sep 2026 12:40:42 -0400 Received: by mail-wr2-x10.google.com with SMTP id ffacd0b85a97d-4843c3ea1f6so2427428f8f.0 for ; Tue, 29 Sep 2026 09:40:39 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48af5058c52sm5810519f8f.19.2026.09.29.09.40.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Sep 2026 09:40:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1790700038; x=1791304838; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=99vdgR8t502cGUytZGyz+LgFykzw94POK58wRnB9i0U=; b=c6vlNiLIu4qOIxWUSjG6ri/4NPmI9A3QzvUySsflLp4Z+xuUhvByemG6jnWvcIH6q3 unyCtD952FnzQLJ7oXgWOSTaryLMS0/0UwlmnJdmrd/mdfIMyhrZXdi+XCXuXoEav53n Ne+QjCay0WVJv8zsaCFbgTQ482K/dDqYMRaXepTivopb3ECiTyJYVX9qa3HLbaUXQ71v fp5h/YaZSgFo3K13ICr6Z3oFK8vKTYkGAoMC4SI68VLy1t1TaorsMPmwhEY1d5/yBVoS mouT6lJvnRSV+CGEUEKLF568SxsT0gdx4SKxBdG/oojG8kkJ0Zk5jusTGkuWxZ/vy+O7 AJhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790700038; x=1791304838; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=99vdgR8t502cGUytZGyz+LgFykzw94POK58wRnB9i0U=; b=HIRjnJa2Jx5cJHh6Qe/vzxTwGkWBtojqKVUwoOeAcE0uD3cyvxubJJ32dcs4YEP6Uk x9MHdJOpldSKiOiBgbKl050rrQqYm1M6q+Vg01/iqtEHNxz8mNQ0jC5bdGJ80Hce9i7n OKfvZs5GtZAiRZ4fFHNgXUqpFemML+E25pMtRw/Q77oa3O7Gpe3vDXytu9XBO7H6oSbh konSggen0tVkogXc4rKVSbK10f1vzRjLRH9GY+gxHEK2qdsEVFzgZZPX8FKPqm4ZBhYc ZssI0xL4iUtvBbS8pCgPAlpQds7wrS0yMMb6ycHlFOUpmioqueHImBBjHQXQ1ao8Hs36 pMjg== X-Gm-Message-State: AFq9FYJavyB6jArhf7CIyOnDKqcfbgS4DXLLFFb6ZRtyH9ZwgeVyg6l4 /UDm/kHgipVrWmV+NHtcaFGaEFqO9hnvpvXUdyWeG4mns7A9tOtCfUqp X-Gm-Gg: AYBFou29CXl5sJ+jeUfPhviXlXQwYnFqpqZ3i32Ft1PbNyPM0H5fklG53haG5K5mFJS McKBO+WXJk7SyoGLjJdgE9TttSNA4zl2HsVWu8MkAifPYLifeKd33SngwoodgHXg3eJEauZQmem 3Ur1Zm7CftizEoZVEPApQ2VPoej0zkSH0uiVzEPG8xN1TZWslSOmvaEgnyicSBjto+EeMwanXbo HsnvpOr+AQ57TQouxMMN4fRac99nzdNwCYUWYRvsYU1LLfBoF3OSZHI1DxazTFQTrd81TCXJs2B vg6BtlnIgebmOMH542F4S/W26ZHXPC8ge82NdFyVIa+RYuXG9/4JyqwPO8B/OpmThHuFMRgAUDW PS2Rd5YAtbJ0XYHa3RubxVIgbdSa49qap4HOpj/fhBcACglcKnfk9OLXtObrzc/VxqGCalNjvEd ZmQNgalmtg0KW/321HDr6U/3uWoDJHR3xhHqnhpkMlcZeZjYuCi2ZqOW+16zEwdp7tjNmePZrzC BIjExoFIsQETIq5EBxz3CTEgBMUzmxtze62PA== X-Received: by 2002:a5d:5d0c:0:b0:487:1f7:f506 with SMTP id ffacd0b85a97d-488835f2adamr25674391f8f.11.1790700038226; Tue, 29 Sep 2026 09:40:38 -0700 (PDT) From: Filip Hejsek Date: Tue, 29 Sep 2026 18:38:36 +0200 Subject: [PATCH v8 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: <20260929-console-resize-v8-8-2ff9183f8750@gmail.com> References: <20260929-console-resize-v8-0-2ff9183f8750@gmail.com> In-Reply-To: <20260929-console-resize-v8-0-2ff9183f8750@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 , Dominique Martinet , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1790700030; l=1675; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=xn7FKDtlXE+h+sBLQ5L3OZH6ep6T4dMGJSai7BGx4t0=; b=0RUPC2TLmqvUxvcP1vgWIEde640j5XUvS6d3XHunkBa2r6Za3dvNQNoSrFaIWAsi3qnOdJgH6 o8oY6wXuev7BSiWJo1ijDnmVaLYMPUXjv1el8RziVbeBzwgDIrVxUAX 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:30::10; envelope-from=filip.hejsek@gmail.com; helo=mail-wr2-x10.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: 1790700090403158500 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 53d9e9d39b..99cc8f09c8 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); qemu_console_notify(QEMU_CONSOLE_ADDED, QEMU_CONSOLE(s)); return true; --=20 2.55.0 From nobody Wed Sep 30 15:28:47 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=1790700104; cv=none; d=zohomail.com; s=zohoarc; b=lTIdWekMFBA3lqossTuf5FMXohSP0dahdK7Qn/dsNpLC3YZsBosLktdGbtxeTp1jKzzmeRS3ka+XdbkkpRk8klIemxmHf6fzmqLDzyxiFd6bJq2OM9h89LlSQzcKD8GfZwmgMqhaW+UrhRDsPz9lvAELzqkcQBczfpOAJlc/hcE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790700104; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=E9/8dlsF1f+rdUiyoMPrpivTOlrgDaaNH4vvswRj8HE=; b=DkYRzGJMB1WbPkl7aZdo5ACSd7wnaM3YvqQsa4ACc8O8QH7ElHA+viNT4gXpAmS86ar+owH02Rma2qO9j+9+/Nq4oJkUq9z7gGuS65/0x+n3ZkJwGMsCjvsdufwM2YlZgVw2DWAfS7JrT2nK0wfeL8aS2tTskzXDlQ0QmtVHu0c= 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 1790700104514924.9585123777659; Tue, 29 Sep 2026 09:41:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xBasr-0005GZ-IY; Tue, 29 Sep 2026 12:40:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1xBasm-00059J-1W for qemu-devel@nongnu.org; Tue, 29 Sep 2026 12:40:44 -0400 Received: from mail-wm2-x11.google.com ([2a00:1450:4864:31::11]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xBasi-0006NZ-Pl for qemu-devel@nongnu.org; Tue, 29 Sep 2026 12:40:43 -0400 Received: by mail-wm2-x11.google.com with SMTP id 5b1f17b1804b1-4a00d8bec5aso7213405e9.2 for ; Tue, 29 Sep 2026 09:40:40 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4a01489e092sm774815e9.0.2026.09.29.09.40.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Sep 2026 09:40:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1790700039; x=1791304839; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=E9/8dlsF1f+rdUiyoMPrpivTOlrgDaaNH4vvswRj8HE=; b=qRLSfVvBLQrSqslBF7eUXAhnObt9nKVQqfhM7BI/r3o0TLxBCagzDn2ki8XYY5C7fX mSU8ZHUXAZpIfxjptGVBhwBHwObK6pKo/ZIUTMXVqBc+Dbbc88Z33g47cof/TQd06X6q 3v2I6UieGNKPP+7rG4nBSod0OMwyr/inWn411P6sDNHIIVgRYIpQ5+smmQdE7X2yPT5L W4En0t36Z8yj0+/S/AR0mJRgM1Y1aEDM3xp6wF4WBY3sdgUY+K0j6s7nc0byBJc0YgTn 5yYa0aW0oYXN0eGw0y6Fv1zw1xbbzJ5hIzmGowgMFmFYL0IvTKus1Q9ZQYsU12b9app1 EzSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790700039; x=1791304839; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=E9/8dlsF1f+rdUiyoMPrpivTOlrgDaaNH4vvswRj8HE=; b=v/NLIPyE+1eWQ0x0CzG4DlxtyOWI6DBk8XnVr7BHTjGfZ8DxATiWu2AwTtdJs/R4fO RdYmWw9dhn0Qr5lhUGMRKEgv7EFldIKbL7VCJ3uGseoNCFybDsoNhJOlI/iYtyCIaZLl qQgaD3mtKa2eD/Ns8z/MwU0VSksEVfodXgh8QyoYgZCbRO7grs/PGCwe1MAP4aqlEHSb QPH/Tt2fi5LGa3cC/J3n+/2ytztvcB4DHPI3EulHLadnzpW2ULFLGUFZdqGo1eGiFKl8 vJc8i3ySS0KsyMTDGSHhZuo0XJhb+eARm7GeeiMZlm/9oufwGIy08HVSzBeffUpkLSGS tGkg== X-Gm-Message-State: AFuF++mRz51p1vVKKak1skXOTV6zdWBClNn0WJzWhYEFAtxyCMmahy94 4QZWd5nDA+xpssD6z/m747eq3gMxFBJkuYGGL15rQs8cmYWfI7GoPM8oxB4nDVIk X-Gm-Gg: AYBFou1gpbsvdwilFwnlhhVCzoDpRLZp1cRsWzUAu9bpLcL/Ptu1+ue9JeuUufllS8T zHayXRd2sHCsy6FCukyW4zzuM2FrYpuTUGQ8rky6lRf0fWkwWOuRGZkFSWhLnZuxNuffzAt5JJ6 Z5JAu63rJAqjoOP60C63wu9wYrq4K2wOmrCIx+SCxibKHyIYYs8UdcrUziJ4xO65Oau2pUFIUFL BAIG63VJINrkWkgdkvNHCB0nYiB0GoATHY3jmdWNCRJw+NtsOVdWvV4cCuujo/bmTfJZhrrBtxY VhkNQEZOafMav/yzVeI7FYyInaShdZnxwsXDPVtvqp7dy1hnc+xW8vCU44rtt1uwm53VKaj6jED 3kCcCgoGcu/OgGnKwYme/1sn5CZBQa0GBYu1WZv9EU5QiKdMYukitHmTRmcbFK16KQwMnUqaeu9 CK/jlf30C4Jt/zKezAmUC4poAHRfKvgEjAxBJTzUNVibDGntVsZ9/H4Kx1vF5LOaB7PpotzGpQd AXmjxG70fIrnhNQFsgBmiTqU/4= X-Received: by 2002:a05:600c:4ec8:b0:49f:dd10:3c71 with SMTP id 5b1f17b1804b1-49fe66c61c4mr303969495e9.11.1790700039107; Tue, 29 Sep 2026 09:40:39 -0700 (PDT) From: Filip Hejsek Date: Tue, 29 Sep 2026 18:38:37 +0200 Subject: [PATCH v8 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: <20260929-console-resize-v8-9-2ff9183f8750@gmail.com> References: <20260929-console-resize-v8-0-2ff9183f8750@gmail.com> In-Reply-To: <20260929-console-resize-v8-0-2ff9183f8750@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 , Dominique Martinet , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1790700030; l=2096; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=tiBprBnqlulDBhTbq5UaQmZbu0dPfdJHhii8brLJ7Gc=; b=wj14ta37N58srsrvrbE9Y5bsWe7+Zgkzhpk0WWqHpMUVKdUJm0euDn1KmJznTsEp54zG6uLf0 uGQlau3i8WgDNb3I8r4SQ2RU3Jiwx2FYJb3pho9O9X5nfZxFgBRvVSu 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:31::11; envelope-from=filip.hejsek@gmail.com; helo=mail-wm2-x11.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: 1790700106502158500 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 ed7ffc06b1..8d312d6a4b 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -2196,6 +2196,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 void gd_vc_vte_init(GtkDisplayState *s, VirtualConsole *vc, Chardev *chr, int idx) { @@ -2258,6 +2280,12 @@ static void gd_vc_vte_init(GtkDisplayState *s, Virtu= alConsole *vc, gtk_label_new(vc->label)); =20 qemu_chr_be_event(vc->vte.chr, CHR_EVENT_OPENED); + + 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); } =20 static void gd_vcs_init(GtkDisplayState *s) --=20 2.55.0 From nobody Wed Sep 30 15:28:47 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=1790700156; cv=none; d=zohomail.com; s=zohoarc; b=C+CHhiITSrdI2RnZsQWGc5ug0WawZhVLfzfR4l0m56mv4tiwPyG98zdFjtFvsxh65VeRmHvz01bgI2fzo2LtvfSBA+ZIJBO5EUlepRulQgHylDjJjgidawy8nwihm4ykd3GzQz1I8eBmgrUMvnip3SG1LdFjgWKQWROFr691pqY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790700156; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=BRWZ8HCyzchwEj+CIpCDAnn0kEs7Hf+pcna4vvLZ+Kw=; b=Ar3rgOBCNUWHdC6I1twJ4aeRNjLOvhrW/M5gvl1xfDuVYPrJPd0oLzxf2YbLgOC/40EylhfnCPe0WMa/NebfGO8w3WgtGBwCoTX2GUq9jr99uAxX3VeHfgXbaBPTZ+7n/RhhaixZBHeB0aqmCPQ/Y4o/7QjzRdh5DeXZ6xJ85Fo= 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 1790700156618866.7557781299678; Tue, 29 Sep 2026 09:42:36 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xBasn-0005Ap-Rp; Tue, 29 Sep 2026 12:40:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1xBasm-00059W-55 for qemu-devel@nongnu.org; Tue, 29 Sep 2026 12:40:44 -0400 Received: from mail-wm2-x10.google.com ([2a00:1450:4864:31::10]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xBasj-0006Ni-Dn for qemu-devel@nongnu.org; Tue, 29 Sep 2026 12:40:43 -0400 Received: by mail-wm2-x10.google.com with SMTP id 5b1f17b1804b1-49b912d391aso33648745e9.2 for ; Tue, 29 Sep 2026 09:40:41 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4a00cf9b72fsm120638245e9.9.2026.09.29.09.40.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Sep 2026 09:40:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1790700040; x=1791304840; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=BRWZ8HCyzchwEj+CIpCDAnn0kEs7Hf+pcna4vvLZ+Kw=; b=iI5AJ8q+dz5XIUup0Utu4B6sWy3ZuOdpf91epHF8RONiqX71wq6QoEpOlGFBIyD62n Mi6NjRtoCbaenlsFK5/inZ6GNYLoIYFTkdJ/meucbgZHTeDZ4D8tVqjh8SMO94czRJ0t FceWuenE8wz1a32jossUZLXCZiCc5u2g2/FLV25AbCPyoF3htTthHQVqz2IXPqhth+Nq 5SpWUBZIDb9ezWYrGG5SVtXrEbWRS4MDHlwx4qG5E33KZZyFEpE17sFBLAyc3jCJxDpv QN2tTbUhHNKsqO2QJx6LP+lTbsM/ay3wxacB/9IvVtYsVIHMPioANEqMIhzhbc9z7Oq7 EaYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790700040; x=1791304840; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=BRWZ8HCyzchwEj+CIpCDAnn0kEs7Hf+pcna4vvLZ+Kw=; b=H7rCd8urpXCeT/WDWlsUq38o4KATaqXTlbuY3zBvJvZyhqz6JEFlJOUOURExrwFs/T 2sD5v2dOvc94T73iEgEhTOWWYdxOXwvMaIqLmeG3w1cwBXu4umTVQojtK2Ra9VPmbX2Q 61elzGMSMo5H/Sf1ussdMGeSppdRI8ndEUSI3v2RGG5+BIlHSRpc9GxcpbCIByJvtN1B gMDO6tdOfXEwRPgJBdRsBZ9KR3wx4LoUakQyN7SJu+F6pArWhFJFemP5nXEXW/oX/4U4 oKAOjbvtKyiE/H+h7wn0H+hCk6f03ujY0MNPvXCGxuyWo1C/ROuD5K7wVODaOU30FIQY CT6g== X-Gm-Message-State: AFuF++llT+OVyaDCZt4R4rQOp87EcgqDaSJJbS9OXoNtgPYtB2EwxFsy zb5M9MVe/ZqZrwOYu8WUk50VFl8ZaGgYltdDwECAy2IjFrzA2fF+0rkM X-Gm-Gg: AYBFou00pK8Y4ZLAHf1MboQx2hEJq6NJCHH23jrzQEumy1lXcaiMOrbFACFTojDo3oE Qunpt8JMJu1TX1wxdYNACsywdUkRar1XEjshwEQyu5a8U0C7Nkc3CtAxC2Wv7uQn6wqO6Zx2Omw a/VeaB2frwg54pd6GTpYRasp8myFXCgbEPPG9F8dSGMJsom9rVoPK1qNezNqYboZuruKMtQN8Ds Qso0uh2n3pGau6oNUuzodOxDGkR2aAl9T6jU1kVVXL6+BUERSRZUFau7aJUmboywWzrxyeI58zB G4oQNpflnYBgjXwQJtbib6LWG091wNCiC1Wm9CiS/swFQn+WAFtVj8xvcsn50S6hrWMXNDrt5vq dPJkm7AlpjuWumYVyPV5J+1VJv5d50FHsTQFc8MKrimh5LC+pnpxRpVCYqruBRtTsSO6s3cJdxJ xU3MGUl2GUjmfqo7ggj8eNyHajAUMKjkmLiWmwc+MVI4kY2YKx31IwbYsFqRWcHesKkoeQIj1RT pJrgtw2RWBrzym5siJA6rNVfrY= X-Received: by 2002:a05:600c:1c25:b0:4a0:561:d0fa with SMTP id 5b1f17b1804b1-4a00561d337mr114395965e9.18.1790700039858; Tue, 29 Sep 2026 09:40:39 -0700 (PDT) From: Filip Hejsek Date: Tue, 29 Sep 2026 18:38:38 +0200 Subject: [PATCH v8 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: <20260929-console-resize-v8-10-2ff9183f8750@gmail.com> References: <20260929-console-resize-v8-0-2ff9183f8750@gmail.com> In-Reply-To: <20260929-console-resize-v8-0-2ff9183f8750@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 , Dominique Martinet , =?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=1790700030; l=2599; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=n+2RAmgYfsWC58gOfmXRctq/+bs33bLCHtrrMkZ235M=; b=Ra8Vyjgvh9aYqSWCE5/YxfWv8W126ez2XWVsuEfE6Z3UTDimgPzsoPel51nHwRGBlVBxReJG/ cOph8xqXoW+AeBTY0rM1JAOJHvSJCIErVfyhZEfhowwwFZ3jIRuhsjz 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:31::10; envelope-from=filip.hejsek@gmail.com; helo=mail-wm2-x10.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: 1790700158842158500 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 8c8386e5b5..fe513ae962 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -1347,6 +1347,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 abaccefa97..2037836172 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.2 +# +# .. 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.55.0 From nobody Wed Sep 30 15:28:47 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=1790700147; cv=none; d=zohomail.com; s=zohoarc; b=e6PMNN4cdebxAPpmJWJxUL9JLYO6gwL86+BN2+9Q89S9wQDl3EygFxg6HRkYh+pJmAPBm6dHRb3vslO9d5Xc7gQg9NN3rhNIC2ju0tVJmxEk7F6oEM/2RLo0nnfcRRL7Q+ERbKCv2b6dCf9ML8KWrorsEoYXPttWbIvT7KHsxOM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790700147; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=l0PYHA6RrE88tZ77C1oINvZS756ml3SDfHa/y09NmKo=; b=kYt8vCQMwNsyOgXz+NcwsGPA380fq4wucTCaj24CRlKFhmbpYCbi09fAMuMWe5XAx4S0eb281SD3D1BEeqK26RdQtI8xSJ2m00Kb+KhWkR1P9+Ig9jQd+cOf/GK5XYki1rech8l71nJGkTC8R75l5lPAeWfbCcPfB1sqZ5J5Xww= 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 1790700147574110.28375243394498; Tue, 29 Sep 2026 09:42:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xBasn-0005Ad-Nt; Tue, 29 Sep 2026 12:40:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1xBasm-00059u-FT for qemu-devel@nongnu.org; Tue, 29 Sep 2026 12:40:44 -0400 Received: from mail-wm2-x11.google.com ([2a00:1450:4864:31::11]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xBask-0006Nx-33 for qemu-devel@nongnu.org; Tue, 29 Sep 2026 12:40:44 -0400 Received: by mail-wm2-x11.google.com with SMTP id 5b1f17b1804b1-49ffe817151so17990165e9.0 for ; Tue, 29 Sep 2026 09:40:41 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4a014951f24sm30715e9.1.2026.09.29.09.40.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Sep 2026 09:40:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1790700041; x=1791304841; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=l0PYHA6RrE88tZ77C1oINvZS756ml3SDfHa/y09NmKo=; b=L1s3NeGB65VM0BkDRe4NmWTuodgfoDkonjpscO6V2Ph9/Z9D50p8khrGaNTW47zpQP WHS7IkIg1D0jcn4Pcmw0GBLazDJNzNFgv36ycSLajkOBIpdLfDUMdcjx+XGsdzbqpfsf 5siXWQlUXWV2nRM+VaOYVv1A/AEvwrUyCFBh01ElhujgFHxKTzN44gVkwz61YJ4NZ1b8 vjnEgbJBSfPr09X9Ryjzl0W/NcGKpDTv9Nh73nqVM8MvdHqIZ/PvtYchHoJ/JtlrgPXO GwhAEQ9inBT1hB505aAPt6gVXIv8GalK3wffxc/SedE19KWRpnkYHZ654KtzHxSJxzGB X+LQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790700041; x=1791304841; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=l0PYHA6RrE88tZ77C1oINvZS756ml3SDfHa/y09NmKo=; b=X93Qswu2gIxwmyx9bHYMvw1n43HPeWNVVlDprqde0bObDwKBos/gr1sM15NXoMFwrI Y5DdBarUSOLtSRCtnO9kPAPSa6siFNyX0Ox3qv44ecw6uDAbEdvwdW2ODgSXJTS1Xekl nhebM6Vvk81onr+udwLv1o+bTGdl53aqpHcc+LYd2mINSUYXo9Ts2RzsKmpJctWGO34M erfxJu0+d7EqM5mSwZ3Xo0jDTnMpHx3becvWcHJNohe/xz5bf9ox8dqdtbJFjITx/a/J xGoFcs7MsDZ7qRRxFG14p9P9SLDIZ0TJyjwSqNyrZGaShCbpJ0DyHxphX1fX6nKm76q7 SZxw== X-Gm-Message-State: AFuF++k8Y13JDaEEuP5heXepP64cAF/qXvEekbCHPgWv9gyNbz8dzO7t sDamtZqgfp5we8sv9SNAC5i6yc8Mmrzrg3cDHrBz/NHh3ZSoPzPdafml X-Gm-Gg: AYBFou09IkmD7W+6Kd+q+XUNBF5u3zcPNmY73Lv83EaG34ATfG1c+vx37LTZlJioiyx 9cqP7kh59usyfAYSicPKn3VWPWYcIPb1dVN2V+oUQ47cIiBdHVgtBGow8egDfxplLH7OH0U+wI6 z0+JOYZFBJSiCq+8WseeDwqRXssT7JrjDF1oqsPh5DU23as9kBDuYZnWH81zQ1kBRSb+BKd0MsN gmmGpT4tE9Uh5TfauNCqC/EpI1N5SisG+xrzEktY9eEHqeoCJ/4Z2oX9IBIIshuuDOqz5jwo1Rz m3pq4mbRX9J1lfC660D+OAl8xJpfWNhuiM1x66h3ZrXhaQLmOcxGfix2ock/xDzMGvJzIuRPaGj Be2Mc1Qd6DZFldgVXSh5vpD46VyM2GpoZI3IsuxcPU1sv+Xi43la2iB3vJR5aTovMaIBvSZXtKt IIE5FMgtXqMdoe8qw52c1FToM1ecHu6KuGmNn0iCZeHvz+Xzo0SaTosAYofkXUYJt61FXULkpV/ LNCuo8WcmzRS9zudlBJhaIq7AA= X-Received: by 2002:a05:600d:8653:10b0:49f:e701:51c8 with SMTP id 5b1f17b1804b1-49fe70151ebmr217698515e9.9.1790700040640; Tue, 29 Sep 2026 09:40:40 -0700 (PDT) From: Filip Hejsek Date: Tue, 29 Sep 2026 18:38:39 +0200 Subject: [PATCH v8 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: <20260929-console-resize-v8-11-2ff9183f8750@gmail.com> References: <20260929-console-resize-v8-0-2ff9183f8750@gmail.com> In-Reply-To: <20260929-console-resize-v8-0-2ff9183f8750@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 , Dominique Martinet , =?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=1790700030; l=7998; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=W6Ngl+5uqHdlNcDJIkFBYbNYDzHwfMLxTQr45thgrTw=; b=hsZK1cPCRG+4bTKUVQWb/BuhM8dpqeaENJhB0kNC76Wh3v/wPsf4szj+jFK+x+mmPQPFqH6Kw gt2o/BZfYF7CpjxDfs99NSCKtifteecqNXtLhlxHDz16J090+TVrNce 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:31::11; envelope-from=filip.hejsek@gmail.com; helo=mail-wm2-x11.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: 1790700148894158501 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 c36e18a4cf..882765ac88 100644 --- a/hw/char/virtio-serial-bus.c +++ b/hw/char/virtio-serial-bus.c @@ -261,6 +261,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 =3D {}; + + 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) { @@ -403,6 +465,7 @@ static void handle_control_message(VirtIOSerial *vser, */ if (vsc->is_console) { send_control_event(vser, port->id, VIRTIO_CONSOLE_CONSOLE_PORT= , 1); + send_console_resize(port); } =20 if (port->name) { @@ -538,6 +601,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); @@ -549,11 +613,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); } @@ -716,6 +787,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); } @@ -1142,6 +1217,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.55.0 From nobody Wed Sep 30 15:28:47 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=1790700081; cv=none; d=zohomail.com; s=zohoarc; b=dOtyN7rhwyiLS/6oCanKR+1ifxcEOzI2XsYYFaAfCb9/rJIgATpRxerGW8JOJI89DoYsZx76HrunD9ceGD0MPpKBLhJgYLB7PuhXXROEuAeRggExnAHCTG9x3cVT7MrW1Tlc/x2JKiFFXo0lVjm0ubytUQIe1OU92JzbFX+HBOc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790700081; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=SQg3YvJqlImDT1k6/qUs5J7J77TVOjmkx65W7g5ZEVA=; b=J6llAoLyMfuLiBxdhiBFnHYuJQUctOaSpSkGSNDonOc96bMUaK6w60BCcd3CIytSuf4CyAu/KeBbe8+dAmTyxwJiE7xPXuspoWSD4zRTXZwT1ErhKO3e0a3w5oyRZcl/pBz5eC4TxptdP+qks7wc///PMYmN554EFF2Zp1z7hkM= 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 179070008173463.47993219932812; Tue, 29 Sep 2026 09:41:21 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xBasp-0005BL-Gd; Tue, 29 Sep 2026 12:40:47 -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 1xBasn-0005AQ-2t for qemu-devel@nongnu.org; Tue, 29 Sep 2026 12:40:45 -0400 Received: from mail-wr2-x10.google.com ([2a00:1450:4864:30::10]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xBasl-0006OA-3k for qemu-devel@nongnu.org; Tue, 29 Sep 2026 12:40:44 -0400 Received: by mail-wr2-x10.google.com with SMTP id ffacd0b85a97d-4834977ae75so2671244f8f.3 for ; Tue, 29 Sep 2026 09:40:42 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48af5049419sm4796993f8f.14.2026.09.29.09.40.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Sep 2026 09:40:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1790700041; x=1791304841; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=SQg3YvJqlImDT1k6/qUs5J7J77TVOjmkx65W7g5ZEVA=; b=GPB9kPTndBSdeuWVyBCIEVleJdplnLnxAjIABAev55FqhvLLeAsg9tQnSM3vIToIRQ SbBDHx1aR3avehtEYl2UuX4oR8t64HnagQd/tt39gVvz2D7PmK7ljrx89r3SQ0B5+Zkj 6T7ua9Rh7VF+1gH5GoZvFJ0kyupqX9DqlCRRzqcwt9kaVEx8RiSVG54Wgm3OqAr0nZBN woIPgoCEFzgNignr8sYCEdS75I9T8YPocXIKfUqF00Rty7dJ/WQFhejQwhYfD7JxB40r CNFAwVTmtl5Dx9ffErrYSJhljI4/Dd0E4ESL6SgQQNfVK4sIJg+v2t1t7E2L/oyvL5Ah mjuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790700041; x=1791304841; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=SQg3YvJqlImDT1k6/qUs5J7J77TVOjmkx65W7g5ZEVA=; b=0Nh6y7GD4T9dF3xf2QZUfXMCtK+z0T6fsAOSLwaJuSw8FL0+TqkeaTiw4Nu4TKnHmZ VlTAt8zIS9/Kf2PfIEHi0Xg7Ey9zyYCztAcqPcEPyGWKoL8+naNsTKXfqTkaDtF4uUil MTzADl/2GUcGqYKQSPG9wLl9LM1xtfip+QwOi+yP98jPL3DPj5rwo0IDV6vIAHP2CMTl heEikXxiVGcaIQpAUsQAXN82xmzrNbZp23Z9emMjNOfkEr4N3XGI2Q4wYL7EkAB+jFXK YvrBNDF/nfg4lvLIHM5nahDSsLGotIkTSVcY7LBJnjigDS3OPSLRmO/L5iAOugTvXx9d bwMQ== X-Gm-Message-State: AFq9FYIrtNIgodK79Xb9ZzXL1z9r0llLuGRGCk4ViUsjPALKgHHwYvKt SUm4cCNqSiufNexhIfHXK3cr/72+UA4tkLgd9aNXxHl6X1iky88xvnNU X-Gm-Gg: AYBFou1IYoaqzeKHa2RAUdmcu97HNYco7/S58PtekRYk7FdPglaGcqyRRqIZSGKjKY4 e4jvr2cWvXHyXDpMX+Z8j40zQ+w4DZSbI1dWkgR6US2g7htCOqMHjTeWiIxad6+NpHwdp612u5v b4EKvvUVXePGRgSYUteoC6u/qr3Wfz6KngyJEbWcCsqL4sUjHKdJjYUbo/uEYR7Ho5BFZH+tv3b krmq81bnREe0531/GrA3H/q0DYHeKMiV6uPiENYm9tsqdmQETuQZrpsYnC3/ewK+jqjvtW59r5q 7+E6uLVTqFdJWeatCe2j3mYWrhBYALf2DWT/4an3KaQgtNOgRkF86/SN+G1+4q2Ee4EPxKWdsCV QkCqjQ2yOufUVEmnSOiATYJEoca67x4A3tB80xXnO+jFYkfqQTErFcHPSnhnnSdKU30cLGRTHRu 5oU+a3juchdgZkf5J2ZkpMZWghynsWyOhlzE69Kr4nezZi0mRzyO0Jg0mYGQ4ahmjp1mkYQMMFi MC6yqe92nbSpt2IPqoFHQevUgk= X-Received: by 2002:a05:6000:40e1:b0:487:27f6:a4cd with SMTP id ffacd0b85a97d-488716a5fb3mr31555394f8f.29.1790700041457; Tue, 29 Sep 2026 09:40:41 -0700 (PDT) From: Filip Hejsek Date: Tue, 29 Sep 2026 18:38:40 +0200 Subject: [PATCH v8 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: <20260929-console-resize-v8-12-2ff9183f8750@gmail.com> References: <20260929-console-resize-v8-0-2ff9183f8750@gmail.com> In-Reply-To: <20260929-console-resize-v8-0-2ff9183f8750@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 , Dominique Martinet , =?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=1790700030; l=3302; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=KgvwWaj3G2h6/LuL7FGcs//vRG1zBc7HUKfYqRtFZpc=; b=LhsABfn9CkvkVs0Db0tuEzgrtemTs913J0iV4eJIXo4+Hwl5DsUnewuB6bmYXn+gl6YuOslcP oVQQDpQJhPzAQmp/rNPu1E7O9SgNPEiZqhOvnxJIoGr4M+WdgBja4hW 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:30::10; envelope-from=filip.hejsek@gmail.com; helo=mail-wr2-x10.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: 1790700082490158500 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.55.0