From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id E29DFD73E91 for ; Thu, 29 Jan 2026 21:26:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Type:Cc:To:From: Subject:Message-ID:References:Mime-Version:In-Reply-To:Date:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=FUlLWwYhjyjIuuZGYT6Vav103VXsQgg/WHiCQN706aw=; b=BGePeb21xzMRyhfxjK0owGJnV4 CC3EvwQ35KQIHHH2P0Qfr2EJGqQjT+TD4GWdV2ZvZc6udKM5nSIoN/vw3tzI2zDezSGvJzXNoLF/o lz7Wzl1N/ujfIF2/Agm+Jo99EbmEBPb/cwioKhguTo/ScNjiMadCMc7J3Fb97rtkfmWYt7dAYNEIJ zotjiUFbPH7bgHN6mkSj2G1Qsb32Hgc6Z4/EjFdmaM2rnYwL4WpB9uHS7JXbndGFdb9/fjGbjkpuX AMZBZCnwsXdSQluRXzoAiyuHTY9Yen1rwif3hdtrJ1aeSLlgZx0JQMjhr5wDI6liiWdrXsG4URq2F 5lGMfsWA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1vlZWt-00000000ffh-1tLH; Thu, 29 Jan 2026 21:26:19 +0000 Received: from mail-pj1-x104a.google.com ([2607:f8b0:4864:20::104a]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1vlZWf-00000000fSq-1BPj for kexec@lists.infradead.org; Thu, 29 Jan 2026 21:26:12 +0000 Received: by mail-pj1-x104a.google.com with SMTP id 98e67ed59e1d1-34cc8bf226cso1383035a91.3 for ; Thu, 29 Jan 2026 13:26:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769721964; x=1770326764; darn=lists.infradead.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=FUlLWwYhjyjIuuZGYT6Vav103VXsQgg/WHiCQN706aw=; b=XcbKFKPmvQTQof0/mxW42ble5DK6tniv231BrBeQr4ZGUjc6MOBwVy24qkmQYSWBgE ppPPsjn4KkUpsV4OFaGW2upVPBT34Z0uNLUDAeJUZLHaGm6uDGDJjgNzw8Xzmh95quhO gElEI6uTVb+ltCIXy9s+hr+Xd5jefVFHK22g0q5Ae5FJZic1X7MAET7azC+7RZdGjWlx JigM6zv5Zj4oLL7b5VIS/U7c56MTFuZKag3mUEOFA/Ml9PrcCt86SqmtI7/L3g4m9atd qephpISaOnzX4NkQSzO1hYeC5Pj9a1HPn7cc2aCjGU6xHEOJ4OKsg22w+QdJBNwtoe/S 6xkw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769721964; x=1770326764; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=FUlLWwYhjyjIuuZGYT6Vav103VXsQgg/WHiCQN706aw=; b=jjCN6iK6oJLN/4vf2FqreI7SdymoLERxoMoW3JDZ2h8oZ1D0ogA/K5RXWIvIunLM9V fnCHvrlG9AzOredFuYwXC7HRmuJsd3D/d/qsYmLbmu1U9GBCnKAiJxdQPUqqg7qdwiKi zvGR1gkLjCEK7NfyCII2ygk+RrmNN3tjF5cYyngJNgkkpzoHQ+FEe6rQ4l3ZVr1H4odt 2HL95HbTKOka67Y6kFCTQXU5W/3GYAe2OUsk27WpFSbrsJXdzE36XFkD9c836m4aV1Pu IQQ7UYtvO59TOw8zNMM6b7ToK1lRGE6NFq5rNRpqzw25A/i+c3C6iAHqZxGvxmte1DTv Y5tA== X-Forwarded-Encrypted: i=1; AJvYcCWNQhSQoJBdcJ5LcmDiBuUn1V3CvIMiUwUXvQtxlUySYRQLvxOMogzm2/kHgFp7dVM/KStH7Q==@lists.infradead.org X-Gm-Message-State: AOJu0YxQoKg/CrltJ8YGKphS9Qiei5iM3CZnMl0Huhuj9vSy034TSsLo EHoy5LsTbu8NAitSPRkztrdsXlFfNCDkK9RBrQdecdosSx8nFbFrRCDr/Uo8ZAIwqjL0y1kKUoW UwaSkWiE5MaAzDQ== X-Received: from pjps20.prod.google.com ([2002:a17:90a:a114:b0:352:ca2d:ce63]) (user=dmatlack job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90a:d64e:b0:341:2b78:61b8 with SMTP id 98e67ed59e1d1-3543b3d65f8mr671636a91.20.1769721963975; Thu, 29 Jan 2026 13:26:03 -0800 (PST) Date: Thu, 29 Jan 2026 21:25:03 +0000 In-Reply-To: <20260129212510.967611-1-dmatlack@google.com> Mime-Version: 1.0 References: <20260129212510.967611-1-dmatlack@google.com> X-Mailer: git-send-email 2.53.0.rc1.225.gd81095ad13-goog Message-ID: <20260129212510.967611-17-dmatlack@google.com> Subject: [PATCH v2 16/22] vfio: selftests: Add vfio_pci_liveupdate_uapi_test From: David Matlack To: Alex Williamson Cc: Adithya Jayachandran , Alexander Graf , Alex Mastro , Alistair Popple , Andrew Morton , Ankit Agrawal , Bjorn Helgaas , Chris Li , David Matlack , David Rientjes , Jacob Pan , Jason Gunthorpe , Jason Gunthorpe , Jonathan Corbet , Josh Hilke , Kevin Tian , kexec@lists.infradead.org, kvm@vger.kernel.org, Leon Romanovsky , Leon Romanovsky , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org, linux-pci@vger.kernel.org, Lukas Wunner , "=?UTF-8?q?Micha=C5=82=20Winiarski?=" , Mike Rapoport , Parav Pandit , Pasha Tatashin , Pranjal Shrivastava , Pratyush Yadav , Raghavendra Rao Ananta , Rodrigo Vivi , Saeed Mahameed , Samiullah Khawaja , Shuah Khan , "=?UTF-8?q?Thomas=20Hellstr=C3=B6m?=" , Tomita Moeko , Vipin Sharma , Vivek Kasireddy , William Tu , Yi Liu , Zhu Yanjun Content-Type: text/plain; charset="UTF-8" X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260129_132605_400865_EFCCD8E7 X-CRM114-Status: GOOD ( 16.22 ) X-BeenThere: kexec@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "kexec" Errors-To: kexec-bounces+kexec=archiver.kernel.org@lists.infradead.org Add a selftest to exercise preserving a various VFIO files through /dev/liveupdate. Ensure that VFIO cdev device files can be preserved and everything else (group-based device files, group files, and container files) all fail. Signed-off-by: David Matlack --- tools/testing/selftests/vfio/Makefile | 1 + .../vfio/vfio_pci_liveupdate_uapi_test.c | 93 +++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 tools/testing/selftests/vfio/vfio_pci_liveupdate_uapi_test.c diff --git a/tools/testing/selftests/vfio/Makefile b/tools/testing/selftests/vfio/Makefile index f9c040094d4a..666310872217 100644 --- a/tools/testing/selftests/vfio/Makefile +++ b/tools/testing/selftests/vfio/Makefile @@ -4,6 +4,7 @@ TEST_GEN_PROGS += vfio_iommufd_setup_test TEST_GEN_PROGS += vfio_pci_device_test TEST_GEN_PROGS += vfio_pci_device_init_perf_test TEST_GEN_PROGS += vfio_pci_driver_test +TEST_GEN_PROGS += vfio_pci_liveupdate_uapi_test TEST_FILES += scripts/cleanup.sh TEST_FILES += scripts/lib.sh diff --git a/tools/testing/selftests/vfio/vfio_pci_liveupdate_uapi_test.c b/tools/testing/selftests/vfio/vfio_pci_liveupdate_uapi_test.c new file mode 100644 index 000000000000..3b4276b2532c --- /dev/null +++ b/tools/testing/selftests/vfio/vfio_pci_liveupdate_uapi_test.c @@ -0,0 +1,93 @@ +// SPDX-License-Identifier: GPL-2.0-only + +#include +#include +#include + +static const char *device_bdf; + +FIXTURE(vfio_pci_liveupdate_uapi_test) { + int luo_fd; + int session_fd; + struct iommu *iommu; + struct vfio_pci_device *device; +}; + +FIXTURE_VARIANT(vfio_pci_liveupdate_uapi_test) { + const char *iommu_mode; +}; + +#define FIXTURE_VARIANT_ADD_IOMMU_MODE(_iommu_mode) \ +FIXTURE_VARIANT_ADD(vfio_pci_liveupdate_uapi_test, _iommu_mode) { \ + .iommu_mode = #_iommu_mode, \ +} + +FIXTURE_VARIANT_ADD_ALL_IOMMU_MODES(); +#undef FIXTURE_VARIANT_ADD_IOMMU_MODE + +FIXTURE_SETUP(vfio_pci_liveupdate_uapi_test) +{ + self->luo_fd = luo_open_device(); + ASSERT_GE(self->luo_fd, 0); + + self->session_fd = luo_create_session(self->luo_fd, "session"); + ASSERT_GE(self->session_fd, 0); + + self->iommu = iommu_init(variant->iommu_mode); + self->device = vfio_pci_device_init(device_bdf, self->iommu); +} + +FIXTURE_TEARDOWN(vfio_pci_liveupdate_uapi_test) +{ + vfio_pci_device_cleanup(self->device); + iommu_cleanup(self->iommu); + close(self->session_fd); + close(self->luo_fd); +} + +TEST_F(vfio_pci_liveupdate_uapi_test, preserve_device) +{ + int ret; + + ret = luo_session_preserve_fd(self->session_fd, self->device->fd, 0); + + /* Preservation should only be supported for VFIO cdev files. */ + ASSERT_EQ(ret, self->iommu->iommufd ? 0 : -ENOENT); +} + +TEST_F(vfio_pci_liveupdate_uapi_test, preserve_group_fails) +{ + int ret; + + if (self->iommu->iommufd) + return; + + ret = luo_session_preserve_fd(self->session_fd, self->device->group_fd, 0); + ASSERT_EQ(ret, -ENOENT); +} + +TEST_F(vfio_pci_liveupdate_uapi_test, preserve_container_fails) +{ + int ret; + + if (self->iommu->iommufd) + return; + + ret = luo_session_preserve_fd(self->session_fd, self->iommu->container_fd, 0); + ASSERT_EQ(ret, -ENOENT); +} + +int main(int argc, char *argv[]) +{ + int fd; + + fd = luo_open_device(); + if (fd < 0) { + printf("open(%s) failed: %s, skipping\n", LUO_DEVICE, strerror(errno)); + return KSFT_SKIP; + } + close(fd); + + device_bdf = vfio_selftests_get_bdf(&argc, argv); + return test_harness_run(argc, argv); +} -- 2.53.0.rc1.225.gd81095ad13-goog