All of lore.kernel.org
 help / color / mirror / Atom feed
From: Janosch Frank <frankja@linux.ibm.com>
To: kvm@vger.kernel.org
Cc: thuth@redhat.com, linux-s390@vger.kernel.org, david@redhat.com
Subject: [kvm-unit-tests PATCH 08/10] s390x: smp: Wait for sigp completion
Date: Tue, 24 Mar 2020 04:12:49 -0400	[thread overview]
Message-ID: <20200324081251.28810-9-frankja@linux.ibm.com> (raw)
In-Reply-To: <20200324081251.28810-1-frankja@linux.ibm.com>

Sigp orders are not necessarily finished when the processor finished
the sigp instruction. We need to poll if the order has been finished
before we continue.

For (re)start and stop we already use sigp sense running and sigp
sense loops. But we still lack completion checks for stop and store
status, as well as the cpu resets.

Let's add them.

Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
---
 lib/s390x/smp.c | 8 ++++++++
 lib/s390x/smp.h | 1 +
 s390x/smp.c     | 4 ++++
 3 files changed, 13 insertions(+)

diff --git a/lib/s390x/smp.c b/lib/s390x/smp.c
index 6ef0335954fd4832..2555bf4f5e73d762 100644
--- a/lib/s390x/smp.c
+++ b/lib/s390x/smp.c
@@ -154,6 +154,14 @@ int smp_cpu_start(uint16_t addr, struct psw psw)
 	return rc;
 }
 
+void smp_cpu_wait_for_completion(uint16_t addr)
+{
+	uint32_t status;
+
+	/* Loops when cc == 2, i.e. when the cpu is busy with a sigp order */
+	sigp_retry(1, SIGP_SENSE, 0, &status);
+}
+
 int smp_cpu_destroy(uint16_t addr)
 {
 	struct cpu *cpu;
diff --git a/lib/s390x/smp.h b/lib/s390x/smp.h
index ce63a89880c045f3..a8b98c0fcf2b451c 100644
--- a/lib/s390x/smp.h
+++ b/lib/s390x/smp.h
@@ -45,6 +45,7 @@ int smp_cpu_restart(uint16_t addr);
 int smp_cpu_start(uint16_t addr, struct psw psw);
 int smp_cpu_stop(uint16_t addr);
 int smp_cpu_stop_store_status(uint16_t addr);
+void smp_cpu_wait_for_completion(uint16_t addr);
 int smp_cpu_destroy(uint16_t addr);
 int smp_cpu_setup(uint16_t addr, struct psw psw);
 void smp_teardown(void);
diff --git a/s390x/smp.c b/s390x/smp.c
index 74622113a2c4ad92..48321f4e346dc71d 100644
--- a/s390x/smp.c
+++ b/s390x/smp.c
@@ -75,6 +75,7 @@ static void test_stop_store_status(void)
 	lc->prefix_sa = 0;
 	lc->grs_sa[15] = 0;
 	smp_cpu_stop_store_status(1);
+	smp_cpu_wait_for_completion(1);
 	mb();
 	report(lc->prefix_sa == (uint32_t)(uintptr_t)cpu->lowcore, "prefix");
 	report(lc->grs_sa[15], "stack");
@@ -85,6 +86,7 @@ static void test_stop_store_status(void)
 	lc->prefix_sa = 0;
 	lc->grs_sa[15] = 0;
 	smp_cpu_stop_store_status(1);
+	smp_cpu_wait_for_completion(1);
 	mb();
 	report(lc->prefix_sa == (uint32_t)(uintptr_t)cpu->lowcore, "prefix");
 	report(lc->grs_sa[15], "stack");
@@ -215,6 +217,7 @@ static void test_reset_initial(void)
 	wait_for_flag();
 
 	sigp_retry(1, SIGP_INITIAL_CPU_RESET, 0, NULL);
+	smp_cpu_wait_for_completion(1);
 	sigp(1, SIGP_STORE_STATUS_AT_ADDRESS, (uintptr_t)status, NULL);
 
 	report_prefix_push("clear");
@@ -264,6 +267,7 @@ static void test_reset(void)
 	smp_cpu_start(1, psw);
 
 	sigp_retry(1, SIGP_CPU_RESET, 0, NULL);
+	smp_cpu_wait_for_completion(1);
 	report(smp_cpu_stopped(1), "cpu stopped");
 
 	set_flag(0);
-- 
2.25.1

  parent reply	other threads:[~2020-03-24  8:13 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-24  8:12 [kvm-unit-tests PATCH 00/10] s390x: smp: Improve smp code part 2 Janosch Frank
2020-03-24  8:12 ` [kvm-unit-tests PATCH 01/10] s390x: smp: Test all CRs on initial reset Janosch Frank
2020-03-24  9:52   ` Christian Borntraeger
2020-03-24 10:05     ` Christian Borntraeger
2020-03-24 10:08     ` Janosch Frank
2020-03-24 10:09       ` Christian Borntraeger
2020-03-24  8:12 ` [kvm-unit-tests PATCH 02/10] s390x: smp: Dirty fpc before initial reset test Janosch Frank
2020-03-24  8:12 ` [kvm-unit-tests PATCH 03/10] s390x: smp: Test stop and store status on a running and stopped cpu Janosch Frank
2020-03-24 12:04   ` Cornelia Huck
2020-03-24  8:12 ` [kvm-unit-tests PATCH 04/10] s390x: smp: Test local interrupts after cpu reset Janosch Frank
2020-03-24 12:06   ` Cornelia Huck
2020-03-31  9:07   ` David Hildenbrand
2020-03-31  9:28     ` Janosch Frank
2020-03-31 17:27       ` David Hildenbrand
2020-04-01  7:19         ` Janosch Frank
2020-04-06  9:27           ` David Hildenbrand
2020-03-24  8:12 ` [kvm-unit-tests PATCH 05/10] s390x: smp: Loop if secondary cpu returns into cpu setup again Janosch Frank
2020-03-24 12:21   ` Cornelia Huck
2020-03-24  8:12 ` [kvm-unit-tests PATCH 06/10] s390x: smp: Remove unneeded cpu loops Janosch Frank
2020-03-24  8:12 ` [kvm-unit-tests PATCH 07/10] s390x: smp: Use full PSW to bringup new cpu Janosch Frank
2020-03-24 12:26   ` Cornelia Huck
2020-03-24  8:12 ` Janosch Frank [this message]
2020-03-24 12:38   ` [kvm-unit-tests PATCH 08/10] s390x: smp: Wait for sigp completion Cornelia Huck
2020-03-31  9:10   ` David Hildenbrand
2020-03-24  8:12 ` [kvm-unit-tests PATCH 09/10] s390x: smp: Add restart when running test Janosch Frank
2020-03-24 12:45   ` Cornelia Huck
2020-03-31  9:12   ` David Hildenbrand
2020-03-24  8:12 ` [kvm-unit-tests PATCH 10/10] s390x: Fix library constant definitions Janosch Frank
2020-03-24 11:06   ` Christian Borntraeger
2020-03-24 12:24   ` 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=20200324081251.28810-9-frankja@linux.ibm.com \
    --to=frankja@linux.ibm.com \
    --cc=david@redhat.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.