mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH v10 00/15] s390/vfio-ap: Add live guest migration support
@ 2026-10-23 17:43 Anthony Krowiak
  2026-10-23 17:43 ` [PATCH v10 01/15] s390/vfio-ap: Provide function to get the number of queues assigned to mdev Anthony Krowiak
                   ` (14 more replies)
  0 siblings, 15 replies; 17+ messages in thread
From: Anthony Krowiak @ 2026-10-23 17:43 UTC (permalink / raw)
  To: linux-s390, linux-kernel, kvm
  Cc: jjherne, borntraeger, mjrosato, pasic, alex, kwankhede, fiuczy,
	pbonzini, frankja, imbrenda, agordeev, hca, gor

This patch series implements live guest migration support for KVM guests
with s390 AP (Adjunct Processor) devices passed through via the VFIO
mediated device framework.

Background
~~~~~~~~~~

The vfio-ap device driver differs from typical VFIO device drivers in that
it does not virtualize a physical device. Instead, it manages AP
configuration metadata identifying the AP adapters, domains, and controls390/vfio-ap: Add live guest migration support
domains to which a guest will be granted access. These AP resources are
configured by assigning them to a vfio-ap mediated device via its sysfs
assignment interfaces. When the fd for the VFIO device is opened by
userspace, the vfio_ap device driver sets the guest's AP configuration
from the metadata stored with the mediated device. As such, the AP devices
are not accessed directly through the vfio_ap driver, so the driver has no
internal AP device state to migrate. What it does migrate is the AP
configuration metadata of the source guest.

Implementation Approach
~~~~~~~~~~~~~~~~~~~~~~~

This series implements the VFIO migration protocol using the STOP_COPY
migration flow. The key aspects are:

1. On transition of the migration state from STOP to STOP_COPY
   - The vfio_ap device driver creates a filestream for userspace to use to
     read the guest's AP configuration from the mdev

2. During the STOP_COPY phase
   - Userspace uses the filestream created in #1 to read the source guest's
     AP configuration
   - The vfio_ap device driver copies the source guest's AP configuration
     information to userspace

3. On transition of the migration state from STOP to RESUMING
   - The vfio_ap device driver creates a filestream for userspace to use to
     write the source guest's AP configuration information so it can be
     restored to the mdev on the destination host.

4. During the RESUMING phase
   - Userspace uses the filestream created in #3 to send the source guest's
     AP configuration information to the vfio_ap device driver on the
     destination host.
   - The vfio_ap device driver first verifies the source guest's AP
     configuration is compatible with the destination host's.
   - The driver restores AP configuration to the mdev on the destination
     host which automatically hot plugs the AP resources identified
     therein.

5. Documentation
   - Add live guest migration chapter to vfio-ap.rst

Compatibility Validation
~~~~~~~~~~~~~~~~~~~~~~~~

The series includes comprehensive validation to ensure source and
destination AP configurations are compatible. For each queue, the following
characteristics must match:

- AP type (target must be same or newer than source)
- Installed facilities (APSC, APQKM, AP4KC, SLCF)
- Operating mode (CCA, Accelerator, XCP)
- APXA facility setting
- Classification (native vs stateless functions)
- Queue usability (binding/associated state)

When incompatibilities are detected, migration fails with detailed error
messages identifying the specific queue and characteristic that caused
the failure.

Configuration Management
~~~~~~~~~~~~~~~~~~~~~~~~

This implementation does not prevent configuration changes during
migration. Configuration stability is an orchestration-layer
responsibility, consistent with other VFIO device types. The driver's
role is to validate configurations and provide clear diagnostics when
incompatibilities are detected, enabling orchestration tools to implement
appropriate policies.

QEMU patches exploiting this series:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
https://lore.kernel.org/qemu-devel/20260409141352.997844-1-akrowiak@linux.ibm.com/

Change log v9 => v10:
~~~~~~~~~~~~~~~~~~~~
Patch 03/15: Functions to initialize/release vfio device migration data
* vfio_ap_mdev_init_dev()
  ~ Drop unnecessary matrix_dev->mdevs_lock around migration init/release calls
* Deferred setting vdev.mig_ops and migration_flags to patch 13/15 so migration
  is not advertised while callbacks are stubs
