From nobody Thu Oct 22 19:24:51 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=1791813932; cv=none; d=zohomail.com; s=zohoarc; b=OUVYpdekiY90PrG+Gk2vmQs+5uxR3wMvZXFvM3Dto+Yk/KOQI1vQIsbSCFTahOSXxV09tjgkMVcaxhLUA6EwugB4YUPQehXYgxESYUkVDQCpSGhFChm9z6SGCkROawZ3/O18cJhvHS4aN7YQ//+mNfAG8mXHb2Y2RXbkRJ0MIF0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791813932; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Db8kX/ZEk2mJULI24xKoMiCcaFqHTqsMQFyoHrvdHmI=; b=VdFlxvsJtyQ46SY0LQWNLnx8HPfLbutCuKeV1nytrFqx35p/CR9PJGAnBi4sbgn9gpAoiFLkRD5PjJXW6BOVW5oDjSoNFEIdFlaUvVWLOHhwl4FyLcPoB5UEwyw2npl8q2QnQjVqfaD/AOkKQ2DW6MRoUV9qnvWM+NloBsmcSNs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1791813932708112.76183219020095; Mon, 12 Oct 2026 07:05:32 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGGeW-0008W1-33; Mon, 12 Oct 2026 10:05:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1xGGeR-0008Vb-Cn for qemu-devel@nongnu.org; Mon, 12 Oct 2026 10:05:15 -0400 Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xGGeP-00066S-BF for qemu-devel@nongnu.org; Mon, 12 Oct 2026 10:05:15 -0400 Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-4a0213948d3so11983315e9.2 for ; Mon, 12 Oct 2026 07:05:12 -0700 (PDT) Received: from localhost (ip-78-44-39-34.bb.vodafone.cz. [78.44.39.34]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4a18e49792bsm468029425e9.4.2026.10.12.07.05.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Oct 2026 07:05:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1791813912; x=1792418712; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Db8kX/ZEk2mJULI24xKoMiCcaFqHTqsMQFyoHrvdHmI=; b=bImWg4lIKsEGTD6qPmpCIEholMmRLY3sZ/e5VQeVgfcJAtxtGtQkjIJ97bpLX6n0q8 E0TIR9eZY+RdMSQP9ZY0hj5PhXSnEg8JfyDlQUnNrAGy8d6JOFbQMtk1jbPZAfTF5U6t 0iOTG8EAoQ7FuzKKdWXlm2zEmzesWvkYgFbV1cGsecK0OigxOz4S4CDKLMqw+k2cx4f/ kwbGlDJieKf9+yqTh2t1e8ETMBTt4QDM0jiQeLZET9JRtXBlaqYK20SP/y7EfzmzODY9 v255Q7I3fjD2uoORBYWVboTdazs/tsaTaQE6EOgVGkQ+eYMzPB83MtG527obMY78mFFj uqrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1791813912; x=1792418712; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Db8kX/ZEk2mJULI24xKoMiCcaFqHTqsMQFyoHrvdHmI=; b=Yqfq1cuhhfRIX9qiCMtLUxDBIE70LbtYyq6Om0PLNM3L9myRhVL48W6w/eAeFklgrY eT/E0fiVBghfW8U/dA6jNBeeBhpFKCCdWcrPY9QCpWY5lOfIZO0XFIrP2+NO7ipR0gna L7HjwuqanVPCZtrujQmoygqvlCTo7UWcTh1f7AHGKZ0Ky7xMSMPQXM4TJHMe+8r8QiJX afYKABvJnQk5nGp6IgUiN/wQCAbgvdi5pTC3K2nV/OOKt9KiXzpe17x1MH29OYp/+NqY zJ+I6G9pVLLOSCroa3Sbw3vctKX+o843UA4PqA5zvHolp1kRlxi2P8nc0i5LL7GT0CJF NwEg== X-Gm-Message-State: AFq9FYLuS+L868pjeYecDlY+mur4uK+xYHSDOXwEo5fzuwM6V9eEBdxY XyYvfDHitWeExGT0gswlhYVQwdly8xZuKJ9GVXcrpXhtaDRcXw3XR3lL X-Gm-Gg: AYBFou1/ksJsOc3qAz9LjiXZTq+GMIXhJ6u9mUZ4MiwMxAivRybjT1E8dS3bfM/t5Uw /A/ciFg2vGcMmu8SlB/DDmAdDyPAprgYtwYiB9LLMMpqFlt8HGQDl0+XiR3ZKOKWLT6j2uCKdb6 bAzJqFsdx4V1OvtlRH45+y12j95hpVrV3SbmPvMfpb1HswtY+vODHU/YG0C+cvrjjwYE0M7JYMj SBs5fYatALCXGO59Xuq05lESv5TIetbMXnyNGRPX3zmDuykqtjmmeeL/aNg/30bV7w0bVLfECId ifrGQoijOPRO1SkNkMwPI63IUV+s2AS/vg83szmJsVSw3YqFsORBxrdfaLB6VtZdo6kG/JiHkVj uBg6k40CPPDYlk2iFzAdeCiXMduu6kaX6V19fReRktiIIGwvOSEfSfeKRmNQIkvCR2BG8tR6q8j JbrajK+kvuOYchxSFjILO8k/n4nyIWazIBTHuxJH/n6wpf1WlSDjNWhMFYZDAri8ZVJv6dqHrch gMQH1ouXceuvhl9MNsOC/48kA== X-Received: by 2002:a05:600c:6208:b0:4a1:698d:3042 with SMTP id 5b1f17b1804b1-4a18e493143mr168032605e9.6.1791813911706; Mon, 12 Oct 2026 07:05:11 -0700 (PDT) From: Filip Hejsek Date: Mon, 12 Oct 2026 16:05:00 +0200 Subject: [PATCH v10 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: <20261012-console-resize-v10-1-2c3b10d829b3@gmail.com> References: <20261012-console-resize-v10-0-2c3b10d829b3@gmail.com> In-Reply-To: <20261012-console-resize-v10-0-2c3b10d829b3@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , Dominique Martinet , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Szymon Lukasz X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1791813907; l=2201; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=ISuMkVQZLr6aTSdzOIY+Zeiyr6PJh/I1vLVNp++Psys=; b=DioqHdsW3kovs3T2HRtC6RlM2ZFGhGpX2/m5V0HgZlgIRtlxatlqpC9NcEqp/vaXvce1veQ44 0UOaEaGJAgVA1x1u51vdkpQQJOvVlgbgwXbxXrwdUeswaA0ZwY4PJ5o X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::336; envelope-from=filip.hejsek@gmail.com; helo=mail-wm1-x336.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1791813935175158500 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 Acked-by: Michael S. Tsirkin Reviewed-by: Marc-Andr=C3=A9 Lureau --- chardev/char-fe.c | 13 +++++++++++++ include/chardev/char-fe.h | 10 ++++++++++ include/chardev/char.h | 1 + 3 files changed, 24 insertions(+) diff --git a/chardev/char-fe.c b/chardev/char-fe.c index a44f267373..c61c91f779 100644 --- a/chardev/char-fe.c +++ b/chardev/char-fe.c @@ -329,6 +329,19 @@ void qemu_chr_fe_set_echo(CharFrontend *c, bool echo) } } =20 +void qemu_chr_fe_get_winsize(CharFrontend *c, uint16_t *cols, uint16_t *ro= ws) +{ + Chardev *chr =3D c->chr; + + if (chr) { + *cols =3D chr->cols; + *rows =3D chr->rows; + } else { + *cols =3D 0; + *rows =3D 0; + } +} + void qemu_chr_fe_set_open(CharFrontend *c, bool is_open) { Chardev *chr =3D c->chr; diff --git a/include/chardev/char-fe.h b/include/chardev/char-fe.h index a82894e1d5..e4a3801e7d 100644 --- a/include/chardev/char-fe.h +++ b/include/chardev/char-fe.h @@ -168,6 +168,16 @@ int qemu_chr_fe_wait_connected(CharFrontend *c, Error = **errp); */ void qemu_chr_fe_set_echo(CharFrontend *c, bool echo); =20 +/** + * qemu_chr_fe_get_winsize: + * @cols: the address for storing columns + * @rows: the address for storing rows + * + * Get the size of the terminal connected to the chardev backend. + * Returns *cols =3D *rows =3D 0, if no associated Chardev. + */ +void qemu_chr_fe_get_winsize(CharFrontend *c, uint16_t *cols, uint16_t *ro= ws); + /** * qemu_chr_fe_set_open: * @c: a CharFrontend diff --git a/include/chardev/char.h b/include/chardev/char.h index 7377d8e60a..6394ec2ffe 100644 --- a/include/chardev/char.h +++ b/include/chardev/char.h @@ -66,6 +66,7 @@ struct Chardev { bool logtimestamp; bool log_line_start; int be_open; + uint16_t cols, rows; /* used to coordinate the chardev-change special-case: */ bool handover_yank_instance; GSource *gsource; --=20 2.56.0 From nobody Thu Oct 22 19:24:51 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=1791814023; cv=none; d=zohomail.com; s=zohoarc; b=WJbpxaKPNabyFUWKOjpLG5i+ebesMDqAoOw8MuWOWlyUoMbGJ3Xul78c/3mTlUu7OuUEwo4KW4/JYH5D9Yg+AGJBhRSP5ibWDXIO5g5s+pbcmYTlX1cJFonSGOfFdQkkYGeVn5fSgkZVTwe/tFW1sGxZqMHS6Wyt2o6p5xYHLp4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791814023; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=3qc+m3TuYOGQD0I78puHWALWD7CmUetuHlHfjJWUiIg=; b=jsLj8ntRwUykLVd6tuv9cJLNjeL/dEUZZBxwBHqTqTYYUCa/EqE1sa19Y0dPsBk0h3GLXeBa3dNp3bzRU08xSNn2Vp5kzWUbu1Ukz7hPVX3qXBBoEeh0gSczuBpCljkp9ZeSUvmNN7Z5xrTY0qwzjgY/dTc8FiDpkICvizCW+sE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 179181402372338.52839143753522; Mon, 12 Oct 2026 07:07:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGGef-0000GB-CS; Mon, 12 Oct 2026 10:05:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1xGGeT-0008Vt-8c for qemu-devel@nongnu.org; Mon, 12 Oct 2026 10:05:17 -0400 Received: from mail-wr1-x42e.google.com ([2a00:1450:4864:20::42e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xGGeQ-00066u-Rh for qemu-devel@nongnu.org; Mon, 12 Oct 2026 10:05:16 -0400 Received: by mail-wr1-x42e.google.com with SMTP id ffacd0b85a97d-48bbb06e746so1125227f8f.3 for ; Mon, 12 Oct 2026 07:05:14 -0700 (PDT) Received: from localhost (ip-78-44-39-34.bb.vodafone.cz. [78.44.39.34]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48db9abd574sm20301606f8f.34.2026.10.12.07.05.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Oct 2026 07:05:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1791813913; x=1792418713; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=3qc+m3TuYOGQD0I78puHWALWD7CmUetuHlHfjJWUiIg=; b=IzJolAdizXpaVfGdY2hqDjtnnSvaY9PQvf5Jf8eiepnOkd+zhOcVgo9oKQaN3gsvW5 kH3JkfzHQr8ozgaRa8dvgZkGlDKSDe6tXhL1Mcr69aW5UGk2kwxY87tnR5Z3/1Mp/BRM tneGjB3lyo9TJWHKFOslYQWBsHBVck4uBlWWrwrLw7NFqv2IKCnAUF3uNxUULmYZqF8d 0JAykt08Yr8zLO+gG4EdbvNqZ8jAw8f/RpGsWUEEMYYRrw2WT6UiFwNvplJ57tQ79K+G 6mzvyyjw/CSGmH4HlCjHHi9pnmXiDEG9XU2tNYn+9raFNuOdAAlBqZ6Zs65DmWq3yitL OC4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1791813913; x=1792418713; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=3qc+m3TuYOGQD0I78puHWALWD7CmUetuHlHfjJWUiIg=; b=JE3LogIv27kavqK7lwxMYITKQUp18sHPU89e8PmHED/dH3H4Skx742FNA8OPG0TMuD SupRIB3oBI1QvQGilR2He6DjqukZ3GAmc2Zc4oPMCyh+Hpxgfn1BauOHMcAbLSBN/HHd DdB+/RLRCKwAIBX/o5xw93VD+QXeNyRzB6milJFPTNdSoph4TxFSl9IJQ4C9qpKwzNU6 OgVHRA6eXW0zKkbFjPjtLwOoD9pqtVHbyilXNZNMt1jzD2ksqPvnWMQRELeB8sNMrj+e N5GM9fkk1/WJFtJFgE6wXor9jcD5C7ikjNkvDaEc4fQxVElQT7Eh6rCwNEboUIJEQn44 4pkA== X-Gm-Message-State: AFq9FYKwkXZMFkqvxHUeG9RpR/nUwg5/1EAjxnuEkMrzAKJpzMR9ivvu WXq8ArD/tGw1FBq9tYM6BahXpkw37kc/oC+kjnJ5wl7fXX84CY+TomeM X-Gm-Gg: AYBFou2KwsNbLrAUVEYUvyB3NZz3m5OEcDOARt4xvv8GdIHhvBdzuYiw1h5Cg6ew//Y Ej2q1hCoLmDMPcPchxZs9d0bnEF2Va+19zdJL27H7UFprh9IKLpniicqhJjPTL4JTwdVvK4h3JM PVyq2JQqHxXDPTT71oUkqfv0Eu7GF35e4JJhD5v/xp52c7t8J97+vTOlD/WFAo3/kEB5/doSFGH Kqn73YUhfAdpQhcb+G/P8NPCOqvuigdwxFJ2qWz+qdNsO4YX1sHgGFPHh2hu3l8+N6Y3I1dYv6b TycxKl72vSAMj28Wa6PumX5g46PkJsvojeifj7daR2dAyhu2iW111lAo5EmgerqM9pgmHAu3tZY 9uR2iJTzqyXnW+U47qVoxZmxqBUs3Hwgmejxfro6uabfwd25QgVDiLufEQ7pLKwICbVN5lLj0sE CJfh9wKQlFm9QzfjQ/DHRT/UObwLCZUwJkDsJ8LEJUFcRWyg5Cfq/EhgKKTHi1AON/Stjuem/Ii QFWq3XaacCJzHtAUU8JjFEu/f+bESw2JclN X-Received: by 2002:a05:6000:41c8:b0:488:8132:141b with SMTP id ffacd0b85a97d-48dba9bdc8bmr17747359f8f.20.1791813912952; Mon, 12 Oct 2026 07:05:12 -0700 (PDT) From: Filip Hejsek Date: Mon, 12 Oct 2026 16:05:01 +0200 Subject: [PATCH v10 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: <20261012-console-resize-v10-2-2c3b10d829b3@gmail.com> References: <20261012-console-resize-v10-0-2c3b10d829b3@gmail.com> In-Reply-To: <20261012-console-resize-v10-0-2c3b10d829b3@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , Dominique Martinet , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Szymon Lukasz X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1791813907; l=8913; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=GU1RCEPjAeOZRrN0OqfylK7FcG0ExiEXC1iG5jiUuaE=; b=a4mfaqD3lVx/KT34Esj6gy3AGmgVUOriE9tv0da0hcDPGgIzdvjg1lmcfvCpWM3wT5aCmKQa5 Uxxo5Qqb/I+CTLwsPGCmWEu7w5csX/N4fnKGzxUeH8qTHlLtP7uVxOY X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::42e; envelope-from=filip.hejsek@gmail.com; helo=mail-wr1-x42e.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: 1791814025923158500 From: Szymon Lukasz Add a new chardev event, CHR_EVENT_RESIZE, which a backend should trigger if it detects the size of the connected terminal changed. Signed-off-by: Szymon Lukasz [Filip: add note that only the focused frontend gets the event] Reviewed-by: Daniel P. Berrang=C3=A9 Signed-off-by: Filip Hejsek Acked-by: Michael S. Tsirkin Reviewed-by: Marc-Andr=C3=A9 Lureau --- backends/cryptodev-vhost-user.c | 1 + chardev/char.c | 1 + hw/block/vhost-user-blk.c | 1 + hw/char/terminal3270.c | 1 + hw/char/virtio-console.c | 1 + hw/display/vhost-user-media.c | 1 + hw/ipmi/ipmi_bmc_extern.c | 1 + hw/scsi/vhost-user-scsi.c | 1 + hw/usb/ccid-card-passthru.c | 1 + hw/usb/dev-serial.c | 1 + hw/usb/redirect.c | 1 + hw/virtio/vhost-user-base.c | 1 + hw/virtio/vhost-user-scmi.c | 1 + include/chardev/char.h | 6 ++++++ monitor/hmp.c | 1 + monitor/qmp.c | 1 + net/passt.c | 1 + net/vhost-user.c | 1 + 18 files changed, 23 insertions(+) diff --git a/backends/cryptodev-vhost-user.c b/backends/cryptodev-vhost-use= r.c index 3334e280a2..b0e325e47e 100644 --- a/backends/cryptodev-vhost-user.c +++ b/backends/cryptodev-vhost-user.c @@ -173,6 +173,7 @@ static void cryptodev_vhost_user_event(void *opaque, QE= MUChrEvent event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/chardev/char.c b/chardev/char.c index 9da0911e50..40d2180ce7 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -75,6 +75,7 @@ void qemu_chr_be_event(Chardev *s, QEMUChrEvent event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/block/vhost-user-blk.c b/hw/block/vhost-user-blk.c index 3dade143c9..1352a0cf57 100644 --- a/hw/block/vhost-user-blk.c +++ b/hw/block/vhost-user-blk.c @@ -441,6 +441,7 @@ static void vhost_user_blk_event(void *opaque, QEMUChrE= vent event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/char/terminal3270.c b/hw/char/terminal3270.c index 989b6f6ee1..acd754bcfa 100644 --- a/hw/char/terminal3270.c +++ b/hw/char/terminal3270.c @@ -169,6 +169,7 @@ static void chr_event(void *opaque, QEMUChrEvent event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/char/virtio-console.c b/hw/char/virtio-console.c index 4737b9a56e..36ad2ddc3f 100644 --- a/hw/char/virtio-console.c +++ b/hw/char/virtio-console.c @@ -165,6 +165,7 @@ static void chr_event(void *opaque, QEMUChrEvent event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/display/vhost-user-media.c b/hw/display/vhost-user-media.c index 851af8ddc2..3d76aaba58 100644 --- a/hw/display/vhost-user-media.c +++ b/hw/display/vhost-user-media.c @@ -241,6 +241,7 @@ static void vu_media_event(void *opaque, QEMUChrEvent e= vent) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/ipmi/ipmi_bmc_extern.c b/hw/ipmi/ipmi_bmc_extern.c index fa08ed6c21..bd7c61b2d2 100644 --- a/hw/ipmi/ipmi_bmc_extern.c +++ b/hw/ipmi/ipmi_bmc_extern.c @@ -436,6 +436,7 @@ static void chr_event(void *opaque, QEMUChrEvent event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/scsi/vhost-user-scsi.c b/hw/scsi/vhost-user-scsi.c index 5070178dc2..7687f2804f 100644 --- a/hw/scsi/vhost-user-scsi.c +++ b/hw/scsi/vhost-user-scsi.c @@ -225,6 +225,7 @@ static void vhost_user_scsi_event(void *opaque, QEMUChr= Event event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/usb/ccid-card-passthru.c b/hw/usb/ccid-card-passthru.c index 5ab7855272..3f4052ec82 100644 --- a/hw/usb/ccid-card-passthru.c +++ b/hw/usb/ccid-card-passthru.c @@ -323,6 +323,7 @@ static void ccid_card_vscard_event(void *opaque, QEMUCh= rEvent event) case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: case CHR_EVENT_CLOSED: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/usb/dev-serial.c b/hw/usb/dev-serial.c index b238cb7937..98d2abbd56 100644 --- a/hw/usb/dev-serial.c +++ b/hw/usb/dev-serial.c @@ -576,6 +576,7 @@ static void usb_serial_event(void *opaque, QEMUChrEvent= event) break; case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c index dfd9e8bb50..a666b1e8d7 100644 --- a/hw/usb/redirect.c +++ b/hw/usb/redirect.c @@ -1390,6 +1390,7 @@ static void usbredir_chardev_event(void *opaque, QEMU= ChrEvent event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/virtio/vhost-user-base.c b/hw/virtio/vhost-user-base.c index 1a377016e7..3cb59fc173 100644 --- a/hw/virtio/vhost-user-base.c +++ b/hw/virtio/vhost-user-base.c @@ -277,6 +277,7 @@ static void vub_event(void *opaque, QEMUChrEvent event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/virtio/vhost-user-scmi.c b/hw/virtio/vhost-user-scmi.c index c4692bd6aa..29d37716b3 100644 --- a/hw/virtio/vhost-user-scmi.c +++ b/hw/virtio/vhost-user-scmi.c @@ -215,6 +215,7 @@ static void vu_scmi_event(void *opaque, QEMUChrEvent ev= ent) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/include/chardev/char.h b/include/chardev/char.h index 6394ec2ffe..ee9f24038b 100644 --- a/include/chardev/char.h +++ b/include/chardev/char.h @@ -22,6 +22,12 @@ typedef enum { CHR_EVENT_OPENED, /* new connection established */ CHR_EVENT_MUX_IN, /* mux-focus was set to this terminal */ CHR_EVENT_MUX_OUT, /* mux-focus will move on */ + CHR_EVENT_RESIZE, /* + * the size of the terminal connected to + * the chardev has changed. NOTE: this event is only + * sent to the focused frontend, so you should also + * update the size on receiving CHR_EVENT_MUX_IN. + */ CHR_EVENT_CLOSED /* connection closed. NOTE: currently this event * is only bound to the read port of the chardev. * Normally the read port and write port of a diff --git a/monitor/hmp.c b/monitor/hmp.c index 488ec23937..7b80d84800 100644 --- a/monitor/hmp.c +++ b/monitor/hmp.c @@ -1587,6 +1587,7 @@ static void monitor_event(void *opaque, QEMUChrEvent = event) break; =20 case CHR_EVENT_BREAK: + case CHR_EVENT_RESIZE: /* Ignored */ break; } diff --git a/monitor/qmp.c b/monitor/qmp.c index aec0315775..eb44012643 100644 --- a/monitor/qmp.c +++ b/monitor/qmp.c @@ -663,6 +663,7 @@ static void monitor_qmp_event(void *opaque, QEMUChrEven= t event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/net/passt.c b/net/passt.c index 45440c399b..e65198960e 100644 --- a/net/passt.c +++ b/net/passt.c @@ -428,6 +428,7 @@ static void passt_vhost_user_event(void *opaque, QEMUCh= rEvent event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/net/vhost-user.c b/net/vhost-user.c index 2d0fc49b4d..b849de92da 100644 --- a/net/vhost-user.c +++ b/net/vhost-user.c @@ -363,6 +363,7 @@ static void net_vhost_user_event(void *opaque, QEMUChrE= vent event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } --=20 2.56.0 From nobody Thu Oct 22 19:24:51 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=1791814066; cv=none; d=zohomail.com; s=zohoarc; b=Ojn15c4gKtNBxggPylELyVIh0TCmHs3jyztBxTsCNn3+mDQdkwZO1mDlio55vVXKtbhesNZIncIG6eoCK812y4J+LqDCECw+3CPT8wtMUSXAsFgF4MdfqN3MBQZNxafulz+ZqrVGkxBNdJ3Hp1a8mkrqpbNEFYn1eNsiJqlhpXs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791814066; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=pNtIniH1QJel5ZvqyD5P6odHkDoTjuMTi4f2c38EAug=; b=dQLkRAYSda+KboDaP/b5HSJ/HueUPNf7IwvH8WXnVtU/pyKzn5E6Xot07CDy5pF91ls24KsoxTwcSs8qImuGMcnaTatqXd15zKs5zgyYYcbwYtdzYlL7fqRGkvDfuZkJ16/Xf61R4rYO2IjK/Jo3OgkaEm98DlH5VCWWJ+znsFc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1791814066714468.2273585799635; Mon, 12 Oct 2026 07:07:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGGeg-0000Gq-CK; Mon, 12 Oct 2026 10:05:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1xGGeY-00005f-3O for qemu-devel@nongnu.org; Mon, 12 Oct 2026 10:05:25 -0400 Received: from mail-wr1-x430.google.com ([2a00:1450:4864:20::430]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xGGeW-00067w-LQ for qemu-devel@nongnu.org; Mon, 12 Oct 2026 10:05:21 -0400 Received: by mail-wr1-x430.google.com with SMTP id ffacd0b85a97d-48c4207ac26so1880108f8f.0 for ; Mon, 12 Oct 2026 07:05:20 -0700 (PDT) Received: from localhost (ip-78-44-39-34.bb.vodafone.cz. [78.44.39.34]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48db9463499sm18798184f8f.3.2026.10.12.07.05.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Oct 2026 07:05:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1791813919; x=1792418719; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=pNtIniH1QJel5ZvqyD5P6odHkDoTjuMTi4f2c38EAug=; b=CO30gmRabW9M98klDZ1yMV2TFy7Hd4mKQolo9oWnjoP8lhK/OL/X7SlkTROP4rleDx 3TgwvaOkrLBdQUsxXKmZhye9Q2CMjqZpufgweuMbYS7m/EeyJ8JNp1yBmPY+3oWMU5GY 6bjfIuW+eTxP6jhCJ6G4Rvw2O9Jyzy0oz4kfwJy0YkjdpqVQwdUF+HhWluH4SG8jp3cY b4cc/Zxl/GCVZtVho5P+L49dz//MltOkCwHrlZwzml9jnt31SeFp6cwjg4Z9mctAryo5 JPljbr39q4loHz1g2V5V2ZxVYQ3AJwviJI+nBGZbUNNdTjXNjYHuuVRS62ljvR7irBzA XawQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1791813919; x=1792418719; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=pNtIniH1QJel5ZvqyD5P6odHkDoTjuMTi4f2c38EAug=; b=sJ/Bc102cCfc6x7NxtMQQ2VvmTa+RyQCL1+yd/wrmOUPkMgqjznJDz6ynoNc2zHFPi 9NdmLDDkIOUAQ9pd3JG6brO2bg1jmZGweJjOQuEnEyfy20IzD2uWS2dyw9jIrn3yvY5Q aLVgeEdmwOLRAhjR3eDIGdjDoda1DswnvGFEZ8Y0MoRpI0tH0lU0en629vNGNLL8S1Ab u2Vx1xBOfAw8+VSGrwFUqo8F4VxzvRwv9CJtZ+PANMXrumD+RKtSXNF3lYJjWZtXOVm0 JRK64EkHpw1q4INLmQxq4QQWi5f1333xbLIF4K4B4uaANto2mGJL6a3OdLG9Jw80X3j/ UHgA== X-Gm-Message-State: AFq9FYKOEOffZbHhVvEM9FEJqvIO/PT+UVC96IvJZzx8KgFhA04hhtDA ouItDtfR2f5/Ra5+2WrfoBvVF6hbFmGVsHNM2KuRQp9NmwklArNcUFTZ X-Gm-Gg: AYBFou1F5odPuXU5GMPXCcWyyRy4c0Mw/ck3705WyP79P8Tn0GYb7fZPoLp0amNvAUr sJT9lE2WDs7iFtRlr0Ne8oB3LinHlRHd4MIiIIZHvK0oAdBaASQ+w1yL2Phdtyxcil+Tiuv8DRd qoPH+XGGW00Wk3MUqDQDPvnHm7mh5bXvkKHEmopn5aqxpDbKjL8zQ+KCjGGtVAP58L1w4WWTULX l8PgGTaIFcdA0go0b7I3DYcfi8EnXN4NVUQFVh7ji2IPDJbxGSxOxQ4jwo0NDmRbo9AgflScQA2 lsc/BBU3zt9DrmHaBcsVaBxnR1DSPd0e2Ut1J9qF7M5lDkFabXwC9q4j/OHMqvRPV0wW7HcYTmt mc6CtGSMBSo5brWwX8UTg6sZWgvquuHilofMgYX1sxPKAWii5tvImN8U6nxgUTwfK72RSnrFvfd jDIQ5P2oPLptVO5akeR6goSw/05nKFWe4SQdhoxdarOP+U8wdiQLvMhKNlYC1KJa8A1oFiWItGp oppL8jDIv/+oQx2+FQpFkk/XpQfqF34pCvq X-Received: by 2002:adf:e011:0:20b0:48a:fbf7:15c9 with SMTP id ffacd0b85a97d-48dba787717mr12394245f8f.1.1791813918632; Mon, 12 Oct 2026 07:05:18 -0700 (PDT) From: Filip Hejsek Date: Mon, 12 Oct 2026 16:05:02 +0200 Subject: [PATCH v10 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: <20261012-console-resize-v10-3-2c3b10d829b3@gmail.com> References: <20261012-console-resize-v10-0-2c3b10d829b3@gmail.com> In-Reply-To: <20261012-console-resize-v10-0-2c3b10d829b3@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , Dominique Martinet , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Szymon Lukasz X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1791813907; l=1613; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=nKK+EFv63K2JxuitDhYbnijeqT/iaRN7xTg5XKak+Xo=; b=qcK2jt8XffbSSi93qUtu0BNDVGoT9n0Agh11yErbpS6AIarvvJm3Wsa9y+fR7sW6WW6H2/CzL fruNoBIRiQiCO5hv9+tzuyvxVS/viThVpdEvHhohJUq3n0kQjfkwd5q X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::430; envelope-from=filip.hejsek@gmail.com; helo=mail-wr1-x430.google.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_GMAIL_RCVD=1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1791814068384158500 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 Acked-by: Michael S. Tsirkin Reviewed-by: Marc-Andr=C3=A9 Lureau --- chardev/char.c | 11 +++++++++++ include/chardev/char.h | 2 ++ 2 files changed, 13 insertions(+) diff --git a/chardev/char.c b/chardev/char.c index 40d2180ce7..8c8386e5b5 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -386,6 +386,17 @@ int qemu_chr_wait_connected(Chardev *chr, Error **errp) return 0; } =20 +void qemu_chr_resize(Chardev *chr, uint16_t cols, uint16_t rows) +{ + if (cols !=3D chr->cols || rows !=3D chr->rows) { + chr->cols =3D cols; + chr->rows =3D rows; + if (chr->be_open) { + qemu_chr_be_event(chr, CHR_EVENT_RESIZE); + } + } +} + QemuOpts *qemu_chr_parse_compat(const char *label, const char *filename, bool permit_mux_mon) { diff --git a/include/chardev/char.h b/include/chardev/char.h index ee9f24038b..2616c19cc0 100644 --- a/include/chardev/char.h +++ b/include/chardev/char.h @@ -235,6 +235,8 @@ int qemu_chr_write(Chardev *s, const uint8_t *buf, int = len, bool write_all); #define qemu_chr_write_all(s, buf, len) qemu_chr_write(s, buf, len, true) int qemu_chr_wait_connected(Chardev *chr, Error **errp); =20 +void qemu_chr_resize(Chardev *chr, uint16_t cols, uint16_t rows); + #define TYPE_CHARDEV "chardev" OBJECT_DECLARE_TYPE(Chardev, ChardevClass, CHARDEV) =20 --=20 2.56.0 From nobody Thu Oct 22 19:24:51 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=1791813938; cv=none; d=zohomail.com; s=zohoarc; b=AOs4DCvq+QZ2oOj1hmQ+FjdTprvtoAF6BCQYqy48kJKae9wD2XLFpdXqYTAG1ODOum/gVsa7umAksvRdjpABxjKXq2Y2z1GN+AHPrRGCMWKXbn0Cgqp4CoFfYiLTNNsjutaIhMiZLLHvoKR3rO387bRdQxU+h5S11maPRyRYIYs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791813938; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=3889ddvtYewtgzDptQRS0YLOr3tptxcTWtw3BhYQAjo=; b=f2kLKDbkWeoEjROMbJSPj/drjU1VO7Lio8gwwIajl2hIrHU79KE08DqVEPEW0ym0MewXQn1y7E/5M1ZpuJaslLZk867iDvwbjt8iFZriRlqrLmPuSuICLiycRSsTdMLvjp46LliqAEelXVbsRqOStq/hhOrRHJDgNi65XU0dFpk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 179181393836947.308297181138414; Mon, 12 Oct 2026 07:05:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGGeh-0000Ib-LR; Mon, 12 Oct 2026 10:05:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1xGGeZ-00006a-BD for qemu-devel@nongnu.org; Mon, 12 Oct 2026 10:05:27 -0400 Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xGGeX-00068A-KQ for qemu-devel@nongnu.org; Mon, 12 Oct 2026 10:05:23 -0400 Received: by mail-wr1-x431.google.com with SMTP id ffacd0b85a97d-48870973bddso1165143f8f.1 for ; Mon, 12 Oct 2026 07:05:21 -0700 (PDT) Received: from localhost (ip-78-44-39-34.bb.vodafone.cz. [78.44.39.34]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48db9462ebcsm20298679f8f.8.2026.10.12.07.05.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Oct 2026 07:05:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1791813920; x=1792418720; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=3889ddvtYewtgzDptQRS0YLOr3tptxcTWtw3BhYQAjo=; b=EikZufbooZ4bXgLVrgGKv1HTmsnOosZuFd68fEkYhhcM062pyTwQuCeP9BfmwVlDTc GIsLCfj01pJcGTY2DaZJhdYvEEWOwHlWnSLBKeH6dHnyT4XLNyiqd5CIrZy5zIr11Eyg 9fKyOyemjScIZIVR70/4hChBxAIRpJlR3fxIz2NioihnotFqpmEOf8h9gMnYiEcMQ9/O 3vJ7H491Vo0s4RbHiyedn8K3mHZ+RfKVlgWvou6/5Dg+OOShPpbk70mOkJNY6llsWgso JjovU7ppvU3R3/WqShmhVClgjr8LwR80b0NUCnjEqvzc/+n7jzA7wBobpRJ7CUA72ycn nGZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1791813920; x=1792418720; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=3889ddvtYewtgzDptQRS0YLOr3tptxcTWtw3BhYQAjo=; b=KgD0e2KLjdO3RmmXZ7ehiQolZIYHoepoojc6el5Gu/Drgi/Owruuo2rC7BTom5SchP AlTpgZ1V2tTAst4+HbuKCIgMvWHR/snz7GdgfLwpnChOryaQIMlvANO8bLHhDsRHIJx2 yuu8ks90lNdS5T7/WaCTyPPhRQsJAjpHBOUPffC+zPJKLZ49lUQKJ/91+R39LFiZ1SJk W4/jQuoM4iJVKFpRQbT7ZcSKN+kB1+bSigQvSmAd/gvbsw8gUJ3hHik5qonei9iF7OU3 PRUq55Iu1XMfiPbkPUDyETuB6NVPpNbSSxN1IJp7VHoIUg6v9bCN3PREuKdH03xDNpUa 4Wkw== X-Gm-Message-State: AFq9FYJwdrSgRj/k55GoXbm7O8z2dpdqBmusvMw3UXBLHY1wjlvUTPnZ KALHU/JNuiic8ZWmEV49xSLKrlKA0aBqwv7BGGKDpN8SRKLZ91yHkpVt X-Gm-Gg: AYBFou0nUTZxkdsXCcJRpWW98LuQSVJ9VeMy9j65Tij5p66aLXCwB2ek0JZpRoRn0rE rbCe5ukPwIVnoe82/2ZNBJAuChhxrT/Mi5k6CCSpR1RmkfUkzYLhIqgASe9xOGbYdFCDy3APdEi wTTe0JDAZgfd1L9FMrjwn8ZRiJYa6dW75iQhpIYpVjrJhx84TFx0fokX/3FarL4++JW83gbfHKz NmXEWsRn4FbZXRkfMuAE+gcr8oe3dwT/wKkbWHZBnN8Wb3HSZ/AN67jrVJ7V5Rpos135kj+TIIe MHNHG8rfD/NdxdKQWYNWn35qGTOBt8VENANrtzQHFGl50q0KEWCFrV+3BpfigDCl2+ujwRW8WoQ pV2wb1O81fjXsqdnpC6l5VaduDQ4bmSRKepuG8O7h7IVlHdHQFLUo1DkRghLVcYv9DNzs6XKn4j 8NrMEZXqTF1fF5BlyDjym7f6ltbAGnh4bp8JHRtWSSmU3hLHZWlC+ufTN0sN7i3NE0usxRdVCEn gk729si0bZHu5geW0xsyR6viA== X-Received: by 2002:a05:6000:200f:b0:48c:5669:747b with SMTP id ffacd0b85a97d-48db9465ffdmr21905104f8f.8.1791813919749; Mon, 12 Oct 2026 07:05:19 -0700 (PDT) From: Filip Hejsek Date: Mon, 12 Oct 2026 16:05:03 +0200 Subject: [PATCH v10 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: <20261012-console-resize-v10-4-2c3b10d829b3@gmail.com> References: <20261012-console-resize-v10-0-2c3b10d829b3@gmail.com> In-Reply-To: <20261012-console-resize-v10-0-2c3b10d829b3@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , Dominique Martinet , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Szymon Lukasz X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1791813907; l=1674; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=hijD+b/Ci5+qYvNQp74WkoQOH4Pd8NDM9yoQj0qQIc4=; b=gTQ2OY6RkGp9T0JEhTxmRGJM+MzSdvU5dLvtf00j5nMcBMvVrMYwcmHW6V5AvFSI2PCURkknH e7yE0vDg2EoDtPaHa0dvtqn4u6SHH8lhnNMDVgsbL+lmHPyRJFqwh5S X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::431; envelope-from=filip.hejsek@gmail.com; helo=mail-wr1-x431.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: 1791813940586158500 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 Acked-by: Michael S. Tsirkin Reviewed-by: Marc-Andr=C3=A9 Lureau --- chardev/char-mux.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/chardev/char-mux.c b/chardev/char-mux.c index 881443d869..5a90f0221b 100644 --- a/chardev/char-mux.c +++ b/chardev/char-mux.c @@ -264,9 +264,24 @@ void mux_chr_send_all_event(Chardev *chr, QEMUChrEvent= event) } } =20 +static void mux_update_winsize(Chardev *chr) +{ + MuxChardev *d =3D MUX_CHARDEV(chr); + uint16_t cols, rows; + + qemu_chr_fe_get_winsize(&d->chr, &cols, &rows); + qemu_chr_resize(chr, cols, rows); +} + static void mux_chr_event(void *opaque, QEMUChrEvent event) { - mux_chr_send_all_event(CHARDEV(opaque), event); + Chardev *chr =3D CHARDEV(opaque); + + if (event =3D=3D CHR_EVENT_RESIZE) { + mux_update_winsize(chr); + } else { + mux_chr_send_all_event(chr, event); + } } =20 static GSource *mux_chr_add_watch(Chardev *s, GIOCondition cond) @@ -378,6 +393,8 @@ static bool mux_chr_open(Chardev *chr, ChardevBackend *= backend, Error **errp) return false; } =20 + mux_update_winsize(chr); + /* * Only move to opened state if we've realized * the initial set of muxes: --=20 2.56.0 From nobody Thu Oct 22 19:24:51 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=1791814065; cv=none; d=zohomail.com; s=zohoarc; b=hSOqHi4pA4GMucfXRX4Fxi2RVkE+APyTc9uBNPkbqvUwSFpSRiLfFCljCT0iCEfJc8o7tFvUCekIsAR8ntT9hmst3mrftoI5lWfU2JgoBR80nTBpIb+lR11zsgz3o4Bnp3Zs+FBuqAkURshhN7W0nwFsLWlAAHkoyIZXImrj6XA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791814065; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=JvLqMsGvjzAWD1K/QlTWpgu40ptVWfQKoWJa7G40lnM=; b=gWz2aWG8N/6ervJ4My3FNj60z0K+B8OzGTsO1Ort0S/NGZuOUa5yvW2WOcCdFO/JCiElwUEL5cwcABv1V4HLFlcDRAuJ+7Voljh4WmOoTCb0xQdXgYcGSKUJIo8Z7Hm9plMPaIIyjC19Kv75z2WMb3gc+svN4by+GqQY4X/LMhA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1791814064989904.9340901062513; Mon, 12 Oct 2026 07:07:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGGeg-0000Go-9u; Mon, 12 Oct 2026 10:05:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1xGGea-00006w-0j for qemu-devel@nongnu.org; Mon, 12 Oct 2026 10:05:27 -0400 Received: from mail-wr1-x434.google.com ([2a00:1450:4864:20::434]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xGGeY-00068D-93 for qemu-devel@nongnu.org; Mon, 12 Oct 2026 10:05:23 -0400 Received: by mail-wr1-x434.google.com with SMTP id ffacd0b85a97d-48b0584ad71so1026188f8f.0 for ; Mon, 12 Oct 2026 07:05:21 -0700 (PDT) Received: from localhost (ip-78-44-39-34.bb.vodafone.cz. [78.44.39.34]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48db9acf09dsm19854516f8f.50.2026.10.12.07.05.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Oct 2026 07:05:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1791813921; x=1792418721; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=JvLqMsGvjzAWD1K/QlTWpgu40ptVWfQKoWJa7G40lnM=; b=AuwWU+JVPPaJbyf5Ro6ZJJXfKKSsh8fZnNIs7WkvJpY1YNZ3LsXFKH2hnyv+GOzXUp LITx2CJhfS4YSA4pBVjWRl46DCanyIvSe8dSJD6F0cK29oeoV6bwEidNFHQMbYlOYNJq yXfBRznXKvYq3T98epOMs0fd2m2wRO70GAntrlCo7l37muzN4zEuxVGHuYvzM3Cieq0D UfP62QfMYpqLH8nv+74rRs/bv9/tjflNo8w/0D8j11oedLLn1+4mdTHyYywnwHzRIVei e4iXORWtbdLglluqTq8FcjW6qBOzOY+NxIqEa1/i37IrXieLGV1sUKN8i9q7lhbLfIb+ LWFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1791813921; x=1792418721; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=JvLqMsGvjzAWD1K/QlTWpgu40ptVWfQKoWJa7G40lnM=; b=n6ZZjUF1c/J3EUPvpTIbmq7V4WDcExt1hoFpYBgiawwQxlQF3EtKXRBcD2GOPhd20V M2dwcsS/1d/0cepJOp8tquiK/tGzW2NlESn/JRuZ1cpWRe5kGuvU7elDthmiN9MK02FM zS93SdI2w7KXcHDvHWdfLiAkhxW9wJRMng4X1zoOZOSnv98XAvPN9m+RGoBM4QVR37Zq /sGbIMFiaynnPTHyZ09Afc34ysl2cZ21QkZ56IiRb1jlDUlGFz8gRMgMW2si7VgTbCMQ fZw0w38GHnz+yQmdweBKGxgfjZ7Ib/XFynF4minDkT9t83CFsMI6mCWBCt2m68JO7Zj+ MhdA== X-Gm-Message-State: AFq9FYKdV/2Vwtg71n6aiwMLhrH2n8c2W7fbgC49w3uKhdSdh++APIGT T41HMus4pVJAQzBgpYBHwlYgV5KLvzUCAcoA8oDwe0e1dx/KCf6n8R+B X-Gm-Gg: AYBFou1xg3rKFWkpWJGwiwjFYXR7rmKGJ4CyvzFUugBL3YabDvCDCvCC6GNr2g/T3Uu QWBqA5Aszn9rDUlFIe/XdnQba5cWK+Je+Siwcp2P62xcCzjpp+R/eCIkYVOwQ0n+gsnAZGslgEX 1MWDjjdrqvou6HIyEYpfNtIuUxp8onH98W10AfiFeATZ4dd6INEFmlhcmRCDqWwdgBHQmZjvPi4 e/ACyKULaaiH7ULKJOAsnavQDqJx8dKWBH8hDgKCoIqa9LlO4gjaaAWmHMoxjlzVGTTYeLGHf/I ndIVthiRi8xxd6EF2Gzu8Cm9l1jO0DDBiIa5pzBYG1DrlFKx/AlJwHHJ3fMRA+kk3DFxypL9PJY j77T4utj/yiL6BvdR5Ao/fXnowgn822QgaH+eMVmmeqGlywGyHXZKJd+cC5phyaamJaUD89s/b0 Eq4c3M34tsp01clXvPxW32Qk0syKF39w/ocqUCxKitFvNRFL/0fh1gJiJEMXDzPjoYEdxzXK7sp bQUQ2nM9Au3cgA8XmnSqhmltA== X-Received: by 2002:a05:6000:470f:b0:48b:74b:4ce1 with SMTP id ffacd0b85a97d-48dbad00328mr15474039f8f.32.1791813920711; Mon, 12 Oct 2026 07:05:20 -0700 (PDT) From: Filip Hejsek Date: Mon, 12 Oct 2026 16:05:04 +0200 Subject: [PATCH v10 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: <20261012-console-resize-v10-5-2c3b10d829b3@gmail.com> References: <20261012-console-resize-v10-0-2c3b10d829b3@gmail.com> In-Reply-To: <20261012-console-resize-v10-0-2c3b10d829b3@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , Dominique Martinet , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Szymon Lukasz X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1791813907; l=4151; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=plm5BVcHLYihzTF0mY8oXYksy9OWYhEWKZaHvV1IPs0=; b=17Z4hv7T8r4/Zvkyt+E+3IY5Z/IwfKKx5cAtA+PtGKtC/NCyksGhgsi2qoqDhQenDOITbUbZ8 Oh3VMLNYXeCCZaQGbUA1qcXW8uOR2uq5mE0NGaFLuE0xJlFknUB+Vt9 X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::434; envelope-from=filip.hejsek@gmail.com; helo=mail-wr1-x434.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: 1791814066308158500 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 [Filip: add sigwinch_remove_notifier, call it in curses_cleanup] Signed-off-by: Filip Hejsek Acked-by: Michael S. Tsirkin Reviewed-by: Marc-Andr=C3=A9 Lureau --- include/qemu/main-loop.h | 5 +++++ ui/curses.c | 21 +++++++++++++++------ util/main-loop.c | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 6 deletions(-) diff --git a/include/qemu/main-loop.h b/include/qemu/main-loop.h index 8c1241a2c1..533d4c2be4 100644 --- a/include/qemu/main-loop.h +++ b/include/qemu/main-loop.h @@ -449,4 +449,9 @@ 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); +void sigwinch_remove_notifier(Notifier *n); +#endif + #endif diff --git a/ui/curses.c b/ui/curses.c index 4db32b6168..9079bfbee4 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,21 +173,28 @@ 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 Notifier winch_notifier =3D { + .notify =3D curses_winch_handler +}; + static void curses_winch_init(void) { - struct sigaction old, winch =3D { - .sa_handler =3D curses_winch_handler, - }; - sigaction(SIGWINCH, &winch, &old); + sigwinch_add_notifier(&winch_notifier); +} + +static void curses_winch_cleanup(void) +{ + sigwinch_remove_notifier(&winch_notifier); } #else static void curses_winch_check(void) {} static void curses_winch_init(void) {} +static void curses_winch_cleanup(void) {} #endif =20 static void curses_cursor_position(DisplayChangeListener *dcl, @@ -417,6 +425,7 @@ static void curses_cleanup(void) return; } =20 + curses_winch_cleanup(); endwin(); qemu_console_unregister_listener(dcl); g_clear_pointer(&dcl, g_free); diff --git a/util/main-loop.c b/util/main-loop.c index 65e5dbcc94..e59af0e270 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,38 @@ 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); +} + +void sigwinch_remove_notifier(Notifier *n) +{ + notifier_remove(n); + + if (notifier_list_empty(&sigwinch_notifiers)) { + struct sigaction action =3D { + .sa_handler =3D SIG_DFL, + }; + sigaction(SIGWINCH, &action, NULL); + } +} + #else /* _WIN32 */ =20 static int qemu_signal_init(Error **errp) --=20 2.56.0 From nobody Thu Oct 22 19:24:51 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=1791814047; cv=none; d=zohomail.com; s=zohoarc; b=JEyUptk2WiS7u12+hi4hC1byN/xOd/sB01qdexBaJVVY7ypWx1nLQllXh0pl3yadrVOVlru8oCGsbScQC/U83op9mNOGCc99rlNfD22A54z2Zp7E1FJKlPCKEvHA45BiAkwMaGLZySYELM1Cl0eK5px/rQ5OcVJA6x7G1fmfbrs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791814047; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ovp9mreBHCQ/mLVkPzCXV5rXY3EL6//8R2a8gco0LLk=; b=KQwR/rsQONsVV6vi5E/N0uc4765B6BsDSaeJBXNgKt5J0jOd8yybuk/ad0EQfxYMlZ3o1ziY+EVDA6+jQtUzN+BjlXn3KiYvhpkbWMQpqAIoL0lZaWO4fsQk9uOUuYrIH0D3FyU75sUNOuhBkrlBqq7weL4Q3+hGTHnn3fZt12M= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1791814047236575.1878301564385; Mon, 12 Oct 2026 07:07:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGGei-0000Id-An; Mon, 12 Oct 2026 10:05:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1xGGeb-00008c-5i for qemu-devel@nongnu.org; Mon, 12 Oct 2026 10:05:27 -0400 Received: from mail-wr1-x42e.google.com ([2a00:1450:4864:20::42e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xGGeZ-00068a-FA for qemu-devel@nongnu.org; Mon, 12 Oct 2026 10:05:24 -0400 Received: by mail-wr1-x42e.google.com with SMTP id ffacd0b85a97d-486e70f2457so837834f8f.2 for ; Mon, 12 Oct 2026 07:05:23 -0700 (PDT) Received: from localhost (ip-78-44-39-34.bb.vodafone.cz. [78.44.39.34]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48db9463499sm18798793f8f.3.2026.10.12.07.05.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Oct 2026 07:05:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1791813922; x=1792418722; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=ovp9mreBHCQ/mLVkPzCXV5rXY3EL6//8R2a8gco0LLk=; b=FPafJizthMkYmb92iQjEHkaVZJKhkhzTxDLsL47McGmCMOlswmpersJF6KruiDhWSM VNVQpYGUmkR6dgA0dgHeRkh4im4O5MybgC5FOcGKuRvh/YTFyzq6wsLAppqeFU30YStE dGJMAyp+iRcHpGdI+PcdZ2u5jAkz55Ifj6Cox4KBBxqlq90EGczZIf9C7zpxWWP6DUou 06bU+LR6RUVE6QR9gxxoQYFe/78kJyUmrFUItv8f1d4PcF7Nk1vcdVJ20rDRt2HESsiB p7GibjJHR3Fo4vFrqKQav8NFcBOtEw6jjuq1+GBnMxBcvyA+QGh0U8hK5o99V9FrsmHg YsNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1791813922; x=1792418722; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=ovp9mreBHCQ/mLVkPzCXV5rXY3EL6//8R2a8gco0LLk=; b=gr81G/Pi+xjgx2avRTCA0jynunl9Vl/PRL8Z+B4/LR7oOA/nah5vQG9PgQeL4AVb/U AkE/VyBR8H1m055ulkwTwbcW8NS1kpm2r2nFByjI7AJWgh7Mdk2kyYHBuPw0tejYHvuF 5NEasoc+tkGbgOZWEkbUaaUSok8oNyE3jWA4p3p5Z+CwmxXSJUOB3Ev4lWFLJ0HC/Pzs L2C9YCKxL8AeIJO40t2HjiV+NFt0+uzVtxZ8+hHm8Sjvj41kQK5kTqA/0nhRCwCmM7mL Zuhtyd2jrnKTvNS01uo5deL9XgmegbtmFgpfp4iBtXhl07NsctvEx5tQJtV1iyJiXG+S Lz9g== X-Gm-Message-State: AFq9FYJAXlc3RcW2NN5+dIjE3RVzNtyKFEM2Msq7YE9h1n6Rzc2k+ttX NdAF06t8zCKRSqwOchQKAJDtqdGDgqLBiwqC+LAhL3mhT9b0EvyNJk7K X-Gm-Gg: AYBFou1DV11BJZicUo+aLYZ/rfN+7XKwC/8U+N08kHnasP9p59sCvySX8nQBWF9tqKo 2QLuums2rTYLYnqVYF7mIHWoBJRjDAN9JGcPw4V8PUPtrlfz+L0UeSqtZNeMlactmljSfpHdmxd p2ye66F4fOjBvw/2kG527l2cUcrxQbXKFSmOwefZ/yiRrX2YNgCDmJz775J6oMJMV1kgn8rH9al r0DNjHTGd7tslnFWYff4XGCbsFTl8vKrcZpUp3f62mrnFFbNrh46OIee1BC0QacK7SPufCW+t/Z IpmpG8v1wxTyrsrprCgzT5zsHpv2uxBeTOPD7DtDXFtLfz64+2dcP7X1HcFnTy9eD34p3Gs1aW5 P75B+3o0nG7r2IcPDNOEWygEOzbgir4TOnryQIo2x+PfUknIlNSz4MCiImzc/9b2DO+sw3OSAOs ykkW/gytp+JeOjDTlcJujXGRQ2eLI8Jfsw9MslLVurpjk8W3KgxOx5cncl346QmbTIIuHq7SGI+ LdZcsBXmsCDYQFDv9jm878PCg== X-Received: by 2002:adf:fc8a:0:b0:488:77bc:a741 with SMTP id ffacd0b85a97d-48dbaaec9d3mr15245914f8f.51.1791813921946; Mon, 12 Oct 2026 07:05:21 -0700 (PDT) From: Filip Hejsek Date: Mon, 12 Oct 2026 16:05:05 +0200 Subject: [PATCH v10 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: <20261012-console-resize-v10-6-2c3b10d829b3@gmail.com> References: <20261012-console-resize-v10-0-2c3b10d829b3@gmail.com> In-Reply-To: <20261012-console-resize-v10-0-2c3b10d829b3@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , Dominique Martinet , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Szymon Lukasz X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1791813907; l=2835; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=Qp0MMY88z/ilQBZzBdIx5Zozet6nrd7RSwO8+sYnBxE=; b=XZl6fC4vNXpcSM2l48mykYcU0BKZ431Syb9vkZYeS+uK9t1JGAZrTM5qTRQqww7V7WFHAgLrT +/RChrOASI4D+iVIJg4gouvzyKDqX90H/ggUHxuvJwTzFRWwhUQZbJv X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::42e; envelope-from=filip.hejsek@gmail.com; helo=mail-wr1-x42e.google.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_GMAIL_RCVD=1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1791814048220158500 From: Szymon Lukasz Update the terminal size upon SIGWINCH delivery. Signed-off-by: Szymon Lukasz [Filip: use DECLARE_INSTANCE_CHECKER, qemu_chr_resize_stdio -> stdio_chr_resize, remove notifier in char_stdio_finalize] Signed-off-by: Filip Hejsek Acked-by: Michael S. Tsirkin Reviewed-by: Marc-Andr=C3=A9 Lureau --- chardev/char-stdio.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/chardev/char-stdio.c b/chardev/char-stdio.c index fe1cbb2d88..f63bf413c7 100644 --- a/chardev/char-stdio.c +++ b/chardev/char-stdio.c @@ -34,7 +34,9 @@ #include "chardev/char-win-stdio.h" #else #include +#include #include "chardev/char-fd.h" +#include "qemu/main-loop.h" #endif =20 #ifndef _WIN32 @@ -46,6 +48,14 @@ static bool stdio_in_use; static bool stdio_allow_signal; static bool stdio_echo_state; =20 +typedef struct { + FDChardev parent; + Notifier resize_notifier; +} StdioChardev; + +DECLARE_INSTANCE_CHECKER(StdioChardev, STDIO_CHARDEV, + TYPE_CHARDEV_STDIO) + static void term_exit(void) { if (stdio_in_use) { @@ -85,8 +95,23 @@ static void term_stdio_handler(int sig) stdio_chr_set_echo(NULL, stdio_echo_state); } =20 +static void stdio_chr_resize(Chardev *chr) +{ + struct winsize ws; + if (ioctl(1, TIOCGWINSZ, &ws) !=3D -1) { + qemu_chr_resize(chr, ws.ws_col, ws.ws_row); + } +} + +static void term_resize_notify(Notifier *n, void *data) +{ + StdioChardev *s =3D container_of(n, StdioChardev, resize_notifier); + stdio_chr_resize(CHARDEV(s)); +} + static bool stdio_chr_open(Chardev *chr, ChardevBackend *backend, Error **= errp) { + StdioChardev *s =3D STDIO_CHARDEV(chr); ChardevStdio *opts =3D backend->u.stdio.data; struct sigaction act; =20 @@ -121,6 +146,10 @@ static bool stdio_chr_open(Chardev *chr, ChardevBacken= d *backend, Error **errp) stdio_allow_signal =3D !opts->has_signal || opts->signal; stdio_chr_set_echo(chr, false); =20 + s->resize_notifier.notify =3D term_resize_notify; + sigwinch_add_notifier(&s->resize_notifier); + stdio_chr_resize(chr); + qemu_chr_be_event(chr, CHR_EVENT_OPENED); return true; } @@ -152,6 +181,9 @@ static void char_stdio_class_init(ObjectClass *oc, cons= t void *data) static void char_stdio_finalize(Object *obj) { #ifndef _WIN32 + StdioChardev *s =3D STDIO_CHARDEV(obj); + + sigwinch_remove_notifier(&s->resize_notifier); term_exit(); #endif } @@ -162,6 +194,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.56.0 From nobody Thu Oct 22 19:24:51 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=1791814040; cv=none; d=zohomail.com; s=zohoarc; b=NIhB7/R0NvtyaQez9bpnKfE/+QfMd0dAv8+l1KSVspQIcX43kRjefgBWt12hpVgOo8Fj5z5CSvPjND2i9aAbTJSxaS4OLUUVih3IhG/4sVT9b1zPKC/f0u2AHvPMHrE1nM00U3cL3sErO28CcGKmKxEeDm1dNt0gHtmzHf3brKo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791814040; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=NmRuOWUejwBN2bZ8VsU4Vw4eRoCxbP0++ctfIHndI3A=; b=NSxsQ5+/IKoFQKGEa9gZ4JFrsfai3hmUnhW66xCZyNPp5uLU9SUEjMnjYFBLGWfuPf5Op30biBxXMVDtMGHBUri+3PjQZYcWew2ijRIhpE+rjhED5YbxUFb2b3vNPd+/E5df3Mscprko0fPVrd/VZ6LOCUfPga9a6j5Mb/pPKqs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1791814040075759.6377706053431; Mon, 12 Oct 2026 07:07:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGGem-0000Tl-4Q; Mon, 12 Oct 2026 10:05:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1xGGed-0000Ds-9T for qemu-devel@nongnu.org; Mon, 12 Oct 2026 10:05:27 -0400 Received: from mail-lj1-x22e.google.com ([2a00:1450:4864:20::22e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xGGeb-00068v-O5 for qemu-devel@nongnu.org; Mon, 12 Oct 2026 10:05:27 -0400 Received: by mail-lj1-x22e.google.com with SMTP id 38308e7fff4ca-3a1e9f55e03so20199731fa.1 for ; Mon, 12 Oct 2026 07:05:25 -0700 (PDT) Received: from localhost (ip-78-44-39-34.bb.vodafone.cz. [78.44.39.34]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48db9ae17e9sm19984106f8f.57.2026.10.12.07.05.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Oct 2026 07:05:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1791813924; x=1792418724; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=NmRuOWUejwBN2bZ8VsU4Vw4eRoCxbP0++ctfIHndI3A=; b=Vx9fZa82GSt4SzOsO95DvhIf7tBZ/w+fIDO4n4OqXKfK+6DBJP/l/K78QXcjGVwAFm JzTI4j1thxywE31uJLkbYiExciKuE2S86+uslZrMJvVhMbQWiVc06StdE4T4s3IGm0bd R81Qp4RpWhC+N/DBYjoWU7ZeO4Ls07vvxuciRC+VZ5hOyH21GhbLC/IvYFkQ7VFIGYup gcQX6xFuKrZxuH8SGy+RIMd3nmdqmPizl0aG7GTxG28twFysq2F4C6/Y9Ba332arNKZn K6upeV2e+jKA1+A1es88R6oDZkG8vpDM1KMj8/J9R+vyJsHwADT1sKPAozcEqxr/ExMA p/WQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1791813924; x=1792418724; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=NmRuOWUejwBN2bZ8VsU4Vw4eRoCxbP0++ctfIHndI3A=; b=jcxUGUiWamjlQe/MdEvIR99vY1a/WWuaUy7yIaqxlndiIdf3eV3/sXNIcOJ17gPgRr D1LNqLUEJbnrK61Fn1HExzGGY8GqKCcI98BwJeWj2eaIhFiYgluOzknfcGIJJ59oMzY6 /pklcAEIcPEoYU2MtmtKulVh3ae+KayoliNMby0BRd642GDp21nEo5kUxWG0JCb6PN6H hFWaV5bjYBwt7IgK8zlWxlfZFXrn/XET8Ibr+4Q0Z9As9GGHh6TtlfkD2qdKone6cDzu tXTHKar3Zb4V+w6l+6Lw1E1VBzZgLCAKu2n30lpz0VRK8ooOVflOb1jOVjply/RjycAo edWQ== X-Gm-Message-State: AFq9FYKqqtac+x/EoLlp2lK5spts2olWvi3ikQyIwUrk5S1n6qofyEsv e+1V5PxEEmj9Vo90rY2K7mNVFiHJL18tM0Kr/RPEIsFjsMAWPYOeoNiV X-Gm-Gg: AYBFou1TbszqXTRg/2muaAsOIDnb2FjwPPBcnZp52BUdrWwBiAyiL4ggBlY8OpYOzZt 44q044Nig5ilwQmR6acxqRHHfcr6b4rCYH1iseYPRR3Mfx2fhXct6QLt33Q4zI+MSaBqp5QfCri sBlcnqAWPiZ91DsNYYWzSo4KIcxm3hBkWA/T5+36pPLX4FvT9thaVhykOXqq4vUjkMPxCRsFJaG i4W1qwM250Zc+N+FnVdcoWnM2tQDdG5uq+Sr1zb2oD3yhM4w/ssIh6n7CPG8BT0tnY2d21OD+Qb aVu/X6bgh2tGXsVRblkOjZ5quMFGT4kZ8CI8AzTMTdNI1UVtRC45vYfR15YLI46V02ffNRwsSVe 82MQILxHI1Ds8/yHJzgqlMQMqQylqSXdlRcOzEKKdPmDTiO9dFnN4Z+RMYW3b8zko9imYiYw/gu SZEZcFoXnp8nYMWm7y2jCb6fNY33en07yYMgCGA9Ui/p5WeTd8MBmMJEx8Vvx8XLy4kuZnx4wMe 6NOggmK/RT+1iN9Erlqw4ZEgA== X-Received: by 2002:a2e:be91:0:b0:3a3:7682:49a1 with SMTP id 38308e7fff4ca-3a9c53912a7mr24680421fa.22.1791813923573; Mon, 12 Oct 2026 07:05:23 -0700 (PDT) From: Filip Hejsek Date: Mon, 12 Oct 2026 16:05:06 +0200 Subject: [PATCH v10 07/12] char-win-stdio: add support for terminal size MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261012-console-resize-v10-7-2c3b10d829b3@gmail.com> References: <20261012-console-resize-v10-0-2c3b10d829b3@gmail.com> In-Reply-To: <20261012-console-resize-v10-0-2c3b10d829b3@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , Dominique Martinet , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1791813907; l=1838; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=AdJSDZRn2WXS30nr3zBBtDw8J4CIxuRaebRcO/zpUOU=; b=ByX+5uZ7XjG8VWFevx9KrN9x0SmpF8e/jQZobx6LVLOWRGzjekn0GCeoOFgWOPm7FkZO69rsf 0aDursb+DwLB61/YEdqJ7RZjv4ydWwUmIqxkyTXtDWeYQiaNFJmSnGK X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::22e; envelope-from=filip.hejsek@gmail.com; helo=mail-lj1-x22e.google.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_GMAIL_RCVD=1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1791814042151158500 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 Acked-by: Michael S. Tsirkin Reviewed-by: Marc-Andr=C3=A9 Lureau --- chardev/char-win-stdio.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/chardev/char-win-stdio.c b/chardev/char-win-stdio.c index 0deba3bffb..2132ae9a6b 100644 --- a/chardev/char-win-stdio.c +++ b/chardev/char-win-stdio.c @@ -44,6 +44,20 @@ typedef struct WinStdioChardev WinStdioChardev; DECLARE_INSTANCE_CHECKER(WinStdioChardev, WIN_STDIO_CHARDEV, TYPE_CHARDEV_WIN_STDIO) =20 +static void win_stdio_chr_resize(Chardev *chr) +{ + HANDLE hStdOut =3D GetStdHandle(STD_OUTPUT_HANDLE); + CONSOLE_SCREEN_BUFFER_INFO ScreenBufferInfo; + + if (GetConsoleScreenBufferInfo(hStdOut, &ScreenBufferInfo)) { + uint16_t cols =3D ScreenBufferInfo.srWindow.Right + 1 + - ScreenBufferInfo.srWindow.Left; + uint16_t rows =3D ScreenBufferInfo.srWindow.Bottom + 1 + - ScreenBufferInfo.srWindow.Top; + qemu_chr_resize(chr, cols, rows); + } +} + static void win_stdio_wait_func(void *opaque) { Chardev *chr =3D CHARDEV(opaque); @@ -75,6 +89,9 @@ static void win_stdio_wait_func(void *opaque) } } } + if (buf[i].EventType =3D=3D WINDOW_BUFFER_SIZE_EVENT) { + win_stdio_chr_resize(chr); + } } } =20 @@ -201,6 +218,8 @@ static bool win_stdio_chr_open(Chardev *chr, } else { dwMode &=3D ~ENABLE_PROCESSED_INPUT; } + dwMode |=3D ENABLE_WINDOW_INPUT; + win_stdio_chr_resize(chr); } =20 SetConsoleMode(stdio->hStdIn, dwMode); --=20 2.56.0 From nobody Thu Oct 22 19:24:51 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=1791814017; cv=none; d=zohomail.com; s=zohoarc; b=EqZVaDpKFdCHLejGNiweNkgJBPUucsI2KfBcYYsuk2GqW4qnVlnwLVV2tJkRuqLlfT4APfg1DrY9b10XE0a9HLpyIMpA6KiGqPv6AqqGxZ0hn448n1kGPzRAa2bABuhaQp0tR4C2xxU2hZl/Xlc+p2oXFR4f6tOpTRe/odEX1Eg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791814017; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=HSrF1Uf2SYNIft95MB9XFCC5nKQU5xHB3kHJUqzeVuY=; b=CfgC9Q+Oo0bdHoY0vJ+PBRDqdckIXkyl74zOMBn46pVQzK3E/Sl2+OH82A2SWovyG5C0CkHwfa/cmhcAjDrfcYnyWsaDpQuJlWLsgrodVftqJw0By7hvdQOxeQ1lMie+2kVxg2jixDeEp42+1Kio4GyVG22RUL9xPpYNDAL+6rs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1791814017511461.0019464332529; Mon, 12 Oct 2026 07:06:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGGei-0000Ie-9s; Mon, 12 Oct 2026 10:05:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1xGGee-0000GA-NR for qemu-devel@nongnu.org; Mon, 12 Oct 2026 10:05:29 -0400 Received: from mail-wm1-x329.google.com ([2a00:1450:4864:20::329]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xGGed-00069B-1i for qemu-devel@nongnu.org; Mon, 12 Oct 2026 10:05:28 -0400 Received: by mail-wm1-x329.google.com with SMTP id 5b1f17b1804b1-49e73611928so24888295e9.1 for ; Mon, 12 Oct 2026 07:05:26 -0700 (PDT) Received: from localhost (ip-78-44-39-34.bb.vodafone.cz. [78.44.39.34]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4a18c198134sm290960965e9.15.2026.10.12.07.05.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Oct 2026 07:05:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1791813925; x=1792418725; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=HSrF1Uf2SYNIft95MB9XFCC5nKQU5xHB3kHJUqzeVuY=; b=S4EggUzQeRzvPNNshkD2qo7HZ3vcMhzeeKhpfJYxmOcaTSxXQb/AOsK86LbKm0UqfT KLUbtNaC1lVGwwjFfbGkkbKMApUY9WUuZ47ZyelzZIUx0a/4pGWMU7j7eHJiK01Bw0uE s91hfnk0uMlbMiPFhsQcFVEGTvfOYYnfEfsTrkWJ3arj1PCn4ZfOH0Xo9304tLnDUhFV M1zwOu8GvmgUspavoKWRauk+aNSaeup3OTPbACH7APpj9miR8Wk9fVtGDdM4pIgSAYFt 7RvSQ77LL+wXKKILOkCIeHa3LEXs/rKX8yiVX5a2HhSoE14mStV0EhsOZNeqbWvfgaJz y/RQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1791813925; x=1792418725; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=HSrF1Uf2SYNIft95MB9XFCC5nKQU5xHB3kHJUqzeVuY=; b=LWK9N6qRTsudxOC4xtHMQnwim8AvKSaF+yYNoseo43gEYdOmVUnop2dA0oWwLOvKnp RIYhTSsbn9j6FVxWwmCTGNe7+8G90OP9ragETL6LzUTmy+xjetHEye5Nxa8ZyGwSx1cz a5OuIp0NVJyk3qdG+b4CmUAebQG/7vfWGMYBSafrHJSJ4PjamzpYr0WgRyHRclrkv+f5 8F6N2BlkLxcs0nypJK01MnuHmVnEUzC7BSF64S0saHiPb5Cezm4WTJn5n5mtW3giFuKK qLV6R/YY3RjhMYUceey5HosOI0t3Ve4sM4WWPVbw4QxbKgrhF52SbDzkLMvO8IcdiK8w 62ZQ== X-Gm-Message-State: AFq9FYKOlPlwMPnPvJpsLBRMr4ushapyZCK/qSnN7hNNe6cjSYoZpMBf aiw1dkUyoETphgA5Pj3B/ejp2aOX85Zp52dJGFHI6qufpfhzZpqAlKpU X-Gm-Gg: AYBFou2+ofNNohcXUZ7KpJzoxjBOdE5Yipb+RzZD+2FD4F/dk5RYO4ClcXbGZALIytD KPA84BeRbPraSGqC78N19EH81HxPLZrrh2xlBpOBYX/+Ed3Nna3tE9RRMVV0OIre12n7ZkOJYlU Vw8ytyhFEKMrDkcEOtVHnG3iGaWLtctQS0DCkw+e9s+xBKYY5pGiu9BKka4Sm5VeKXnMy5DdzFY y2qhxSZhMxD5LO2dw+5j2ZOTX938R1ZnZ0R+yFmpbTCbaebcL/m9wbqijWOTmcA7ji/Q71HdTEK wxf+lMddppgAeKYoCLmaxY4rfLGdvOFwUvronLnx1NHP1MwM/lLxXTA6MRF9cf+9wta2vBKRb1N +9jijkt5d+xoM2N1/K/rfFftnxC+bNuEwUll5F50OJWfTUD2iTDjLsONySKq/ofCCWt0utRDyid D1kqjRHFa86LWPvACMIaydXmlDoTstN/PQFOzPJSGvskczkz3Q7X7cDWeA4mCTKkr1T4nRAemCV GbV1vcSYpj+IZMGItIG6y6guQ== X-Received: by 2002:a05:600c:3b0a:b0:4a1:8963:b865 with SMTP id 5b1f17b1804b1-4a18e447e9emr190837805e9.1.1791813925111; Mon, 12 Oct 2026 07:05:25 -0700 (PDT) From: Filip Hejsek Date: Mon, 12 Oct 2026 16:05:07 +0200 Subject: [PATCH v10 08/12] ui/console-vc: forward text console size to vc chardev MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261012-console-resize-v10-8-2c3b10d829b3@gmail.com> References: <20261012-console-resize-v10-0-2c3b10d829b3@gmail.com> In-Reply-To: <20261012-console-resize-v10-0-2c3b10d829b3@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , Dominique Martinet , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1791813907; l=1675; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=+THDUz5FDYTrq+3UbYN01djura7EAPA8bWNZTUjGcf0=; b=8rfMawnH5kKVABlU54oiv3ChzlhUVUHXqPY7VqLobpLq+CGSmmENDZ+k+PtM6ace7RpriSyOU 5oE5age8xDcBzKLu5C0MoV3/Lw4Qf7JWLM8obXPjBcneZPgw7f01HkC X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::329; envelope-from=filip.hejsek@gmail.com; helo=mail-wm1-x329.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1791814019675158500 Update the vc chardev size when initializing the console and after changing the surface image. NOTE: There seems to be a bug in the code where the dpy_text_resize callback is not called when the size changes due to changing the surface image. (Though it doesn't cause any problem in practice because the callback is only used by ui/ncurses for fixed consoles, whose size never changes.) Signed-off-by: Filip Hejsek Acked-by: Michael S. Tsirkin Reviewed-by: Marc-Andr=C3=A9 Lureau --- ui/console-vc.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ui/console-vc.c b/ui/console-vc.c index 53d9e9d39b..99cc8f09c8 100644 --- a/ui/console-vc.c +++ b/ui/console-vc.c @@ -115,12 +115,19 @@ static int vc_chr_write(Chardev *chr, const uint8_t *= buf, int len) return vt100_input(&s->vt, buf, len); } =20 +static void text_console_chr_resize(QemuTextConsole *s) +{ + qemu_chr_resize(s->chr, s->vt.width, s->vt.height); +} + static void text_console_invalidate(void *opaque) { QemuTextConsole *s =3D QEMU_TEXT_CONSOLE(opaque); =20 if (!QEMU_IS_FIXED_TEXT_CONSOLE(s)) { vt100_set_image(&s->vt, QEMU_CONSOLE(s)->surface->image); + text_console_chr_resize(s); + /* XXX Shouldn't qemu_text_console_update_size() also be called he= re? */ } vt100_refresh(&s->vt); } @@ -254,6 +261,7 @@ static bool vc_chr_open(Chardev *chr, ChardevBackend *b= ackend, Error **errp) s->vt.t_attrib =3D TEXT_ATTRIBUTES_DEFAULT; } =20 + text_console_chr_resize(s); qemu_chr_be_event(chr, CHR_EVENT_OPENED); qemu_console_notify(QEMU_CONSOLE_ADDED, QEMU_CONSOLE(s)); return true; --=20 2.56.0 From nobody Thu Oct 22 19:24:51 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=1791814047; cv=none; d=zohomail.com; s=zohoarc; b=GHQv+gEu1wSlZULIdZCAeNc8DmCtMnGQz2U5BMyLwq9H23tZ/17DhTqh/UkH5IZcKF77CyTZmbtbYusidwyFTgYhpHyAS6gYg87B0AcEXFtT5ve29ua4RLahdxbk/LdmYDP8Wkj2oC7B6JWE15ur3/iwhU/eDIUrPQtcUzefbmM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791814047; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=5s++mRNWS3BGHoHyzQWaCzI6IE1E0l6YOw9tCdjQpEc=; b=EYrYqakNQ/RuagkehQu9bGR8rt7bIADdS7sfj9yE7Gao1LnYz6Ty4OIEd0L9fqc+vGJTmq9HOx0L3I1EvD6SS6/5wFZepHTg9h5McDpLNHmNjGxnX4hVuY5tW7na9xzf3CPpCy/v7UIOFPonyxb2iCtzqttqhVaZGuT2/oS7pXA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1791814047366847.7397289335019; Mon, 12 Oct 2026 07:07:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGGej-0000O2-ID; Mon, 12 Oct 2026 10:05:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1xGGeg-0000Gp-23 for qemu-devel@nongnu.org; Mon, 12 Oct 2026 10:05:30 -0400 Received: from mail-wr1-x432.google.com ([2a00:1450:4864:20::432]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xGGee-00069T-FR for qemu-devel@nongnu.org; Mon, 12 Oct 2026 10:05:29 -0400 Received: by mail-wr1-x432.google.com with SMTP id ffacd0b85a97d-48c4649b35bso1796961f8f.3 for ; Mon, 12 Oct 2026 07:05:27 -0700 (PDT) Received: from localhost (ip-78-44-39-34.bb.vodafone.cz. [78.44.39.34]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48db9acf092sm19671709f8f.45.2026.10.12.07.05.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Oct 2026 07:05:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1791813927; x=1792418727; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=5s++mRNWS3BGHoHyzQWaCzI6IE1E0l6YOw9tCdjQpEc=; b=dO0PsABXp8DviIFep5o0QEmXw095MwX3kuM5HyXzUUmfUOEZoB6GYFE1Jnty2YLftg fBwrSRyRjvJHTLVy0507Z7f1JJcCIcSmBNFi24sAVx6zSPsmgU76NtzwLDVypwUCFfEx xwZvCZBggE8lhNRpeuBF/W4h+63Uw1Rg15WS7reoh3hbU1JP1lnDsTljq3z6vri2SsDE N7mmgoe9yY/FrLdMklU6XGm8kKkGQyCR3bPplzHTt9LImwg7cVXWMToDCQPVMHa7duGe 6oHG9oGZBLj/DuaVN1CWwQMi0pJlINXK0RkYdV915b387uh1R7gZ1ycXiDaTCOr5nFL0 vDDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1791813927; x=1792418727; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=5s++mRNWS3BGHoHyzQWaCzI6IE1E0l6YOw9tCdjQpEc=; b=PTcFLk72Hx0IR7IZijxYawovdS1/ZBeqH+bFFrkXDnqlS2uqtD/0F0/DPbmuGDkelo ZFKsxjT9oqm8ilSsgidInyjUe85hRNvq+xitIbCiabDm5/wt14BmbBWQ/v8h68CllXoW lHkpK0CozVd8BnTpdlMBWhB4Ji/3Nmj46HTk0CNhkIRj6/uNGFwpql2obXOJiR5yRfa3 Xd2nuEcTVLaSaNWSie+NOuSlnTRDQi5acxNREG6guQJe2w1+PF0gW4IsDaiPT/03nBpN +51GaOVmT5+PlvjGLW4UydwXN9vVVy8v+Bahp7rSc8OxDfpLCFzEpFxiLIyLr4IWf3tn zvmg== X-Gm-Message-State: AFq9FYIiAgOFzRUzcyEkEpVRz2NCjFxlAyrisaBEBwHAqq4vm2qs4wrG iB4Za2Vf7alS+XYjzUK2Trah7DS0Yerh6CwoGwEhZq25GrjuwKG6Rr5l X-Gm-Gg: AYBFou3vXt8NIamX8WkSa4ydfDOeZMJn4nOCT703Xp5uS7nYauYWYAVu6VA2bYF5e+V 7OF2NIBPPuARv2X6WqYDe/PZQAh1m3U6kWr6vEAOq4jvR+FVnyd3U0SefzdFY3eiCi20mmd04lc JnQFhZ/lWqRuR+uvUBRihX2W+ynewaOiIopnFI6uRMRIl84OmGAlOzFouI24VsNditF11wV9Orx ujkTZ0pJJAn3zJeF+UB5SnlT8ay9DsAgeNh+OfkKTOATB8uOXU+yNFRNuwKfDPYhyE3UHcYZ3DA dyGyDS2bYsmaw9Cjj9YqQL78yDLVojjYR8UIt3/yMJw8e3ZyydUWOrteg0PbpIm1uY1fy4lI9Wk BcYMH5Jvh0FdG4shRuwOIRpFUwvMQUqJc38qVDkRVTSen5GGcfcsOdw9P3p+RV1fsXZ8A4IBYXB rtDKnx5cbBEHamtgVtYUdwGJhZXY9q02VRdA+Ci41RXJ/0dBnC8IMrtcOB7BysS9WMXCcMkWGXY EP7QYTrFcVVREXmAwhf9b/MDQ== X-Received: by 2002:a5d:4748:0:b0:488:8111:6f4e with SMTP id ffacd0b85a97d-48dbaaddd64mr12819572f8f.9.1791813926809; Mon, 12 Oct 2026 07:05:26 -0700 (PDT) From: Filip Hejsek Date: Mon, 12 Oct 2026 16:05:08 +0200 Subject: [PATCH v10 09/12] ui/gtk: forward gtk console size to vc chardev MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261012-console-resize-v10-9-2c3b10d829b3@gmail.com> References: <20261012-console-resize-v10-0-2c3b10d829b3@gmail.com> In-Reply-To: <20261012-console-resize-v10-0-2c3b10d829b3@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , Dominique Martinet , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1791813907; l=2096; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=8S5WnWDAWZYMyedDb0jD3hexh3AtPXvSKaEysmxUaFw=; b=30BjitS8ZdQmK2QG9vaUtuDtAWlSdM7Sx7pGDKcv4RVeiNTlJYAbOf5WBlj7Zf7+6nUJZUAyr H0m5Z8Qq5h2BhWEAscjuTeCBxOgf2lS3MdMO/ckqTk4rQHxGnJhUlbk X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::432; envelope-from=filip.hejsek@gmail.com; helo=mail-wr1-x432.google.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_GMAIL_RCVD=1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1791814048242158500 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 Acked-by: Michael S. Tsirkin --- ui/gtk.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/ui/gtk.c b/ui/gtk.c index ed7ffc06b1..8d312d6a4b 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -2196,6 +2196,28 @@ static gboolean gd_vc_in(VteTerminal *terminal, gcha= r *text, guint size, return TRUE; } =20 +static void gd_vc_vte_update_size(VirtualConsole *vc) +{ + uint16_t cols, rows; + cols =3D vte_terminal_get_column_count(VTE_TERMINAL(vc->vte.terminal)); + rows =3D vte_terminal_get_row_count(VTE_TERMINAL(vc->vte.terminal)); + qemu_chr_resize(vc->vte.chr, cols, rows); +} + +static void gd_vc_size_allocate(VteTerminal *terminal, + GtkAllocation *allocation, gpointer user_d= ata) +{ + VirtualConsole *vc =3D user_data; + gd_vc_vte_update_size(vc); +} + +static void gd_vc_char_size_changed(VteTerminal *terminal, guint width, + guint height, gpointer user_data) +{ + VirtualConsole *vc =3D user_data; + gd_vc_vte_update_size(vc); +} + static void gd_vc_vte_init(GtkDisplayState *s, VirtualConsole *vc, Chardev *chr, int idx) { @@ -2258,6 +2280,12 @@ static void gd_vc_vte_init(GtkDisplayState *s, Virtu= alConsole *vc, gtk_label_new(vc->label)); =20 qemu_chr_be_event(vc->vte.chr, CHR_EVENT_OPENED); + + g_signal_connect(vc->vte.terminal, "size-allocate", + G_CALLBACK(gd_vc_size_allocate), vc); + g_signal_connect(vc->vte.terminal, "char-size-changed", + G_CALLBACK(gd_vc_char_size_changed), vc); + gd_vc_vte_update_size(vc); } =20 static void gd_vcs_init(GtkDisplayState *s) --=20 2.56.0 From nobody Thu Oct 22 19:24:51 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=1791813964; cv=none; d=zohomail.com; s=zohoarc; b=LvvvnmB+dXmDHoEZYnlUYU/YZusCnvXuz5afcEeEnxSWjeXZ2be99/Z+cSL0uEssGrnp1i3EhfQsCNoxSs+Y9wphsgwM1QLz34Li92DHR/xx8IZyLSQ5HtOxZVWsrHgYsH+X6WkjUYMfv5VSEDBFp1Q28aiFoRGUvn3LKEjv5Qg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791813964; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=QXl9Yl5Xju6RUUl/m80Z0Pv0GGgyouWP8vKZWY0fpzk=; b=LWTdHgDUjynVe4jG7rt/qz8L30kbTZLULXNH19dQRbST2y/7t4EP/n3m5j+q+MBzy5UfC071uWhaE9PpepVRJ8qMMMEY0A+29a1SnnIOrEuiPFxuapmIlRVttme6V6QiXb+Oa9HCjWkRwqw6Ol7FnYoiKmK8mhrFDNh5aK0olLI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1791813964572889.1002815520588; Mon, 12 Oct 2026 07:06:04 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGGel-0000Sk-O5; Mon, 12 Oct 2026 10:05:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1xGGeh-0000Ic-Ki for qemu-devel@nongnu.org; Mon, 12 Oct 2026 10:05:31 -0400 Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xGGef-00069o-Su for qemu-devel@nongnu.org; Mon, 12 Oct 2026 10:05:31 -0400 Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-4a018dc1f98so15346465e9.3 for ; Mon, 12 Oct 2026 07:05:29 -0700 (PDT) Received: from localhost (ip-78-44-39-34.bb.vodafone.cz. [78.44.39.34]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48db9ac94c6sm19537061f8f.42.2026.10.12.07.05.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Oct 2026 07:05:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1791813928; x=1792418728; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=QXl9Yl5Xju6RUUl/m80Z0Pv0GGgyouWP8vKZWY0fpzk=; b=Y0DaD6zQ3Ti/typVGshsXg0OxrCUjYFMy4lG2F+EPnkNHHRM5KAvDj7BtqPFOMWMU0 q4tHn8TLvUjQd19r+MDrdGIVpvdZ84T581oym5rEtAzmAnSLYYFYSwy7VWbP1KL1E5yE YZB3VK+9cHICdGQt7cQV4NuJgp+GX3hzZSrszIOfpnr+wsxBpQKNNJinuX4VANNoflT5 Y6aNzTJrHpCxXO3BK3CwTCL/9OjqnDPNOK61U85hxv6hsCKk9bfe/pOcn7TydZQbhrEP kU9pjDN2Vxson8u0Tu7oHHwdXGf6e9Ldms5arTMq3gb1l/vyCbjiNIreany/EY4dXmwd k1Zg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1791813928; x=1792418728; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=QXl9Yl5Xju6RUUl/m80Z0Pv0GGgyouWP8vKZWY0fpzk=; b=eFf+OHf9TDKMLhhBzGrT0dyADHYHqa+xrh9J9NNa55wYU8+l/lGGOPFK0HMVSMrpIB H35P4oltzI8vRApmGVjIZXt1AfLSDyvksWx568hagDl4SYSO3UBr/lZfBNnJkWUJXyOo TyTKzJi6Cfl6QWN5qESp29b4VVH3vj0IQOdtgt/2+R3MntgEdJIS60sJLq3EV6A0IWkv NuC7arwR9j9u4ctrK603ndUOK5quP9ehGarK6R3+8dz49kw89ggG/dPB9r9vRYceCBh7 TLBK7ljC16QR2MmOHsTizTKMGz/Tgs9OPlf0Ymg2vrJsGjp5I7+KXxLl6WqWfPLcb3+m 8DQw== X-Gm-Message-State: AFq9FYI4Zn+H8SxXPAgvzXfiAl6ed49GlFXyMVD318nwOUT1/+d9lKyy wC+Kn+dfKWx8ZXYQ0oMOgDIzUtd5fLeVjm1b/Ej/Or2x6qzGh/4Gt4/w X-Gm-Gg: AYBFou2ukKOpQKIyKNi3LS4Fq0ukl46jpuiu/R8Kaw2OvENUBX393gNXsCU/KY3Bye0 YKotJqjshxS1qendMnwRAvhScJbud+k6ADrm8yEWB9R1GcwiqkdTR60GzpBgi3j0PLVVXQg8KfL nkSPxvr7kW+FN0rgOTwh0g/hXvLtJVA693ryOxAh7UcdGEj/odK7UpcvOddWL6R3ePgnXeE2nGx h0Wvo4z1vYRrT7itmWj+FGWfIZIW9A5TN7gDs4+apdJEzLrUyFFygrtEBuwRebnHqLbgPGRwM31 SRMWJdVn/qNK/cBlUWWzNNy32j4xoL0M7qfh0EHfd8zDBjD4DZytsOq9oEFwoNY5xSGE6YMuK7B QzkEdbzX0opLDGLC+TBkD3XLDrZkTvcG0XQoHHOwcxCsvFqtkTw4crnNF9ERFL/ljNlZD8gi3PC FktYMay7boL1x26jUfdmGY6wqS9/n8gSTsgRCVou4vg2rp3zXU2H0H/tnZhR9LVcuSs0snM+XQO /ZABAYYhWvBXQxbdNTdF2D5DA== X-Received: by 2002:a05:600c:3488:b0:49f:e941:d6e with SMTP id 5b1f17b1804b1-4a18e4c05d9mr182482345e9.21.1791813928351; Mon, 12 Oct 2026 07:05:28 -0700 (PDT) From: Filip Hejsek Date: Mon, 12 Oct 2026 16:05:09 +0200 Subject: [PATCH v10 10/12] qmp: add chardev-window-size-changed command MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261012-console-resize-v10-10-2c3b10d829b3@gmail.com> References: <20261012-console-resize-v10-0-2c3b10d829b3@gmail.com> In-Reply-To: <20261012-console-resize-v10-0-2c3b10d829b3@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , Dominique Martinet , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Szymon Lukasz X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1791813907; l=2665; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=EUZgLrU765xvEyiNI7klksTLZW/Pwy/vd1jodSNW3XQ=; b=jt+4jIsb2UNXt7YhB4LCKLGcGKwqBws8mvQ0aCLqwgjxZ/uYmJHEt/01ASPi/XaBDAaY0ZcdC 12GkHdlD97TC/a19zI8h14pFLF6bacn45jpLmDbH3XI2wMgJ61sqBix X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::336; envelope-from=filip.hejsek@gmail.com; helo=mail-wm1-x336.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1791813967078158500 From: Szymon Lukasz The management 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 Acked-by: Michael S. Tsirkin --- chardev/char.c | 14 ++++++++++++++ qapi/char.json | 31 +++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/chardev/char.c b/chardev/char.c index 8c8386e5b5..fe513ae962 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -1347,6 +1347,20 @@ bool qmp_add_client_char(int fd, bool has_skipauth, = bool skipauth, return true; } =20 +void qmp_chardev_window_size_changed(const char *id, uint16_t cols, + uint16_t rows, Error **errp) +{ + Chardev *chr; + + chr =3D qemu_chr_find(id); + if (chr =3D=3D NULL) { + error_setg(errp, "Chardev '%s' not found", id); + return; + } + + qemu_chr_resize(chr, cols, rows); +} + /* * Add a timeout callback for the chardev (in milliseconds), return * the GSource object created. Please use this to add timeout hook for diff --git a/qapi/char.json b/qapi/char.json index 7ae67eedff..842e003194 100644 --- a/qapi/char.json +++ b/qapi/char.json @@ -862,6 +862,37 @@ { 'command': 'chardev-send-break', 'data': { 'id': 'str' } } =20 +## +# @chardev-window-size-changed: +# +# Notifies a chardev about the current size of the terminal connected +# to this chardev. The information will be forwarded to the guest if +# the chardev is connected to a virtio console device. +# +# The initial size is 0x0, which should be interpreted as an unknown +# size. +# +# Some backends detect the terminal size automatically, in which case +# the size may unpredictably revert to the detected one at any time. +# +# @id: the chardev's ID +# +# @cols: the number of columns +# +# @rows: the number of rows +# +# Since: 11.2 +# +# .. qmp-example:: +# +# -> { "execute": "chardev-window-size-changed", "arguments": { "id": = "foo", "cols": 80, "rows": 24 } } +# <- { "return": {} } +## +{ 'command': 'chardev-window-size-changed', + 'data': { 'id': 'str', + 'cols': 'uint16', + 'rows': 'uint16' } } + ## # @VSERPORT_CHANGE: # Emitted when the guest opens or closes a virtio-serial port. --=20 2.56.0 From nobody Thu Oct 22 19:24:51 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=1791813960; cv=none; d=zohomail.com; s=zohoarc; b=KdLoYDt11Edhp1XwqKP5xQbbuAQKxdSPZnGucVFbWUJ964MqKIYUfqAjZF9SZsSl9KTQEDz+Y/1eptUXtfVWJGzXYtnQvGrePBScucIq+88EbUxGDAu64IXVi5KzbLLig/wlpLrU6C1n+kiO20LjPu7mIehAYi+BqTivfvht788= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791813960; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=sOmnL6SVS6NfCpYrYfO2rS+oo3gMVqcjlaO3QERQMfg=; b=B3Uy7X69h78EmB2ivH8TKRuzf1O1J4PQ5EFLNHX9jVmx60tFZfFv7PZiD1unU798RhfZoE9zL0wVX/BkrwaZj0AgwE+R7uKIhqNW/opkRgdVQR9IEfMT92lDG9nCM35aPBCcoIxBgQBmArRvb6FELkDxOOfPD5h3bcZcArbdYeI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1791813960116803.3650151369999; Mon, 12 Oct 2026 07:06:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGGeo-0000YU-L7; Mon, 12 Oct 2026 10:05:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1xGGej-0000Op-MT for qemu-devel@nongnu.org; Mon, 12 Oct 2026 10:05:33 -0400 Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xGGeh-0006AA-Aw for qemu-devel@nongnu.org; Mon, 12 Oct 2026 10:05:33 -0400 Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-4a171b677d2so11426015e9.0 for ; Mon, 12 Oct 2026 07:05:30 -0700 (PDT) Received: from localhost (ip-78-44-39-34.bb.vodafone.cz. [78.44.39.34]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4a18c1e33d2sm400314925e9.0.2026.10.12.07.05.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Oct 2026 07:05:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1791813930; x=1792418730; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=sOmnL6SVS6NfCpYrYfO2rS+oo3gMVqcjlaO3QERQMfg=; b=H97ybdadFx7PT5tFbuzl0XzB4Hs1N2qJAm+JdL+jdACfKzutOn8+YtmL7hxUQpkC7p LkJUXD8UF5ZYxTqAavVGPocawGm2QblPS7m6Wdf32jtTjt2ZhnA/wOfZHWElvDTNcKDu OPL4ET3Lxn9mFSxh3oy0bzZnKcvgG6FqiroxK+3yMIgHHuJazSSQpur76XlRr1R+DQjb wSJshfdNf7ULsjMtRNbwAGf1t9Fy7Ah64P7jeqwq75/EgCPIuZH6UWndZZyXNoH24fSo GEmcpqsUdcacpNRn4lRQ/u92mlAvBkkeTMYzGsRLZU3LCS762WOEQa5Y+VVyTEarkoKU tEYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1791813930; x=1792418730; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=sOmnL6SVS6NfCpYrYfO2rS+oo3gMVqcjlaO3QERQMfg=; b=S59gVrSVsKkAjkICgsttHLu9cr6pda5AGFCgVe5v5tlrWZTDJb8B6cgvmEut1p4MDf Lge2rvClR1sPBlZpdsFjkudlNJKzve55aNxOR2ERbPfU4S8s2sylxAP33VcaXOI899Ga abqvNIO0V1rMQzcKnIBz8Qskjc2cekOwgzif7iDd5YqazvB/i7C0eViNXzexTdAxD0cU 7V0pW86kFbnnbeUN/M1rLmTb7JZaVE6gZJIOMcICdBzcmp+0diFrUe1p4FGHuMbt8Ki2 nT2PM1ZgkkXsnb92rl6byuAAt1OF8k5BVU+8Ork8gZvSfSp+vA7Yhu/hh/ofm/AMXPV5 0bqQ== X-Gm-Message-State: AFq9FYInsi+fZnzsfzcyIFebKfqwFkWjY3envI3NKIxXczD+FDC6jkGK cIcv5vt8jI/2JUvvmFRt05SHN773dyGr0tcabJl9WsQC5TRpUI29rX6e X-Gm-Gg: AYBFou0ItG8ByyU8zAFbsKe8I9AThxECQLCEDFgM6hBCHcJsojxOH4vTkHxPcoaG5mO nvFtQGlfQhQWgNEF9W4A5wdIkFr6xpwf5EkbVG2cqocc1enknTuzxQ7o6Ltps3Kw8mp/skaHg3r GyTZX5jbnRInqXgGa+3hJ4vMKQe0Q9KG8AXltIjLrhSEMm6Yo8xT+mT7LdbUl7XC7i6AoLt0lJc hGZ7pnhtIwz4DUgX7T7KRumepk3k8mQkkDb7TduJcgaGaDGquVJpWoDD2HwhgvRbUKyGEWRukjZ zN+a7daWwPl7Odi5VxrVEFbfWRWLBQff1ckfXb0XWZVEE7fX3tzaJ9mme5ag1ZxW/gXYU0wdvuO +WlT+RSAvAVnMKi10S/KLCpI8D4Bn6HDXPyDnOt7KZU2b3QXOLcfXoLZs+RwfyhsMC08t2G/3vO 4zTuonVZA3uIEh6FCxFw37k9+Bco7Zs2yZ+dMuWhqswvh5OvyMKzIl7vE0zj4ZjlnfjCORytVy9 VjQl966ObMqsJ/4hI5gOTxsi5w= X-Received: by 2002:a05:600c:6388:b0:4a1:6f78:8419 with SMTP id 5b1f17b1804b1-4a18e3ee8f9mr180525875e9.0.1791813929636; Mon, 12 Oct 2026 07:05:29 -0700 (PDT) From: Filip Hejsek Date: Mon, 12 Oct 2026 16:05:10 +0200 Subject: [PATCH v10 11/12] virtio-serial-bus: add terminal resize messages MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261012-console-resize-v10-11-2c3b10d829b3@gmail.com> References: <20261012-console-resize-v10-0-2c3b10d829b3@gmail.com> In-Reply-To: <20261012-console-resize-v10-0-2c3b10d829b3@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , Dominique Martinet , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Szymon Lukasz X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1791813907; l=7998; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=DCeeNDEpPIwrO0QpkSIOccbZbWp9F5E4NywqG+YkJm4=; b=lwxP7npgr0mCH6Pq8OkERFy8SBMZ+PZXTp68U54BHBRcSSAX4aIA0A1nr7dfxHHwPGxOZKFto rsmtfAy2yj8BjTz3a03OMSQo5/KihzLjNyiKrOaBjXOZOvVoX9Z31F4 X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::330; envelope-from=filip.hejsek@gmail.com; helo=mail-wm1-x330.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1791813963020158500 Implement the part of the virtio spec that allows to notify the virtio driver about terminal resizes. Gate the new resize support behind the console-size property, which defaults to off. To implement the property, restore VirtIOSerial::host_features (previously removed by commit d0660e5b7fc7e97926232d13d2500a16df32b310). The virtio spec contains two methods to inform the guest about console size: For legacy drivers, we have only one port and we put the terminal size in the config space and inject the config changed interrupt. For multiport devices, we use the control virtqueue to send a packet containing the terminal size. Unfortunately, old versions of the Linux kernel used an incorrect order for the fields (rows then cols instead of cols then rows), until it was fixed by commit 5326ab737a47278dbd16ed3ee7380b26c7056ddd. As a result, when running an old guest kernel, the number of rows and columns will be swapped. Based on a patch originally written by Szymon Lukasz , but partially rewritten to fix various corner cases. Signed-off-by: Szymon Lukasz Signed-off-by: Filip Hejsek Acked-by: Michael S. Tsirkin --- hw/char/trace-events | 1 + hw/char/virtio-serial-bus.c | 81 +++++++++++++++++++++++++++++++++++= +++- include/hw/virtio/virtio-serial.h | 7 ++++ 3 files changed, 87 insertions(+), 2 deletions(-) diff --git a/hw/char/trace-events b/hw/char/trace-events index a3fcc77287..e387c8853f 100644 --- a/hw/char/trace-events +++ b/hw/char/trace-events @@ -11,6 +11,7 @@ serial_update_parameters(uint64_t baudrate, char parity, = int data_bits, int stop =20 # virtio-serial-bus.c virtio_serial_send_control_event(unsigned int port, uint16_t event, uint16= _t value) "port %u, event %u, value %u" +virtio_serial_send_console_resize(unsigned int port, uint16_t cols, uint16= _t rows) "port %u, cols %u, rows %u" virtio_serial_throttle_port(unsigned int port, bool throttle) "port %u, th= rottle %d" virtio_serial_handle_control_message(uint16_t event, uint16_t value) "even= t %u, value %u" virtio_serial_handle_control_message_port(unsigned int port) "port %u" diff --git a/hw/char/virtio-serial-bus.c b/hw/char/virtio-serial-bus.c index c36e18a4cf..882765ac88 100644 --- a/hw/char/virtio-serial-bus.c +++ b/hw/char/virtio-serial-bus.c @@ -261,6 +261,68 @@ static size_t send_control_event(VirtIOSerial *vser, u= int32_t port_id, return send_control_msg(vser, &cpkt, sizeof(cpkt)); } =20 +/* + * This struct should be added to the Linux kernel uapi headers + * and later imported to standard-headers/linux/virtio_console.h + */ +struct virtio_console_resize { + __virtio16 cols; + __virtio16 rows; +}; + +static void send_console_resize(VirtIOSerialPort *port) +{ + VirtIOSerial *vser =3D port->vser; + VirtIODevice *vdev =3D VIRTIO_DEVICE(vser); + + if (!virtio_has_feature(vser->host_features, VIRTIO_CONSOLE_F_SIZE)) { + return; + } + + trace_virtio_serial_send_console_resize(port->id, port->cols, port->ro= ws); + + if (use_multiport(vser)) { + struct { + struct virtio_console_control control; + struct virtio_console_resize resize; + } buffer =3D {}; + + virtio_stl_p(vdev, &buffer.control.id, port->id); + virtio_stw_p(vdev, &buffer.control.event, VIRTIO_CONSOLE_RESIZE); + virtio_stw_p(vdev, &buffer.resize.cols, port->cols); + virtio_stw_p(vdev, &buffer.resize.rows, port->rows); + + send_control_msg(vser, &buffer, sizeof(buffer)); + } +} + +void virtio_serial_resize_console(VirtIOSerialPort *port, + uint16_t cols, uint16_t rows) +{ + VirtIOSerial *vser =3D port->vser; + VirtIODevice *vdev =3D VIRTIO_DEVICE(vser); + + if (port->cols =3D=3D cols && port->rows =3D=3D rows) { + return; + } + + port->cols =3D cols; + port->rows =3D rows; + + if (port->id =3D=3D 0 && !use_multiport(vser) && + virtio_vdev_has_feature(vdev, VIRTIO_CONSOLE_F_SIZE)) { + virtio_notify_config(vdev); + } + + /* + * We will send these messages even before we told the guest that + * it is a console port (by sending VIRTIO_CONSOLE_CONSOLE_PORT + * message), but that should be fine as the guest will likely + * ignore them. + */ + send_console_resize(port); +} + /* Functions for use inside qemu to open and read from/write to ports */ int virtio_serial_open(VirtIOSerialPort *port) { @@ -403,6 +465,7 @@ static void handle_control_message(VirtIOSerial *vser, */ if (vsc->is_console) { send_control_event(vser, port->id, VIRTIO_CONSOLE_CONSOLE_PORT= , 1); + send_console_resize(port); } =20 if (port->name) { @@ -538,6 +601,7 @@ static uint64_t get_features(VirtIODevice *vdev, uint64= _t features, =20 vser =3D VIRTIO_SERIAL(vdev); =20 + features |=3D vser->host_features; features |=3D BIT_ULL(VIRTIO_CONSOLE_F_EMERG_WRITE); if (vser->bus.max_nr_ports > 1) { virtio_add_feature(&features, VIRTIO_CONSOLE_F_MULTIPORT); @@ -549,11 +613,18 @@ static uint64_t get_features(VirtIODevice *vdev, uint= 64_t features, static void get_config(VirtIODevice *vdev, uint8_t *config_data) { VirtIOSerial *vser =3D VIRTIO_SERIAL(vdev); + VirtIOSerialPort *port; struct virtio_console_config *config =3D (struct virtio_console_config *)config_data; =20 - config->cols =3D 0; - config->rows =3D 0; + port =3D find_port_by_id(vser, 0); + if (port) { + config->cols =3D virtio_tswap16(vdev, port->cols); + config->rows =3D virtio_tswap16(vdev, port->rows); + } else { + config->cols =3D 0; + config->rows =3D 0; + } config->max_nr_ports =3D virtio_tswap32(vdev, vser->serial.max_virtserial_port= s); } @@ -716,6 +787,10 @@ static void virtio_serial_post_load_timer_cb(void *opa= que) port->host_connected); } vsc =3D VIRTIO_SERIAL_PORT_GET_CLASS(port); + /* + * TODO: let the guest know about new console size if it has chang= ed + * (this will require sending old size in the migration stream) + */ if (vsc->set_guest_connected) { vsc->set_guest_connected(port, port->guest_connected); } @@ -1142,6 +1217,8 @@ static const VMStateDescription vmstate_virtio_consol= e =3D { static const Property virtio_serial_properties[] =3D { DEFINE_PROP_UINT32("max_ports", VirtIOSerial, serial.max_virtserial_po= rts, 31), + DEFINE_PROP_BIT64("console-size", VirtIOSerial, host_features, + VIRTIO_CONSOLE_F_SIZE, false), }; =20 static void virtio_serial_class_init(ObjectClass *klass, const void *data) diff --git a/include/hw/virtio/virtio-serial.h b/include/hw/virtio/virtio-s= erial.h index da0c91e1a4..bda6d5312a 100644 --- a/include/hw/virtio/virtio-serial.h +++ b/include/hw/virtio/virtio-serial.h @@ -145,6 +145,9 @@ struct VirtIOSerialPort { bool host_connected; /* Do apps not want to receive data? */ bool throttled; + + /* Terminal size reported to the guest. Only used for consoles. */ + uint16_t cols, rows; }; =20 /* The virtio-serial bus on top of which the ports will ride as devices */ @@ -186,6 +189,8 @@ struct VirtIOSerial { struct VirtIOSerialPostLoad *post_load; =20 virtio_serial_conf serial; + + uint64_t host_features; }; =20 /* Interface to the virtio-serial bus */ @@ -220,5 +225,7 @@ size_t virtio_serial_guest_ready(VirtIOSerialPort *port= ); */ void virtio_serial_throttle_port(VirtIOSerialPort *port, bool throttle); =20 +void virtio_serial_resize_console(VirtIOSerialPort *port, + uint16_t cols, uint16_t rows); =20 #endif --=20 2.56.0 From nobody Thu Oct 22 19:24:51 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=1791814011; cv=none; d=zohomail.com; s=zohoarc; b=LbZ6bFQFyKgAc0LNL/hwN8+pUjv4fohxsETcAYIHNQgI220KYMRgPAe3YpqCfPPMxyqdvIda9zp/dRlRwc5iALr4J0pwqQTEzawLxGMoZX1JQOhsUmxAL49aDTyBpmQmhmKcXcB9TQYjrbt7rvXhTi9rYNF5nexBVks8CVkaYf8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791814011; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=i7D8m4p5d44A3c6h9sfrKhYabzXBklBQd1u3SRQCaDA=; b=i6kvvOt7zMl64IwIWcmTlggzfKC2vAw7otnnG8oFV7IS1Z6Yeky2EDGtY6E8Z9QWOw9pSLzMCTr+3ZN/F4xWmHABbaHu+seRl7vighXtTK/dbJed5iSQSFDCoyixSmEIDaChgZtUOh3I2cqT2dk6PhG8ixP6BlIzmWp4WyHxcH8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1791814011037937.5770139436196; Mon, 12 Oct 2026 07:06:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGGep-0000Yq-F2; Mon, 12 Oct 2026 10:05:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1xGGek-0000QU-Fr for qemu-devel@nongnu.org; Mon, 12 Oct 2026 10:05:34 -0400 Received: from mail-wm1-x334.google.com ([2a00:1450:4864:20::334]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xGGei-0006AV-Pa for qemu-devel@nongnu.org; Mon, 12 Oct 2026 10:05:34 -0400 Received: by mail-wm1-x334.google.com with SMTP id 5b1f17b1804b1-4a02718da81so14829595e9.1 for ; Mon, 12 Oct 2026 07:05:32 -0700 (PDT) Received: from localhost (ip-78-44-39-34.bb.vodafone.cz. [78.44.39.34]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4a18bf2343asm540736965e9.9.2026.10.12.07.05.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Oct 2026 07:05:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1791813931; x=1792418731; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=i7D8m4p5d44A3c6h9sfrKhYabzXBklBQd1u3SRQCaDA=; b=JHDAw38gk9ukmZmToZcFkjAz2enbKIRx/WArpvgj4jHg6SoRKr0LVNChFBCuhTujto jIwa1di3LUX4rXV3qrt16tYKt+1yNi9wSHjFJo7GAhUxNOuqN3prJBQbb21f1zqOjltl MxlBQCuKwSlUtx81c2DMgUChOJk2pVil2137PDssMKBIqjy4o9dN8F1U3bFA/0dzZtA5 ZcgFTZr8R7+iU1GTKGkJtN/BiQNEHgc9Pd5FRYE3FBd4j8Z5bD4tPpeMS4mOxEId5eh3 xEZ25x5mdBgOtasbx8B8VkSFN/xB0kiORp17iICgZcNVE5kv6lFXNL9VvieRmKys6NBb MhvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1791813931; x=1792418731; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=i7D8m4p5d44A3c6h9sfrKhYabzXBklBQd1u3SRQCaDA=; b=dkkrGRG9Yg0YiOUpi2iTL2jTuhuGUYp3LuE1GHsc4FUfF+AuV4x4j8bRvt3i9ZNibX GUdgPnm7674ZAebRGPhi1m3Lj4txc1dTbIz/nNP8u3OcfHHBU60TH30jRjXe/vJKdvlA X+L9giYRxay4mp3sr1IogwOZ+ynI5tTbZLDPEaYTmvJcLkngrPV6O0RWKbpdVpqq3bwN n0yThUjpSZHOFel8sFi4yeQluT9UNalKy6jII+0/ZNcWRAHfEoCCuy1jGfLNLQZllnp+ saa7P8+iRpeOESZHZD1KzPQ0CTQJFiCU2Duy5IC2AcVq8LkvNWCWpF4EJZKIQ+bjLE24 x7/Q== X-Gm-Message-State: AFq9FYIfdIzt+NsGmRUDd8th1oQ+3L43FcftRengJkhgfaWyusPJm/Ah h9aOMqhhJyxDiRpPzl3LOUdjhaeknoeagbt0M4DsHeoVSyCyRL48sPAs X-Gm-Gg: AYBFou1f2RfOBEMew1IDL/55YZlwnc2+N88PiFKtmH5QLiCaPwdIeFHnh/FyW6PJYwh DpzWuSilhBM2SCeY7J550644Boos928OsMgPFQRRLPXCVvLo1jPPBuynIPXK6rlEdzWVj74NgaZ Gb553lO2QIuxmcVDt46hP7AuW695mRXShDe+NNri9paMMEI1uYFqLvoOpRpdeaax3V75afFKOUx lFTn8P558qcFuQj9zRgRvamL19pu60CPKaiwLb0kaCkG/KeoI591eWsaO4wK/4SQ9i9WuCufeqG bIl0c3mNU+nM1+WZYqX6zYkqCLf+zZxNUxBPoufpHB3eIdTVADJlqmn0hSRL94viKE6vpS6Wf8/ N8s6EAstdxkn4uyU/P7HNwT0OL2f+H9haD5nmFuLxDhpzuXgzlMSmIrgDYrd7+6Dm3A/Kme174K uxxanwXPdbmmUnl9o0TTubWIx5A+YZhHuIVI+9lMnJjlniYjtcmW+fSe4mgbaCBh0TiMfTOIkN5 8sgC2oARcoLKLC98BoI+uPm4A== X-Received: by 2002:a05:600c:3146:b0:49d:1fd8:b874 with SMTP id 5b1f17b1804b1-4a18e4af3a8mr193838655e9.19.1791813930746; Mon, 12 Oct 2026 07:05:30 -0700 (PDT) From: Filip Hejsek Date: Mon, 12 Oct 2026 16:05:11 +0200 Subject: [PATCH v10 12/12] virtio-console: notify the guest about terminal resizes MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261012-console-resize-v10-12-2c3b10d829b3@gmail.com> References: <20261012-console-resize-v10-0-2c3b10d829b3@gmail.com> In-Reply-To: <20261012-console-resize-v10-0-2c3b10d829b3@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , Dominique Martinet , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Szymon Lukasz X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1791813907; l=3302; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=2Jg6Y1T5V2e9cTsZrGPksLAGaFCZH0boAkiX4p5Ls9o=; b=Xv9KOfooAAUjJcNUvh7ohzON6uvO+8FSxLjkuNj+HQTWuiPYSBYC+soOV7enqvR+CSBZhtTBM aIW3/5hZUuqAcMSNSZclGvQRZBI4i2bGv4/tHZke2Jm9v7FS3Pz6CsZ X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::334; envelope-from=filip.hejsek@gmail.com; helo=mail-wm1-x334.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1791814013732158500 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 Acked-by: Michael S. Tsirkin --- hw/char/virtio-console.c | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/hw/char/virtio-console.c b/hw/char/virtio-console.c index 36ad2ddc3f..db9d8ca797 100644 --- a/hw/char/virtio-console.c +++ b/hw/char/virtio-console.c @@ -107,6 +107,15 @@ static ssize_t flush_buf(VirtIOSerialPort *port, return ret; } =20 +static void virtconsole_update_size(VirtIOSerialPort *port) +{ + uint16_t cols, rows; + VirtConsole *vcon =3D VIRTIO_CONSOLE(port); + + qemu_chr_fe_get_winsize(&vcon->chr, &cols, &rows); + virtio_serial_resize_console(port, cols, rows); +} + /* Callback function that's called when the guest opens/closes the port */ static void set_guest_connected(VirtIOSerialPort *port, int guest_connecte= d) { @@ -171,6 +180,23 @@ static void chr_event(void *opaque, QEMUChrEvent event) } } =20 +static void chr_event_console(void *opaque, QEMUChrEvent event) +{ + VirtConsole *vcon =3D opaque; + VirtIOSerialPort *port =3D VIRTIO_SERIAL_PORT(vcon); + + trace_virtio_console_chr_event(port->id, event); + switch (event) { + case CHR_EVENT_OPENED: + case CHR_EVENT_MUX_IN: + case CHR_EVENT_RESIZE: + virtconsole_update_size(port); + break; + default: + break; + } +} + static int chr_be_change(void *opaque) { VirtConsole *vcon =3D opaque; @@ -179,7 +205,9 @@ static int chr_be_change(void *opaque) =20 if (k->is_console) { qemu_chr_fe_set_handlers(&vcon->chr, chr_can_read, chr_read, - NULL, chr_be_change, vcon, NULL, true); + chr_event_console, chr_be_change, + vcon, NULL, true); + virtconsole_update_size(port); } else { qemu_chr_fe_set_handlers(&vcon->chr, chr_can_read, chr_read, chr_event, chr_be_change, vcon, NULL, fal= se); @@ -207,7 +235,7 @@ static void virtconsole_enable_backend(VirtIOSerialPort= *port, bool enable) VirtIOSerialPortClass *k =3D VIRTIO_SERIAL_PORT_GET_CLASS(port); =20 qemu_chr_fe_set_handlers(&vcon->chr, chr_can_read, chr_read, - k->is_console ? NULL : chr_event, + k->is_console ? chr_event_console : chr_e= vent, chr_be_change, vcon, NULL, false); } else { qemu_chr_fe_set_handlers(&vcon->chr, NULL, NULL, NULL, @@ -239,7 +267,7 @@ static void virtconsole_realize(DeviceState *dev, Error= **errp) */ if (k->is_console) { qemu_chr_fe_set_handlers(&vcon->chr, chr_can_read, chr_read, - NULL, chr_be_change, + chr_event_console, chr_be_change, vcon, NULL, true); virtio_serial_open(port); } else { --=20 2.56.0