From: Dongwon Kim <[email protected]>
This patch series introduces support for handling hibernation (S4)
in the virtio-gpu driver by implementing .freeze and .restore hooks,
along with a PM notifier to restore GPU resources upon resume.
Patch 1 adds virtgpu_freeze and virtgpu_restore functions, which manage
virtio queue teardown before suspend/hibernation and reinitialization
during resume.
Patch 2 implements a mechanism to track and restore virtio_gpu_object
instances, addressing the issue where QEMU discards resources during
virtio-gpu-reset triggered by hibernation.
Patch 3 adds a PM notifier that triggers resubmission of GPU objects to
QEMU when the guest resumes from hibernation.
These changes ensure that the virtio-gpu driver can reliably restore
virtio-gpu resources after hibernation, preventing resource loss that
leads to system's instability.
v2: 10ms sleep is added in virtgpu_freeze to avoid the situation
the driver is locked up during resumption.
v3: Plain 10ms delay (v2) is replaced with wait calls which wait until
the virtio queue is empty.
(Dmitry Osipenko)
v4: New version of patchset only covers S4 case because loss of resources
in S3 case can be avoided by skipping virtio-gpu-reset in QEMU
(hw/display/virtio-gpu.c). For this, virtio-gpu-pci device should be
attached to PCIE bus AND a PCIE option, 'x-pcie-pm-no-soft-reset' needs
to be enabled when launching QEMU
(e.g. -device virtio-gpu-pci,bus=port,x-pcie-pm-no-soft-reset=true)
Dongwon Kim (3):
drm/virtio: Freeze and restore hooks to support suspend and resume
drm/virtio: Add support for saving and restoring virtio_gpu_objects
drm/virtio: Restore Virt-GPU res on hibernation resume via PM notifier
drivers/gpu/drm/virtio/virtgpu_drv.c | 60 ++++++++++++++++++++-
drivers/gpu/drm/virtio/virtgpu_drv.h | 13 +++++
drivers/gpu/drm/virtio/virtgpu_kms.c | 49 ++++++++++++++---
drivers/gpu/drm/virtio/virtgpu_object.c | 71 +++++++++++++++++++++++++
4 files changed, 186 insertions(+), 7 deletions(-)
--
2.34.1