All of lore.kernel.org
 help / color / mirror / Atom feed
From: Claudio Imbrenda <imbrenda@linux.ibm.com>
To: kvm@vger.kernel.org
Cc: linux-s390@vger.kernel.org, thuth@redhat.com, david@redhat.com,
	borntraeger@de.ibm.com, frankja@linux.ibm.com
Subject: [kvm-unit-tests PATCH v6 3/4] s390x: lib: add SPX and STPX instruction wrapper
Date: Thu,  9 Jan 2020 17:16:24 +0100	[thread overview]
Message-ID: <20200109161625.154894-4-imbrenda@linux.ibm.com> (raw)
In-Reply-To: <20200109161625.154894-1-imbrenda@linux.ibm.com>

Add a wrapper for the SET PREFIX and STORE PREFIX instructions, and
use it instead of using inline assembly everywhere.

Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
---
 lib/s390x/asm/arch_def.h | 10 ++++++++++
 s390x/intercept.c        | 33 +++++++++++++--------------------
 2 files changed, 23 insertions(+), 20 deletions(-)

diff --git a/lib/s390x/asm/arch_def.h b/lib/s390x/asm/arch_def.h
index 1a5e3c6..465fe0f 100644
--- a/lib/s390x/asm/arch_def.h
+++ b/lib/s390x/asm/arch_def.h
@@ -284,4 +284,14 @@ static inline int servc(uint32_t command, unsigned long sccb)
 	return cc;
 }
 
+static inline void spx(uint32_t *new_prefix)
+{
+	asm volatile("spx %0" : : "Q" (*new_prefix) : "memory");
+}
+
+static inline void stpx(uint32_t *current_prefix)
+{
+	asm volatile("stpx %0" : "=Q" (*current_prefix));
+}
+
 #endif
diff --git a/s390x/intercept.c b/s390x/intercept.c
index 3696e33..3b53633 100644
--- a/s390x/intercept.c
+++ b/s390x/intercept.c
@@ -26,27 +26,24 @@ static void test_stpx(void)
 	uint32_t new_prefix = (uint32_t)(intptr_t)pagebuf;
 
 	/* Can we successfully change the prefix? */
-	asm volatile (
-		" stpx	%0\n"
-		" spx	%2\n"
-		" stpx	%1\n"
-		" spx	%0\n"
-		: "+Q"(old_prefix), "+Q"(tst_prefix)
-		: "Q"(new_prefix));
+	stpx(&old_prefix);
+	spx(&new_prefix);
+	stpx(&tst_prefix);
+	spx(&old_prefix);
 	report(old_prefix == 0 && tst_prefix == new_prefix, "store prefix");
 
 	expect_pgm_int();
 	low_prot_enable();
-	asm volatile(" stpx 0(%0) " : : "r"(8));
+	stpx((void *)8L);
 	low_prot_disable();
 	check_pgm_int_code(PGM_INT_CODE_PROTECTION);
 
 	expect_pgm_int();
-	asm volatile(" stpx 0(%0) " : : "r"(1));
+	stpx((void *)1L);
 	check_pgm_int_code(PGM_INT_CODE_SPECIFICATION);
 
 	expect_pgm_int();
-	asm volatile(" stpx 0(%0) " : : "r"(-8L));
+	stpx((void *)-8L);
 	check_pgm_int_code(PGM_INT_CODE_ADDRESSING);
 }
 
@@ -63,22 +60,18 @@ static void test_spx(void)
 	 * some facility bits there ... at least some of them should be
 	 * set in our buffer afterwards.
 	 */
-	asm volatile (
-		" stpx	%0\n"
-		" spx	%1\n"
-		" stfl	0\n"
-		" spx	%0\n"
-		: "+Q"(old_prefix)
-		: "Q"(new_prefix)
-		: "memory");
+	stpx(&old_prefix);
+	spx(&new_prefix);
+	asm volatile (" stfl 0" : : : "memory");
+	spx(&old_prefix);
 	report(pagebuf[GEN_LC_STFL] != 0, "stfl to new prefix");
 
 	expect_pgm_int();
-	asm volatile(" spx 0(%0) " : : "r"(1));
+	spx((void *)1L);
 	check_pgm_int_code(PGM_INT_CODE_SPECIFICATION);
 
 	expect_pgm_int();
-	asm volatile(" spx 0(%0) " : : "r"(-8L));
+	spx((void *)-8L);
 	check_pgm_int_code(PGM_INT_CODE_ADDRESSING);
 }
 
-- 
2.24.1

  parent reply	other threads:[~2020-01-09 16:16 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-09 16:16 [kvm-unit-tests PATCH v6 0/4] s390x: SCLP Unit test Claudio Imbrenda
2020-01-09 16:16 ` [kvm-unit-tests PATCH v6 1/4] s390x: export sclp_setup_int Claudio Imbrenda
2020-01-09 16:16 ` [kvm-unit-tests PATCH v6 2/4] s390x: sclp: add service call instruction wrapper Claudio Imbrenda
2020-01-09 16:16 ` Claudio Imbrenda [this message]
2020-01-09 16:43   ` [kvm-unit-tests PATCH v6 3/4] s390x: lib: add SPX and STPX " Thomas Huth
2020-01-09 16:50     ` Claudio Imbrenda
2020-01-09 16:58       ` Thomas Huth
2020-01-09 17:05         ` Janosch Frank
2020-01-09 17:13           ` Claudio Imbrenda
2020-01-09 17:27             ` Janosch Frank
2020-01-09 17:09         ` Claudio Imbrenda
2020-01-09 16:16 ` [kvm-unit-tests PATCH v6 4/4] s390x: SCLP unit test Claudio Imbrenda
2020-01-09 17:44   ` Janosch Frank
2020-01-09 18:00     ` Claudio Imbrenda

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=20200109161625.154894-4-imbrenda@linux.ibm.com \
    --to=imbrenda@linux.ibm.com \
    --cc=borntraeger@de.ibm.com \
    --cc=david@redhat.com \
    --cc=frankja@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 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.