lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250113130854.848688-1-mchehab+huawei@kernel.org>
Date: Mon, 13 Jan 2025 14:08:46 +0100
From: Mauro Carvalho Chehab <mchehab+huawei@...nel.org>
To: Igor Mammedov <imammedo@...hat.com>,
	"Michael S . Tsirkin" <mst@...hat.com>
Cc: Philippe Mathieu-Daudé <philmd@...aro.org>,
	Ani Sinha <anisinha@...hat.com>,
	Dongjiu Geng <gengdongjiu1@...il.com>,
	Eduardo Habkost <eduardo@...kost.net>,
	Marcel Apfelbaum <marcel.apfelbaum@...il.com>,
	Peter Maydell <peter.maydell@...aro.org>,
	Shannon Zhao <shannon.zhaosl@...il.com>,
	Yanan Wang <wangyanan55@...wei.com>,
	Zhao Liu <zhao1.liu@...el.com>,
	linux-kernel@...r.kernel.org,
	qemu-arm@...gnu.org,
	qemu-devel@...gnu.org,
	Mauro Carvalho Chehab <mchehab+huawei@...nel.org>
Subject: [PATCH v4 0/5] Change ghes driver to use HEST-based offsets

(patch resent as c/c ML was missing)

This series was part of the previous PR to add generic error injection
support on GHES. It depends on a cleanup patch series sent in December,
pending merge:

    https://lore.kernel.org/qemu-devel/cover.1733297707.git.mchehab+huawei@kernel.org/T/#t

It contains the changes of the math used to calculate offsets at HEST table
and hardware_error firmware file. It prepares for the addition of GHES
error injection.

The first patch was previously at the cleanup series. It prepares
the logic to support multiple sources.

The second patch adds a new firmware file to store HEST address.

The third patch use the new firmware to calculate offsets using
HEST table.

Patches 4 and 5 add migration support. They assume that this
series will be merged for qemu devel (maybe it is too late for that,
as QEMU is now on soft freeze).

Tested the following scenarios:

1. migration: QEMU 9.2 -> new QEMU with -M virt-9.2,nvdimm=on,ras=on
2. migration: new QEMU -> QEMU 9.2 -M with virt-9.2,nvdimm=on,ras=on
3. migration: new QEMU -> new QEMU with -M virt,nvdimm=on,ras=on
4. without migration with -M virt,nvdimm=on,ras=on

(virt is now an alias to virt-10.0)

Regards,
Mauro

-

The full qemu command when test backward-compatibility when running virt-9.2 is:

1) migration: QEMU 9.2 -> new QEMU with -M virt-9.2,nvdimm=on,ras=on

qemu 9.2:
	$ ../old_qemu/build/qemu-system-aarch64 -bios ../emulator/QEMU_EFI-silent.fd \
	-monitor stdio -m 4g,maxmem=8G,slots=8 -no-reboot -kernel \
	../work/arm64_build/arch/arm64/boot/Image.gz -device \
	pcie-root-port,id=root_port1 -device virtio-blk-pci,drive=hd -device \
	virtio-net-pci,netdev=mynet,id=bob -drive \
	if=none,file=../emulator/debian.qcow2,format=qcow2,id=hd -object \
	memory-backend-ram,size=4G,id=mem0 -netdev \
	type=user,id=mynet,hostfwd=tcp::5555-:22 -qmp \
	tcp:localhost:4445,server=on,wait=off -M virt-9.2,nvdimm=on,ras=on -cpu \
	cortex-a57 -smp 4 -numa node,nodeid=0,cpus=0-3,memdev=mem0 -append \
	"earlycon nomodeset root=/dev/vda1 fsck.mode=skip tp_printk maxcpus=4"

	(qemu) stop
	(qemu) migrate "exec:gzip -c > STATEFILE.gz"
	(qemu) quit

