From nobody Thu Apr 18 02:35:34 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1593448945; cv=none; d=zohomail.com; s=zohoarc; b=Bw67CIm9Wnshg8cUXrHnfBF46OfJlnRWvAiviESqoBzEjFSNM2f8rQFg6pj8AXV/dNC/i0MYu8/qJ+nZn7dr3Kr69eCkCvoIqPtO1ljH7FrHsDocR/cpcIdZpS3otRd++L59LPHvS3iyqKuehGDph2UdWFzAn6M6adYcn01KZIU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1593448945; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Pryqk9SMxJXWHDnBZcX/YYEDZmnhq7KMCQOp0n6/WTc=; b=HSjqSyegmpaJsNeUdnQgkSRYEOreN0G1KufIi9JOBaKhjFvEsZh9y0OrtCMn81UYGXjl9K8DQvrH9zAbxW+85nJxyJY2qrWCYJcqHvnyQw003BUSl/7VIwhPgUftH7mGdF2DieNGIP6hnuW/eFQCoX0Iu/F6VhsR+L/Tn7gMIbs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1593448945721499.61162859062733; Mon, 29 Jun 2020 09:42:25 -0700 (PDT) Received: from localhost ([::1]:45874 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jpwrQ-00026A-AU for importer@patchew.org; Mon, 29 Jun 2020 12:42:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55926) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpwqI-0000I6-OZ for qemu-devel@nongnu.org; Mon, 29 Jun 2020 12:41:14 -0400 Received: from mail-lj1-x242.google.com ([2a00:1450:4864:20::242]:42789) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jpwqG-0007ua-HR for qemu-devel@nongnu.org; Mon, 29 Jun 2020 12:41:14 -0400 Received: by mail-lj1-x242.google.com with SMTP id h22so11602146lji.9 for ; Mon, 29 Jun 2020 09:41:10 -0700 (PDT) Received: from localhost.localdomain (193-239-39-51.ksi-system.net. [193.239.39.51]) by smtp.gmail.com with ESMTPSA id o1sm37641lfi.92.2020.06.29.09.41.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Jun 2020 09:41:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Pryqk9SMxJXWHDnBZcX/YYEDZmnhq7KMCQOp0n6/WTc=; b=hk67TDwP7/gDiWXaKmau2wsYSDAvhScNlRRGVI1hczkd4Ryk1Kq2CfSoQBIyD6p9YE sE9fIV39kA3FHPu3ebQCRl12ydE7vIIBsW8aBiFLhhzeGjud6TaJJleRtJSu9aD46Vgs Av5TUZ+qaVArxKWnxYIOK3u98MczMRSzlzkvILhIRzsASbhYUTq9oUdwcg+vkHA7wTXW zD6hB/eB/Ad69yaoytVLRrRuc6sDfs+DAgZFdAYXak2Y8IBU+UVyqQOoJ+GISrOXzLpY dZSqxbEJSZ1zgTGpz02lydf3ZEYdh7bcRbJ3Pq8DqLQOFk9UnAEj5malb3c4gctulhvg itPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Pryqk9SMxJXWHDnBZcX/YYEDZmnhq7KMCQOp0n6/WTc=; b=FEtretC3AUZ86iVB3UY0JG3b0UIGBAxBl2o1+iTzHEeBQNA2aYwIpK0RE5irtRFnto dJjr6IHKh3uYQV3qDPFMHCU+pAX4p4T1274zahcOXtjZB/po/1RicYKic8V5sH7RbG9b WRaQiJhbV0qPLXlNd19gW//uGtrCOnokGY5wb2wbk2tZ13G+f9McLI5fhNF4JodsK+Lu k8AzZe2l95aBPhErmrjkRYjQ+g+0Jc2eqJHBzZcwmCSyybD73ps4HvXT+Zt0jzHlOe9e 9iQCq9IewkjfYe81EaivRIbxAdPYKm04lvGDINCfidiaFtoPG/x2+LtEsZMUieTG2dQP 8zzQ== X-Gm-Message-State: AOAM531jy+XHk6+S/AO1gRmIAQjOo9DqjHxutmZBwJCDJ0VYUlN+dZjd L6WYklGq0GelfzD+PBLQmYvvD2YyYmKMkw== X-Google-Smtp-Source: ABdhPJyWoDGWH6afojnoBqQzf5AsKkngJXaaCPLINY0MlqBhqUd0WsLzGqOAdi/bmDIBLtSTbg+YtQ== X-Received: by 2002:a2e:b55c:: with SMTP id a28mr3933324ljn.42.1593448869100; Mon, 29 Jun 2020 09:41:09 -0700 (PDT) From: Szymon Lukasz To: qemu-devel@nongnu.org Subject: [PATCH v3 1/9] chardev: add cols, rows fields Date: Mon, 29 Jun 2020 18:40:33 +0200 Message-Id: <20200629164041.472528-2-noh4hss@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200629164041.472528-1-noh4hss@gmail.com> References: <20200629164041.472528-1-noh4hss@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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::242; envelope-from=noh4hss@gmail.com; helo=mail-lj1-x242.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: lvivier@redhat.com, berrange@redhat.com, amit@kernel.org, mst@redhat.com, Szymon Lukasz , marcandre.lureau@redhat.com, pbonzini@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" These fields should be interpreted as the size of the terminal connected to a given chardev. Signed-off-by: Szymon Lukasz --- 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 f3530a90e6..27f95bfcdf 100644 --- a/chardev/char-fe.c +++ b/chardev/char-fe.c @@ -336,6 +336,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, int fe_open) { Chardev *chr =3D be->chr; diff --git a/include/chardev/char-fe.h b/include/chardev/char-fe.h index a553843364..3672b0d97d 100644 --- a/include/chardev/char-fe.h +++ b/include/chardev/char-fe.h @@ -154,6 +154,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: * diff --git a/include/chardev/char.h b/include/chardev/char.h index 00589a6025..0cea33cb9a 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; GSource *gsource; GMainContext *gcontext; DECLARE_BITMAP(features, QEMU_CHAR_FEATURE_LAST); --=20 2.27.0 From nobody Thu Apr 18 02:35:34 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1593449078; cv=none; d=zohomail.com; s=zohoarc; b=O8T2uzjm4RbYXGihh7QcO/w3kaHUHVBa+9ejtChnC4gfYUPJpvJuPAwOaLCbH7kJzk2yjDUp9LoeglNu4UULtyIjgSAIKPNQXXISmoGMCgKgr4m2U98L8faIN5yP7+WwHLn4j6VPCW/4u6kRJWSgKWcBtN39BGB65InT9hau0No= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1593449078; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=FzqnRuMT+XuVpao3SBx7aexWUtl8wLkCabLBdf8t04I=; b=Nku58mWya5FEI4rHSz98Pt2Pc/dqQNJBLm3E6ScpQLVuhS4BpcbI8FsYaEObvgG/5uLIbIjxuS4GCA3huXdjx2iYD4tLL+HxcB8CQkhkEwRoIo9+ale1TigtlZOcNxZCarmX/dx+9n/xwsUV19kGG+RB9Oz5MNmCvFe8sPawvlY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1593449078709659.5727697704664; Mon, 29 Jun 2020 09:44:38 -0700 (PDT) Received: from localhost ([::1]:54236 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jpwtZ-0005bv-Dh for importer@patchew.org; Mon, 29 Jun 2020 12:44:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55910) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpwqI-0000Hy-1Z for qemu-devel@nongnu.org; Mon, 29 Jun 2020 12:41:14 -0400 Received: from mail-lj1-x243.google.com ([2a00:1450:4864:20::243]:36359) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jpwqG-0007uq-5L for qemu-devel@nongnu.org; Mon, 29 Jun 2020 12:41:13 -0400 Received: by mail-lj1-x243.google.com with SMTP id d17so4080076ljl.3 for ; Mon, 29 Jun 2020 09:41:11 -0700 (PDT) Received: from localhost.localdomain (193-239-39-51.ksi-system.net. [193.239.39.51]) by smtp.gmail.com with ESMTPSA id o1sm37641lfi.92.2020.06.29.09.41.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Jun 2020 09:41:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=FzqnRuMT+XuVpao3SBx7aexWUtl8wLkCabLBdf8t04I=; b=So5lf5afJ5W8x7xKTGXkrHCWcEQCr8GROvR+s6W26BNjRfb1eepoI1h1fAbcKwNWpY 6pE6U4PGvh8lZtHZGn21Z3PRn2Z92Y6fH1kRBvmRJCh4IfFb2SyVazaCePIx12WbVF5v OgklT7AYPMxyPEJlI5JOXntqeYjNE83+91zfGFQYvqreG4grBig0DCZACxgdVZn2nFLO Jc8dHpR5BM8NlNM/UJSHMb/9aW7KiQD5Bc7zbEe8o2ESfPWebXHqloie2cv0goPlFhH/ sNhEA8r8UMvIDmC5dNoVCcFqWpDqZJTJ8UzBD/61lRUPI9xslxU213+m/nPhIazp5saU Zbow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=FzqnRuMT+XuVpao3SBx7aexWUtl8wLkCabLBdf8t04I=; b=SZDETOMM9PTyc3GvirE4hAh97ilXRfNAWLmhgwPND8d0PEatPE2DLx/UykDCpbzsFx DRWrCSwfCYjdz15VZ2QuqmtyGhRk+9qobzXM2K/1WQ+U0HZCNvPkhtqPAF1yXXA8y+Lz b7vR0aheFzL+YBqLvAOKLTB8De/TAoCWqhmMrEsggqxREr08D2ffFZ8nsnD0N3AW84gA suBuO4EwKSqL6Lk+qVcZjTlaAnrqax8dq9lfXU3EaYjU/sxPpfL8PXTXB2UtT46KtUDy IgtkePrqArlExOSrUIbX5Fqjv2PVss0c9vogzFMGYCMKx+g1Sv94yv9L9ovkimD8pAjF SnaQ== X-Gm-Message-State: AOAM530SkD7WBZ9fyZEAP4StH/9UDemDmSXoZR144N6QICRS6Xsqk3JK a2HRQHjqVPJRbtopp3lNqEq+rw4sW/g/aw== X-Google-Smtp-Source: ABdhPJxTAVIplwOhtdvRrkIMTarq8D2efEMYZcdrdKVWaELkTi+QB1KiRvZ2DpCPXOfzf1LrFAX6Bw== X-Received: by 2002:a2e:9857:: with SMTP id e23mr4450018ljj.411.1593448870151; Mon, 29 Jun 2020 09:41:10 -0700 (PDT) From: Szymon Lukasz To: qemu-devel@nongnu.org Subject: [PATCH v3 2/9] chardev: add CHR_EVENT_RESIZE Date: Mon, 29 Jun 2020 18:40:34 +0200 Message-Id: <20200629164041.472528-3-noh4hss@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200629164041.472528-1-noh4hss@gmail.com> References: <20200629164041.472528-1-noh4hss@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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::243; envelope-from=noh4hss@gmail.com; helo=mail-lj1-x243.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: lvivier@redhat.com, berrange@redhat.com, amit@kernel.org, mst@redhat.com, Szymon Lukasz , marcandre.lureau@redhat.com, pbonzini@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Add a new chardev event, CHR_EVENT_RESIZE, which a backend should trigger if detects the size of the connected terminal changed. Signed-off-by: Szymon Lukasz --- 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/usb/ccid-card-passthru.c | 1 + hw/usb/dev-serial.c | 1 + hw/usb/redirect.c | 1 + include/chardev/char.h | 4 ++++ monitor/hmp.c | 1 + monitor/qmp.c | 1 + net/vhost-user.c | 1 + 13 files changed, 16 insertions(+) diff --git a/backends/cryptodev-vhost-user.c b/backends/cryptodev-vhost-use= r.c index 8b8cbc4223..bbf8ad426a 100644 --- a/backends/cryptodev-vhost-user.c +++ b/backends/cryptodev-vhost-user.c @@ -174,6 +174,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 e3051295ac..904f8bf6e3 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -74,6 +74,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 a00b854736..1a656a27c3 100644 --- a/hw/block/vhost-user-blk.c +++ b/hw/block/vhost-user-blk.c @@ -403,6 +403,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 2c47ebf007..eadccbb617 100644 --- a/hw/char/terminal3270.c +++ b/hw/char/terminal3270.c @@ -169,6 +169,7 @@ static void chr_event(void *opaque, QEMUChrEvent event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/char/virtio-console.c b/hw/char/virtio-console.c index 4f46753ea3..97b9240ef5 100644 --- a/hw/char/virtio-console.c +++ b/hw/char/virtio-console.c @@ -165,6 +165,7 @@ static void chr_event(void *opaque, QEMUChrEvent event) case CHR_EVENT_BREAK: case CHR_EVENT_MUX_IN: case CHR_EVENT_MUX_OUT: + case CHR_EVENT_RESIZE: /* Ignore */ break; } diff --git a/hw/ipmi/ipmi_bmc_extern.c b/hw/ipmi/ipmi_bmc_extern.c index f9a13e0a44..9562584309 100644 --- a/hw/ipmi/ipmi_bmc_extern.c +++ b/hw/ipmi/ipmi_bmc_extern.c @@ -439,6 +439,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/usb/ccid-card-passthru.c b/hw/usb/ccid-card-passthru.c index bb325dbc4a..3c26b16ed0 100644 --- a/hw/usb/ccid-card-passthru.c +++ b/hw/usb/ccid-card-passthru.c @@ -321,6 +321,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 7e50e3ba47..e8e960d0e6 100644 --- a/hw/usb/dev-serial.c +++ b/hw/usb/dev-serial.c @@ -507,6 +507,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 417a60a2e6..b716c4fdd7 100644 --- a/hw/usb/redirect.c +++ b/hw/usb/redirect.c @@ -1383,6 +1383,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/include/chardev/char.h b/include/chardev/char.h index 0cea33cb9a..42203e9fa4 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 d598dd02bb..020be03d61 100644 --- a/monitor/hmp.c +++ b/monitor/hmp.c @@ -1373,6 +1373,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 d433ceae5b..58aecb475b 100644 --- a/monitor/qmp.c +++ b/monitor/qmp.c @@ -371,6 +371,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/vhost-user.c b/net/vhost-user.c index 17532daaf3..e30cbe74bd 100644 --- a/net/vhost-user.c +++ b/net/vhost-user.c @@ -297,6 +297,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.27.0 From nobody Thu Apr 18 02:35:34 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1593448946; cv=none; d=zohomail.com; s=zohoarc; b=IwZeRBYbo0OVnjDysy+0lN/dtH3LNzB6xa43+cCXWpYbDzzaLhSKK+6nt8GeNuSRX/aPHgvExf8wiEERCb6ceQ/4Jcj46gf5iznBTctA9YcHU1Pc5GNQuwG0cdU6DRhNYwsUCe4ZnY0RVYy5JByHYU1C4yqycahR33FYLza4u9Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1593448946; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=3sFtKalod1/786Y897d8w6b5nlz6uSa8s0Q6IXgOPjU=; b=AaYtJV9bvlfou0eS5AiCyRTJ3Q9ytYVb/VJd60M3mulIQYH7KymqbigdS/hyWlYvZsSUuY9Aqimp1wmEt6+azRDUdMkaAug2CpePaAJlLqa3qGvy5FZG15F+AxOGG0HVfpNbrEKTQlb8klkN7Gq8n5pcMVE0OQFvWN72mG1M+Lg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1593448946117907.198207693369; Mon, 29 Jun 2020 09:42:26 -0700 (PDT) Received: from localhost ([::1]:45930 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jpwrQ-000288-Qq for importer@patchew.org; Mon, 29 Jun 2020 12:42:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55934) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpwqI-0000I8-TG for qemu-devel@nongnu.org; Mon, 29 Jun 2020 12:41:14 -0400 Received: from mail-lf1-x144.google.com ([2a00:1450:4864:20::144]:46934) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jpwqG-0007uu-QD for qemu-devel@nongnu.org; Mon, 29 Jun 2020 12:41:14 -0400 Received: by mail-lf1-x144.google.com with SMTP id m26so9431708lfo.13 for ; Mon, 29 Jun 2020 09:41:12 -0700 (PDT) Received: from localhost.localdomain (193-239-39-51.ksi-system.net. [193.239.39.51]) by smtp.gmail.com with ESMTPSA id o1sm37641lfi.92.2020.06.29.09.41.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Jun 2020 09:41:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=3sFtKalod1/786Y897d8w6b5nlz6uSa8s0Q6IXgOPjU=; b=K+cLLAI9ckD4KaKCQtho1A/a193zgTp0LDfrdTqXkGkjtRc564CFTo92cL4LmjqqOy D20FqwazQzKTkqPuBOuVYWwwBx3ECmLaMr74ipU+8vIm43e5zlu/Bl/yR6r1wyy3AV9c kUR/d7+nb4HXYFqqyZvFB7jsQEIkKpUNW7lHlqCIG3vSz6m7DajsHyKeQJiogcaOAPfC 40VsOZDA4hxwRn9A3NUyXeKVF44f9pD/4QzCnID9zSflvg9yVnpoy1x6ykZg5Ev9HN8E XHLhnlM+sVfJY2nByfsID6GXgQNbj49s6QNsUqr6qsu9gmg4zgtUhMAOmMTC1AzRFWn8 0L1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=3sFtKalod1/786Y897d8w6b5nlz6uSa8s0Q6IXgOPjU=; b=ByXiwUUtV2l1nh9MJexb2iQ/aBtBjEFMvRaF8U/h48lTGGPMDQDgruoz82alf7HFsj ckZF+i3G39r0RBeLUnjQ9bRsdNMDJJvgQmVo18GMTtZwYFHoqWuVheob37PdQLey74yA x7aGB/efs8zak+KsbFATrb9wtm5UsSMm622LK77LLX2tBllQY58/9y+YH3XEvBmtZ8+k BrelnTZ9cvVipSwMC8QIosFL4mEHhxI0NgMzrdOnI+WwIsLqcT0RIdWgeAjXd0TYGvVk XwPCmJS4JMXnnQ5vspEHE81BqnrEN9DtRiB+fFvuLaKPVE0Su6gB337GkqKjbF8kUDNt eA8Q== X-Gm-Message-State: AOAM5327RWTTXbURtyQLWzA+G8f60GoerddDGt+1Cjom9DBo4d72Ze5K ++KauCcaUuiwmw6uQiEskAySRRYT/yKJZA== X-Google-Smtp-Source: ABdhPJyOPBIHvEb/6X5armsEmWQP8YeD+LChofIXaJ4Yoo7bJpe1DoFYWChXR1+3MAhfBR6EcYDU3g== X-Received: by 2002:a19:2209:: with SMTP id i9mr9660299lfi.46.1593448870982; Mon, 29 Jun 2020 09:41:10 -0700 (PDT) From: Szymon Lukasz To: qemu-devel@nongnu.org Subject: [PATCH v3 3/9] chardev: add qemu_chr_resize() Date: Mon, 29 Jun 2020 18:40:35 +0200 Message-Id: <20200629164041.472528-4-noh4hss@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200629164041.472528-1-noh4hss@gmail.com> References: <20200629164041.472528-1-noh4hss@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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::144; envelope-from=noh4hss@gmail.com; helo=mail-lf1-x144.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: lvivier@redhat.com, berrange@redhat.com, amit@kernel.org, mst@redhat.com, Szymon Lukasz , marcandre.lureau@redhat.com, pbonzini@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" This function should be called whenever we learn about a new size of the terminal connected to a chardev. Signed-off-by: Szymon Lukasz --- 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 904f8bf6e3..1dc22aca95 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -354,6 +354,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 42203e9fa4..01099121f1 100644 --- a/include/chardev/char.h +++ b/include/chardev/char.h @@ -230,6 +230,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" #define CHARDEV(obj) OBJECT_CHECK(Chardev, (obj), TYPE_CHARDEV) #define CHARDEV_CLASS(klass) \ --=20 2.27.0 From nobody Thu Apr 18 02:35:34 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1593448946; cv=none; d=zohomail.com; s=zohoarc; b=M1Iqh0J74Rcw/rKCrnVl+ajMT1vxlwl2mNLEj/jKYEXGY41IWiY9ra8dkHcJqdvNG3UEl3YanpJFX9OCe9iSzNV36d8MtQBPkIQItlvld77pgNJKV0LPogCLCt4M1wFIfzv2AD7bIODLxXFsY2ontRxXqCawODTnrfMBRFFxz/Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1593448946; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=qIOYbuvilU4Digqleh4xnQWueJUIUIR9yScgMm3N+yw=; b=J3oDZUOlVm780key1vcTDTiiWIAtA1mkIWro2+gzWbheWgjkoyRM8ote00dQiqwBlhp/1RNo+qUpkKKMy/V0Z42woCF3Q2CbsuyflyD/AiJ7/8ZzTiOX+eBzHuzHoSKuowbJbIU3MD9fi6BOj2lpihJZpzHfxdiRyQ4WUbi4Oc8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1593448946555399.8261959886189; Mon, 29 Jun 2020 09:42:26 -0700 (PDT) Received: from localhost ([::1]:45840 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jpwrR-00025J-8W for importer@patchew.org; Mon, 29 Jun 2020 12:42:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55948) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpwqJ-0000IY-Ck for qemu-devel@nongnu.org; Mon, 29 Jun 2020 12:41:15 -0400 Received: from mail-lj1-x244.google.com ([2a00:1450:4864:20::244]:45937) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jpwqH-0007v3-PF for qemu-devel@nongnu.org; Mon, 29 Jun 2020 12:41:15 -0400 Received: by mail-lj1-x244.google.com with SMTP id t25so14187343lji.12 for ; Mon, 29 Jun 2020 09:41:13 -0700 (PDT) Received: from localhost.localdomain (193-239-39-51.ksi-system.net. [193.239.39.51]) by smtp.gmail.com with ESMTPSA id o1sm37641lfi.92.2020.06.29.09.41.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Jun 2020 09:41:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=qIOYbuvilU4Digqleh4xnQWueJUIUIR9yScgMm3N+yw=; b=Qq56aqrgJSwHYHolUoT6MMfPYS41rRSJ5G8D7yc77fTOszfh6lmmoCfu2KwpwyIURY eQmFG69KEOcxGPerD93wrOK87WTJGa1nH2SkOfdEDO+Igzm/JpGo42kbUzlv5PIyjG/w guF+PtU2LuBsYp7eb6TCcweaJ515J9CxFbg/VaEfWTNgBydM88eI6sapsLx5TpJ5FlxM T9FZSxjClZrptJfxpWz4bqVX80W42uVvTCx3OmTVCdk3rx5y7ZF4A95W/MZtUdx9VICq Qi2t8i4dhQphn9PDvq6/swdDY7B7t67TUnhzTAS8Ac4fFJkMrkuEvq9ox0RG7NiSoh7q jKoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=qIOYbuvilU4Digqleh4xnQWueJUIUIR9yScgMm3N+yw=; b=hCgThAjYV9tI+gW9buU4sK+Lb7YMyQkxfr+smBXvt5VsS06GxnuCYoOSoaASd5eGfY rrHi/W44ek0BkW2dqtoir0q1sA+p1fp0I2UvbXaWm+xFyPOElIxAunjKd2s6RO42Y18P +oncFCLwCPHLRvNXbDzuyAwiOHuFyYMTrXuGRj0rCyMwnw6Ans2VUyi21Az8HIAmzFuu guDOoNxRdtTRXtvQLcc7zMjz4tioLoNvlKBQdoB515sKky1cpy7sBSL0nHq0+T92HiRl jfRxCfnIRQ0AZ6p/ni5JtEDiqpwLRKmG7HJkhujVCiV+iMD2YZ3ukXsYgvsfJb64zsht nfKA== X-Gm-Message-State: AOAM53086mi21kILOLpXGtPFlrjtOojB/y+B7QQ+sfqX29AoLz2Zo+sP t7M4KfcPar3/b1PyEpWuLUQXrON9HiUYnw== X-Google-Smtp-Source: ABdhPJxIcoI6+rjA6UE46chYve5jNzwvXR8SibuIldCU5D3T/7ssoa6o4tZ5qzKuQxnNFCrVnVShHg== X-Received: by 2002:a2e:b0fa:: with SMTP id h26mr8076038ljl.148.1593448871855; Mon, 29 Jun 2020 09:41:11 -0700 (PDT) From: Szymon Lukasz To: qemu-devel@nongnu.org Subject: [PATCH v3 4/9] char-mux: add support for the terminal size Date: Mon, 29 Jun 2020 18:40:36 +0200 Message-Id: <20200629164041.472528-5-noh4hss@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200629164041.472528-1-noh4hss@gmail.com> References: <20200629164041.472528-1-noh4hss@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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::244; envelope-from=noh4hss@gmail.com; helo=mail-lj1-x244.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: lvivier@redhat.com, berrange@redhat.com, amit@kernel.org, mst@redhat.com, Szymon Lukasz , marcandre.lureau@redhat.com, pbonzini@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" The terminal size of a mux chardev should be the same as the real chardev, so listen for CHR_EVENT_RESIZE to be up to date. We forward CHR_EVENT_RESIZE only to the focused frontend. This means frontends should probably update their view of the terminal size on receiving CHR_EVENT_MUX_IN. Signed-off-by: Szymon Lukasz --- 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 46c44af67c..fa81f8341e 100644 --- a/chardev/char-mux.c +++ b/chardev/char-mux.c @@ -247,9 +247,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) @@ -330,6 +345,7 @@ static void qemu_chr_open_mux(Chardev *chr, */ *be_opened =3D machine_init_done; 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.27.0 From nobody Thu Apr 18 02:35:34 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1593449079; cv=none; d=zohomail.com; s=zohoarc; b=BWkRH7xYx800of9kJP0LgeRh2cy8rTddjmxCJyfx2DSRLiASOcNKvpR/ejhUlhfscv91fpkWSooXynPhmC53PcDXb3nh73BCl3FW7Ayg+Ctym8Q88Uy2SFCN4uEA60esY/sasrHVihYHSuSSz5r2wWutHLdI42fJwjOrEKVsWfg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1593449079; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=v/NS9YgRb0NXpU+G0HRMzylRBMOp+QQCcs98Z10vCR8=; b=HsoGwNTSXARbgz7I9Uh7bxpxOMM8ALYNw++ZNKH+C13xDRGHo8hDfHKGX/yLu3EjFtayV5hLOlXvGR3zyIe8iZbDbjnafKizEiLdsYDkAfMxKPmty65VKYFOL599wAaOqeiYSfGXqBZxUB6scl6nW9JnV6MffaSqwTnuGhko5dk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1593449079642976.0158249064767; Mon, 29 Jun 2020 09:44:39 -0700 (PDT) Received: from localhost ([::1]:54370 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jpwta-0005fe-CR for importer@patchew.org; Mon, 29 Jun 2020 12:44:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56000) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpwqM-0000Ns-4C for qemu-devel@nongnu.org; Mon, 29 Jun 2020 12:41:18 -0400 Received: from mail-lj1-x243.google.com ([2a00:1450:4864:20::243]:42790) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jpwqI-0007vD-OM for qemu-devel@nongnu.org; Mon, 29 Jun 2020 12:41:17 -0400 Received: by mail-lj1-x243.google.com with SMTP id h22so11602395lji.9 for ; Mon, 29 Jun 2020 09:41:14 -0700 (PDT) Received: from localhost.localdomain (193-239-39-51.ksi-system.net. [193.239.39.51]) by smtp.gmail.com with ESMTPSA id o1sm37641lfi.92.2020.06.29.09.41.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Jun 2020 09:41:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=v/NS9YgRb0NXpU+G0HRMzylRBMOp+QQCcs98Z10vCR8=; b=lfh55b9gh2gw5wMZDj6lZ13e/AkBtg7vGbmOZ7tAqIFZeA+bZIFx7NYI4BFBGjtiNQ PMI3CFu4+GkBru4Umr9JYooqeTArAN2dCfon9Rcsd71wnOhLoCSkgyYwHGjFQ/h1zZLH 3Y368C1DdlvFumc9oQz7mCihqjlewf8ou9w+oPOcOBSjBT5iHc79l+5tgCb6UscxYVpy gUXeIVKedJ6wD0lBwQvVIs7O7xRbNBzpIy0lBK7zqdkP7j63ddXiCEUElyeP4POI5FVx SK1RsQsEcQ3Yil0xVTwAGQxNHt1/+4oDUlKhS3VC91EfNYtjgUXTlPGv6qsaEVgyz9o3 RVNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=v/NS9YgRb0NXpU+G0HRMzylRBMOp+QQCcs98Z10vCR8=; b=CU3HtoR/a2+u/CJAUlELf6Jd38OEeXINHy1uNszvzgXvenq2/T/4C42rM9oe/bAWzC 6jyc7hgyRy/E7w79jkOa+diSqxdiufCBjs/NhmcXgKHO6bUMKuNMFlb3/Un7oV16t7Yk tjHtJujeWd/v8CxL03IV11pjYYcT+9WptTZRm07m0MH8smk51BEkkMamDaaiJiFEQ6BJ yF6x/3GunOUi1GtxH4pUG8+1G+EZrGuNQBgmHbQJFutB6d/Mbd5A9HMgQHmeAmvq2R25 NlRHTOT/8BsLYe12743zF36zIigQKIIL36Wa4t4A00VTgbNEWElxEF3lpyw3qOgzT0nz MobA== X-Gm-Message-State: AOAM531qVLVlpBaASNgMZloETyRa7pBjAtJb4lhQs146Z7nF61H3+YrU Izqtq9akMCdyUaLk9u3ztggJndR4lnAfKQ== X-Google-Smtp-Source: ABdhPJxBXaf+7sGEWnc28YCSpZ8Hm3sWXlCGf3s0l/5wYNVGMRQ3WW9y8ecc0plzYqfx6Xm8a6tc/g== X-Received: by 2002:a2e:6c06:: with SMTP id h6mr5446933ljc.282.1593448872816; Mon, 29 Jun 2020 09:41:12 -0700 (PDT) From: Szymon Lukasz To: qemu-devel@nongnu.org Subject: [PATCH v3 5/9] main-loop: change the handling of SIGWINCH Date: Mon, 29 Jun 2020 18:40:37 +0200 Message-Id: <20200629164041.472528-6-noh4hss@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200629164041.472528-1-noh4hss@gmail.com> References: <20200629164041.472528-1-noh4hss@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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::243; envelope-from=noh4hss@gmail.com; helo=mail-lj1-x243.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: lvivier@redhat.com, berrange@redhat.com, amit@kernel.org, mst@redhat.com, Szymon Lukasz , marcandre.lureau@redhat.com, pbonzini@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" 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 --- 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 a6d20b0719..f27dba1fd8 100644 --- a/include/qemu/main-loop.h +++ b/include/qemu/main-loop.h @@ -325,4 +325,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 a59b23a9cf..e5895d506f 100644 --- a/ui/curses.c +++ b/ui/curses.c @@ -34,6 +34,7 @@ #include =20 #include "qapi/error.h" +#include "qemu/main-loop.h" #include "qemu/module.h" #include "ui/console.h" #include "ui/input.h" @@ -146,7 +147,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 { @@ -169,17 +170,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 eda63fe4e0..0f5c8f3af1 100644 --- a/util/main-loop.c +++ b/util/main-loop.c @@ -90,6 +90,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 @@ -111,6 +112,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.27.0 From nobody Thu Apr 18 02:35:34 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1593449080; cv=none; d=zohomail.com; s=zohoarc; b=QAy+EHoMrAmkyvZBrLiJGWa/IS2Sdzph7B0wg2A3rl3lMgfeaOk08h2/bzvSsIkmYdpakjWC/SXl0Hp0PTq0MXgcheorZsl01hipeMpdcbRkVMyK0C4FAcUyLfij5HQNuijftm/xhdTevj//E5jC8RQj0S0oolT0A7pLup9TGoc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1593449080; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=lQ2x+wGNqZFyEYsLtUvst9mktUqtofO85Tme5j5B6as=; b=V8lrzH1P02SXA+fbbzoLrjUFrT4EKoOyrCRFtJmYv+1/TTMWwydY9nOSFJydjDZ0NbuIJWnQwprJ+34yeT+dLGTNr0ksIAwMLxNmMQn1WyeNNsewS6itS8ph0FpUL9WKTYV4slFQwYPjacWtvTtzlsvcogCm9lXS5CFbAeMrUtY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1593449080046596.4064927120373; Mon, 29 Jun 2020 09:44:40 -0700 (PDT) Received: from localhost ([::1]:54352 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jpwta-0005fG-Po for importer@patchew.org; Mon, 29 Jun 2020 12:44:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55998) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpwqL-0000NA-Pw for qemu-devel@nongnu.org; Mon, 29 Jun 2020 12:41:17 -0400 Received: from mail-lj1-x244.google.com ([2a00:1450:4864:20::244]:41941) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jpwqJ-0007vO-Fh for qemu-devel@nongnu.org; Mon, 29 Jun 2020 12:41:17 -0400 Received: by mail-lj1-x244.google.com with SMTP id 9so18759546ljc.8 for ; Mon, 29 Jun 2020 09:41:15 -0700 (PDT) Received: from localhost.localdomain (193-239-39-51.ksi-system.net. [193.239.39.51]) by smtp.gmail.com with ESMTPSA id o1sm37641lfi.92.2020.06.29.09.41.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Jun 2020 09:41:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=lQ2x+wGNqZFyEYsLtUvst9mktUqtofO85Tme5j5B6as=; b=YVw45NZ2mFx1uIEkTe4QiMsoXyFGciqC9tx00vXwXDbFGbt+/VF5QtdRfXLKEkgqmY WcVrMNTKfHchIz9wukjVhWXJJuEpdvuWRhplZV7wbRCeLTw0BCb1gHY30cccKyvAsrZ/ gc7K6wP3JFi9SwKeYbJkgh4MibtyxBxmecnsu983aFeWS+bRa9qXnK6AGZkuaPB7VpjY mX2E6iW3smCjsoyrp0bOhbdrJl3e/71T3qtWH0qBKiP9EaWew6SxdhwqZ/C9+1JDMbYQ fysC7ypTwuCv5PkJTwDO1DHr5AMiSQIYuqHcjOlU3TcK0/TSib9myR4dMh3oE+/QPiKC wLuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=lQ2x+wGNqZFyEYsLtUvst9mktUqtofO85Tme5j5B6as=; b=t4ZxI4tt+vLiptkWnpNxoCIPf2n6orw/g567IAtL+Xeu6FTFdnlrVeES2jxzHzvViv eifICIGRTFPcTJd0PRziLmZ+p5By/kx+Tuys50WbhaNacN91JZUxn2YX0Kxm5gwC+IFs mMn0Lj/zHft6G4Xr4/dxsUU+nWpipVUW+h2fUpEcTqTRilHYExOl48ELMfZX81fkxegU 1zuraQlNnN0UtXpFYmxBUNRZ7zt2LE2itfJjW1ybFlKPkJBtghqqPqB/ChxUJC985Zk8 /L0NCCQZ8NVqYTyeQnBXm1LKPXkIbTyzIeXduP99mIrpNlXsJLbqQIkN9TeMPggqtUNa B5dg== X-Gm-Message-State: AOAM531i1LDyfSC1It5SaIkYL+7KMytJ3O/74Mu+asBsLO8wgkwnJl3u KMukmQjK9HIg2AaywIb1ehlmAFels8FwEw== X-Google-Smtp-Source: ABdhPJyAhTaGq4g8RGsII+/wbVFPYJomW6XUviSmPu/ADD9eHOd+kItTJb7qAHjyDh/cmFgsABW4nA== X-Received: by 2002:a2e:7006:: with SMTP id l6mr9000783ljc.453.1593448873702; Mon, 29 Jun 2020 09:41:13 -0700 (PDT) From: Szymon Lukasz To: qemu-devel@nongnu.org Subject: [PATCH v3 6/9] char-stdio: add support for the terminal size Date: Mon, 29 Jun 2020 18:40:38 +0200 Message-Id: <20200629164041.472528-7-noh4hss@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200629164041.472528-1-noh4hss@gmail.com> References: <20200629164041.472528-1-noh4hss@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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::244; envelope-from=noh4hss@gmail.com; helo=mail-lj1-x244.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: lvivier@redhat.com, berrange@redhat.com, amit@kernel.org, mst@redhat.com, Szymon Lukasz , marcandre.lureau@redhat.com, pbonzini@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Update the terminal size upon SIGWINCH delivery. Signed-off-by: Szymon Lukasz --- chardev/char-stdio.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/chardev/char-stdio.c b/chardev/char-stdio.c index 82eaebc1db..4c3c8a80b6 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 @@ -45,6 +47,13 @@ static bool stdio_in_use; static bool stdio_allow_signal; static bool stdio_echo_state; =20 +typedef struct { + FDChardev parent; + Notifier resize_notifier; +} StdioChardev; + +#define STDIO_CHARDEV(obj) OBJECT_CHECK(StdioChardev, (obj), TYPE_CHARDEV_= STDIO) + static void term_exit(void) { if (stdio_in_use) { @@ -82,11 +91,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 @@ -116,6 +140,10 @@ static void qemu_chr_open_stdio(Chardev *chr, stdio_allow_signal =3D 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 @@ -155,6 +183,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.27.0 From nobody Thu Apr 18 02:35:34 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1593449198; cv=none; d=zohomail.com; s=zohoarc; b=dpw1F9h8yC769KzRVTDSzOup5erY/V0hIaYWzL+lpimAmscRvDiDG1nXNkSNmKNmH1J1kETW5Pr+qauF/0OYXIw3FG+S7yeOtmITuFV6oh2XCdsJgOBf6GJYTkwf2j+E9a3J8JAfoGmlhkXXQHGB/0TMVBGJUXqvRK1P1mjiy+8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1593449198; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=FsIVIoOVJboArGXMQrUGGX14JmbZhvk3mjQFE9rsWOk=; b=BKZMcQxjHhumP7LtPRy6ojEKeo1hmggRbu8nKWKmHlTLI4EP1urT2ItrmdJbyYxWCVUNByCx78Dh9cppD3nK9rEzwNL7LlgG4TgCvHfsVGvqh0PHY+DBGpUlCCflkN+L5hnxWeK98rGNuaa9mpQoYl2O2Dniwbq1psup/nTR/4U= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1593449198587215.86874751058497; Mon, 29 Jun 2020 09:46:38 -0700 (PDT) Received: from localhost ([::1]:60756 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jpwvV-00005J-9L for importer@patchew.org; Mon, 29 Jun 2020 12:46:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56008) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpwqM-0000OX-HA for qemu-devel@nongnu.org; Mon, 29 Jun 2020 12:41:18 -0400 Received: from mail-lj1-x242.google.com ([2a00:1450:4864:20::242]:44882) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jpwqK-0007vg-Dm for qemu-devel@nongnu.org; Mon, 29 Jun 2020 12:41:18 -0400 Received: by mail-lj1-x242.google.com with SMTP id s9so18719331ljm.11 for ; Mon, 29 Jun 2020 09:41:15 -0700 (PDT) Received: from localhost.localdomain (193-239-39-51.ksi-system.net. [193.239.39.51]) by smtp.gmail.com with ESMTPSA id o1sm37641lfi.92.2020.06.29.09.41.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Jun 2020 09:41:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=FsIVIoOVJboArGXMQrUGGX14JmbZhvk3mjQFE9rsWOk=; b=r7+grCbChISoVGXwV5xZDySFFX1gnUCQ4tnl2knM0XJLcubjNSkBZw4rgjoXUU5+rt UNsxBosKQEoEesqp9+B+M+jIGSoe5S2I7H/OjqeIBqJ6c+HkV6Nk9RwrXQBPpmRHdyL6 EZcM31th+12YWOcsQBblwkqivK1KUsN04BFvFKnyeAVhMNpsCDzfSaflETmq8uUcEjeF KvUGd78eU5cGni4MiCIWrU+839lWXTi5hhYx7wYou50e72vd/LPinjwistjHqVIi6w9q 0AB4Ev3KU+zd+eh6BM5rPRhLaeIuvY0MCR+7QNAKcu16yZFf6cQDKacZ6TmpU0K6++BH RVJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=FsIVIoOVJboArGXMQrUGGX14JmbZhvk3mjQFE9rsWOk=; b=W/3EKVXOODkeHmESj0FL3D728OJ3aN4kK11Qm+aRBpUnqxivAh/cFAlqMF6Zg3tuE1 FCP8tRHpV1A6urx+36RxYY+J14/VpJUI6wT9mv8DJoH9V7GpFh//shjMxldl2lTE7teW GJ+CP2riylSJMjfH6TmdddhB56F8sW/zWjR1FqjUnZIaR6ydAwKdw8SUmyocnUEn59gl jYZ12r127YgXvu+R4PRE2v4Rep81GpMTDABFNHpuYHRVocezbEVGAoNtk4VOvSTauwra eiHEWkjUFpEEZiK3DtSAHPIFo8Sen3wHRh401Xl4f3rs3SdEQyKVVXNPCly1fbO58nWN Xm5w== X-Gm-Message-State: AOAM531DYPyNeRrNvXwmWXrdqbQWdRJ25ngkruFzD178Og9kGVTeHquP yl8UN2sGNqhZ9lrKTHD2rUm65jn//Q0qzQ== X-Google-Smtp-Source: ABdhPJyhne7wnwo28CncTAlxYxanOV771jDjbADy+HL1Zc/P92n3nTa+0n8AZuKt3hxTarGX+wKsHw== X-Received: by 2002:a2e:81d5:: with SMTP id s21mr1201533ljg.362.1593448874624; Mon, 29 Jun 2020 09:41:14 -0700 (PDT) From: Szymon Lukasz To: qemu-devel@nongnu.org Subject: [PATCH v3 7/9] qmp: add chardev-resize command Date: Mon, 29 Jun 2020 18:40:39 +0200 Message-Id: <20200629164041.472528-8-noh4hss@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200629164041.472528-1-noh4hss@gmail.com> References: <20200629164041.472528-1-noh4hss@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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::242; envelope-from=noh4hss@gmail.com; helo=mail-lj1-x242.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: lvivier@redhat.com, berrange@redhat.com, amit@kernel.org, mst@redhat.com, Szymon Lukasz , marcandre.lureau@redhat.com, pbonzini@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) 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 --- chardev/char.c | 14 ++++++++++++++ qapi/char.json | 25 +++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/chardev/char.c b/chardev/char.c index 1dc22aca95..c1bdfc8b5f 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -1182,6 +1182,20 @@ void qmp_chardev_send_break(const char *id, Error **= errp) qemu_chr_be_event(chr, CHR_EVENT_BREAK); } =20 +void qmp_chardev_resize(const char *id, uint16_t cols, uint16_t rows, + Error **errp) +{ + Chardev *chr; + + chr =3D qemu_chr_find(id); + if (chr =3D=3D NULL) { + error_setg(errp, "Chardev '%s' not found", id); + return; + } + + qemu_chr_resize(chr, cols, rows); +} + /* * Add a timeout callback for the chardev (in milliseconds), return * the GSource object created. Please use this to add timeout hook for diff --git a/qapi/char.json b/qapi/char.json index daceb20f84..dc2d6cab22 100644 --- a/qapi/char.json +++ b/qapi/char.json @@ -573,3 +573,28 @@ { 'event': 'VSERPORT_CHANGE', 'data': { 'id': 'str', 'open': 'bool' } } + +## +# @chardev-resize: +# +# Notifies a chardev about the current size of the terminal connected +# to this chardev. +# +# @id: the chardev's ID, must exist +# @cols: the number of columns +# @rows: the number of rows +# +# Returns: Nothing on success +# +# Since: 5.1 +# +# Example: +# +# -> { "execute": "chardev-resize", "arguments": { "id": "foo", "cols": 80= , "rows": 24 } } +# <- { "return": {} } +# +## +{ 'command': 'chardev-resize', + 'data': { 'id': 'str', + 'cols': 'uint16', + 'rows': 'uint16' } } --=20 2.27.0 From nobody Thu Apr 18 02:35:34 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1593449262; cv=none; d=zohomail.com; s=zohoarc; b=gV2lM0yEPjfQsWWNNMS2dSx2C0T2NQqaFJLmYJR6HK7oHPGbVJferAQiIsLyh5JjeZTrqQtnLdJbBzc7/HsHnQKY44VjQxmCrBaAUoDCQsGTbGVWLGlE61rx1ou4sxcRxUqnkTU/Ol6iUXwgB/kCmz0aFyf3laJoSvZLukEICMU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1593449262; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=tWhgLwjW7TdEYA/17Uas89v9BJrlzO8BbE+wqJUWIic=; b=OGzf/Vv3Ai4wXEE2QbOV/DFPhl1bYUVdixpMzbLkcp2q7RV5IdqZgq10DCTEkWL6+VFIVpkQvQ7UxiBH256a6viMBxcRKBa4Ma5fVB1vAGmjAT3jystueO/G00kswzC8dLKZTkspWiQ5o2lOSL/QObVtaCcLCMZGpWiCZnsMwvU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1593449262757121.73104451888992; Mon, 29 Jun 2020 09:47:42 -0700 (PDT) Received: from localhost ([::1]:34574 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jpwwX-0000yC-HB for importer@patchew.org; Mon, 29 Jun 2020 12:47:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56032) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpwqO-0000Si-Ac for qemu-devel@nongnu.org; Mon, 29 Jun 2020 12:41:20 -0400 Received: from mail-lj1-x241.google.com ([2a00:1450:4864:20::241]:39670) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jpwqM-0007vr-1K for qemu-devel@nongnu.org; Mon, 29 Jun 2020 12:41:19 -0400 Received: by mail-lj1-x241.google.com with SMTP id b25so15163421ljp.6 for ; Mon, 29 Jun 2020 09:41:17 -0700 (PDT) Received: from localhost.localdomain (193-239-39-51.ksi-system.net. [193.239.39.51]) by smtp.gmail.com with ESMTPSA id o1sm37641lfi.92.2020.06.29.09.41.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Jun 2020 09:41:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=tWhgLwjW7TdEYA/17Uas89v9BJrlzO8BbE+wqJUWIic=; b=XReJ7PGlEoKQJ7fUtde4s6D8BZaDRFHZfVejMDfvctMlRfLuoRLtuJwTb90bWPvIxJ 0tUug+OISEZdnQZ4s1RIwQMqgcxexxkF9W17SQlwuB7UwGssQf4uN8xh/Ul1rggYVTW1 z7BNRgtc1L1dKtBfu61Xp2qsAb1UdSBNUa6LQlQnYPkH0wFRblckI3oo0BbYxsVm9jp2 GFL6P/aUgfV3/+D3CedMPYSCR9UdQlYAEKJoNDiTAco512AC9hXdAjrDfXLZ/YThxeRr 76nX8av0uZQn/urUxgRp2XvkHEzpinosn+/S9tI25dARSlvZvWDq7gC8exgf21aIiGiF 1MfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=tWhgLwjW7TdEYA/17Uas89v9BJrlzO8BbE+wqJUWIic=; b=tsnT7Z6Sl/hr8FtwdTPLnLezzt7myzXd1juGbc49wsuzb7ReX/98Wdnul0z4CP0QnG uJEGy79hk8qRVEvORG0BTxbIzvFf3uMRLC7EIg0cxcCdIhvESw/61qUjhWIvNPgjIr0w /XK93+kDKZ5/mOZveKmcnJsutl4zLhMXkKSEnkkQMMxt7ZvQzLOQm8+euCsv0zQvKxxz Gh1898D+yw6BgiO6t2QuOVyMAnKSV0REHuxHS+meQzxfII21LTbqyhdfB9EzqIg74ACU NFDgLZRMj5KgM9MOWRFw4Q2vaO6Nes0ivtnfCLOF4tlMVQ7VFD4yky7yNid8qiM6dCE9 x0Xw== X-Gm-Message-State: AOAM531tjwEO3qpU0mFYY3MvkTI8yltky80BJrRAdsZV3EFeNd4JpuWP RH25VobKjutN2GrBA1WHEMbKqLU0zRtHbA== X-Google-Smtp-Source: ABdhPJweEhABBEBg0oBX5y8prxbKhc8wyJaOUvVPlSI+zfcP3ng2ZKCXhCf1mwqOCX6dDswIaGqgTA== X-Received: by 2002:a05:651c:511:: with SMTP id o17mr8010957ljp.433.1593448875608; Mon, 29 Jun 2020 09:41:15 -0700 (PDT) From: Szymon Lukasz To: qemu-devel@nongnu.org Subject: [PATCH v3 8/9] virtio-serial-bus: add terminal resize messages Date: Mon, 29 Jun 2020 18:40:40 +0200 Message-Id: <20200629164041.472528-9-noh4hss@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200629164041.472528-1-noh4hss@gmail.com> References: <20200629164041.472528-1-noh4hss@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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::241; envelope-from=noh4hss@gmail.com; helo=mail-lj1-x241.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: lvivier@redhat.com, berrange@redhat.com, amit@kernel.org, mst@redhat.com, Szymon Lukasz , marcandre.lureau@redhat.com, pbonzini@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" 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 the Linux kernel expects the fields indicating the number of rows and columns in a packet to be in a different order than the one specified in the current version of the virtio spec. We follow the Linux implementation, so hopefully there is no implementation of this functionality conforming to the spec. Signed-off-by: Szymon Lukasz Reviewed-by: Michael S. Tsirkin --- hw/char/trace-events | 1 + hw/char/virtio-serial-bus.c | 42 +++++++++++++++++++++++++++++-- hw/core/machine.c | 1 + include/hw/virtio/virtio-serial.h | 5 ++++ 4 files changed, 47 insertions(+), 2 deletions(-) diff --git a/hw/char/trace-events b/hw/char/trace-events index d20eafd56f..be40df47ea 100644 --- a/hw/char/trace-events +++ b/hw/char/trace-events @@ -10,6 +10,7 @@ serial_ioport_write(uint16_t addr, uint8_t value) "write = addr 0x%02x val 0x%02x" =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 262089c0c9..6d9e94a64e 100644 --- a/hw/char/virtio-serial-bus.c +++ b/hw/char/virtio-serial-bus.c @@ -261,6 +261,42 @@ 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 rows; + __virtio16 cols; +}; + +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_vdev_has_feature(vdev, VIRTIO_CONSOLE_F_MULTIPORT)) { + struct { + struct virtio_console_control control; + struct virtio_console_resize resize; + } buffer; + + virtio_stl_p(vdev, &buffer.control.id, port->id); + virtio_stw_p(vdev, &buffer.control.event, VIRTIO_CONSOLE_RESIZE); + virtio_stw_p(vdev, &buffer.resize.cols, cols); + virtio_stw_p(vdev, &buffer.resize.rows, rows); + + trace_virtio_serial_send_console_resize(port->id, cols, rows); + send_control_msg(vser, &buffer, sizeof(buffer)); + + } else if (virtio_vdev_has_feature(vdev, VIRTIO_CONSOLE_F_SIZE)) { + vser->port0_cols =3D cols; + vser->port0_rows =3D rows; + virtio_notify_config(vdev); + } +} + /* Functions for use inside qemu to open and read from/write to ports */ int virtio_serial_open(VirtIOSerialPort *port) { @@ -572,8 +608,8 @@ static void get_config(VirtIODevice *vdev, uint8_t *con= fig_data) struct virtio_console_config *config =3D (struct virtio_console_config *)config_data; =20 - config->cols =3D 0; - config->rows =3D 0; + config->cols =3D virtio_tswap16(vdev, vser->port0_cols); + config->rows =3D virtio_tswap16(vdev, vser->port0_rows); config->max_nr_ports =3D virtio_tswap32(vdev, vser->serial.max_virtserial_port= s); } @@ -1168,6 +1204,8 @@ static 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), DEFINE_PROP_END_OF_LIST(), }; =20 diff --git a/hw/core/machine.c b/hw/core/machine.c index 1d80ab0e1d..c370c220f0 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -30,6 +30,7 @@ =20 GlobalProperty hw_compat_5_0[] =3D { { "virtio-balloon-device", "page-poison", "false" }, + { "virtio-serial-device", "console-size", "off" }, }; const size_t hw_compat_5_0_len =3D G_N_ELEMENTS(hw_compat_5_0); =20 diff --git a/include/hw/virtio/virtio-serial.h b/include/hw/virtio/virtio-s= erial.h index ed3e916b68..1d6436c0b1 100644 --- a/include/hw/virtio/virtio-serial.h +++ b/include/hw/virtio/virtio-serial.h @@ -188,6 +188,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 */ @@ -222,6 +224,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" #define VIRTIO_SERIAL(obj) \ OBJECT_CHECK(VirtIOSerial, (obj), TYPE_VIRTIO_SERIAL) --=20 2.27.0 From nobody Thu Apr 18 02:35:34 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1593449078; cv=none; d=zohomail.com; s=zohoarc; b=K1YtgCC4QW3qy9B9zRTqdWV73+JfU5oWuk4hDDX/agoJaAYBiVF0VSf1iP2TSw7ikBt5kX1eyhJwLdGsft9vi9iiZRdyIfvqZkb/s0Do/iZh0zg7FRYr06A/5YUIaLeiZ3esp/BL8KkYQ9FZm+aeEQu93AiAgIgb8YgJO8i26ss= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1593449078; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=lxRZU+ONjViNlnT9aeawgp2hWsb4PWJp8EM9YziKpEc=; b=R20b3RsMDuEvjZqSM027+/qgfAJ3odv4rceMn9lgsF1NYeALjF/H7ZaJ4GGlhXHf2T79kb3/Mg91hMH06LhDXEeuEg6OpZtXZdnNzTdoX0sZ/r3mvS7BRkF4NR85ALpACzA3HeLD5yElJ3rJ4OoQ9sV3CfC1lYRrvuUQMJntvRA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1593449078789373.2837488874062; Mon, 29 Jun 2020 09:44:38 -0700 (PDT) Received: from localhost ([::1]:54256 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jpwtZ-0005cM-EN for importer@patchew.org; Mon, 29 Jun 2020 12:44:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56034) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpwqO-0000TU-MG for qemu-devel@nongnu.org; Mon, 29 Jun 2020 12:41:20 -0400 Received: from mail-lj1-x244.google.com ([2a00:1450:4864:20::244]:43398) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jpwqM-0007vz-Hq for qemu-devel@nongnu.org; Mon, 29 Jun 2020 12:41:20 -0400 Received: by mail-lj1-x244.google.com with SMTP id f5so2872540ljj.10 for ; Mon, 29 Jun 2020 09:41:18 -0700 (PDT) Received: from localhost.localdomain (193-239-39-51.ksi-system.net. [193.239.39.51]) by smtp.gmail.com with ESMTPSA id o1sm37641lfi.92.2020.06.29.09.41.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Jun 2020 09:41:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=lxRZU+ONjViNlnT9aeawgp2hWsb4PWJp8EM9YziKpEc=; b=psZD/KCrAxEwzTi6rVTwzyiJHNDg6NSFsnHzCsPBrcmp765C1ef2RNv1zNGY6FFclV qJ8owjNWHQ7VbjKSFuLlnuHZhehIedW4JVotmmXpAX0aD8pT9txQZtlaqERa7iE+Z9yy TcEXh+sXIiThs3xAmL+zro7tQkpNhbwYL9SuofwtAWKZwspx7DcVF/a0EhWC6hFeem7H zOaPRY/ncDq4gnEHwunk50TsAwQ9dZ0b63KI6pNjiyGtcwKcUonlGH5v4tQiI6fhPnwR Lg4vnJVvJ3W7Y9RqojT0WgSnC99JVmwf+5YEsP0quxdZfqXwqZ4EcM1tmvyO1j7UEeYt V3lg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=lxRZU+ONjViNlnT9aeawgp2hWsb4PWJp8EM9YziKpEc=; b=FUWwxEvuSdfB2QQJkL1Ta5evEzB7jAFvSnUDiHUCwC80eealfqsWrtIttpK+cdV1nX lIdKK1D14PGWnnixwW154UdtL5Mv3/snYfqIMFCc4L+jhDqgEBAhZ3nnPUh19owo7qGL 3GOeJiuFEFE8Tj5WKq9HCl7RaExEnQEPhhESNjFcyI1CfXj0bBeT+cQ81lUkXugaro65 O/hP6gmwSpjyomy1F9XukjGvSHvSp37essKcOb+d7JHYhkoPY7SSJU1+XLg0SEbVmlA/ M1MrTF6CBsyPCT2iKb7rPGW8J2FKQA0IGFPmntANBIlnvQ0pJHC4vI16rAQ/PcYC56Ee dAYQ== X-Gm-Message-State: AOAM532jI6S2OreTWe1s6jlWOxeAeO/btORktB/6wnr+D07zdeQ6tpd6 ThEIBZsGudXmUBVrqFnrouCTUwBXVn0h8Q== X-Google-Smtp-Source: ABdhPJx4JZyHB5X7x4LBUxKub8f+FBsV3RuP4OqpI2RxrTGRp/UhRm+OLNS30h4VBpyZAibhFjUZPQ== X-Received: by 2002:a2e:8ed3:: with SMTP id e19mr8852615ljl.72.1593448876595; Mon, 29 Jun 2020 09:41:16 -0700 (PDT) From: Szymon Lukasz To: qemu-devel@nongnu.org Subject: [PATCH v3 9/9] virtio-console: notify the guest about terminal resizes Date: Mon, 29 Jun 2020 18:40:41 +0200 Message-Id: <20200629164041.472528-10-noh4hss@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200629164041.472528-1-noh4hss@gmail.com> References: <20200629164041.472528-1-noh4hss@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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::244; envelope-from=noh4hss@gmail.com; helo=mail-lj1-x244.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: lvivier@redhat.com, berrange@redhat.com, amit@kernel.org, mst@redhat.com, Szymon Lukasz , marcandre.lureau@redhat.com, pbonzini@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" 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 --- 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 97b9240ef5..c4c2c7a844 100644 --- a/hw/char/virtio-console.c +++ b/hw/char/virtio-console.c @@ -29,6 +29,7 @@ typedef struct VirtConsole { =20 CharBackend chr; guint watch; + uint16_t cols, rows; } VirtConsole; =20 /* @@ -104,6 +105,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) { @@ -111,7 +139,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 @@ -171,6 +201,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; @@ -179,7 +226,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); @@ -207,7 +256,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, @@ -227,6 +276,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 @@ -239,7 +293,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.27.0