* Fixed kernel-doc parameter tag mismatch in comments

Patch 04/15: Reset migration state in VFIO_DEVICE_RESET ioctl handler
* Updated commit message to clarify that resetting migration state releases
  open migration file buffers while retaining mig_data

Patch 05/15: Callback to get/set vfio device mig state during guest migration
* vfio_ap_set_state()
  ~ Removed dead/unreachable branches

Patch 06/15: Transition guest migration state from STOP to STOP_COPY
* vfio_ap_stop_copy_read()
  ~ Added parameter names to function prototype to fix GCC < 11 build errors

Patch 07/15: File ops called to save the vfio device migration state
* get_hardware_info_for_queue()
  ~ Use ap_test_queue() with the T-bit set instead of ap_tapq()
  ~ Accept all 5 architecture-defined response codes returning valid hwinfo
    (NORMAL, RESET_IN_PROGRESS, DECONFIGURED, CHECKSTOPPED, BUSY); unknown RCs
    return -EIO
  ~ Removed retry loop and msleep(), eliminating sleep-under-lock
* vfio_ap_stop_copy_read()
  ~ Copy data into a bounce buffer under mdevs_lock and invoke copy_to_user()
    outside the lock to avoid holding the lock across user memory faults
  ~ Changed *pos check to if (*pos < 0) return -EINVAL
* vfio_ap_config_size()
  ~ Changed parameter type from int * to unsigned int * and dropped (int *) cast
* Incompatibility reporting
  ~ Report APQN in error log when AP type mismatch is detected
  ~ Corrected QINFO_DATA_MASK bit range documentation comments
* Dropped unnecessary compat_ioctl file operation

Patch 08/15: Transition device migration state from STOP to RESUMING
* Updated commit message describing state transitions
r
Patch 09/15: Prepare lock helpers and matrix init for cross-file use
* Updated commit message to clarify that assert_has_update_locks_for_mdev()
  is a newly introduced helper

Patch 10/15: File ops called to resume the vfio device migration
* Switched to pre-configured destination mdev model:
  ~ Destination mdev must be pre-configured by admin with crypto resources
  ~ Migration stream contents are strictly validated against destination
    matrix_mdev configuration and shadow_apcb; stream data no longer mutates
    matrix or shadow_apcb
  ~ Removed setup_ap_matrix_from_ap_config() and dynamic guest re-configuration
* do_post_copy_validation()
  ~ Validate stream magic, version, and header consistency
  ~ Verify that incoming APQNs and cdoms are a subset of destination shadow_apcb
  ~ Enforce that all passed-through queues match the pre-configured matrix
* vfio_ap_resuming_write()
  ~ Changed *pos check to if (*pos < 0) return -EINVAL
* Fixed stray colon in kernel log message

Patch 11/15: Transition device migration state to from/to STOP
* vfio_ap_set_state()
  ~ Reject transition from RESUMING to STOP with -EINVAL if the full
    migration configuration data stream has not been received

Patch 12/15: Callback to get the size of data to be migrated during guest migration
* Replaced size calculation logic with direct call to vfio_ap_config_size()

Patch 13/15: Set up for vfio-ap device migration
* Set vdev.mig_ops and VFIO_MIGRATION_STOP_COPY flag in vfio_ap_mdev_probe()
  once all migration callbacks are fully implemented
* Cleaned up probe function comments regarding lock ordering

Patch 14/15: Add 'migration' feature to sysfs 'features' attribute
* Renamed sysfs feature attribute from 'migratable' to 'migration'

Patch 15/15: Add live guest migration chapter to vfio-ap.rst
* Corrected erroneous sentence swapping source host with destination host
* Updated documentation for pre-configured destination mdev requirement
* Fixed error code and console output in incompatible-queue example
  (ret: -22 / -EINVAL)
* Synchronized kernel and console log messages and format specifiers with
  the exact strings in drivers/s390/crypto/vfio_ap_migration.c

