From nobody Sun May 19 07:31:35 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1696505478; cv=none; d=zohomail.com; s=zohoarc; b=KdjBnrnDpIG/mHQDhh7J0uXUj22FRH6Zj7Q/ifRyacGVDn0Vi7LDZE85thaQ/246JtB6w1a3EmrqmEsJYTwRDuuuS8Mi6nV6JgAPzjZIJ7WnpXI7rF4nXvR06cYUPsJ0jtoh41CZssWJYFSC0KcsuN+ql1QUUST0q7zcC6rFiBA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1696505478; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=rHtA+pPOFOlVhp48hdSblnV8lDl92CBHBGu50WLxLUo=; b=Am5PX9riwg+E0DyeTOx4NpEUExLKlVM8GNmLsQuy13GXdeco1kPVMSIszp1WVLPNyofeQn7ZIOKwEZiD47lEjv4+2tDvi3JJxxPVAs9+CjADMDYejaW7PruAANTvXGjugshEfo9Ch+spZJfnkNBbYxbj5kN3Rp9u8iOR8hOi/c8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1696505478412195.89616531229717; Thu, 5 Oct 2023 04:31:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qoMZ1-0004eZ-4U; Thu, 05 Oct 2023 07:30:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qoMYy-0004cD-Cq for qemu-devel@nongnu.org; Thu, 05 Oct 2023 07:30:40 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qoMYw-0001iX-SC for qemu-devel@nongnu.org; Thu, 05 Oct 2023 07:30:40 -0400 Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-321-scJRTQKzN5Omvq19g8kurA-1; Thu, 05 Oct 2023 07:30:36 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id D32198030D4 for ; Thu, 5 Oct 2023 11:30:35 +0000 (UTC) Received: from localhost (unknown [10.39.208.2]) by smtp.corp.redhat.com (Postfix) with ESMTP id C815240C6EA8; Thu, 5 Oct 2023 11:30:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1696505437; 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=rHtA+pPOFOlVhp48hdSblnV8lDl92CBHBGu50WLxLUo=; b=NpPinarXt95MWQMOYbd9F9eMk/KhOtmfHDNE80PfFHRVLX65i7Z20iiaLpkZVNcZFlvFE+ lqvjXcOkF2oXClQX7aUsiLkQDWx0Iyhig81hb3elDjOB1SCyikQthRy+Ozv4F9XdS9dUzO qsNYa5J6sYrWuGSI1IXhJ40hoS/K53E= X-MC-Unique: scJRTQKzN5Omvq19g8kurA-1 From: marcandre.lureau@redhat.com To: qemu-devel@nongnu.org Cc: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= , kraxel@redhat.com, lersek@redhat.com, =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Subject: [PATCH v4 1/3] ramfb: add migration support Date: Thu, 5 Oct 2023 15:30:24 +0400 Message-ID: <20231005113027.1827078-2-marcandre.lureau@redhat.com> In-Reply-To: <20231005113027.1827078-1-marcandre.lureau@redhat.com> References: <20231005113027.1827078-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.1 on 10.11.54.2 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=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, 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.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1696505480525100005 From: Marc-Andr=C3=A9 Lureau Implementing RAMFB migration is quite straightforward. One caveat is to treat the whole RAMFBCfg as a blob, since that's what is exposed to the guest directly. This avoid having to fiddle with endianness issues if we were to migrate fields individually as integers. The devices using RAMFB will have to include ramfb_vmstate in their migration description. Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Laszlo Ersek --- include/hw/display/ramfb.h | 4 ++++ hw/display/ramfb.c | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/include/hw/display/ramfb.h b/include/hw/display/ramfb.h index b33a2c467b..a7e0019144 100644 --- a/include/hw/display/ramfb.h +++ b/include/hw/display/ramfb.h @@ -1,11 +1,15 @@ #ifndef RAMFB_H #define RAMFB_H =20 +#include "migration/vmstate.h" + /* ramfb.c */ typedef struct RAMFBState RAMFBState; void ramfb_display_update(QemuConsole *con, RAMFBState *s); RAMFBState *ramfb_setup(Error **errp); =20 +extern const VMStateDescription ramfb_vmstate; + /* ramfb-standalone.c */ #define TYPE_RAMFB_DEVICE "ramfb" =20 diff --git a/hw/display/ramfb.c b/hw/display/ramfb.c index c2b002d534..477ef7272a 100644 --- a/hw/display/ramfb.c +++ b/hw/display/ramfb.c @@ -28,6 +28,8 @@ struct QEMU_PACKED RAMFBCfg { uint32_t stride; }; =20 +typedef struct RAMFBCfg RAMFBCfg; + struct RAMFBState { DisplaySurface *ds; uint32_t width, height; @@ -116,6 +118,23 @@ void ramfb_display_update(QemuConsole *con, RAMFBState= *s) dpy_gfx_update_full(con); } =20 +static int ramfb_post_load(void *opaque, int version_id) +{ + ramfb_fw_cfg_write(opaque, 0, 0); + return 0; +} + +const VMStateDescription ramfb_vmstate =3D { + .name =3D "ramfb", + .version_id =3D 1, + .minimum_version_id =3D 1, + .post_load =3D ramfb_post_load, + .fields =3D (VMStateField[]) { + VMSTATE_BUFFER_UNSAFE(cfg, RAMFBState, 0, sizeof(RAMFBCfg)), + VMSTATE_END_OF_LIST() + } +}; + RAMFBState *ramfb_setup(Error **errp) { FWCfgState *fw_cfg =3D fw_cfg_find(); --=20 2.41.0 From nobody Sun May 19 07:31:35 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1696505508; cv=none; d=zohomail.com; s=zohoarc; b=cCb3FL6Yek4PXCTLa1Uf4arXOXmwQ2ej3LL31ayxsIzNODFkCz2/VTT45pNZNF4GKtMq7fHeMbBUyXeOkq7hKblqC9SxyD50Fpnw4L5YChZRBWefs77L4uvjiaJhy6FHqAcGUEGjnEhiaBYmMLOJ7NQmeOGMcjGDbMYakHxAA04= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1696505508; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=E0fvpYJ8Xc/+KIEEcIQgB9N1bXiTdtSFkcrn4gUUpLY=; b=hWoYbfxxdr8gg7hGnZxx10jmO9LhYOerFzuLghXGaITBNn4b1TDkXhR+t92A8p0G4uS/QVdi3f4URMdOXVix3Nb+fgMjovc00zd+5U53wbseO10Q92wf0TsFmrMyzM4yL9CE0aD40T4MwqX+nUfANATvNJxwEvijtBF9BgG2iJs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1696505508263224.85389578066838; Thu, 5 Oct 2023 04:31:48 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qoMZI-0004nd-Qc; Thu, 05 Oct 2023 07:31:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qoMZ5-0004gU-RW for qemu-devel@nongnu.org; Thu, 05 Oct 2023 07:30:49 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qoMZ3-0001l6-OD for qemu-devel@nongnu.org; Thu, 05 Oct 2023 07:30:47 -0400 Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-62--PpWi1vBO4CfJivd04FVqg-1; Thu, 05 Oct 2023 07:30:41 -0400 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 6349C2815E25; Thu, 5 Oct 2023 11:30:41 +0000 (UTC) Received: from localhost (unknown [10.39.208.2]) by smtp.corp.redhat.com (Postfix) with ESMTP id B372E492C37; Thu, 5 Oct 2023 11:30:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1696505445; 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=E0fvpYJ8Xc/+KIEEcIQgB9N1bXiTdtSFkcrn4gUUpLY=; b=JYKKNSuYc6DulM+BqTUZOqJopixYMQfn7oD2VP9K0IvdIBi2QQzVUMxJND9k5ogKN3Zz/j /YZ+FclJL/MLCtUrQoDXzjoulMM3mMNRVAluh+qKdLcllNPkdY1doRh8Z0wQv1WqrYoSe5 ccKY7L/ttKbYKnrHKeUNEHmi7XOtBQc= X-MC-Unique: -PpWi1vBO4CfJivd04FVqg-1 From: marcandre.lureau@redhat.com To: qemu-devel@nongnu.org Cc: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= , kraxel@redhat.com, lersek@redhat.com, =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Eduardo Habkost , Marcel Apfelbaum , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Yanan Wang Subject: [PATCH v4 2/3] ramfb-standalone: add migration support Date: Thu, 5 Oct 2023 15:30:25 +0400 Message-ID: <20231005113027.1827078-3-marcandre.lureau@redhat.com> In-Reply-To: <20231005113027.1827078-1-marcandre.lureau@redhat.com> References: <20231005113027.1827078-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.1 on 10.11.54.10 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=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, 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_H3=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.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1696505509132100001 From: Marc-Andr=C3=A9 Lureau Add a "ramfb-dev" section whenever "x-migrate" is turned on. Turn it off by default on machines <=3D 8.1 for compatibility reasons. Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Laszlo Ersek --- hw/core/machine.c | 4 +++- hw/display/ramfb-standalone.c | 27 +++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/hw/core/machine.c b/hw/core/machine.c index 281ef0dccd..e4361e3d48 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -31,7 +31,9 @@ #include "hw/virtio/virtio-net.h" #include "audio/audio.h" =20 -GlobalProperty hw_compat_8_1[] =3D {}; +GlobalProperty hw_compat_8_1[] =3D { + { "ramfb", "x-migrate", "off" }, +}; const size_t hw_compat_8_1_len =3D G_N_ELEMENTS(hw_compat_8_1); =20 GlobalProperty hw_compat_8_0[] =3D { diff --git a/hw/display/ramfb-standalone.c b/hw/display/ramfb-standalone.c index 8c0094397f..a96e7ebcd9 100644 --- a/hw/display/ramfb-standalone.c +++ b/hw/display/ramfb-standalone.c @@ -1,4 +1,5 @@ #include "qemu/osdep.h" +#include "migration/vmstate.h" #include "qapi/error.h" #include "qemu/module.h" #include "hw/loader.h" @@ -15,6 +16,7 @@ struct RAMFBStandaloneState { SysBusDevice parent_obj; QemuConsole *con; RAMFBState *state; + bool migrate; }; =20 static void display_update_wrapper(void *dev) @@ -40,14 +42,39 @@ static void ramfb_realizefn(DeviceState *dev, Error **e= rrp) ramfb->state =3D ramfb_setup(errp); } =20 +static bool migrate_needed(void *opaque) +{ + RAMFBStandaloneState *ramfb =3D RAMFB(opaque); + + return ramfb->migrate; +} + +static const VMStateDescription ramfb_dev_vmstate =3D { + .name =3D "ramfb-dev", + .version_id =3D 1, + .minimum_version_id =3D 1, + .needed =3D migrate_needed, + .fields =3D (VMStateField[]) { + VMSTATE_STRUCT_POINTER(state, RAMFBStandaloneState, ramfb_vmstate,= RAMFBState), + VMSTATE_END_OF_LIST() + } +}; + +static Property ramfb_properties[] =3D { + DEFINE_PROP_BOOL("x-migrate", RAMFBStandaloneState, migrate, true), + DEFINE_PROP_END_OF_LIST(), +}; + static void ramfb_class_initfn(ObjectClass *klass, void *data) { DeviceClass *dc =3D DEVICE_CLASS(klass); =20 set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories); + dc->vmsd =3D &ramfb_dev_vmstate; dc->realize =3D ramfb_realizefn; dc->desc =3D "ram framebuffer standalone device"; dc->user_creatable =3D true; + device_class_set_props(dc, ramfb_properties); } =20 static const TypeInfo ramfb_info =3D { --=20 2.41.0 From nobody Sun May 19 07:31:35 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1696505478; cv=none; d=zohomail.com; s=zohoarc; b=bzJVX5NM3Cc+oFO3dT5HylxNIM8RCVt3MWxm/Zxgah9MhoHgaJw/T+rGG+xPtSlbLvUbYVtMYZUM1/ysIeAffux2/6XOAgEIGN5NFJei69sgmVPA97WZCgv73AP+Tvq+pUdf00hc7zFBbGmeVBmbipoTuB2L2NwsYi4KMPdKGAo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1696505478; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=lGNha8VUjmmkr1NEjXwB+/ZjV4+3CDK8BQVzB2h5LYw=; b=BLSGtOJGHk8J65QwBlinBdLlTznMHVaSK3Y+UM0uRdxMvFx93J5bF0aXTskHSXECS+zacOmgv873914r7Eyh+774jzWLZj8ELYj1LpBQozzBhg9t//vwVIPmmf0dgZ/nIXIypQfAsRPb/ZsV8Th/c2U0t83iP2BM4Ls0+9fksyk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1696505478405126.99200550758553; Thu, 5 Oct 2023 04:31:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qoMZQ-0004r6-QB; Thu, 05 Oct 2023 07:31:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qoMZP-0004qe-4Q for qemu-devel@nongnu.org; Thu, 05 Oct 2023 07:31:07 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qoMZN-0001sm-Ek for qemu-devel@nongnu.org; Thu, 05 Oct 2023 07:31:06 -0400 Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-653-_n2I_EwNPNqOzaETdbZPrw-1; Thu, 05 Oct 2023 07:30:46 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 94A4A2815E20; Thu, 5 Oct 2023 11:30:45 +0000 (UTC) Received: from localhost (unknown [10.39.208.2]) by smtp.corp.redhat.com (Postfix) with ESMTP id 41F1A111CD24; Thu, 5 Oct 2023 11:30:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1696505464; 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=lGNha8VUjmmkr1NEjXwB+/ZjV4+3CDK8BQVzB2h5LYw=; b=KYwBAIPutcQqbyOuTaD/jvs2ywfAlRFM/faNf5IUaZZOCdM3YHCvFlYPznl6xQFth9Vqbq s65lAfNZ4x3Nt50NH2rdCNWn2FlPgZ+abuOm53NpOPTkAflCM1rWboX24nN8blxSdaUyPz R6xPoGbuOif1xbtWAauR/Qdfk9fuc6o= X-MC-Unique: _n2I_EwNPNqOzaETdbZPrw-1 From: marcandre.lureau@redhat.com To: qemu-devel@nongnu.org Cc: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= , kraxel@redhat.com, lersek@redhat.com, =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Eduardo Habkost , Marcel Apfelbaum , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Yanan Wang , Alex Williamson , Paolo Bonzini Subject: [PATCH v4 3/3] hw/vfio: add ramfb migration support Date: Thu, 5 Oct 2023 15:30:26 +0400 Message-ID: <20231005113027.1827078-4-marcandre.lureau@redhat.com> In-Reply-To: <20231005113027.1827078-1-marcandre.lureau@redhat.com> References: <20231005113027.1827078-1-marcandre.lureau@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.1 on 10.11.54.3 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=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, 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.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1696505480533100006 From: Marc-Andr=C3=A9 Lureau Add a "VFIODisplay" subsection whenever "x-ramfb-migrate" is turned on. Turn it off by default on machines <=3D 8.1 for compatibility reasons. Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Laszlo Ersek --- hw/vfio/pci.h | 3 +++ hw/core/machine.c | 1 + hw/vfio/display.c | 20 ++++++++++++++++++++ hw/vfio/pci.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ stubs/ramfb.c | 2 ++ 5 files changed, 70 insertions(+) diff --git a/hw/vfio/pci.h b/hw/vfio/pci.h index 2d836093a8..fd06695542 100644 --- a/hw/vfio/pci.h +++ b/hw/vfio/pci.h @@ -173,6 +173,7 @@ struct VFIOPCIDevice { bool no_kvm_ioeventfd; bool no_vfio_ioeventfd; bool enable_ramfb; + OnOffAuto ramfb_migrate; bool defer_kvm_irq_routing; bool clear_parent_atomics_on_exit; VFIODisplay *dpy; @@ -226,4 +227,6 @@ void vfio_display_reset(VFIOPCIDevice *vdev); int vfio_display_probe(VFIOPCIDevice *vdev, Error **errp); void vfio_display_finalize(VFIOPCIDevice *vdev); =20 +extern const VMStateDescription vfio_display_vmstate; + #endif /* HW_VFIO_VFIO_PCI_H */ diff --git a/hw/core/machine.c b/hw/core/machine.c index e4361e3d48..f2c59a293c 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -33,6 +33,7 @@ =20 GlobalProperty hw_compat_8_1[] =3D { { "ramfb", "x-migrate", "off" }, + { "vfio-pci-nohotplug", "x-ramfb-migrate", "off" } }; const size_t hw_compat_8_1_len =3D G_N_ELEMENTS(hw_compat_8_1); =20 diff --git a/hw/vfio/display.c b/hw/vfio/display.c index bec864f482..0bdb807642 100644 --- a/hw/vfio/display.c +++ b/hw/vfio/display.c @@ -542,3 +542,23 @@ void vfio_display_finalize(VFIOPCIDevice *vdev) vfio_display_edid_exit(vdev->dpy); g_free(vdev->dpy); } + +static bool migrate_needed(void *opaque) +{ + VFIODisplay *dpy =3D opaque; + bool ramfb_exists =3D dpy->ramfb !=3D NULL; + + /* see vfio_display_migration_needed() */ + assert(ramfb_exists); + return ramfb_exists; +} + +const VMStateDescription vfio_display_vmstate =3D { + .name =3D "VFIODisplay", + .version_id =3D 1, + .minimum_version_id =3D 1, + .needed =3D migrate_needed, + .fields =3D (VMStateField[]) { + VMSTATE_STRUCT_POINTER(ramfb, VFIODisplay, ramfb_vmstate, RAMFBSta= te), + } +}; diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index 3b2ca3c24c..d2ede2f1a2 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -2608,6 +2608,32 @@ static bool vfio_msix_present(void *opaque, int vers= ion_id) return msix_present(pdev); } =20 +static bool vfio_display_migration_needed(void *opaque) +{ + VFIOPCIDevice *vdev =3D opaque; + + /* + * We need to migrate the VFIODisplay object if ramfb *migration* was + * explicitly requested (in which case we enforced both ramfb=3Don and + * display=3Don), or ramfb migration was left at the default "auto" + * setting, and *ramfb* was explicitly requested (in which case we + * enforced display=3Don). + */ + return vdev->ramfb_migrate =3D=3D ON_OFF_AUTO_ON || + (vdev->ramfb_migrate =3D=3D ON_OFF_AUTO_AUTO && vdev->enable_ramfb= ); +} + +const VMStateDescription vmstate_vfio_display =3D { + .name =3D "VFIOPCIDevice/VFIODisplay", + .version_id =3D 1, + .minimum_version_id =3D 1, + .needed =3D vfio_display_migration_needed, + .fields =3D (VMStateField[]){ + VMSTATE_STRUCT_POINTER(dpy, VFIOPCIDevice, vfio_display_vmstate, V= FIODisplay), + VMSTATE_END_OF_LIST() + } +}; + const VMStateDescription vmstate_vfio_pci_config =3D { .name =3D "VFIOPCIDevice", .version_id =3D 1, @@ -2616,6 +2642,10 @@ const VMStateDescription vmstate_vfio_pci_config =3D= { VMSTATE_PCI_DEVICE(pdev, VFIOPCIDevice), VMSTATE_MSIX_TEST(pdev, VFIOPCIDevice, vfio_msix_present), VMSTATE_END_OF_LIST() + }, + .subsections =3D (const VMStateDescription*[]) { + &vmstate_vfio_display, + NULL } }; =20 @@ -3271,6 +3301,19 @@ static void vfio_realize(PCIDevice *pdev, Error **er= rp) } } =20 + if (vdev->ramfb_migrate =3D=3D ON_OFF_AUTO_ON && !vdev->enable_ramfb) { + error_setg(errp, "x-ramfb-migrate requires ramfb=3Don"); + goto out_deregister; + } + if (vbasedev->enable_migration =3D=3D ON_OFF_AUTO_OFF) { + if (vdev->ramfb_migrate =3D=3D ON_OFF_AUTO_AUTO) { + vdev->ramfb_migrate =3D ON_OFF_AUTO_OFF; + } else if (vdev->ramfb_migrate =3D=3D ON_OFF_AUTO_ON) { + error_setg(errp, "x-ramfb-migrate requires enable-migration"); + goto out_deregister; + } + } + if (!pdev->failover_pair_id) { if (!vfio_migration_realize(vbasedev, errp)) { goto out_deregister; @@ -3484,6 +3527,7 @@ static const TypeInfo vfio_pci_dev_info =3D { =20 static Property vfio_pci_dev_nohotplug_properties[] =3D { DEFINE_PROP_BOOL("ramfb", VFIOPCIDevice, enable_ramfb, false), + DEFINE_PROP_ON_OFF_AUTO("x-ramfb-migrate", VFIOPCIDevice, ramfb_migrat= e, ON_OFF_AUTO_AUTO), DEFINE_PROP_END_OF_LIST(), }; =20 diff --git a/stubs/ramfb.c b/stubs/ramfb.c index 48143f3354..cf64733b10 100644 --- a/stubs/ramfb.c +++ b/stubs/ramfb.c @@ -2,6 +2,8 @@ #include "qapi/error.h" #include "hw/display/ramfb.h" =20 +const VMStateDescription ramfb_vmstate =3D {}; + void ramfb_display_update(QemuConsole *con, RAMFBState *s) { } --=20 2.41.0