Skip to content
  • Andreas Färber's avatar
    cpu: Partially revert "cpu: Change qemu_init_vcpu() argument to CPUState" · 14a10fc3
    Andreas Färber authored
    Commit c643bed9
    
     moved qemu_init_vcpu() calls to common CPUState code.
    This causes x86 cpu-add to fail with "KVM: setting VAPIC address failed".
    
    The reason for the failure is that CPUClass::kvm_fd is not yet
    initialized in the following call graph:
    ->x86_cpu_realizefn
     ->x86_cpu_apic_realize
      ->qdev_init
       ->device_set_realized
        ->device_reset (hotplugged == 1)
         ->apic_reset_common
          ->vapic_base_update
           ->kvm_apic_vapic_base_update
    This causes attempted KVM vCPU ioctls to fail.
    
    By contrast, in the non-hotplug case the APIC is reset much later, when
    the vCPU is already initialized.
    
    As a quick and safe solution, move the qemu_init_vcpu() call back into
    the targets' realize functions.
    
    Reported-by: default avatarChen Fan <chen.fan.fnst@cn.fujitsu.com>
    Acked-by: Igor Mammedov <imammedo@redhat.com> (for i386)
    Tested-by: Jia Liu <proljc@gmail.com> (for openrisc)
    Signed-off-by: default avatarAndreas Färber <afaerber@suse.de>
    14a10fc3