From nobody Sun Sep 28 15:29:10 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=1758412021; cv=none; d=zohomail.com; s=zohoarc; b=ldWiaPAgcw8D5eCYXKmr3pb4K7sveJM/MCLDx82tPGdBHepEVNiWrxgOUlKm+qSZFAY1hHHpUkx+jn3Ig+0UlChqrj62G/Z43ZZX0ojDyS29SJYqzm0me0X9QMMM5T06SdBajGbAYl6ITA8JY/SkjQ22l0gKEQ/BnwXerP+MnLQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758412021; 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=eLVy/ttJTMN/aC/FUQ2mgo7MUS59mQoBuj2lOFsEkcCQqkNnFinF3ed2B/yoLots06cVZ2sGQbHCgXz5+A0NT9v6S9qUAWtZzm09IohxEoZe0seOrJGVMrjUYgAgfCBpI1mGWHtSWow+SwYhGI3VbgngO0LlLtoqnwUrBotgoFM= 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 1758412021455140.35537704208707; Sat, 20 Sep 2025 16:47:01 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v07He-0004zI-JE; Sat, 20 Sep 2025 19:46:26 -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 1v07HR-0004Z0-DQ for qemu-devel@nongnu.org; Sat, 20 Sep 2025 19:46:18 -0400 Received: from mail-wr1-x432.google.com ([2a00:1450:4864:20::432]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v07HL-0006eg-Uu for qemu-devel@nongnu.org; Sat, 20 Sep 2025 19:46:10 -0400 Received: by mail-wr1-x432.google.com with SMTP id ffacd0b85a97d-3ee12807d97so2673879f8f.0 for ; Sat, 20 Sep 2025 16:46: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-464f5d053f2sm142259325e9.20.2025.09.20.16.46.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Sep 2025 16:46:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758411966; x=1759016766; 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=f51wH0gi+acPD3D8CcLcwQjhOScNY4CK9QhnlmRthlzfcH58ytPG5JX5IES4WRQ+5p wjd5sowgqu2NokZpAV8CrzHAOdyupRZ+euR0+El4czpkDfomG/Wi3WQIZ/twyb7A9eyQ rnqiCPuDE0hlJ5tZLxZNcpCLMl020FB5YJe5FPI+kGgrKRlmzA3NX5ABGBdAMzZlWH5q SDifiW32R2PrhE012tof5Ac5hZVieHPa1P6JEeGRMCREP9o0nLTnwV/0+WVQ36v81s/E H3NG9p+IsrUPOLuH0UFyouJdAbiRo+SEdqR9OB+meOlYBYVeDvXdpsaIb5URDaOEH8Pl TmAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758411966; x=1759016766; 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=aRRnf1VF7mwMjxyJSqk97K7LiPm73JGZhlKUQO8KcTUgLnfStH7E9BCmgoysg5zbEH ZRbBySxl863amDzKKKXaxUgIT16xQ2+RekR6wQuxfutZ0uPRY2JrWdKP1o0v+VOy+g9j 4xqCVqT/yKqQQgWVJ6kHemb9HYitzny0Z/ud6w8NVYnMUo6NrV/RotlZWiEyZkkyJcc1 P8Vq7Sv5oPkVyP6nA4+BjfrUuhlr4qPKFYnf8IjdBAYoB0KDlo9vq4I+16Xlcwa71JyJ Gud5YDw7XhNHVz/0xoMRn27SIJVNd31LQuv6cwxLssEFG3MitDb/SatcBDvpDQ4yCjg1 3L9w== X-Gm-Message-State: AOJu0YzcS+UNGn2gJ555j91STRUlKy3VUMpkRmOJGo006hCh4qfIY/qE b+Nqyi12z7cJzgDpO2YTCkcZbOdsgNVbCZ0BZeucEVFKLlpy3tFwj1bu X-Gm-Gg: ASbGnctcz+GTdmUt6G51a5+sAK7fg/qCS3CtO5MsvjCXh9pmitYu22EBzcuAen4rPsR xivOYH3epA7DyOGOSzB5JDZPcISH+o2NWqilnY7j2ubL53vT3r5VlxLFyRTxLrSjKhkoW4Vr4Ry O450i8fx+we99J8cmNG70qjwyRvUtwLX+WvhBEII3Lu2oVm4EOSeWKFwko36rxEEzmjfFCl7R3V MHoZjfMh80TmTAXM0qy/j+t669lQDIUhAotizFw8QBnsbLrp9Ditr+zsZwzY1VtNbOpIhGeWDFb qHaMzeG43AguTNrbzUJ9aAuvdTUyWoLr3SY3sL53cCFqEfWINTgajttSMxEV7PMuiAWCd7JDl3k bHHY5lR2PmKgUqeygFaI813d6BXHK0eUrGUHyMNlTyQ1BcC0r2MnVT7DsVOKQ85o= X-Google-Smtp-Source: AGHT+IFKI8KLAPj5bk3CegRqPq8lN8lLXlqLLrl2Q7aZpyvYYqB9gd6J0Dz3nKBLlpE4zQx89rzt/g== X-Received: by 2002:a05:6000:400c:b0:3ea:9042:e682 with SMTP id ffacd0b85a97d-3ee7c55430amr6667997f8f.11.1758411966340; Sat, 20 Sep 2025 16:46:06 -0700 (PDT) From: Filip Hejsek Date: Sun, 21 Sep 2025 01:45:31 +0200 Subject: [PATCH RFC v5 01/12] chardev: add cols, rows fields MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250921-console-resize-v5-1-89e3c6727060@gmail.com> References: <20250921-console-resize-v5-0-89e3c6727060@gmail.com> In-Reply-To: <20250921-console-resize-v5-0-89e3c6727060@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , Szymon Lukasz , Filip Hejsek X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1758411962; l=2276; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=qKds+se7c4I8+/AcqhGDFyyVfjfxbvfkq+ChYOtNMzo=; b=oOALkNNtoP+4iyR/iK7otC7SHypbWLJUKZmFiX0DK8qVj8TlU5CTNwYWjZIovHMFWgR9aIWww AhyyjOhFofiCjQw34YDEL/cuaWljbPjlXiZA8N4Y80kW2ncY5otXfzb 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::432; envelope-from=filip.hejsek@gmail.com; helo=mail-wr1-x432.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: 1758412023349116600 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 Reviewed-by: Daniel P. Berrang=C3=A9 --- 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 15:29:10 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=1758412056; cv=none; d=zohomail.com; s=zohoarc; b=EXYkfUNCiJIcOaD255Jq6N8lWsdkXjMDzAAc82aY8KLapzL2M9DrJOmUcs+uhRNw7Kg6wgwds84dxgFsy4Uvtwpt3BU+z/TOnetnLfnzSccXJ8e8ubCKfcxZfPk9RmROhv2/EEV2/RyaR4yeDjm+u6ubIio80llbdB0cF2+EDxw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758412056; 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=dy5hUaCFo5FGHM9/D33wmAu73UOM/NcUHqn4eoaU47Q=; b=CqR43avNNyX7Q5oSKLnQzNl76YUdREQse3MLt4M3Gh/TbTa4V6rd6m1g888r5WzhhPZySSPM6YlSOa7E1BxrXhsU8zafuIXhckCHr6V0RQLLbshnGzYCe6io/dxqI8WkZPdRw6gljG194yceuT1wpOS7EBpLFxZMxNvF/CJvEt0= 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 1758412056088501.8041005053026; Sat, 20 Sep 2025 16:47:36 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v07Hg-0004zz-OE; Sat, 20 Sep 2025 19:46:29 -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 1v07HT-0004Zd-7A for qemu-devel@nongnu.org; Sat, 20 Sep 2025 19:46:18 -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 1v07HQ-0006eq-Pi for qemu-devel@nongnu.org; Sat, 20 Sep 2025 19:46:14 -0400 Received: by mail-wr1-x42a.google.com with SMTP id ffacd0b85a97d-3ee155e0c08so1834637f8f.2 for ; Sat, 20 Sep 2025 16:46: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-3f88de2d09fsm2240207f8f.36.2025.09.20.16.46.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Sep 2025 16:46:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758411967; x=1759016767; 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=dy5hUaCFo5FGHM9/D33wmAu73UOM/NcUHqn4eoaU47Q=; b=ie3lMOvAfjRwIn2x7x5CH30bCbAbojRT49QGnIuiBDN6R89JDfIb1y9WyR3RbyVksK EuTSDYRsOJ9y6s0Jp/dVGEOIqvX/kzpxpt7wyAfao20pIn9nBto7/m3ARhwfkY8HgEIK NSR/VaY0Wde+bRI1XDQDYs74OM10oVVBF3yedB9gFq58v5+JZdUpAYCUXTssQbqCl961 0gsjyK8cyyQv6oycBAf7lUMKVHgjC0k+GLDOUpCU/ubVmih5yOW93vBwRUPG3RejdP9g /o/S5bZKWzl5QCczYKu8Am//YbHpfK/Jdg28ZjgM09YmaTH1h82KZE6NNk7ix6psk+PG hMKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758411967; x=1759016767; 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=dy5hUaCFo5FGHM9/D33wmAu73UOM/NcUHqn4eoaU47Q=; b=C6FH6/ZNGrgwPng8HszgWoLbhbwvV3fr5dY84pQThQ4g8H+7It0rcXQKp5op64pbrx LDna+n6Yb41RTC/xAB3qYqV/KOE/QWFO6+SEKdBfc9MK4ItPTYOgpMAsvZaw5+zCcmg8 220tA9YM57fNfvaKsOwxMc06WlVmflsstWkP1SxxegsUo1xdMyUa91cvHdb+8Ed1P0LD JC93ZJ94FOSiGtsS25GageJqj/rHj1eM/zSkFaBIxx9r4ZcKbOCollSeWev5VyoqyKxc Cp5oJyE4wcYs/sKKfy7Cm/AYVE/3J5kUUhqV5vUVUG+sGcDkqAzRUH7J6iqxGLxcY06i diVQ== X-Gm-Message-State: AOJu0Yy2HlqhMtJReyoY1jtEOBSWqYxqrq+ptkHAPu0p1TjT6vQZv4um +jDHpe4U1DlwlWmM2eLTacVX3/3sR849oQpDxgalX52W3JtTmrkSQgKe X-Gm-Gg: ASbGnctDJLgldMB5IuQ9sgeFog9w0RVSfeS4xS432plhM+AHpL/k5UM/6oHHxXYFWZz F7ATYMr9GhVDf8kjGy37/7N3dH/mhSNW2fwCnY1y7uZmxpgRFgHOOO42n6TM+TX/PyvSOUktg5C pMueP0ujL56nQbAzmeQSduBkfQPjMhxFjOSQbLC9MwZU/1HayMCDJKgn7dlvDCV+mC6Kr5IrLfE 55DEq9w9RoZIVDgQVUkGYCAbQ3DvFVGHCOrzMZAlnVwBaWNIzUg/t4gCj2xUp3qUHJKvAx5D9b9 9CWjsc8uD9o/WsRqVPDyqD0Rjnr/mJFKVCmkkERAoaagL1H9HJNNc292cL+0GV2YnrI/pVBU3rs KTyKbxGS7MBEC/c5iDE8Xy9GqaMvm2v1g9FNSYhK2RbwUwTBqK3Vi X-Google-Smtp-Source: AGHT+IFrVizIbqlhOZMa6zCr5DuB+Kasv28SArjjl+eXp73b7vkt4R7lwjY0ZjI8DI6zccbAQCE5fA== X-Received: by 2002:a05:6000:25c1:b0:3e4:64b0:a776 with SMTP id ffacd0b85a97d-3ee86d6d926mr6392702f8f.52.1758411967413; Sat, 20 Sep 2025 16:46:07 -0700 (PDT) From: Filip Hejsek Date: Sun, 21 Sep 2025 01:45:32 +0200 Subject: [PATCH RFC v5 02/12] chardev: add CHR_EVENT_RESIZE MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250921-console-resize-v5-2-89e3c6727060@gmail.com> References: <20250921-console-resize-v5-0-89e3c6727060@gmail.com> In-Reply-To: <20250921-console-resize-v5-0-89e3c6727060@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , Szymon Lukasz , Filip Hejsek X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1758411962; l=9156; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=LC0GCimm79Ttvp8U99b3FJ3W3o5zmCxOxIlm/KYgPyU=; b=vAwPyMucSi3/Rc2cH5bUNqvgLX49Sl+shgX0E47bJQhPXFXBstV+dN0E4aZj19mhsOmEWGbjh 37dt7tpcOKkDxpvsJXfLDJNZYcS0ZS/6RahObMuGiDguygkO5p81uQ8 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, 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: 1758412057287116600 From: Szymon Lukasz Add a new chardev event, CHR_EVENT_RESIZE, which a backend should trigger if it detects the size of the connected terminal changed. Signed-off-by: Szymon Lukasz Signed-off-by: Filip Hejsek Reviewed-by: Daniel P. Berrang=C3=A9 --- 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 15:29:10 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=1758412022; cv=none; d=zohomail.com; s=zohoarc; b=mB2XTbB7fZoXDXlx1h2QuChz/jH/kxyb1nxb6HV2Hm8j8H6PfEy1ijnLsSCfAGzIFYnXlu9Sc2uULYMaCKg1kFFZ7j+YntJLskFIC/ENopj9lgQojG4KviY/er8NPYeIITOuAXKVkbm1Qjqs3FOTbDNwiIWfQMAx2vBXiFkgEsM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758412022; 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=CBykuLaN/BRsgsbJnLiKgNZTnU7UWdwEqi95HNv/RKK8ib4mC9U8DdwhZqGbjHLKqdc/teD9eVQljPHDhvfgJcl57ZWqjImfPMsB28UA/114EIE7WTZdSDAABr7xgmDmXqfRbftSSiEuFotLEDGw+Ile6zWGrRl+J0DabVsbFfY= 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 1758412022159117.47786647226997; Sat, 20 Sep 2025 16:47:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v07Hg-0004zy-Nj; Sat, 20 Sep 2025 19:46:29 -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 1v07HW-0004dt-ND for qemu-devel@nongnu.org; Sat, 20 Sep 2025 19:46:19 -0400 Received: from mail-wr1-x432.google.com ([2a00:1450:4864:20::432]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v07HR-0006f2-5t for qemu-devel@nongnu.org; Sat, 20 Sep 2025 19:46:16 -0400 Received: by mail-wr1-x432.google.com with SMTP id ffacd0b85a97d-3ece1102998so1859216f8f.2 for ; Sat, 20 Sep 2025 16:46:10 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-464f5a285efsm161723765e9.18.2025.09.20.16.46.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Sep 2025 16:46:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758411969; x=1759016769; 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=AwcIKz5NWVy3/PbfQEfPtOYqtNVUQ/ye6VGVJCxe7Ddcar6dvpICuVCw9Hed4g5gfC lU6zfD/Oppo4sOsYzARm4UeAJLuZnHPQfZmFfJPTXcTselE/dw2yFUnf+X2bg8X6Ilqb K4fXMTaM8Ab/a9D29G4wjeXmioOk6I/8SdjnZW0r+JidxOoD1nzFuVsggpLFCWSH0YnA Vk/SzjtPor+tTlVLJOZHh3dO/U0bSil1U04vbgSDQRTiWLBTpjCSS8O4wG/pZl5rMzFT UCvrmJ04sWDGfWrNQgxA72e2xBfMkLcJORldhTa/myd0oNGlPvs3zicbvgPq9DOcN4bk UdMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758411969; x=1759016769; 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=WnQCweC/iEe90abOv/kBXtaGe7eg6lD67wFaljKxnP+XiNaDyX0sRzKgT1+SNGooXj KHntk3JQ0E1qu0jCpRU0RT3xg5qqfNuxrG9Kpw20OJG5diQitoXsNFjf6wt4lu/x34JI W2P3aOCyx1ZXZ53OxV6fZGy2aMHPe0E+4lmUoMN4sTT/n7lw/TCYtM/AhaieKWQlbCUq P1i1uRXLykiBW1L8I+KaET362kbnrAxHePHeyeQN1KCb6LUXEODtRfT0Bt1/Is7y9eDL xvko3bXNi8v7gWHzQmnLvd914SMvLdEt+qvxsy0x7hAzhyo5htq8wE+7kN4tLNV04go6 9gtw== X-Gm-Message-State: AOJu0Ywo3JIK7nbfryHUkks0VmU75jld0XycZopsVdGwOcmnRip5jET4 EdnomBvmI9tZqLUY1Z/CxKitDVLp4pOpYk/og2QYmJehty7+NAbYXEO7 X-Gm-Gg: ASbGncv3unI69TyWmSA3ggPUyLh4jn23jiOlFmYl/tE46u4QDDTBQ2g9RZoav/bfqWh yRg0ISGQQ3yCIqMy9LLc/19zKLm6AEhRHO/qGWAfKCT0IVI6ndxlA57BYcQfssoe/VlrthlUyEg v6oEY84YVLmiGxRF8jWB2XSGN4NVDvKEbjZP6cY83bG2vu5WlNOWFxkLLr/D6H60ecI2Tt7QIgb WCyA3bGktYGX4No/lHmh7T5z0PhepjrdY4nQ3L5Kc78dQkNIhZn+KsLttb99Uic656KvJJIbDil CKPkILXqMrsZ66GDIVMDI5gnfKL15bcAmzcGaP6YBRjxeWPuilO/ofAD4ixHDduYxe7xTYxrqLD n/qjnDIi/x5Dot7idEekQ/p/VZ2877AP1lG5/ZcztnjXgrJmnzGbT X-Google-Smtp-Source: AGHT+IGRoj9SRzbKiyUxZ3l42ZKr3XtggmDkJcvnkY2gig+0IRgpvA5zxFCA81eWWB7UW8lHAa16cw== X-Received: by 2002:adf:b35c:0:b0:3f4:8579:3692 with SMTP id ffacd0b85a97d-3f485793972mr1680268f8f.11.1758411969007; Sat, 20 Sep 2025 16:46:09 -0700 (PDT) From: Filip Hejsek Date: Sun, 21 Sep 2025 01:45:33 +0200 Subject: [PATCH RFC v5 03/12] chardev: add qemu_chr_resize() MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250921-console-resize-v5-3-89e3c6727060@gmail.com> References: <20250921-console-resize-v5-0-89e3c6727060@gmail.com> In-Reply-To: <20250921-console-resize-v5-0-89e3c6727060@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , Szymon Lukasz , Filip Hejsek X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1758411962; l=1677; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=EbVowVm5LMaQukItgCxeH7pJeB8Mnn5jMPvv+tRJQpY=; b=iyft8MpVjFYz3uVM9G+jSleY9DpFYRLWM4DW4Hl+UbKYvPbPZasxhYg3+LYKdpco50XmYIim9 DSBkY9J9WTFANsHJwkuQZtZXvyHvH48k0P0yfMnyTFAWGQthSPXzgU8 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::432; envelope-from=filip.hejsek@gmail.com; helo=mail-wr1-x432.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: 1758412023329116600 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 Reviewed-by: Daniel P. Berrang=C3=A9 --- 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 15:29:10 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=1758412081; cv=none; d=zohomail.com; s=zohoarc; b=VKaz+7yIqBwW3Iaa2iyGbxeTju0gh3T4xiCS933nUG5Tb9XvGEIpP9/H909thM7dWz6otsrydXT0HJgk0VtAfr2XZU4Bjk0dWwrfjnQCNDR1J0bEm5BM4Rx+kcQEeCY7dkDaKSg03OlpMpCUhtC60lgMA1OUyCc6/wk875sd3+s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758412081; 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=hCZ+nixf7PQMIujJyTtBUQksmbTN5+upPT7hjXIuKP8=; b=VgCrcDjEIb1lFYcgJupeoeLaN7WbrVYsLa46qmk21EBmeRSlEiITWP/Uf/B/t0sh7YLv9O+adhcOsT5T5GtvznM1/jghFenT7wOEB2DFxYyiQoQZDmE5OO6LHaqZs+NWZd868za9T+3h1FlBghvStAP8JJTR0vcC3qhMv0VZBAk= 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 1758412081610547.5558420708788; Sat, 20 Sep 2025 16:48:01 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v07Hj-00050K-9V; Sat, 20 Sep 2025 19:46:31 -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 1v07HW-0004do-N2 for qemu-devel@nongnu.org; Sat, 20 Sep 2025 19:46:19 -0400 Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v07HR-0006fH-6T for qemu-devel@nongnu.org; Sat, 20 Sep 2025 19:46:16 -0400 Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-45dd505a1dfso22258965e9.2 for ; Sat, 20 Sep 2025 16:46: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-3ee1385adebsm11802399f8f.42.2025.09.20.16.46.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Sep 2025 16:46:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758411970; x=1759016770; 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=hCZ+nixf7PQMIujJyTtBUQksmbTN5+upPT7hjXIuKP8=; b=W3Zz387b6mAGhiRpw83Qx9tUFtHpnzcoEkiFsmx7PrdF45ssgTF8AoXTBIxmg8Ovjp WRXbRqnxeGAXJRUnXmxjfqnW+8P21SIhU9+fNOHtizuqzXjixK94DLfPoDaj+u9w3Mkk p+wCa0Lg/b/DerEYexe/Ec0h/rnmN6MEzmP7ysGnJrrQteDKI2ss1GGROlMl0GpLNyhr m6s2nzZICdXlRS/M+SwSrsgF34/Wv3S2h8+E+M/8tJ47FZMHVA+wq4zlOWvc6cwuOA57 IrpURxLbZf+md0GPE0vs27U4v/L8laTFlqqd8dvpnCs3AL7fGvGO/aC5KNKzqDEVqdtF vbBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758411970; x=1759016770; 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=hCZ+nixf7PQMIujJyTtBUQksmbTN5+upPT7hjXIuKP8=; b=AlMDyv4TGZCQ2n9WmoR1ryUrgT1j6jcY4JAZgk00MizJktrGdjOfk3AtcLsBXM2wjL cQ55bRZNKhkA3Oh4i+jAJigihhYfGdDi+un3eG64CwHGlgzM8tx52Ba3/idwxXttm8eW c0bnKks699mtlCN/x4h/k0vc1v0cROgHab8yNsuVpMQYsTdajzOV2AJpAF9h8wH/4ujE g+zj925Rbrjk0aptJHOZTog7UXG9ZtMz1d7pl13ExUrae9GlPRbOEzt5JxCLNyHuCNu5 E4AIem8ie0By0D7G9IYD7ferVvtmpWvqY5nEvnd43omlrTddyolJ51ujw7leebqd0gC5 istw== X-Gm-Message-State: AOJu0Yz6Vf+n1oUnHkVYLB1hg/dz49n4FDX+2uvem0FEqHvlOIjRhuFW Vq2Bb8XLoTR0sbj72l7U1Al9tZzLugjYRxNN/9WaJ1DdCFlG1LSr3ECu X-Gm-Gg: ASbGnctgCpytX5gbI0uQcioUxmE653ayFP9dmuZo7f+w9a3WyIqtgBC55MHOLGvsBqU cNY2aX7lFuNI03Nt7Prh9eJCpjmiAQ2IXu3Acy0apL3CzzY5b6aHE+R6xHT0Pc50FKhBzJIn11s Uv/8Aw7ZPOheNhmB5UQ69GvEmftIbpm/0zxuJPsj4oI6X48x2kfqXuSNnB1StoZQyPbmcUXjiGP hiicLzanG5bVm1CiKzdMywqfECuOhDsMdtT0MriMS+welTNlqJpSPoksVJMLkwjpYu0d+Ap7ESB pTQiTHVfMx5vuBkrSMwa/zw+fnietI+7LJNZXaAHC/QiPpW2Nm9lZoZhgOcr9aOpQqVk+/hM4KO zyQm7V8A5YVuGB/lfr5DCcb0NmbX0oX+qmLCcdMNEavz5TsgCcPHx X-Google-Smtp-Source: AGHT+IEIpql2bd7ISmaXlFnyqD3uiUDNc8MbDGRJ1Ez4noloZrktcOIKphl23X13L3x9QD0f1rlSYQ== X-Received: by 2002:a05:600c:630d:b0:45d:d9ab:b86d with SMTP id 5b1f17b1804b1-467f2cc87c4mr80479565e9.31.1758411970269; Sat, 20 Sep 2025 16:46:10 -0700 (PDT) From: Filip Hejsek Date: Sun, 21 Sep 2025 01:45:34 +0200 Subject: [PATCH RFC v5 04/12] char-mux: add support for the terminal size MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250921-console-resize-v5-4-89e3c6727060@gmail.com> References: <20250921-console-resize-v5-0-89e3c6727060@gmail.com> In-Reply-To: <20250921-console-resize-v5-0-89e3c6727060@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , Szymon Lukasz , Filip Hejsek X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1758411962; l=1676; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=uAneZtIXQKXb3wxUGy0F4B+wt6eZP9NrISsiWqyMWe8=; b=/HsXc7iFgRxcpHZ3zj/aiBFtQOOYql5Cx+oMNAKUIf64tiYhfYd8JZxfAjfl316dF41fwKt6u X+v7kRquDhyCcIKalztfZsjbjlb9Z2ln7oGLLTpM+lsprW0mt7NYton 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::336; envelope-from=filip.hejsek@gmail.com; helo=mail-wm1-x336.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: 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: 1758412083388116600 From: Szymon Lukasz The terminal size of a mux chardev should be the same as the real chardev, so listen for CHR_EVENT_RESIZE to be up to date. We forward CHR_EVENT_RESIZE only to the focused frontend. This means frontends should update their view of the terminal size on receiving CHR_EVENT_MUX_IN. Signed-off-by: Szymon Lukasz Signed-off-by: Filip Hejsek Reviewed-by: Daniel P. Berrang=C3=A9 --- 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 15:29:10 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=1758412050; cv=none; d=zohomail.com; s=zohoarc; b=TBSAabHbyDD46Q7ANi40ZXpmpM1xenUtupAgy0vcnMCsYNWHGJ2+gotYaKNmI9P3EsiBEURULOCG6tZezklgSi28gkDoKu51tj0oWbZV3jMpgqEj6zRjtd9FSJ+uoENQoX6BxtfbI2t4I+y7F74bTZBs78KmXKxNZLPRENJ2z8o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758412050; 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=OIAi1qyfLaV8pqCwOYOyWdfd+XmLDkCnQiZbByR7m4niFaNEAWdkFHWvO4K+QuDsLauaxy3JdyHnDlGYsFmTMtFJNZGj8Xh7C4e95R22eGaf7Ap42vaeJu30u9BZqO3044jiGGr3sZ7IJuZAfXfpYEWxpUetT0w2/Hjsps0/AT4= 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 1758412050537217.63070355585944; Sat, 20 Sep 2025 16:47:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v07He-0004z3-9U; Sat, 20 Sep 2025 19:46:26 -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 1v07HW-0004e7-VP for qemu-devel@nongnu.org; Sat, 20 Sep 2025 19:46:20 -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 1v07HS-0006fY-DW for qemu-devel@nongnu.org; Sat, 20 Sep 2025 19:46:16 -0400 Received: by mail-wm1-x334.google.com with SMTP id 5b1f17b1804b1-46b303f7469so3863665e9.1 for ; Sat, 20 Sep 2025 16:46:14 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-3ee106fd0edsm13179826f8f.53.2025.09.20.16.46.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Sep 2025 16:46:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758411972; x=1759016772; 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=Vuo9R5WdbJbZDQaP8oajMnUufAi86F1bHX2wh/VxhZQWWTdHnRP5eMv8SeFc3s8VsD mc9JnFmW/isofgtYoQbWo5vR9HXdxNEi3AbYrBA6JaiFNyNDoVs0G9baojGqAayfodCv Ne19l1go2GDdIsiN+I8NspryNJZ4p0LUI5T0+3Er5S0yzFhptus1JJhECOoRWg7XXIIx Vh7SmluSnJSmmPXdcMKghHGVoy8mEUX0M/LjwJS3e7Bh3kVcgKEAjcq1hfljS/qag/gb hlrjItPOVD7fB4JzMW/52NNOTJdkkHlG8l/HebZqqwSqe3fWDOFPgr5622mQ+RxhzlF1 RgsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758411972; x=1759016772; 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=iGeKuk4BrkNqjyPcmCJtDVMLThv+SRKlDykMks3y9IJ25he++6/dGHFtxq1divsNH3 RMkwnHIlgzpYyNRw+Kj4ZU3uObMxYYnAzqUyJoeyJjx6qPTiozqIvWtId/xEHHxnHS1I qddRg3iaFCwnP0R/Qv2+ZLlZllzHYLIMqMhOFnsuPITFVeguosOru4x7iQe9itpRqL02 j0NDMeYhTGsZWqyxVr/imNMna3VuxnfVGL9Kq0+UiWOEhrtRRubhnuoIc2E5aBnbcUv0 fjXtBlEps9VwiwDuXMiKQqGe9fBisdFOzjqFNDRtkST2pXttoRy+2O6o9D/gNJo9uGdl EMDQ== X-Gm-Message-State: AOJu0YxtUHZc96RgUHn12aWzlJ2V0Vdb63LyoiemfQu8XohT0PqVtID4 9Q4piAo7vvM+0fKdlfkxX7OVympI2PwGHLkGkqjgpp8jGn6v6bFGOVJb X-Gm-Gg: ASbGnctAz81Jh//7hwIgXQCD9XRarIt7p0RG4Vf6uUfv4AEsDsjCfkmilyTdE4hzt1Y eYQAU9VWW2wIy5Ljo9sgAojvhuOighYvY9wcXNwIouhb7e78aGZbH0feXpXmvwIyMSqsAgllraR Owx7eoPxmQZoJRxR6V+ABIRripvOCNyYIG2/seNdSp4HpPMzn9TJjCTeqofSKVCXDgsKI8+qtKX JeOc+GC/oeFMZN2XafPJaL9ZSSvh7b8ZHTeuej++2XmRDfjfoqgWzx5Yig3XN4d/ZfhyiQKga9C iaf2GIdliAw+IaFpK7m2/NCc+jtlrU2qNEaBZCpSKnJltcnxRVwrgd2SYZU6/2TW676Gh44TYA1 sKrth+JFMNLngylmgzfeoDOylEeSlEHN1QVZhPJnIHujyayLcIR74 X-Google-Smtp-Source: AGHT+IH0zRGTf7Y2yLFq8KXzRxFRBLq4OIbAAJKAo0EESDe7a/kjYf/jOBYV21HDsewjo8FxWQmdTA== X-Received: by 2002:a05:600c:3114:b0:458:a559:a693 with SMTP id 5b1f17b1804b1-467ead6871cmr63453685e9.18.1758411972532; Sat, 20 Sep 2025 16:46:12 -0700 (PDT) From: Filip Hejsek Date: Sun, 21 Sep 2025 01:45:35 +0200 Subject: [PATCH RFC v5 05/12] main-loop: change the handling of SIGWINCH MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250921-console-resize-v5-5-89e3c6727060@gmail.com> References: <20250921-console-resize-v5-0-89e3c6727060@gmail.com> In-Reply-To: <20250921-console-resize-v5-0-89e3c6727060@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , Szymon Lukasz , Filip Hejsek X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1758411962; l=3415; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=x7H0XeeMERCwGAq1s4DtG6vInlpV+u3ZG4ViaEkuoc8=; b=S3znN99YbliXaObW5hKA8sH6Fgow5U9eWJSmH1m9Cp+aPdkgo4PiEhOLMZj3s6WBG1RbqFBni x9v20Ipfl2AA7s3rQtPT9cxMA2WD668nFF69fcmzQqcRuq7vOgMM1Uu 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: 1758412051459116600 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 Reviewed-by: Daniel P. Berrang=C3=A9 --- 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 15:29:10 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=1758412111; cv=none; d=zohomail.com; s=zohoarc; b=d+Uo68rmYJG21vL5nmNeW/NxsAEbwC86RrNg3LHb9ldXM3/Mf/+j4GnPLmqKHZCRVEXzgqua1H7UcerfMYD/FZu916WoW7qFKKVG8WC455hKSuwbstmpRaLY9PBqdiy1VCCYuWIFGM8WMYcIyy//N8/H5J93XEBZGN/Vzx516VM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758412111; 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=HYx7pMoLMlA55eAoyUpvv6FTZmSkAyUPk75Kdc+JD+M=; b=KGAxlcGMZsCh9A32xU/G/i4oKXAjaZahx/gU+FOxlXBYGwrT6fTG4vHJy9gxzK9fLsy24ESB225vRlu6xZPghUB9WEIT3Dp8HDIdBf4MLrePbgTOUxQ4wL4oQdBiqqcxpPgKB3SWSbUupn3Z7ARLzMCcliZGSqZh3n2KJ8nWagY= 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 1758412111301833.0285714028679; Sat, 20 Sep 2025 16:48:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v07Hf-0004zx-Cl; Sat, 20 Sep 2025 19:46:27 -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 1v07HW-0004e6-Uj for qemu-devel@nongnu.org; Sat, 20 Sep 2025 19:46:19 -0400 Received: from mail-wr1-x435.google.com ([2a00:1450:4864:20::435]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v07HT-0006fn-EB for qemu-devel@nongnu.org; Sat, 20 Sep 2025 19:46:17 -0400 Received: by mail-wr1-x435.google.com with SMTP id ffacd0b85a97d-3fa528f127fso110153f8f.1 for ; Sat, 20 Sep 2025 16:46:15 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-3f0e28c83d6sm7956363f8f.56.2025.09.20.16.46.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Sep 2025 16:46:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758411974; x=1759016774; 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=HYx7pMoLMlA55eAoyUpvv6FTZmSkAyUPk75Kdc+JD+M=; b=ipltAab5kBo4VDABpIUVJEutnIVIiRSb1Bo0ippQGb8e2ODryUlAa+6FMSlwV3+H34 6uVb/LPfGv101PptELFiwqmDGz05katpjL27DF9pDc0/7/Z2eQqQ0RBVm6VDDPE9RrWQ LR8ZHaDcly2+ZW0S8sEEyVu/ErjD4Mgbn5EVPjcOVMNkKwqdRSDZAm3DjtI7c/zC3+ww lX3WlsIoVkxMZFMhLpGjF3kDBD9AeqsGbEXaUZvmexzfC7iMII/xp/CkMgTlCnrl33Um 6C3vAgjdZ58himeJ5T7NAOPdQkc7S0+OgUlKq7ATgnvL4o6m3Yt8pN0pa9bN7blSE7xW mxXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758411974; x=1759016774; 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=HYx7pMoLMlA55eAoyUpvv6FTZmSkAyUPk75Kdc+JD+M=; b=PoPvwiVmT76nqAjCRFnRaGnViI81GN9L8+B2r8SrNjLUOzfhD0T9S5+cvV8h1mlLUE 8Ebgg+0j/s0SrGVmsrr9emFZRFi1+8/YCwzMmjCrvfxtP1DZvSCFUxMFY3uRCiizpt/J RidsThHRB6l2QRRLV7OjmfETlNHXs13qzRhw9fPjTq/2YoZkbiEDGdbnvBnEXP5y49+d U1owu8sZgQv/2lFDMLfW9kSCDqvRiNETJQHGQqsRfBRvDynqLKqviIJ2px71AmLQsxPC d0CnucTEW4eF+A5nJauEfvmhrfY9i8Miffnnjom7k6PhmKkkLVRdR00fKOvTx8JQ55RR D4cg== X-Gm-Message-State: AOJu0YyVT4kBGJckopwLEHq52hiX4gvdWNZgNlKGCVSG96EQMCN+BEqQ XR5949ZWyh6brs4q3EUxEg20D5FdrFTJpjEmpiJvCaX1NFsv1aU7kajQ X-Gm-Gg: ASbGncuYIx7TFtdkU6JCjYKMnxSRmV74tPEB7DByKVAqO/GYKX6uRcoathJHPQs9Zqk aBhSbktxdBQoknTlla+RBduB68SP82MWvdM9OaWd/hdsEVk13cpOtd1d6xtVIdeLQ57kzzJQugb Bp/UXV18/EOW86BbbbaGNeFXt/h5ywydqR1iPsGRgHrSjnxKByjOxa/varNwDEgoeDy+BWKypnO isf1XMQQwrEITK0c/BvmnuqtNjX+v2LiwsTnd792Ty2Wa9ro5mdzwgXjxtIPC4gEFUrw7LuI/tZ sbJoxqzVY6SdbqmVhLmis8yNZ+jLJ1EYokI3HwuYy8To2MANMfXhGfufEXDMNep6PTuDjDvmpRt jXAKwpw1X0jyiUoHZ0xaBX28Ybna2sGtacgiH7KrVxfG3Z0EnOXrP X-Google-Smtp-Source: AGHT+IGPN4r096oi637NfyZhf47t4mGi0x+7iHiXoyRm6ajNwJPkPpCEkGY7RArCZJqr5zUqE+jJZg== X-Received: by 2002:a05:6000:420d:b0:3e9:d9bd:504f with SMTP id ffacd0b85a97d-3ee1acd872cmr9166383f8f.21.1758411973716; Sat, 20 Sep 2025 16:46:13 -0700 (PDT) From: Filip Hejsek Date: Sun, 21 Sep 2025 01:45:36 +0200 Subject: [PATCH RFC v5 06/12] char-stdio: add support for the terminal size MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250921-console-resize-v5-6-89e3c6727060@gmail.com> References: <20250921-console-resize-v5-0-89e3c6727060@gmail.com> In-Reply-To: <20250921-console-resize-v5-0-89e3c6727060@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , Szymon Lukasz , Filip Hejsek X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1758411962; l=2562; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=V63fftPmCKW7OIY7EbGz9LcdIQD/m0AHLknnEXYwd4g=; b=eSEs/mTzvYQHHmv7A6IM68Xu+N/P5wwB7eAsjpJXFkUmdteOu+Om8kOWKKOi2dgnfeO2XKDC/ n+qZgHSBnxYAbNWJKCFTbnwXdkg52cJ/zJlhUYI6wn1a+WqXJ8XKTao 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::435; envelope-from=filip.hejsek@gmail.com; helo=mail-wr1-x435.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: 1758412111622116600 From: Szymon Lukasz Update the terminal size upon SIGWINCH delivery. Signed-off-by: Szymon Lukasz [Filip: use DECLARE_INSTANCE_CHECKER] Signed-off-by: Filip Hejsek Reviewed-by: Daniel P. Berrang=C3=A9 --- 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 15:29:10 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=1758412146; cv=none; d=zohomail.com; s=zohoarc; b=XzXPtl1YENv6OsUbklXZDZQnjSrgB0mmwlt7OSZ9/FO70guTOpOwE7paxh+GvbkdjtFBUz54nj/DNI/PMbvpFvZCf1gNUghRGHsIGYulCSbVRZztlTKzWC4WHkJFEouHDiZto33lP4H9rSZVZtHhfMizj80Q7oBL/JHX59q9apE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758412146; 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=pWUMTCvtPd60N3pCgp0ThXAAih3AgIHpUnUZqc/4qJ8=; b=GMZT0fj+c0n2wKQhFEwLacSbEp+WOdyvjnPHOYMMziuHYfF/VoQjvSe8GFP1/snvIeSWd1LPNNZqEqqa1gPi5Ymh1uPm1F4MWTOOQv+QC0ArbJwizM80LmcDBQLe6GWJelhvpqOGDiKEjJ3tIM8AbMsg9EPP+UZ209g+zBPRudo= 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 175841214626419.69150328726971; Sat, 20 Sep 2025 16:49:06 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v07Hj-00050M-AI; Sat, 20 Sep 2025 19:46:31 -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 1v07Hb-0004z1-QC for qemu-devel@nongnu.org; Sat, 20 Sep 2025 19:46:24 -0400 Received: from mail-wm1-x32a.google.com ([2a00:1450:4864:20::32a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v07HV-0006g3-F3 for qemu-devel@nongnu.org; Sat, 20 Sep 2025 19:46:19 -0400 Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-45f2acb5f42so25328715e9.1 for ; Sat, 20 Sep 2025 16:46:16 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-464f64ad1b0sm160458735e9.21.2025.09.20.16.46.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Sep 2025 16:46:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758411975; x=1759016775; 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=pWUMTCvtPd60N3pCgp0ThXAAih3AgIHpUnUZqc/4qJ8=; b=GoBRkGnnRcF51Oz64dhgIsEsKZx5NBa+hywgQGlEm+ZEbq/Yy2WmtwpoqO2ZGS57vi y9bmHa/axMZeZ6C1xswDiEzbvs6OHGK4WEcii+zbpa9uyMae767F+oevVJ1bjWnZTqqZ Vi/qhdtisSqWR38KwmjlEfJYX4hPGdea+n0kZC+1ZdmSgBb+WB6+xo7EmGpSitbjS7HY Cay51vWboHBRTRx7CG2cPOKhpr6a+cNiRuvbQsX5GC4zaTnaXojy3+7Q3jts+G9Ow9p/ 7adi9UqE5Rnj8PzSPEvrajN8JsiHyzeB3pfhTmxAqiWTWOhHPCi/FtTozdCF4eE9czxe OtDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758411975; x=1759016775; 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=pWUMTCvtPd60N3pCgp0ThXAAih3AgIHpUnUZqc/4qJ8=; b=NfF87fntNMIk/nytljBEfTC+QimZP98TrnwyixZvsXlo7Dtjw9WI71AMjs98lHHxgb TbjzcPBVahoxhg5rYcnH3c1lJR83ERLu63h5ayInRJeqPzdPShxofg516BlLIJeHaNx/ wK9INdtrst+yXz2adSdZFFb0YvDCXwrtC8quMq08DcWmNz8SkL4r48rBD2wOQIW3xFj8 rrZofMmHo36AXojZ74gbCLcOQvBIhz/3uZ+mKdH2FgRoaezGFuzIxRN5F6iZBS5//Hwp 81F8eOqGlr+LmUH0ZT2/RKAyudrY4Ap38zGjg7iJ4DNGeB9jh2gPp3K+kN9FJcrZrDNL Ht4Q== X-Gm-Message-State: AOJu0YwW7L+hKPOC4KVSbX5V/NC5rpXRB41iVfm9hlabPzYbj+gbDRgo M+k50i425qQ2a4CPkb401NaA8CPKqGUqZy2XorHFWIi/WvU36KN5wH1z X-Gm-Gg: ASbGncsyeTRU79fe8zJXrymed8F7mtohtLKJ30X8kCZZF5tVKYvUffRZKCuJR/27tKv czFQ4rTASWmMvcGyTvAZGKFEUtiPr9Zg2iX1TM6Q/5dwYPrIPamUoTsiuUWZAXCgje27IdnatZv 0HOkCeaLa3CP2bkpD2p88Zq5dmueAZ1UssNCDyJRupI3nyxQNNBhWlB0dNFMH12OSJx9DLHQiJt szRUDdJn2dLmsCi2IA5Jq82+q44AzdE2QplbMFfyIwics+sojzlrlvV2VeX3rk8XVh5jGgqY2PH 2i0raDSq8OmGC/74h8gDwO1KNKKdotBCWY/b2mFMetL0TXKluABi+Zqh6qC7Qx+Ca68bV7p/5Df KkeMc8Tf4rIJsniO6NjW476SE4wvfDaoK4DNfMFW6G+v6I4aU/YT5 X-Google-Smtp-Source: AGHT+IH7ls+umpPTMUgq25wCbX6JjWVkPjuyFKdxQBhKRpjKg8ZGc+BQyYafskauwfXfDUWLEXXUkA== X-Received: by 2002:a05:600c:3b1e:b0:45d:dc6c:9e30 with SMTP id 5b1f17b1804b1-467aba7b0f2mr90961975e9.14.1758411974746; Sat, 20 Sep 2025 16:46:14 -0700 (PDT) From: Filip Hejsek Date: Sun, 21 Sep 2025 01:45:37 +0200 Subject: [PATCH RFC v5 07/12] qmp: add chardev-window-size-changed command MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250921-console-resize-v5-7-89e3c6727060@gmail.com> References: <20250921-console-resize-v5-0-89e3c6727060@gmail.com> In-Reply-To: <20250921-console-resize-v5-0-89e3c6727060@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , Szymon Lukasz , Filip Hejsek X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1758411962; l=2620; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=ISiOK22HKC8mI4/1MK6o39Mb6am1xM/7UJSCuA6f7m0=; b=Y3BwtPaXiWZ8kTIkhCIQ4oFJbO/on/nSX2O389xLlArGhsKoN5tTKrykTwAopMHXg54vTxbFV lYA2v+nW1xtBPVDwLSJ9DPwT6GghLBO7cFrUDGZpUlonAfOCq27+pCw 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::32a; envelope-from=filip.hejsek@gmail.com; helo=mail-wm1-x32a.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: 1758412148080116600 From: Szymon Lukasz The managment software can use this command to notify QEMU about the size of the terminal connected to a chardev, QEMU can then forward this information to the guest if the chardev is connected to a virtio console device. Signed-off-by: Szymon Lukasz Suggested-by: Daniel P. Berrang=C3=A9 [Filip: rename command, change documentation] Signed-off-by: Filip Hejsek Acked-by: Markus Armbruster Reviewed-by: Daniel P. Berrang=C3=A9 --- chardev/char.c | 14 ++++++++++++++ qapi/char.json | 30 ++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/chardev/char.c b/chardev/char.c index b45d79cb9b57643827eb7479257fdda2cf6b0434..f3aad545afe3d325aac388015b3= d5517c2e48f0d 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_window_size_changed(const char *id, uint16_t cols, + uint16_t rows, Error **errp) +{ + Chardev *chr; + + chr =3D qemu_chr_find(id); + if (chr =3D=3D NULL) { + error_setg(errp, "Chardev '%s' not found", id); + return; + } + + qemu_chr_resize(chr, cols, rows); +} + /* * Add a timeout callback for the chardev (in milliseconds), return * the GSource object created. Please use this to add timeout hook for diff --git a/qapi/char.json b/qapi/char.json index f0a53f742c8bee24c377551803a864fd36ac78cf..93b0d239276077d808af2e5479d= 539728377a99f 100644 --- a/qapi/char.json +++ b/qapi/char.json @@ -874,6 +874,36 @@ { 'command': 'chardev-send-break', 'data': { 'id': 'str' } } =20 +## +# @chardev-window-size-changed: +# +# Notifies a chardev about the current size of the terminal connected +# to this chardev. The information will be forwarded to the guest if +# the chardev is connected to a virtio console device. +# +# The initial size is 0x0, which should be interpreted as an unknown size. +# +# Some backends detect the terminal size automatically, in which case +# the size may unpredictably revert to the detected one at any time. +# +# @id: the chardev's ID, must exist +# +# @cols: the number of columns +# +# @rows: the number of rows +# +# Since: 10.2 +# +# .. qmp-example:: +# +# -> { "execute": "chardev-window-size-changed", "arguments": { "id": = "foo", "cols": 80, "rows": 24 } } +# <- { "return": {} } +## +{ 'command': 'chardev-window-size-changed', + 'data': { 'id': 'str', + 'cols': 'uint16', + 'rows': 'uint16' } } + ## # @VSERPORT_CHANGE: # --=20 2.51.0 From nobody Sun Sep 28 15:29:10 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=1758412060; cv=none; d=zohomail.com; s=zohoarc; b=O0WjOUeVv+5MW88ouMr/CkDDBF/uqfTQwNUb6rD2XeEKUt80ldj5aTATlglY/ZoW4BfHTzUhbLD76NPgGVXyU28HKJW8IzMf0Hzm5GedN7FmuHKzrqQ/ssPfX8MrFr3n1/6vF5oXj71OgO0hPFoDUW2C8Z3hgvqo1R/ZGXFEG4E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758412060; 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=owAQKcv5Ed6RgR5sBkiaGovxd3NJfl9ADFmjYXOuFLI=; b=HgpLRwBAM1R8+pJst+KCKyYkMF6j1oZUgpSxZzrMdgCGd9KrD/sHKPHjdG2GdmSE+95qjms8gzABzP74JvWU5aiLwnzTFxNObpLE+tObmnllhlhsIW5/uOa+kHq0Irxv2eLf9zgbQdB7R14e0Hvk8BvU2lu5VL11iujWqMF8Vjc= 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 1758412060056990.4054632627358; Sat, 20 Sep 2025 16:47:40 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v07Hk-00050y-3V; Sat, 20 Sep 2025 19:46:32 -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 1v07Hb-0004z0-Px for qemu-devel@nongnu.org; Sat, 20 Sep 2025 19:46:24 -0400 Received: from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v07HW-0006gG-KD for qemu-devel@nongnu.org; Sat, 20 Sep 2025 19:46:20 -0400 Received: by mail-wr1-x42d.google.com with SMTP id ffacd0b85a97d-3ece0e4c5faso3935950f8f.1 for ; Sat, 20 Sep 2025 16:46:17 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-3ee0fc00a92sm13832486f8f.63.2025.09.20.16.46.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Sep 2025 16:46:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758411976; x=1759016776; 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=owAQKcv5Ed6RgR5sBkiaGovxd3NJfl9ADFmjYXOuFLI=; b=e4YcJ9oUjz/rhg3mDkDtk3Ry+ywaDC50/F9tz5fDhSCD2LpRcyL/yQ15Ka2291+LKl uK59S1+piXI5XLcNtxMpiU8/0mQrv+vZ1FSRf72jcqSn4I13ncOkCzO7JH7EKnIbp8ZF nAOWapQJ7bo/FH7XGQnNErVz4kn6Ga1ccO8Tr9Ji4cDM6tX2Sg4yE9roqVbIO9V8ydH0 q2840YhgxEecrzaajdtfIICT9QmZoHGAKoMv4iVKHR2Dq1HghWTd+kqvF59Dtz0EIlDR 05Pu6AZ7USCgGxH4Kvklqz7eu+Sf0rgNCDbt8TH0Jm51qoJYB0P1Lm6W2ZEDA2306g4U fuJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758411976; x=1759016776; 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=owAQKcv5Ed6RgR5sBkiaGovxd3NJfl9ADFmjYXOuFLI=; b=hcWQ0y+jl6DPBL1SQ+bcPvz6EQTTavDu7uFRjzRkQOUDQq61bYFciu9FKap2Lmogbo 9B6HhDUP8OLo0nGu9dvlP49iv8vyIV7DLFwVowBExZvF16YFDiMpfqN/N3DHohtJJxIy lRvaMU/P174jvhVFHVxbQWeezntHawZGyGe7DVY6gm77z4lA/ovBkysKLJw0tOEt8grF bUlpBLPi7kcP21FAp7p/JrZqv5QIAIUfBBqRQwuojf1v6jAM1ObLJpNG2QjbLaQ/Nlai 3jHyoWyMhp+5CzUfyIJdrWfmwveuNIR2Vwlg9zKHffqgZG9eiNW8HXmOcPh0DHBPa9SP ZzvA== X-Gm-Message-State: AOJu0Yzc5juyoz1vhVldrPNlgzQ+Lgej2oHvIyy3R15yBNZfkS8rRspD pjhIgQZdnSOGTKp82tM0KS165+qLxJoUcA4Wh40R1frvOukvNjkPLwO+ X-Gm-Gg: ASbGncv6JGM6vyrrHJWD4kPQNpBNhkhSRX0W5Sy78RqXkCDDxZMMEW4c49VCrbZic+i KIftFTK81eruvkYSd5f/2y7I57xaSpXjVD/FbOx5AfnO+nECZQen3cds1/jMXg6mrQ5IvRk0IyV GA5GVW52Ow/fq2KjsHRYl8xnxoW/axndjIEYHA9kpnLqFgVsR3vPpDBVFBOX8Cf+txCJwMoW4xA 3jktWrIfVcRMkrckmCwa0pyIdayPp0OCv6GPx0zsK69pOfk9eZE+K+DmLYVycbewx5SoavQr/+I LHcX34mvrWERIVombo52pN7gTlAqQ7XxBnvYfrbTZqEH0BiU9AOzjq9vZVqfzQ5PealDb2zsnqM Ag5S/EQaOFIGzKegU+pnsErJyJlbXf/2UbCZoAz+ODmQ2ftko1b5ZEjyi97nxsBk= X-Google-Smtp-Source: AGHT+IG9dd9hiXamlT6XfPnOPt0kvT6qLL7KhOaFydDvu3VdR5z73Df255k5ONUZZ+0HZpWmuAW43g== X-Received: by 2002:a05:6000:2403:b0:3ee:1118:df7d with SMTP id ffacd0b85a97d-3ee87aca5b6mr6413258f8f.47.1758411975862; Sat, 20 Sep 2025 16:46:15 -0700 (PDT) From: Filip Hejsek Date: Sun, 21 Sep 2025 01:45:38 +0200 Subject: [PATCH RFC v5 08/12] virtio-serial-bus: add terminal resize messages MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250921-console-resize-v5-8-89e3c6727060@gmail.com> References: <20250921-console-resize-v5-0-89e3c6727060@gmail.com> In-Reply-To: <20250921-console-resize-v5-0-89e3c6727060@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , Szymon Lukasz , Filip Hejsek X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1758411962; l=6374; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=PCOI+I4SOE5dgkaa1pmUzz/E8GMzwCq7zEhUfTtRutY=; b=uk9IiXf6EIORc2EHp9QspsJuG8Ao+aDVtStmB4ARc/WnQrQq7WHlobmMnetLHgx8NRFvDIYAw ZZp/H9W3MwNDhrk2bQU2fKzY7nxpmiS5yLMT/AtTysDSlnGqBIutKbH 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::42d; envelope-from=filip.hejsek@gmail.com; helo=mail-wr1-x42d.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: 1758412061539116600 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 [Filip: swap rows/cols, console-size affects multiport too, size config always updated, use use_multiport, move trace call] Signed-off-by: Filip Hejsek --- hw/char/trace-events | 1 + hw/char/virtio-serial-bus.c | 51 +++++++++++++++++++++++++++++++++++= ++-- hw/core/machine.c | 4 ++- include/hw/virtio/virtio-serial.h | 5 ++++ 4 files changed, 58 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..30e3ec73a1733449b2505f231a3= d2b3516ae4b4e 100644 --- a/hw/char/virtio-serial-bus.c +++ b/hw/char/virtio-serial-bus.c @@ -260,6 +260,51 @@ 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); + + if (!virtio_has_feature(vser->host_features, VIRTIO_CONSOLE_F_SIZE)) { + return; + } + + trace_virtio_serial_send_console_resize(port->id, cols, rows); + + if (port->id =3D=3D 0) { + vser->port0_cols =3D cols; + vser->port0_rows =3D rows; + if (!use_multiport(vser) && + virtio_vdev_has_feature(vdev, VIRTIO_CONSOLE_F_SIZE)) { + virtio_notify_config(vdev); + } + } + + if (use_multiport(vser)) { + struct { + struct virtio_console_control control; + struct virtio_console_resize resize; + } buffer; + + virtio_stl_p(vdev, &buffer.control.id, port->id); + virtio_stw_p(vdev, &buffer.control.event, VIRTIO_CONSOLE_RESIZE); + virtio_stw_p(vdev, &buffer.resize.cols, cols); + virtio_stw_p(vdev, &buffer.resize.rows, rows); + + send_control_msg(vser, &buffer, sizeof(buffer)); + } +} + /* Functions for use inside qemu to open and read from/write to ports */ int virtio_serial_open(VirtIOSerialPort *port) { @@ -571,8 +616,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 +1203,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 15:29:10 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=1758412063; cv=none; d=zohomail.com; s=zohoarc; b=Dqcwwd9tJiuZxucM6fun7qR8uZjm8lDHp077jhW0g1R/BYcNHwKhVvs9Si3zD3KFlZHlTRFwVGTTrwnDdR1nIisY99g1qiYWUQy5aOChXxn1poOG2Gvwfw+kf1/YlmZ+ug63Gd3V29I7fkZkwCFq/5bMXp1hjVvp2DnrmtMLDBU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758412063; 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=5RfNA/UI6597mJEnJ8Hzb+uK6nQOg41kNO772K4Zofc=; b=L6yLRrTZk7fIh+1wuc8AzUBkvZPH2bozb70eAfQ+OpUmVYEu5g2FCT/ajeTDt67WEIIlBqulKUFwGA4dXlGD0uN5s1ogT91R4DuoADFE0RmViuXyF3aqC5s+bAQPxDnrHGJc7VamKo1t+mG7qTShhXnOzYQNzfDSroz7fCw9U/0= 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 1758412063472509.69750519656156; Sat, 20 Sep 2025 16:47:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v07Hk-00051c-NG; Sat, 20 Sep 2025 19:46:32 -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 1v07Hb-0004z2-QC for qemu-devel@nongnu.org; Sat, 20 Sep 2025 19:46:24 -0400 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v07HW-0006gO-Mo for qemu-devel@nongnu.org; Sat, 20 Sep 2025 19:46:21 -0400 Received: by mail-wr1-x42c.google.com with SMTP id ffacd0b85a97d-3ee64bc6b90so1312304f8f.0 for ; Sat, 20 Sep 2025 16:46:18 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-3ee073f3d73sm13523246f8f.8.2025.09.20.16.46.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Sep 2025 16:46:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758411977; x=1759016777; 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=5RfNA/UI6597mJEnJ8Hzb+uK6nQOg41kNO772K4Zofc=; b=FyxoBdeJ1kKg+/Y7qElTkOKk7s7y3AFM/+vVn1K1SyEUk0vqpJftk6kz9AC+wdys6c Xgg2+b5W6aIYwXBmcLtIxNfHQt2FlXZxJMF+RidVrUefk7hxBh6Sv3a+LLfrmBW/zkfD KHHMoCYwI2iaUNdRbPn1Ol9jaH/0iwTNZvT6mqUnDHqPJMi6T6lGwQISDW/0jvBj7B2Q DbdgcFiB1uw7QXkWpV4ZSnQbDRIzM8OrdHO/o8gEC6scNd/Ax/cM/pHjfynIC3Vv8Sfp /HXmUJ4cfHvgS3D8DcWiGXos5+hTuv7plsm5rHA7wJrhm3WpLqClNp7EX6VTaK8wFXl9 QqkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758411977; x=1759016777; 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=5RfNA/UI6597mJEnJ8Hzb+uK6nQOg41kNO772K4Zofc=; b=PJJ2ZQ6L+FazLGl6Vb8W2+yAoLsLZqX9zXCam/kKovX5GPogWHgiG7uJ9K8GhrsbVS G8JqeUPzyqjSNyxWkdXV36Uvn8vHdZmCsjgAHrWy1peoPkhRfuvFwOmFg+hYm59vHuVU 7tT3NN7qhQ8YZ6JuGWRfgMAY3vGW9QB3vjeHuzYSif6HKsIRCuK1lI80fhJcPVeCodMX J1naZACONKykuO4hfu9U4p6LPT5esnUlEw2NRzMm657snQ6P17ttTFaYqU0C3nkLK5Fa PCjMZIum6W4a76cjBacOraBHkgIz9Ab8r/Eud7jFar3s6Vsu9+0N5w64nikpAuEPjuCx BOBg== X-Gm-Message-State: AOJu0YyqzH1FHOow85baDSVKlS/00pCMZevaq/irbhXw+syDVqzgb6p6 8rcJ/iMIsUoglZZJvnWNkeSp3eP7TqUM1Td4HBl4uc5hEQAIgkl0zm9X X-Gm-Gg: ASbGnct2RzNrDHR5lwTots2pzlrLy0wJkUOibmbzAIgwTzFyS0u3TWYzt58olsqj7ui bg6oYe77t+C04rsRjaBZb9sYTLlVw/DcvErX73r6dYUbxNIP+OkwSOtmRuzegSr4nhhsZK5NEjm /ZkNVIQH2vO/jYnZSFrskszRT0sEecZ+4LMJChvVBQGNWQ5htcW65BS0BJjgmqEKaNeWFAXkTRk 2CFsve0r9t2vC+60k2W56oK2+RfYyErnr/FK48REHhKzUDnDODC2otyeeW7dD7Qak1hPf6I7Db7 /cCgVeGlBAjSduur5mLZYyVaI/nvJM3kiQCuJwYQR3Svo3Co6DVCNJwtiQMzR8NCGIDW/z5R4YG 2+sRLKWeeeYmICFsqKeHQ6OG9VTB6oDFbAkmdIRISIVGxFh12/rBb X-Google-Smtp-Source: AGHT+IEg4Fy1OBZANbhoyldjahl+nTt08RPbUe98GGBCX+f9/a+qqu0wfFlbbY0lEovxM1fl837oIg== X-Received: by 2002:a05:6000:18a8:b0:3e8:e7a6:e5a9 with SMTP id ffacd0b85a97d-3ee85769a82mr7196935f8f.48.1758411976948; Sat, 20 Sep 2025 16:46:16 -0700 (PDT) From: Filip Hejsek Date: Sun, 21 Sep 2025 01:45:39 +0200 Subject: [PATCH RFC v5 09/12] virtio-console: notify the guest about terminal resizes MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250921-console-resize-v5-9-89e3c6727060@gmail.com> References: <20250921-console-resize-v5-0-89e3c6727060@gmail.com> In-Reply-To: <20250921-console-resize-v5-0-89e3c6727060@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , Szymon Lukasz , Filip Hejsek X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1758411962; l=4792; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=Nk20ENwwWckhS03qIIV6kRhTJeXoM/V/o9wpxze5Xow=; b=mpPFEQQu1AwEPkyN6AwBqep9IiNDQ1LWGKTg/Lhe+s3qV2X7XA3LJ6v5Fak3iSLj/oWbVpbbK eF8mqlsUW3ADInZhODHXM6WfIK9oyu5wqbO5U1mgSk6FYrG5mUSkZED 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::42c; envelope-from=filip.hejsek@gmail.com; helo=mail-wr1-x42c.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: 1758412065302116600 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 Reviewed-by: Daniel P. Berrang=C3=A9 --- 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 15:29:10 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=1758412027; cv=none; d=zohomail.com; s=zohoarc; b=EbPZ6CX6BItgCgaZribCgAJDTiuKYI/3D0edSmLxqLLSqEgWjEUA95RrS4Tw/CJE7DdZF52IuqTmfTvok0D8ngS/nixcOvjQ/AyqSunsPkTYsTxtoKtF8wom8t8jmiCIZ0D5AQ6LypyCb1KCMecV8eO2XqiIFiSYy4AfqN8WBME= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758412027; 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=Z8rsKM5rsvNwRW7m6EX6KUjy9obAcFXVNM0RZQRPnOI=; b=PgI5e4UJKtPFGPL0wRoSQF4P08lSRAeD0uFOakSy1JTBgxevtmZ3R5LCmSfUpz5vfBCC4xGJcFMqkKFdRFgftFQZpQF2j/MUNfKkLChqgTOI8ntNuTdKHNFiTfw5GjydXU8vc0QZ5pu0JWtJxKWgAkFoit3pLg0EqBaO7v417iQ= 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 1758412027001419.884697635403; Sat, 20 Sep 2025 16:47:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v07Hr-00052f-Lh; Sat, 20 Sep 2025 19:46: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 1v07Hd-0004zU-9N for qemu-devel@nongnu.org; Sat, 20 Sep 2025 19:46:26 -0400 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v07HX-0006gi-KG for qemu-devel@nongnu.org; Sat, 20 Sep 2025 19:46:24 -0400 Received: by mail-wr1-x429.google.com with SMTP id ffacd0b85a97d-3f0ae439bc3so936210f8f.1 for ; Sat, 20 Sep 2025 16:46:19 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-45f3211e8c7sm105424825e9.3.2025.09.20.16.46.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Sep 2025 16:46:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758411978; x=1759016778; 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=Z8rsKM5rsvNwRW7m6EX6KUjy9obAcFXVNM0RZQRPnOI=; b=SOOHgNbeBMF/jroN5IF2BMN5zMxjU2oZktbLZyYqB5AuMM0lqg4G1DjsJDiKD+fQnV QJTG0zuHB0K5M3B89bgFRS6Zq4m8GKjyJ6B5jYN4rUezS0VWpfYWDs4y/FfS4sRZR8+9 P5ZZEk2bbWlW23mY3KlC8dKB74C/lKvrcTDRrz0gBg1GOv/LmpykMAvp6SNCSaFcwN6E cBvDN1wXfHIEzGszM38xCrW3TJAJ/Tllu+OQ/Fg7yDiSn0tAxLc9Y93GxVccHSgCjAEc uiG/uq5E+q/i6zAuLeG1/sM0oJSn3DA/ZSeB6ilrJgtOzPJAk5MFHmaND4+XxgM/W0kG 4w2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758411978; x=1759016778; 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=Z8rsKM5rsvNwRW7m6EX6KUjy9obAcFXVNM0RZQRPnOI=; b=fjf1NB914e4G0YnQK7+fbZzkm0bwLpYfFWCIJiNB6zV8DFGV7VzSpc2CY4PXe5H4T9 3pAzqB5howjJ99E6iCRtVIhHlqI12l1bSqsEZS3RIGDQTfgro0/7eKQ8Cd/D+gEdh7By NQupcTZa5A7MIAEn4Ebch6J/3/3Jq7yT5H42XNZHtG/3GKsB5QHThzPQMcw+EmFmz2g0 GE80H7GL4jn+x/rlZ4lAdXJz9FCN/6MTNMn7wrLNRUcFGZtqmA9aGsvQX/yE/wcdc06n X7SZ9wGo5qL4mMLf4XtLV6WbuA9gNs+kSiW4ilppRjUUTNA6MCVM/FdzMJv/vLfMc8jw j/jg== X-Gm-Message-State: AOJu0Yyof1gisPHUV2Dvo9Z1eiLI5tnhHzII5RwqLqjsLBwoT04GDsaJ nOZVwfP8FeOQC7BCZCpQr86jBqvPDuA2ALTdAts8+N2NXojkLNI3MuZ8 X-Gm-Gg: ASbGncu0d45pVEHFV+RyOM+r5X9QtemARfPf7cbRGLoMxoGkaeEdrfSDgneuowCx0fP hWWscSpM1+L59KHUA2UMboOv+iy+HGez1uCvXasBma2eRuDMwB+uhvKvkyciRObII08b9E6vSsn 0Gg8OZ4QYkSsHzvXc5FAavXHylNmLpHnNeJNjkYnholHPzS19CDJg3m3VRm0tZ9BVnCH32DTRsr PoHc2qNyRgliRsGzKhX3zAHlM4YNZ8uqSH2CiEfgKWS9utcvvCnYMWND7qMTlJvYP/yt5JTXnwP /GxChWKtW/XaT55NxXHm1Aw8QDLhIjITYkxDkuIlGKD2eJ3Lip0V1AHcwKTdo9251gp+EgAzfjZ v/foVAlfaOqlcPt8tcR8kq+z8n343/+0SweTjsQdZJVq6V7Ytb1mLIwsNWtUch/0= X-Google-Smtp-Source: AGHT+IFgpL37Jk5YPv+2tXXMimJxUDheXlf01zQYRoDP8re2nwt+a5HeoUyhhiCNxdhP5eaWw08DPQ== X-Received: by 2002:a05:6000:604:b0:3e3:dc04:7e1e with SMTP id ffacd0b85a97d-3ee7ccf623fmr7301661f8f.7.1758411978058; Sat, 20 Sep 2025 16:46:18 -0700 (PDT) From: Filip Hejsek Date: Sun, 21 Sep 2025 01:45:40 +0200 Subject: [PATCH RFC v5 10/12] char-win-stdio: add support for terminal size MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250921-console-resize-v5-10-89e3c6727060@gmail.com> References: <20250921-console-resize-v5-0-89e3c6727060@gmail.com> In-Reply-To: <20250921-console-resize-v5-0-89e3c6727060@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , Filip Hejsek X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1758411962; l=1846; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=RpmrNCBfhehDN2KMtvbOsM7e+VeevQ6dar8otPhjqkc=; b=pIhnB+u00U1PrullOsS5NEEVLFKNPZT2VD9JWRKOQb6PO/R6GfNtx2EWB5fcZYucWwVXqp/9Z 6UOod8SH9ZIAn6zVm+OH8f0Uqz07e8/DqTXZi7A4O21HxIA6R5+0TEA 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::429; envelope-from=filip.hejsek@gmail.com; helo=mail-wr1-x429.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: 1758412028772116600 Use GetConsoleScreenBufferInfo to obtain terminal size and set ENABLE_WINDOW_INPUT to receive resize notifications. Signed-off-by: Filip Hejsek Reviewed-by: Daniel P. Berrang=C3=A9 --- 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..0d33138d0dd83b582e959d21c3d= 991de52f8d3e4 100644 --- a/chardev/char-win-stdio.c +++ b/chardev/char-win-stdio.c @@ -44,6 +44,20 @@ typedef struct WinStdioChardev WinStdioChardev; DECLARE_INSTANCE_CHECKER(WinStdioChardev, WIN_STDIO_CHARDEV, TYPE_CHARDEV_WIN_STDIO) =20 +static void char_win_stdio_resize(Chardev *chr) +{ + HANDLE hStdOut =3D GetStdHandle(STD_OUTPUT_HANDLE); + CONSOLE_SCREEN_BUFFER_INFO ScreenBufferInfo; + + if (GetConsoleScreenBufferInfo(hStdOut, &ScreenBufferInfo)) { + uint16_t cols =3D ScreenBufferInfo.srWindow.Right + 1 + - ScreenBufferInfo.srWindow.Left; + uint16_t rows =3D ScreenBufferInfo.srWindow.Bottom + 1 + - ScreenBufferInfo.srWindow.Top; + qemu_chr_resize(chr, cols, rows); + } +} + static void win_stdio_wait_func(void *opaque) { Chardev *chr =3D CHARDEV(opaque); @@ -75,6 +89,9 @@ static void win_stdio_wait_func(void *opaque) } } } + if (buf[i].EventType =3D=3D WINDOW_BUFFER_SIZE_EVENT) { + char_win_stdio_resize(chr); + } } } =20 @@ -202,6 +219,8 @@ static void qemu_chr_open_stdio(Chardev *chr, } else { dwMode &=3D ~ENABLE_PROCESSED_INPUT; } + dwMode |=3D ENABLE_WINDOW_INPUT; + char_win_stdio_resize(chr); } =20 SetConsoleMode(stdio->hStdIn, dwMode); --=20 2.51.0 From nobody Sun Sep 28 15:29:10 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=1758412146; cv=none; d=zohomail.com; s=zohoarc; b=SLfXlVp2ubYMRh7WIkkc1P3pKOseFCKpC57tswyi9lZpyPNKCcT6K5WyZjcj6+B27YlJgWJcdVFjs7txEnDCy0rzBEH9kuHyDilEMe6PFi7NL2A1s115pkKO7TO/R/zKIOjhL0Gj8leLNPcBwMkTVFtt7ebHO0f6WQi+sEesZZc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758412146; 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=cmuAqUfviCGDVtMUO3Hf/bBLqX3OlMJ+/HoQ4xxcj5U=; b=j0xqm5oiHgY5ENPfgQUqlDdx+K04xLpSc6X0xuIO/q4c16dZX0S8XZkHAnUWLuTv1Sh+Eam+wRASu1SaTOEAMxaiZQawKUX6ie7PKIUmKoZKPCDEz18PMlPXvpv10hrBgTYACBJnUPzT7nHAX6vXSil/pRsYvy2kxRdwWXMT/CE= 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 1758412146494874.6989633007668; Sat, 20 Sep 2025 16:49:06 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v07Hn-00051h-D5; Sat, 20 Sep 2025 19:46:35 -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 1v07Hd-0004zT-9P for qemu-devel@nongnu.org; Sat, 20 Sep 2025 19:46:26 -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 1v07Hb-0006h0-IM for qemu-devel@nongnu.org; Sat, 20 Sep 2025 19:46:24 -0400 Received: by mail-wm1-x32d.google.com with SMTP id 5b1f17b1804b1-45f2b062b86so20163585e9.1 for ; Sat, 20 Sep 2025 16:46:20 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-45f3211e8c7sm105425045e9.3.2025.09.20.16.46.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Sep 2025 16:46:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758411979; x=1759016779; 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=cmuAqUfviCGDVtMUO3Hf/bBLqX3OlMJ+/HoQ4xxcj5U=; b=HQpivj94UyP+g3hDac/5FKAcOSX9Xyne1NbhOyiegEPyYJUtFBzijvlDrBu/1fcayI 7Uv4mH8H6/Sf9PAXUarYSrDtc2+JxEXE4O92sEQ+OCrM5GS8CCEYmWYoOiVqdJV7o4ug rPhc2yrDgVYZWYNZo/3l1APQlLnKWgyqN28TVDNSpdPP26qr8jrzTS7lB9wE1m4EZ3xs nZxyAVwBLi7Kw/BUyHzrOY+6K/7uAF1vzajm6BBy3/2P4Qv03j/Gdd3gZREAMQk8gROU Wrr7WzkXM50A8aX0rkDSzJhoJvmIiPCoLz9Y6pLkcZqAsvleolVwNB+7NDfoPSDu9S8w oTVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758411979; x=1759016779; 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=cmuAqUfviCGDVtMUO3Hf/bBLqX3OlMJ+/HoQ4xxcj5U=; b=W2EUGzIQhqMlqpsILx+dBECNpQ5NfV3NGLzAUrsQgyKntppzXLZuWXhTBz9lAcZRJc EdEzmmTwzAVyTiKMKhngiIh0FQ8kHlmN8ydqLM+/w3kOVdB6ylD9d5TYBtL/TRGr714j W3ZtA+dHML1uoMU4aRLjTDWMYedKdLUH6iXa2OdlZ3i+Dob087IPif4cAQI8B8gX+JPJ RtRz4Wmc649JcY9gUx+/bb6TcLNQJ9Vv3ME1DyECjt6UPICnU4RweAjgMyj0lVn+Bpi/ aGPjmJW70CZ8GHDt+YscRKXuAZ2SjR2brGtLkrUVzScfM/QAVlMni3tksj9tf6Di3cla HmdQ== X-Gm-Message-State: AOJu0Yz5UoNTwDeqSFv/yhro5Iz7vwgZQIxMR+tP9kiD1oFCy1OPOYqj v1InjT7quYuvjKGqUPK+R8GiUiKPLuYSA9Qoyj6CdJq+AZDU6IEDlCxa X-Gm-Gg: ASbGnctCL6MLm9uD9e/WdDy3OXzXnUfHmkp0MfCYcqJAvCeUXrPYIlsuhdczvRKudn1 Ic9Wq2UEBh9DSUIwbVtWjYGq8OAMOmKRjK5C+21BMQUxI21Hj+aqQAN8IgXgMXdfXLfHvL1PCCt UwkfDvcKOP1AhN3uZRMN6lJfv9uEKNr6eVYxZuP2WFhutMu9seFWU3bYTJuFtVzZGY7OrL1NKbM 0sjyDqAdOs7LA632Yh5XEViDemNaV/GcHSeS9x+buZW8uTxkIi8NY5W2PSKPd/51wPjL5d1DAGp zPVx5h8Y1XDy+iBR21rGZ9NKXOYRTLPdTQk7H1qcTZuV77UfMEyHCku8j5efYGlnXRL/YdEDmkN tAlxMlqE/645gF5VYqeF2bR7IjreAu2w7t4hOOh5If6oa+uZnJ60B X-Google-Smtp-Source: AGHT+IGSYa8cKhXmXd9SIwUWqvm1OVVDnmHKZmomTQcV/jFAH5QPQS0V/VzP+KAnmnkkp+qjsijdag== X-Received: by 2002:a05:600c:6305:b0:45f:29e4:92fc with SMTP id 5b1f17b1804b1-467f205a3f2mr73507515e9.20.1758411979230; Sat, 20 Sep 2025 16:46:19 -0700 (PDT) From: Filip Hejsek Date: Sun, 21 Sep 2025 01:45:41 +0200 Subject: [PATCH RFC v5 11/12] ui/console-vc: forward text console size to vc chardev MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250921-console-resize-v5-11-89e3c6727060@gmail.com> References: <20250921-console-resize-v5-0-89e3c6727060@gmail.com> In-Reply-To: <20250921-console-resize-v5-0-89e3c6727060@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , Filip Hejsek X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1758411962; l=989; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=zrGZ+VnQUGMTadVXf4F7llWgq/aUdT9O8UHj671Hmbg=; b=RjyGvtHLjfDkwCK91LMorIAaal0uAbmVYueERE9jsW9e4O7tA4wWAu5HWajqn1hn+yyBeeT7C U0unkAN1gDAAvh+MOv03cVE4BEzcjLEUibVD1yI/PqkTuFIhQtz1LuV 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, 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: 1758412148035116600 Update the vc chardev size when the size of a text console is recomputed. NOTE: It seems wrong that the dpy_text_resize callback is not called when the size is recomputed. I believe this is a bug, although it doesn't matter much because the only user of the callback is ui/ncurses and it only uses the size of fixed consoles. Signed-off-by: Filip Hejsek Reviewed-by: Daniel P. Berrang=C3=A9 --- ui/console-vc.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ui/console-vc.c b/ui/console-vc.c index 830842064d6982ee4e7882e50e5c3ef9b1e18f59..a3a90440d52754b02961e29063d= da91c9f4097f2 100644 --- a/ui/console-vc.c +++ b/ui/console-vc.c @@ -414,6 +414,9 @@ static void text_console_resize(QemuTextConsole *t) } g_free(t->cells); t->cells =3D cells; + + /* XXX Shouldn't qemu_text_console_update_size() also be called here? = */ + qemu_chr_resize(t->chr, t->width, t->height); } =20 static void vc_put_lf(VCChardev *vc) --=20 2.51.0 From nobody Sun Sep 28 15:29:10 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=1758412021; cv=none; d=zohomail.com; s=zohoarc; b=FM/b3EGaYw0TU4uOsbo0dU+WtTtf6TYyHZ/fgH9h9SHhrHUBU+GXidMy9CJ55Yas5zCUTYgHtoO/tDIB0jkRYfOE2A+mniZTJIaYj0Vi1iO9FgcUqsCiJOS3yFtc0zm2elSpdSJ5Bo9LQ5XCDPqDLsnn2EmPfTTF6ch/4LOlYNA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758412021; 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=l+6U7vuZXoA2jAif1uxe87ybSSQD3PHGgeF0aqX99Qs=; b=F3EFm7ehc1Dba0EAiGAemJk1qmHzeiGeBGgMR0ZAGUjdD5o26XQNq9ts6p/TTGkEr1S/VerdSu0DQrkvBltg+rNXJK3P5jXWoIZstR/9+IqNoGjL1MEnQ0VFDpS6F6TrzZqolzNPPKlFtxQ/N637rgHetF6leEJCidTzzekpJ7k= 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 1758412021200688.8685692320859; Sat, 20 Sep 2025 16:47:01 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v07Hh-000500-4v; Sat, 20 Sep 2025 19:46: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 1v07He-0004zX-0z for qemu-devel@nongnu.org; Sat, 20 Sep 2025 19:46:26 -0400 Received: from mail-wm1-x32e.google.com ([2a00:1450:4864:20::32e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v07Hb-0006hA-Ie for qemu-devel@nongnu.org; Sat, 20 Sep 2025 19:46:25 -0400 Received: by mail-wm1-x32e.google.com with SMTP id 5b1f17b1804b1-46b7bf21fceso4786155e9.3 for ; Sat, 20 Sep 2025 16:46:21 -0700 (PDT) Received: from localhost (mem-185.47.220.165.jmnet.cz. [185.47.220.165]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-3ee0fbf53cesm14756947f8f.59.2025.09.20.16.46.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Sep 2025 16:46:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758411980; x=1759016780; 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=l+6U7vuZXoA2jAif1uxe87ybSSQD3PHGgeF0aqX99Qs=; b=Jb/2k5o8deS5nf8BN87KsHrMiXZowQ98Z9wajl7sjTOnuQgMuDGaGsk/EVVJFFxsvU Ph+eK50p2XzY4chiE4IN/xY3LUKQJyPULSrSWzLqLLII+7x/GXnkTiF6K3+9Hvn//95F xlCcyLK/5A/BzfdZU0BQeFBVSHb5m6ibIKaSr63HWiYZvFUpdnSxIBhFzadFdhcaJDgg 6vNX8mv5f9qsNTQB4Z+vg4RMH63yl/AhOMJ0llueBH+qh8ZT8sauCRsCxTJrLWSOGZ4W w2ySD2DCtbIRon/HLACEn+0t05vE7J3m7eu20hv5YSl1Ik/JpVpAoSnpzYaKSyvazqNq fxxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758411980; x=1759016780; 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=l+6U7vuZXoA2jAif1uxe87ybSSQD3PHGgeF0aqX99Qs=; b=UCSii9w5PFlTUq7jcvvh99Tfm3IY9MATlm+4C0nhqTm9qEwkT3ITZNjrDT+O1qeTiM WXSrZ5sjRAmeCkITaF5kuR7SBlMGBnp2eJRVcwbp96ZhPXEpocn7PtwnNtf8b8pKTaB/ hWr7HC7403qGPfSc/8bIdcO6O/YwQ4SAeGR/2JOe5UMwBsPXxUWHfA7oDRT/jcW5lgY0 dHt4cZ+ZQkjxsQFVhsoS6ZUTE0BaksJQcxv6LbIbidASbI8tCztHcInJZzWPNUj5Vb1U Rg/psq3n03dmGA1fzco+HPntL8hbksOkKxvbOGSRpCvZGnOx1ZNNJn7hg/A/TrNqQHJx RvBw== X-Gm-Message-State: AOJu0YzLj35rkkCzJ4mJdNfyq2NoQqa33F2svq+UmmlPay32cbpw9WOv hXetlB4va/zRZjF3Ke6+vHb3jGQTQqrZmFDYgfLl7QC39SU/vhRQMt9c X-Gm-Gg: ASbGncvvrFL2v3qKv9rpAK42XCsyAFSmJsdJ8+P9XOp4o0mf8At5rOFiKDYtQCcwq77 h3ubglO1ZoDdlSMNWjp9iu8NU0KWOTZ7CE0EJXKN+jwB1UTQZ9OWZuXpQoGz0k/iz87MOHRFP+b rWwZZEccjwwUEimPxJ66MzqFznRkq6B88XbXHt2/0WvDpHpN8Y7r3DCsHA/ca2I8yHWWqm9fz74 MlGZBYSsYJTghM9rUg+IMdKl8421Igmj8lnrv8HoDtzKdeTijxBlg6jTKHiJY68hbpIb+Aj1aIe IMJqLGf/KOP64y95kWiTNGBN5IkyYRb3QQk3DsODgs/9AuG1vMMW8dLq5gNyxX0HJfxNRnQ44sL a+yaa7econePeBUfDeyyXApEG0gcyWSN8VjF+drf4RcP6woA7qwDc X-Google-Smtp-Source: AGHT+IGcPrcRTjfUt0bpQ7125j3MbMtv2zS3nJc/HrW2LnUXXiXefL03bmP0sDpYocEbB0Foz659gw== X-Received: by 2002:a05:600c:1f0e:b0:45d:e211:da7d with SMTP id 5b1f17b1804b1-467f3840538mr59904835e9.35.1758411980357; Sat, 20 Sep 2025 16:46:20 -0700 (PDT) From: Filip Hejsek Date: Sun, 21 Sep 2025 01:45:42 +0200 Subject: [PATCH RFC v5 12/12] ui/gtk: forward gtk console size to vc chardev MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250921-console-resize-v5-12-89e3c6727060@gmail.com> References: <20250921-console-resize-v5-0-89e3c6727060@gmail.com> In-Reply-To: <20250921-console-resize-v5-0-89e3c6727060@gmail.com> To: qemu-devel@nongnu.org Cc: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , "Michael S. Tsirkin" , Laurent Vivier , Amit Shah , Markus Armbruster , Eric Blake , Eduardo Habkost , Marcel Apfelbaum , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Yanan Wang , Zhao Liu , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , Maximilian Immanuel Brandtner , Filip Hejsek X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1758411962; l=2083; i=filip.hejsek@gmail.com; s=20250912; h=from:subject:message-id; bh=dxDuA1//VqDvH1os8q3NA6tUkxpa0NEBJc+VF1MvYLw=; b=Lp2Tht9hYrjoAEySxAR3OJMXr3WT/mfoGacMMEscps/BvMb/NljPryz8VBuKmLpDzn32+Jn4V llUX42tmoy8CWHexDfs5lHjMp1W3aKnJnt3Upyanjlm3n43uSCEdHEv 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::32e; envelope-from=filip.hejsek@gmail.com; helo=mail-wm1-x32e.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: 1758412023322116600 Query the terminal size from the vte library when creating the console and every time it might change. Vte doesn't send any signal specifically for terminal size changes, so instead we register callbacks for size-allocate and char-size-changed. Signed-off-by: Filip Hejsek Reviewed-by: Daniel P. Berrang=C3=A9 --- ui/gtk.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/ui/gtk.c b/ui/gtk.c index e91d093a49e5d05c10f1dbea5b9b94ff1389b456..ff2709160787f0e2974c83802d9= 32758866f6d44 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -2025,6 +2025,27 @@ static gboolean gd_vc_in(VteTerminal *terminal, gcha= r *text, guint size, return TRUE; } =20 +static void gd_vc_vte_update_size(VirtualConsole *vc) +{ + uint16_t cols =3D vte_terminal_get_column_count(VTE_TERMINAL(vc->vte.t= erminal)); + uint16_t rows =3D vte_terminal_get_row_count(VTE_TERMINAL(vc->vte.term= inal)); + qemu_chr_resize(vc->vte.chr, cols, rows); +} + +static void gd_vc_size_allocate(VteTerminal *terminal, + GtkAllocation *allocation, gpointer user_d= ata) +{ + VirtualConsole *vc =3D user_data; + gd_vc_vte_update_size(vc); +} + +static void gd_vc_char_size_changed(VteTerminal *terminal, guint width, + guint height, gpointer user_data) +{ + VirtualConsole *vc =3D user_data; + gd_vc_vte_update_size(vc); +} + static GSList *gd_vc_vte_init(GtkDisplayState *s, VirtualConsole *vc, Chardev *chr, int idx, GSList *group, GtkWidget *view_menu) @@ -2090,6 +2111,12 @@ static GSList *gd_vc_vte_init(GtkDisplayState *s, Vi= rtualConsole *vc, =20 qemu_chr_be_event(vc->vte.chr, CHR_EVENT_OPENED); =20 + g_signal_connect(vc->vte.terminal, "size-allocate", + G_CALLBACK(gd_vc_size_allocate), vc); + g_signal_connect(vc->vte.terminal, "char-size-changed", + G_CALLBACK(gd_vc_char_size_changed), vc); + gd_vc_vte_update_size(vc); + return group; } =20 --=20 2.51.0