From nobody Sat Feb 7 09:30:02 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=1768794049; cv=none; d=zohomail.com; s=zohoarc; b=aIiVvdckemRHe73I9PcaVPVmzzFnPI7YhkiaMzseaGMl7yl/WUpe+r3HbTXSv0rFBHmtNqqVLNvXaVajA2jUycbnQ6oH5cNMUm2cCYULFj+qPQHkesHrnUb81T2Qh5hW1k91BN2byfl04t558tJlmL9KxaO5EgCTCuEsGBBmtYo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768794049; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=7jK7GUviNL7O7EDOH4E6VZGB3H+hETZcKAa/uy/WwGY=; b=Q6HNL2zVGc1YLGiWzL7UHInECJqOYTFVAy5YpHgJFladQWrCtB85vIQoN+C9dqtpKJLHg4b641S05FG4wgis/oyQj4TAG2ynSGE+AwLKpsRWm4+doRHm/v1zTnmySlSiJoWBPC1WP1WLuc+H5wgqlXFlPda0/4ACoLYT7LTLvxE= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768794049594439.80714197028067; Sun, 18 Jan 2026 19:40:49 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vhfx8-00076C-Bz; Sun, 18 Jan 2026 22:29:18 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vhfwc-00072a-BE for qemu-devel@nongnu.org; Sun, 18 Jan 2026 22:28:47 -0500 Received: from mail-ed1-x52b.google.com ([2a00:1450:4864:20::52b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vhfwW-0004AW-L6 for qemu-devel@nongnu.org; Sun, 18 Jan 2026 22:28:43 -0500 Received: by mail-ed1-x52b.google.com with SMTP id 4fb4d7f45d1cf-64b5ed53d0aso5340178a12.3 for ; Sun, 18 Jan 2026 19:28:39 -0800 (PST) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-654535c49f4sm9012128a12.31.2026.01.18.19.28.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 19:28:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768793318; x=1769398118; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=7jK7GUviNL7O7EDOH4E6VZGB3H+hETZcKAa/uy/WwGY=; b=aQbDY5Jow32rbqA/FDmBPY7b7siFV/qBhPu1Rbhq45U/00SxPHKF1JEbYnLHpLye0n EtVJiekgC6af/gGqrIcofYk2GWXdsC3gcojp9JOmbdqHEptDGk+bFR/wDaZOWL/Pcgbq jT17o3BXHgG18ohsYbAcdHB9Vo5KcWATUaWf51yVZBui+nF0Ygkq70HkzDpb52LNEVZ9 OMhKMTkQnDgtF1MasDDSEuD3iLHPqTTd8TQitXZt1aMB/Si/CIWXOiu1h+NVFQC3asST T+hMIBeAKOj3tuT7f85kZ9OXgFXJJXqI1hMZczLiuq58XBkqKDGaCUuJeUKdwVY9ktnZ I2fQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768793318; x=1769398118; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=7jK7GUviNL7O7EDOH4E6VZGB3H+hETZcKAa/uy/WwGY=; b=ObVvbnFPq84AeNMUDxaSGJezjhsnQAVmioSMapS/dj5ckdzizztEAv1KKpOw0P9kXS 1VTApW8DFuAgGYtt/gZQlMpJqZ4g1h9DxSFcKVB8ilZWfypG4rxeZ8YztCt/fX+K7vYI ot1iQjBur4AEvKp4gS47WmofjAB/fw1UMPXnSuDHipLptXxInHevUaRBG/wXl85X7p2f XYMPtAk5dcxL1z39AI4nr794ZR3FmipRUrpdj/owKoZeYmbtvL6CzKN3f9BP8CFnFGuy QmYZbPzTGtKDDpx+HZHTT7v1ctTVhdQfSpNwiPP2PJgY0OuQNutx+9E11yEQFBT3JkqC JA0A== X-Gm-Message-State: AOJu0YyWX/5fBUNFls8glHdNbAiBFanUTLsZIigzTmC9jBpxxl2sAGaS D9zwzKiaANsMlg40Hw5cf1fuIwVjN12KO3fxzlt2h8XhXJAp33qSXOAf X-Gm-Gg: AY/fxX76K9rqMrj8djaMcdreMnmNSLpiOlGrIyce31wVaSiyPGpfgVIJRPMQ7YgsQGr 64Y2l0hQOPYqMjUBFMrkZv+qciNO/0NuyrHu+kvCkNfHSmwn5LhcVjzJNMeYrzo/b2g/Fu5q+NY dY8BzrMyxvEiVhXFwbXi9iCu0ZP61u8DNTjxMaBKA3oa7JkXQ3ZO6hqueAX6nc0u1ANYGuqoWNf /4EXgn7dbFpie/JnXXPHjAx8VpQMO/p1xNaGThYvkR+NNerQ5ObtEo5t06/9XIWx7QLTILoxze/ nDatPZ4X9BWHtHbqFqlNrFODtCvB681fE3SQkz2zjNF8jAsygsYefA/eVJAMGb4+zsC+6lJYtfK Yo6O8NyDkrX59l2Qhe4IIHJUGk+EPo8KRvFhqT85yoMF4gtrCDKpPwhQdrdsErwB3HL3RMI+zWz leVnDIxgU4ljRHABx+SNLt/Ve0B8KgNgKSIJx2y1Jk X-Received: by 2002:a05:6402:210e:b0:64d:65d:2314 with SMTP id 4fb4d7f45d1cf-65452ad66a6mr7293631a12.23.1768793318206; Sun, 18 Jan 2026 19:28:38 -0800 (PST) From: Filip Hejsek Date: Mon, 19 Jan 2026 04:27:44 +0100 Subject: [PATCH v6 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: <20260119-console-resize-v6-1-33a7b0330a7a@gmail.com> References: <20260119-console-resize-v6-0-33a7b0330a7a@gmail.com> In-Reply-To: <20260119-console-resize-v6-0-33a7b0330a7a@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 , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , Szymon Lukasz X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1768793314; l=2188; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=cs3jOpOKQqE9iM7bir6dwnRwj4x9AXZwFsh1SGhw+CI=; b=NEAZAACh9GsUurU1ZevHGmdMyGmWI6xSXiCigOVWTHMPtBha7JyMgZJxI45k7kww3Q0+23DNS TwxSSf7YOOTD1oKo41FKpp15AfRKYRbTB+LDeOtBqD+TodJSs4rxK0l 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=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::52b; envelope-from=filip.hejsek@gmail.com; helo=mail-ed1-x52b.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: 1768794052012158500 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 34b83fc1c4..a3bb1071b3 100644 --- a/chardev/char-fe.c +++ b/chardev/char-fe.c @@ -329,6 +329,19 @@ void qemu_chr_fe_set_echo(CharFrontend *c, bool echo) } } =20 +void qemu_chr_fe_get_winsize(CharFrontend *c, uint16_t *cols, uint16_t *ro= ws) +{ + Chardev *chr =3D c->chr; + + if (chr) { + *cols =3D chr->cols; + *rows =3D chr->rows; + } else { + *cols =3D 0; + *rows =3D 0; + } +} + void qemu_chr_fe_set_open(CharFrontend *c, bool is_open) { Chardev *chr =3D c->chr; diff --git a/include/chardev/char-fe.h b/include/chardev/char-fe.h index 5f8a6df17d..53b8d2a1dc 100644 --- a/include/chardev/char-fe.h +++ b/include/chardev/char-fe.h @@ -157,6 +157,16 @@ int qemu_chr_fe_wait_connected(CharFrontend *c, Error = **errp); */ void qemu_chr_fe_set_echo(CharFrontend *c, bool echo); =20 +/** + * qemu_chr_fe_get_winsize: + * @cols: the address for storing columns + * @rows: the address for storing rows + * + * Get the size of the terminal connected to the chardev backend. + * Returns *cols =3D *rows =3D 0, if no associated Chardev. + */ +void qemu_chr_fe_get_winsize(CharFrontend *c, uint16_t *cols, uint16_t *ro= ws); + /** * qemu_chr_fe_set_open: * @c: a CharFrontend diff --git a/include/chardev/char.h b/include/chardev/char.h index 192cad67d4..237238e5a0 100644 --- a/include/chardev/char.h +++ b/include/chardev/char.h @@ -65,6 +65,7 @@ struct Chardev { char *filename; int logfd; int be_open; + uint16_t cols, rows; /* used to coordinate the chardev-change special-case: */ bool handover_yank_instance; GSource *gsource; --=20 2.52.0 From nobody Sat Feb 7 09:30:02 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=1768793767; cv=none; d=zohomail.com; s=zohoarc; b=S9hWIPFY/OSnyNfP795sE4ZB6UY2CWjMl4IbAf1Y6ZQysNC9UG0E7U8avieo1/QtNU+1WgkhgfqdANc7qLpPX7nYbadSROAb7xC5wf+goh90TDpzbV9ndEYJgBrAZS6hrKgJ1nODlJBxmp8jb8Xgq0p/F5CerAKla+Ks/5Qc8ZM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768793767; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=NNa7JchBYbdWd327kanvveizXHw1iCkukScOekjsgvA=; b=eKY/T5ZWSLWjiV8RVVl4h9TfeVACwbOYiFTXvZeqYZkoWlm+EktVGNWwtidBTNgNxWq+gB002l2JZDYyn/wD9HXHgxYMyX5AkJ50qDsUD2jL43CW8RlFNeK47rQ5VFfoKJBArYrgQxr3cI8iHgICBQhv41zMEscrpqdJWCq3yQk= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 176879376772933.134172373285196; Sun, 18 Jan 2026 19:36:07 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vhfwl-00073q-Rs; Sun, 18 Jan 2026 22:28:59 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vhfwc-00072b-C6 for qemu-devel@nongnu.org; Sun, 18 Jan 2026 22:28:47 -0500 Received: from mail-ej1-x62b.google.com ([2a00:1450:4864:20::62b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vhfwY-0004Ah-Ef for qemu-devel@nongnu.org; Sun, 18 Jan 2026 22:28:45 -0500 Received: by mail-ej1-x62b.google.com with SMTP id a640c23a62f3a-b8708930695so597415666b.3 for ; Sun, 18 Jan 2026 19:28:40 -0800 (PST) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b879513e8d1sm1006970466b.2.2026.01.18.19.28.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 19:28:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768793319; x=1769398119; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=NNa7JchBYbdWd327kanvveizXHw1iCkukScOekjsgvA=; b=Eb2evHKopx8/F/L5eO8xzNd8aGVinsqiAXQqfxm2uo0I3/Yxuh7rb86tcx7pqimSdC ouXgZ/5hZI3o756G3hMpPU3r7EVPVL8+CQz/TsIaXaVdGN+shnFgsoQP5Eo/yys+SL1w mXwbcX8MDRYCusGSCVrkQwTtT34/RH2xSj+fBpmH22T3gkHkhymwXQ2LDF8yk148YAYX J3KMF15IbcUmNkFF8YVOUZg79lTsil09hQVbKjFlTHkfjn/ezI0ZFZqPj7/e2o0D0zck xK4h2lke1nVjJfh1b4cGRYo80slSB268qMcNwdKm/Z9siyVGGYfFiuZ0iej085wLk7t1 IA3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768793319; x=1769398119; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=NNa7JchBYbdWd327kanvveizXHw1iCkukScOekjsgvA=; b=TXu/qAwywaLeDjA71Mdekji+yRJrnalT84OdAsnknBZr2wWERqhrl8qm2ABJx8EB1b oXMIE3Pks9K0idljwKxwripS2bV99Pq+SycymHBxe6HMw8cn4ckOqauKKcs81uWB+Hr3 leZAqX0hBscPXJ2e2HPay+gKvNTngnO2eNchT+/vZpXFD5lTm+PUVEUjHObG2Ly1sqkI rO+IrEWZrmhYfQON5qWgCl988SSMBMYre142nuXGSzvQU1Xn2MDwWfHF/0jLCfXQwtvf Q2wiMvcKiLWJ7RM7eM4d+1tuWPzIzzq5NoJjp+cpE6jehvnrR8WETf8S2OaK/kmkBhuA NJxA== X-Gm-Message-State: AOJu0YxMqSwVtk4JDZ4YhdXO4EpLBm5SxZnyFWTU8d0ngEWKZuJW4CUn 7SK+UOjsD/sJVI6iP4Wzlh/4lgmuRwmYBl1jpEWAGUvK+9zcRWIyZe/+ X-Gm-Gg: AY/fxX60huXGzvkSa6Grp1TOyzrRxlM4QDk4d5TAVqIjvQlxwzfXtZqA8h3Dibs1ZW0 e50pyP/4aKHONTWGxik1lwDdnOr7GN9JLPjJDZ3UI7XcYpvyIxs3ljMFixVuYzGzyiwtz7uLCQd QVJndOHHzz4RE9ogU7E+swNjc9i96Bh5Tct8h+1HbOed7l3QtrUrwfCtN78Y3sSQXRU8U/sEQty F/vVGiiP6FKy+ZvQUfn/M3tg/JxZyMeoSPb+yZ6+izV0WbuXROM+ihTYeN+bNi+yRU6AQbrElUn CaduP4P/4xRrLUuwoRp/rszi1mfELdyxLpXEvAFmEtiPBO3eFSCM3k7WQvhOSw6/BNuAx9jto9I x/R51bhjKOuacxSWPEDKnPRMLt0ftHmNbnUpPDa1+Y9gszDuPRLzCTDm0OKNCDcvdYBQE1ncAEC eU6ehH4ji9dxEXpl4m54SKjQnXRirIyRoRlpgzA73C X-Received: by 2002:a17:907:2d9e:b0:b87:908:9aca with SMTP id a640c23a62f3a-b87968a9870mr788941366b.9.1768793319326; Sun, 18 Jan 2026 19:28:39 -0800 (PST) From: Filip Hejsek Date: Mon, 19 Jan 2026 04:27:45 +0100 Subject: [PATCH v6 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: <20260119-console-resize-v6-2-33a7b0330a7a@gmail.com> References: <20260119-console-resize-v6-0-33a7b0330a7a@gmail.com> In-Reply-To: <20260119-console-resize-v6-0-33a7b0330a7a@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 , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , Szymon Lukasz X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1768793314; l=8384; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=HeogtEK+9//Pdju/Fyjpqc6qE812kC26MsPD8+icalE=; b=Tty93DoZounl1Npu32cElY8aZfGnSjD1Hzffdav1X1QCjY16eqFnZ35UlS9GowJ5Uz7ygwh7m n2Yqm/F3TjQB4S3V1bswyJEXPnTM4oJ+n6opOlxtTYUQjzKlQmftyaY 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=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::62b; envelope-from=filip.hejsek@gmail.com; helo=mail-ej1-x62b.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: 1768793768767158500 From: Szymon Lukasz Add a new chardev event, CHR_EVENT_RESIZE, which a backend should trigger if it detects the size of the connected terminal changed. Signed-off-by: Szymon Lukasz [Filip: add note that only the focused frontend gets the event] Signed-off-by: Filip Hejsek --- backends/cryptodev-vhost-user.c | 1 + chardev/char.c | 1 + hw/block/vhost-user-blk.c | 1 + hw/char/terminal3270.c | 1 + hw/char/virtio-console.c | 1 + hw/ipmi/ipmi_bmc_extern.c | 1 + hw/scsi/vhost-user-scsi.c | 1 + hw/usb/ccid-card-passthru.c | 1 + hw/usb/dev-serial.c | 1 + hw/usb/redirect.c | 1 + hw/virtio/vhost-user-base.c | 1 + hw/virtio/vhost-user-scmi.c | 1 + include/chardev/char.h | 6 ++++++ monitor/hmp.c | 1 + monitor/qmp.c | 1 + net/passt.c | 1 + net/vhost-user.c | 1 + 17 files changed, 22 insertions(+) diff --git a/backends/cryptodev-vhost-user.c b/backends/cryptodev-vhost-use= r.c index cc478d9902..36564d4307 100644 --- a/backends/cryptodev-vhost-user.c +++ b/backends/cryptodev-vhost-user.c @@ -173,6 +173,7 @@ static void cryptodev_vhost_user_event(void *opaque, QE= MUChrEvent event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/chardev/char.c b/chardev/char.c index 3e432195a5..0f493d793f 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 4d81d2dc34..a460d6ed33 100644 --- a/hw/block/vhost-user-blk.c +++ b/hw/block/vhost-user-blk.c @@ -412,6 +412,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 1d857bad9b..c212fd1aac 100644 --- a/hw/char/terminal3270.c +++ b/hw/char/terminal3270.c @@ -172,6 +172,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 25db0f019b..dcfe5830f9 100644 --- a/hw/char/virtio-console.c +++ b/hw/char/virtio-console.c @@ -168,6 +168,7 @@ static void chr_event(void *opaque, QEMUChrEvent event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/ipmi/ipmi_bmc_extern.c b/hw/ipmi/ipmi_bmc_extern.c index fa08ed6c21..bd7c61b2d2 100644 --- a/hw/ipmi/ipmi_bmc_extern.c +++ b/hw/ipmi/ipmi_bmc_extern.c @@ -436,6 +436,7 @@ static void chr_event(void *opaque, QEMUChrEvent event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/scsi/vhost-user-scsi.c b/hw/scsi/vhost-user-scsi.c index 3612897d4b..5601097bc9 100644 --- a/hw/scsi/vhost-user-scsi.c +++ b/hw/scsi/vhost-user-scsi.c @@ -226,6 +226,7 @@ static void vhost_user_scsi_event(void *opaque, QEMUChr= Event event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/usb/ccid-card-passthru.c b/hw/usb/ccid-card-passthru.c index 5ab7855272..3f4052ec82 100644 --- a/hw/usb/ccid-card-passthru.c +++ b/hw/usb/ccid-card-passthru.c @@ -323,6 +323,7 @@ static void ccid_card_vscard_event(void *opaque, QEMUCh= rEvent event) case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: case CHR_EVENT_CLOSED: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/usb/dev-serial.c b/hw/usb/dev-serial.c index b238cb7937..98d2abbd56 100644 --- a/hw/usb/dev-serial.c +++ b/hw/usb/dev-serial.c @@ -576,6 +576,7 @@ static void usb_serial_event(void *opaque, QEMUChrEvent= event) break; case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c index fda5bbca67..34ab8339e1 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 01ab9ca56b..fd3a9d6265 100644 --- a/hw/virtio/vhost-user-base.c +++ b/hw/virtio/vhost-user-base.c @@ -267,6 +267,7 @@ static void vub_event(void *opaque, QEMUChrEvent event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/virtio/vhost-user-scmi.c b/hw/virtio/vhost-user-scmi.c index f9264c4374..180787ec6d 100644 --- a/hw/virtio/vhost-user-scmi.c +++ b/hw/virtio/vhost-user-scmi.c @@ -214,6 +214,7 @@ static void vu_scmi_event(void *opaque, QEMUChrEvent ev= ent) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/include/chardev/char.h b/include/chardev/char.h index 237238e5a0..2c139f07dc 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 4caafbc714..dea912092d 100644 --- a/monitor/hmp.c +++ b/monitor/hmp.c @@ -1445,6 +1445,7 @@ static void monitor_event(void *opaque, QEMUChrEvent = event) break; =20 case CHR_EVENT_BREAK: + case CHR_EVENT_RESIZE: /* Ignored */ break; } diff --git a/monitor/qmp.c b/monitor/qmp.c index 687019811f..3d5ab8ff4f 100644 --- a/monitor/qmp.c +++ b/monitor/qmp.c @@ -486,6 +486,7 @@ static void monitor_qmp_event(void *opaque, QEMUChrEven= t event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/net/passt.c b/net/passt.c index 9ed811a514..a3e239f306 100644 --- a/net/passt.c +++ b/net/passt.c @@ -421,6 +421,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 a4bb49bbcf..0b8df2ee30 100644 --- a/net/vhost-user.c +++ b/net/vhost-user.c @@ -367,6 +367,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.52.0 From nobody Sat Feb 7 09:30:02 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=1768793900; cv=none; d=zohomail.com; s=zohoarc; b=DMg4xR2RN1OGhv6EY9OD2QeoXT3RA1ve3WhKpTlZ8G8/KplTuwe//l1smvAPt3QOTPObdQf3N6fv0J8s7sWL2pmcZKmsRcQdkWt2g+aoPAx+LGAtxXN2Bj/qL+Kyg+abSnfzQQivM3Vsa7lJ4vWmsj9nxTSSdJxQYmyi4eOyUr0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768793900; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=4foYyPMhJKQbs6aOEjiDFnRMrM3kKY2M3K62p7ATPBM=; b=eKTIc/INDpkmiU3at4pFujpV0YLearZouu2jVBZM1xrHht4NO1aqGjLzXU3Y4pj39k4A868GoiNWTItAUO90FFko1rQXpmm1MWJIH9nhKAOhWrhAPbJ8T3nY96ju4XrzAgKBtG2X7iIynbUtb4/BdLBv1KuQVFxeKsp8aw/Ehd8= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768793900773574.6088531936667; Sun, 18 Jan 2026 19:38:20 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vhfx9-00076K-7F; Sun, 18 Jan 2026 22:29:19 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vhfwe-00072c-6s for qemu-devel@nongnu.org; Sun, 18 Jan 2026 22:28:49 -0500 Received: from mail-ej1-x634.google.com ([2a00:1450:4864:20::634]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vhfwa-0004Ap-C2 for qemu-devel@nongnu.org; Sun, 18 Jan 2026 22:28:47 -0500 Received: by mail-ej1-x634.google.com with SMTP id a640c23a62f3a-b872b588774so567163966b.1 for ; Sun, 18 Jan 2026 19:28:42 -0800 (PST) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b87959fbd23sm977771466b.51.2026.01.18.19.28.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 19:28:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768793321; x=1769398121; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=4foYyPMhJKQbs6aOEjiDFnRMrM3kKY2M3K62p7ATPBM=; b=jDad8HQ95tcBSbU1Tmmk5XJpx3sBWni2f+JNCoc300eHnUUEHK9rJqLvtBrStoPTtk DRIFjx6EgOp2xCo1G+uu/o870sAKz7V8YoRzKNJtoIFL631EnTRNr6PdAVb5neMYgzkP 0Px/0rYwLCNBm15zn/Pe0J+HaIWJBut8/hmE7MMF4wBzWRhtA2h1NnsHurdSZXb2f6g2 a7jQzHh8lOHJkAI2+TO0I+HIcOmwHBgpSucGrUbzJKKwrZNbiegGT4WhUkJMd7VqNFo4 YBTP1SMZpZYTu9oh7LRlvutWasgInrVrs8dOpTF7+uTPCkPGWLeJq4AdnQDZtH/26iW1 cKvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768793321; x=1769398121; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=4foYyPMhJKQbs6aOEjiDFnRMrM3kKY2M3K62p7ATPBM=; b=Kw+W/52NfW69hjlw4yprr6eUAVhIZvqyl52fMZNuCFGE6jk33uD5fwxJxRVBVlb/G3 qX3YdpGE5fmty+GE6R1wiVcT187CND3zd6eoGp/MchFc77nrnm755yzKiHYY81b7ngow MuGsBlIOzqU4l0Ykp3VRbvvsc13eOpX0l1iRp8SDUfysWoArYNI7WsAp0vwoz0QBkomE bKLJUrYFQE90X985q0K76yzVvHCL681aLUHrhjTBrzpLOMtagYa2xgWdt7gLpjWmtlUD fG0H+EHwAYdxMwEU27qCKzrhwQuxFWiHHmkFMR7s5cctDZjhSDZVtD0No/89OhMbL4qP oePQ== X-Gm-Message-State: AOJu0Ywk56c9QBqAX4x3w6UutDX/koRmgienWLA7wEYxMcQL8oHRVCYH XcVVsPjU5vWmWEbhM2Py/jDALWiH46VvporjROYBYjMceAtByoZ+iJrB X-Gm-Gg: AY/fxX4G9MenYvKo2oKKuxw6je7bRTVM2B0uwG84186vchmJ1RLprNeXwI7nnI5UdXj r8Fecvj/F2lJ7l6h47ZaFmpTnyRl2MQ/5e6g3iXp98JdQh7oJbzZKrx23vb0DyVxOW+nPsqgxAN H7tUMmaD4slN1OvEySWfesEqGBqX9RvDEpOiy7qe8rQeAwGK+PQQUCN9ycLxhBYQXCcKlF5QSCr lwTbjZWx/b95Wf6QfTSw/irehSU851MyVG561ZxFZpadknwILusaLtNlETKcJbyEBMqrg29NjJu WnMWnKRvZsAHJGu3Zpw7I4Gm4v5JNE5grfQ+dIuX41CaedJrJeMbjjLczkPSJapZnrqnecJLfnh mOdNBf6l13srJOtYVMf3UOFARFKSPiGuk/l3uj7XEKq2NfArVVY93lN5/atXQP6DoobYKlQ8BSQ gRSGwlIO5/oLAmHiYK1ccQkhXpX9x4f2rMbjW/Qe6j X-Received: by 2002:a17:907:a893:b0:b80:3fff:3369 with SMTP id a640c23a62f3a-b8792feb1c9mr929892266b.48.1768793320495; Sun, 18 Jan 2026 19:28:40 -0800 (PST) From: Filip Hejsek Date: Mon, 19 Jan 2026 04:27:46 +0100 Subject: [PATCH v6 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: <20260119-console-resize-v6-3-33a7b0330a7a@gmail.com> References: <20260119-console-resize-v6-0-33a7b0330a7a@gmail.com> In-Reply-To: <20260119-console-resize-v6-0-33a7b0330a7a@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 , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , Szymon Lukasz X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1768793314; l=1613; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=/VIQQilAfTFStWcg9B9/K7HOVCxT3zSP38BnQlYmmsA=; b=E5pZDnQgRrIi+VrQYDQGVYlXIwLk/uZY9/Kg1E9zrUW5ereud1TsuaLJ6YTAiaK5UEDs5Xp6h WSIpr4/BM0VACArGsjrSUYK96O8kkjnRFTbhJdtHgDWGEAL7QxrdOHq 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=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::634; envelope-from=filip.hejsek@gmail.com; helo=mail-ej1-x634.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: 1768793901275158500 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 0f493d793f..f3c6a12c99 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -351,6 +351,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 2c139f07dc..8e998ed3c1 100644 --- a/include/chardev/char.h +++ b/include/chardev/char.h @@ -234,6 +234,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.52.0 From nobody Sat Feb 7 09:30:02 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=1768793765; cv=none; d=zohomail.com; s=zohoarc; b=eLx64yrsE168ZFdEWE9SrOISGxinldziSkgrZlcpA+aHeYPgJuyrxVAv4HaTHdWBbkhVmwa0dBa6RGOE3LHjVNx7sLU+E7WdqkBBF2FK7kx/2EBh8/h0g5+4pWrqp+P5m/HS9ktOmEBEVxaVU+XalvjgBem6DQpn7//o+ey3aTQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768793765; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=cRRADiWlTCAiWD1WrIJ36o9Cqy9BLTfn45MABBKJyUk=; b=G/PPKZkt5ZNvJ9RSRXX2eaaD0CfrG7OSeubvmP7OXbZ6G5loOrtcWP0XsNcNwF7+s+gCBXfdwI/x/BQXtXz6p1gFN2uMnAeKwITWRr7CjfyMqKamubrDQ9lsP7R+XUsZ+gOL0bIfxrVnAw26KRJ90yaaL0v6ocRsUKEf2nVhsMM= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768793765327209.74001235408855; Sun, 18 Jan 2026 19:36:05 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vhfx7-00076A-VI; Sun, 18 Jan 2026 22:29:18 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vhfwg-00073B-7Z for qemu-devel@nongnu.org; Sun, 18 Jan 2026 22:28:51 -0500 Received: from mail-ej1-x62f.google.com ([2a00:1450:4864:20::62f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vhfwb-0004Av-HK for qemu-devel@nongnu.org; Sun, 18 Jan 2026 22:28:48 -0500 Received: by mail-ej1-x62f.google.com with SMTP id a640c23a62f3a-b876f3f603eso654791166b.0 for ; Sun, 18 Jan 2026 19:28:42 -0800 (PST) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b87959f6e53sm995408966b.47.2026.01.18.19.28.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 19:28:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768793322; x=1769398122; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=cRRADiWlTCAiWD1WrIJ36o9Cqy9BLTfn45MABBKJyUk=; b=WKxhBTRebWp84VoFod4Xb5w4a0bkndsQrbu2bEDydzsBvz0fo0pEt2XVa4t8IKT0qh F1CcEOHkbWZGNpwD+XGP/esbEdnKnKKW5qCxS56dGlT/Xu7oQ0rD86CAi8pTwhOcb0IL bgNvoAB7Hs1wynKJMg2ZlZhvqBaUHDtJAPrKqemwnFvboIJGj+sYnuDm4gMD+GVl+1hr 1DCk9MhzHjGjXH+MCiUyfrbDu3QgcNxcNZh6wc9f0v1GW+upJnf0jnic6BZUEvg5O7Ag B9lGKbqgh7EaJJI2MG1+oiVqE+QQvPLe8ybBZCMwBuL07v6TuxQ64nW7EThj0YCJt+39 KlRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768793322; x=1769398122; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=cRRADiWlTCAiWD1WrIJ36o9Cqy9BLTfn45MABBKJyUk=; b=OfIJgED/HtlDBCjRNMQuzcekNCM/sjTPQnyMl7gTH94fYy9/RMWF54vaW3BjxRUFUH rs2tQ4QkhtoH4SVrk5AqtHnmvLgZV3zhzi3gRKF2r1e5AFf4yVtE31WiAaQlNmUf7WET RQAVOjpemEQB3b/zVZYGkUiEImGSSiB0U/hUGPJopqUjdWQcqRxN6eKpdvXpFNrGtxi4 dII5qeFQe0eS19PTqkkXQKUAy2P0U/uc5CxJxKfYJtmzbl9SRxPMKEUavJ8TvdZMn4de S2VC+LEMFoFRooKqr/HhhxMl50RSrwL/7P7y8oIvtSR2yBMWyeSqUW5h5YS7y6B+aXMo SprA== X-Gm-Message-State: AOJu0YwIcvOAMEuQeYEOt+gP45/OUrxfJjUDsmlMgTsK/QvBdCi4D9Uu /90vCgaJYFF5ULAdqsUwOlhbgiuO3rNQWWpPoSMg3GGrM1J6BKcEmOYl X-Gm-Gg: AY/fxX58wQUpWIZtVOZRtmvd0YkiiO5Ch+IyReAs7dcPrmDL9Yehb9oTbetUrPAKWQe MQTOGnc+bMU8MaEdpHEaM7su9aH7mAfxCMPotOzDGXrY0zy2lfrXueMY2nDjBMkbkwTMWpc9gV0 PSkOIRrXYmY5UyJevfYefg6EkmGANW3gu0wSpClfTTg1mFEBdKs5iw+VBa4te/DhXlO593AdHYK b583NrnlCmqSLnDlvlhJQVe5QjYb3WpBbJgc1hTmxs00ahrUakrFjIDeZ0PviX6fcyx7AUXJNKf V4A5MKTy7vdvK4Fr5bWr1rsSWeNiGRFBti7Ff9QrD9bEnfWpdtZYU6XbNc1/fGoT7vym8KIByvk eUBKuXFwUgKflIyLvf14ustKtJC+Z/ag3WA4wotSLrgj3VwBsw3M4ThOcYV+hojh+zjN7mq/W69 x3VP3qFiqJorFUNzhwVWi9Hf/reU09QhYTQc6j+Iep X-Received: by 2002:a17:907:dac:b0:b87:15a7:85ee with SMTP id a640c23a62f3a-b8796b7a7a0mr820881466b.47.1768793321520; Sun, 18 Jan 2026 19:28:41 -0800 (PST) From: Filip Hejsek Date: Mon, 19 Jan 2026 04:27:47 +0100 Subject: [PATCH v6 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: <20260119-console-resize-v6-4-33a7b0330a7a@gmail.com> References: <20260119-console-resize-v6-0-33a7b0330a7a@gmail.com> In-Reply-To: <20260119-console-resize-v6-0-33a7b0330a7a@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 , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , Szymon Lukasz X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1768793314; l=1672; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=3wWLS/HKH+JZqQjYYiweTGheV16LmdX9qVrBSfd2a/s=; b=1eXM9/LIGtrPi9YsYlSD9dU3DfVU2dPHa95QdDmmKUdpyjpLlDFOjAtki3L02C+EooyvB0EC6 y0XH5CuYfVeASLpphtCWaZPwg1jcR6HA9AzYHbcs4IhjIoGv/v0/SBJ 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=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::62f; envelope-from=filip.hejsek@gmail.com; helo=mail-ej1-x62f.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: 1768793766997158501 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 | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/chardev/char-mux.c b/chardev/char-mux.c index db9e89f441..b23fedbcfe 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) @@ -382,6 +397,7 @@ static void qemu_chr_open_mux(Chardev *chr, */ *be_opened =3D muxes_opened; qemu_chr_fe_init(&d->chr, drv, errp); + mux_update_winsize(chr); } =20 static void qemu_chr_parse_mux(QemuOpts *opts, ChardevBackend *backend, --=20 2.52.0 From nobody Sat Feb 7 09:30:02 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=1768793795; cv=none; d=zohomail.com; s=zohoarc; b=I43f+lM9rhSztEfO1D4spzPG4oTCWIhyZ3vShVgFkwV+omctKgcObgJv7FdxlFanmgt74LOhmaDWu0sXNJzJI0qnhU8np0OdzWV1G4zn6AF/Vu0l2Uipody8sdqmwt2x5QoadKLMTTuJC2X21CO9a6u9QtfdgoNvWiLjYkZo1w0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768793795; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=KOxHrDkh7/Td6NrYlRMgCWmk9a51ZdxVFAmtZjzdmGU=; b=eJrPYbt+v2zN7XcxQnc6q9aoMVs4zedpyd6kHyQrKYBi05v0MfxDjkLfu4PaeNmPV1J6ipWassPqpXHI4o3QOXsde++seDxtB3/I+ttQ7bSDsL/GSfHjlSO8QOb7a9ggggKwTRfeQswjcNME38JRqSoXBdez98jqQNL4uDRyGHk= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768793795031939.043607940108; Sun, 18 Jan 2026 19:36:35 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vhfx7-000766-1R; Sun, 18 Jan 2026 22:29:17 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vhfwe-00072g-8W for qemu-devel@nongnu.org; Sun, 18 Jan 2026 22:28:49 -0500 Received: from mail-ej1-x633.google.com ([2a00:1450:4864:20::633]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vhfwa-0004B0-CM for qemu-devel@nongnu.org; Sun, 18 Jan 2026 22:28:47 -0500 Received: by mail-ej1-x633.google.com with SMTP id a640c23a62f3a-b87677a8abeso648064366b.1 for ; Sun, 18 Jan 2026 19:28:43 -0800 (PST) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b879e2c1be7sm895132966b.67.2026.01.18.19.28.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 19:28:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768793323; x=1769398123; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=KOxHrDkh7/Td6NrYlRMgCWmk9a51ZdxVFAmtZjzdmGU=; b=PrKsf+ZUVwZyULYnoLM2zr/0wsWgBTYEir+yE720a7CUIQDYH3pGDHV/1pTgcTMzD0 zU3AJPCT5DIvj3VWxTuI9j6D3Ulb63extD5k03kuoKBgjUAxDQtaP9aFt3nFdhwBOigs dqoj0U/GaUorkKqeBoYmFTebZ4aFig9sSImvja8tdHojbQJ0Chp8PXZzvKjOIfajx4Kd Gkxi5DkjzOU65De6Em8RfnsRnYu0UM6Q2smnzG7QxyqLvwcbFUplSikSseL17EM5q6q0 Z7NJbDW/O4FSfXd0Hvz2fXoSVZpI20ziAcJEqCd2UoN2eiWG6fbTEtsf9MVZgQ+Pd8IQ eRrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768793323; x=1769398123; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=KOxHrDkh7/Td6NrYlRMgCWmk9a51ZdxVFAmtZjzdmGU=; b=H7eCpF/NnCM1i2iJqqDY0mazIvtF6/dEd2MfMgINPHs2BKFDcXWX7hdcTyxh7b/Hnh xyUoyzPVKcrEZb7+nOnQ8lerGYIxYL0h39QJgBvytaMq2Mz6wbOKGmZt8eh2nPJ6W8V+ 7RIdOxTAJSw6xzbT66BXSvFHHHfXU3qg0/bNSLmG+MYluoMQvuzJAZ/miaFWnv0wUpFF Kz35HVegdGaXVDTN0Wv6tlXfH+CP3d7FM65hfiJNJi82low7AD44yIEYAuPoAC1poy6L EB8NaLwM4ZheOC9M/hrHrlHBGmZuCeDMWbiNtjWBEaK4tP6b071Yr0zKp7XN7/yQF11R 3zag== X-Gm-Message-State: AOJu0YzNOEnra58xbIP457fPA3NsLf7+R2ZGgMzFHvR2CwOK4cTNbngd Fty5RoOASpcZLDNLHRNHyClkP6X9+7HWwhORnLEaKLWq2XzoOzcdjd35 X-Gm-Gg: AY/fxX5GSFmMFL5AY3WCLIMNnlGtWQpXykz6yzJ12gbxjDLsFFWZUd3czssrWyuhewE XF6Fs0vdLdvYYguHbgCfCpdP8Jii5sJCFBd1hWRRcFy3qG7EM2+KNTBlc4ykAuND15c2hyvOSWT rbprLEX0uoLybkqm8ufY5YxaRNnNXKhm9S/Dhj/xC02cv28SaXeJRg2GVCXPTDJs5OZdq4XK28F Qxp7+UMjngyvIILB52GDVZCICIJVfUU+RH6DKYRHvyS13EaQsepzGyHc/9MVAtsSnzVSqNHaDiA HgMjYXgouNa2dLpORNNKilwNBa+4Ef9ajqv6csun/wEPYpcQo0Cp/HuQ7DsmsJVk920FKSHgUJL H5fuDEpNgjyJaJrmLQyJ0sC+GDysWa0z3a/FV1vSekx1o0bH0WD/qLNfpY0OuJpQOvzJU5YqnG6 2Am3fsJDpOmEhn+HGlH//h91L8Ix5ctCsbFC527LjO X-Received: by 2002:a17:907:724d:b0:b87:124c:5f54 with SMTP id a640c23a62f3a-b87932b6908mr879973266b.59.1768793322649; Sun, 18 Jan 2026 19:28:42 -0800 (PST) From: Filip Hejsek Date: Mon, 19 Jan 2026 04:27:48 +0100 Subject: [PATCH v6 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: <20260119-console-resize-v6-5-33a7b0330a7a@gmail.com> References: <20260119-console-resize-v6-0-33a7b0330a7a@gmail.com> In-Reply-To: <20260119-console-resize-v6-0-33a7b0330a7a@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 , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , Szymon Lukasz X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1768793314; l=3291; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=Wpb+Av6dyfCrnZRtwb26zXMQvGbITtEVXsGaT2s43Mc=; b=cPctFHleyR0v5L0I/ML24SyWZLAmGxINF9qsB+ueQJ/7yel93Xs+Hdp2OZUPnDYq2gprHBiQs v3uBvTfuaQDAbo1ddieFG8WIHNBTrnClyXZDi3Ygp5kQZ1GvIXoYrs/ 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=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::633; envelope-from=filip.hejsek@gmail.com; helo=mail-ej1-x633.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: 1768793797148158500 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 161f78c35c..d1b308d5f8 100644 --- a/ui/curses.c +++ b/ui/curses.c @@ -33,6 +33,7 @@ #include =20 #include "qapi/error.h" +#include "qemu/main-loop.h" #include "qemu/module.h" #include "ui/console.h" #include "ui/input.h" @@ -149,7 +150,7 @@ static void curses_resize(DisplayChangeListener *dcl, } =20 #if !defined(_WIN32) && defined(SIGWINCH) && defined(KEY_RESIZE) -static volatile sig_atomic_t got_sigwinch; +static bool got_sigwinch; static void curses_winch_check(void) { struct winsize { @@ -172,17 +173,17 @@ static void curses_winch_check(void) invalidate =3D 1; } =20 -static void curses_winch_handler(int signum) +static void curses_winch_handler(Notifier *n, void *data) { got_sigwinch =3D true; } =20 static void curses_winch_init(void) { - struct sigaction old, winch =3D { - .sa_handler =3D curses_winch_handler, + static Notifier n =3D { + .notify =3D curses_winch_handler }; - sigaction(SIGWINCH, &winch, &old); + sigwinch_add_notifier(&n); } #else static void curses_winch_check(void) {} diff --git a/util/main-loop.c b/util/main-loop.c index ad8645c30a..136886e4ee 100644 --- a/util/main-loop.c +++ b/util/main-loop.c @@ -100,6 +100,7 @@ static int qemu_signal_init(Error **errp) sigaddset(&set, SIGIO); sigaddset(&set, SIGALRM); sigaddset(&set, SIGBUS); + sigaddset(&set, SIGWINCH); /* SIGINT cannot be handled via signalfd, so that ^C can be used * to interrupt QEMU when it is being run under gdb. SIGHUP and * SIGTERM are also handled asynchronously, even though it is not @@ -124,6 +125,26 @@ static int qemu_signal_init(Error **errp) return 0; } =20 +static NotifierList sigwinch_notifiers =3D + NOTIFIER_LIST_INITIALIZER(sigwinch_notifiers); + +static void sigwinch_handler(int signum) +{ + notifier_list_notify(&sigwinch_notifiers, NULL); +} + +void sigwinch_add_notifier(Notifier *n) +{ + if (notifier_list_empty(&sigwinch_notifiers)) { + struct sigaction action =3D { + .sa_handler =3D sigwinch_handler, + }; + sigaction(SIGWINCH, &action, NULL); + } + + notifier_list_add(&sigwinch_notifiers, n); +} + #else /* _WIN32 */ =20 static int qemu_signal_init(Error **errp) --=20 2.52.0 From nobody Sat Feb 7 09:30:02 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=1768793765; cv=none; d=zohomail.com; s=zohoarc; b=VDJywPwjntpI9r8KxF1LsDY6+xC4iBWgKwQvt0bLo7HtIUT+2S/YVDP5a/4DeA1O7367x/0egsCzkb/rDLAfeAb0mKvP5BMwERynhBX7Gka+dz4k+aW+erqqmssDBHPR1VfiEQxnhYgNEgYAL3YwHrETEChZ/folmNcTIb6bRYQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768793765; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=CwdpHXJqzSVJBL7iuiAdXf2ozQwuKqDkTKYPeqcNrWI=; b=Qb4uv5ID5n+soKICPQEiiZkzAH9xD3IhCgMU7QOMskZG7Cmrgl/Jmn6UIDDnX3wBQYprqpClUXOT0eUbO5Q1rT7EhPTXdJ4xKoBBDOjmkLpzC7/tKDYckN3AP6xFVWe8K/LCL7XViNSvihkn2ldBqbCQhjEFampmkEn7VAQfXxA= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768793765211938.3837647427179; Sun, 18 Jan 2026 19:36:05 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vhfx6-000762-PF; Sun, 18 Jan 2026 22:29:16 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vhfwg-00073C-7M for qemu-devel@nongnu.org; Sun, 18 Jan 2026 22:28:51 -0500 Received: from mail-ej1-x635.google.com ([2a00:1450:4864:20::635]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vhfwc-0004BD-4Q for qemu-devel@nongnu.org; Sun, 18 Jan 2026 22:28:49 -0500 Received: by mail-ej1-x635.google.com with SMTP id a640c23a62f3a-b87677a8abeso648065866b.1 for ; Sun, 18 Jan 2026 19:28:44 -0800 (PST) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b87d1e6dd64sm236511066b.32.2026.01.18.19.28.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 19:28:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768793324; x=1769398124; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=CwdpHXJqzSVJBL7iuiAdXf2ozQwuKqDkTKYPeqcNrWI=; b=EeSDTrYNKJ/9MmMCx5+QbvyWG4LMppZYGA6Wct/0YtyE3komKztsw4Vg9mAqmRiOOg du9d3C+g7ru8HcrmwrxDSeuNBRm0EGvhMrNM/2/P4W4+cYKtCLKVhJztJp48D1HUFNKM F8yz/sIrhTbCscRZT5rxudcMv8spLIrMojnAFK866qIaw68NqtM1ZLJv1Agig0p+1YXI 7WyUYmz7Qxg8E02tAX6fkbGdT0NFhGKlWrD0gcRke35Y/Kxi1v0ZeKvTucR41UVx7rea Nu8oc8RZyDRNdiNjqv+eElM4ym4l9Fr4kfqbQtUhwKdGa7ruKfOyPzDSegqigT+nXeho N51Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768793324; x=1769398124; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=CwdpHXJqzSVJBL7iuiAdXf2ozQwuKqDkTKYPeqcNrWI=; b=N7BY+knaglQ2qVRbF1ZYFsdYRygvLzg+PYf1JogIE0PeLEbNbXP7K/NBt5ph26ZQVc 936D+85aQVN1c/HiGoZoyc/hzJi5LUlqJ7a3ic47mQsBlxjcZzACrE0uXMfYJotsKd0m mpS4TzC7DUwsaFuWBCilppIZ/nmcks0YyR229HrcPZjyuW3pLXLUyE+RQ6tu/B5llzB1 NKoJpTtoaQpbFBqkKqVT4IJQ8UIidlFgyGHtPJj38De7cvLfXqeb8UppVJ3HdTpY0mR6 SMcYUlgklt6IbyArsy/TBpHNmIh4kn4gLW9w1jnSAgeGf4BdLlKwj8Vm/1pqx/pD7fCl /akQ== X-Gm-Message-State: AOJu0YwX7cSOyHEBdWkvEn9K9x13zqCkBWt+zRBXDOvm6bsplSz6z96X raDcpS7Cqr1uSVvfyXCJdJZ1PiolcWDoL54fgoKyQ/eop0bHSADzEvwm X-Gm-Gg: AY/fxX4CcvdfTzsfyT+kWGlS2WWoKyJ2QXwR4yWobUxM9oX1qkme2Zd4fpQblEx7GRy iUq1gaK+nOMJPGwiPLT7iiGetjwM6k9GNR6k9wff+mg+s0xOIq/c0b3kzyWReBaK1ta5jKMav8g 0dcF7L6ImQbqh1utJRtiAtOyygFrC4QKmA2efjGPuZInrfF5dBBd31Qkh3sGFkpmIxug3jX/WfV tykc4UTQGQWcZ8fS4NkAk0CsRTmHK7U+8yPPUnJiGVqR2VctRhpx2T/Uo/3K4p06V950QxeQWdP N+jyZ47dapHq/7o8wbq9GaMheQmaC2lpv95jV9hd4YNtAd/S/NL44r8SbTDoQvA1rl949I1RjRb a56X51U5KBw32KakSq4oSv2Agxx43tR+gy1uXM1oM06OXpJPTVarXHQUsAdgKxaDCWGGjZOD3Er /mqueKK9TlBr2ul6xHfTNhO907Ok8FLGnTIacb26Fk78a1bMOQibM= X-Received: by 2002:a17:907:9405:b0:b79:f8ae:a893 with SMTP id a640c23a62f3a-b879327f09amr851085366b.49.1768793323683; Sun, 18 Jan 2026 19:28:43 -0800 (PST) From: Filip Hejsek Date: Mon, 19 Jan 2026 04:27:49 +0100 Subject: [PATCH v6 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: <20260119-console-resize-v6-6-33a7b0330a7a@gmail.com> References: <20260119-console-resize-v6-0-33a7b0330a7a@gmail.com> In-Reply-To: <20260119-console-resize-v6-0-33a7b0330a7a@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 , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , Szymon Lukasz X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1768793314; l=2558; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=Y2PdlDn9BtibdmNVATyYsNZJjK+AQSI47PNbPt4RVGU=; b=nK49SIEzS7uNwEXaruzPmJbjxZ7KZG+Pjv0qJOfAbGSi9+QPU+1QQy6o+T9rcrLUZ8w1SFf4H rRbBGI5P9urCfPqkxsFzwLvRGHn1yRwK42GJ5/NpDKSTl6Sg5OJ+oU7 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=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::635; envelope-from=filip.hejsek@gmail.com; helo=mail-ej1-x635.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: 1768793767006158500 From: Szymon Lukasz Update the terminal size upon SIGWINCH delivery. Signed-off-by: Szymon Lukasz [Filip: use DECLARE_INSTANCE_CHECKER] 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 2568164a10..f55a7be24b 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,11 +95,26 @@ static void term_stdio_handler(int sig) qemu_chr_set_echo_stdio(NULL, stdio_echo_state); } =20 +static void qemu_chr_resize_stdio(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); + qemu_chr_resize_stdio(CHARDEV(s)); +} + static void qemu_chr_open_stdio(Chardev *chr, ChardevBackend *backend, bool *be_opened, Error **errp) { + StdioChardev *s =3D STDIO_CHARDEV(chr); ChardevStdio *opts =3D backend->u.stdio.data; struct sigaction act; =20 @@ -123,6 +148,10 @@ static void qemu_chr_open_stdio(Chardev *chr, =20 stdio_allow_signal =3D !opts->has_signal || opts->signal; qemu_chr_set_echo_stdio(chr, false); + + qemu_chr_resize_stdio(chr); + s->resize_notifier.notify =3D term_resize_notify; + sigwinch_add_notifier(&s->resize_notifier); } #endif =20 @@ -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.52.0 From nobody Sat Feb 7 09:30:02 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=1768793808; cv=none; d=zohomail.com; s=zohoarc; b=jqHCvuiSHsl+f4pka5y4N5Yl0bzIXXW1+vY5mQ/fdNraLoyhZe3qIh09LynCPUDy7SDNP+ZSDKSbS1FHC2ow3t7Kll1irbrtMFkVsnD9l6a6CE1qYMeGPXVSGEm8URVaod87F8E7qNscPVVcoN24gZRpkYqviMc3OvIY563PEmA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768793808; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=QjYYTAGZ0dsLKrWo60hSXmC/6EhVgSqPUKptBg48els=; b=oEGqj33UOkboCjPnW8iydn33tCUPSaXsNkueiCd5XGGdTIiEa4ThD1EK5ZyOOOcwtGJFpid8Hl0UhVnk4IWHGnCGl5GXLOAW/S3MJAHAsG8JSiycTiejpvNvrqvFhp922WfeDAGPK425lv0LPPZbBcp+Pmcu90Mz0SDV769PFtk= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768793808753905.9125422254662; Sun, 18 Jan 2026 19:36:48 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vhfx8-00076F-Qw; Sun, 18 Jan 2026 22:29:18 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vhfwg-00073A-6r for qemu-devel@nongnu.org; Sun, 18 Jan 2026 22:28:51 -0500 Received: from mail-ej1-x633.google.com ([2a00:1450:4864:20::633]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vhfwc-0004BJ-84 for qemu-devel@nongnu.org; Sun, 18 Jan 2026 22:28:49 -0500 Received: by mail-ej1-x633.google.com with SMTP id a640c23a62f3a-b876c0d5318so521172666b.0 for ; Sun, 18 Jan 2026 19:28:45 -0800 (PST) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b87a43c7348sm842497666b.8.2026.01.18.19.28.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 19:28:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768793325; x=1769398125; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=QjYYTAGZ0dsLKrWo60hSXmC/6EhVgSqPUKptBg48els=; b=VX2eb0VY0dZ3Y2K/M1+3MuZTp9/J6C983nkGWS4jSh1XrggAa68Fx1vb6mF0pd9gxC Camf6bhu7+n3Um2F3SZY7FgKsiXCx1kVHdWLE+jKwQCOF3IjvNjR8LbN0nyghfKDOPWs q7Yo0wmUPwzzQyRaElv+qAY+2cRKnaNR9xvkeowRYHueSbEMbTtK2kyXbZzfZoIbpNQx WURc0gYTyuGwexC8FO+qYJ2/M1sAQBFfluaL+b+S190jV6omuq7+Iu91rzeodSGkmRIe cEtv7i4JPremP/LVrT0ahQyLACViloxHfFXRC684XFb74PjuViW4bFUx+gtdCDOp0UeM VH3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768793325; x=1769398125; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=QjYYTAGZ0dsLKrWo60hSXmC/6EhVgSqPUKptBg48els=; b=IgQ6GCEPCYfgxcl2MVKqdVxTt2+/wWpTU8SWEd9FXntm67ySQY47FljCdTFhCkDzvC yL2YQjY0uCTDcYAyhBwKbfD5UHJPwu8DCZtrZqzGFa9AcNFZBPFR3C0OEKajwJ4ht8Oc PydrvLfwaF+LcDyWw1ikPAw+rnKaygwm/L3jQwDSPevDy6WKP2uymwjclpZoiLKyshki TQ4UYrvBa2ClQ5vI9X0s28HhHk3mpaFRLIeIrCrZUGHP04kQvfLSJech34/lcnQzF5De eGqCah1z/a2Y/XoExk2g/01Q4Al4FzMoXuivdBE8fnCGvb24cyHFrcngVMxjas160sqr O5mg== X-Gm-Message-State: AOJu0Yz7XyaUK7V2dHaNpP/sQQIOJq1mVVIsDrsC5HGRtTR76KZOIBnH DFBZQvEreANyzFEQ3Ejjj+luVHY/HJjQrTzY9A08gyh5FituYp0+Hqti X-Gm-Gg: AY/fxX42vyWmGD+hBi/2gSL6lB9iDJKwoGYHEAUIjYJCjMiFG+zd2JZeStcicuMagyF gHeyxipC+sHWnWOaIPpeJP4U1vA9t++6ByfLL/pPgmD7/hFcwEVJ/J+79cUpe85b/KMrvQo3npA bCjUAW4s3fqTT/LzhM5phdApQ4fGsVoVfJMa64wAxbbWLeyoLEr6VfqJatMUSisWz5yySbBuBNE AnTTY0P6aVoQc0oCxi6ZzfCFcwedofbbnysMYfzVpZ4mv0+lPX8koPcG6vcf0jBh9CdiDpqGkXP Od2pH251vLP/76wdf/WDOLTIwFo/atTy2PJ4r+y3XUBnZRFXM9/7koGp6QxIoY0fpMrfNNT/PEQ UjKFNAaHVfxKzuxDjAuU9EvSRDJrPx+GJQmdJOpHGDw9wuO8G2B14VLkionAWzIfb8UxXsxQsAI Id0+0MdSSV0ahXgmA3PVHcm6rzn9dVRc0N+tKka7AuaF+0PqJFrsM04iLhuvMYHw== X-Received: by 2002:a17:907:1c02:b0:b80:a31:eb08 with SMTP id a640c23a62f3a-b879302426amr833208166b.55.1768793324687; Sun, 18 Jan 2026 19:28:44 -0800 (PST) From: Filip Hejsek Date: Mon, 19 Jan 2026 04:27:50 +0100 Subject: [PATCH v6 07/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: <20260119-console-resize-v6-7-33a7b0330a7a@gmail.com> References: <20260119-console-resize-v6-0-33a7b0330a7a@gmail.com> In-Reply-To: <20260119-console-resize-v6-0-33a7b0330a7a@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 , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , Szymon Lukasz X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1768793314; l=2611; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=hKtxDSFGj3QJHK5lJS0qxk5mxai2n8cCxcT71FLDhQI=; b=7fvbnYXc9BYStkd0100kCSbzdXCk5SI/XeIthvy/deZNtNrmCW8ILcmrA1ljCMtoSbTgtpRkg FkbALhWHnLwDiOjK/g1Zq8nqAYLG8QGTBDJ59+eZ/nIWM/PUwR/H3SW 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=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::633; envelope-from=filip.hejsek@gmail.com; helo=mail-ej1-x633.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: 1768793810898158500 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 f3c6a12c99..458059a9e0 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -1266,6 +1266,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 140614f82c..bc08f0161a 100644 --- a/qapi/char.json +++ b/qapi/char.json @@ -861,6 +861,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, must exist +# +# @cols: the number of columns +# +# @rows: the number of rows +# +# Since: 11.0 +# +# .. 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.52.0 From nobody Sat Feb 7 09:30:02 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=1768794138; cv=none; d=zohomail.com; s=zohoarc; b=jaV70fICddUJWjRb0xi5MI8afKsCGFxpJKRmnsCTW3WIcMdS3LJQBTRLUvsy5Rzh+AQRvdyyTZZwrcZ/jszv+A0u/z6z5DL05/T1XNfqyQttohW+wBJKMzp9AFPC18cEKx/YhznGVFanNtcnA1quwKlvbU0t7lV8bwPxIPlACkc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768794138; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=tn+OZOSXDbknR2OaFoKADd3P/YORnV8fEUKXR99UvC0=; b=Pgz5hDAcMbug6yw487jxQnK0ruc183tlEcwDxeFbH6mUrGz2cUm4CDyGqpB/jT6r+954M9QbdoBBfu8y/AhGaABv4tN5Mul68R6ToHKxFwbvcK/cS/lG8c0Sgl9oLikqph5fex5rOZul30V0Cx0woKI2URthMBs2aWcnt91DzHU= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768794138143426.52317631412507; Sun, 18 Jan 2026 19:42:18 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vhfwv-00074m-C4; Sun, 18 Jan 2026 22:29:07 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vhfwi-00073p-61 for qemu-devel@nongnu.org; Sun, 18 Jan 2026 22:28:53 -0500 Received: from mail-ed1-x536.google.com ([2a00:1450:4864:20::536]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vhfwd-0004Bd-WB for qemu-devel@nongnu.org; Sun, 18 Jan 2026 22:28:51 -0500 Received: by mail-ed1-x536.google.com with SMTP id 4fb4d7f45d1cf-6505cac9879so6334046a12.1 for ; Sun, 18 Jan 2026 19:28:47 -0800 (PST) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b87d1e6dd64sm236516866b.32.2026.01.18.19.28.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 19:28:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768793326; x=1769398126; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=tn+OZOSXDbknR2OaFoKADd3P/YORnV8fEUKXR99UvC0=; b=PTmxipqdimREFbsNVzpAus7UxpaBrdS63t4mkOFQOomOxh6F2F+dJFZf7uxByfZu0s 7l/t2CXnX4K0N9wuBtFqovMPw/FakuUwcVnc0XnYFyhZCiqKGAb/CtTL9SdKpkg7QRY7 C9ajMUulon6/eamRXS5nTJLumldm7xOnjTYhF94pBVjSBA87VSf9Qtfosndw1RKtxB72 NWTmd1YTzNemNOKTCaEh3urRxp+5E5brpWLMTiiegXvJ9zYEOK6CRaIFMV1/7gC0f5cF +KSmBE5hJpnnUg2ysMiqTiR2+F7G8ZOaj3gAd8KHeb6Yd1SI0oTswWGi3ALSU1aA7wAM QclA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768793326; x=1769398126; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=tn+OZOSXDbknR2OaFoKADd3P/YORnV8fEUKXR99UvC0=; b=Hfupgkxl4pzmX4JxgjhRVuumTmlfW32Vr5FkRs1SJWYV+UfEmJYq5jmNa1UoGgpwMy 7DpjdAnNRT5xwd4YPRIiVGHasGMjfHLiesPgLR50PVFY6ZjZF8xEw6bYaXUqjwRhekxi 1f0oXShXNo4c8kJxVp/pG1CzTuxvJ9xwsevCw7rRGPnuWd/ykjUVV+2EAdZdfXxs6mny jB/Ht7Vv6dsxjFTZDnAyYsB12s1hzaywcHT0QRnVPBwonWK37Os2Zi6RiTbQr4lLcsGP CjNwJ1qU+vKgNotVT2uNravl59KCriQujbjDbXEmK3liarsZ6Ghi/Ly8kkb0NUsiDfcH NIJA== X-Gm-Message-State: AOJu0YzADDlptx/E6JhobZpbdBFqxM1jTKnXV04CDPCr5wpWg7+TWnwB rQfesAIhFHpSgTkYfXm+fJSlaZAovZOhg2ga4Xv5CQQyRl/lVvkxWyBK X-Gm-Gg: AY/fxX5F12YE3HC89UQj26zoRtiMWkfNySATX/+Y+8a0zfKJcqkE6Fe2sjBjNZ/nc+B gZmlyIXfrAqvlp2dt+qEDweAvOnyn0OLtid84ppYDQW6mCjnquLcKMPstt5aZ7K22rnbOl6ZrFq +OtSsMvYczOQnvK4jS68vQBmCKsgc/U5G7C8TbBH5m+9A1UBDavCShZ4aP6PPVBeAFKeeyMei4m 0Vb6DAsWepPL2P0DjIYG8FSyfJgYpmhLa3GWmYx08Mzh7/LuzOrBhsjIFc8zS7YH2pOzoUpz5Uf sMXjSKsLODsp3iEPd7ojcSe0RAV9w1gQsp6pa5Sy2oJe2cT6x9qj+Ds13Q6McUgnHi8tPIwFirM VYYPiQzzGOOTAA44YRq1RVJ/aMfRC77Drtz//82nFFeWpgJ68rxCOwrUJyAYN8aGHZql5GrNogy Ybybg6kTdh4i5v/VCXxjJhl2/qvAfUqZ57oJZiGeiB X-Received: by 2002:a17:907:1ca5:b0:b80:3fff:32ea with SMTP id a640c23a62f3a-b8792fede57mr931808966b.57.1768793325817; Sun, 18 Jan 2026 19:28:45 -0800 (PST) From: Filip Hejsek Date: Mon, 19 Jan 2026 04:27:51 +0100 Subject: [PATCH v6 08/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: <20260119-console-resize-v6-8-33a7b0330a7a@gmail.com> References: <20260119-console-resize-v6-0-33a7b0330a7a@gmail.com> In-Reply-To: <20260119-console-resize-v6-0-33a7b0330a7a@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 , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , Szymon Lukasz X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1768793314; l=7237; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=iA4bzXkkPsS0eGd8S0fKQQSaARDJLTGpF3c43PCxCTg=; b=wsO/GtjNynmS9ZF6de16+ezf6aZHn7ouWvpYw6UmCffe7e3rCaVYCBjFKnWXavrdm02s7/jQk N390GJZZuiFDaVMtCg0zMGiTQ4WjpSDmN2oTnXWKbIbzhLYhF83MoKR 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=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::536; envelope-from=filip.hejsek@gmail.com; helo=mail-ed1-x536.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: 1768794140339158500 Implement the part of the virtio spec that allows to notify the virtio driver about terminal resizes. The virtio spec contains two methods to achieve that: 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. Note that 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 5326ab737a47278dbd16ed3ee7380b26c7= 056ddd. As a result, when using a Linux kernel older than 6.15, 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 | 76 +++++++++++++++++++++++++++++++++++= ++-- hw/core/machine.c | 4 ++- include/hw/virtio/virtio-serial.h | 5 +++ 4 files changed, 83 insertions(+), 3 deletions(-) diff --git a/hw/char/trace-events b/hw/char/trace-events index 9e74be2c14..2416d4d04e 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 5ec5f5313b..6348eef3a2 100644 --- a/hw/char/virtio-serial-bus.c +++ b/hw/char/virtio-serial-bus.c @@ -260,6 +260,68 @@ static size_t send_control_event(VirtIOSerial *vser, u= int32_t port_id, return send_control_msg(vser, &cpkt, sizeof(cpkt)); } =20 +/* + * This struct should be added to the Linux kernel uapi headers + * and later imported to standard-headers/linux/virtio_console.h + */ +struct virtio_console_resize { + __virtio16 cols; + __virtio16 rows; +}; + +static void send_console_resize(VirtIOSerialPort *port) +{ + VirtIOSerial *vser =3D port->vser; + VirtIODevice *vdev =3D VIRTIO_DEVICE(vser); + + if (!virtio_has_feature(vser->host_features, VIRTIO_CONSOLE_F_SIZE)) { + return; + } + + trace_virtio_serial_send_console_resize(port->id, port->cols, port->ro= ws); + + if (use_multiport(vser)) { + struct { + struct virtio_console_control control; + struct virtio_console_resize resize; + } buffer; + + virtio_stl_p(vdev, &buffer.control.id, port->id); + virtio_stw_p(vdev, &buffer.control.event, VIRTIO_CONSOLE_RESIZE); + virtio_stw_p(vdev, &buffer.resize.cols, port->cols); + virtio_stw_p(vdev, &buffer.resize.rows, port->rows); + + send_control_msg(vser, &buffer, sizeof(buffer)); + } +} + +void virtio_serial_resize_console(VirtIOSerialPort *port, + uint16_t cols, uint16_t rows) +{ + VirtIOSerial *vser =3D port->vser; + VirtIODevice *vdev =3D VIRTIO_DEVICE(vser); + + if (port->cols =3D=3D cols && port->rows =3D=3D rows) { + return; + } + + port->cols =3D cols; + port->rows =3D rows; + + if (port->id =3D=3D 0 && !use_multiport(vser) && + virtio_vdev_has_feature(vdev, VIRTIO_CONSOLE_F_SIZE)) { + virtio_notify_config(vdev); + } + + /* + * We will send these messages even before we told the guest that + * it is a console port (by sending VIRTIO_CONSOLE_CONSOLE_PORT + * message), but that should be fine as the guest will likely + * ignore them. + */ + send_console_resize(port); +} + /* Functions for use inside qemu to open and read from/write to ports */ int virtio_serial_open(VirtIOSerialPort *port) { @@ -408,6 +470,7 @@ static void handle_control_message(VirtIOSerial *vser, = void *buf, size_t len) */ if (vsc->is_console) { send_control_event(vser, port->id, VIRTIO_CONSOLE_CONSOLE_PORT= , 1); + send_console_resize(port); } =20 if (port->name) { @@ -568,11 +631,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); } @@ -1158,6 +1228,8 @@ static const Property virtio_serial_properties[] =3D { 31), DEFINE_PROP_BIT64("emergency-write", VirtIOSerial, host_features, VIRTIO_CONSOLE_F_EMERG_WRITE, true), + DEFINE_PROP_BIT64("console-size", VirtIOSerial, host_features, + VIRTIO_CONSOLE_F_SIZE, true), }; =20 static void virtio_serial_class_init(ObjectClass *klass, const void *data) diff --git a/hw/core/machine.c b/hw/core/machine.c index 6411e68856..50554b8900 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -38,7 +38,9 @@ #include "hw/acpi/generic_event_device.h" #include "qemu/audio.h" =20 -GlobalProperty hw_compat_10_2[] =3D {}; +GlobalProperty hw_compat_10_2[] =3D { + { "virtio-serial-device", "console-size", "off" }, +}; const size_t hw_compat_10_2_len =3D G_N_ELEMENTS(hw_compat_10_2); =20 GlobalProperty hw_compat_10_1[] =3D { diff --git a/include/hw/virtio/virtio-serial.h b/include/hw/virtio/virtio-s= erial.h index 60641860bf..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 */ @@ -222,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.52.0 From nobody Sat Feb 7 09:30:02 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=1768793888; cv=none; d=zohomail.com; s=zohoarc; b=FsrGcQK/6LCmgY01Pc4I2pgsVsE2b0yo8dhh8pquI6lIV3e3H05Gwy7Zze+0m0eud9ZaovroByN2QyaMJcnF2DHJCWF2LMNPgNdaiVNdzrqhT3dJxgaz8FT6L/qF7nlh6kKL3e/BVuSyghpyGKZL7SvC4evactr8otbfC82pIZA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768793888; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=+hcIvsm19O7NRhgdd4H1QI2pcN+x2HRYIcp2/OHgPhA=; b=Bpof18yvZg1N3ww3Nnm60daOTIFOosUgkcxC6k9+kvi7/NaO5PXeHzwC4yVv7J6TQLUaNtkOjzDoDGVY/QAPXxStQVhtzvMLIbxIc8YRPL9L+XiALs6omqMJXA07thpCYV4n/PGLBRc2eFuIRS6qcDsKELrnSc+mwXJtmacST4U= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768793888970961.2176966249918; Sun, 18 Jan 2026 19:38:08 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vhfx9-00076G-1Q; Sun, 18 Jan 2026 22:29:19 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vhfwm-000746-0q for qemu-devel@nongnu.org; Sun, 18 Jan 2026 22:28:59 -0500 Received: from mail-ed1-x533.google.com ([2a00:1450:4864:20::533]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vhfwf-0004Bt-VS for qemu-devel@nongnu.org; Sun, 18 Jan 2026 22:28:53 -0500 Received: by mail-ed1-x533.google.com with SMTP id 4fb4d7f45d1cf-64b9dfc146fso6702586a12.0 for ; Sun, 18 Jan 2026 19:28:48 -0800 (PST) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-654535c52afsm9076235a12.33.2026.01.18.19.28.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 19:28:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768793327; x=1769398127; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=+hcIvsm19O7NRhgdd4H1QI2pcN+x2HRYIcp2/OHgPhA=; b=YalZzgSVtR6eMEglLrZP/RAWtXjkqj3u87EajPn93A6ylO/KCvgjinHK6W0b1nhTt3 pj2QgCggSToBHNKaBwUBjERJ/IzPAUZGWwnfoy1Lwdmw+rscDKT+cimoAgSvKGsy2gLw L+WfetKvbAupwEaiec6MeyqOY0GpZ6qEol7iufS4yXacUIY58FHrTlFglRWwWMI9tGCz vEqm2p8yMfKjDEwTjU+cKFgyAMdaPKXX9X22IxFZOnEN3Hgf0K3KDmG78Qn5yq2fL9az KEmzaw3o88+h1HwZtKLhogQTsFmwqxrwifOTWV6BMnyugdqV54J2eJBLpJ8EK2nP6Gwg p/Lw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768793327; x=1769398127; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=+hcIvsm19O7NRhgdd4H1QI2pcN+x2HRYIcp2/OHgPhA=; b=twWfG7eNktJrSd2JEv0PuLDhuVIEyMmqWOADh4lMg8aVQIJbMtBbxM5wpJTnv7OUAg 9/jRC5EXTj3aiufsR4CvwgG9JCP25N/w6KU6nao21/HOunR7wDu+xZyeFmftOc7z3Eaq b4Vz4D83KaZOUcT0TSVaEJOfrbMOkVOvSrHraIX7+bl7xPJmxUoEd7jOUCCGoTJfRISg C/fx6RAeuRsyVXUo67g+EXlDXGYg4S5DYuw+w3Q3j7mdSvvcWu+nrhNFO7ZO+oBIS0Or f2Fp+VibZ/cIMmzkAQBsyUW5OTBGc9lKrltnZz9xjePXSwUcV15/ZdpoUEaVA6PHPf2E 2oSg== X-Gm-Message-State: AOJu0Yy0RgrUGeWuHNtKCEkDpoCYmixbHJGVpPrPsZgZIvjd0OI7XOQh AW8ts7FPcSopYDt3ojc8NSwlo6LaolBvbiz7r0x32pMHhDKOQwIUlGaB X-Gm-Gg: AY/fxX5JMI1R8trzl1gtsSlJ20ThqF7jxhuyXqnjjMnXrtTvutUdh/Dh3KvHpUe/znU ZBbTIEMWEHB4pkJsqqlFXC34BsDmcdgZnNCwcON9Pw0N3YSKBO5LoKi/31z8l+IrdDDAgP19CjD ACjMNHOX7d5dKvNW3THoYMmbv4YM+Xqw4bTbVYPAEVtdv7l4jMakgcIXm8jsWxHts6WVk1WHQQB Jq8d+zMEz6DJWfMfK8oCK3koBiwVL3Bhq8vbMcAqCelv/Itp+syfbrOBsv5T9aShkiHwQ0Cc5QN YrHinSAjSiRPAzb9/UsktMkRLGcLHCdFrqQeG8w1mmvunJvSh0K3Vk+D23JuBPglz4l7BMpouFI UNLsoCHjL9b9wQ0R6TocCeg3q++Kn4Ca/E5z1qZi9dtnswhNPAuHmGPwme6XLKs8w2OBE0BbS84 NgusNSG4d3USLlResCQJF51TglLqCWPH8JE00sq1Cw X-Received: by 2002:a05:6402:95a:b0:640:abb1:5eff with SMTP id 4fb4d7f45d1cf-65412f26c76mr8453512a12.8.1768793326860; Sun, 18 Jan 2026 19:28:46 -0800 (PST) From: Filip Hejsek Date: Mon, 19 Jan 2026 04:27:52 +0100 Subject: [PATCH v6 09/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: <20260119-console-resize-v6-9-33a7b0330a7a@gmail.com> References: <20260119-console-resize-v6-0-33a7b0330a7a@gmail.com> In-Reply-To: <20260119-console-resize-v6-0-33a7b0330a7a@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 , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , Szymon Lukasz X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1768793314; l=3302; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=ZzKneST3CEGU8zC4XP2YPWswsNvk2tWadVWgPvDK+sY=; b=36RE9gnmbO/S8PNNGtEK8UNYWq4fTaJC5IDAS1yrJ7bt1wAtbEQUVwzEnOp2RwVIGh8QLEIWi e6mmdu6MUZ3BqWGZgsYNIsX0I0KRgBtsmVNseHNtMbWuCrxKprymm/F 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=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::533; envelope-from=filip.hejsek@gmail.com; helo=mail-ed1-x533.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: 1768793891256158500 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 dcfe5830f9..de7979c2d3 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) { @@ -174,6 +183,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; @@ -182,7 +208,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); @@ -210,7 +238,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, @@ -242,7 +270,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.52.0 From nobody Sat Feb 7 09:30:02 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=1768793864; cv=none; d=zohomail.com; s=zohoarc; b=DD4dqhze/h4F5EdbS18svIZrBTP9ypEzK/cJoWDWRrE2cYLtQYBrR521GexO9p6zGLaHYa7ZuFlUbl1TdXmvnH5dibrvdVdRa17ZZN9yjbKwXUHJK3aOA4GHUr0F7LH/KVaR7X1q9C1xP931fdL7PYUjEm4H4tRlsfQv2rRRnTA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768793864; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=HMXELTh73T/FqcWvF/yPL2Xnmaqf2ybpkYLwr3NQgvI=; b=n1GZwclXkqM/0IJfFVrCjnQBfClLPCEP75lDm1Jnddwm4exICOgfhDfm7b9HC1WxGZWbsimS7c4TFkAs7vFMtpiabD7VPIWYFhsocjY4HMfXAmJnQLn0NNDaROjMSGTx3Qm/JgJ1aV3E27VgNEfOBA9WoUthJnGNuCJ9iXQ/8Xo= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768793864763989.5336034883375; Sun, 18 Jan 2026 19:37:44 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vhfx8-00076E-KY; Sun, 18 Jan 2026 22:29:18 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vhfwk-00073w-8a for qemu-devel@nongnu.org; Sun, 18 Jan 2026 22:28:55 -0500 Received: from mail-ed1-x536.google.com ([2a00:1450:4864:20::536]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vhfwg-0004CB-26 for qemu-devel@nongnu.org; Sun, 18 Jan 2026 22:28:52 -0500 Received: by mail-ed1-x536.google.com with SMTP id 4fb4d7f45d1cf-64d30dc4ed7so7284241a12.0 for ; Sun, 18 Jan 2026 19:28:49 -0800 (PST) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-654533cc5e1sm8695897a12.19.2026.01.18.19.28.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 19:28:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768793329; x=1769398129; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=HMXELTh73T/FqcWvF/yPL2Xnmaqf2ybpkYLwr3NQgvI=; b=BHW+mrxJ/0viadEkAtkv7VobnzNbH27mc9TE/RQR7UjaEX9Oiis9rcK/cavhzRmW76 hC7i6AQf45qT3j5LRNxLgY42odsBkon9lrpCuFiW8VdWkWJo0psM+cy6GqQkCzd2tnOl kr34T7W6lXAYoACkt++uGqmeK5neqEYKzW9Zn6kwjJ+IQmdj+zekeNbLAZOiyH9nwgxu eeh3lsdIp7s9IzwRm5jDjJil/fPcFgdX1k9z6IrfjSKFWgXQef6O+hNVSijXLU99RQY3 WxejnfCaYYLLwI8opp2KzHYVHWfvaQVOd0NsF53kVUj8X47X1x9+cWu+0boKGg+lAEbs I+Ng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768793329; x=1769398129; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=HMXELTh73T/FqcWvF/yPL2Xnmaqf2ybpkYLwr3NQgvI=; b=eYH7ku0a6dMwUfHeGBILv7jxeJuvhdc0XmL4svD+T3hIpK5i6yoo/kdGVXf4QvVqIF JGS6E9qb6r0wxzYYV6hOCk2sdbiOjXR6A01L2J1YshC75vhgpetHa39/PeKXYBSkW+UJ 4Sy5h1LEOKzNngqg3bvWMsbckKGY98237hM7/tsY0n/qSJvqd7/KDKdGduUOxaUA+XBV k6arkbMS+QhwubSADnW8A/xStomjUd3E/i73S5/INRSCvba3eJMTuGU6eQodaJ0WzD2u /aMNUc1FXF3VU4GK2yz6mtO0o2tJn/fd4540OcfrU48FXQtm/CF65PdfwTiuHhnf903S 8IYg== X-Gm-Message-State: AOJu0YwMkLf7J0gdlfZ1cwWOC+Ppd4uQVvy3BYtIHtwFY1+E8qHpJY3z BuE37cMLtQbYn/VipxHU+4cruSpadkE9e1/+7ra36/cB2YnsaVYKzxl0 X-Gm-Gg: AY/fxX7lDEvtvjRFg1lfGiDAYP2mWXhLG04exG4z1ZUficOk8+xrgVsVUvoDJ0Lsvp0 OYy6xO4jMXyCMQxCGsEWOzBYseOuiZEjyI1Rh3poYF78xjEG6uzhSyeW4OE01mrB+oo58yOxZae v6GdTYrFkxjMHmJQW+D8KWIUffL4dSaDD4SjMsIDwsQKeM9tZl+OoELaKaAeNc5RZtGnjFq1Lkh jzTVMMTP1Yc4iNxQTlwA8o8Lf1vZDhEZqILJyWS2dUvLba5H/6tPGuuBEwibl7hS1FUpEe+S57k MdPUCu2xH7MDPETg7PmnMRVbJVbfNJ6JPaIICtivZR/TzxvZ0ZGM4Gn9k+s64Y7WHBaZaAolQL4 jdQnL/fqOjdN4K4yeH32ej56MOBvHfJ0BO0xfuhTt8/8BAa4dM35v3frB7CSuRN/tyBjqEIBhXv ywM7d3P/Fh1w27+b8xJI9i4bJDIRMxriTXPv52ZsPS X-Received: by 2002:a17:907:97ca:b0:b87:d09c:182c with SMTP id a640c23a62f3a-b87d09c1a61mr236340766b.21.1768793328575; Sun, 18 Jan 2026 19:28:48 -0800 (PST) From: Filip Hejsek Date: Mon, 19 Jan 2026 04:27:53 +0100 Subject: [PATCH v6 10/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: <20260119-console-resize-v6-10-33a7b0330a7a@gmail.com> References: <20260119-console-resize-v6-0-33a7b0330a7a@gmail.com> In-Reply-To: <20260119-console-resize-v6-0-33a7b0330a7a@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 , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1768793314; l=1842; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=dQSyY1EivjruPsWTiEY+498atfS47c91YdJNmIagRdU=; b=Y50NTGPmojPnxbnUzlk9Vl6GfNs2xDelDUVoLvu4nSYn+YdaZ7RHOC7K+NgX7ugZVFmND8YEY yX155uMrlfKDkW+FdtlNc252mWYbbEIFpogb4o95rVevpZtCeExZpCj 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=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::536; envelope-from=filip.hejsek@gmail.com; helo=mail-ed1-x536.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: 1768793867070158500 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 fb802a00b1..0d33138d0d 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 char_win_stdio_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) { + char_win_stdio_resize(chr); + } } } =20 @@ -202,6 +219,8 @@ static void qemu_chr_open_stdio(Chardev *chr, } else { dwMode &=3D ~ENABLE_PROCESSED_INPUT; } + dwMode |=3D ENABLE_WINDOW_INPUT; + char_win_stdio_resize(chr); } =20 SetConsoleMode(stdio->hStdIn, dwMode); --=20 2.52.0 From nobody Sat Feb 7 09:30:02 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=1768793823; cv=none; d=zohomail.com; s=zohoarc; b=K24HYPBQMz+s6QdrT3fZZtA9Qm222fdRPOTHfP4eVMTyXGsqFyW5+sr4aFnJqnvhUr+m9Kv2qXbEAr06i0ykfy3Nn2qhoInzlL81BMA5YpCJhDuOeY+4+kcYn+TRQufkPHeCLbeLCJFVN6HEWf/ggd8v5eyZsuFTEcpBBqrrdzc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768793823; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=EYJLV56iBM6f2CAPR/OaWTgYNek6WyVhOLZFWs67dfY=; b=S2zzGI4HXZfvEgnRiVM+X/nUR08JGjFYWnJ35DWPiIyfeGROaByYhJBPmqBQ8ztwdbHXYbV+Z23enZVEtSJtYJyqK3Haz1Jq7mKcX/Y2EGPAcyu1ofE6c3VxAthNizYqE5iktUoA4+2zo37rXvWR66kL/RMTA4QzmAx9F5uGVAs= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768793823137554.2189858865629; Sun, 18 Jan 2026 19:37:03 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vhfx7-000769-9t; Sun, 18 Jan 2026 22:29:17 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vhfwm-000747-1T for qemu-devel@nongnu.org; Sun, 18 Jan 2026 22:28:59 -0500 Received: from mail-ej1-x62b.google.com ([2a00:1450:4864:20::62b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vhfwh-0004CY-V2 for qemu-devel@nongnu.org; Sun, 18 Jan 2026 22:28:54 -0500 Received: by mail-ej1-x62b.google.com with SMTP id a640c23a62f3a-b87693c981fso660347566b.1 for ; Sun, 18 Jan 2026 19:28:50 -0800 (PST) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8795a31bffsm971514166b.68.2026.01.18.19.28.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 19:28:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768793330; x=1769398130; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=EYJLV56iBM6f2CAPR/OaWTgYNek6WyVhOLZFWs67dfY=; b=T6hGO8rkxYXU5mW0pl0CkUZwXd3OaIy64ErCcR+Ltxw4DtjzJ7sDOA7YE877dlkHqu 0p2NOzYXlVBCWUrHBEPrelazGx5Ss85y4OPTWhJUcClBYTRwonfQS8k3ddBqpFTWOQrK NmgU44H9Hx64wQUzB5ay/PPKkHJ/ofscfgMmS95pf5ZdWk24BG4OPwTNHktKKWheF4Ml 9pQSX/RUiweX9rc8N5WNiG2IaZkVmkWLS82q0gjgNYSF6pgOfTjyIxDEl4X5Om3AOWR0 mHYKDBgvVfJcqCHmgboFXOkd/3yp5SMbA0xzgBndYecq5KLUzbeF+CHtXjn09KADTh8b 7FJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768793330; x=1769398130; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=EYJLV56iBM6f2CAPR/OaWTgYNek6WyVhOLZFWs67dfY=; b=YsoJ4+ABFqvxOFA6BIufRMGP1CHPmJVKpeTJpbUmMKDGg7TOCexAFlShROX8c0DDk0 n1AdBGogMUHQCY4Gx0nJm5/WQ5d2ZjDZwZoIGmAfUIJ55dImkkgujJsCFbJd5F2D4KMB QffY8dLxfvAqvsFp9X9a8NKksOWquSQC1j1nTmFIeGEURFh4De1UHud/om6geOxnonTS Q/mmINqUndWovVF+h67HHZspVGsFRyC9mM87VOUXytAiYPTC8594iq1okBwx7W27isJP M+GyrEa4xXbifUnaMjVtdoKkep5pLAPu+4oms04qlU7tYMWFrvUc3H/ix7Zo1u3TDjzN Fhsg== X-Gm-Message-State: AOJu0Yy3rZuklPRFgai1aNB7Zdx+5me7ifT4BXTxt258evV/IcYbmdjl tY1jvwoqwDGn724KEoCunT731D39HIQ5JB+Dwm2KYiiKeHqfB2Lb+yGV X-Gm-Gg: AY/fxX78O8NwRNJk8au+l0hssm6KAyVJXzqso4c6OCWwdr6Jj/0OmZyl7cvqjxtvhOl 7X/QzWodsl14Q3R7z6H3J2Ri14jIPPDkrrkgUWD2sRTr0cuQhBxNpLr78BxsGFak3xUr5s4+c/X 6W0Lc+DNSGrCWI5/fYRerwof2PQo1pfv3qMAbhXMenuVQ37XUCVKi0QnjLYu1jbEGhHv2y+TiKE m4sqTgzZmWV5nB1vbvfBdng4XttaPUoeTjF9gOilJ2a882zM60Nmh5WMiFRR8vSUqX+4PG5MDLY hZftwGL9DH+729PCzZCrDoK61gcO1WC5L9+3L6NNqMB981f3IzuiFykuzG6IqA3T5FT4IUdXdn9 CrQwpZvMXsi0KIPL2zBPElKVAcF8Zl0F7F6+GD8FLtUAjiF2BGiLPBzKQ+dl6eT7VdMKJZvsZjX t3rKNpiXOTqfwu0wJLA0honBlKWWAtcxW+uwYbcwhf X-Received: by 2002:a17:907:2d13:b0:b73:210a:44e with SMTP id a640c23a62f3a-b8792f79a90mr837146766b.30.1768793329605; Sun, 18 Jan 2026 19:28:49 -0800 (PST) From: Filip Hejsek Date: Mon, 19 Jan 2026 04:27:54 +0100 Subject: [PATCH v6 11/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: <20260119-console-resize-v6-11-33a7b0330a7a@gmail.com> References: <20260119-console-resize-v6-0-33a7b0330a7a@gmail.com> In-Reply-To: <20260119-console-resize-v6-0-33a7b0330a7a@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 , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1768793314; l=985; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=Dz/ZVAAQqNSBQH68WEO3GF5YMnfs80jcIVMunKrAJOw=; b=EXu4DLD+p8RNBQmUAHb6xDDI2VJ3WKRF/vMGfhSxjI8q7rVHdAK59I/eJVr+dMdBPh/RCdD5n t3SVGrnqMQ5B1U6slU5YLpziopNYZwW19XJPiBSojMTdQYxPFziLKGC 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=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::62b; envelope-from=filip.hejsek@gmail.com; helo=mail-ej1-x62b.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: 1768793824906158500 Update the vc chardev size when the size of a text console is recomputed. NOTE: It seems wrong that the dpy_text_resize callback is not called when the size is recomputed. I believe this is a bug, although it doesn't matter much because the only user of the callback is ui/ncurses and it only uses the size of fixed consoles. Reviewed-by: Daniel P. Berrang=C3=A9 Signed-off-by: Filip Hejsek --- ui/console-vc.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ui/console-vc.c b/ui/console-vc.c index 830842064d..a3a90440d5 100644 --- a/ui/console-vc.c +++ b/ui/console-vc.c @@ -414,6 +414,9 @@ static void text_console_resize(QemuTextConsole *t) } g_free(t->cells); t->cells =3D cells; + + /* XXX Shouldn't qemu_text_console_update_size() also be called here? = */ + qemu_chr_resize(t->chr, t->width, t->height); } =20 static void vc_put_lf(VCChardev *vc) --=20 2.52.0 From nobody Sat Feb 7 09:30:02 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=1768793765; cv=none; d=zohomail.com; s=zohoarc; b=cdHBm1BNdsun/csFzs7EVBtf0YFOKJ/g4Dz8V314jhzFD6RYWoLHkydoAh+Rq3JhZm58zWZFc+l7Sn8TmbRKYLl6qiPr+8QiiKyPkwBVKOu83o2nhX8363i9kgthf+lRQUsfFSHJGAfkgucED2EJLVEAJPMbI+ZJ0DMZwaMR38Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768793765; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=3ccX8SbNnP4SV6GDDNR9pdOOe2R1U/S1clK/q9e/aU8=; b=lOPBd9JsqZcjlGpxMGjpSRa2MppOlAZiuI6+XLgheKNxm1xkMd4B417Fp5APF/Ke6zKfNIIWJQjtOHYvjA5YqhEMIlOeRXgE6t+oqcBSV7rop6Y7ZK5Kb8IvGChEkgoplLQH+brkbnh+7T2zIRfHjEbILgyJ9HLZNlFm4hHpoDU= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768793765314260.7949153801079; Sun, 18 Jan 2026 19:36:05 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vhfx1-00075L-Ci; Sun, 18 Jan 2026 22:29:11 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vhfwm-000748-2z for qemu-devel@nongnu.org; Sun, 18 Jan 2026 22:28:59 -0500 Received: from mail-ed1-x52c.google.com ([2a00:1450:4864:20::52c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vhfwi-0004Cg-AE for qemu-devel@nongnu.org; Sun, 18 Jan 2026 22:28:55 -0500 Received: by mail-ed1-x52c.google.com with SMTP id 4fb4d7f45d1cf-64d02c01865so6496042a12.1 for ; Sun, 18 Jan 2026 19:28:51 -0800 (PST) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8795168ca9sm966509766b.15.2026.01.18.19.28.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 19:28:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768793331; x=1769398131; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=3ccX8SbNnP4SV6GDDNR9pdOOe2R1U/S1clK/q9e/aU8=; b=jb6nnph8QcJxt6Ixcqk9+V4wUYWQNEkrlQKS4Cfn03swfMwGHfQ9JPX0CHTt7cIerJ wVX+3TEKiQ1ocvjd/QJo/l6FHfcp4Pyw5JW7epOj7N5ajcW1FDEVOevkzF0DZIdB+5px pXSQxnqnEcp/WmJYmqZSITAaN+6do2NDTXH2gbCoKCIrOoxPU6w/9ARJ0z6qa3/HpI61 8q1eCx8lfuCNBZ32FJWWSq2qgU/wA+mGALLyuIcgb+ECTUKS8aPpShTbVlnKpyQOFSlL /GIN43gmqpkQdnMRBMqGuPVqbZAcQWLmITGZFWAFsypPhzFYjz2hcS3tUAQV0ppgSZuK OYDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768793331; x=1769398131; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=3ccX8SbNnP4SV6GDDNR9pdOOe2R1U/S1clK/q9e/aU8=; b=QaXtH2EC1E45Az3nn7sdaZvzOfv/TztSARY+Ggw042AnuMgxcRrT8Aix1xax7+jv4a jtq7Ml2+LSxxtWWooNPUOG7KhuLFLjYdilO7RsmkWOEbiIJ+NXQdMLGGzYG/6cgTaNhL S2NY4DDDVFikpLHUCAmhWmXRHWlNuYoJ5nMYsZFz94Jot8dO5h0M8uvadJZRUrnDJiOo zVVfJ3xLydOwATlTRvAJ2rFvDzw3NdXStv/2mNUL6ZTEBF5SQl7J/BSxiPK5jflf5qMO 9xpSTXfHqmHqYjGWBlgW+eJ02A6AjBJMmAWEohocBatY2e0bb+ch7Gq30IyPP7LtY0h7 KkYQ== X-Gm-Message-State: AOJu0YxZHNrIG6Sz5A1lhcJAQ+VQ+BWbMgVRWNdAsqewjo5+uLWTVFly 1if9vTOEKLcSuzvNAm5Fy9g7QtVzGZ81qBXYYD4H24RVCIJ336I4qcAu X-Gm-Gg: AY/fxX4kthGTsaOslZ+UgC174148uSbTprxt0M3Lpw8GJr2gPwgknB5WElqugIjY0cj DYrkWQcjGnoT55/4QbvaqNvZ8abfEJDtqfwrL+NpORTaYJHMT77V4eIPhX+3CChWpuU2Yo8Y89F YxyiHVXVuV7wGaNgEZpgxSwmTPsMe7u9qH/E/5A99YLRvfRMORrGaNUc4PXVU5ANAc9BZ8wR70L CCLX3PPgmTL/Dnk0ta3aI/C6GVRpPvTzxjJ+QTecbn8lcizg40FpP9AZUdTJWacETqOKIg5Z5Hk /y6OnxQG1mxts9qzTY9vd1vnG2/oG+7a4iP2LfNgQdHQ7rJ5OKQb0ANGhTgaz9JfKuV4w6PEJgn 9M+ItrScGDay3jiCS/9wfW98Zq/rxfEzJcdlwJybU2mGKbDCqJXW7xBLnOB2fLAIc/6/9EFcOfd JZl9fM7J4AnXH3ful9RgYD6rsXrhiz079ddu+CqtzRnsJooQjGp/g= X-Received: by 2002:a17:907:2d9f:b0:b76:49ae:6ee6 with SMTP id a640c23a62f3a-b87968e2ff6mr870006866b.15.1768793330664; Sun, 18 Jan 2026 19:28:50 -0800 (PST) From: Filip Hejsek Date: Mon, 19 Jan 2026 04:27:55 +0100 Subject: [PATCH v6 12/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: <20260119-console-resize-v6-12-33a7b0330a7a@gmail.com> References: <20260119-console-resize-v6-0-33a7b0330a7a@gmail.com> In-Reply-To: <20260119-console-resize-v6-0-33a7b0330a7a@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 , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1768793314; l=2089; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=onVJev5hnhhvDji7FBeNtwJXm35eSOe23V9pX3vYCpw=; b=1rmmpafUxV+d1rso7iajSxmc8ch24IJuraZR4/1OFphPEMarjSF4ix1eYjM5BDMbU6UaigB81 De2lcQLNw96D9plRP+803s4vQCyaX/AUJ0MzQecDjK1FKlOPftNgpC+ 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=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::52c; envelope-from=filip.hejsek@gmail.com; helo=mail-ed1-x52c.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: 1768793766997158500 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 e83a366625..471528362f 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -2029,6 +2029,28 @@ static gboolean gd_vc_in(VteTerminal *terminal, gcha= r *text, guint size, return TRUE; } =20 +static void gd_vc_vte_update_size(VirtualConsole *vc) +{ + uint16_t cols, rows; + cols =3D vte_terminal_get_column_count(VTE_TERMINAL(vc->vte.terminal)); + rows =3D vte_terminal_get_row_count(VTE_TERMINAL(vc->vte.terminal)); + qemu_chr_resize(vc->vte.chr, cols, rows); +} + +static void gd_vc_size_allocate(VteTerminal *terminal, + GtkAllocation *allocation, gpointer user_d= ata) +{ + VirtualConsole *vc =3D user_data; + gd_vc_vte_update_size(vc); +} + +static void gd_vc_char_size_changed(VteTerminal *terminal, guint width, + guint height, gpointer user_data) +{ + VirtualConsole *vc =3D user_data; + gd_vc_vte_update_size(vc); +} + static GSList *gd_vc_vte_init(GtkDisplayState *s, VirtualConsole *vc, Chardev *chr, int idx, GSList *group, GtkWidget *view_menu) @@ -2094,6 +2116,12 @@ static GSList *gd_vc_vte_init(GtkDisplayState *s, Vi= rtualConsole *vc, =20 qemu_chr_be_event(vc->vte.chr, CHR_EVENT_OPENED); =20 + g_signal_connect(vc->vte.terminal, "size-allocate", + G_CALLBACK(gd_vc_size_allocate), vc); + g_signal_connect(vc->vte.terminal, "char-size-changed", + G_CALLBACK(gd_vc_char_size_changed), vc); + gd_vc_vte_update_size(vc); + return group; } =20 --=20 2.52.0