Skip to content
  • Jan Kiszka's avatar
    KVM: Rework VCPU state writeback API · ea375f9a
    Jan Kiszka authored
    
    
    This grand cleanup drops all reset and vmsave/load related
    synchronization points in favor of four(!) generic hooks:
    
    - cpu_synchronize_all_states in qemu_savevm_state_complete
      (initial sync from kernel before vmsave)
    - cpu_synchronize_all_post_init in qemu_loadvm_state
      (writeback after vmload)
    - cpu_synchronize_all_post_init in main after machine init
    - cpu_synchronize_all_post_reset in qemu_system_reset
      (writeback after system reset)
    
    These writeback points + the existing one of VCPU exec after
    cpu_synchronize_state map on three levels of writeback:
    
    - KVM_PUT_RUNTIME_STATE (during runtime, other VCPUs continue to run)
    - KVM_PUT_RESET_STATE   (on synchronous system reset, all VCPUs stopped)
    - KVM_PUT_FULL_STATE    (on init or vmload, all VCPUs stopped as well)
    
    This level is passed to the arch-specific VCPU state writing function
    that will decide which concrete substates need to be written. That way,
    no writer of load, save or reset functions that interact with in-kernel
    KVM states will ever have to worry about synchronization again. That
    also means that a lot of reasons for races, segfaults and deadlocks are
    eliminated.
    
    cpu_synchronize_state remains untouched, just as Anthony suggested. We
    continue to need it before reading or writing of VCPU states that are
    also tracked by in-kernel KVM subsystems.
    
    Consequently, this patch removes many cpu_synchronize_state calls that
    are now redundant, just like remaining explicit register syncs.
    
    Signed-off-by: default avatarJan Kiszka <jan.kiszka@siemens.com>
    Signed-off-by: default avatarMarcelo Tosatti <mtosatti@redhat.com>
    ea375f9a