From: Janosch Frank <frankja@linux.ibm.com>
To: "Nina Schoetterl-Glausch" <nsg@linux.ibm.com>,
"Claudio Imbrenda" <imbrenda@linux.ibm.com>,
"Thomas Huth" <thuth@redhat.com>, "Nico Böhr" <nrb@linux.ibm.com>
Cc: David Hildenbrand <david@redhat.com>,
kvm@vger.kernel.org, Nicholas Piggin <npiggin@gmail.com>,
linux-s390@vger.kernel.org
Subject: Re: [kvm-unit-tests PATCH v4 4/6] s390x: Add library functions for exiting from snippet
Date: Fri, 18 Oct 2024 10:02:37 +0200 [thread overview]
Message-ID: <e649996c-559f-425e-833f-ca83bad59372@linux.ibm.com> (raw)
In-Reply-To: <20241016180320.686132-5-nsg@linux.ibm.com>
On 10/16/24 8:03 PM, Nina Schoetterl-Glausch wrote:
> It is useful to be able to force an exit to the host from the snippet,
> as well as do so while returning a value.
> Add this functionality, also add helper functions for the host to check
> for an exit and get or check the value.
> Use diag 0x44 and 0x9c for this.
> Add a guest specific snippet header file and rename snippet.h to reflect
> that it is host specific.
>
> Signed-off-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com>
> ---
> s390x/Makefile | 4 ++-
> lib/s390x/asm/arch_def.h | 13 +++++++++
> lib/s390x/snippet-exit.h | 47 +++++++++++++++++++++++++++++++
> s390x/snippets/lib/snippet-exit.h | 28 ++++++++++++++++++
> 4 files changed, 91 insertions(+), 1 deletion(-)
> create mode 100644 lib/s390x/snippet-exit.h
> create mode 100644 s390x/snippets/lib/snippet-exit.h
>
> diff --git a/s390x/Makefile b/s390x/Makefile
> index 0ad8d021..1caf221d 100644
> --- a/s390x/Makefile
> +++ b/s390x/Makefile
> @@ -70,7 +70,8 @@ test_cases: $(tests)
> test_cases_binary: $(tests_binary)
> test_cases_pv: $(tests_pv_binary)
>
> -INCLUDE_PATHS = $(SRCDIR)/lib $(SRCDIR)/lib/s390x $(SRCDIR)/s390x
> +SNIPPET_INCLUDE :=
> +INCLUDE_PATHS = $(SNIPPET_INCLUDE) $(SRCDIR)/lib $(SRCDIR)/lib/s390x $(SRCDIR)/s390x
> # Include generated header files (e.g. in case of out-of-source builds)
> INCLUDE_PATHS += lib
> CPPFLAGS = $(addprefix -I,$(INCLUDE_PATHS))
> @@ -151,6 +152,7 @@ endif
> $(SNIPPET_DIR)/asm/%.o: $(SNIPPET_DIR)/asm/%.S $(asm-offsets)
> $(CC) $(CFLAGS) -c -nostdlib -o $@ $<
>
> +$(SNIPPET_DIR)/c/%.o: SNIPPET_INCLUDE := $(SNIPPET_DIR)/lib
> $(SNIPPET_DIR)/c/%.o: $(SNIPPET_DIR)/c/%.c $(asm-offsets)
> $(CC) $(CFLAGS) -c -nostdlib -o $@ $<
>
> diff --git a/lib/s390x/asm/arch_def.h b/lib/s390x/asm/arch_def.h
> index 745a3387..db04deca 100644
> --- a/lib/s390x/asm/arch_def.h
> +++ b/lib/s390x/asm/arch_def.h
> @@ -504,4 +504,17 @@ static inline uint32_t get_prefix(void)
> return current_prefix;
> }
>
> +static inline void diag44(void)
> +{
> + asm volatile("diag 0,0,0x44\n");
> +}
> +
> +static inline void diag9c(uint64_t val)
> +{
> + asm volatile("diag %[val],0,0x9c\n"
> + :
> + : [val] "d"(val)
> + );
> +}
> +
> #endif
> diff --git a/lib/s390x/snippet-exit.h b/lib/s390x/snippet-exit.h
> new file mode 100644
> index 00000000..f62f0068
> --- /dev/null
> +++ b/lib/s390x/snippet-exit.h
> @@ -0,0 +1,47 @@
> +/* SPDX-License-Identifier: GPL-2.0-only */
> +/*
> + * Functionality handling snippet exits
> + *
> + * Copyright IBM Corp. 2024
> + */
> +
> +#ifndef _S390X_SNIPPET_EXIT_H_
> +#define _S390X_SNIPPET_EXIT_H_
> +
> +#include <libcflat.h>
> +#include <sie.h>
> +#include <sie-icpt.h>
> +
> +static inline bool snippet_is_force_exit(struct vm *vm)
> +{
> + return sie_is_diag_icpt(vm, 0x44);
> +}
> +
> +static inline bool snippet_is_force_exit_value(struct vm *vm)
> +{
> + return sie_is_diag_icpt(vm, 0x9c);
> +}
> +
> +static inline uint64_t snippet_get_force_exit_value(struct vm *vm)
> +{
> + struct kvm_s390_sie_block *sblk = vm->sblk;
> +
> + assert(snippet_is_force_exit_value(vm));
> +
> + return vm->save_area.guest.grs[sblk_ip_as_diag(sblk).r_1];
> +}
The cpu address parameter for 9C is 16 bit.
While we could make it 64 bit for snippets I don't see a reason to do
so. The 16 bits are enough to indicate something to the host which can
then go and fetch memory for more data.
next prev parent reply other threads:[~2024-10-18 8:02 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-16 18:03 [kvm-unit-tests PATCH v4 0/6] s390x: STFLE nested interpretation Nina Schoetterl-Glausch
2024-10-16 18:03 ` [kvm-unit-tests PATCH v4 1/6] s390x: lib: Remove double include Nina Schoetterl-Glausch
2024-10-16 18:03 ` [kvm-unit-tests PATCH v4 2/6] s390x: Add sie_is_pv Nina Schoetterl-Glausch
2024-10-16 18:03 ` [kvm-unit-tests PATCH v4 3/6] s390x: Add function for checking diagnose intercepts Nina Schoetterl-Glausch
2024-10-18 7:50 ` Janosch Frank
2024-10-16 18:03 ` [kvm-unit-tests PATCH v4 4/6] s390x: Add library functions for exiting from snippet Nina Schoetterl-Glausch
2024-10-18 8:02 ` Janosch Frank [this message]
2024-10-18 10:56 ` Nico Boehr
2024-10-18 12:53 ` Janosch Frank
2024-10-21 8:21 ` Nico Boehr
2024-10-21 13:04 ` Janosch Frank
2024-12-10 10:20 ` Nico Boehr
2024-12-12 15:33 ` Nina Schoetterl-Glausch
2025-01-08 8:27 ` Nico Boehr
2024-10-16 18:03 ` [kvm-unit-tests PATCH v4 5/6] s390x: Use library functions for snippet exit Nina Schoetterl-Glausch
2024-10-18 8:03 ` Janosch Frank
2024-10-16 18:03 ` [kvm-unit-tests PATCH v4 6/6] s390x: Add test for STFLE interpretive execution (format-0) Nina Schoetterl-Glausch
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=e649996c-559f-425e-833f-ca83bad59372@linux.ibm.com \
--to=frankja@linux.ibm.com \
--cc=david@redhat.com \
--cc=imbrenda@linux.ibm.com \
--cc=kvm@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=npiggin@gmail.com \
--cc=nrb@linux.ibm.com \
--cc=nsg@linux.ibm.com \
--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