From: Janosch Frank <frankja@linux.ibm.com>
To: qemu-devel@nongnu.org
Cc: borntraeger@de.ibm.com, qemu-s390x@nongnu.org, cohuck@redhat.com,
david@redhat.com
Subject: [PATCH v9 08/15] s390x: protvirt: SCLP interpretation
Date: Wed, 11 Mar 2020 09:21:44 -0400 [thread overview]
Message-ID: <20200311132151.172389-9-frankja@linux.ibm.com> (raw)
In-Reply-To: <20200311132151.172389-1-frankja@linux.ibm.com>
SCLP for a protected guest is done over the SIDAD, so we need to use
the s390_cpu_pv_mem_* functions to access the SIDAD instead of guest
memory when reading/writing SCBs.
To not confuse the sclp emulation, we set 0x4000 as the SCCB address,
since the function that injects the sclp external interrupt would
reject a zero sccb address.
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
---
hw/s390x/sclp.c | 30 ++++++++++++++++++++++++++++++
include/hw/s390x/sclp.h | 2 ++
target/s390x/kvm.c | 24 +++++++++++++++++++-----
3 files changed, 51 insertions(+), 5 deletions(-)
diff --git a/hw/s390x/sclp.c b/hw/s390x/sclp.c
index af0bfbc2eca74767..5f3aa30d6283dce5 100644
--- a/hw/s390x/sclp.c
+++ b/hw/s390x/sclp.c
@@ -193,6 +193,36 @@ static void sclp_execute(SCLPDevice *sclp, SCCB *sccb, uint32_t code)
}
}
+/*
+ * We only need the address to have something valid for the
+ * service_interrupt call.
+ */
+#define SCLP_PV_DUMMY_ADDR 0x4000
+int sclp_service_call_protected(CPUS390XState *env, uint64_t sccb,
+ uint32_t code)
+{
+ SCLPDevice *sclp = get_sclp_device();
+ SCLPDeviceClass *sclp_c = SCLP_GET_CLASS(sclp);
+ SCCB work_sccb;
+ hwaddr sccb_len = sizeof(SCCB);
+
+ /*
+ * Only a very limited amount of calls is permitted by the
+ * Ultravisor and we support all of them, so we don't check for
+ * them. All other specification exceptions are also interpreted
+ * by the Ultravisor and hence never cause an exit we need to
+ * handle.
+ *
+ * Setting the CC is also done by the Ultravisor.
+ */
+ s390_cpu_pv_mem_read(env_archcpu(env), 0, &work_sccb, sccb_len);
+ sclp_c->execute(sclp, &work_sccb, code);
+ s390_cpu_pv_mem_write(env_archcpu(env), 0, &work_sccb,
+ be16_to_cpu(work_sccb.h.length));
+ sclp_c->service_interrupt(sclp, SCLP_PV_DUMMY_ADDR);
+ return 0;
+}
+
int sclp_service_call(CPUS390XState *env, uint64_t sccb, uint32_t code)
{
SCLPDevice *sclp = get_sclp_device();
diff --git a/include/hw/s390x/sclp.h b/include/hw/s390x/sclp.h
index c54413b78cf01b27..c0a3faa37d730453 100644
--- a/include/hw/s390x/sclp.h
+++ b/include/hw/s390x/sclp.h
@@ -217,5 +217,7 @@ void s390_sclp_init(void);
void sclp_service_interrupt(uint32_t sccb);
void raise_irq_cpu_hotplug(void);
int sclp_service_call(CPUS390XState *env, uint64_t sccb, uint32_t code);
+int sclp_service_call_protected(CPUS390XState *env, uint64_t sccb,
+ uint32_t code);
#endif
diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c
index 8085d5030e7c6454..ff6027036ec2f14a 100644
--- a/target/s390x/kvm.c
+++ b/target/s390x/kvm.c
@@ -1227,12 +1227,26 @@ static void kvm_sclp_service_call(S390CPU *cpu, struct kvm_run *run,
sccb = env->regs[ipbh0 & 0xf];
code = env->regs[(ipbh0 & 0xf0) >> 4];
- r = sclp_service_call(env, sccb, code);
- if (r < 0) {
- kvm_s390_program_interrupt(cpu, -r);
- return;
+ switch (run->s390_sieic.icptcode) {
+ case ICPT_PV_INSTR_NOTIFICATION:
+ g_assert(s390_is_pv());
+ /* The notification intercepts are currently handled by KVM */
+ error_report("unexpected SCLP PV notification");
+ exit(1);
+ break;
+ case ICPT_PV_INSTR:
+ g_assert(s390_is_pv());
+ sclp_service_call_protected(env, sccb, code);
+ break;
+ case ICPT_INSTRUCTION:
+ g_assert(!s390_is_pv());
+ r = sclp_service_call(env, sccb, code);
+ if (r < 0) {
+ kvm_s390_program_interrupt(cpu, -r);
+ return;
+ }
+ setcc(cpu, r);
}
- setcc(cpu, r);
}
static int handle_b2(S390CPU *cpu, struct kvm_run *run, uint8_t ipa1)
--
2.25.1
next prev parent reply other threads:[~2020-03-11 13:24 UTC|newest]
Thread overview: 104+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-11 13:21 [PATCH v9 00/15] s390x: Protected Virtualization support Janosch Frank
2020-03-11 13:21 ` [PATCH v9 01/15] Sync pv Janosch Frank
2020-03-11 13:21 ` [PATCH v9 02/15] s390x: protvirt: Support unpack facility Janosch Frank
2020-03-12 8:33 ` Christian Borntraeger
2020-03-13 9:35 ` Janosch Frank
2020-03-13 9:52 ` [PATCH v9] fixup! Fix subcode/pbt Janosch Frank
2020-03-13 14:30 ` Christian Borntraeger
2020-03-13 14:44 ` Janosch Frank
2020-03-16 14:27 ` Cornelia Huck
2020-03-16 14:47 ` Janosch Frank
2020-03-16 14:54 ` Cornelia Huck
2020-03-16 15:04 ` Christian Borntraeger
2020-03-16 17:57 ` Cornelia Huck
2020-03-16 19:42 ` Christian Borntraeger
2020-03-17 9:53 ` Cornelia Huck
2020-03-16 15:05 ` Janosch Frank
2020-03-16 17:58 ` Cornelia Huck
[not found] ` <a0edb6d5-284f-5f10-02e5-d2f252043d71@redhat.com>
2020-03-12 8:54 ` [PATCH v9 02/15] s390x: protvirt: Support unpack facility Janosch Frank
2020-03-13 12:57 ` Claudio Imbrenda
2020-03-11 13:21 ` [PATCH v9 03/15] s390x: protvirt: Add migration blocker Janosch Frank
2020-03-12 8:42 ` Christian Borntraeger
2020-03-12 9:34 ` Janosch Frank
2020-03-13 12:57 ` Claudio Imbrenda
2020-03-16 14:49 ` Cornelia Huck
2020-03-11 13:21 ` [PATCH v9 04/15] s390x: protvirt: Inhibit balloon when switching to protected mode Janosch Frank
2020-03-13 12:57 ` Claudio Imbrenda
2020-03-18 11:42 ` Cornelia Huck
2020-03-18 12:30 ` Janosch Frank
2020-03-11 13:21 ` [PATCH v9 05/15] s390x: protvirt: KVM intercept changes Janosch Frank
2020-03-13 12:57 ` Claudio Imbrenda
2020-03-17 9:56 ` Cornelia Huck
2020-03-11 13:21 ` [PATCH v9 06/15] s390x: Add SIDA memory ops Janosch Frank
2020-03-12 8:50 ` Christian Borntraeger
2020-03-13 12:57 ` Claudio Imbrenda
2020-03-17 10:24 ` Cornelia Huck
2020-03-17 11:56 ` Janosch Frank
2020-03-11 13:21 ` [PATCH v9 07/15] s390x: protvirt: Move STSI data over SIDAD Janosch Frank
2020-03-12 10:42 ` Christian Borntraeger
2020-03-12 11:20 ` Janosch Frank
2020-03-17 10:28 ` Cornelia Huck
2020-03-17 10:32 ` Janosch Frank
2020-03-17 10:41 ` Cornelia Huck
2020-03-13 12:57 ` Claudio Imbrenda
2020-03-11 13:21 ` Janosch Frank [this message]
2020-03-11 13:24 ` [PATCH v9 08/15] s390x: protvirt: SCLP interpretation David Hildenbrand
2020-03-11 13:31 ` Janosch Frank
2020-03-13 12:57 ` Claudio Imbrenda
2020-03-13 13:14 ` Christian Borntraeger
2020-03-17 11:05 ` Cornelia Huck
2020-03-17 11:54 ` Janosch Frank
2020-03-17 12:01 ` Cornelia Huck
2020-03-11 13:21 ` [PATCH v9 09/15] s390x: protvirt: Set guest IPL PSW Janosch Frank
2020-03-12 15:08 ` Christian Borntraeger
2020-03-13 12:57 ` Claudio Imbrenda
2020-03-13 14:21 ` Janosch Frank
2020-03-13 14:22 ` Christian Borntraeger
2020-03-13 14:29 ` Claudio Imbrenda
2020-03-13 14:32 ` Claudio Imbrenda
2020-03-11 13:21 ` [PATCH v9 10/15] s390x: protvirt: Move diag 308 data over SIDA Janosch Frank
2020-03-12 15:17 ` Christian Borntraeger
2020-03-12 16:05 ` Janosch Frank
2020-03-12 16:09 ` Christian Borntraeger
2020-03-13 12:57 ` Claudio Imbrenda
2020-03-11 13:21 ` [PATCH v9 11/15] s390x: protvirt: Disable address checks for PV guest IO emulation Janosch Frank
2020-03-12 15:41 ` Christian Borntraeger
2020-03-12 16:07 ` Janosch Frank
2020-03-12 16:10 ` Christian Borntraeger
2020-03-12 16:17 ` Janosch Frank
2020-03-13 7:38 ` Christian Borntraeger
2020-03-13 12:57 ` Claudio Imbrenda
2020-03-17 11:36 ` Cornelia Huck
2020-03-17 12:00 ` Janosch Frank
2020-03-11 13:21 ` [PATCH v9 12/15] s390x: protvirt: Move IO control structures over SIDA Janosch Frank
2020-03-13 12:57 ` Claudio Imbrenda
2020-03-13 13:15 ` Janosch Frank
2020-03-11 13:21 ` [PATCH v9 13/15] s390x: protvirt: Handle SIGP store status correctly Janosch Frank
2020-03-12 15:51 ` Christian Borntraeger
2020-03-12 16:13 ` Janosch Frank
2020-03-13 7:39 ` Christian Borntraeger
2020-03-13 7:39 ` Christian Borntraeger
2020-03-17 16:48 ` Cornelia Huck
2020-03-13 12:57 ` Claudio Imbrenda
2020-03-11 13:21 ` [PATCH v9 14/15] docs: Add protvirt docs Janosch Frank
[not found] ` <569575c9-5819-f890-e218-99f3a23bee99@redhat.com>
2020-03-12 12:10 ` Janosch Frank
2020-03-13 13:00 ` Claudio Imbrenda
2020-03-13 13:18 ` Janosch Frank
2020-03-13 13:28 ` Peter Maydell
2020-03-17 18:23 ` Cornelia Huck
2020-03-18 8:41 ` Janosch Frank
2020-03-18 11:25 ` Cornelia Huck
2020-03-18 12:34 ` Janosch Frank
2020-03-11 13:21 ` [PATCH v9 15/15] s390x: Add unpack facility feature to GA1 Janosch Frank
2020-03-13 13:01 ` Claudio Imbrenda
2020-03-17 18:06 ` Cornelia Huck
2020-03-18 8:44 ` Janosch Frank
2020-03-18 9:27 ` Cornelia Huck
2020-03-18 9:42 ` Janosch Frank
2020-03-11 14:15 ` [PATCH v9 00/15] s390x: Protected Virtualization support no-reply
2020-03-11 14:36 ` no-reply
2020-03-12 16:25 ` [PATCH v9] s390x: protvirt: Fence huge pages Janosch Frank
2020-03-13 8:21 ` Christian Borntraeger
2020-03-16 10:06 ` Janosch Frank
2020-03-16 16:33 ` Christian Borntraeger
2020-03-17 16:57 ` 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=20200311132151.172389-9-frankja@linux.ibm.com \
--to=frankja@linux.ibm.com \
--cc=borntraeger@de.ibm.com \
--cc=cohuck@redhat.com \
--cc=david@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-s390x@nongnu.org \
/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.