public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
From: Janosch Frank <frankja@linux.ibm.com>
To: pbonzini@redhat.com
Cc: kvm@vger.kernel.org, frankja@linux.ibm.com, david@redhat.com,
	borntraeger@de.ibm.com, cohuck@redhat.com,
	linux-s390@vger.kernel.org, imbrenda@linux.ibm.com,
	thuth@redhat.com, Nico Boehr <nrb@linux.ibm.com>
Subject: [kvm-unit-tests GIT PULL 04/11] lib/s390x: fix SMP setup bug
Date: Tue, 20 Sep 2022 07:30:28 +0000	[thread overview]
Message-ID: <20220920073035.29201-5-frankja@linux.ibm.com> (raw)
In-Reply-To: <20220920073035.29201-1-frankja@linux.ibm.com>

From: Claudio Imbrenda <imbrenda@linux.ibm.com>

The lowcore pointer pointing to the current CPU (THIS_CPU) was not
initialized for the boot CPU. The pointer is needed for correct
interrupt handling, which is needed in the setup process before the
struct cpu array is allocated.

The bug went unnoticed because some environments (like qemu/KVM) clear
all memory and don't write anything in the lowcore area before starting
the payload. The pointer thus pointed to 0, an area of memory also not
used. Other environments will write to memory before starting the
payload, causing the unit tests to crash at the first interrupt.

Fix by assigning a temporary struct cpu before the rest of the setup
process, and assigning the pointer to the correct allocated struct
during smp initialization.

Fixes: 4e5dd758 ("lib: s390x: better smp interrupt checks")
Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
Reviewed-by: Nico Boehr <nrb@linux.ibm.com>
Reviewed-by: Janosch Frank <frankja@linux.ibm.com>
Tested-by: Nico Boehr <nrb@linux.ibm.com>
Reported-by: Janosch Frank <frankja@linux.ibm.com>
Link: https://lore.kernel.org/r/20220818152114.213135-1-imbrenda@linux.ibm.com
Message-Id: <20220818152114.213135-1-imbrenda@linux.ibm.com>
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
---
 lib/s390x/io.c  | 9 +++++++++
 lib/s390x/smp.c | 1 +
 2 files changed, 10 insertions(+)

diff --git a/lib/s390x/io.c b/lib/s390x/io.c
index a4f1b113..fb7b7dda 100644
--- a/lib/s390x/io.c
+++ b/lib/s390x/io.c
@@ -33,6 +33,15 @@ void puts(const char *s)
 
 void setup(void)
 {
+	struct cpu this_cpu_tmp = { 0 };
+
+	/*
+	 * Set a temporary empty struct cpu for the boot CPU, needed for
+	 * correct interrupt handling in the setup process.
+	 * smp_setup will allocate and set the permanent one.
+	 */
+	THIS_CPU = &this_cpu_tmp;
+
 	setup_args_progname(ipl_args);
 	setup_facilities();
 	sclp_read_info();
diff --git a/lib/s390x/smp.c b/lib/s390x/smp.c
index 0d98c17d..03d6d2a4 100644
--- a/lib/s390x/smp.c
+++ b/lib/s390x/smp.c
@@ -353,6 +353,7 @@ void smp_setup(void)
 			cpus[0].stack = stackptr;
 			cpus[0].lowcore = (void *)0;
 			cpus[0].active = true;
+			THIS_CPU = &cpus[0];
 		}
 	}
 	spin_unlock(&lock);
-- 
2.34.1


  parent reply	other threads:[~2022-09-20  7:32 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-20  7:30 [kvm-unit-tests GIT PULL 00/11] s390x: LPAR boot fix and additional tests Janosch Frank
2022-09-20  7:30 ` [kvm-unit-tests GIT PULL 01/11] s390x: smp: move sigp calls with invalid cpu address to array Janosch Frank
2022-09-20  7:30 ` [kvm-unit-tests GIT PULL 02/11] s390x: smp: use an array for sigp calls Janosch Frank
2022-09-20  7:30 ` [kvm-unit-tests GIT PULL 03/11] s390x: smp: add tests for calls in wait state Janosch Frank
2022-09-20  7:30 ` Janosch Frank [this message]
2022-09-20  7:30 ` [kvm-unit-tests GIT PULL 05/11] runtime: add support for panic tests Janosch Frank
2022-09-20  7:30 ` [kvm-unit-tests GIT PULL 06/11] lib/s390x: add CPU timer related defines and functions Janosch Frank
2022-09-20  7:30 ` [kvm-unit-tests GIT PULL 07/11] s390x: add extint loop test Janosch Frank
2022-09-20  7:30 ` [kvm-unit-tests GIT PULL 08/11] s390x: add pgm spec interrupt " Janosch Frank
2022-09-20  7:30 ` [kvm-unit-tests GIT PULL 09/11] s390x: Add strict mode to specification exception interpretation test Janosch Frank
2022-09-20  7:30 ` [kvm-unit-tests GIT PULL 10/11] s390x: factor out common args for genprotimg Janosch Frank
2022-09-20  7:30 ` [kvm-unit-tests GIT PULL 11/11] s390x: create persistent comm-key Janosch Frank

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=20220920073035.29201-5-frankja@linux.ibm.com \
    --to=frankja@linux.ibm.com \
    --cc=borntraeger@de.ibm.com \
    --cc=cohuck@redhat.com \
    --cc=david@redhat.com \
    --cc=imbrenda@linux.ibm.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=nrb@linux.ibm.com \
    --cc=pbonzini@redhat.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