Skip to content
  • Roman Bolshakov's avatar
    ddd31732
    i386: hvf: Reset IRQ inhibition after moving RIP · ddd31732
    Roman Bolshakov authored
    
    
    The sequence of instructions exposes an issue:
      sti
      hlt
    
    Interrupts cannot be delivered to hvf after hlt instruction cpu because
    HF_INHIBIT_IRQ_MASK is set just before hlt is handled and never reset
    after moving instruction pointer beyond hlt.
    
    So, after hvf_vcpu_exec() returns, CPU thread gets locked up forever in
    qemu_wait_io_event() (cpu_thread_is_idle() evaluates inhibition
    flag and considers the CPU idle if the flag is set).
    
    Cc: Cameron Esfahani <dirty@apple.com>
    Signed-off-by: default avatarRoman Bolshakov <r.bolshakov@yadro.com>
    Message-Id: <20200328174411.51491-1-r.bolshakov@yadro.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    ddd31732
    i386: hvf: Reset IRQ inhibition after moving RIP
    Roman Bolshakov authored
    
    
    The sequence of instructions exposes an issue:
      sti
      hlt
    
    Interrupts cannot be delivered to hvf after hlt instruction cpu because
    HF_INHIBIT_IRQ_MASK is set just before hlt is handled and never reset
    after moving instruction pointer beyond hlt.
    
    So, after hvf_vcpu_exec() returns, CPU thread gets locked up forever in
    qemu_wait_io_event() (cpu_thread_is_idle() evaluates inhibition
    flag and considers the CPU idle if the flag is set).
    
    Cc: Cameron Esfahani <dirty@apple.com>
    Signed-off-by: default avatarRoman Bolshakov <r.bolshakov@yadro.com>
    Message-Id: <20200328174411.51491-1-r.bolshakov@yadro.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
Loading