virtio-mem: Add support for suspend+wake-up with plugged memory
Before, the virtio-mem device would unplug all the memory with any reset of the device, including during the wake-up of the guest from a suspended state. Due to this, the virtio-mem driver in the Linux kernel disallowed suspend-to-ram requests in the guest when the VIRTIO_MEM_F_PERSISTENT_SUSPEND feature is not exposed by QEMU. This patch adds the code to skip the reset on wake-up and exposes theVIRTIO_MEM_F_PERSISTENT_SUSPEND feature to the guest kernel driver when suspending is possible in QEMU (currently only x86). Message-ID: <20240904103722.946194-5-jmarcin@redhat.com> Reviewed-by: David Hildenbrand <david@redhat.com> Signed-off-by: Juraj Marcin <jmarcin@redhat.com> Signed-off-by: David Hildenbrand <david@redhat.com>
This commit is contained in:
parent
c009a311e9
commit
1f5f49056d
@ -890,6 +890,9 @@ static uint64_t virtio_mem_get_features(VirtIODevice *vdev, uint64_t features,
|
||||
if (vmem->unplugged_inaccessible == ON_OFF_AUTO_ON) {
|
||||
virtio_add_feature(&features, VIRTIO_MEM_F_UNPLUGGED_INACCESSIBLE);
|
||||
}
|
||||
if (qemu_wakeup_suspend_enabled()) {
|
||||
virtio_add_feature(&features, VIRTIO_MEM_F_PERSISTENT_SUSPEND);
|
||||
}
|
||||
return features;
|
||||
}
|
||||
|
||||
@ -1848,6 +1851,13 @@ static void virtio_mem_system_reset_hold(Object *obj, ResetType type)
|
||||
{
|
||||
VirtIOMEM *vmem = VIRTIO_MEM(obj);
|
||||
|
||||
/*
|
||||
* When waking up from standby/suspend-to-ram, do not unplug any memory.
|
||||
*/
|
||||
if (type == RESET_TYPE_WAKEUP) {
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* During usual resets, we will unplug all memory and shrink the usable
|
||||
* region size. This is, however, not possible in all scenarios. Then,
|
||||
|
@ -450,6 +450,9 @@ static const qmp_virtio_feature_map_t virtio_mem_feature_map[] = {
|
||||
FEATURE_ENTRY(VIRTIO_MEM_F_UNPLUGGED_INACCESSIBLE, \
|
||||
"VIRTIO_MEM_F_UNPLUGGED_INACCESSIBLE: Unplugged memory cannot be "
|
||||
"accessed"),
|
||||
FEATURE_ENTRY(VIRTIO_MEM_F_PERSISTENT_SUSPEND, \
|
||||
"VIRTIO_MEM_F_PERSISTENT_SUSPND: Plugged memory will remain "
|
||||
"plugged when suspending+resuming"),
|
||||
{ -1, "" }
|
||||
};
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user