From: Nico Boehr <nrb@linux.ibm.com>
To: frankja@linux.ibm.com, imbrenda@linux.ibm.com, thuth@redhat.com
Cc: kvm@vger.kernel.org, linux-s390@vger.kernel.org
Subject: [kvm-unit-tests PATCH v2 2/6] s390x: sie: switch to home space mode before entering SIE
Date: Tue, 16 May 2023 15:04:52 +0200 [thread overview]
Message-ID: <20230516130456.256205-3-nrb@linux.ibm.com> (raw)
In-Reply-To: <20230516130456.256205-1-nrb@linux.ibm.com>
This is to prepare for running guests without MSO/MSL, which is
currently not possible.
We already have code in sie64a to setup a guest primary ASCE before
entering SIE, so we can in theory switch to the page tables which
translate gpa to hpa.
But the host is running in primary space mode already, so changing the
primary ASCE before entering SIE will also affect the host's code and
data.
To make this switch useful, the host should run in a different address
space mode. Hence, set up and change to home address space mode before
installing the guest ASCE.
The home space ASCE is just copied over from the primary space ASCE, so
no functional change is intended, also for tests that want to use
MSO/MSL. If a test intends to use a different primary space ASCE, it can
now just set the guest.asce in the save_area.
Signed-off-by: Nico Boehr <nrb@linux.ibm.com>
---
lib/s390x/asm/arch_def.h | 1 +
lib/s390x/sie.c | 18 ++++++++++++++++++
lib/s390x/sie.h | 1 +
3 files changed, 20 insertions(+)
diff --git a/lib/s390x/asm/arch_def.h b/lib/s390x/asm/arch_def.h
index bb26e008cc68..ea9830a76e6d 100644
--- a/lib/s390x/asm/arch_def.h
+++ b/lib/s390x/asm/arch_def.h
@@ -67,6 +67,7 @@ struct cpu {
#define AS_HOME 3
#define PSW_MASK_DAT 0x0400000000000000UL
+#define PSW_MASK_HOME 0x0000C00000000000UL
#define PSW_MASK_IO 0x0200000000000000UL
#define PSW_MASK_EXT 0x0100000000000000UL
#define PSW_MASK_KEY 0x00F0000000000000UL
diff --git a/lib/s390x/sie.c b/lib/s390x/sie.c
index 9241b4b4a512..ffa8ec91a423 100644
--- a/lib/s390x/sie.c
+++ b/lib/s390x/sie.c
@@ -46,6 +46,8 @@ void sie_handle_validity(struct vm *vm)
void sie(struct vm *vm)
{
+ uint64_t old_cr13;
+
if (vm->sblk->sdf == 2)
memcpy(vm->sblk->pv_grregs, vm->save_area.guest.grs,
sizeof(vm->save_area.guest.grs));
@@ -53,6 +55,16 @@ void sie(struct vm *vm)
/* Reset icptcode so we don't trip over it below */
vm->sblk->icptcode = 0;
+ /* set up home address space to match primary space */
+ old_cr13 = stctg(13);
+ lctlg(13, stctg(1));
+
+ /* switch to home space so guest tables can be different from host */
+ psw_mask_set_bits(PSW_MASK_HOME);
+
+ /* also handle all interruptions in home space while in SIE */
+ irq_set_dat_mode(IRQ_DAT_ON, AS_HOME);
+
while (vm->sblk->icptcode == 0) {
sie64a(vm->sblk, &vm->save_area);
sie_handle_validity(vm);
@@ -60,6 +72,12 @@ void sie(struct vm *vm)
vm->save_area.guest.grs[14] = vm->sblk->gg14;
vm->save_area.guest.grs[15] = vm->sblk->gg15;
+ irq_set_dat_mode(IRQ_DAT_ON, AS_PRIM);
+ psw_mask_clear_bits(PSW_MASK_HOME);
+
+ /* restore the old CR 13 */
+ lctlg(13, old_cr13);
+
if (vm->sblk->sdf == 2)
memcpy(vm->save_area.guest.grs, vm->sblk->pv_grregs,
sizeof(vm->save_area.guest.grs));
diff --git a/lib/s390x/sie.h b/lib/s390x/sie.h
index 147cb0f2a556..0b00fb709776 100644
--- a/lib/s390x/sie.h
+++ b/lib/s390x/sie.h
@@ -284,5 +284,6 @@ void sie_handle_validity(struct vm *vm);
void sie_guest_sca_create(struct vm *vm);
void sie_guest_create(struct vm *vm, uint64_t guest_mem, uint64_t guest_mem_len);
void sie_guest_destroy(struct vm *vm);
+bool sie_had_pgm_int(struct vm *vm);
#endif /* _S390X_SIE_H_ */
--
2.39.1
next prev parent reply other threads:[~2023-05-16 13:07 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-16 13:04 [kvm-unit-tests PATCH v2 0/6] s390x: Add support for running guests without MSO/MSL Nico Boehr
2023-05-16 13:04 ` [kvm-unit-tests PATCH v2 1/6] s390x: add function to set DAT mode for all interrupts Nico Boehr
2023-05-16 17:17 ` Claudio Imbrenda
2023-05-17 12:25 ` Nico Boehr
2023-05-17 13:04 ` Claudio Imbrenda
2023-05-16 13:04 ` Nico Boehr [this message]
2023-05-16 17:22 ` [kvm-unit-tests PATCH v2 2/6] s390x: sie: switch to home space mode before entering SIE Claudio Imbrenda
2023-05-17 12:44 ` Nico Boehr
2023-05-16 13:04 ` [kvm-unit-tests PATCH v2 3/6] s390x: lib: don't forward PSW when handling exception in SIE Nico Boehr
2023-05-16 13:04 ` [kvm-unit-tests PATCH v2 4/6] s390x: fix compile of interrupt.c Nico Boehr
2023-05-16 17:24 ` Claudio Imbrenda
2023-05-16 13:04 ` [kvm-unit-tests PATCH v2 5/6] s390x: lib: sie: don't reenter SIE on pgm int Nico Boehr
2023-05-16 17:30 ` Claudio Imbrenda
2023-05-17 12:52 ` Nico Boehr
2023-05-16 13:04 ` [kvm-unit-tests PATCH v2 6/6] s390x: add a test for SIE without MSO/MSL Nico Boehr
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=20230516130456.256205-3-nrb@linux.ibm.com \
--to=nrb@linux.ibm.com \
--cc=frankja@linux.ibm.com \
--cc=imbrenda@linux.ibm.com \
--cc=kvm@vger.kernel.org \
--cc=linux-s390@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).