• Nico Boehr's avatar
    KVM: s390: pv: don't present the ecall interrupt twice · c3f0e5fd
    Nico Boehr authored
    When the SIGP interpretation facility is present and a VCPU sends an
    ecall to another VCPU in enabled wait, the sending VCPU receives a 56
    intercept (partial execution), so KVM can wake up the receiving CPU.
    Note that the SIGP interpretation facility will take care of the
    interrupt delivery and KVM's only job is to wake the receiving VCPU.
    
    For PV, the sending VCPU will receive a 108 intercept (pv notify) and
    should continue like in the non-PV case, i.e. wake the receiving VCPU.
    
    For PV and non-PV guests the interrupt delivery will occur through the
    SIGP interpretation facility on SIE entry when SIE finds the X bit in
    the status field set.
    
    However, in handle_pv_notification(), there was no special handling for
    SIGP, which leads to interrupt injection being requested by KVM for the
    next SIE entry. This results in the interrupt being delivered twice:
    once by the SIGP interpretation facility and once by KVM through the
    IICTL.
    
    Add the necessary special handling in handle_pv_notification(), similar
    to handle_partial_execution(), which simply wakes the receiving VCPU and
    leave interrupt delivery to the SIGP interpretation facility.
    
    In contrast to external calls, emergency calls are not interpreted but
    also cause a 108 intercept, which is why we still need to call
    handle_instruction() for SIGP orders other than ecall.
    
    Since kvm_s390_handle_sigp_pei() is now called for all SIGP orders which
    cause a 108 intercept - even if they are actually handled by
    handle_instruction() - move the tracepoint in kvm_s390_handle_sigp_pei()
    to avoid possibly confusing trace messages.
    Signed-off-by: default avatarNico Boehr <nrb@linux.ibm.com>
    Cc: <stable@vger.kernel.org> # 5.7
    Fixes: da24a0cc ("KVM: s390: protvirt: Instruction emulation")
    Reviewed-by: default avatarClaudio Imbrenda <imbrenda@linux.ibm.com>
    Reviewed-by: default avatarJanosch Frank <frankja@linux.ibm.com>
    Reviewed-by: default avatarChristian Borntraeger <borntraeger@linux.ibm.com>
    Link: https://lore.kernel.org/r/20220718130434.73302-1-nrb@linux.ibm.com
    Message-Id: <20220718130434.73302-1-nrb@linux.ibm.com>
    Signed-off-by: default avatarClaudio Imbrenda <imbrenda@linux.ibm.com>
    c3f0e5fd
sigp.c 13 KB