From nobody Mon Nov 25 12:52:33 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; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1715245889; cv=pass; d=zohomail.com; s=zohoarc; b=GQq3b2zu067Krb3aZF07FBXG7mswI0ABaPKAhW6rvwsbaSHbhFDIWsFbuzYzXBMwo2DwK+Wr37YSni38bUrTX02W+veW6yLi3ySJzLpHRcZTsVNoGO/ZcKVJhW5OiZ7AvSl4NTF6JaeDL1SY8uNESmYnrhyDDQVbIkVbjLmDuT8= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1715245889; 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=kDXPi1eKaN76rgzC+w4BLL1j0SEwquiNwP6LCfrF4Ss=; b=QqTZl/Y1usubIVv24rn5hnuvkhsA0+dUvgfXkq8pnk/UL2+v9i2jILh8eGgSJFezQdhfUqN/wFw9yCCGQkZ45a7+MPs2UJg4oQ2YVoXiAefRolB6vwURqBHZsTeyUbx7AD23gTb7Sftn0CfNlXzmpTGMVZmcebWpTU0HZ2HeWbw= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1715245889064556.79752828135; Thu, 9 May 2024 02:11:29 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1s4znR-0004o6-Kk; Thu, 09 May 2024 05:10:37 -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 1s4znQ-0004nd-3t for qemu-devel@nongnu.org; Thu, 09 May 2024 05:10:36 -0400 Received: from mail-mw2nam12on20601.outbound.protection.outlook.com ([2a01:111:f403:200a::601] helo=NAM12-MW2-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1s4znN-0003T5-GV for qemu-devel@nongnu.org; Thu, 09 May 2024 05:10:35 -0400 Received: from SJ0PR03CA0216.namprd03.prod.outlook.com (2603:10b6:a03:39f::11) by DM4PR12MB6325.namprd12.prod.outlook.com (2603:10b6:8:a4::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.46; Thu, 9 May 2024 09:10:25 +0000 Received: from CO1PEPF000042AE.namprd03.prod.outlook.com (2603:10b6:a03:39f:cafe::e8) by SJ0PR03CA0216.outlook.office365.com (2603:10b6:a03:39f::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.45 via Frontend Transport; Thu, 9 May 2024 09:10:24 +0000 Received: from mail.nvidia.com (216.228.117.161) by CO1PEPF000042AE.mail.protection.outlook.com (10.167.243.43) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.18 via Frontend Transport; Thu, 9 May 2024 09:10:24 +0000 Received: from rnnvmail203.nvidia.com (10.129.68.9) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 9 May 2024 02:10:05 -0700 Received: from rnnvmail205.nvidia.com (10.129.68.10) by rnnvmail203.nvidia.com (10.129.68.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 9 May 2024 02:10:05 -0700 Received: from vdi.nvidia.com (10.127.8.9) by mail.nvidia.com (10.129.68.10) with Microsoft SMTP Server id 15.2.1544.4 via Frontend Transport; Thu, 9 May 2024 02:10:02 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CESMs1JkvJ15BtB/SGdEAbaX6MtTqdH9dhB+OwOhh+x2bI8IWs+49EO5IQ8xUOWIaXa91FQSIAyNx8pZ/SaBGulhOet2aBGOFvojJJyX8uZk60JtKLYFyyM9/DPfpd7hKOcvK7bPN234Ch3Kb59CekZWOxHb0MAbPqpxmRxes90xbXf2PRlsUBmYwnq+LyMJBQwyEo8IAyS+V612Fjbqa50Pf1Hy82hBGyMO8uVbSdyt9wAVy6Ush+NJkJdtdJtMP9qsRyWoISHyB5p9HdsCL0mMZLImUa4Kmm6xv651A5JNsUB3HI+nd3AewsBW9axUrzPIhtkKJfL57/0WwmtwKw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=kDXPi1eKaN76rgzC+w4BLL1j0SEwquiNwP6LCfrF4Ss=; b=I7sR/oJIP2UeHtZDrhe1PAK4vc5g/1bCok6PjtGS7uZX2K6cByLvwiEiqaJtnaOfrnHQgNtkuMZrrQ0LIHNpWieMylTwmGPhyRP+cCiP9A8WjuJG/KQz/GqgYts71CXjFJbwpLwzq3grusmKaVaZawo/NythnquLWJQuqk5k01kW44c/Fa6D/YAEAIEdbAK5xtKmQXNgzin1YDwBoAEQtLEcvbdXHDPSUJK36hZjeKJYimn/qaWf3GRzmrtRcETSK4hq9M8Gsto5DoVDeFuMJhk1JUKs7Gb03RmNAAF1uBeM0D5qHQln/6cy9pWweZ/Rebb/BLF3glKloY8SRhJxoA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kDXPi1eKaN76rgzC+w4BLL1j0SEwquiNwP6LCfrF4Ss=; b=T8+EbUNEpOIzhTnz5NW4ObYyqshl2IPI61eC01kX08ujAtHuh+gTluCIGG4uem2h48BwrC8A+kgKK8p5gbzVP7dgUDG6FBHrF8YJggxyRjf77C1D+2kW6u2Wt4j2xtQfwNXORcg7UMQzKe8LmnAX8LxTwOJfXFevEntfUi6lXQjH3vwENDjL7ESEqO2nDUQVKe/c7jyJbImKZZlFtfQr1HD1HuM5WnevXPxWCHa17wF/Txcwu3XPzqoOMPQThfUgt9g6xSMN1YDOJwFNcUw6pVvQRt/AomXqpoMbSiU+wYqiHc612IYq5lKZR3xJcfAtHEK4caIen6iJtF5ZoBmm9w== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; 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 (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C From: Avihai Horon To: CC: Alex Williamson , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= , Markus Armbruster , Michael Roth , Eric Blake , Peter Xu , Fabiano Rosas , Joao Martins , Maor Gottlieb , Avihai Horon Subject: [PATCH v2 2/3] vfio/migration: Emit VFIO migration QAPI event Date: Thu, 9 May 2024 12:09:53 +0300 Message-ID: <20240509090954.16447-3-avihaih@nvidia.com> X-Mailer: git-send-email 2.21.3 In-Reply-To: <20240509090954.16447-1-avihaih@nvidia.com> References: <20240509090954.16447-1-avihaih@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1PEPF000042AE:EE_|DM4PR12MB6325:EE_ X-MS-Office365-Filtering-Correlation-Id: 4d6251c3-fb0b-4f10-0c2a-08dc7007dc71 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230031|376005|82310400017|36860700004|1800799015; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?dzzOCja6BMwakU7hXPVpEBJRO8f+e5mbRs5pI5BIZ3E37Z8W3ifKk6O1odk/?= =?us-ascii?Q?29IUZ/d7+/MUeIAMUQZdnW2CTdLDAZs7i/gmz3aYcY4QDjzyrrNTjo++mgZP?= =?us-ascii?Q?l6KerkRy3OnUbkPWCGQ0s1lWsdW936hUR9/LE33qYsttCt+zAGb5g7uzaz7N?= =?us-ascii?Q?QyKtyyvq5N7QvtUk0y04tOTdZdfs800c4GuWy/3OcqfRpF8SEbNWx2i1jEju?= =?us-ascii?Q?OgyNc4dsvpx9PRQBbG503GuI9+KbHnYzYi3UEEvD/+aqTGkWrF/YZ+Qaowdh?= =?us-ascii?Q?4JAtzu4rdX6aBxbl1PZVCrf61HDPs7gIL2gkUigDQNI1u5e2EubEXhyzC++y?= =?us-ascii?Q?N8NwgExggnXONPTftqmCCW5AHEk5QdBebQSnl67vetPeOmLy03H4Pq3Obcog?= =?us-ascii?Q?ZBO/AZqpvYRy16qoAUsVrYMrk9F38DTGc3uYpQOlqZ1+IqBGmUVSIGR7MJJp?= =?us-ascii?Q?Epa2EnrcvGJyHxw/ZWi4jBYIS5UTGgr7uDBnwO0IAMzG9p2IMOxdJiyZrJcw?= =?us-ascii?Q?aYaNJALycK/o24MEE0Qa2IcfBklIT6KFfMafgR75Ecdj+Pjha/XfMu5pcm4v?= =?us-ascii?Q?zLSjxgeGiCEBDpV8cGwFpZ9hZR55Qx244Qsf+1Q7dygpYuejnsg1Vfl0ADfL?= =?us-ascii?Q?cSFgjHYN7UqMNhq5Q4bIDYzMoYj5k6kllEvR2+SKyoe2cxndcxbUpoapj8WV?= =?us-ascii?Q?z+UN0YsOFF+N5C9oEi3dzqeQkUMg5vHgHuUXtcQDSvIJwLyWP4M4/04gMSMc?= =?us-ascii?Q?659eAWrJv7vn2Ro4xv5ufVxyqLB+v6456puB9xMAwQXLr3lgCdU57RPvLHmf?= =?us-ascii?Q?SX9OcJ+IUWtGhJ93Gxn0IYsbrULcQVda8iOKH5qrA89hEMuATxPhyghXoF5s?= =?us-ascii?Q?H4x3EgXtghPLWftvE49rnQBsh51I5f5eJF2EBI3FpyQwt9GgI3zkBNcWI89G?= =?us-ascii?Q?9HX9HTfFE6on1ArImnGkbrs3oR6tKQ7RbEEsCLzrUzCNzyB/kBa6a3/dOQ/6?= =?us-ascii?Q?6sJpCGQ+dbYdg3SrA13TTTVBEW3lEDT+m22QsWdoRvH4KOXEAOKb0t1q6oZV?= =?us-ascii?Q?Zqy3J4qAR6RU0fDBY09KbKgzavP3zAsvOQPAgiizMsfSXeaJdY9+DlmxyYvK?= =?us-ascii?Q?AqNuf6R0dXMZXw9ouObjnLXkey2cIXr8EpWs4Wj2zisO7Sspnvj7WAbWmoUk?= =?us-ascii?Q?oWXe08Aq/H491fLS0slye1jYHggyNx2TYLDXUVkX/Au2Hp3sgjXKUvoDEo5z?= =?us-ascii?Q?16qxJhgRbRpy8CeVwSWkE8sv7GQ3Ls5mbpB3PUS42Z7ou+ukooVJXKsgAIo/?= =?us-ascii?Q?yx7S6tTRHYd3aolnTD4oPExeDjLdWNVn3fp2noOODKcRSgGaJdtfOBHPVabV?= =?us-ascii?Q?87/yZT+1G4D/9TM3rPh0zbncATXI?= X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230031)(376005)(82310400017)(36860700004)(1800799015); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 May 2024 09:10:24.3683 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4d6251c3-fb0b-4f10-0c2a-08dc7007dc71 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1PEPF000042AE.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB6325 Received-SPF: softfail client-ip=2a01:111:f403:200a::601; envelope-from=avihaih@nvidia.com; helo=NAM12-MW2-obe.outbound.protection.outlook.com X-Spam_score_int: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.582, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_PASS=-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 @Nvidia.com) X-ZM-MESSAGEID: 1715245889829100001 Content-Type: text/plain; charset="utf-8" Emit VFIO migration QAPI event when a VFIO device changes its migration state. This can be used by management applications to get updates on the current state of the VFIO device for their own purposes. A new per VFIO device capability, "migration-events", is added so events can be enabled only for the required devices. It is disabled by default. Signed-off-by: Avihai Horon --- include/hw/vfio/vfio-common.h | 1 + hw/vfio/migration.c | 56 +++++++++++++++++++++++++++++++++-- hw/vfio/pci.c | 2 ++ 3 files changed, 56 insertions(+), 3 deletions(-) diff --git a/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio-common.h index b9da6c08ef..3ec5f2425e 100644 --- a/include/hw/vfio/vfio-common.h +++ b/include/hw/vfio/vfio-common.h @@ -115,6 +115,7 @@ typedef struct VFIODevice { bool no_mmap; bool ram_block_discard_allowed; OnOffAuto enable_migration; + bool migration_events; VFIODeviceOps *ops; unsigned int num_irqs; unsigned int num_regions; diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c index 06ae40969b..5a359c4c78 100644 --- a/hw/vfio/migration.c +++ b/hw/vfio/migration.c @@ -24,6 +24,7 @@ #include "migration/register.h" #include "migration/blocker.h" #include "qapi/error.h" +#include "qapi/qapi-events-vfio.h" #include "exec/ramlist.h" #include "exec/ram_addr.h" #include "pci.h" @@ -80,6 +81,55 @@ static const char *mig_state_to_str(enum vfio_device_mig= _state state) } } =20 +static VfioMigrationState +mig_state_to_qapi_state(enum vfio_device_mig_state state) +{ + switch (state) { + case VFIO_DEVICE_STATE_STOP: + return QAPI_VFIO_MIGRATION_STATE_STOP; + case VFIO_DEVICE_STATE_RUNNING: + return QAPI_VFIO_MIGRATION_STATE_RUNNING; + case VFIO_DEVICE_STATE_STOP_COPY: + return QAPI_VFIO_MIGRATION_STATE_STOP_COPY; + case VFIO_DEVICE_STATE_RESUMING: + return QAPI_VFIO_MIGRATION_STATE_RESUMING; + case VFIO_DEVICE_STATE_RUNNING_P2P: + return QAPI_VFIO_MIGRATION_STATE_RUNNING_P2P; + case VFIO_DEVICE_STATE_PRE_COPY: + return QAPI_VFIO_MIGRATION_STATE_PRE_COPY; + case VFIO_DEVICE_STATE_PRE_COPY_P2P: + return QAPI_VFIO_MIGRATION_STATE_PRE_COPY_P2P; + default: + g_assert_not_reached(); + } +} + +static void vfio_migration_send_event(VFIODevice *vbasedev) +{ + VFIOMigration *migration =3D vbasedev->migration; + DeviceState *dev =3D vbasedev->dev; + g_autofree char *qom_path =3D NULL; + Object *obj; + + if (!vbasedev->migration_events) { + return; + } + + obj =3D vbasedev->ops->vfio_get_object(vbasedev); + qom_path =3D object_get_canonical_path(obj); + + qapi_event_send_vfio_migration( + dev->id, qom_path, mig_state_to_qapi_state(migration->device_state= )); +} + +static void set_state(VFIODevice *vbasedev, enum vfio_device_mig_state sta= te) +{ + VFIOMigration *migration =3D vbasedev->migration; + + migration->device_state =3D state; + vfio_migration_send_event(vbasedev); +} + static int vfio_migration_set_state(VFIODevice *vbasedev, enum vfio_device_mig_state new_state, enum vfio_device_mig_state recover_sta= te) @@ -125,12 +175,12 @@ static int vfio_migration_set_state(VFIODevice *vbase= dev, goto reset_device; } =20 - migration->device_state =3D recover_state; + set_state(vbasedev, recover_state); =20 return ret; } =20 - migration->device_state =3D new_state; + set_state(vbasedev, new_state); if (mig_state->data_fd !=3D -1) { if (migration->data_fd !=3D -1) { /* @@ -156,7 +206,7 @@ reset_device: strerror(errno)); } =20 - migration->device_state =3D VFIO_DEVICE_STATE_RUNNING; + set_state(vbasedev, VFIO_DEVICE_STATE_RUNNING); =20 return ret; } diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index 64780d1b79..8840602c50 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -3362,6 +3362,8 @@ static Property vfio_pci_dev_properties[] =3D { VFIO_FEATURE_ENABLE_IGD_OPREGION_BIT, false), DEFINE_PROP_ON_OFF_AUTO("enable-migration", VFIOPCIDevice, vbasedev.enable_migration, ON_OFF_AUTO_AUTO), + DEFINE_PROP_BOOL("migration-events", VFIOPCIDevice, + vbasedev.migration_events, false), DEFINE_PROP_BOOL("x-no-mmap", VFIOPCIDevice, vbasedev.no_mmap, false), DEFINE_PROP_BOOL("x-balloon-allowed", VFIOPCIDevice, vbasedev.ram_block_discard_allowed, false), --=20 2.26.3