qemu devel:

	$ ../qemu/build/qemu-system-aarch64 -bios ../emulator/QEMU_EFI-silent.fd -monitor \
	stdio -m 4g,maxmem=8G,slots=8 -no-reboot -kernel \
	../work/arm64_build/arch/arm64/boot/Image.gz -device \
	pcie-root-port,id=root_port1 -device virtio-blk-pci,drive=hd -device \
	virtio-net-pci,netdev=mynet,id=bob -drive \
	if=none,file=../emulator/debian.qcow2,format=qcow2,id=hd -object \
	memory-backend-ram,size=4G,id=mem0 -netdev \
	type=user,id=mynet,hostfwd=tcp::5555-:22 -qmp \
	tcp:localhost:4445,server=on,wait=off -M virt-9.2,nvdimm=on,ras=on -cpu \
	cortex-a57 -smp 4 -numa node,nodeid=0,cpus=0-3,memdev=mem0 -incoming \
	"exec: gzip -c -d ../emulator/STATEFILE.gz" -append \
	"earlycon nomodeset root=/dev/vda1 fsck.mode=skip tp_printk maxcpus=4"

	(qemu) cont

	$ scripts/ghes_inject.py arm

	<error properly injected using Using old GHES lookup>

2. migration: new QEMU -> QEMU 9.2 -M with virt-9.2,nvdimm=on,ras=on

qemu devel:

	$ ../qemu/build/qemu-system-aarch64 -bios ../emulator/QEMU_EFI-silent.fd -monitor \
	stdio -m 4g,maxmem=8G,slots=8 -no-reboot -kernel \
	../work/arm64_build/arch/arm64/boot/Image.gz -device \
	pcie-root-port,id=root_port1 -device virtio-blk-pci,drive=hd -device \
	virtio-net-pci,netdev=mynet,id=bob -drive \
	if=none,file=../emulator/debian.qcow2,format=qcow2,id=hd -object \
	memory-backend-ram,size=4G,id=mem0 -netdev \
	type=user,id=mynet,hostfwd=tcp::5555-:22 -qmp \
	tcp:localhost:4445,server=on,wait=off -M virt-9.2,nvdimm=on,ras=on -cpu \
	cortex-a57 -smp 4 -numa node,nodeid=0,cpus=0-3,memdev=mem0 -append \
	"earlycon nomodeset root=/dev/vda1 fsck.mode=skip tp_printk maxcpus=4"

	(qemu) stop
	(qemu) migrate "exec:gzip -c > STATEFILE.gz"
	(qemu) quit

qemu 9.2:

	$ ../old_qemu/build/qemu-system-aarch64 -bios ../emulator/QEMU_EFI-silent.fd \
	-monitor stdio -m 4g,maxmem=8G,slots=8 -no-reboot -kernel \
	../work/arm64_build/arch/arm64/boot/Image.gz -device \
	pcie-root-port,id=root_port1 -device virtio-blk-pci,drive=hd -device \
	virtio-net-pci,netdev=mynet,id=bob -drive \
	if=none,file=../emulator/debian.qcow2,format=qcow2,id=hd -object \
	memory-backend-ram,size=4G,id=mem0 -netdev \
	type=user,id=mynet,hostfwd=tcp::5555-:22 -qmp \
	tcp:localhost:4445,server=on,wait=off -M virt-9.2,nvdimm=on,ras=on -cpu \
	cortex-a57 -smp 4 -numa node,nodeid=0,cpus=0-3,memdev=mem0 -incoming \
	"exec: gzip -c -d ../emulator/STATEFILE.gz" -append \
	"earlycon nomodeset root=/dev/vda1 fsck.mode=skip tp_printk maxcpus=4"
	QEMU 9.2.0 monitor - type 'help' for more information

	(qemu) cont

	$ scripts/ghes_inject.py arm

	<error properly injected using Using old GHES lookup>

