diff mbox series

cpu: Clear PCR SPR in opal_reinit_cpus()

Message ID 20180518015827.1631-1-mikey@neuling.org
State Accepted
Headers show
Series cpu: Clear PCR SPR in opal_reinit_cpus() | expand

Commit Message

Michael Neuling May 18, 2018, 1:58 a.m. UTC
Currently if Linux boots with a non-zero PCR, things can go bad where
some early userspace programs can take illegal instructions. This is
being fixed in Linux, but in the mean time, we should cleanup in
skiboot also.

Signed-off-by: Michael Neuling <mikey@neuling.org>
---
 core/cpu.c          | 1 +
 include/processor.h | 1 +
 2 files changed, 2 insertions(+)

Comments

Vaidyanathan Srinivasan May 18, 2018, 5:49 a.m. UTC | #1
* Michael Neuling <mikey@neuling.org> [2018-05-18 11:58:27]:

> Currently if Linux boots with a non-zero PCR, things can go bad where
> some early userspace programs can take illegal instructions. This is
> being fixed in Linux, but in the mean time, we should cleanup in
> skiboot also.
> 
> Signed-off-by: Michael Neuling <mikey@neuling.org>

Reviewed-by: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>

> ---
>  core/cpu.c          | 1 +
>  include/processor.h | 1 +
>  2 files changed, 2 insertions(+)
> 
> diff --git a/core/cpu.c b/core/cpu.c
> index 1569c9f6c7..0077103d1a 100644
> --- a/core/cpu.c
> +++ b/core/cpu.c
> @@ -1333,6 +1333,7 @@ static void cpu_cleanup_one(void *param __unused)
>  {
>  	mtspr(SPR_AMR, 0);
>  	mtspr(SPR_IAMR, 0);
> +	mtspr(SPR_PCR, 0);
>  }
>  
>  static int64_t cpu_cleanup_all(void)
> diff --git a/include/processor.h b/include/processor.h
> index 27cc1aa394..6b262b45e0 100644
> --- a/include/processor.h
> +++ b/include/processor.h
> @@ -77,6 +77,7 @@
>  #define SPR_LPCR	0x13e
>  #define SPR_HMER	0x150	/* Hypervisor Maintenance Exception */
>  #define SPR_HMEER	0x151	/* HMER interrupt enable mask */
> +#define SPR_PCR		0x152

                                        /* Processor Compatibility Register */
Maybe add a comment just like other sprs.

--Vaidy
Stewart Smith May 18, 2018, 5:51 a.m. UTC | #2
Michael Neuling <mikey@neuling.org> writes:
> Currently if Linux boots with a non-zero PCR, things can go bad where
> some early userspace programs can take illegal instructions. This is
> being fixed in Linux, but in the mean time, we should cleanup in
> skiboot also.

Cheers, I've merged to master as of
3d019581c98153fc047821e3266d90852141f70d

and into a 6.0.2 as of b179d8ff62a89c0ef30e6faf552bf14e9cdc15db
diff mbox series

Patch

diff --git a/core/cpu.c b/core/cpu.c
index 1569c9f6c7..0077103d1a 100644
--- a/core/cpu.c
+++ b/core/cpu.c
@@ -1333,6 +1333,7 @@  static void cpu_cleanup_one(void *param __unused)
 {
 	mtspr(SPR_AMR, 0);
 	mtspr(SPR_IAMR, 0);
+	mtspr(SPR_PCR, 0);
 }
 
 static int64_t cpu_cleanup_all(void)
diff --git a/include/processor.h b/include/processor.h
index 27cc1aa394..6b262b45e0 100644
--- a/include/processor.h
+++ b/include/processor.h
@@ -77,6 +77,7 @@ 
 #define SPR_LPCR	0x13e
 #define SPR_HMER	0x150	/* Hypervisor Maintenance Exception */
 #define SPR_HMEER	0x151	/* HMER interrupt enable mask */
+#define SPR_PCR		0x152
 #define SPR_AMOR	0x15d
 #define SPR_PSSCR	0x357   /* RW: Stop status and control (ISA 3) */
 #define SPR_TSCR	0x399