[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 26/33] target/ppc/spapr: Update H_GET_CPU_CHARACTERISTICS L1D cach
From: |
David Gibson |
Subject: |
[PULL 26/33] target/ppc/spapr: Update H_GET_CPU_CHARACTERISTICS L1D cache flush bits |
Date: |
Fri, 9 Jul 2021 15:17:21 +1000 |
From: Nicholas Piggin <npiggin@gmail.com>
There are several new L1D cache flush bits added to the hcall which reflect
hardware security features for speculative cache access issues.
These behaviours are now being specified as negative in order to simplify
patched kernel compatibility with older firmware (a new problem found in
existing systems would automatically be vulnerable).
[dwg: Technically this changes behaviour for existing machine types.
After discussion with Nick, we've determined this is safe, because
the worst that will happen if a guest gets the wrong information due
to a migration is that it will perform some unnecessary workarounds,
but will remain correct and secure (well, as secure as it was going
to be anyway). In addition the change only affects cap-cfpc=safe
which is not enabled by default, and in fact is not possible to set
on any current hardware (though it's expected it will be possible on
POWER10)]
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Message-Id: <20210615044107.1481608-1-npiggin@gmail.com>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
hw/ppc/spapr_hcall.c | 2 ++
include/hw/ppc/spapr.h | 3 +++
2 files changed, 5 insertions(+)
diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c
index 03fc191599..80ae8eaadd 100644
--- a/hw/ppc/spapr_hcall.c
+++ b/hw/ppc/spapr_hcall.c
@@ -1318,6 +1318,8 @@ static target_ulong h_get_cpu_characteristics(PowerPCCPU
*cpu,
behaviour |= H_CPU_BEHAV_L1D_FLUSH_PR;
break;
case SPAPR_CAP_FIXED:
+ behaviour |= H_CPU_BEHAV_NO_L1D_FLUSH_ENTRY;
+ behaviour |= H_CPU_BEHAV_NO_L1D_FLUSH_UACCESS;
break;
default: /* broken */
assert(safe_cache == SPAPR_CAP_BROKEN);
diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
index 1e63f33e9a..a25e69fe4c 100644
--- a/include/hw/ppc/spapr.h
+++ b/include/hw/ppc/spapr.h
@@ -400,10 +400,13 @@ struct SpaprMachineState {
#define H_CPU_CHAR_THR_RECONF_TRIG PPC_BIT(6)
#define H_CPU_CHAR_CACHE_COUNT_DIS PPC_BIT(7)
#define H_CPU_CHAR_BCCTR_FLUSH_ASSIST PPC_BIT(9)
+
#define H_CPU_BEHAV_FAVOUR_SECURITY PPC_BIT(0)
#define H_CPU_BEHAV_L1D_FLUSH_PR PPC_BIT(1)
#define H_CPU_BEHAV_BNDS_CHK_SPEC_BAR PPC_BIT(2)
#define H_CPU_BEHAV_FLUSH_COUNT_CACHE PPC_BIT(5)
+#define H_CPU_BEHAV_NO_L1D_FLUSH_ENTRY PPC_BIT(7)
+#define H_CPU_BEHAV_NO_L1D_FLUSH_UACCESS PPC_BIT(8)
/* Each control block has to be on a 4K boundary */
#define H_CB_ALIGNMENT 4096
--
2.31.1
- [PULL 14/33] target/ppc: Fix compilation with FLUSH_ALL_TLBS debug option, (continued)
- [PULL 14/33] target/ppc: Fix compilation with FLUSH_ALL_TLBS debug option, David Gibson, 2021/07/09
- [PULL 18/33] target/ppc: introduce mmu-books.h, David Gibson, 2021/07/09
- [PULL 17/33] target/ppc: changed ppc_hash64_xlate to use mmu_idx, David Gibson, 2021/07/09
- [PULL 21/33] docs/system: ppc: Update ppce500 documentation with eTSEC support, David Gibson, 2021/07/09
- [PULL 19/33] target/ppc: change ppc_hash32_xlate to use mmu_idx, David Gibson, 2021/07/09
- [PULL 16/33] target/ppc: fix address translation bug for radix mmus, David Gibson, 2021/07/09
- [PULL 25/33] target/ppc: Allow virtual hypervisor on CPU without HV, David Gibson, 2021/07/09
- [PULL 22/33] spapr: Implement Open Firmware client interface, David Gibson, 2021/07/09
- [PULL 26/33] target/ppc/spapr: Update H_GET_CPU_CHARACTERISTICS L1D cache flush bits,
David Gibson <=
- [PULL 24/33] ppc/pegasos2: Introduce Pegasos2MachineState structure, David Gibson, 2021/07/09
- [PULL 28/33] ppc/pegasos2: Fix use of && instead of &, David Gibson, 2021/07/09
- [PULL 20/33] roms/u-boot: Bump ppce500 u-boot to v2021.07 to add eTSEC support, David Gibson, 2021/07/09
- [PULL 27/33] ppc/pegasos2: Use Virtual Open Firmware as firmware replacement, David Gibson, 2021/07/09
- [PULL 30/33] target/ppc: Don't compile ppc_tlb_invalid_all without TCG, David Gibson, 2021/07/09
- [PULL 29/33] ppc/pegasos2: Implement some RTAS functions with VOF, David Gibson, 2021/07/09
- [PULL 32/33] linux-headers: Update, David Gibson, 2021/07/09
- [PULL 33/33] target/ppc: Support for H_RPT_INVALIDATE hcall, David Gibson, 2021/07/09
- [PULL 31/33] spapr: Fix implementation of Open Firmware client interface, David Gibson, 2021/07/09
- Re: [PULL 00/33] ppc-for-6.1 queue 20210709, Peter Maydell, 2021/07/10