[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20251018000713.677779-22-vipinsh@google.com>
Date: Fri, 17 Oct 2025 17:07:13 -0700
From: Vipin Sharma <vipinsh@...gle.com>
To: bhelgaas@...gle.com, alex.williamson@...hat.com, pasha.tatashin@...een.com,
dmatlack@...gle.com, jgg@...pe.ca, graf@...zon.com
Cc: pratyush@...nel.org, gregkh@...uxfoundation.org, chrisl@...nel.org,
rppt@...nel.org, skhawaja@...gle.com, parav@...dia.com, saeedm@...dia.com,
kevin.tian@...el.com, jrhilke@...gle.com, david@...hat.com,
jgowans@...zon.com, dwmw2@...radead.org, epetron@...zon.de,
junaids@...gle.com, linux-kernel@...r.kernel.org, linux-pci@...r.kernel.org,
kvm@...r.kernel.org, linux-kselftest@...r.kernel.org,
Vipin Sharma <vipinsh@...gle.com>
Subject: [RFC PATCH 21/21] vfio: selftests: Validate vconfig preservation of
VFIO PCI device during live update
Test preservation of a VFIO PCI device virtual config (vconfig in struct
vfio_pci_core_device{}) during the live update. Write some random data
to PCI_INTERRUPT_LINE register which is virtualized by VFIO and verify
that the same data is read after kexec.
Certain bits in the config space are virtualized by VFIO, so write to
them don't go to the device PCI config instead they are stored in
memory. After live update, vconfig should have the value same as prior
to kexec, which means vconfig should be saved in KHO and later retrieved
to restore the device.
Signed-off-by: Vipin Sharma <vipinsh@...gle.com>
---
.../testing/selftests/vfio/vfio_pci_liveupdate_test.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/tools/testing/selftests/vfio/vfio_pci_liveupdate_test.c b/tools/testing/selftests/vfio/vfio_pci_liveupdate_test.c
index 9fd0061348e0..2d80fdcb1ef7 100644
--- a/tools/testing/selftests/vfio/vfio_pci_liveupdate_test.c
+++ b/tools/testing/selftests/vfio/vfio_pci_liveupdate_test.c
@@ -15,12 +15,14 @@
#define SESSION_NAME "multi_file_session"
#define TOKEN 1234
+#define RANDOM_DATA 0x12
static void run_pre_kexec(int luo_fd, const char *bdf)
{
struct vfio_pci_device *device;
int session_fd;
u16 command;
+ u8 data;
device = vfio_pci_device_init(bdf, "iommufd");
@@ -30,6 +32,10 @@ static void run_pre_kexec(int luo_fd, const char *bdf)
vfio_pci_config_writew(device, PCI_COMMAND,
command | PCI_COMMAND_MASTER);
+ vfio_pci_config_writeb(device, PCI_INTERRUPT_LINE, RANDOM_DATA);
+ data = vfio_pci_config_readb(device, PCI_INTERRUPT_LINE);
+ VFIO_ASSERT_EQ(data, RANDOM_DATA);
+
session_fd = luo_create_session(luo_fd, SESSION_NAME);
VFIO_ASSERT_GE(session_fd, 0, "Failed to create session %s",
SESSION_NAME);
@@ -51,6 +57,7 @@ static void run_post_kexec(int luo_fd, const char *bdf)
int vfio_fd;
struct vfio_pci_device *device;
u16 command;
+ u8 data;
session_fd = luo_retrieve_session(luo_fd, SESSION_NAME);
@@ -74,6 +81,9 @@ static void run_post_kexec(int luo_fd, const char *bdf)
command = vfio_pci_config_readw(device, PCI_COMMAND);
VFIO_ASSERT_TRUE(command & PCI_COMMAND_MASTER);
+
+ data = vfio_pci_config_readb(device, PCI_INTERRUPT_LINE);
+ VFIO_ASSERT_EQ(data, RANDOM_DATA);
vfio_pci_device_cleanup(device);
}
--
2.51.0.858.gf9c4a03a3a-goog
Powered by blists - more mailing lists