3) migration: new QEMU -> new QEMU with -M virt,nvdimm=on,ras=on

	$ ./qemu/build/qemu-system-aarch64 -bios ../emulator/QEMU_EFI-silent.fd -monitor \
	stdio -m 4g,maxmem=8G,slots=8 -no-reboot -kernel \
	../work/arm64_build/arch/arm64/boot/Image.gz -device \
	pcie-root-port,id=root_port1 -device virtio-blk-pci,drive=hd -device \
	virtio-net-pci,netdev=mynet,id=bob -drive \
	if=none,file=../emulator/debian.qcow2,format=qcow2,id=hd -object \
	memory-backend-ram,size=4G,id=mem0 -netdev \
	type=user,id=mynet,hostfwd=tcp::5555-:22 -qmp \
	tcp:localhost:4445,server=on,wait=off -M virt,nvdimm=on,ras=on -cpu cortex-a57 \
	-smp 4 -numa node,nodeid=0,cpus=0-3,memdev=mem0 -append \
	"earlycon nomodeset root=/dev/vda1 fsck.mode=skip tp_printk maxcpus=4"
	QEMU 9.2.50 monitor - type 'help' for more information
	(qemu) stop
	(qemu) migrate "exec:gzip -c > STATEFILE.gz"
	(qemu) quit


	$ ../qemu/build/qemu-system-aarch64 -bios ../emulator/QEMU_EFI-silent.fd -monitor \
	stdio -m 4g,maxmem=8G,slots=8 -no-reboot -kernel \
	../work/arm64_build/arch/arm64/boot/Image.gz -device \
	pcie-root-port,id=root_port1 -device virtio-blk-pci,drive=hd -device \
	virtio-net-pci,netdev=mynet,id=bob -drive \
	if=none,file=../emulator/debian.qcow2,format=qcow2,id=hd -object \
	memory-backend-ram,size=4G,id=mem0 -netdev \
	type=user,id=mynet,hostfwd=tcp::5555-:22 -qmp \
	tcp:localhost:4445,server=on,wait=off -M virt,nvdimm=on,ras=on -cpu cortex-a57 \
	-smp 4 -numa node,nodeid=0,cpus=0-3,memdev=mem0 -incoming \
	"exec: gzip -c -d ../emulator/STATEFILE.gz" -append \
	"earlycon nomodeset root=/dev/vda1 fsck.mode=skip tp_printk maxcpus=4"

	(qemu) cont

	$ scripts/ghes_inject.py arm

	<error properly injected using Using new GHES lookup>

4. without migration with -M virt,nvdimm=on,ras=on

	$ ../qemu/build/qemu-system-aarch64 -bios ../emulator/QEMU_EFI-silent.fd -monitor \
	stdio -m 4g,maxmem=8G,slots=8 -no-reboot -kernel \
	../work/arm64_build/arch/arm64/boot/Image.gz -device \
	pcie-root-port,id=root_port1 -device virtio-blk-pci,drive=hd -device \
	virtio-net-pci,netdev=mynet,id=bob -drive \
	if=none,file=../emulator/debian.qcow2,format=qcow2,id=hd -object \
	memory-backend-ram,size=4G,id=mem0 -netdev \
	type=user,id=mynet,hostfwd=tcp::5555-:22 -qmp \
	tcp:localhost:4445,server=on,wait=off -M virt,nvdimm=on,ras=on -cpu cortex-a57 \
	-smp 4 -numa node,nodeid=0,cpus=0-3,memdev=mem0 -append \
	"earlycon nomodeset root=/dev/vda1 fsck.mode=skip tp_printk maxcpus=4"

	$ scripts/ghes_inject.py arm

	<error properly injected using Using new GHES lookup>

---

v4:
  - migration changed from 9.1 to devel and series are rebased on the top of
    upstream master

v3: did some minor cleanups at the code, as suggested by Jonathan Cameron.

v2:
  - some whitespace and comment changes
  - patch 3/6 (acpi/ghes: rename the function which gets hw error offsets)
    was merged on the cleanup series.

*** BLURB HERE ***

Mauro Carvalho Chehab (5):
  acpi/ghes: Prepare to support multiple sources on ghes
  acpi/ghes: add a firmware file with HEST address
  acpi/ghes: Use HEST table offsets when preparing GHES records
  acpi/generic_event_device: Update GHES migration to cover hest addr
  acpi/generic_event_device: add logic to detect if HEST addr is
    available

 hw/acpi/generic_event_device.c |  30 +++++++
 hw/acpi/ghes.c                 | 156 +++++++++++++++++++++++++++++----
 hw/arm/virt-acpi-build.c       |  33 ++++++-
 hw/core/machine.c              |   5 +-
 include/hw/acpi/ghes.h         |  23 +++--
 5 files changed, 218 insertions(+), 29 deletions(-)

-- 
2.47.1


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