All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christian Borntraeger <borntraeger@de.ibm.com>
To: Christian Borntraeger <borntraeger@de.ibm.com>,
	Janosch Frank <frankja@linux.vnet.ibm.com>
Cc: KVM <kvm@vger.kernel.org>, Cornelia Huck <cohuck@redhat.com>,
	David Hildenbrand <david@redhat.com>,
	Thomas Huth <thuth@redhat.com>,
	Ulrich Weigand <Ulrich.Weigand@de.ibm.com>,
	Claudio Imbrenda <imbrenda@linux.ibm.com>,
	Andrea Arcangeli <aarcange@redhat.com>
Subject: [RFCv2 12/37] KVM: s390: protvirt: Handle SE notification interceptions
Date: Mon,  3 Feb 2020 08:19:32 -0500	[thread overview]
Message-ID: <20200203131957.383915-13-borntraeger@de.ibm.com> (raw)
In-Reply-To: <20200203131957.383915-1-borntraeger@de.ibm.com>

From: Janosch Frank <frankja@linux.ibm.com>

Since KVM doesn't emulate any form of load control and load psw
instructions anymore, we wouldn't get an interception if PSWs or CRs
are changed in the guest. That means we can't inject IRQs right after
the guest is enabled for them.

The new interception codes solve that problem by being a notification
for changes to IRQ enablement relevant bits in CRs 0, 6 and 14, as
well a the machine check mask bit in the PSW.

No special handling is needed for these interception codes, the KVM
pre-run code will consult all necessary CRs and PSW bits and inject
IRQs the guest is enabled for.

Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
---
 arch/s390/include/asm/kvm_host.h |  2 ++
 arch/s390/kvm/intercept.c        | 10 ++++++++++
 2 files changed, 12 insertions(+)

diff --git a/arch/s390/include/asm/kvm_host.h b/arch/s390/include/asm/kvm_host.h
index 841690d05080..d63ed05272ec 100644
--- a/arch/s390/include/asm/kvm_host.h
+++ b/arch/s390/include/asm/kvm_host.h
@@ -215,6 +215,8 @@ struct kvm_s390_sie_block {
 #define ICPT_PARTEXEC	0x38
 #define ICPT_IOINST	0x40
 #define ICPT_KSS	0x5c
+#define ICPT_PV_MCHKR	0x60
+#define ICPT_PV_INT_EN	0x64
 	__u8	icptcode;		/* 0x0050 */
 	__u8	icptstatus;		/* 0x0051 */
 	__u16	ihcpu;			/* 0x0052 */
diff --git a/arch/s390/kvm/intercept.c b/arch/s390/kvm/intercept.c
index a389fa85cca2..eaa2a21c3170 100644
--- a/arch/s390/kvm/intercept.c
+++ b/arch/s390/kvm/intercept.c
@@ -480,6 +480,16 @@ int kvm_handle_sie_intercept(struct kvm_vcpu *vcpu)
 	case ICPT_KSS:
 		rc = kvm_s390_skey_check_enable(vcpu);
 		break;
+	case ICPT_PV_MCHKR:
+		/* fallthrough */
+	case ICPT_PV_INT_EN:
+		/*
+		 * PSW bit 13 or a CR (0, 6, 14) changed and we might
+		 * now be able to deliver interrupts. The pre-run code
+		 * will take care of this.
+		 */
+		rc = 0;
+		break;
 	default:
 		return -EOPNOTSUPP;
 	}
-- 
2.24.0


  parent reply	other threads:[~2020-02-03 13:20 UTC|newest]

