s390: Async page fault control
PATCH 1/1 s390: Async page fault control
Following the current discussion on the kvm ML, here are the qemu bits regarding async page faults. They are responsible for enabling, disabling the feature and adding a savevm handler for live migration.
Dominik Dingel (1):
Enable async page faults with live migration
target-s390x/kvm.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+)
Signature · 1 line
1.8.2.2
PATCH 1/1 Enable async page faults
S390 can also use async page faults, to enhance guest scheduling. But in the case of live migration we want to disable the feature and know if there are still notifications in flight.
--- target-s390x/kvm.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+)
target-s390x/kvm.c +42 -0
@@ -36,6 +36,7 @@#include "sysemu/device_tree.h" #include "qapi/qmp/qjson.h" #include "monitor/monitor.h" +#include "migration/migration.h" /* #define DEBUG_KVM */
@@ -92,9 +93,50 @@ const KVMCapabilityInfo kvm_arch_required_capabilities[] = {static int cap_sync_regs; +static int apf_disable (QEMUFile *f,void *opaque) +{ +kvm_vm_ioctl (opaque,KVM_S390_APF_DISABLE ); +return 0 ; +} + +static void apf_enable (void *opaque) +{ +kvm_vm_ioctl (opaque,KVM_S390_APF_ENABLE ); +} + +static int apf_finish (QEMUFile *f,void *opaque,int version_id) +{ +apf_enable (opaque); +return 0 ; +} + +static uint64_t apf_status (QEMUFile *f,void *opaque,uint64_t max_size) +{ +uint64_t rc =0 ; + +if (kvm_vm_ioctl (opaque,KVM_S390_APF_STATUS ) != +KVM_S390_APF_DISABLED_NON_PENDING ) { + rc =0xff0000 ; + } +return rc; +} + +SaveVMHandlers savevm_apf_handlers = { + .save_live_setup = apf_disable, + .save_live_iterate =NULL , + .save_live_complete =NULL , + .save_live_pending = apf_status, + .load_state = apf_finish, + .cancel = apf_enable, +}; +int kvm_arch_init (KVMState *s) { cap_sync_regs =kvm_check_extension (s,KVM_CAP_SYNC_REGS ); +if (kvm_check_extension (s,KVM_CAP_ASYNC_PF )) { +register_savevm_live (NULL ,"apf" ,-1 ,1 , &savevm_apf_handlers, s); +kvm_vm_ioctl (s,KVM_S390_APF_ENABLE ); + }return 0 ; }
Signature · 1 line
1.8.2.2
Re: [Qemu-devel] [PATCH] Enable async page faults
Am 09.07.2013 17:47, schrieb Dominik Dingel:
Quoted 22 lines
S390 can also use async page faults, to enhance guest scheduling. But in the case of live migration we want to disable the feature and know if there are still notifications in flight.
Signed-off-by Dominik Dingel <[email protected]>--- target-s390x/kvm.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+)target-s390x/kvm.c +1
-0@@ -36,6 +36,7 @@#include "sysemu/device_tree.h" #include "qapi/qmp/qjson.h" #include "monitor/monitor.h" +#include "migration/migration.h" /* #define DEBUG_KVM */
target-s390x/kvm.c const KVMCapabilityInfo kvm_arch_required_capabilities[] = { · line 98
Quoted 6 lines
target-s390x/kvm.c +3
-0@@ -92,9 +93,50 @@ const KVMCapabilityInfo kvm_arch_required_capabilities[] = {static int cap_sync_regs; +static int apf_disable (QEMUFile *f,void *opaque) +{ +kvm_vm_ioctl (opaque,KVM_S390_APF_DISABLE );
Better don't pass opaques directly as a typed argument, especially in a KVM file not widely tested; we just had such a runtime breakage. KVMState *s = opaque; elegantly avoids it here and improves readability.
Regards,
Andreas
Quoted 45 lines
target-s390x/kvm.c +38
-0+return 0 ; +} + +static void apf_enable (void *opaque) +{ +kvm_vm_ioctl (opaque,KVM_S390_APF_ENABLE ); +} + +static int apf_finish (QEMUFile *f,void *opaque,int version_id) +{ +apf_enable (opaque); +return 0 ; +} + +static uint64_t apf_status (QEMUFile *f,void *opaque,uint64_t max_size) +{ +uint64_t rc =0 ; + +if (kvm_vm_ioctl (opaque,KVM_S390_APF_STATUS ) != +KVM_S390_APF_DISABLED_NON_PENDING ) { + rc =0xff0000 ; + } +return rc; +} + +SaveVMHandlers savevm_apf_handlers = { + .save_live_setup = apf_disable, + .save_live_iterate =NULL , + .save_live_complete =NULL , + .save_live_pending = apf_status, + .load_state = apf_finish, + .cancel = apf_enable, +}; +int kvm_arch_init (KVMState *s) { cap_sync_regs =kvm_check_extension (s,KVM_CAP_SYNC_REGS ); +if (kvm_check_extension (s,KVM_CAP_ASYNC_PF )) { +register_savevm_live (NULL ,"apf" ,-1 ,1 , &savevm_apf_handlers, s); +kvm_vm_ioctl (s,KVM_S390_APF_ENABLE ); + }return 0 ; }
Signature · 2 lines
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg