From nobody Fri May 10 16:01:26 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=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1603806053; cv=none; d=zohomail.com; s=zohoarc; b=S8RkDMH2Oe6Gh7cOojWPa/eUYyEruSGMqfgpcWGifPDfAPR5GPPaugBSGIilH8QppdJJ3CGGmt0ncHcT3yXB0zbc89yd6aSkALySXJSYfOwhCpdf4P6vbXu6Yx/Fx73Muxc+OXE9o7orH4cdykPvc26SADU89szIbSwPaLt9PvY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1603806053; 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=FRSaQBMLBhUwDJ3iMbMAWrjt28HjzxsIxrLzvEBEz4s=; b=l8+O+4Q+GfDGTAVi4e5IXag6kz1CrtzCSsaKfbjsF8CZKUHtD3X+1AKr4fYQIKRJcReTbjyzzrWpJO2iJFU5rS9CoXMps5/NSx38C4q4dSrqumCs0B3ph+O1ZeazkqDdAvEua+scKrgVWhq9Y2l1Qn/uYWsH6Uh4wz0zsUXgnmU= 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 1603806053866332.58839365653716; Tue, 27 Oct 2020 06:40:53 -0700 (PDT) Received: from localhost ([::1]:32800 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kXPDZ-0000zJ-2p for importer@patchew.org; Tue, 27 Oct 2020 09:40:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58150) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kXP9O-0004FF-PJ for qemu-devel@nongnu.org; Tue, 27 Oct 2020 09:36:34 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:45780) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kXP9M-0001HF-K1 for qemu-devel@nongnu.org; Tue, 27 Oct 2020 09:36:34 -0400 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-289-1KyocUv4PRS9vb0gjI_8Xw-1; Tue, 27 Oct 2020 09:36:29 -0400 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id E907664089 for ; Tue, 27 Oct 2020 13:36:28 +0000 (UTC) Received: from localhost (unknown [10.36.110.28]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9470A55781; Tue, 27 Oct 2020 13:36:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1603805791; 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=FRSaQBMLBhUwDJ3iMbMAWrjt28HjzxsIxrLzvEBEz4s=; b=Xut/IGyYJ15IyYCI94mPDOPzbzaJtvAPqffeHDjCxKJr/6T4+mpHzI2Xv7fx/YP+mXXTa5 GPj/WPhZVbflR3ECTLSe+0eVvKfiE14ZiLF+61XcaQEBfxwiquWGwNCVq6JJON/IVm0BQY aoe2qPPWtCJZQyyeVQw5C6gFpcQkG+8= X-MC-Unique: 1KyocUv4PRS9vb0gjI_8Xw-1 From: marcandre.lureau@redhat.com To: qemu-devel@nongnu.org Subject: [PATCH v2 1/3] coroutine: let CoQueue wake up outside a coroutine Date: Tue, 27 Oct 2020 17:36:00 +0400 Message-Id: <20201027133602.3038018-2-marcandre.lureau@redhat.com> In-Reply-To: <20201027133602.3038018-1-marcandre.lureau@redhat.com> References: <20201027133602.3038018-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=marcandre.lureau@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=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/10/27 01:06:06 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" , kraxel@redhat.com, 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 --- 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 36927b5f88..5816bf8900 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.29.0 From nobody Fri May 10 16:01:26 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=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1603806568; cv=none; d=zohomail.com; s=zohoarc; b=DALq79e/Vidl6UwgLF+aRdCwvbM67324rWLYjHN/6s/LHzUwZqQPA/ZChdAc3ju/RUTLTAJJnYZCE0ioNY9wo7XmMJBRgmczbDSkRF3kbuREjNAaQ446oouRZ8/pTnlqgmb9n918ciOWpnxTXIWx9T5+R5QOvszQP77GBc3c910= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1603806568; 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=wxJHwQmUt1ptprRKBcFuqVmqeEIFTyIvWVyIfcstsk0=; b=I7NGnFgxbuotpT1A/Vu6Z0ys5oUeoh46LFUIJaZ1n/szpTSDItbYX0M0miO9el236Wbxsu7I7Ft7Z0/CctZ9YIgVeXukv0yDOH81K/dfXebhRuZGSYOZj9H7i9Gi1T2a5AcEUe9pqXJ4AXQME6Z/hRWGdneBQ8RZ34xMWpSXOO0= 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 16038065684366.074691267937965; Tue, 27 Oct 2020 06:49:28 -0700 (PDT) Received: from localhost ([::1]:57370 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kXPLr-00038V-8j for importer@patchew.org; Tue, 27 Oct 2020 09:49:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58266) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kXP9l-0004jD-SK for qemu-devel@nongnu.org; Tue, 27 Oct 2020 09:36:57 -0400 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:25388) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kXP9k-0001KA-0g for qemu-devel@nongnu.org; Tue, 27 Oct 2020 09:36:57 -0400 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-346-SxeaxA23N-yLHyMsag3APw-1; Tue, 27 Oct 2020 09:36:53 -0400 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 78B96186DD51 for ; Tue, 27 Oct 2020 13:36:52 +0000 (UTC) Received: from localhost (unknown [10.36.110.28]) by smtp.corp.redhat.com (Postfix) with ESMTP id A287E76662; Tue, 27 Oct 2020 13:36:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1603805815; 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=wxJHwQmUt1ptprRKBcFuqVmqeEIFTyIvWVyIfcstsk0=; b=SJ1cCNTkF4rg1vPnV7LVldUq14V0ppmNJmHguzx7PApIWxBm8GX2kn0FmG9XsMHj01aMuR u1VzFDC7+caNjkmZn5tsEWjvsjPFWqXB/s/96q2qs5c/Tb7gSi6EhCeYEDhR2Sc3CrB4BH VG6EOSjn9X2ZZE8wYc5br9T9NiWggjA= X-MC-Unique: SxeaxA23N-yLHyMsag3APw-1 From: marcandre.lureau@redhat.com To: qemu-devel@nongnu.org Subject: [PATCH v2 2/3] console: modify ppm_save to take a pixman image ref Date: Tue, 27 Oct 2020 17:36:01 +0400 Message-Id: <20201027133602.3038018-3-marcandre.lureau@redhat.com> In-Reply-To: <20201027133602.3038018-1-marcandre.lureau@redhat.com> References: <20201027133602.3038018-1-marcandre.lureau@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=marcandre.lureau@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=63.128.21.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/10/27 01:06:07 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_H5=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" , kraxel@redhat.com, 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 --- 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 820e408170..96dd212a5d 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 b7d7270c02..0ffcdb4408 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.29.0 From nobody Fri May 10 16:01:26 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=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1603806705; cv=none; d=zohomail.com; s=zohoarc; b=hBXb5X5fkWnSj32La0rO29ZspU0Rr1/aGjn3HRS0qLC2BrR7jYIc5uz/R/2WXFtiKs7/y05RpylkbVmwFPWKR7Bi2PzAd8dfByTztELXbYUYiqaSxQ15w4TkKyMOI+xVtZwG+swbrRAk7FzxXcXQHO4PavtxnS/FXctaHJo4d4w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1603806705; 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=Ef1BaD9fgkOh6duaZmupycqxuCeyxF336AjpXmD4zR8=; b=j04JnzXyGaoIm0FgN6/HOmkmsN4OLARH1pzqIVgWG3RVOS2LI3dIVJZHDrlHULVR5iAY8LoDBgzYc0V6qGpbd893R86+Gu6OKVjaAWLhJpsNddM3qLB8T0/Ho41cmQKkpVfceD13Uma40+6XJ+/iUg71bS2ET4HPLAxhncf4SNE= 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 160380670527383.16708529679511; Tue, 27 Oct 2020 06:51:45 -0700 (PDT) Received: from localhost ([::1]:35788 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kXPO4-00061n-12 for importer@patchew.org; Tue, 27 Oct 2020 09:51:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58396) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kXPA8-00054n-Lc for qemu-devel@nongnu.org; Tue, 27 Oct 2020 09:37:21 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:51840) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kXPA6-0001ND-M3 for qemu-devel@nongnu.org; Tue, 27 Oct 2020 09:37:20 -0400 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-31-xbQxPeI9MQivpwbTv0Ia8A-1; Tue, 27 Oct 2020 09:37:16 -0400 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 42BAC18B9EC3 for ; Tue, 27 Oct 2020 13:37:15 +0000 (UTC) Received: from localhost (unknown [10.36.110.28]) by smtp.corp.redhat.com (Postfix) with ESMTP id BB6575D9DD; Tue, 27 Oct 2020 13:36:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1603805838; 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=Ef1BaD9fgkOh6duaZmupycqxuCeyxF336AjpXmD4zR8=; b=foDapy6r1VpCxYfh2f03r1673iPoMoVfwWEKkF6sOHLWY/fF/fyP9cPtGf9KO+CjOFwjEv JXvNhvwZsZPRzGDlKAe58RdgEofqzAhmXGVkYQsc/Q4DUhWL4baj1zOeog+ZmO1HXWeY9L SA4EyXENpSs30sKOnRAW58/FAt2eCTA= X-MC-Unique: xbQxPeI9MQivpwbTv0Ia8A-1 From: marcandre.lureau@redhat.com To: qemu-devel@nongnu.org Subject: [PATCH v2 3/3] console: make QMP/HMP screendump run in coroutine Date: Tue, 27 Oct 2020 17:36:02 +0400 Message-Id: <20201027133602.3038018-4-marcandre.lureau@redhat.com> In-Reply-To: <20201027133602.3038018-1-marcandre.lureau@redhat.com> References: <20201027133602.3038018-1-marcandre.lureau@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=marcandre.lureau@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=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/10/27 01:06:06 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" , kraxel@redhat.com, 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 --- hmp-commands.hx | 1 + monitor/hmp-cmds.c | 3 ++- qapi/ui.json | 3 ++- ui/console.c | 32 +++++++++++++++++++++++++++++--- 4 files changed, 34 insertions(+), 5 deletions(-) diff --git a/hmp-commands.hx b/hmp-commands.hx index cd068389de..ff2d7aa8f3 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/monitor/hmp-cmds.c b/monitor/hmp-cmds.c index 9789f4277f..91608bac6d 100644 --- a/monitor/hmp-cmds.c +++ b/monitor/hmp-cmds.c @@ -1756,7 +1756,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/qapi/ui.json b/qapi/ui.json index 9d6721037f..6c7b33cb72 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 diff --git a/ui/console.c b/ui/console.c index 96dd212a5d..e8e59707d3 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, --=20 2.29.0