From nobody Fri May 17 08:39:36 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=1696833238; cv=none; d=zohomail.com; s=zohoarc; b=T/dcIzznp+LbldxftlfWLTbH3RHNWNIalDzL8UD6WuXLRHjQu9QmF4p+1unjkRkdRx1Dd1aULbAfWLx0Rpg4F5gKQhUJ1jxxIasg7IPfwCPxEKO3Ag8ft9eiItJkj0uGSqNjMiWNeeEMFIr5r+4aGLUxZwDU3ZwiOI28vr3bokE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1696833238; 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=adltbxBS7/jIiugdOlR+9IVi5golY1JaftJuPFsBS3s=; b=MBpx24eeQeqznM+mNgAgvQWyHJo+ItCqCXMDlaXPrt84voFwhaWxK+hicVpEd2XVkjL6SgMcvT1oRRgUk2fTk1+Tic2ibSReiRiSvtylD8mlMWtiHXN46s9zg3AJnvEGv/4BhntSG2E7dcdSs5dqmDHVimj5z/mmQnPsePDJO7w= 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 1696833238590984.9806601299911; Sun, 8 Oct 2023 23:33:58 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qpjpQ-0007Si-0j; Mon, 09 Oct 2023 02:33:20 -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 1qpjpG-0007QC-N8 for qemu-devel@nongnu.org; Mon, 09 Oct 2023 02:33:12 -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 1qpjp5-0004FW-12 for qemu-devel@nongnu.org; Mon, 09 Oct 2023 02:33:10 -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-125-7xOF4E2ONi-YPI0xCYzdAw-1; Mon, 09 Oct 2023 02:32:54 -0400 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (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 4FE2585A5BE for ; Mon, 9 Oct 2023 06:32:54 +0000 (UTC) Received: from localhost (unknown [10.39.208.4]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4E70563F51; Mon, 9 Oct 2023 06:32:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1696833176; 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=adltbxBS7/jIiugdOlR+9IVi5golY1JaftJuPFsBS3s=; b=SCzPf4ak6nUJVLvhg2fL2h0m8Q63/s+FVayt4qI4RoKyiRN7H6wNoBGy0DnFeSUy+3U5t2 GZMeiZ2mlMo02xZYCGw9UD9mW+YILfkuudjIDTeVrNjO+tCOJ6KvpwWHDQDh7gOMEj3xu5 S7fnD3X5BO5SPjTgL3NU+W8QTsu1Hgs= X-MC-Unique: 7xOF4E2ONi-YPI0xCYzdAw-1 From: marcandre.lureau@redhat.com To: qemu-devel@nongnu.org Cc: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= , lersek@redhat.com, =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Gerd Hoffmann Subject: [PATCH v5 1/3] ramfb: add migration support Date: Mon, 9 Oct 2023 10:32:45 +0400 Message-ID: <20231009063247.119333-2-marcandre.lureau@redhat.com> In-Reply-To: <20231009063247.119333-1-marcandre.lureau@redhat.com> References: <20231009063247.119333-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.5 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.01, RCVD_IN_MSPIKE_WL=-0.01, 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: 1696833240416100003 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 Acked-by: Gerd Hoffmann --- 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 Fri May 17 08:39:36 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=1696833211; cv=none; d=zohomail.com; s=zohoarc; b=GHg6zVuSN+wwgXnbASHUl4gJFvEyRZWFkD4bC9IrWbLXeR+/0YS/r5F4YyzZySbmyUYdUmDZPAJddGK89REKrQuEC6u5ax+Cu9gHX2GzD1xvHfguQcssc9km1JwBZpKh+3joFAYtZ8oJC3mhLIuzKi5YxkX15nV74Br/mW877H0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1696833211; 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=9PqlCMNG44aZ1iVWO6uSjgq/nG4+dxRxaMeBbNTtj54=; b=hSDMUB3TU/Oet198eAaFRGukOFC3QHwbCSStKAMg5ielJiJMxdK1LGYYhf6ZNaH5BgWJ4reXJw4wWRtFJVNcNjq3VHY1OSxSzvUmskBNx7W+zxlAjQiGcpEdohgbTMon8Vi9AV8rae3vTaYnLrZ3mC08jbUMfkaduzAeiEqqLuE= 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 169683321169464.47378635633015; Sun, 8 Oct 2023 23:33:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qpjpO-0007Sb-3E; Mon, 09 Oct 2023 02:33:18 -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 1qpjpG-0007QE-TI for qemu-devel@nongnu.org; Mon, 09 Oct 2023 02:33:12 -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 1qpjpC-0004J0-6H for qemu-devel@nongnu.org; Mon, 09 Oct 2023 02:33:10 -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-627-nSvDXQgrNtSuIO8H0F1HQg-1; Mon, 09 Oct 2023 02:32:59 -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 A1E541C068D7; Mon, 9 Oct 2023 06:32:58 +0000 (UTC) Received: from localhost (unknown [10.39.208.4]) by smtp.corp.redhat.com (Postfix) with ESMTP id 92A5240C6EA8; Mon, 9 Oct 2023 06:32:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1696833185; 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=9PqlCMNG44aZ1iVWO6uSjgq/nG4+dxRxaMeBbNTtj54=; b=AlSEVRQ64wFeXl001pEKgjWuuHwK/H2eNW5z0p92foGByqtl84l7Om0yWskk44xsltTlrv LGeSvWdLW1QO7yA9Bd5q1ML0XQZ8KzqAkY1OU2IBoMJefYKfISzWlKPwSNSYaBPozExizD nQqMHqv10sjgbBmhFaIM0s2rg8bmQSE= X-MC-Unique: nSvDXQgrNtSuIO8H0F1HQg-1 From: marcandre.lureau@redhat.com To: qemu-devel@nongnu.org Cc: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= , 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 , Gerd Hoffmann Subject: [PATCH v5 2/3] ramfb-standalone: add migration support Date: Mon, 9 Oct 2023 10:32:46 +0400 Message-ID: <20231009063247.119333-3-marcandre.lureau@redhat.com> In-Reply-To: <20231009063247.119333-1-marcandre.lureau@redhat.com> References: <20231009063247.119333-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.01, RCVD_IN_MSPIKE_WL=-0.01, 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: 1696833214242100003 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 Acked-by: Gerd Hoffmann --- hw/core/machine.c | 1 + hw/display/ramfb-standalone.c | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/hw/core/machine.c b/hw/core/machine.c index cfd1edfe20..6305f2d7a4 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -34,6 +34,7 @@ =20 GlobalProperty hw_compat_8_1[] =3D { { TYPE_PCI_BRIDGE, "x-pci-express-writeable-slt-bug", "true" }, + { "ramfb", "x-migrate", "off" }, }; const size_t hw_compat_8_1_len =3D G_N_ELEMENTS(hw_compat_8_1); =20 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 Fri May 17 08:39:36 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=1696833214; cv=none; d=zohomail.com; s=zohoarc; b=SCoqp+UtL7ct8JwQi6jRZtdVDISBA0xvM6D6Ugd7wfy0GGw2HmjJDqkN6Dly1QWv4QLG02alYPxu/tWIOXK5qmhBz6GhSx5BhvEa+QManaCTiGriCQ2Y9hzi1QBl6QbiWjwC4KzOB6MQKeh6DfV7BVlMxltjpPoeRACPMxtihXg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1696833214; 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=sknTPDX5xEZQD4Dp2Q2kubZlqkQG0jZQDmkWj8MF5Os=; b=nla3gfi29CkuFOV2B3murD6UZLWAW5+AlaB4n8ktjTAQ/uVJ4v3mKl0kCjpbCfTSU87roACaEUy9kc20pwve1tFJ9IpahhUwwZDfak9Y4FcJXxaGxndpep0wecLjzRxOfOcF7tfNjLJlbR8ip1O152g+UxNS2ISshFlxjWGgIE4= 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 1696833214003100.60791789106929; Sun, 8 Oct 2023 23:33:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qpjpW-0007ZB-7G; Mon, 09 Oct 2023 02:33:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qpjpI-0007Qe-CL for qemu-devel@nongnu.org; Mon, 09 Oct 2023 02:33:13 -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 1qpjpE-0004Jx-AX for qemu-devel@nongnu.org; Mon, 09 Oct 2023 02:33:11 -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-63-dybJrIB4MVOUX-ip73y0OA-1; Mon, 09 Oct 2023 02:33:03 -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 DE8931C068D7; Mon, 9 Oct 2023 06:33:02 +0000 (UTC) Received: from localhost (unknown [10.39.208.4]) by smtp.corp.redhat.com (Postfix) with ESMTP id 96BEC10F1BEA; Mon, 9 Oct 2023 06:33:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1696833187; 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=sknTPDX5xEZQD4Dp2Q2kubZlqkQG0jZQDmkWj8MF5Os=; b=cHxIFacUgtIDLpY75r5+qHMqqPmCDv50Mav7fYWmFhNnRkbpn3i+0Fy8ojLXMv/OdthAA5 Oj112ldlvBitACCeV4/Izg0HmlU1UK1aDIasWDT+wTgmC4AgPygYHQmBfPyAafeFVWC1Rf nkUXFvyz1S8ku35h379Lo6tdw1cGoTY= X-MC-Unique: dybJrIB4MVOUX-ip73y0OA-1 From: marcandre.lureau@redhat.com To: qemu-devel@nongnu.org Cc: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= , 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 v5 3/3] hw/vfio: add ramfb migration support Date: Mon, 9 Oct 2023 10:32:47 +0400 Message-ID: <20231009063247.119333-4-marcandre.lureau@redhat.com> In-Reply-To: <20231009063247.119333-1-marcandre.lureau@redhat.com> References: <20231009063247.119333-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.01, RCVD_IN_MSPIKE_WL=-0.01, 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: 1696833215803100007 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 Acked-by: Gerd Hoffmann --- hw/vfio/pci.h | 3 +++ hw/core/machine.c | 1 + hw/vfio/display.c | 21 +++++++++++++++++++++ hw/vfio/pci.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ stubs/ramfb.c | 2 ++ 5 files changed, 71 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 6305f2d7a4..05aef2cf9f 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -35,6 +35,7 @@ GlobalProperty hw_compat_8_1[] =3D { { TYPE_PCI_BRIDGE, "x-pci-express-writeable-slt-bug", "true" }, { "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..2739ba56ec 100644 --- a/hw/vfio/display.c +++ b/hw/vfio/display.c @@ -542,3 +542,24 @@ 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), + VMSTATE_END_OF_LIST(), + } +}; diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index 3b2ca3c24c..e44ed21180 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) { + warn_report("x-ramfb-migrate=3Don but ramfb=3Doff"); + vdev->ramfb_migrate =3D ON_OFF_AUTO_OFF; + } + 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