On Mon, 16 Feb 2026 13:09:30 +0530 Ani Sinha <[email protected]> wrote:
> On Fri, Feb 6, 2026 at 6:44 PM Igor Mammedov <[email protected]> wrote: > > > > Windows doesn't ship built-in TCO watchdog driver, and users are > > forced to install vendor specific driver(s) if such exists. > > However OS provides a generic watchdog driver that uses > > ACPI WDAT table [1] to abstract actual hardware behind it. > > The same applies to ARM version of Windows. > > > > This series adds > > * WDAT table tailored for TCO watchdog that Q35 already > > has as part of ICH9 chipset and a knob to enable it. > > * SBSA GWDT to arm/vit machine with WDAT table tailored > > for it and necessary tweaks to GWDT to make usable > > with WDAT driver. > > > > Guest OS support is present since Windows Vista and Linux since 2016[2]. > > I am confused. The linux documentation for arm64 says WDAT is not supported > https://www.kernel.org/doc/html/latest/arch/arm64/acpi_object_usage.html IT probably should be fixed, the WDAT support builds and actually works and it's no different than x86 in respect that it's Windows specific ACPI table. Justification for using WDAT on ARM is the same as x86, reuse a more generic driver that hw supports for the sake of out of box Windows driver, instead of writing it for each watchdog impl. Yep, underlying hw watchdog abstracted by WDAT is limited but if it is sufficient for typical usecase, there is not need to for guest to ship hw specific driver. From QEMU pov, WDAT allows us to change used hw watchdog without breaking guests. (i.e. if we decide to use another watchdog, we can do so by starting from new machine type and slowly phase out previously used one) Thanks for review, I'll respin series with your comments addressed. > > > > > One can test it launching VM with following options: > > -machine acpi-watchdog=on > > to trace access to TCO registers one can add to CLI: > > -trace "tco_*" > > to trace access to GWDT registers one can add to CLI: > > -trace "sbsa_gwdt*" > > > > To verify that guest uses WDAT (both Windows and Linux would use it if > > present), > > * on linux make sure that watchdog service is configured/enabled > > (use wdctl to check what watchdog device to use and confirm that it's > > wadt based one) and then trigger kernel panic with command: > > echo c > /proc/sysrq-trigger > > * on Windows kill svchost process, running cmd in admin mode: > > taskkill /f /im svchost.exe > > > > Tested with WS2025 & RHEL9.6 & Fedore 43 (aarch64) > > > > git tree at: https://gitlab.com/imammedo/qemu/-/commits/gwdt_v2 > > > > 1) http://msdn.microsoft.com/en-us/windows/hardware/gg463320.aspx > > 2) https://lwn.net/Articles/700524/ > > > > PS: > > previous revision (q35 only): > > > > https://patchwork.ozlabs.org/project/qemu-devel/cover/[email protected]/ > > > > Also CCing SBSA folks to see if they are interested in adding it to their > > reference machine > > > > Igor Mammedov (11): > > acpi: add API to build WDAT instructions > > machine: add "acpi-watchdog" property > > x86: q35: generate WDAT ACPI table > > tests: acpi: x86/q35: whitelist new WDAT table > > tests: acpi: x86/q35: add WDAT table test case > > tests: acpi: x86/q35: update expected WDAT blob > > arm: add tracing events to sbsa_gwdt > > arm: virt: create GWDT watchdog paired with WDAT ACPI table > > tests: acpi: arm/virt: whitelist new WDAT table > > tests: acpi: arm/virt: add WDAT table test case > > tests: acpi: arm/virt: update expected WDAT blob > > > > include/hw/acpi/wdat-gwdt.h | 19 ++++ > > include/hw/acpi/wdat-ich9.h | 15 ++++ > > include/hw/acpi/wdat.h | 118 +++++++++++++++++++++++++ > > include/hw/arm/virt.h | 3 + > > include/hw/core/boards.h | 1 + > > hw/acpi/aml-build.c | 14 +++ > > hw/acpi/meson.build | 5 +- > > hw/acpi/wdat-gwdt-stub.c | 16 ++++ > > hw/acpi/wdat-gwdt.c | 92 +++++++++++++++++++ > > hw/acpi/wdat-ich9-stub.c | 15 ++++ > > hw/acpi/wdat-ich9.c | 87 ++++++++++++++++++ > > hw/arm/Kconfig | 1 + > > hw/arm/virt-acpi-build.c | 16 ++++ > > hw/arm/virt.c | 26 ++++++ > > hw/core/machine.c | 20 +++++ > > hw/i386/acpi-build.c | 12 +++ > > hw/watchdog/sbsa_gwdt.c | 8 ++ > > hw/watchdog/trace-events | 9 ++ > > tests/data/acpi/aarch64/virt/WDAT.wdat | Bin 0 -> 260 bytes > > tests/data/acpi/x86/q35/WDAT.wdat | Bin 0 -> 308 bytes > > tests/qtest/bios-tables-test.c | 34 +++++++ > > 21 files changed, 510 insertions(+), 1 deletion(-) > > create mode 100644 include/hw/acpi/wdat-gwdt.h > > create mode 100644 include/hw/acpi/wdat-ich9.h > > create mode 100644 include/hw/acpi/wdat.h > > create mode 100644 hw/acpi/wdat-gwdt-stub.c > > create mode 100644 hw/acpi/wdat-gwdt.c > > create mode 100644 hw/acpi/wdat-ich9-stub.c > > create mode 100644 hw/acpi/wdat-ich9.c > > create mode 100644 tests/data/acpi/aarch64/virt/WDAT.wdat > > create mode 100644 tests/data/acpi/x86/q35/WDAT.wdat > > > > -- > > 2.47.3 > > >
