From nobody Sun Sep 28 17:03:46 2025 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=1757648859; cv=none; d=zohomail.com; s=zohoarc; b=aYE6spxmzykr6lOBTpdXq0msuURGm3fCFcF+uRrN4CoqelrWV9HOUBGbSlqEvsjYJu02pl6Bi+r4V99RwCNtx5uq4iFco6lTcDeAdbDc+cQN7cPre8BryfBXI9qDRQ+rdXz32vP229pSPg2ezn+xCy2osfmjuNqDHSMnH7wVuAA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1757648859; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=y8b1m3nNjRvsgCA/3OAkRK5Tn4EnpI6Wrj/uOCDNwX4=; b=ljfh8wx5bArCYaOBNJ5qQhTYoWbzmcDd628m2TCr/ssf6nE/jl4KdF7Rmdd1Nu+BBY8/Y9CMdNKS8B5zP0jPgwu9YSJvQq3P5Gcg4+i5ze+U4WLk5x6jotH5CjIRLHjJlWKidcMRcIHhA0n4U3n/FN/qedAB+mHRqc9Wyzpi2YU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1757648859172673.728637885559; Thu, 11 Sep 2025 20:47:39 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uwugy-0006zV-Vb; Thu, 11 Sep 2025 23:43:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uwugw-0006yo-Fh for qemu-devel@nongnu.org; Thu, 11 Sep 2025 23:43:19 -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 1uwugl-0007uI-RB for qemu-devel@nongnu.org; Thu, 11 Sep 2025 23:43:17 -0400 Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-45b9a856dc2so8654955e9.0 for ; Thu, 11 Sep 2025 20:43:04 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-45e0155b415sm27707715e9.0.2025.09.11.20.42.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Sep 2025 20:42:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757648580; x=1758253380; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=y8b1m3nNjRvsgCA/3OAkRK5Tn4EnpI6Wrj/uOCDNwX4=; b=g9yuTLLB+Zma8z8MR4e6xP6oEg0bpk1Jwhjx2kfXpqyb7lOE8ShDLwWDG8La5GWt1o wvku/OxmfjHFjiq6IyviKIYcoz8r/Pu6wtDO24I4/Kli4iav2wsWvBtn5oE4LQHJpNj9 Ecvz47EQLa1JNsrzNak6DUUpoHS5+GvWzb+WgJnl1MYFXev0d3+hb6mF7c19wWskP7+L r4o62+zmZROfXhpheEYkCfab7NWrQdwhtgq/s446OLmY0P0F7ipAvLuEeTeIEP30N4kt UWMEXypChoWUXkAbXFQ92KmM7YQ8gAnifQItz/P3/IwouIcbicCKWLifs2sPXvgtPmdi /ydw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757648580; x=1758253380; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=y8b1m3nNjRvsgCA/3OAkRK5Tn4EnpI6Wrj/uOCDNwX4=; b=F1Bk+095ouJAIjp2P1L1ynbJ9nj2/FnqcVt0oWGlHbMkdM5NfgJ00PfXcKwtkJeV7C BAyc6QMz9WFF2RWBZyqQ4eCkrTtVvrBe8128NeYzajBXLroG/BBD92rLGDoQ3VTQSf/R fUYClDzv+8cpeU4k0GNXvnLe6bjs5yLK+CMPBw7cO7x35XjXx0z3BWz6EtMEu7IsJ3Dn WvaRT277REvQ7WZFSZ9saruOeyf9GogYXBE74sctQ9+Ls2cmuCpoCfYj7E/YF/6CmVxp DnTEDB4l6bu+ezCryKtM/gBJa5w7xfg824OdVOM8n0r2U1fI8AhWT8gnhTIzsnxEmW+X rMSw== X-Gm-Message-State: AOJu0YxuS4PvxaJJxTpSIQbWnQjqCdNqR9F7V/eCAHs9od08H57FJ+gJ +o1PQ96OUTwPMh/3/WawbVKCeRV6Y0LDAjulet0sw+iXftUBp1yBIMNE X-Gm-Gg: ASbGncuQecI3L94djLPUZDVpp8QZxfqqFqUurZ/P9eapLZgVWAbmE3NZkGMP41G8ySi 4btqCRx8qRXgEY8kmA5wH4GRUV/eC6EFMruPds5NHfdxIjDo+vI0sddZPbH+sPSX+U6kBcEy5Lq zKxvFEmmUyrPoq+rZuClscQ7xP3HrQvQUD0wNH1TDYGd1a5b7JFgHoWeqaEWWIStVPLNqZ9FQP0 dH/I9PEZmuE2Y819mrtVGcFu8UMxJbKPVlkuEdO8VQOll3D9PAUpMlb4hWedWzNvCyLU1YgfAgt o+KcevMsIUH9gRzVQInAaRf9OogojKTpF3ciYQYSmdXJBWMggYJhR9FL1H2XReXxAyjr18khctF OWvcNpm+HIeR9qRKIug4VBxjREzrxQ64oJcrD+sjK/US9HkJP3qWM//GuFycgDmo= X-Google-Smtp-Source: AGHT+IH6m5IMKtcPuLfy1JvzpVMMGQA1koS7rQUsnUTc7QYLwY682hUUgwXqMT3gF/FXK+eDZrcZZQ== X-Received: by 2002:a7b:cd0b:0:b0:45d:dbf4:8880 with SMTP id 5b1f17b1804b1-45f211efda6mr8328245e9.27.1757648580159; Thu, 11 Sep 2025 20:43:00 -0700 (PDT) From: Filip Hejsek Date: Fri, 12 Sep 2025 05:39:46 +0200 Subject: [PATCH v4 01/10] chardev: add cols, rows fields MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250912-console-resize-v4-1-7925e444afc4@gmail.com> References: <20250912-console-resize-v4-0-7925e444afc4@gmail.com> In-Reply-To: <20250912-console-resize-v4-0-7925e444afc4@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , Szymon Lukasz , Filip Hejsek X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1757648576; l=2276; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=qKds+se7c4I8+/AcqhGDFyyVfjfxbvfkq+ChYOtNMzo=; b=Qz5gH8v3Vkob6UJw0Uc6Or4J/AKAFSF/tsOgz+XaBNTU9yJBczpx8EHeegYrVj7oF0SwckG4v IUWH/b42DYQCJo1Ox1Ef1Ow1ejW3rNFYFBxe8z5nxUAKmGrSCsRJ+Uz X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::330; envelope-from=filip.hejsek@gmail.com; helo=mail-wm1-x330.google.com X-Spam_score_int: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, DKIM_INVALID=0.1, DKIM_SIGNED=0.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: 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: 1757648860903116600 From: Szymon Lukasz These fields should be interpreted as the size of the terminal connected to a given chardev. Signed-off-by: Szymon Lukasz Signed-off-by: Filip Hejsek --- chardev/char-fe.c | 13 +++++++++++++ include/chardev/char-fe.h | 10 ++++++++++ include/chardev/char.h | 1 + 3 files changed, 24 insertions(+) diff --git a/chardev/char-fe.c b/chardev/char-fe.c index 158a5f4f551ee49120eee6ebdf772fb450739f47..8622898bd414c208b5a0397b439= e18a8bf0b8a92 100644 --- a/chardev/char-fe.c +++ b/chardev/char-fe.c @@ -329,6 +329,19 @@ void qemu_chr_fe_set_echo(CharBackend *be, bool echo) } } =20 +void qemu_chr_fe_get_winsize(CharBackend *be, uint16_t *cols, uint16_t *ro= ws) +{ + Chardev *chr =3D be->chr; + + if (chr) { + *cols =3D chr->cols; + *rows =3D chr->rows; + } else { + *cols =3D 0; + *rows =3D 0; + } +} + void qemu_chr_fe_set_open(CharBackend *be, bool is_open) { Chardev *chr =3D be->chr; diff --git a/include/chardev/char-fe.h b/include/chardev/char-fe.h index 8ef05b3dd095bdcaa51b10482261a29b1e8233c7..02d5606fa343ac64a76f48dcd25= 0b5431a0a7761 100644 --- a/include/chardev/char-fe.h +++ b/include/chardev/char-fe.h @@ -158,6 +158,16 @@ int qemu_chr_fe_wait_connected(CharBackend *be, Error = **errp); */ void qemu_chr_fe_set_echo(CharBackend *be, 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(CharBackend *be, uint16_t *cols, uint16_t *ro= ws); + /** * qemu_chr_fe_set_open: * @be: a CharBackend diff --git a/include/chardev/char.h b/include/chardev/char.h index 429852f8d9d3c5a7e061acea3561b019b15d658f..336b2e68d099e70a9abe71ef842= b160bf12ea932 100644 --- a/include/chardev/char.h +++ b/include/chardev/char.h @@ -65,6 +65,7 @@ struct Chardev { char *filename; int logfd; int be_open; + uint16_t cols, rows; /* used to coordinate the chardev-change special-case: */ bool handover_yank_instance; GSource *gsource; --=20 2.51.0 From nobody Sun Sep 28 17:03:46 2025 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=1757648834; cv=none; d=zohomail.com; s=zohoarc; b=Y7lyqQZkm8iUgveEVH5lymrWwThYNSv0sSsWjAlWVX1+GjHy4BBG7S7sVGlQSwewMP7ZsI9ahdtClNQrtDpW2wmvprvqh2RbzDY6mktNnpJmQHoGRzoA90Tu4O/u/0Cp77GCIMX6EfeQKkC9EEuSZTm+1oYkT1zogHixRf2x+jE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1757648834; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ll/JrM/39KrxwsO7SgDwAOKo4qPF2KTHNIS97BipdEc=; b=X2cSoyh3fcY8Y5XvYTh8nRgyR/lR+NC7p38Pr84PHq72XhkVmcWlGXmBXbQC7PK0TfDk3DNQqtpGowmSEqxdfZPOL2aH8Jj/EIH5QA4iOt5cAW0/xVrMwNKaBZrRT5D2CB2Kv1dKyiTD9Gc3lSbz5vM30mpTuDSlcRc7mmO1yyk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1757648834720593.924254087238; Thu, 11 Sep 2025 20:47:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uwugz-0006zZ-A3; Thu, 11 Sep 2025 23:43:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uwugw-0006ys-My for qemu-devel@nongnu.org; Thu, 11 Sep 2025 23:43:18 -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 1uwugl-0007up-Fc for qemu-devel@nongnu.org; Thu, 11 Sep 2025 23:43:17 -0400 Received: by mail-wm1-x334.google.com with SMTP id 5b1f17b1804b1-45de56a042dso8761365e9.3 for ; Thu, 11 Sep 2025 20:43:05 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-3e760787417sm4972731f8f.21.2025.09.11.20.43.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Sep 2025 20:43:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757648582; x=1758253382; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=ll/JrM/39KrxwsO7SgDwAOKo4qPF2KTHNIS97BipdEc=; b=VcA1Mj8IKZNKHwlu7mM9bq7Lf4YW9IdKXO94V4C0BYYA60Yqd4T23uh/LBAD1uXy9N Ul1n7tArh49ZYBu8vlzkSMTwkzbfvi+ukgk+QOx7+VlkTcNKg5GKsGDegpbQBnwy346W RPtSwe1RkmYqcNo/zOFE5JTkYSeB5fqzeEYoMSUPwZZyPe7AVrXjS1bEusBlL2XYZ03D +elYqhq02/nQfTOdZjqbN4h274RStkPfb7AmtyQwmPBTeYWfx+5C1q2mwI8J4LS7pG7v EOsp7MbB17/I7kJxR9yHLAsVhnjH72u/dG2J1K+Zp7Qq/SYmnXufzXIgUMBaSFHB5x4J ZXwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757648582; x=1758253382; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ll/JrM/39KrxwsO7SgDwAOKo4qPF2KTHNIS97BipdEc=; b=GHuiaUP1BHFGuAK/Tzh8wT7smgFMgA+EjzTkQzk2E9JEoI2cxJCaxdbhT356JFw8tS f4oVuIY3o8qMt+UHcnQfZl6zNM10uua11OsroKXHP3TcWZg/TC/fghjWvLoXDs0IMSrL oJ40h94B604aQ14BWclQZCo769eIlfkHAG4CV8KHWeAoLd+98QotlCRqN2N9P7VJUlW0 rObrgst+OosMfRvvoGz94hj1ky7dFGEWRAqLddm9bxvTcjKzcwD8ii96uxazbTJ81bJ8 RcVRIAzBkSjXBvdvp8NZVUc+V5JWgShvk4vOrvGUDW5UcZm/xfaGtgy6wTnIrSDZo7mc BYaQ== X-Gm-Message-State: AOJu0YxoLXY/URZJddcLe2neYKAVVR6LEYYR2Eko/JGOnAcF54Ab9o0w uo4qUXxqAo14raRhaByzfpxAfQuEqzdJB+8zGt1l4ojGpr2zzCeD6U/53m/duj6He7M= X-Gm-Gg: ASbGncsfa1azEK2Ukv0hEeit7woracQbYi+1WqyLMqwOLAKBEoQeGmM+M+DDnyp8FAl KQo694j2Jgl8LDqrnwi0luTHxBrRxkYplVZKWk19ZWMyBrg8KRWiLl9AGfBBP/f1a2S4hvwwGMU jq3Hn1aiCgPHSopM0kmC0VYjIKCakZSXpaPkUEpzWzUhyQd2AHKOjKxLqkWSlQ5r8ONB+P8mRqN Z8LThu1yumK1DWyLYvIb04jd4H+tSUB2VqwGFdNofv3U0LkR4sNO7j7wRFLQFw+2UGy6MsC5++h tuwsibdsgfrD+r1OM4PRDQJW77mTev/ooXn+JNG6m0DtFd0bh7GWxVn7Bn4Fqec/b9duQPxxGI6 /i1qYWUFqbrfV+kPHGcvbFNTo3nrAl0AFDrMSOdHZcC3tzzMfqObm9aVoPunIGeg= X-Google-Smtp-Source: AGHT+IHEr3ko1m1f2nZUPik+J9EjkvaAIjGTuUmZSUxS9Huf+h/Ka1+jDcoT8Pf0KO55dOjlwn/UXA== X-Received: by 2002:a05:600c:3b95:b0:45f:2207:ab2a with SMTP id 5b1f17b1804b1-45f2207ab66mr7272705e9.27.1757648582277; Thu, 11 Sep 2025 20:43:02 -0700 (PDT) From: Filip Hejsek Date: Fri, 12 Sep 2025 05:39:47 +0200 Subject: [PATCH v4 02/10] chardev: add CHR_EVENT_RESIZE MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250912-console-resize-v4-2-7925e444afc4@gmail.com> References: <20250912-console-resize-v4-0-7925e444afc4@gmail.com> In-Reply-To: <20250912-console-resize-v4-0-7925e444afc4@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , Szymon Lukasz , Filip Hejsek X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1757648576; l=9153; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=ug9xDk81wAxSNAh4SOoDU5gH9cGzzrxsRWSHUn88X1Q=; b=/ULY2OJVQC8UYkU2/VrnKM4OIbE2u7yVRl978IqxD5HddGVDbUQbs0I2ZTMURrPMJUXSuzJ2D xT2T8LOHQshCc9wLsQztUrTJhbc5gPaFMXFgpa+28LYUrb3hwe09dtW X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass 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, T_SPF_TEMPERROR=0.01 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: 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: 1757648836801116600 From: Szymon Lukasz Add a new chardev event, CHR_EVENT_RESIZE, which a backend should trigger if detects the size of the connected terminal changed. Signed-off-by: Szymon Lukasz Signed-off-by: Filip Hejsek --- backends/cryptodev-vhost-user.c | 1 + chardev/char.c | 1 + hw/block/vhost-user-blk.c | 1 + hw/char/terminal3270.c | 1 + hw/char/virtio-console.c | 1 + hw/ipmi/ipmi_bmc_extern.c | 1 + hw/scsi/vhost-user-scsi.c | 1 + hw/usb/ccid-card-passthru.c | 1 + hw/usb/dev-serial.c | 1 + hw/usb/redirect.c | 1 + hw/virtio/vhost-user-base.c | 1 + hw/virtio/vhost-user-scmi.c | 1 + include/chardev/char.h | 4 ++++ monitor/hmp.c | 1 + monitor/qmp.c | 1 + net/passt.c | 1 + net/vhost-user.c | 1 + 17 files changed, 20 insertions(+) diff --git a/backends/cryptodev-vhost-user.c b/backends/cryptodev-vhost-use= r.c index cb04e68b022abcc4d794df741dfc25181db660bc..9daca4b0f91e802f67cf3c7af1f= 8f26479026e1e 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 bbebd246c3a46c848847effc775f6390b5078e14..635d19fea4fd4bd0c7f171f055f= e940f9f5ebed5 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 c0cc5f6942815aa5e8d972553b3c76a623523ba4..942bc46171824017c98774d6fe7= 93059082385b6 100644 --- a/hw/block/vhost-user-blk.c +++ b/hw/block/vhost-user-blk.c @@ -412,6 +412,7 @@ static void vhost_user_blk_event(void *opaque, QEMUChrE= vent event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/char/terminal3270.c b/hw/char/terminal3270.c index d950c172921f91e41fad2b86a8d2a3791f6b0330..2fdf823e3bab3187fa6a4d2214e= cd991bac5f473 100644 --- a/hw/char/terminal3270.c +++ b/hw/char/terminal3270.c @@ -172,6 +172,7 @@ static void chr_event(void *opaque, QEMUChrEvent event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/char/virtio-console.c b/hw/char/virtio-console.c index 0932a3572b78eda866cd7680a32866f2077a91dd..881c862ce9d12027f392031bdea= 7dbe280ec5493 100644 --- a/hw/char/virtio-console.c +++ b/hw/char/virtio-console.c @@ -168,6 +168,7 @@ static void chr_event(void *opaque, QEMUChrEvent event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/ipmi/ipmi_bmc_extern.c b/hw/ipmi/ipmi_bmc_extern.c index 9f1ba7b2f8715daf3558fedde358c625c74da20e..b1f28c5b7db71d2cbd828227f17= 6a484629a14f7 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 25f2d894e7c827744a41302473712e7b34672536..a8d40046b714e5899262af7382a= 02611cb7f9a81 100644 --- a/hw/scsi/vhost-user-scsi.c +++ b/hw/scsi/vhost-user-scsi.c @@ -226,6 +226,7 @@ static void vhost_user_scsi_event(void *opaque, QEMUChr= Event event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/usb/ccid-card-passthru.c b/hw/usb/ccid-card-passthru.c index 1eea21a7337747667e9b1db97900c67b061f3729..08fec48dbe00cebef7e73053f2b= e76932175fb47 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 1c116d8b0fef7b23dd076aa6e7e81e52bb51cdbb..dd70db7705def9b93bd69cf176f= f0ed7d8cb2cad 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 f516ff42a114d014033ab9f2fce93d1ca48983a6..68c9b48f7a07558441c6d6cd3de= ccb98e833910b 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 ff67a020b471b2edfacc6d238ffc50b3ba36afc4..57ff26e775df46135b84449f229= 29fadd33c684a 100644 --- a/hw/virtio/vhost-user-base.c +++ b/hw/virtio/vhost-user-base.c @@ -267,6 +267,7 @@ static void vub_event(void *opaque, QEMUChrEvent event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/virtio/vhost-user-scmi.c b/hw/virtio/vhost-user-scmi.c index f9264c4374e87cb78f8937fda852089487b477e8..180787ec6d94793d4915a26389a= e2bece231064e 100644 --- a/hw/virtio/vhost-user-scmi.c +++ b/hw/virtio/vhost-user-scmi.c @@ -214,6 +214,7 @@ static void vu_scmi_event(void *opaque, QEMUChrEvent ev= ent) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/include/chardev/char.h b/include/chardev/char.h index 336b2e68d099e70a9abe71ef842b160bf12ea932..45cb6349756ac8072dffab93541= 08caf90cd3565 100644 --- a/include/chardev/char.h +++ b/include/chardev/char.h @@ -22,6 +22,10 @@ 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 changed + */ 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 34e2b8f748b425e1e4446e8e64aa25b1433d1162..be623a0ef0d0ebdf091d87e4d62= 0175ad60d1566 100644 --- a/monitor/hmp.c +++ b/monitor/hmp.c @@ -1444,6 +1444,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 cb99a12d94175b395033569e8ead908d9453e759..ff7548422bc60c64e47fc4f24ad= f092fc81c70b5 100644 --- a/monitor/qmp.c +++ b/monitor/qmp.c @@ -484,6 +484,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 32ecffb763b48af4e17b20b98537a4ffb3a6d3ea..2308e3b4d44aa410c374eb1b47e= 5081c2bef5cec 100644 --- a/net/passt.c +++ b/net/passt.c @@ -421,6 +421,7 @@ static void passt_vhost_user_event(void *opaque, QEMUCh= rEvent event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/net/vhost-user.c b/net/vhost-user.c index 8b96157145a7ab719b15b1b70aadac1e88ebfd5f..1c7fdf8267d8c214dcb6ae92e05= 21747a9f59a6f 100644 --- a/net/vhost-user.c +++ b/net/vhost-user.c @@ -367,6 +367,7 @@ static void net_vhost_user_event(void *opaque, QEMUChrE= vent event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } --=20 2.51.0 From nobody Sun Sep 28 17:03:46 2025 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=1757648687; cv=none; d=zohomail.com; s=zohoarc; b=hmyLypftTw3nn+FLgnhDfLMOYxIumSB/Vk7c3RUeo5lqR1g16FFOMWfCSOLM/2p3W57WXUnFvl5YXu1CLtflYV13emKk4Vz55MjrhtAiayv3cd9DzcFUdJztbURacXYW8BlLhU3muF1PXBhK8kUApGy3HhhXIbCRmljNhxAMLCc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1757648687; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=rvBTG/+9uS+f4Heq4c0Vn8ltH3qtiDIFK5wU9txYcq8=; b=NMIftM3Dicx6/2SRP5cHaa9vFCTyocNlmpBNMU8eWnGcByVKGpfgaWZ6/jDL7YOdSSWbMxLETS7iT4diXKXMRnViPrx2HzmghaTZaSBfI98r/6OmeNSw0r/rmFwGksX2dA/VLmFDxh7pKliKTA0lQC0jnjuJg5+MK8uHM4lFBmY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 175764868704058.86143194516319; Thu, 11 Sep 2025 20:44:47 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uwuhE-00073n-V4; Thu, 11 Sep 2025 23:43:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uwuh1-00070R-No for qemu-devel@nongnu.org; Thu, 11 Sep 2025 23:43:24 -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 1uwugr-0007v2-Sl for qemu-devel@nongnu.org; Thu, 11 Sep 2025 23:43:23 -0400 Received: by mail-wm1-x329.google.com with SMTP id 5b1f17b1804b1-45de287cc11so13615185e9.1 for ; Thu, 11 Sep 2025 20:43:07 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-3e7607d7b67sm4854169f8f.49.2025.09.11.20.43.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Sep 2025 20:43:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757648584; x=1758253384; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=rvBTG/+9uS+f4Heq4c0Vn8ltH3qtiDIFK5wU9txYcq8=; b=R8vT40dzkTHJcAi6RoSIrahsYJ7JgofqlPRzMJSrQORi6p4a6hg1StdvcUlAkDPAFE ON6eYqJmA5WQorUD9UVWxWbVv3isAQv7t0BZ3KDrixuHhW2QX9GOUufmHb9PJBcG2eJr OKI9cQ/e09h58oaimS0CiRraJwS5M+xpsYB7/xrHeyQITwxH72eShMGkpU94bmpjrG+v b0dOv7tfrrbIXjQ1fL/SdK1nPoCngj/dl6tTx+FuAWaEUf2J2CYf5/0zAUtcCwy3uUS7 Kij4fgJXRI9ck2KsmGZzYP/HwmnOoH9JwW9z/Big6M6N8yY13bylt63PgEiYVbz9t1Y0 Lh+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757648584; x=1758253384; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rvBTG/+9uS+f4Heq4c0Vn8ltH3qtiDIFK5wU9txYcq8=; b=r/cjfIo1C3/qxPpbJ+1xwQg145opw7yn/QH/DccWO46MIfzvczYSPhSnGSsvITTDrx bd4t7vd+026VSwdqUQrBsBcN1qieaUtpQJPo3LXB+7FVZxi3L5o3oIhr9WSgYO5A7uIC 61VC79UVkmmc7MUeVV20ukqi+UBr7oAr5tH4EWwPaXf2QjWUEqnKeseioSLXuDx199g/ XXaYptv1jUCnwkcvRP/C6BAGitVZqCFUOD3tDjzv5qtL78m6cHGn9NcIRRSEsyQH2/ts Wq//fGzQopnZhqLs5RxdQfc8Yv61pCrZZxaF5NlsOn/8NP9fw84zMcpIt6jE2xsAVgta 0f5g== X-Gm-Message-State: AOJu0YxYOjxMAEY7vhpOfJhm7MFqrIYMTC16dtMmX1jmOxbefiZ7Blqh gpZclY8ylZAfa3G7HrZk2FLbUPlV3aUUMCDSRrGn3Lun6XEYZzwoZkmV X-Gm-Gg: ASbGncuXouQAo6hB5swhwzT3VW7fmF5eV2IQejOKhvpWTmRSWThxkNh+NSfsHOO4xvK BDb3Qg4QRSpET91b9CXN7DoacUwjGEvjKw1NA7lEY85Cfz20GOsRQRNnP5tTAFe+wa72743jvzC r+AFmK+t9XyrPUlDWJBDXCLiYbQ5lb0v9RLv4/ARCf+3Bno5l1pOhr8Ra4T0Ww/bFpgSfOEuM+z sble9trXw4wQfq8z7tR8oiknSiY1Pu6YWCp86bMnUzJ7FpwsHCuRkom8g3z3Rp2/MclwH9WA9++ UIVJI3f7buJQQDSK9etgvptRIdeLH9O3Pd1D40XsEvCDgpRn/ecbyJQ0X4zNTkzF1wq5RbKg5zN WR9ynxSXizrLFTfuKTGAAya2irnGbHtlfJ2C40UhKShc3+5tGzlTo X-Google-Smtp-Source: AGHT+IEfvck7wnRYTk2oXQNe0QlyIoD9k9TagijaTv8UKPinsxSram1eYstKLL1yoJHlsoZCMBW5OA== X-Received: by 2002:a05:6000:40c9:b0:3b9:14f2:7edf with SMTP id ffacd0b85a97d-3e75e0f021emr3838422f8f.1.1757648583904; Thu, 11 Sep 2025 20:43:03 -0700 (PDT) From: Filip Hejsek Date: Fri, 12 Sep 2025 05:39:48 +0200 Subject: [PATCH v4 03/10] chardev: add qemu_chr_resize() MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250912-console-resize-v4-3-7925e444afc4@gmail.com> References: <20250912-console-resize-v4-0-7925e444afc4@gmail.com> In-Reply-To: <20250912-console-resize-v4-0-7925e444afc4@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , Szymon Lukasz , Filip Hejsek X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1757648576; l=1677; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=EbVowVm5LMaQukItgCxeH7pJeB8Mnn5jMPvv+tRJQpY=; b=TcTTZbYWPtZHagEsmXmmS5TTyqrgCMZKCzF6c6t1UxFEgDo2Iem5OPaJEUPXthyRh/PiCr+4B rBCtxNjU+l3BqDiuapunLEHlv/49DEaC735i695VP4CqMgK2pix4e1h X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::329; envelope-from=filip.hejsek@gmail.com; helo=mail-wm1-x329.google.com X-Spam_score_int: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, DKIM_INVALID=0.1, DKIM_SIGNED=0.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: 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: 1757648688612116600 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 Signed-off-by: Filip Hejsek --- chardev/char.c | 11 +++++++++++ include/chardev/char.h | 2 ++ 2 files changed, 13 insertions(+) diff --git a/chardev/char.c b/chardev/char.c index 635d19fea4fd4bd0c7f171f055fe940f9f5ebed5..b45d79cb9b57643827eb7479257= fdda2cf6b0434 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -351,6 +351,17 @@ int qemu_chr_wait_connected(Chardev *chr, Error **errp) return 0; } =20 +void qemu_chr_resize(Chardev *chr, uint16_t cols, uint16_t rows) +{ + if (cols !=3D chr->cols || rows !=3D chr->rows) { + chr->cols =3D cols; + chr->rows =3D rows; + if (chr->be_open) { + qemu_chr_be_event(chr, CHR_EVENT_RESIZE); + } + } +} + QemuOpts *qemu_chr_parse_compat(const char *label, const char *filename, bool permit_mux_mon) { diff --git a/include/chardev/char.h b/include/chardev/char.h index 45cb6349756ac8072dffab9354108caf90cd3565..1e69b038241074d627ebb7f096e= 98aee9953ebdf 100644 --- a/include/chardev/char.h +++ b/include/chardev/char.h @@ -232,6 +232,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.51.0 From nobody Sun Sep 28 17:03:46 2025 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=1757648831; cv=none; d=zohomail.com; s=zohoarc; b=bCx1wdUbfvzLqf/XijSZxUPtDowg8mffwOUaMpUeL46nOxkmNGACubNgfIPL3Umwlrh3Xz6QZ1gIapDi1gjHMZkZkKsQh1YafDPcUFzNMglPJupfNuLKJhxAgiPQEgQAqE3CkmVDqr4sAIijHI0UUBCcxgIRoxi3ccZu6MDnYpc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1757648831; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=5YCH2MJb2HNjjmB077MawQlihvASAC8bJ66TeNL3grc=; b=ENRnBeoAPiFAxOu+m3ngBS/GDc6yBnE3kcSlcBmmwFlrYqzqjiSxkDcNfBjxK577eCvVzbACdMBzZ5ihfVZvxq8rkolunDgLIMByeZ1yReJlNTX2MapFhB+lkZ+qfpKI1K0z77NFqA4R5vNIa7J7j8SqwxqR0qhnLfvOExkD/gU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1757648831694275.37247301552463; Thu, 11 Sep 2025 20:47:11 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uwugz-0006zX-0E; Thu, 11 Sep 2025 23:43:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uwugv-0006yq-MQ for qemu-devel@nongnu.org; Thu, 11 Sep 2025 23:43:18 -0400 Received: from mail-wm1-x333.google.com ([2a00:1450:4864:20::333]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uwugn-0007vR-1i for qemu-devel@nongnu.org; Thu, 11 Sep 2025 23:43:17 -0400 Received: by mail-wm1-x333.google.com with SMTP id 5b1f17b1804b1-45df656889cso8877195e9.1 for ; Thu, 11 Sep 2025 20:43:07 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-45e0157cc84sm25487685e9.7.2025.09.11.20.43.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Sep 2025 20:43:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757648585; x=1758253385; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=5YCH2MJb2HNjjmB077MawQlihvASAC8bJ66TeNL3grc=; b=Kd+fwUZrLiX1spY3REzBz5AqUtQcHdKd/5nH/it79vf7AfiTIsCIz/b2nXue/tV0Bh xlrw6jOnsZE6zO78Q6zGJDdgj0Fp1yQo01OMhB0LZu33t9TbwsAQRjCuTr4/kkCZc/e+ CIyeebVAcH5BU8pK/qXSdNJWe9fLxTJwVK92LiLBT6/ysXJXwbCiGQkayhfuttnHRIR+ Dv0vr4lxYXVmgKcTe3ZT5IMApkkbWmjdMS01hx16WJ2+Fn8lqrYNKvkEth3+cAXBBi7D YzVru2slZ/iWE/AexXEdonIGAqDRDPda6uNQnltUqzzmtNHRowRCuUift8MqeSU4FE0k aTUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757648585; x=1758253385; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=5YCH2MJb2HNjjmB077MawQlihvASAC8bJ66TeNL3grc=; b=XU4FZrNHOFfn9+nKLnfU6I3cVxr/Suj4s14tIRhdpGNpsTYeZJoi6NeuG4QBgkl4y8 klEwcIwh+KfnvoAH4G7y0UEXzkMq1i55iu6nh/NkdSJVe0hxNnFw84Flju2CweJO8ROS Vo9OPaVD3LeYIE3DGE926qNB+VsazmCvyyq8BOd+nCvK+qWDERG9tGlZ5rCGqpIZ1/0w N5n94Oi8rB/W3GVR6OS1uOo5ixWzdue01lzH0NvtyWkmxwVG4G/3Cq8ZPhuL6ubdCDNP m6ju7IOF4PhgU9N/11wv2dEThZ2HJ304xUkV6iS2gJTX2MLofaQh/qdUuqJw7adV6+ND p1JQ== X-Gm-Message-State: AOJu0YwfyKPx1tW40cDwvMBiWDQbJKlAwK1sORal0iARyLeVq9x+x89h GrVGccgX6qkMgZmW0QOlR2UWu/CYWSI4YhuAgNwuu/dwa2mON36Z8Nmw X-Gm-Gg: ASbGnct+GOZF/X8vaQXEULYB1JIn2QnY6QbUfByANT4tjCmMHzrJ7DM8SJ+EwFl8SLa B+ITH7Kpks0s56GTPAMvbudG4Fs2qofFD51oKfp57QfYqOvcaUwKlV2N3Fcc33WkN+t3wzBhIIL sePXEDu2Q/DBpHaP/7SrRT4szOynal7cGEr9iW2VmNX+PZV104pAZl3xA5diSXNQAct27iF/wLX n5WtL+t6u62rGsVomuRTV+42HY4nD8eL9863RXBvHXJ5jpNerc/8kq8emmZvklMOWppsgwHMI2N S51zQwtLGG7lNLENIPP1ByiQcrvUVRzl6+WO2nsXDy2D4fFJiM+m90n1SUVxArNSgSyLd88tPxW rEJsCSZ79VA8h7D1SovsKQWPXhdnKGzpGN8Q4oauUKbrhW1sgC8yd X-Google-Smtp-Source: AGHT+IFZgM6gRGFMjnsNt2Wjx2UqwjEFcJDQdu+gF+EgRIXnGB6oQmwO28TrguiiFVQfI0QRWy0qow== X-Received: by 2002:a05:600c:2113:b0:45d:d5c6:97b4 with SMTP id 5b1f17b1804b1-45f211d4efamr10498955e9.9.1757648585008; Thu, 11 Sep 2025 20:43:05 -0700 (PDT) From: Filip Hejsek Date: Fri, 12 Sep 2025 05:39:49 +0200 Subject: [PATCH v4 04/10] 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: <20250912-console-resize-v4-4-7925e444afc4@gmail.com> References: <20250912-console-resize-v4-0-7925e444afc4@gmail.com> In-Reply-To: <20250912-console-resize-v4-0-7925e444afc4@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , Szymon Lukasz , Filip Hejsek X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1757648576; l=1685; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=xWLqzrI5CVC6QjCdUZ5ooEgobp0TTI9162H88qJO6sE=; b=M22PFxG0FARaajdQXS3e5mX1aFfQQP+k/PrxNoq+B2onO7BND5wb9M9pcf6j+GAnNHNiBQ9D3 jOtbH5uY3bOCep8E9BKvilB5NU5PVF/CdDMu+d81aNoctK14yLRU8/i X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::333; envelope-from=filip.hejsek@gmail.com; helo=mail-wm1-x333.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: 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: 1757648832597116600 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 probably update their view of the terminal size on receiving CHR_EVENT_MUX_IN. Signed-off-by: Szymon Lukasz Signed-off-by: Filip Hejsek --- chardev/char-mux.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/chardev/char-mux.c b/chardev/char-mux.c index 6b36290e2c49f579580d2abb5aa552806f019d4a..4d3d05b82f13e002c766142f9d9= c24977b8b9bd2 100644 --- a/chardev/char-mux.c +++ b/chardev/char-mux.c @@ -264,9 +264,24 @@ void mux_chr_send_all_event(Chardev *chr, QEMUChrEvent= event) } } =20 +static void mux_update_winsize(Chardev *chr) +{ + MuxChardev *d =3D MUX_CHARDEV(chr); + uint16_t cols, rows; + + qemu_chr_fe_get_winsize(&d->chr, &cols, &rows); + qemu_chr_resize(chr, cols, rows); +} + static void mux_chr_event(void *opaque, QEMUChrEvent event) { - mux_chr_send_all_event(CHARDEV(opaque), event); + Chardev *chr =3D CHARDEV(opaque); + + if (event =3D=3D CHR_EVENT_RESIZE) { + mux_update_winsize(chr); + } else { + mux_chr_send_all_event(chr, event); + } } =20 static GSource *mux_chr_add_watch(Chardev *s, GIOCondition cond) @@ -382,6 +397,7 @@ static void qemu_chr_open_mux(Chardev *chr, */ *be_opened =3D muxes_opened; qemu_chr_fe_init(&d->chr, drv, errp); + mux_update_winsize(chr); } =20 static void qemu_chr_parse_mux(QemuOpts *opts, ChardevBackend *backend, --=20 2.51.0 From nobody Sun Sep 28 17:03:46 2025 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=1757648680; cv=none; d=zohomail.com; s=zohoarc; b=OG8q/xhIJXzBALXBhMXxXHNAEIVz7FwVrYTH1mhfaq2rh+8mJhDSBMv3P8EtZRvzm/0KYRM8lf5FB8JNNbEJkJKzPbkfv2gQOEjUY/1MMy9lmyTrBq8B10ntzgoEWtJQNSIi672Cgmyuuum9ttiHWVqD6YSJ+OSCjTV1iXpownc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1757648680; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=BMp08n4abJTiAjD0sjEHPnkehDOAKZyGVLvyGKxNOZc=; b=ATdVzES3DekfxJWWWETdl7t1h1KuWQjCaz7e8LGZEbkQhl7nJ0xOBxe7I4yByE/L6PIHlPAF+OEEDBEox9q9EMApMRWR2qmgwR9Yo40hI/IgaqDinAbkFYTT7DaC4zskrHEkfSS78yrHEAigHdJycFDaNb91tTWK1QJN8vyRCGw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 17576486807760.29260701586827054; Thu, 11 Sep 2025 20:44:40 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uwuh8-00072Y-Ni; Thu, 11 Sep 2025 23:43:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uwuh1-00070T-QA for qemu-devel@nongnu.org; Thu, 11 Sep 2025 23:43:24 -0400 Received: from mail-wm1-x331.google.com ([2a00:1450:4864:20::331]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uwugo-0007vj-Kr for qemu-devel@nongnu.org; Thu, 11 Sep 2025 23:43:23 -0400 Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-45dfb8e986aso14958925e9.0 for ; Thu, 11 Sep 2025 20:43:08 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-45e03729c76sm46199205e9.6.2025.09.11.20.43.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Sep 2025 20:43:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757648586; x=1758253386; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=BMp08n4abJTiAjD0sjEHPnkehDOAKZyGVLvyGKxNOZc=; b=G4iQuM3gXeGe0cOTWkUvxBWzJcYG0EEDJgRWptEGVsn66gIFmKxTBnYMVlvPbkG0re 6dWPMYue3E8TUNQ1xgAwMDyg3N7eY57Nv7kfvlAo8duAcZBP5p1jAM5xFom9RXqfynKP vFD9cHv39D9RFPmrv2BAzZkeI6dZ9CaYPVLn+lBY0YMMrHjeVLhSCB8Yjg1srDHsmW73 WEg++w33/bIx2d1f+zFTOqAYk0iyhMFv223Q5kUDrTxEfrQkkPZhH6JyZe/V0yYYNZav 8lLUnH1cKWdWA/Qd1jTExiBGohAN66Y/+c8Q0AuFLvQ0AKZ3FNge7fC4WgVaAOqQa8l9 4Yog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757648586; x=1758253386; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=BMp08n4abJTiAjD0sjEHPnkehDOAKZyGVLvyGKxNOZc=; b=beLxGUa6dKzGp5W/N0YT1+etVM4Psg4hkuNUa6zyuG3OpdMEJyiYMMDoYyV4GVhS4H tbEgIQptPEkV8z3424DDH8FoFkGMmO7b8f2AkdbtYiNIuv06h9ErwitgmczreT857mR3 KURlXG8tFbYQefKMvTRkWi2uDcFkIizI5B53D/nDoEmINHYycKn6T8W4yLz+x+F8ys6Y S48mqRduGtxRB82Ez/AMU65RZrRMUr4X0MdhjzWH9K813Z941qydAk21m5MBs2QudbAo D1D2UrG2ya45cWeNceJYQv/iKRP3x6ttKImPaBtkmpzTZbviakdgU60X5QAmkpLVqwhQ JQCw== X-Gm-Message-State: AOJu0Ywqve0fmaPn1v5EPtN+L5OkJkZ9ZxD4ZNYyyNeK+aqLEqQaQhfp ZeJSORoGL8xOVseAj7vlhCOlWiH/1/TkuC+XYHH/4TBTv/ACTBU2GoUF X-Gm-Gg: ASbGncsOI3fMCcRd9vUSl5GuJV/iu4pJ+Nc83PQeDOSIFSHK/0CM0zTWCBu9z8uT3BU TVEpfMh4b+hukgQ2LgKEdHG7ePbM+VgBHWaMow8sIfyaf/pVV1GnjVoKehHS+lUYZDUZ+wknTbJ PXfikJP8Rekh9OCSa2v5Q/9hs1rS9Z3OPFyr8mUTUkyATgtoPPnS93mdeoAkUIftL0FCRDPkhxr 4FS5ShA0NDM3ZrsFO9jYH74PCgI5wEjtvE3UbpGrTFg4nIQxNIbGMxM2VDoAtmsQeP9GmGaxJLa /lPmZ9hiNCkxKtQVlLHao3PZRFAOM5o0cCQiWmutmE0yVglnKkn1SYKzC9ItglDiAy+Z1elrHKA 2YaAoxIEpGl0eX6wbEyV+18bWlS3kG191PxtinuW0buAJLMqiBGjmBu5c+ABtcCg= X-Google-Smtp-Source: AGHT+IEp/0M8SiiD7QfqsDNFl5TjJGZlN9sw6L8PaaY1cYNH+uAjbc3ujdRvI5CaVRmm8iRtAnKp0w== X-Received: by 2002:a05:6000:1a86:b0:3e7:46f1:dfcb with SMTP id ffacd0b85a97d-3e7657929a5mr1453061f8f.26.1757648586049; Thu, 11 Sep 2025 20:43:06 -0700 (PDT) From: Filip Hejsek Date: Fri, 12 Sep 2025 05:39:50 +0200 Subject: [PATCH v4 05/10] 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: <20250912-console-resize-v4-5-7925e444afc4@gmail.com> References: <20250912-console-resize-v4-0-7925e444afc4@gmail.com> In-Reply-To: <20250912-console-resize-v4-0-7925e444afc4@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , Szymon Lukasz , Filip Hejsek X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1757648577; l=3415; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=x7H0XeeMERCwGAq1s4DtG6vInlpV+u3ZG4ViaEkuoc8=; b=C5ow/Nv/1ml2Ys0+8l4uqOWX7RhXx9T6oezmSRiuSuLt4pubVNTswWhR4XSjVoFJNLItw9gPq zoezWn1ODqDBerO3G57ywsQqaJStztivNd4ylzhd98iyjtDBjVAlRGy X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::331; envelope-from=filip.hejsek@gmail.com; helo=mail-wm1-x331.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_PASS=-0.001, T_SPF_HELO_TEMPERROR=0.01 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: 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: 1757648682838116600 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 Signed-off-by: Filip Hejsek --- include/qemu/main-loop.h | 4 ++++ ui/curses.c | 11 ++++++----- util/main-loop.c | 21 +++++++++++++++++++++ 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/include/qemu/main-loop.h b/include/qemu/main-loop.h index 4e2436b1968b5c513f7d4e84e010b0d4fb31a1b1..7cc45c3a274434020fe33b1ca0a= 4d839de994e97 100644 --- a/include/qemu/main-loop.h +++ b/include/qemu/main-loop.h @@ -431,4 +431,8 @@ typedef struct MainLoopPoll { void main_loop_poll_add_notifier(Notifier *notify); void main_loop_poll_remove_notifier(Notifier *notify); =20 +#ifndef _WIN32 +void sigwinch_add_notifier(Notifier *n); +#endif + #endif diff --git a/ui/curses.c b/ui/curses.c index 161f78c35c32fc03ad576d2bd8e91bdfe09b265d..d1b308d5f8051e99f12f4d32435= a04e294060a10 100644 --- a/ui/curses.c +++ b/ui/curses.c @@ -33,6 +33,7 @@ #include =20 #include "qapi/error.h" +#include "qemu/main-loop.h" #include "qemu/module.h" #include "ui/console.h" #include "ui/input.h" @@ -149,7 +150,7 @@ static void curses_resize(DisplayChangeListener *dcl, } =20 #if !defined(_WIN32) && defined(SIGWINCH) && defined(KEY_RESIZE) -static volatile sig_atomic_t got_sigwinch; +static bool got_sigwinch; static void curses_winch_check(void) { struct winsize { @@ -172,17 +173,17 @@ static void curses_winch_check(void) invalidate =3D 1; } =20 -static void curses_winch_handler(int signum) +static void curses_winch_handler(Notifier *n, void *data) { got_sigwinch =3D true; } =20 static void curses_winch_init(void) { - struct sigaction old, winch =3D { - .sa_handler =3D curses_winch_handler, + static Notifier n =3D { + .notify =3D curses_winch_handler }; - sigaction(SIGWINCH, &winch, &old); + sigwinch_add_notifier(&n); } #else static void curses_winch_check(void) {} diff --git a/util/main-loop.c b/util/main-loop.c index 51aeb2432e77eae7081c6945e21812acc71b5f37..db4bb9c88dade805bc98322c1a0= 53c65e9e97f7e 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 @@ -121,6 +122,26 @@ static int qemu_signal_init(Error **errp) return 0; } =20 +static NotifierList sigwinch_notifiers =3D + NOTIFIER_LIST_INITIALIZER(sigwinch_notifiers); + +static void sigwinch_handler(int signum) +{ + notifier_list_notify(&sigwinch_notifiers, NULL); +} + +void sigwinch_add_notifier(Notifier *n) +{ + if (notifier_list_empty(&sigwinch_notifiers)) { + struct sigaction action =3D { + .sa_handler =3D sigwinch_handler, + }; + sigaction(SIGWINCH, &action, NULL); + } + + notifier_list_add(&sigwinch_notifiers, n); +} + #else /* _WIN32 */ =20 static int qemu_signal_init(Error **errp) --=20 2.51.0 From nobody Sun Sep 28 17:03:46 2025 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=1757648799; cv=none; d=zohomail.com; s=zohoarc; b=mNU5oqMkUwy9ZglJ6d3l3ODUXETHDAsbmVk4xU1hm8ZCvxuRzc6QpyDBoLU6806IGY0Gvjb4DrCF7Lgv59/eJRMqTKKdiw/8sWDNxJzqfOyPXgO59mbG6OOUTqbMGuMupXullfp//dsZNq0naQ91AO/rW35HtmxMzoI3X1T7bx8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1757648799; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=d77nWuC47XfRFHI4ruZnmhk2E1Ts/1RIwnXpyxIetgw=; b=ABfYNXcGmzHfCrouj3iyzRTODQqbO4f+tsmOR6BDuJiIbCBC97zwgbfNUzw2E4uZUY9IKO9ZuQM2K2pf1Kg3w+iBnvHVEjLeNmmxsdyAO0L0R4tSqAQnaz2D4c0Jy3xui2vSyb19ihb/uMR9hMCcH83+pFIAUSe7JbqN3oH4hH0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 175764879914660.63335119718181; Thu, 11 Sep 2025 20:46:39 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uwuhP-00076Z-DG; Thu, 11 Sep 2025 23:43:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uwuh4-00071c-VK for qemu-devel@nongnu.org; Thu, 11 Sep 2025 23:43:28 -0400 Received: from mail-wr1-x42a.google.com ([2a00:1450:4864:20::42a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uwugr-0007vl-Rq for qemu-devel@nongnu.org; Thu, 11 Sep 2025 23:43:26 -0400 Received: by mail-wr1-x42a.google.com with SMTP id ffacd0b85a97d-3e7636aa65fso849631f8f.1 for ; Thu, 11 Sep 2025 20:43:09 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-3e7607cd9fasm4777495f8f.35.2025.09.11.20.43.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Sep 2025 20:43:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757648587; x=1758253387; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=d77nWuC47XfRFHI4ruZnmhk2E1Ts/1RIwnXpyxIetgw=; b=IHpAFw+unVWm61dj/llnSN1UrdWmM6rAIh4dYySCaVmiLdq/Ww9JK6Q/iJ8dSjukm2 t9RyCQYHK8raXT2puaXWxboxK90gysKvYBHBK8Bs3ZsM8MV/QsgCsRoMScCRxf9J3qZP aIM6AxOGgHiPl1BkSIMMhbVc0fqvm0nNUnqKRkJ3dFP7YsnPrCgC89v2/0kEVqT/QcPc J3OrlVBUY6C7ciUWQi9DFluT8f8aSN26eCm6w4izMmo5ulQl9mbOaaXvJ+RCIbKb46f4 ZkSSka3zxD9z5oj68i0VtokqjwOVyEWpWNDBc8/ITUVGciKU/LQiZnr/QvsQkD1eM/F6 x1Rw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757648587; x=1758253387; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=d77nWuC47XfRFHI4ruZnmhk2E1Ts/1RIwnXpyxIetgw=; b=MoobFlSACmwpxG/7yn8h9tsMXUQQyXnN7tbHX/iSXuugXP7cXmbXv8XcDl0AELN17z tK2qbORuWcv+brQ3SlGPFvBLwwYQt26U9S7oScSFaF3kiZYDQlXX8o9yOXMUOdiu4wzV mPpWVF6v5oR3ZtSKh0AzHdFDYmG/tO2P83lFHBPIG0tItA6Sn/SeZb8Agw83ofZmLgxh 9FObLVxLrg6cccfp7FuKbWVhHHfNviRGA/ZuCcnGTpNHIDLpJa3kFhEjBkK1nlP1+nlx xU6fLgKq0xXCZVnemQuQOJELAcrtkKyx42DG/TcOlzvlyzs7SSFdfgkOsIL/zcF3szbH wRJA== X-Gm-Message-State: AOJu0YxyVhchUYiUPBton8aCjmJfCSILSN9Gnboe4s5unwsegKFqXNHf g8FBLfyLKd8hc9pDecgEuTuSumhjC3j1j9SWjhKnRi5RmJamMV+Hq8NB X-Gm-Gg: ASbGncu45to3f2giL4KakCrJ/tOb8wxMDpnVdxuTEPQm2Qe+1BEZRexUAJ/hNb0NzxX Sq68Sksj7wUBH2rdNXCiiK53UrdGgxRXOZvLvatmVSNabagJWQz3NG++g0wgtg90BlHPH92CDSU iDubodWaeTu34ukLXGAbGbC8tMpHYLUtTBn4fYbgm6U5JJHxZgyqPf/LVYjDQv+sMBlY9zL1HLI Az7tNAhyPf0GXxGKF7Hr+COhqovGVLZ1ToAHeBLPv0/BU2+HXbGZAVG+AoFbFe4Cn2yvyEzT30g aaWXfYrQecz9GA4MpsuG0ZjfcBfZIXth6PWkHAt4vEax4ao8S2NXLAjEbSgjUlEQQl4n3E5dGds hng9hJHhVpWUYBvabDH2ARjimeVX343c2E9EpHipVIm0U6XQ6GoJwBUMaskFZDrY= X-Google-Smtp-Source: AGHT+IHi9fBq25/cck8R/Z45AHN7Hdy4VuXy7Au7YGZWL/5aItRt4hcuTEAPEvPi64pBp49ujwwkww== X-Received: by 2002:a05:6000:24c4:b0:3d7:94bb:cb9d with SMTP id ffacd0b85a97d-3e7658bc9admr1093720f8f.3.1757648587024; Thu, 11 Sep 2025 20:43:07 -0700 (PDT) From: Filip Hejsek Date: Fri, 12 Sep 2025 05:39:51 +0200 Subject: [PATCH v4 06/10] 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: <20250912-console-resize-v4-6-7925e444afc4@gmail.com> References: <20250912-console-resize-v4-0-7925e444afc4@gmail.com> In-Reply-To: <20250912-console-resize-v4-0-7925e444afc4@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , Szymon Lukasz , Filip Hejsek X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1757648577; l=2523; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=fO8C30Ob+gQY1M6bMPNNeQaVfv14CUk8QR9kMY9JTd4=; b=cs7y+LSxL6p/eJw114HERl5AC8+eq88ULb0ZhmzOK//WGkgMx9UdiHomfdu/eITO/BrOpG/fm nQ6zRZabiNSDV8uVh4uhPDXb+gbMWkM3taVHlAygNWaqr64xsrV56gj X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::42a; envelope-from=filip.hejsek@gmail.com; helo=mail-wr1-x42a.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, T_SPF_TEMPERROR=0.01 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: 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: 1757648800055116601 From: Szymon Lukasz Update the terminal size upon SIGWINCH delivery. Signed-off-by: Szymon Lukasz Signed-off-by: Filip Hejsek --- chardev/char-stdio.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/chardev/char-stdio.c b/chardev/char-stdio.c index 48db8d2f30fcf0b481c79ea69aab720454596a05..b3475391f088f1e570b74cc40e3= 0f679dbe9b574 100644 --- a/chardev/char-stdio.c +++ b/chardev/char-stdio.c @@ -34,7 +34,9 @@ #include "chardev/char-win-stdio.h" #else #include +#include #include "chardev/char-fd.h" +#include "qemu/main-loop.h" #endif =20 #ifndef _WIN32 @@ -46,6 +48,14 @@ static bool stdio_in_use; static bool stdio_allow_signal; static bool stdio_echo_state; =20 +typedef struct { + FDChardev parent; + Notifier resize_notifier; +} StdioChardev; + +DECLARE_INSTANCE_CHECKER(StdioChardev, STDIO_CHARDEV, + TYPE_CHARDEV_STDIO) + static void term_exit(void) { if (stdio_in_use) { @@ -85,11 +95,26 @@ static void term_stdio_handler(int sig) qemu_chr_set_echo_stdio(NULL, stdio_echo_state); } =20 +static void qemu_chr_resize_stdio(Chardev *chr) +{ + struct winsize ws; + if (ioctl(1, TIOCGWINSZ, &ws) !=3D -1) { + qemu_chr_resize(chr, ws.ws_col, ws.ws_row); + } +} + +static void term_resize_notify(Notifier *n, void *data) +{ + StdioChardev *s =3D container_of(n, StdioChardev, resize_notifier); + qemu_chr_resize_stdio(CHARDEV(s)); +} + static void qemu_chr_open_stdio(Chardev *chr, ChardevBackend *backend, bool *be_opened, Error **errp) { + StdioChardev *s =3D STDIO_CHARDEV(chr); ChardevStdio *opts =3D backend->u.stdio.data; struct sigaction act; =20 @@ -121,6 +146,10 @@ static void qemu_chr_open_stdio(Chardev *chr, =20 stdio_allow_signal =3D !opts->has_signal || opts->signal; qemu_chr_set_echo_stdio(chr, false); + + qemu_chr_resize_stdio(chr); + s->resize_notifier.notify =3D term_resize_notify; + sigwinch_add_notifier(&s->resize_notifier); } #endif =20 @@ -160,6 +189,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.51.0 From nobody Sun Sep 28 17:03:46 2025 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=1757648724; cv=none; d=zohomail.com; s=zohoarc; b=K66x9DCNYKPJhor9/YZosxHQobS3mok4p/TyGtDGHEu3uyNejk4ypiZ1P7y56Se9DYnUF854ePqhxkrqPCvtOPGQOMwAQOCqBcmFaWq+d5KCcLcYjCMvyirv2FNUIIRkjCFIsRAdP/rs6jAgS8aR5X7hWGVsF7BJx9NiFb5gvos= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1757648724; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=baYb+HxzqfFXNtYakQW3qcYyBFiNYOZzvwE6cidsEmY=; b=XJ6rDIIz33t7UMUQNS4onkslffY7CXscjDPL1DAdsmwCIrbKVPYC8+z0AXmTLW19SYm+Om6TlJYIZajwFD8URRYlhctE3zI4lpsMKJ80KpdPZ2icD1aEXu/05XPWtZWk5osZpZQnQiEILGr8bcRwVcWK8tj2vfZ4UYoB6wWBILQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1757648724334441.1562378844163; Thu, 11 Sep 2025 20:45:24 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uwuhM-00075w-F8; Thu, 11 Sep 2025 23:43:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uwuh8-00072s-27 for qemu-devel@nongnu.org; Thu, 11 Sep 2025 23:43:30 -0400 Received: from mail-wm1-x32d.google.com ([2a00:1450:4864:20::32d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uwugs-0007w6-7x for qemu-devel@nongnu.org; Thu, 11 Sep 2025 23:43:29 -0400 Received: by mail-wm1-x32d.google.com with SMTP id 5b1f17b1804b1-45dd513f4ecso9233435e9.3 for ; Thu, 11 Sep 2025 20:43:11 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-3e7607878c9sm4886166f8f.26.2025.09.11.20.43.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Sep 2025 20:43:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757648588; x=1758253388; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=baYb+HxzqfFXNtYakQW3qcYyBFiNYOZzvwE6cidsEmY=; b=ZxBY8PbnALepLyIeiPbM7T6++qOlAdQwv0p+BM1gsplN50/ghlyPxQj3q/P8esqAIS IGAsc2fhJS2czPKDYn3R408jtNnIhKTueEMlYXcss3tggQ+6oV16bciyquDYb63NpSAx jJ7GXPe4VoujkoZv3Na4E32OUcnw1kUj3VigKHhXwUYO9t2DsfA43QFwl2qpowO5Ldka zDfMZOV79mbp3C8Aryk5KvoBTkKZoh80pSSTqjqyYaCS88sDhhbfa+yaZMblPxqL8EEZ ibbth5TCykBlzav/NIBac1qf82hhfQHjaFkPUoIqt/BlmSKK0dRwHeslUd6Yyz8uMuw2 ipBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757648588; x=1758253388; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=baYb+HxzqfFXNtYakQW3qcYyBFiNYOZzvwE6cidsEmY=; b=Ky8H3Wra9oKsNuc08rfregWbDjua1/1SEicvyiolXKIs+V3bRl9fUD8u4ztDgYnlHU nfKKwgenD2Xi6+FsNF/095PR2J2qjdg70vSggbt2urKCHaZfsdigRmNX0v8uReI1vgAV c3ShAis58Ty8YYFOxCPoBDlFw3ZejgC5UmZQkIexAR0do49+hXyYL3eE4098gqg4ORi7 MB5AZf1x0V6PFOrH1vHeLDnvuKvBFp1HNtaR9EVTqllvMUl+EOCJbB3a/0g+/9HXzj9o fvWRQ9cj91IgAfyCzZPRK/H2i6TpFNmL2XVHwRS0tLhvWFDJXOn17zno8jxBy7YktEqZ JK+A== X-Gm-Message-State: AOJu0YyxP/su4BKLA5gkDwC8lfPMrD5wr9tcKnhmSSGXjsaZDEttOqdz ORa6sZqQvMdB4o6SGuh03dXMOzuNHFTz/Wgbd2GTDQbu8FBCVA/+8Um8 X-Gm-Gg: ASbGncsvKf12LeL/Z6pG6dHUVvXqpcZ4y0i6NuKhiCrsxJzz+tIPlHUNIxj05CRPAJV pZbxa05/dgGmmxKj/pvthgFdFplywRrwZsnjMfdQL+zMXHrdeU0u94d5H53U3JUc4hqrABKC72/ kVuSrzDvtBE2ohTRaz+qNpqPN5K5Pb4OIB1A6RW9ggdqwDnt33FhUgqR4tVWKVq3sgwL9oLplpr IRRX1y9NICCMhiVFxclO4S5fc6zB2iN+I8yo1F6aJ05V0FFZtD7NFoOsNB80VvgPqtPXmxj56vg jRJRU+1IbJPppddPhWmkhjUJVtqlokwLZRSI7d42LNzeVMBY9eV9LpOQntYKV7FmsUdZ6GYwTKD H/Kkv85lmXhQQ0WFTYEXdPaVmhbUVDJmzDB3cCUYqySeeSCE+HaT0lRVsjOFL+Sg= X-Google-Smtp-Source: AGHT+IHcPEUXw7ENRx6VBy7qfjJyiGr0Ci2H3EflbTWxaTovK4fBgiw4u5EfbnV6+H1rxoJvrNwuVQ== X-Received: by 2002:a05:600c:138a:b0:456:19eb:2e09 with SMTP id 5b1f17b1804b1-45f211e575dmr16702565e9.8.1757648587988; Thu, 11 Sep 2025 20:43:07 -0700 (PDT) From: Filip Hejsek Date: Fri, 12 Sep 2025 05:39:52 +0200 Subject: [PATCH v4 07/10] qmp: add chardev-resize command MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250912-console-resize-v4-7-7925e444afc4@gmail.com> References: <20250912-console-resize-v4-0-7925e444afc4@gmail.com> In-Reply-To: <20250912-console-resize-v4-0-7925e444afc4@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , Szymon Lukasz , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Filip Hejsek X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1757648577; l=2157; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=ygcoBaTfXtGVLn2OapvW5OlVL7lLK2XiaSj1n6yjo3Y=; b=9HrdVfFhAM+keDA6ZbOF/M8wNDSRZmCjMP/T7gOc8NI8HXzCOT2qpxHIqWU3ZdUa/9qdge6Ig pLEL8bDWaqnCyYpTzEMaRybZrv7ZK496kxHZI8aLNlWz8OQ/smZoiqu X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::32d; envelope-from=filip.hejsek@gmail.com; helo=mail-wm1-x32d.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, T_SPF_TEMPERROR=0.01 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: 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: 1757648725117116600 From: Szymon Lukasz The managment software can use this command to notify QEMU about the size of the terminal connected to a chardev, QEMU can then forward this information to the guest if the chardev is connected to a virtio console device. Signed-off-by: Szymon Lukasz Suggested-by: Daniel P. Berrang=C3=A9 Signed-off-by: Filip Hejsek --- chardev/char.c | 14 ++++++++++++++ qapi/char.json | 22 ++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/chardev/char.c b/chardev/char.c index b45d79cb9b57643827eb7479257fdda2cf6b0434..6e3ade98614c949be8041ec5905= a490ff536dee9 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -1269,6 +1269,20 @@ bool qmp_add_client_char(int fd, bool has_skipauth, = bool skipauth, return true; } =20 +void qmp_chardev_resize(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 f0a53f742c8bee24c377551803a864fd36ac78cf..0a26c5eee6b71bc5de127a91b25= 3cc69a9fe8ce6 100644 --- a/qapi/char.json +++ b/qapi/char.json @@ -874,6 +874,28 @@ { 'command': 'chardev-send-break', 'data': { 'id': 'str' } } =20 +## +# @chardev-resize: +# +# Notifies a chardev about the current size of the terminal connected +# to this chardev. +# +# @id: the chardev's ID, must exist +# @cols: the number of columns +# @rows: the number of rows +# +# Since: 10.2 +# +# .. qmp-example:: +# +# -> { "execute": "chardev-resize", "arguments": { "id": "foo", "cols"= : 80, "rows": 24 } } +# <- { "return": {} } +## +{ 'command': 'chardev-resize', + 'data': { 'id': 'str', + 'cols': 'uint16', + 'rows': 'uint16' } } + ## # @VSERPORT_CHANGE: # --=20 2.51.0 From nobody Sun Sep 28 17:03:46 2025 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=1757648715; cv=none; d=zohomail.com; s=zohoarc; b=fZCFHWfUSN/llSKjwE+514e0YF+BnQccSEW1O/ENqk3t0iDt/ink1ZInN81KnboNIhceiyyEXpULT2gpMLrl175gLGksc83qF0gu4rXQUUtjim3y1BDLeAbanAgyEIr+ANPye3bLfbYSQIZZvQ2ikhzi2bXt9LXAo1641jHr+O8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1757648715; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=8jQCrxIz3Qwz5hNpEtd6AT11QHNqPX2j92aTBRs4Mbs=; b=jDhbinhOvBExHI5mOVV6eI9nr0kBjuL2DTJopYeFNMx5af6KzX1qX/tnb3fvl/AqKsA+6MIctxyLzRXFQQMNoHu/COkQWH/xdnwsK99omRgP5hWJtDLvofCUMsGk5yOeIlpcQBIXj+Gar7PalaeGrgl1zPN2IrGviQh45pFLt18= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1757648715727150.47209417515137; Thu, 11 Sep 2025 20:45:15 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uwuhE-00073k-UJ; Thu, 11 Sep 2025 23:43:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uwuh4-00071b-Va for qemu-devel@nongnu.org; Thu, 11 Sep 2025 23:43:28 -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 1uwugs-0007wI-Aa for qemu-devel@nongnu.org; Thu, 11 Sep 2025 23:43:26 -0400 Received: by mail-wr1-x430.google.com with SMTP id ffacd0b85a97d-3e249a4d605so1426334f8f.3 for ; Thu, 11 Sep 2025 20:43:11 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-3e760786c95sm5039210f8f.17.2025.09.11.20.43.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Sep 2025 20:43:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757648589; x=1758253389; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=8jQCrxIz3Qwz5hNpEtd6AT11QHNqPX2j92aTBRs4Mbs=; b=EH5U3rJJ2FbPnsLmhogRY3fsTvX/tEU7A/7ozJ5pw6qeLSwi/HiEL/SbarCAlEAd00 /9Ndq9wSGJWeit608tlD8SzQwbRSaivgGXeTaPew+CCN9JrbzCE1/328WlnXunwLuxWm gbLP9HmdRj4qCeeeiDVRGOz9GcRp9CKlTD3fdd7kdYgrw/3mapQwPqj7DpQGCPbXQd4W ZT5UU/TJyH/lMSyDemJojk9tfETXeNYjusIlw+6Ll8NaBktjYFPCXXnGtniEM3Fil3Et HAfPTRHeRAzG7HPF64jJt1qxcPAxMVUWgylsvulfP0r0FXOaXtEyOkNHs1HFV9RQFidG 5qpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757648589; x=1758253389; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=8jQCrxIz3Qwz5hNpEtd6AT11QHNqPX2j92aTBRs4Mbs=; b=MJpUpigYeAU72Sx3Hte1qBbpQPxTotabQA9Pcdpl9nvatPF5MsZIp7wUhPmRpgTYjR cxfKtr7THTVzeldm1xconCUKTskV+zpYdjzZbmkSBq4QpVJ1+fWiQzmFN6CKOdGNX2m9 TSUfrwsrRRIxi8na4ajoyvz8w4w51/P39rADQ6u7RS4eFAl6rMF82+IfEnBJueAilkR7 L0pLj5zU3S+9a4w+GggT1VO68+XJhoLJM/JwvUC73NV8GcBWRBr8Dcg2pQb9Cz4KpKC3 PJaI8vIx9unjiHIC/HI2LdIHwrh1EeBvCNiOwjX0TnZsURsz5FNzJKIlI6lohQ9iXfL2 m72w== X-Gm-Message-State: AOJu0Yxq8m5H0uPYKxHGrBqDSxAsKEp8uSskCGaZXndUHUjVav110zSe oMDdJFExvTbdk4K3+OwjJ9dlnnSvzAMjekbjv7019MlNLKcJh5Wbdp6j X-Gm-Gg: ASbGnctkwHV4uBOvJBcSBMzv8UAa+yRs0rf2qe9JIk3jq/2f/G96ZDBTINGPOjZRbI5 b+rIE+NG3bCBhDsnYP+mR5EPiRbdc/zLQYgO86tW4w/zi0eqayazRIYY+4dlsCyVI0dG1tXqh0C eD81vo592AqPrgZpzfoPuzeKL161WMjJtpHD9ZszGwLm/PFQH0J5PC+G/V9EaMEpXYl3kSJMQq5 8XHsxeiBC+Pah9heSpaFbgnJ6J3rFGDdvv53GtUhdmVmW1J+tnZlcEEAbkdaldem1AhXWfahBo4 dENEVwYVhdNFqaGOqZ2V/lHYYlNFlJUmPBhXt5W9DxF4BVBtd2wHMnMWhK6x8+6+Y3QAhSHEgxi X0e/q3bRO7uYL5DKHX74jvFGjy6CDMBPSUWGVo0Xw4MAdCWUk2WSn X-Google-Smtp-Source: AGHT+IHG+YSU0F4heTQZ+7pGeURP7cj9uH7RPuUFghn3vuVy7mdn1//iqOOPLh5kVUgldCu7ev8sIQ== X-Received: by 2002:a05:6000:40c9:b0:3e7:60fc:316f with SMTP id ffacd0b85a97d-3e765a01444mr1221993f8f.45.1757648588932; Thu, 11 Sep 2025 20:43:08 -0700 (PDT) From: Filip Hejsek Date: Fri, 12 Sep 2025 05:39:53 +0200 Subject: [PATCH v4 08/10] 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: <20250912-console-resize-v4-8-7925e444afc4@gmail.com> References: <20250912-console-resize-v4-0-7925e444afc4@gmail.com> In-Reply-To: <20250912-console-resize-v4-0-7925e444afc4@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , Szymon Lukasz , Filip Hejsek X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1757648577; l=6138; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=euHDSiKfiPtR/UUkZ7M5sVkaScA8I5CFN1ajva2o9VY=; b=iUThZTt6OVb7iGTvlVLAN1+7XW3GPqL8MTJwe+T3DmMMtPPNyD6SDn9fT4DFLBKQThIGLBAiR OIerP45o9DgC1eFd+jmRckxQs67HYRPLjofnuKvqC1jkvpFG4MPfXfg X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::430; envelope-from=filip.hejsek@gmail.com; helo=mail-wr1-x430.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: 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: 1757648717206116600 From: Szymon Lukasz Implement the part of the virtio spec that allows to notify the virtio driver about terminal resizes. The virtio spec contains two methods to achieve that: For legacy drivers, we have only one port and we put the terminal size in the config space and inject the config changed interrupt. For multiport devices, we use the control virtqueue to send a packet containing the terminal size. Note that old versions of the Linux kernel used an incorrect order for the fields (rows then cols instead of cols then rows), until it was fixed by commit 5326ab737a47278dbd16ed3ee7380b26c7= 056ddd. As a result, when using a Linux kernel older than 6.15, the number of rows and columns will be swapped. Signed-off-by: Szymon Lukasz Reviewed-by: Michael S. Tsirkin Signed-off-by: Filip Hejsek --- hw/char/trace-events | 1 + hw/char/virtio-serial-bus.c | 43 +++++++++++++++++++++++++++++++++++= ++-- hw/core/machine.c | 4 +++- include/hw/virtio/virtio-serial.h | 5 +++++ 4 files changed, 50 insertions(+), 3 deletions(-) diff --git a/hw/char/trace-events b/hw/char/trace-events index 05a33036c12070242c2b193c19011839d623bec4..9a975ab1e2a525a9391d0f0a85d= dbe80aa6361fc 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 673c50f0be08ef9b7142c16eaf8e6e31c7a00ca5..1d2963efcd74494a1f0d428f8ac= e0e72bb4c6647 100644 --- a/hw/char/virtio-serial-bus.c +++ b/hw/char/virtio-serial-bus.c @@ -260,6 +260,43 @@ 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; +}; + +void virtio_serial_send_console_resize(VirtIOSerialPort *port, + uint16_t cols, uint16_t rows) +{ + VirtIOSerial *vser =3D port->vser; + VirtIODevice *vdev =3D VIRTIO_DEVICE(vser); + + trace_virtio_serial_send_console_resize(port->id, cols, rows); + + if (virtio_vdev_has_feature(vdev, VIRTIO_CONSOLE_F_MULTIPORT)) { + struct { + struct virtio_console_control control; + struct virtio_console_resize resize; + } buffer; + + virtio_stl_p(vdev, &buffer.control.id, port->id); + virtio_stw_p(vdev, &buffer.control.event, VIRTIO_CONSOLE_RESIZE); + virtio_stw_p(vdev, &buffer.resize.cols, cols); + virtio_stw_p(vdev, &buffer.resize.rows, rows); + + send_control_msg(vser, &buffer, sizeof(buffer)); + + } else if (virtio_vdev_has_feature(vdev, VIRTIO_CONSOLE_F_SIZE)) { + vser->port0_cols =3D cols; + vser->port0_rows =3D rows; + virtio_notify_config(vdev); + } +} + /* Functions for use inside qemu to open and read from/write to ports */ int virtio_serial_open(VirtIOSerialPort *port) { @@ -571,8 +608,8 @@ static void get_config(VirtIODevice *vdev, uint8_t *con= fig_data) struct virtio_console_config *config =3D (struct virtio_console_config *)config_data; =20 - config->cols =3D 0; - config->rows =3D 0; + config->cols =3D virtio_tswap16(vdev, vser->port0_cols); + config->rows =3D virtio_tswap16(vdev, vser->port0_rows); config->max_nr_ports =3D virtio_tswap32(vdev, vser->serial.max_virtserial_port= s); } @@ -1158,6 +1195,8 @@ static const Property virtio_serial_properties[] =3D { 31), DEFINE_PROP_BIT64("emergency-write", VirtIOSerial, host_features, VIRTIO_CONSOLE_F_EMERG_WRITE, true), + DEFINE_PROP_BIT64("console-size", VirtIOSerial, host_features, + VIRTIO_CONSOLE_F_SIZE, true), }; =20 static void virtio_serial_class_init(ObjectClass *klass, const void *data) diff --git a/hw/core/machine.c b/hw/core/machine.c index 38c949c4f2ce4a117cbfca62f56919711ce392b4..74a747ec6578c958b35e1f9712e= 5dbed7bca72e8 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -37,7 +37,9 @@ #include "hw/virtio/virtio-iommu.h" #include "audio/audio.h" =20 -GlobalProperty hw_compat_10_1[] =3D {}; +GlobalProperty hw_compat_10_1[] =3D { + { "virtio-serial-device", "console-size", "off" }, +}; const size_t hw_compat_10_1_len =3D G_N_ELEMENTS(hw_compat_10_1); =20 GlobalProperty hw_compat_10_0[] =3D { diff --git a/include/hw/virtio/virtio-serial.h b/include/hw/virtio/virtio-s= erial.h index d87c62eab7a270809daf47f932a73dd1fa3d5a6e..81efa853f804a52866890a9ec2c= 71bfbcabca4a0 100644 --- a/include/hw/virtio/virtio-serial.h +++ b/include/hw/virtio/virtio-serial.h @@ -187,6 +187,8 @@ struct VirtIOSerial { virtio_serial_conf serial; =20 uint64_t host_features; + + uint16_t port0_cols, port0_rows; }; =20 /* Interface to the virtio-serial bus */ @@ -221,6 +223,9 @@ size_t virtio_serial_guest_ready(VirtIOSerialPort *port= ); */ void virtio_serial_throttle_port(VirtIOSerialPort *port, bool throttle); =20 +void virtio_serial_send_console_resize(VirtIOSerialPort *port, + uint16_t cols, uint16_t rows); + #define TYPE_VIRTIO_SERIAL "virtio-serial-device" OBJECT_DECLARE_SIMPLE_TYPE(VirtIOSerial, VIRTIO_SERIAL) =20 --=20 2.51.0 From nobody Sun Sep 28 17:03:46 2025 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=1757648685; cv=none; d=zohomail.com; s=zohoarc; b=i6ZBJekrlheHYn3Yo385SnSoLBPiKOPLRRJRP40+wNrA+UqBxUW9CRRAjg5vBn4mi+ZcO5fO56N3BGL+ksmxlXfj9cWnzzmOOxGsQlPrnErNGl6apgz8lFeE4w25PbfYq58j59jphkqSp81N7RVeVOuD3WCYhZZH6rX3S4pnTWI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1757648685; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=UWAG2nYcB9+NQk8o/WlZdPLMQXNxjnTYcPCkh5OBnwc=; b=jUbLRhAXusyHsM7RYMhtFPVMr9+zXHDRf5uh4UYJvLst0MIynX/UX3QjKSUuzqOROi608SWxvs7lUpKcjzzUkjD6/9UrijsmVrWW7pkAqb3hnKnCu514kyXY0ZkBlPe4JSH1G+CyVvMse7dRqkgieqQmvL0AjKlFcDNHNoVJBEA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1757648685299293.04507122538007; Thu, 11 Sep 2025 20:44:45 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uwuh6-00071s-L3; Thu, 11 Sep 2025 23:43:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uwuh0-0006zh-1k for qemu-devel@nongnu.org; Thu, 11 Sep 2025 23:43:23 -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 1uwugq-0007wZ-QF for qemu-devel@nongnu.org; Thu, 11 Sep 2025 23:43:21 -0400 Received: by mail-wm1-x334.google.com with SMTP id 5b1f17b1804b1-45dd7b15a64so12206935e9.0 for ; Thu, 11 Sep 2025 20:43:12 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-3e7607e1400sm4829739f8f.55.2025.09.11.20.43.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Sep 2025 20:43:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757648591; x=1758253391; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=UWAG2nYcB9+NQk8o/WlZdPLMQXNxjnTYcPCkh5OBnwc=; b=nm0/cufn347/m0QEl6tmuTy0Ptsm1a+UbgYOmwczAwDCq9V6zdQwzuEsBVsMTgPGgf KB0D8nMgYLe1BIrZKBWBH5mCNb225iWQ4iVEYEmhHH65J6Ghx4+6ac3dj4D+d/qxxf46 fABm9aracYqVW6f+1u30ZQGwy5oTJfA5DyYX3o0bna8NoyrIfiV9joJYiGB+kEDfgWCR 8T/QH27ynfmoHYadaQS3K7Y18asHfn6UnSyalh7op0jDhse1OiHS30LJ2xzBiEmYcnjE +OGuUmbbSECjV6msHmeo9kPjhli+6sn+HLukHce0bTwhq0ZNB4QY3BLhzyxN2vpTza4E g/GQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757648591; x=1758253391; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=UWAG2nYcB9+NQk8o/WlZdPLMQXNxjnTYcPCkh5OBnwc=; b=H8PJemB4g/S9KyzUhcWmJ7UIx53XsAmM0AjLm0tZ2B6jcC2Qvk8en378auCHN0sUia CCXN5VjBDaFUK1QDHdEKsrjHOgbHRLx+6Wl6C+/npktK+W0IiDIYG0z9dva9qTnPROEw tcfxosb3DXsNfJOeQ0TEKOEk6vqIroLe4cfpgpq+iPSDmKMjdGwFObYQyD5sAWQP1Wmo 5L6phVHzVAXeh55TPYn2U54B2711gZnCc8QbYOpN2VJIP/xyMcntroEgPjeYBU+ACmDW 8wVq98rtHWcfdxwoEiyXlCbtXuGeucYqAtLKQeaOSORzAYarrkB6lMMVdJq5XWS7rkgV UPrA== X-Gm-Message-State: AOJu0Yz5JhZibhxxjX5wyJc/gWBvNg8wwgwWFQzfyK3sr1qEQLQyTIMY JyKMV9rkQvvikBn9NSvkeyYtgWkLBc7dfLWrmAbfd+KbrNDoa3sDLTyi X-Gm-Gg: ASbGncumR780iqK9YvKrYr2guFCnRpu8xEXiZos9RXcaB0rv1wI6CRD0r6WlW33B/nZ enednWF4ORHY0fPG6fMNgHijMku/Jc2/Pn1UpqzY7jdtLT+ihqFmd7krTtMX++bZ2+EYxBuV4fm 3EE03zLV/x+xcQff922ryZMEOdPON4qiUt4ocrdEKF2NTuzakuKFaK6lWpvVog8YMWudIlV6R5j KKYDXRoUpOlP008zWRicnxsoLc7PnxA5PYGVAIotIlVbO+unqtUUe1XpO1PmXZRBvLLsRiChhdP TuTNBmA7tOwn3S2rBQReuHByXOjsAqMnUqnPHjNx2AgD5F+93aRBHEWKVe2314nZtfWoLvsmkD1 TtdpFxI1pi/ec7Da9PNA1/4id0KRCOAQ/lBwh/Adap0oBavFMGkkQnlqj5jyp+OxwTghDEIYHeg == X-Google-Smtp-Source: AGHT+IFWOHYpfqaAODFZGtVNBSlPMYAip2DEsg+9+PyT9BOoPXlDzKhqWDrZSw1LuoggUEEF5jrZyA== X-Received: by 2002:a5d:64e9:0:b0:3e2:3717:cce5 with SMTP id ffacd0b85a97d-3e75e16b341mr4557411f8f.30.1757648590660; Thu, 11 Sep 2025 20:43:10 -0700 (PDT) From: Filip Hejsek Date: Fri, 12 Sep 2025 05:39:54 +0200 Subject: [PATCH v4 09/10] 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: <20250912-console-resize-v4-9-7925e444afc4@gmail.com> References: <20250912-console-resize-v4-0-7925e444afc4@gmail.com> In-Reply-To: <20250912-console-resize-v4-0-7925e444afc4@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , Szymon Lukasz , Filip Hejsek X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1757648577; l=4791; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=wxnBg2LKBs7LewgLtCfoFnfZ2ION7/6mMou9gYdOTMY=; b=9nb+UZodi926wtvi9aGmbSnxLOFOTeeECo8NU116h4RYV6xyyRnb7VUJ5D3btkvDDdrkJfJcP QHEDzEM/j4bB7F3iGDvEFxMX4oi1OzgbzOl/cOoB5PFzCyxV3LxPJJT X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass 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: 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: 1757648686716116600 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 Signed-off-by: Filip Hejsek --- hw/char/virtio-console.c | 62 ++++++++++++++++++++++++++++++++++++++++++++= ---- 1 file changed, 58 insertions(+), 4 deletions(-) diff --git a/hw/char/virtio-console.c b/hw/char/virtio-console.c index 881c862ce9d12027f392031bdea7dbe280ec5493..0dd10a81f151b0606f6060ab2b4= 936117d81dd83 100644 --- a/hw/char/virtio-console.c +++ b/hw/char/virtio-console.c @@ -32,6 +32,7 @@ struct VirtConsole { =20 CharBackend chr; guint watch; + uint16_t cols, rows; }; =20 /* @@ -107,6 +108,33 @@ static ssize_t flush_buf(VirtIOSerialPort *port, return ret; } =20 +static void virtconsole_send_resize(VirtIOSerialPort *port) +{ + uint16_t cols, rows; + VirtConsole *vcon =3D VIRTIO_CONSOLE(port); + + /* + * We probably shouldn't send these messages before + * we told the guest it is a console port (which we do + * by sending VIRTIO_CONSOLE_CONSOLE_PORT message). + * Instead of adding a new field to the device state + * lets just use the guest_connected field for that purpose + * since the guest should not care about the terminal size + * before opening the port. + */ + if (!port->guest_connected) { + return; + } + + qemu_chr_fe_get_winsize(&vcon->chr, &cols, &rows); + + if (cols !=3D vcon->cols || rows !=3D vcon->rows) { + vcon->cols =3D cols; + vcon->rows =3D rows; + virtio_serial_send_console_resize(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) { @@ -114,7 +142,9 @@ static void set_guest_connected(VirtIOSerialPort *port,= int guest_connected) DeviceState *dev =3D DEVICE(port); VirtIOSerialPortClass *k =3D VIRTIO_SERIAL_PORT_GET_CLASS(port); =20 - if (!k->is_console) { + if (k->is_console) { + virtconsole_send_resize(port); + } else { qemu_chr_fe_set_open(&vcon->chr, guest_connected); } =20 @@ -174,6 +204,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_send_resize(port); + break; + default: + break; + } +} + static int chr_be_change(void *opaque) { VirtConsole *vcon =3D opaque; @@ -182,7 +229,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_send_resize(port); } else { qemu_chr_fe_set_handlers(&vcon->chr, chr_can_read, chr_read, chr_event, chr_be_change, vcon, NULL, fal= se); @@ -210,7 +259,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, @@ -230,6 +279,11 @@ static void virtconsole_realize(DeviceState *dev, Erro= r **errp) return; } =20 + if (k->is_console) { + vcon->cols =3D (uint16_t) -1; + vcon->rows =3D (uint16_t) -1; + } + if (qemu_chr_fe_backend_connected(&vcon->chr)) { /* * For consoles we don't block guest data transfer just @@ -242,7 +296,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.51.0 From nobody Sun Sep 28 17:03:46 2025 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=1757648775; cv=none; d=zohomail.com; s=zohoarc; b=MqyK+qfJ3dfYD9HFTbZyxvLn7Pg0oLxOIcyF/AyNPJBMstf8reeNO/dSjEplGNIGvoQeFlMNef/4EAzz/eZRWOtjGRbEFlJ6yiGmbJapBBMbEJX8o2FaVrRNeVIRrPq7BPPTCYI+Qc+QupywoQtJVwFtLwtHWZBsnmBww2X4G+4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1757648775; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=wHCEqsSTuyjVHuzvnpEWX3Ow315g/CQPHH4Fiyg5ur4=; b=HTWAcbASWqronvWKDwUrPBbzBGCVkhvAathgOP6wEk1YRtfcEeoKAdWe5IBEq3kRig/M8HBejbcXUVc4NYrKM0q8FDcRAMcaRi6c9MIQEnh5C6UnDFyCJ84dt6caMlbAFOEJHwaMNY72ssbXvNos5FMPOsyaxZQwuUIGLj3cWnc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1757648775735689.5731749543467; Thu, 11 Sep 2025 20:46:15 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uwuhT-00077h-TB; Thu, 11 Sep 2025 23:43:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uwuh6-00072W-SA for qemu-devel@nongnu.org; Thu, 11 Sep 2025 23:43:30 -0400 Received: from mail-wm1-x32c.google.com ([2a00:1450:4864:20::32c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uwugw-0007wi-57 for qemu-devel@nongnu.org; Thu, 11 Sep 2025 23:43:28 -0400 Received: by mail-wm1-x32c.google.com with SMTP id 5b1f17b1804b1-45dcfecdc0fso13695045e9.1 for ; Thu, 11 Sep 2025 20:43:15 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-45e03719235sm45757555e9.1.2025.09.11.20.43.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Sep 2025 20:43:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757648592; x=1758253392; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=wHCEqsSTuyjVHuzvnpEWX3Ow315g/CQPHH4Fiyg5ur4=; b=OYZ53INyFMBOKxLOjYQK8s1JJ/TNrZwKf9R9CGC3ZWor/NX6cppVaH3cXyfLMc6pRX co0WC7cIDwYQUCdZYtOlcEzJILM8W4sEzPTVAm9vCD+DmivmYCjG/ng6EqgEuafv/rpS diL2XYhxfw9U/ocifLZGEtfhx5NTPWEG8PmwMj/S1L4ArAyxhjDEmUIf2zHSje+ISVgV oun5v+Gkd0HAR9COaDONJOwqq7dAsJsCgrY1cmnbwx4OBnp9Qjy0cYGAr6qVZ/KyTMES XF6Fdev9fGFATnkGKVhBG3go0bcTSOgo5OzdP/ywyl40W1WlKOJPr2mF3MGXG6+YO+ci Lrkg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757648592; x=1758253392; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=wHCEqsSTuyjVHuzvnpEWX3Ow315g/CQPHH4Fiyg5ur4=; b=hp7wkvwua3AUBwFSMGSN5JA+q7m1tCqQNB5xkKLmfRHgD9rfT6E3Ft0hMr19H9fmd/ JcZoWUkdpTzborhubl2dsBHF+ZHPF7TukYejrOTvJqF3bujdeQU0djcaxA7bN3wilaJM pe5XhO3RBAhNDUSrm5KAFgG9x/cbzQwBot0IkCy2dIP5QG9NYPet4sUQi514xI29bPD/ It35uWlPeI+XF3ZHak0bpEsqnk8tF6KizHfoGUdi072tydpkFbMzC9KecOm88DSNq88y zRcUPMbSFu/dURHCNKbCXOEe+Z3ILGWljjk9LQRn4dKYDZgYf8zyiKCyFlQoVIrH362o hhPw== X-Gm-Message-State: AOJu0YwGVd1WDVfgcDr4NJtbTJPoqAK6YSrAP8MmMJCducoYMYy9vJV5 0qtK+WnOFbUOqrayQGDmBGxUIkgXJKc6+vTxKOBuGSMMa9HSFNUZyDpy X-Gm-Gg: ASbGnct+PE/CeDvfoF4oWyH1bBifTt3fFx4VpG53CWqAi2af44Y01tfGkc/d41SxDpA C5EGHC2JZGACUIJ2W9XT9t6HwGCz/gVcYLf8J2G5YbOFKcCqdVUU8E9qHN06q7f2RTUgKQotFSl TE0LlovdE4jcz+yWbe5dSHu4WQr1Upn/9LVwhcf9PQjpSNGnMsf5wkVWRJEjNfNoW7uOsQVUFRc BMNGB+442TB/dOb3syeIcJCGSDr8TSKWeMUDoCf5lzI1D0Ltjbgw0EeEJptiSiI6aAO2CRSwrXJ SLkiD1Mf6kH/yW1nMbJct9BLMdM3Ymj3ChmZpx6QgvrLU5xYvSuMzdOyosP1mEAvNH012oqb/j5 Z8VoB98ldF+fBfrzatJNzpQX9kSRDlvd2gzli5mFXAFlXdiPQRBBwzkJG/fvuEqE= X-Google-Smtp-Source: AGHT+IE+N8rB4NBSBETKQwk0T6NiTWgcWMbth9PlgD8UbDQIYB3SspcqPf8tWEWNgibo8loQMJQuTA== X-Received: by 2002:a05:600c:34d4:b0:453:2066:4a26 with SMTP id 5b1f17b1804b1-45f211d008dmr20526415e9.16.1757648591611; Thu, 11 Sep 2025 20:43:11 -0700 (PDT) From: Filip Hejsek Date: Fri, 12 Sep 2025 05:39:55 +0200 Subject: [PATCH v4 10/10] 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: <20250912-console-resize-v4-10-7925e444afc4@gmail.com> References: <20250912-console-resize-v4-0-7925e444afc4@gmail.com> In-Reply-To: <20250912-console-resize-v4-0-7925e444afc4@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , Filip Hejsek X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1757648577; l=1846; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=vJHlivNruwCHO6Go3XoN9GPqzA+0DPjU+IE60JkhFcM=; b=yQjfu7m0PrRV0fSxnbKbvjHDkhd/ZELNUst/joqUkBDR0YEfCq2qnqFwa4n576GY+bZswOueu foOCIwsfSRvB5WS4IvjIMofko8F6BlUIwE4PsBMKp93IdcP/XpfCav7 X-Developer-Key: i=filip.hejsek@gmail.com; a=ed25519; pk=nakB8gEK3oi+Q/5dBTMCy/LgZL47NP60z1jeDR6O/WU= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::32c; envelope-from=filip.hejsek@gmail.com; helo=mail-wm1-x32c.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: 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: 1757648777676116600 Use GetConsoleScreenBufferInfo to obtain terminal size and set ENABLE_WINDOW_INPUT to receive resize notifications. Signed-off-by: Filip Hejsek --- chardev/char-win-stdio.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/chardev/char-win-stdio.c b/chardev/char-win-stdio.c index fb802a00b13ac4089abf3bd4f8c4198d8325764b..dbffbe1d11702367d4ecfcb63fa= d7c3c18324ad6 100644 --- a/chardev/char-win-stdio.c +++ b/chardev/char-win-stdio.c @@ -44,6 +44,20 @@ typedef struct WinStdioChardev WinStdioChardev; DECLARE_INSTANCE_CHECKER(WinStdioChardev, WIN_STDIO_CHARDEV, TYPE_CHARDEV_WIN_STDIO) =20 +static void char_win_stdio_resize(Chardev *chr) +{ + HANDLE hStdOut =3D GetStdHandle(STD_OUTPUT_HANDLE); + CONSOLE_SCREEN_BUFFER_INFO ScreenBufferInfo; + + if (GetConsoleScreenBufferInfo(hStdOut, &ScreenBufferInfo)) { + uint16_t rows =3D ScreenBufferInfo.srWindow.Right + 1 + - ScreenBufferInfo.srWindow.Left; + uint16_t cols =3D ScreenBufferInfo.srWindow.Bottom + 1 + - ScreenBufferInfo.srWindow.Top; + qemu_chr_resize(chr, rows, cols); + } +} + static void win_stdio_wait_func(void *opaque) { Chardev *chr =3D CHARDEV(opaque); @@ -75,6 +89,9 @@ static void win_stdio_wait_func(void *opaque) } } } + if (buf[i].EventType =3D=3D WINDOW_BUFFER_SIZE_EVENT) { + char_win_stdio_resize(chr); + } } } =20 @@ -202,6 +219,8 @@ static void qemu_chr_open_stdio(Chardev *chr, } else { dwMode &=3D ~ENABLE_PROCESSED_INPUT; } + dwMode |=3D ENABLE_WINDOW_INPUT; + char_win_stdio_resize(chr); } =20 SetConsoleMode(stdio->hStdIn, dwMode); --=20 2.51.0