qemu-patch-raspberry4/hw
David Gibson 37965dfe4d spapr: Enable DD2.3 accelerated count cache flush in pseries-5.0 machine
For POWER9 DD2.2 cpus, the best current Spectre v2 indirect branch
mitigation is "count cache disabled", which is configured with:
    -machine cap-ibs=fixed-ccd
However, this option isn't available on DD2.3 CPUs with KVM, because they
don't have the count cache disabled.

For POWER9 DD2.3 cpus, it is "count cache flush with assist", configured
with:
    -machine cap-ibs=workaround,cap-ccf-assist=on
However this option isn't available on DD2.2 CPUs with KVM, because they
don't have the special CCF assist instruction this relies on.

On current machine types, we default to "count cache flush w/o assist",
that is:
    -machine cap-ibs=workaround,cap-ccf-assist=off
This runs, with mitigation on both DD2.2 and DD2.3 host cpus, but has a
fairly significant performance impact.

It turns out we can do better.  The special instruction that CCF assist
uses to trigger a count cache flush is a no-op on earlier CPUs, rather than
trapping or causing other badness.  It doesn't, of itself, implement the
mitigation, but *if* we have count-cache-disabled, then the count cache
flush is unnecessary, and so using the count cache flush mitigation is
harmless.

Therefore for the new pseries-5.0 machine type, enable cap-ccf-assist by
default.  Along with that, suppress throwing an error if cap-ccf-assist
is selected but KVM doesn't support it, as long as KVM *is* giving us
count-cache-disabled.  To allow TCG to work out of the box, even though it
doesn't implement the ccf flush assist, downgrade the error in that case to
a warning.  This matches several Spectre mitigations where we allow TCG
to operate for debugging, since we don't really make guarantees about TCG
security properties anyway.