Anthony Krowiak (15):
  s390/vfio-ap: Provide function to get the number of queues assigned to
    mdev
  s390/vfio-ap: Data structures for facilitating vfio device migration
  s390/vfio-ap: Functions to initialize/release vfio device migration
    data
  s390/vfio-ap: Reset migration state in VFIO_DEVICE_RESET ioctl handler
  s390/vfio-ap: Callback to get/set vfio device mig state during guest
    migration
  s390/vfio-ap: Transition guest migration state from STOP to STOP_COPY
  s390/vfio-ap: File ops called to save the vfio device migration state
  s390/vfio-ap: Transition device migration state from STOP to RESUMING
  s390/vfio-ap: Prepare lock helpers and matrix init for cross-file use
  s390/vfio-ap: File ops called to resume the vfio device migration
  s390/vfio-ap: Transition device migration state to from/to STOP
  s390/vfio-ap: Callback to get the size of data to be migrated during
    guest migration
  s390/vfio-ap: Set up for vfio-ap device migration
  s390/vfio-ap: Add 'migration' feature to sysfs 'features' attribute
  s390/vfio-ap: Add live guest migration chapter to vfio-ap.rst

 Documentation/arch/s390/vfio-ap.rst     |  641 ++++++++--
 drivers/s390/crypto/Makefile            |    2 +-
 drivers/s390/crypto/vfio_ap_drv.c       |   14 +-
 drivers/s390/crypto/vfio_ap_migration.c | 1419 +++++++++++++++++++++++
 drivers/s390/crypto/vfio_ap_ops.c       |  120 +-
 drivers/s390/crypto/vfio_ap_private.h   |   70 ++
 6 files changed, 2111 insertions(+), 155 deletions(-)
 create mode 100644 drivers/s390/crypto/vfio_ap_migration.c

-- 
2.53.0


^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2026-10-24  7:12 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-10-23 17:43 [PATCH v10 00/15] s390/vfio-ap: Add live guest migration support Anthony Krowiak
2026-10-23 17:43 ` [PATCH v10 01/15] s390/vfio-ap: Provide function to get the number of queues assigned to mdev Anthony Krowiak
2026-10-23 17:43 ` [PATCH v10 02/15] s390/vfio-ap: Data structures for facilitating vfio device migration Anthony Krowiak
2026-10-23 17:43 ` [PATCH v10 03/15] s390/vfio-ap: Functions to initialize/release vfio device migration data Anthony Krowiak
2026-10-24  7:11   ` kernel test robot
2026-10-23 17:43 ` [PATCH v10 04/15] s390/vfio-ap: Reset migration state in VFIO_DEVICE_RESET ioctl handler Anthony Krowiak
2026-10-23 17:43 ` [PATCH v10 05/15] s390/vfio-ap: Callback to get/set vfio device mig state during guest migration Anthony Krowiak
2026-10-23 17:43 ` [PATCH v10 06/15] s390/vfio-ap: Transition guest migration state from STOP to STOP_COPY Anthony Krowiak
2026-10-23 17:43 ` [PATCH v10 07/15] s390/vfio-ap: File ops called to save the vfio device migration state Anthony Krowiak
2026-10-23 17:43 ` [PATCH v10 08/15] s390/vfio-ap: Transition device migration state from STOP to RESUMING Anthony Krowiak
2026-10-23 17:43 ` [PATCH v10 09/15] s390/vfio-ap: Prepare lock helpers and matrix init for cross-file use Anthony Krowiak
2026-10-23 17:43 ` [PATCH v10 10/15] s390/vfio-ap: File ops called to resume the vfio device migration Anthony Krowiak
2026-10-23 17:43 ` [PATCH v10 11/15] s390/vfio-ap: Transition device migration state to from/to STOP Anthony Krowiak
2026-10-23 17:43 ` [PATCH v10 12/15] s390/vfio-ap: Callback to get the size of data to be migrated during guest migration Anthony Krowiak
2026-10-23 17:43 ` [PATCH v10 13/15] s390/vfio-ap: Set up for vfio-ap device migration Anthony Krowiak
2026-10-23 17:43 ` [PATCH v10 14/15] s390/vfio-ap: Add 'migration' feature to sysfs 'features' attribute Anthony Krowiak
2026-10-23 17:43 ` [PATCH v10 15/15] s390/vfio-ap: Add live guest migration chapter to vfio-ap.rst Anthony Krowiak

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®