Thread overview: 200+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-03 13:19 [RFCv2 00/37] KVM: s390: Add support for protected VMs Christian Borntraeger
2020-02-03 13:19 ` [RFCv2 01/37] DOCUMENTATION: protvirt: Protected virtual machine introduction Christian Borntraeger
2020-02-03 15:42   ` Cornelia Huck
2020-02-03 21:41     ` Christian Borntraeger
2020-02-04  9:19       ` Cornelia Huck
2020-02-04  9:32         ` Christian Borntraeger
2020-02-03 13:19 ` [RFCv2 02/37] s390/protvirt: introduce host side setup Christian Borntraeger
2020-02-03 17:12   ` Cornelia Huck
2020-02-03 22:03     ` Christian Borntraeger
2020-02-04  9:28       ` Cornelia Huck
2020-02-04  9:38         ` Christian Borntraeger
2020-02-04  9:49           ` Cornelia Huck
2020-02-04  8:40   ` Thomas Huth
2020-02-04  9:12     ` Christian Borntraeger
2020-02-03 13:19 ` [RFCv2 03/37] s390/protvirt: add ultravisor initialization Christian Borntraeger
2020-02-04 10:03   ` Thomas Huth
2020-02-04 10:23   ` Cornelia Huck
2020-02-04 11:22     ` Christian Borntraeger
2020-02-03 13:19 ` [RFCv2 04/37] mm:gup/writeback: add callbacks for inaccessible pages Christian Borntraeger
2020-02-03 13:19 ` [RFCv2 05/37] s390/mm: provide memory management functions for protected KVM guests Christian Borntraeger
2020-02-04 10:57   ` Cornelia Huck
2020-02-04 11:48     ` Claudio Imbrenda
2020-02-04 11:56     ` Christian Borntraeger
2020-02-04 12:15       ` Cornelia Huck
2020-02-05  9:52   ` Janosch Frank
2020-02-03 13:19 ` [RFCv2 06/37] s390: add (non)secure page access exceptions handlers Christian Borntraeger
2020-02-04 10:37   ` Thomas Huth
2020-02-04 11:41     ` Claudio Imbrenda
2020-02-04 12:48       ` Thomas Huth
2020-02-04 13:08         ` Claudio Imbrenda
2020-02-04 13:22           ` Thomas Huth
2020-02-04 12:03     ` Christian Borntraeger
2020-02-04 11:18   ` Cornelia Huck
2020-02-04 12:04     ` Christian Borntraeger
2020-02-03 13:19 ` [RFCv2 07/37] KVM: s390: add new variants of UV CALL Christian Borntraeger
2020-02-04 12:11   ` Cornelia Huck
2020-02-04 12:30     ` Claudio Imbrenda
2020-02-04 12:34       ` Cornelia Huck
2020-02-04 13:33     ` Christian Borntraeger
2020-02-04 13:27   ` Thomas Huth
2020-02-04 13:55     ` Christian Borntraeger
2020-02-03 13:19 ` [RFCv2 08/37] KVM: s390: protvirt: Add initial lifecycle handling Christian Borntraeger
2020-02-04 12:13   ` David Hildenbrand
2020-02-04 12:34     ` Christian Borntraeger
2020-02-05 10:01       ` Janosch Frank
2020-02-04 16:27   ` Cornelia Huck
2020-02-04 21:13     ` Christian Borntraeger
2020-02-03 13:19 ` [RFCv2 09/37] KVM: s390: protvirt: Add KVM api documentation Christian Borntraeger
2020-02-04 20:19   ` Thomas Huth
2020-02-04 21:40     ` Christian Borntraeger
2020-02-03 13:19 ` [RFCv2 10/37] KVM: s390: protvirt: Secure memory is not mergeable Christian Borntraeger
2020-02-04 12:15   ` David Hildenbrand
2020-02-04 12:53     ` Christian Borntraeger
2020-02-04 12:54       ` David Hildenbrand
2020-02-04 13:04         ` [PATCH v2 " Christian Borntraeger
2020-02-04 13:05           ` David Hildenbrand
2020-02-03 13:19 ` [RFCv2 11/37] KVM: s390/mm: Make pages accessible before destroying the guest Christian Borntraeger
2020-02-04 20:52   ` Thomas Huth
2020-02-05  9:03     ` Christian Borntraeger
2020-02-05 10:35   ` Cornelia Huck
2020-02-05 18:29     ` Christian Borntraeger
2020-02-03 13:19 ` Christian Borntraeger [this message]
2020-02-04 12:16   ` [RFCv2 12/37] KVM: s390: protvirt: Handle SE notification interceptions David Hildenbrand
2020-02-04 12:23     ` Christian Borntraeger
2020-02-04 21:16   ` Thomas Huth
2020-02-04 21:46     ` Christian Borntraeger
2020-02-03 13:19 ` [RFCv2 13/37] KVM: s390: protvirt: Instruction emulation Christian Borntraeger
2020-02-04 12:20   ` David Hildenbrand
2020-02-04 12:29     ` Christian Borntraeger
2020-02-04 17:07       ` Cornelia Huck
2020-02-04 21:21         ` Thomas Huth
2020-02-03 13:19 ` [RFCv2 14/37] KVM: s390: protvirt: Add interruption injection controls Christian Borntraeger
2020-02-05  6:59   ` Thomas Huth
2020-02-05  8:46     ` Christian Borntraeger
2020-02-05  8:56       ` Michael Mueller
2020-02-05  8:54     ` Michael Mueller
2020-02-05 10:45       ` Cornelia Huck
2020-02-03 13:19 ` [RFCv2 15/37] KVM: s390: protvirt: Implement interruption injection Christian Borntraeger
2020-02-05  9:51   ` Thomas Huth
2020-02-05 10:48     ` Christian Borntraeger
2020-02-05 11:25       ` Cornelia Huck
2020-02-05 17:49         ` Christian Borntraeger
2020-02-06  8:21           ` Cornelia Huck
2020-02-05 17:56     ` Christian Borntraeger
2020-02-05 11:31   ` Cornelia Huck
2020-02-05 11:46     ` Michael Mueller
2020-02-05 12:11       ` Cornelia Huck
2020-02-05 12:26         ` Michael Mueller
2020-02-05 18:00           ` Christian Borntraeger
2020-02-06  8:23             ` Cornelia Huck
2020-02-05 15:30     ` Michael Mueller
2020-02-03 13:19 ` [RFCv2 16/37] KVM: s390: protvirt: Add SCLP interrupt handling Christian Borntraeger
2020-02-05 12:22   ` Cornelia Huck
2020-02-05 18:14     ` Christian Borntraeger
2020-02-03 13:19 ` [RFCv2 17/37] KVM: s390: protvirt: Add machine-check interruption injection controls Christian Borntraeger
2020-02-05  7:06   ` Thomas Huth
2020-02-03 13:19 ` [RFCv2 18/37] KVM: s390: protvirt: Implement machine-check interruption injection Christian Borntraeger
2020-02-05  7:10   ` Thomas Huth
2020-02-05 13:47   ` Cornelia Huck
2020-02-05 18:18     ` Christian Borntraeger
2020-02-06  8:25       ` Cornelia Huck
2020-02-06  9:01         ` Christian Borntraeger
2020-02-06  9:11           ` Cornelia Huck
2020-02-03 13:19 ` [RFCv2 19/37] KVM: s390: protvirt: Handle spec exception loops Christian Borntraeger
2020-02-05 13:50   ` Cornelia Huck
2020-02-05 18:21     ` Christian Borntraeger
2020-02-03 13:19 ` [RFCv2 20/37] KVM: s390: protvirt: Add new gprs location handling Christian Borntraeger
2020-02-05 11:18   ` Thomas Huth
2020-02-05 18:45     ` Christian Borntraeger
2020-02-05 13:52   ` Cornelia Huck
2020-02-03 13:19 ` [RFCv2 21/37] KVM: S390: protvirt: Introduce instruction data area bounce buffer Christian Borntraeger
2020-02-05 11:43   ` David Hildenbrand
2020-02-06  8:43     ` Christian Borntraeger
2020-02-05 12:02   ` Thomas Huth
2020-02-05 12:16     ` Janosch Frank
2020-02-05 17:00       ` Thomas Huth
2020-02-06  9:07         ` Christian Borntraeger
2020-02-06  9:18           ` Thomas Huth
2020-02-06  9:21             ` Christian Borntraeger
2020-02-06  9:20           ` Christian Borntraeger
2020-02-06  9:32             ` Janosch Frank
2020-02-06  9:29           ` David Hildenbrand
2020-02-06  9:39             ` [RFCv2.1] " Christian Borntraeger
2020-02-06  9:54               ` David Hildenbrand
2020-02-06 10:02                 ` Christian Borntraeger
2020-02-06 10:08                   ` David Hildenbrand
2020-02-06 10:10                     ` Christian Borntraeger
2020-02-06 12:46                 ` Christian Borntraeger
2020-02-06 10:32               ` Thomas Huth
2020-02-06 11:07                 ` Christian Borntraeger
2020-02-03 13:19 ` [RFCv2 22/37] KVM: s390: protvirt: handle secure guest prefix pages Christian Borntraeger
2020-02-05 11:51   ` David Hildenbrand
2020-02-05 19:38     ` Christian Borntraeger
2020-02-05 11:52   ` David Hildenbrand
2020-02-05 19:39     ` Christian Borntraeger
2020-02-03 13:19 ` [RFCv2 23/37] KVM: s390/mm: handle guest unpin events Christian Borntraeger
2020-02-03 13:19 ` [RFCv2 24/37] KVM: s390: protvirt: Write sthyi data to instruction data area Christian Borntraeger
2020-02-05 12:09   ` Thomas Huth
2020-02-05 18:52     ` Christian Borntraeger
2020-02-05 14:27   ` Cornelia Huck
2020-02-03 13:19 ` [RFCv2 25/37] KVM: s390: protvirt: STSI handling Christian Borntraeger
2020-02-05 12:13   ` Thomas Huth
2020-02-05 19:22     ` Christian Borntraeger
2020-02-03 13:19 ` [RFCv2 26/37] KVM: s390: protvirt: disallow one_reg Christian Borntraeger
2020-02-05 12:16   ` Thomas Huth
2020-02-05 19:25     ` Christian Borntraeger
2020-02-05 14:42   ` Cornelia Huck
2020-02-03 13:19 ` [RFCv2 27/37] KVM: s390: protvirt: Only sync fmt4 registers Christian Borntraeger
2020-02-04 17:15   ` Cornelia Huck
2020-02-04 22:08     ` Christian Borntraeger
2020-02-05 16:29   ` Cornelia Huck
2020-02-03 13:19 ` [RFCv2 28/37] KVM: s390: protvirt: Add program exception injection Christian Borntraeger
2020-02-05 16:38   ` Cornelia Huck
2020-02-05 19:31     ` Christian Borntraeger
2020-02-05 17:59   ` Thomas Huth
2020-02-05 19:32     ` Christian Borntraeger
2020-02-03 13:19 ` [RFCv2 29/37] DOCUMENTATION: protvirt: Diag 308 IPL Christian Borntraeger
2020-02-03 16:13   ` Cornelia Huck
2020-02-04  8:13     ` Christian Borntraeger
2020-02-04  9:35       ` Cornelia Huck
2020-02-03 13:19 ` [RFCv2 30/37] KVM: s390: protvirt: Add diag 308 subcode 8 - 10 handling Christian Borntraeger
2020-02-04 18:51   ` Cornelia Huck
2020-02-04 22:19     ` Christian Borntraeger
2020-02-05 18:21   ` Thomas Huth
2020-02-06 10:59     ` Christian Borntraeger
2020-02-03 13:19 ` [RFCv2 31/37] KVM: s390: protvirt: UV calls diag308 0, 1 Christian Borntraeger
2020-02-03 13:19 ` [RFCv2 32/37] KVM: s390: protvirt: Report CPU state to Ultravisor Christian Borntraeger
2020-02-06 11:12   ` Thomas Huth
2020-02-06 11:17     ` Christian Borntraeger
2020-02-06 14:29   ` Cornelia Huck
2020-02-03 13:19 ` [RFCv2 33/37] KVM: s390: protvirt: Support cmd 5 operation state Christian Borntraeger
2020-02-06 11:21   ` Thomas Huth
2020-02-06 15:17   ` Cornelia Huck
2020-02-03 13:19 ` [RFCv2 34/37] KVM: s390: protvirt: Add UV debug trace Christian Borntraeger
2020-02-06  9:41   ` Cornelia Huck
2020-02-07  8:05     ` Christian Borntraeger
2020-02-07  8:27       ` Cornelia Huck
2020-02-14  8:32     ` Christian Borntraeger
2020-02-14  8:53       ` Cornelia Huck
2020-02-03 13:19 ` [RFCv2 35/37] KVM: s390: protvirt: Mask PSW interrupt bits for interception 104 and 112 Christian Borntraeger
2020-02-06 10:10   ` Cornelia Huck
2020-02-06 11:11     ` Christian Borntraeger
2020-02-06 12:03   ` Thomas Huth
2020-02-03 13:19 ` [RFCv2 36/37] KVM: s390: protvirt: do not inject interrupts after start Christian Borntraeger
2020-02-06 10:13   ` Cornelia Huck
2020-02-06 14:24     ` Christian Borntraeger
2020-02-06 12:03   ` Thomas Huth
2020-02-03 13:19 ` [RFCv2 37/37] KVM: s390: protvirt: Add UV cpu reset calls Christian Borntraeger
2020-02-05 18:27   ` Thomas Huth
2020-02-05 20:24     ` Christian Borntraeger
2020-02-06 10:45   ` Cornelia Huck
2020-02-06 14:27     ` Christian Borntraeger
2020-02-06 14:39   ` David Hildenbrand
2020-02-06 15:07     ` Thomas Huth
2020-02-03 13:23 ` [RFCv2 00/37] KVM: s390: Add support for protected VMs Cornelia Huck
2020-02-03 13:32   ` Christian Borntraeger
2020-02-03 14:42     ` Cornelia Huck
2020-02-05 11:34 ` David Hildenbrand
2020-02-05 11:38   ` Christian Borntraeger
2020-02-05 11:40     ` Cornelia Huck

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200203131957.383915-13-borntraeger@de.ibm.com \
    --to=borntraeger@de.ibm.com \
    --cc=Ulrich.Weigand@de.ibm.com \
    --cc=aarcange@redhat.com \
    --cc=cohuck@redhat.com \
    --cc=david@redhat.com \
    --cc=frankja@linux.vnet.ibm.com \
    --cc=imbrenda@linux.ibm.com \
    --cc=kvm@vger.kernel.org \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.