While we're there, make the TCG warning for this case match that for other
mitigations.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Tested-by: Michael Ellerman <mpe@ellerman.id.au>
2020-02-03 11:33:02 +11:00
..
9pfs * Register qdev properties as class properties (Marc-André) 2020-01-27 09:44:04 +00:00
acpi * Register qdev properties as class properties (Marc-André) 2020-01-27 09:44:04 +00:00
adc Include hw/hw.h exactly where needed 2019-08-16 13:31:52 +02:00
alpha hw/core/loader: Let load_elf() populate a field with CPU-specific flags 2020-01-29 19:28:52 +01:00
arm target/arm/cpu: Add the kvm-no-adjvtime CPU property 2020-01-30 16:02:06 +00:00
audio add device_legacy_reset function to prepare for reset api change 2020-01-30 16:02:03 +00:00
block qdev: set properties with device_class_set_props() 2020-01-24 20:59:15 +01:00
bt Remove the core bluetooth code 2019-12-17 09:01:14 +01:00
char * Register qdev properties as class properties (Marc-André) 2020-01-27 09:44:04 +00:00
core hw/core: deprecate old reset functions and introduce new ones 2020-01-30 16:02:04 +00:00
cpu qdev: set properties with device_class_set_props() 2020-01-24 20:59:15 +01:00
cris hw/core/loader: Let load_elf() populate a field with CPU-specific flags 2020-01-29 19:28:52 +01:00
display hw/display/qxl.c: Use trace_event_get_state_backends() 2020-01-30 21:33:50 +00:00
dma * Register qdev properties as class properties (Marc-André) 2020-01-27 09:44:04 +00:00
gpio qdev: set properties with device_class_set_props() 2020-01-24 20:59:15 +01:00
hppa hw/core/loader: Let load_elf() populate a field with CPU-specific flags 2020-01-29 19:28:52 +01:00
hyperv add device_legacy_reset function to prepare for reset api change 2020-01-30 16:02:03 +00:00
i2c qdev: set properties with device_class_set_props() 2020-01-24 20:59:15 +01:00
i386 add device_legacy_reset function to prepare for reset api change 2020-01-30 16:02:03 +00:00
ide add device_legacy_reset function to prepare for reset api change 2020-01-30 16:02:03 +00:00
input hppa: add emulation of LASI PS2 controllers 2020-01-27 10:49:51 -08:00
intc ppc/pnv: Add models for POWER8 PHB3 PCIe Host bridge 2020-02-02 14:07:57 +11:00
ipack qdev: set properties with device_class_set_props() 2020-01-24 20:59:15 +01:00
ipmi qdev: set properties with device_class_set_props() 2020-01-24 20:59:15 +01:00
isa qdev: set properties with device_class_set_props() 2020-01-24 20:59:15 +01:00
lm32 hw/core/loader: Let load_elf() populate a field with CPU-specific flags 2020-01-29 19:28:52 +01:00
m68k hw/core/loader: Let load_elf() populate a field with CPU-specific flags 2020-01-29 19:28:52 +01:00
mem qdev: set properties with device_class_set_props() 2020-01-24 20:59:15 +01:00
microblaze hw/core/loader: Let load_elf() populate a field with CPU-specific flags 2020-01-29 19:28:52 +01:00
mips hw/core/loader: Let load_elf() populate a field with CPU-specific flags 2020-01-29 19:28:52 +01:00
misc misc/pca9552: Add qom set and get 2020-01-30 16:02:02 +00:00
moxie hw/core/loader: Let load_elf() populate a field with CPU-specific flags 2020-01-29 19:28:52 +01:00
net ftgmac100: check RX and TX buffer alignment 2020-01-30 16:02:02 +00:00
nios2 hw/core/loader: Let load_elf() populate a field with CPU-specific flags 2020-01-29 19:28:52 +01:00
nubus hw/m68k: add Nubus support 2019-10-28 19:06:47 +01:00
nvram qdev: set properties with device_class_set_props() 2020-01-24 20:59:15 +01:00
openrisc hw/core/loader: Let load_elf() populate a field with CPU-specific flags 2020-01-29 19:28:52 +01:00
pci qdev: set properties with device_class_set_props() 2020-01-24 20:59:15 +01:00
pci-bridge qdev: set properties with device_class_set_props() 2020-01-24 20:59:15 +01:00
pci-host ppc/pnv: change the PowerNV machine devices to be non user creatable 2020-02-02 14:07:57 +11:00
pcmcia Include hw/hw.h exactly where needed 2019-08-16 13:31:52 +02:00
ppc spapr: Enable DD2.3 accelerated count cache flush in pseries-5.0 machine 2020-02-03 11:33:02 +11:00
rdma qdev: set properties with device_class_set_props() 2020-01-24 20:59:15 +01:00
riscv hw/core/loader: Let load_elf() populate a field with CPU-specific flags 2020-01-29 19:28:52 +01:00
rtc qdev: set properties with device_class_set_props() 2020-01-24 20:59:15 +01:00
s390x hw/s390x/ipl: replace deprecated qdev_reset_all registration 2020-01-30 16:02:05 +00:00
scsi add device_legacy_reset function to prepare for reset api change 2020-01-30 16:02:03 +00:00
sd add device_legacy_reset function to prepare for reset api change 2020-01-30 16:02:03 +00:00
semihosting semihosting: add qemu_semihosting_console_inc for SYS_READC 2020-01-09 11:41:29 +00:00
sh4 sm501: make SerialMM a child, export chardev property 2020-01-07 17:24:29 +04:00
smbios smbios:ipmi: Ignore IPMI devices with no fwinfo function 2019-09-20 14:08:10 -05:00
sparc hw/core/loader: Let load_elf() populate a field with CPU-specific flags 2020-01-29 19:28:52 +01:00
sparc64 hw/core/loader: Let load_elf() populate a field with CPU-specific flags 2020-01-29 19:28:52 +01:00
ssi qdev: set properties with device_class_set_props() 2020-01-24 20:59:15 +01:00
timer qdev: set properties with device_class_set_props() 2020-01-24 20:59:15 +01:00
tpm hw/ppc/Kconfig: Enable TPM_SPAPR as part of PSERIES config 2020-02-02 14:07:57 +11:00
tricore hw/core/loader: Let load_elf() populate a field with CPU-specific flags 2020-01-29 19:28:52 +01:00
unicore32 Include hw/irq.h a lot less 2019-08-16 13:31:52 +02:00
usb qdev: set properties with device_class_set_props() 2020-01-24 20:59:15 +01:00
vfio qdev: set properties with device_class_set_props() 2020-01-24 20:59:15 +01:00
virtio * Register qdev properties as class properties (Marc-André) 2020-01-27 09:44:04 +00:00
watchdog qdev: set properties with device_class_set_props() 2020-01-24 20:59:15 +01:00
xen qdev: set properties with device_class_set_props() 2020-01-24 20:59:15 +01:00
xenpv Include sysemu/sysemu.h a lot less 2019-08-16 13:31:53 +02:00
xtensa hw/core/loader: Let load_elf() populate a field with CPU-specific flags 2020-01-29 19:28:52 +01:00
Kconfig Remove the core bluetooth code 2019-12-17 09:01:14 +01:00
Makefile.objs Remove the core bluetooth code 2019-12-17 09:01:14 +01:00