qemu/hw/isa
Daniel P. Berrangé a6b6414f0c hw/isa: enable TCO watchdog reboot pin strap by default
The TCO watchdog implementation default behaviour from POV of the
guest OS relies on the initial values for two I/O ports:

  * TCO1_CNT == 0x0

    Since bit 11 (TCO Timer Halt) is clear, the watchdog state
    is considered to be initially running

  * GCS == 0x20

    Since bit 5 (No Reboot) is set, the watchdog will not trigger
    when the timer expires

This is a safe default, because the No Reboot bit will prevent the
watchdog from triggering if the guest OS is unaware of its existance,
or is slow in configuring it. When a Linux guest initializes the TCO
watchdog, it will attempt to clear the "No Reboot" flag, and read the
value back. If the clear was honoured, the driver will treat this as
an indicator that the watchdog is functional and create the guest
watchdog device.

QEMU implements a second "no reboot" flag, however, via pin straps
which overrides the behaviour of the guest controlled "no reboot"
flag:

  commit 5add35bec1
  Author: Paulo Alcantara <pcacjr@gmail.com>
  Date:   Sun Jun 28 14:58:58 2015 -0300

    ich9: implement strap SPKR pin logic

This second 'noreboot' pin was defaulted to high, which also inhibits
triggering of the requested watchdog actions, unless QEMU is launched
with the magic flag "-global ICH9-LPC.noreboot=false".

This is a bad default as we are exposing a watchdog to every guest OS
using the q35 machine type, but preventing it from actually doing what
it is designed to do. What is worse is that the guest OS and its apps
have no way to know that the watchdog is never going to fire, due to
this second 'noreboot' pin.

If a guest OS had no watchdog device at all, then apps whose operation
and/or data integrity relies on a watchdog can refuse to launch, and
alert the administrator of the problematic deployment. With Q35 machines
unconditionally exposing a watchdog though, apps will think their
deployment is correct but in fact have no protection at all.

This patch flips the default of the second 'no reboot' flag, so that
configured watchdog actions will be honoured out of the box for the
7.2 Q35 machine type onwards, if the guest enables use of the watchdog.

See also related bug reports

  https://bugzilla.redhat.com/show_bug.cgi?id=2080207
  https://bugzilla.redhat.com/show_bug.cgi?id=2136889
  https://bugzilla.redhat.com/show_bug.cgi?id=2137346

Reviewed-by: Richard W.M. Jones <rjones@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Message-Id: <20221216125749.596075-5-berrange@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2022-12-21 06:35:28 -05:00
..
apm.c nomaintainer: Fix Lesser GPL version number 2020-11-15 17:04:40 +01:00
i82378.c prep: Fix Lesser GPL version number 2020-11-15 16:39:29 +01:00
isa-bus.c isa-bus: drop no longer used ISADeviceClass::build_aml 2022-06-09 19:32:48 -04:00
isa-superio.c Do not include sysemu/sysemu.h if it's not really necessary 2021-05-02 17:24:50 +02:00
Kconfig hw/isa/Kconfig: Fix dependencies of piix4 southbridge 2022-10-31 11:32:07 +01:00
lpc_ich9.c hw/isa: enable TCO watchdog reboot pin strap by default 2022-12-21 06:35:28 -05:00
meson.build meson: convert hw/isa 2020-08-21 06:30:29 -04:00
pc87312.c pc87312: Rename TYPE_PC87312_SUPERIO to TYPE_PC87312 2020-09-09 13:20:22 -04:00
piix3.c acpi: x86: move RPQx field back to _SB scope 2022-11-22 05:19:00 -05:00
piix4.c hw/isa/piix4: Move pci_ide_create_devs() call to board code 2022-10-31 11:32:07 +01:00
smc37c669-superio.c hw/isa/superio: Correct the license text 2020-04-01 19:00:16 +02:00
trace-events hw/isa: add trace events for ICH9 LPC chip config access 2022-12-21 06:35:28 -05:00
trace.h trace: switch position of headers to what Meson requires 2020-08-21 06:18:24 -04:00
vt82c686.c hw/isa/vt82c686: Create rtc-time alias in boards instead 2022-10-31 11:32:07 +01:00