Kernel KVM virtualization development
 help / color / mirror / Atom feed
* [PATCH v5 00/15] s390/vfio-ap: Add live guest migration support
@ 2026-07-24 16:13 Anthony Krowiak
  2026-07-24 16:13 ` [PATCH v5 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; 31+ messages in thread
From: Anthony Krowiak @ 2026-07-24 16:13 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 control
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 v4 => v5:
~~~~~~~~~~~~~~~~~~~
Patch 3: Functions to initialize/release vfio device migration data
* Fixed error path bug in vfio_ap_mdev_set_kvm function; reset pqap hook
  pointer
* Do not initialize vfio_device migration_flags and mig_ops for SE guests

Patch 4: Reset migration state in VFIO_DEVICE_RESET ioctl handler
* Added missing vfio_ap_release_mig_files() function

Patch 5: Callback to get/set vfio device mig state during guest migration
* Move mutex_unlock(&matrix_dev->mdevs_lock) before call to 
  vfio_put_device function in the vfio_ap_mdev_probe function to avoid
  deadlock situation
 
Patch 6: Transition guest migration state from STOP to STOP_COPY
* Acquire matrix_dev->mdevs_lock for duration of vfio_ap_release_mig_file
  callback
  
Patch 7: File ops called to save the vfio device migration state
* Change data type of ret in vfio_ap_stop_copy function to ssize_t to 
  accommodate negtive return codes.
  
Patch 9:  Add method to set a new guest AP configuration
* Removed call to vfio_ap_mdev_link_queue in 
  vfio_ap_mdev_unlink_fr_queues() function 
* Refactored vfio_ap_set_new_guest_config function to correct some bugs

Patch 10 - File ops called to resume the vfio device migration
* Fixed a corrupted kernel-doc comment in vfio_ap_private.h where a
  function signature was accidentally concatenated onto the @node field
  description of struct ap_matrix_mdev.
* Fixed do_post_copy_validation() to evaluate queues_available() and
  control_domains_available() independently rather than short-circuiting
  with ||, ensuring all availability errors are logged before returning so
  operators see the complete set of problems in a single migration attempt
* Fixed reallocate_ap_config() to use check_add_overflow() when computing
  the new buffer size for sub-header partial chunks, consistent with
  overflow checks used elsewhere in the file.
* Fixed verify_ap_configs_are_compatible() to return -EINVAL instead of
  -EFAULT for hardware incompatibility, as -EFAULT conventionally signals
  a bad userspace address rather than a compatibility failure.
* Removed a spurious blank line before return -EIO in the default: branch
  of get_hardware_info_for_queue() that was inconsistent with the style of
  the surrounding error paths.
* Clarified the QINFO_DATA_MASK comment to correctly describe the
  asymmetric semantics for the classification bits (upgrade permitted,
  downgrade rejected) and AP type (less-than-or-equal, not strict 
  equality), and to clarify that the BS bits must be zero on both sides
  rather than merely equal.
* Added a mig_data NULL check immediately after 
  get_update_locks_for_mdev() in vfio_ap_resuming_write() to guard against
  the migration file descriptor being closed concurrently while mdevs_lock
  was dropped for the copy_from_user(). get_update_locks_for_mdev()
  reacquires mdevs_lock as its final step, making the check safe at that
  point without introducing a separate preliminary lock acquisition that
  would deadlock.

Patch 15: Add live guest migration chapter to vfio-ap.rst
* Fixed the facilities bit range description from "Bits 0-3" to "Bits 0-2"
  to eliminate the overlap with the adapter modes range that begins at bit
  3.

* Fixed a typo: "Destinaton host" (appeared twice, in the "AP queues not 
  available" and "control domains not available" troubleshooting tables).

Signed-off-by: Anthony Krowiak <akrowiak@linux.ibm.com>

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: Add method to set a new guest AP configuration
  s390/vfio-ap: File ops called to resume the vfio device migration
  s390/vfio-ap: Transition device migration state to STOP
  s390/vfio-ap: Transition device migration state from STOP to RUNNING
    and vice versa
  s390/vfio-ap: Callback to get the size of data to be migrated during
    guest migration
  s390/vfio-ap: Add 'migratable' feature to sysfs 'features' attribute
  s390/vfio-ap: Add live guest migration chapter to vfio-ap.rst

 Documentation/arch/s390/vfio-ap.rst     |  616 +++++++--
 drivers/s390/crypto/Makefile            |    2 +-
 drivers/s390/crypto/vfio_ap_drv.c       |    4 +-
 drivers/s390/crypto/vfio_ap_migration.c | 1560 +++++++++++++++++++++++
 drivers/s390/crypto/vfio_ap_ops.c       |  305 +++--
 drivers/s390/crypto/vfio_ap_private.h   |   73 ++
 6 files changed, 2351 insertions(+), 209 deletions(-)
 create mode 100644 drivers/s390/crypto/vfio_ap_migration.c

-- 
2.53.0


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

end of thread, other threads:[~2026-07-24 18:38 UTC | newest]

Thread overview: 31+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-24 16:13 [PATCH v5 00/15] s390/vfio-ap: Add live guest migration support Anthony Krowiak
2026-07-24 16:13 ` [PATCH v5 01/15] s390/vfio-ap: Provide function to get the number of queues assigned to mdev Anthony Krowiak
2026-07-24 17:36   ` sashiko-bot
2026-07-24 16:13 ` [PATCH v5 02/15] s390/vfio-ap: Data structures for facilitating vfio device migration Anthony Krowiak
2026-07-24 17:28   ` sashiko-bot
2026-07-24 16:13 ` [PATCH v5 03/15] s390/vfio-ap: Functions to initialize/release vfio device migration data Anthony Krowiak
2026-07-24 17:35   ` sashiko-bot
2026-07-24 16:13 ` [PATCH v5 04/15] s390/vfio-ap: Reset migration state in VFIO_DEVICE_RESET ioctl handler Anthony Krowiak
2026-07-24 17:43   ` sashiko-bot
2026-07-24 16:13 ` [PATCH v5 05/15] s390-vfio-ap: Callback to get/set vfio device mig state during guest migration Anthony Krowiak
2026-07-24 17:47   ` sashiko-bot
2026-07-24 16:13 ` [PATCH v5 06/15] s390/vfio-ap: Transition guest migration state from STOP to STOP_COPY Anthony Krowiak
2026-07-24 17:50   ` sashiko-bot
2026-07-24 16:13 ` [PATCH v5 07/15] s390/vfio-ap: File ops called to save the vfio device migration state Anthony Krowiak
2026-07-24 18:04   ` sashiko-bot
2026-07-24 16:13 ` [PATCH v5 08/15] s390/vfio-ap: Transition device migration state from STOP to RESUMING Anthony Krowiak
2026-07-24 18:06   ` sashiko-bot
2026-07-24 16:13 ` [PATCH v5 09/15] s390/vfio-ap: Add method to set a new guest AP configuration Anthony Krowiak
2026-07-24 18:10   ` sashiko-bot
2026-07-24 16:13 ` [PATCH v5 10/15] s390/vfio-ap: File ops called to resume the vfio device migration Anthony Krowiak
2026-07-24 18:17   ` sashiko-bot
2026-07-24 16:13 ` [PATCH v5 11/15] s390/vfio-ap: Transition device migration state to STOP Anthony Krowiak
2026-07-24 18:26   ` sashiko-bot
2026-07-24 16:13 ` [PATCH v5 12/15] s390/vfio-ap: Transition device migration state from STOP to RUNNING and vice versa Anthony Krowiak
2026-07-24 18:29   ` sashiko-bot
2026-07-24 16:13 ` [PATCH v5 13/15] s390/vfio-ap: Callback to get the size of data to be migrated during guest migration Anthony Krowiak
2026-07-24 18:27   ` sashiko-bot
2026-07-24 16:13 ` [PATCH v5 14/15] s390/vfio-ap: Add 'migratable' feature to sysfs 'features' attribute Anthony Krowiak
2026-07-24 18:30   ` sashiko-bot
2026-07-24 16:13 ` [PATCH v5 15/15] s390/vfio-ap: Add live guest migration chapter to vfio-ap.rst Anthony Krowiak
2026-07-24 18:38   ` sashiko-bot

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