Public bug reported:

Description:   KVM: PV: ext call delivered twice when receiver in PSW wait
Symptom:       In a secure execution guest, the external interrupt for the 
               SIGP external call order is delivered twice to a VCPU even
               though it was only sent once.
Problem:       Under PV, external call interrupts are delivered by the SIGP
               interpretation facility, without KVM's involvement. But, if the
               receiving CPU is in enabled wait, KVM needs to wake the
               receiving CPU such that the interrupt can be delivered. Hence,
               in this case, the SIGP external call order causes an
               interception. In response, KVM only needs to wake the receiving
               VCPU. Interrupt delivery is then handled by the SIGP
               interpretation facility. 

               KVM wrongfuly assumed it also needs to request injection for the
               external call interrupt after the respective intercept, causing
               the interrupt to be delivered twice: once through the SIGP
               interpretation facility and once through the interrupt injection
               control by KVM.
Solution:      Add appropriate special handling for 108 external call
               intercepts.
Reproduction:  0. Apply kvm-unit-test submitted upstream 
                  ("[kvm-unit-tests PATCH v1 0/4] s390x: add tests for SIGP
                  call orders in enabled wait").
               1. Run the smp_PV kvm-unit-test:
                    ./run_tests.sh smp_PV
               2. Check logs/smp_PV.log. If system is affected, the following
                  line can be found:
                    ABORT: smp: psw wait: ecall: Unexpected external call \
                     interrupt (code 0x1202): on cpu 1 at 0x11958
                  If the system is not affected, the line should look like
                  this:
                    PASS: smp: psw wait: ecall: received

Preventive:    yes
Author:        Nico Boehr <n...@linux.ibm.com>
Component:     kernel

** Affects: linux (Ubuntu)
     Importance: Undecided
     Assignee: Skipper Bug Screeners (skipper-screen-team)
         Status: New


** Tags: architecture-s39064 bugnameltc-199408 severity-medium 
targetmilestone-inin---

** Tags added: architecture-s39064 bugnameltc-199408 severity-medium
targetmilestone-inin---

** Changed in: ubuntu
     Assignee: (unassigned) => Skipper Bug Screeners (skipper-screen-team)

** Package changed: ubuntu => linux (Ubuntu)

-- 
You received this bug notification because you are a member of Kernel
Packages, which is subscribed to linux in Ubuntu.
https://bugs.launchpad.net/bugs/1995941

Title:
  [UBUNTU 20.04] KVM: PV: ext call delivered twice when receiver in PSW
  wait

Status in linux package in Ubuntu:
  New

Bug description:
  Description:   KVM: PV: ext call delivered twice when receiver in PSW wait
  Symptom:       In a secure execution guest, the external interrupt for the 
                 SIGP external call order is delivered twice to a VCPU even
                 though it was only sent once.
  Problem:       Under PV, external call interrupts are delivered by the SIGP
                 interpretation facility, without KVM's involvement. But, if the
                 receiving CPU is in enabled wait, KVM needs to wake the
                 receiving CPU such that the interrupt can be delivered. Hence,
                 in this case, the SIGP external call order causes an
                 interception. In response, KVM only needs to wake the receiving
                 VCPU. Interrupt delivery is then handled by the SIGP
                 interpretation facility. 

                 KVM wrongfuly assumed it also needs to request injection for 
the
                 external call interrupt after the respective intercept, causing
                 the interrupt to be delivered twice: once through the SIGP
                 interpretation facility and once through the interrupt 
injection
                 control by KVM.
  Solution:      Add appropriate special handling for 108 external call
                 intercepts.
  Reproduction:  0. Apply kvm-unit-test submitted upstream 
                    ("[kvm-unit-tests PATCH v1 0/4] s390x: add tests for SIGP
                    call orders in enabled wait").
                 1. Run the smp_PV kvm-unit-test:
                      ./run_tests.sh smp_PV
                 2. Check logs/smp_PV.log. If system is affected, the following
                    line can be found:
                      ABORT: smp: psw wait: ecall: Unexpected external call \
                       interrupt (code 0x1202): on cpu 1 at 0x11958
                    If the system is not affected, the line should look like
                    this:
                      PASS: smp: psw wait: ecall: received

  Preventive:    yes
  Author:        Nico Boehr <n...@linux.ibm.com>
  Component:     kernel

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1995941/+subscriptions


-- 
Mailing list: https://launchpad.net/~kernel-packages
Post to     : kernel-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~kernel-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to