From nobody Mon Nov 17 13:45:33 2025 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=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1604498120; cv=none; d=zohomail.com; s=zohoarc; b=MOSZDvPfIGrLB3KicxITEf+xoBqJ4gietQpQLdVF7ohQeBowR4PAO4I2WNkSDtmtICDnzqWpG72CJWfDZaRF549fzlavHP9nEeN+Mq7KtwXVkE5+WJgfDJ83UVZMFIr1n9l8Lhm6FfrBd7Q8DC5dhvk+Eza7eaJNRrEaCYQfliE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1604498120; 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=rwHvnchTG1ZbFYaKV7uGi8lOlG33T5ID8s9iw/JqnAk=; b=LJjKBJ24eKN8qwVhBvtWYorAitaWnML5RmR06jWvKXXAp8Ak+1dJ5tpyJyFLec4iTLgTmPOt2sjmAo3scTlkwAbfgs8hERblFeRNueiHcEYmzQnIEaEtxkvc7oj8XuyG5v18P+7VprwRFE0tQ0Q3k9Htd+bZe9rqnswYZJ5t0Vs= 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 1604498120752167.71581759391017; Wed, 4 Nov 2020 05:55:20 -0800 (PST) Received: from localhost ([::1]:43528 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kaJFv-0000Sa-9S for importer@patchew.org; Wed, 04 Nov 2020 08:55:19 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:60878) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kaJEv-0007iE-Em for qemu-devel@nongnu.org; Wed, 04 Nov 2020 08:54:17 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:43066) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kaJEs-0004NS-93 for qemu-devel@nongnu.org; Wed, 04 Nov 2020 08:54:16 -0500 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-547-dSjNuUTpO-ymZvVnJIMiGg-1; Wed, 04 Nov 2020 08:54:12 -0500 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 19B5910866B2 for ; Wed, 4 Nov 2020 13:54:11 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-114-66.ams2.redhat.com [10.36.114.66]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0C8F26EF55; Wed, 4 Nov 2020 13:54:01 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 04D439D0F; Wed, 4 Nov 2020 14:54:01 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1604498053; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=rwHvnchTG1ZbFYaKV7uGi8lOlG33T5ID8s9iw/JqnAk=; b=Q2oJGUQAeGMq9K5SFWOgfuUaUbdSGDrtYR7H/Br7I8BrZ3nnzx7/Q4CzITJi3cYM1gt+TL vzbL7A3L6GZ++9R5/TWtcU6HAuOHiNmPBfIPexJTWM98VH5k2olOHuL85jShzNCtvIKXT5 3ljdNIw7GvaFZzwA6D+Hn1DpS7rNy8E= X-MC-Unique: dSjNuUTpO-ymZvVnJIMiGg-1 From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PULL 1/3] coroutine: let CoQueue wake up outside a coroutine Date: Wed, 4 Nov 2020 14:53:58 +0100 Message-Id: <20201104135400.3938-2-kraxel@redhat.com> In-Reply-To: <20201104135400.3938-1-kraxel@redhat.com> References: <20201104135400.3938-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com 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=216.205.24.124; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/11/03 00:03:41 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] 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, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, 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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , Markus Armbruster , "Dr. David Alan Gilbert" , Gerd Hoffmann , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) From: Marc-Andr=C3=A9 Lureau The assert() was added in commit b681a1c73e15 ("block: Repair the throttling code."), when the qemu_co_queue_do_restart() function required to be running in a coroutine. It was later made unnecessary in commit a9d9235567e7 ("coroutine-lock: reschedule coroutine on the AioContext it was running on"). Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Kevin Wolf Reviewed-by: Gerd Hoffmann Message-id: 20201027133602.3038018-2-marcandre.lureau@redhat.com Signed-off-by: Gerd Hoffmann --- util/qemu-coroutine-lock.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/util/qemu-coroutine-lock.c b/util/qemu-coroutine-lock.c index 36927b5f88d5..5816bf890094 100644 --- a/util/qemu-coroutine-lock.c +++ b/util/qemu-coroutine-lock.c @@ -85,15 +85,13 @@ static bool qemu_co_queue_do_restart(CoQueue *queue, bo= ol single) return true; } =20 -bool coroutine_fn qemu_co_queue_next(CoQueue *queue) +bool qemu_co_queue_next(CoQueue *queue) { - assert(qemu_in_coroutine()); return qemu_co_queue_do_restart(queue, true); } =20 -void coroutine_fn qemu_co_queue_restart_all(CoQueue *queue) +void qemu_co_queue_restart_all(CoQueue *queue) { - assert(qemu_in_coroutine()); qemu_co_queue_do_restart(queue, false); } =20 --=20 2.27.0 From nobody Mon Nov 17 13:45:33 2025 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=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1604498213; cv=none; d=zohomail.com; s=zohoarc; b=PNkINYEJpsDFlvhtN0RofUxbE6E21ws1l57fMM5v6vklTWAp8JvDh9wl7Yr0vm+Fw3/5sXREwap2JdDE+Huqq6uYzPZs+pBrWAtvWUtkQMwuNKhShoYYwake9RdSbukwoT8PlGe6mIpqS9g4Kl7wtXWNIcNE4FAS9iUEIFjfkDk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1604498213; 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=d3T0nVSO1TlDaCTLzS4EOAOOO+xs8I0EcLaLiqJr7Ks=; b=FSRW87dffyB0yNxJZrJl+pacETQvK+BbsFhpqVbdGAuxVBZpjewsFVYH5QcycFvQ4jNuB9fcu2lsZptKXAbP09cohVsbpbiOiy2HSPcU10d8+RVHLu1lgyzrkDhGgsZmILocnQLHagtOngldt2RWuwuXcCpzKJ3tWlqvvb0RmyI= 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 1604498213508387.4631820260922; Wed, 4 Nov 2020 05:56:53 -0800 (PST) Received: from localhost ([::1]:48690 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kaJHQ-0002cP-B4 for importer@patchew.org; Wed, 04 Nov 2020 08:56:52 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:60918) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kaJEz-0007mE-0K for qemu-devel@nongnu.org; Wed, 04 Nov 2020 08:54:21 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:21670) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kaJEx-0004O2-5J for qemu-devel@nongnu.org; Wed, 04 Nov 2020 08:54:20 -0500 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-199-l3fLFgOFNDKSDrHXMBq8Mg-1; Wed, 04 Nov 2020 08:54:16 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 89A1E6414C for ; Wed, 4 Nov 2020 13:54:15 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-114-66.ams2.redhat.com [10.36.114.66]) by smtp.corp.redhat.com (Postfix) with ESMTP id 1561A5DA33; Wed, 4 Nov 2020 13:54:01 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 0FBCB9D15; Wed, 4 Nov 2020 14:54:01 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1604498058; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=d3T0nVSO1TlDaCTLzS4EOAOOO+xs8I0EcLaLiqJr7Ks=; b=MQwcnjM7KMPiha05dNrxU8sS7Fbf6YYbtjKKDnvU98KZpnqZ50lFWfzF6X8vEsFl60YLbQ b/r9by6wdnUWzLZyBx0RtDHkS4JaNL4/AQqVE5nfzDLHPv3yc9a3oUAhQDjVeUvzF2itOC mpc3oYmbiNzp74u5w3Jiaozye61MZhU= X-MC-Unique: l3fLFgOFNDKSDrHXMBq8Mg-1 From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PULL 2/3] console: modify ppm_save to take a pixman image ref Date: Wed, 4 Nov 2020 14:53:59 +0100 Message-Id: <20201104135400.3938-3-kraxel@redhat.com> In-Reply-To: <20201104135400.3938-1-kraxel@redhat.com> References: <20201104135400.3938-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com 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=216.205.24.124; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/11/03 00:03:41 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] 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, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, 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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , Markus Armbruster , "Dr. David Alan Gilbert" , Gerd Hoffmann , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) From: Marc-Andr=C3=A9 Lureau The function is going to be called from a coroutine, and may yield. Let's ensure our image reference doesn't change over time (due to resize etc) by keeping a ref. Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Markus Armbruster Reviewed-by: Gerd Hoffmann Message-id: 20201027133602.3038018-3-marcandre.lureau@redhat.com Signed-off-by: Gerd Hoffmann --- ui/console.c | 15 ++++++++------- ui/trace-events | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/ui/console.c b/ui/console.c index 820e4081709d..96dd212a5de7 100644 --- a/ui/console.c +++ b/ui/console.c @@ -195,7 +195,6 @@ static void dpy_refresh(DisplayState *s); static DisplayState *get_alloc_displaystate(void); static void text_console_update_cursor_timer(void); static void text_console_update_cursor(void *opaque); -static bool ppm_save(int fd, DisplaySurface *ds, Error **errp); =20 static void gui_update(void *opaque) { @@ -311,16 +310,16 @@ void graphic_hw_invalidate(QemuConsole *con) } } =20 -static bool ppm_save(int fd, DisplaySurface *ds, Error **errp) +static bool ppm_save(int fd, pixman_image_t *image, Error **errp) { - int width =3D pixman_image_get_width(ds->image); - int height =3D pixman_image_get_height(ds->image); + int width =3D pixman_image_get_width(image); + int height =3D pixman_image_get_height(image); g_autoptr(Object) ioc =3D OBJECT(qio_channel_file_new_fd(fd)); g_autofree char *header =3D NULL; g_autoptr(pixman_image_t) linebuf =3D NULL; int y; =20 - trace_ppm_save(fd, ds); + trace_ppm_save(fd, image); =20 header =3D g_strdup_printf("P6\n%d %d\n%d\n", width, height, 255); if (qio_channel_write_all(QIO_CHANNEL(ioc), @@ -330,7 +329,7 @@ static bool ppm_save(int fd, DisplaySurface *ds, Error = **errp) =20 linebuf =3D qemu_pixman_linebuf_create(PIXMAN_BE_r8g8b8, width); for (y =3D 0; y < height; y++) { - qemu_pixman_linebuf_fill(linebuf, ds->image, width, 0, y); + qemu_pixman_linebuf_fill(linebuf, image, width, 0, y); if (qio_channel_write_all(QIO_CHANNEL(ioc), (char *)pixman_image_get_data(linebuf), pixman_image_get_stride(linebuf), errp) = < 0) { @@ -344,6 +343,7 @@ static bool ppm_save(int fd, DisplaySurface *ds, Error = **errp) void qmp_screendump(const char *filename, bool has_device, const char *dev= ice, bool has_head, int64_t head, Error **errp) { + g_autoptr(pixman_image_t) image =3D NULL; QemuConsole *con; DisplaySurface *surface; int fd; @@ -372,6 +372,7 @@ void qmp_screendump(const char *filename, bool has_devi= ce, const char *device, error_setg(errp, "no surface"); return; } + image =3D pixman_image_ref(surface->image); =20 fd =3D qemu_open_old(filename, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY= , 0666); if (fd =3D=3D -1) { @@ -380,7 +381,7 @@ void qmp_screendump(const char *filename, bool has_devi= ce, const char *device, return; } =20 - if (!ppm_save(fd, surface, errp)) { + if (!ppm_save(fd, image, errp)) { qemu_unlink(filename); } } diff --git a/ui/trace-events b/ui/trace-events index b7d7270c02c6..0ffcdb4408a6 100644 --- a/ui/trace-events +++ b/ui/trace-events @@ -15,7 +15,7 @@ displaysurface_create_pixman(void *display_surface) "surf= ace=3D%p" displaysurface_free(void *display_surface) "surface=3D%p" displaychangelistener_register(void *dcl, const char *name) "%p [ %s ]" displaychangelistener_unregister(void *dcl, const char *name) "%p [ %s ]" -ppm_save(int fd, void *display_surface) "fd=3D%d surface=3D%p" +ppm_save(int fd, void *image) "fd=3D%d image=3D%p" =20 # gtk-egl.c # gtk-gl-area.c --=20 2.27.0 From nobody Mon Nov 17 13:45:33 2025 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=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1604498123; cv=none; d=zohomail.com; s=zohoarc; b=ZLvCmx4fWiUtLyZNcmei5qpnSQmZOUFBDq7AL6cc+viF3jtKLGlbCOpR9//iQ9NOWeG20b2N2bb/FxlM5LfTyYt79MaMHEQYSOqS7PF82yo8wDJ3JFP2jZ7Pv6enjT+5Am2czILgUgDHf/qQHMZft+W0cB7DR9SODfDs45EAT34= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1604498123; 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=Jj8cUGvBZDK57j4c2vxH0883QyV+vbZcEJD6vhK9ba4=; b=cVjC73SZX+cGMJCy1whpqlSQks+026QY0zz+x6ddyDIt05IN9gDhuxnWOvNPCG4O9Jk+5L7dvnf6o20TMmg/IL4x5umHJV7otQ/Li5TYNJEIC3OEjk3KoldWlezB78vGPf+DlBElKBFXi0W5saiViXmWR9c/djD8odubF909bQM= 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 1604498123359527.1355546753729; Wed, 4 Nov 2020 05:55:23 -0800 (PST) Received: from localhost ([::1]:43772 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kaJFy-0000YX-2a for importer@patchew.org; Wed, 04 Nov 2020 08:55:22 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:60906) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kaJEw-0007iQ-Kx for qemu-devel@nongnu.org; Wed, 04 Nov 2020 08:54:18 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:55650) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kaJEu-0004NY-64 for qemu-devel@nongnu.org; Wed, 04 Nov 2020 08:54:18 -0500 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-363-19QHmijzPVaUsLCOH5bF2g-1; Wed, 04 Nov 2020 08:54:13 -0500 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id AAEAA186DD2B for ; Wed, 4 Nov 2020 13:54:12 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-114-66.ams2.redhat.com [10.36.114.66]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0C813702E7; Wed, 4 Nov 2020 13:54:01 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 1E76C9D16; Wed, 4 Nov 2020 14:54:01 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1604498055; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Jj8cUGvBZDK57j4c2vxH0883QyV+vbZcEJD6vhK9ba4=; b=Qx1pZ5tOoEyNugnjfs1Cou8wGiC2WaHbnL5Rid3rPAiBxBVVwIZd/VK5nONCwmJBEJ3qlI QWqIJ5uovmscHRgNONFirTZazph86vB3zl92WZ10fmmDmiqj2pFBKkheUYjzJ65DATncV0 56IaDrxr1RNepwFvW0T3YmspNs6HcVg= X-MC-Unique: 19QHmijzPVaUsLCOH5bF2g-1 From: Gerd Hoffmann To: qemu-devel@nongnu.org Subject: [PULL 3/3] console: make QMP/HMP screendump run in coroutine Date: Wed, 4 Nov 2020 14:54:00 +0100 Message-Id: <20201104135400.3938-4-kraxel@redhat.com> In-Reply-To: <20201104135400.3938-1-kraxel@redhat.com> References: <20201104135400.3938-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kraxel@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com 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=216.205.24.124; envelope-from=kraxel@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/11/03 00:03:41 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] 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, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, 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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , Markus Armbruster , "Dr. David Alan Gilbert" , Gerd Hoffmann , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) From: Marc-Andr=C3=A9 Lureau Thanks to the monitors' coroutine support (merge commit b7092cda1b3), the screendump handler can trigger a graphic_hw_update(), yield and let the main loop run until update is done. Then the handler is resumed, and ppm_save() will write the screen image to disk in the coroutine context. The IO is still blocking though, as the file is set blocking so far, this could be addressed by some future change (with other caveats). Related to: https://bugzilla.redhat.com/show_bug.cgi?id=3D1230527 Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Gerd Hoffmann Reviewed-by: Markus Armbruster Message-id: 20201027133602.3038018-4-marcandre.lureau@redhat.com Signed-off-by: Gerd Hoffmann --- monitor/hmp-cmds.c | 3 ++- ui/console.c | 32 +++++++++++++++++++++++++++++--- hmp-commands.hx | 1 + qapi/ui.json | 3 ++- 4 files changed, 34 insertions(+), 5 deletions(-) diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c index 56e9bad33d94..a6a6684df1c6 100644 --- a/monitor/hmp-cmds.c +++ b/monitor/hmp-cmds.c @@ -1762,7 +1762,8 @@ err_out: goto out; } =20 -void hmp_screendump(Monitor *mon, const QDict *qdict) +void coroutine_fn +hmp_screendump(Monitor *mon, const QDict *qdict) { const char *filename =3D qdict_get_str(qdict, "filename"); const char *id =3D qdict_get_try_str(qdict, "device"); diff --git a/ui/console.c b/ui/console.c index 96dd212a5de7..e8e59707d38c 100644 --- a/ui/console.c +++ b/ui/console.c @@ -168,6 +168,7 @@ struct QemuConsole { QEMUFIFO out_fifo; uint8_t out_fifo_buf[16]; QEMUTimer *kbd_timer; + CoQueue dump_queue; =20 QTAILQ_ENTRY(QemuConsole) next; }; @@ -263,6 +264,7 @@ static void gui_setup_refresh(DisplayState *ds) =20 void graphic_hw_update_done(QemuConsole *con) { + qemu_co_queue_restart_all(&con->dump_queue); } =20 void graphic_hw_update(QemuConsole *con) @@ -340,8 +342,15 @@ static bool ppm_save(int fd, pixman_image_t *image, Er= ror **errp) return true; } =20 -void qmp_screendump(const char *filename, bool has_device, const char *dev= ice, - bool has_head, int64_t head, Error **errp) +static void graphic_hw_update_bh(void *con) +{ + graphic_hw_update(con); +} + +/* Safety: coroutine-only, concurrent-coroutine safe, main thread only */ +void coroutine_fn +qmp_screendump(const char *filename, bool has_device, const char *device, + bool has_head, int64_t head, Error **errp) { g_autoptr(pixman_image_t) image =3D NULL; QemuConsole *con; @@ -366,7 +375,18 @@ void qmp_screendump(const char *filename, bool has_dev= ice, const char *device, } } =20 - graphic_hw_update(con); + if (qemu_co_queue_empty(&con->dump_queue)) { + /* Defer the update, it will restart the pending coroutines */ + aio_bh_schedule_oneshot(qemu_get_aio_context(), + graphic_hw_update_bh, con); + } + qemu_co_queue_wait(&con->dump_queue, NULL); + + /* + * All pending coroutines are woken up, while the BQL is held. No + * further graphic update are possible until it is released. Take + * an image ref before that. + */ surface =3D qemu_console_surface(con); if (!surface) { error_setg(errp, "no surface"); @@ -381,6 +401,11 @@ void qmp_screendump(const char *filename, bool has_dev= ice, const char *device, return; } =20 + /* + * The image content could potentially be updated as the coroutine + * yields and releases the BQL. It could produce corrupted dump, but + * it should be otherwise safe. + */ if (!ppm_save(fd, image, errp)) { qemu_unlink(filename); } @@ -1297,6 +1322,7 @@ static QemuConsole *new_console(DisplayState *ds, con= sole_type_t console_type, =20 obj =3D object_new(TYPE_QEMU_CONSOLE); s =3D QEMU_CONSOLE(obj); + qemu_co_queue_init(&s->dump_queue); s->head =3D head; object_property_add_link(obj, "device", TYPE_DEVICE, (Object **)&s->device, diff --git a/hmp-commands.hx b/hmp-commands.hx index cd068389de57..ff2d7aa8f3e3 100644 --- a/hmp-commands.hx +++ b/hmp-commands.hx @@ -254,6 +254,7 @@ ERST .help =3D "save screen from head 'head' of display device 'd= evice' " "into PPM image 'filename'", .cmd =3D hmp_screendump, + .coroutine =3D true, }, =20 SRST diff --git a/qapi/ui.json b/qapi/ui.json index 9d6721037f5b..6c7b33cb7238 100644 --- a/qapi/ui.json +++ b/qapi/ui.json @@ -98,7 +98,8 @@ # ## { 'command': 'screendump', - 'data': {'filename': 'str', '*device': 'str', '*head': 'int'} } + 'data': {'filename': 'str', '*device': 'str', '*head': 'int'}, + 'coroutine': true } =20 ## # =3D=3D Spice --=20 2.27.0