mirror of
https://github.com/qemu/qemu.git
synced 2026-02-04 05:35:39 +00:00
Using the QMP GHESv2 API requires preparing a raw data array
containing a CPER record.
Add a helper script with subcommands to prepare such data.
Currently, only ARM Processor error CPER record is supported, by
using:
$ ghes_inject.py arm
which produces those warnings on Linux:
[ 705.032426] [Firmware Warn]: GHES: Unhandled processor error type 0x02: cache error
[ 774.866308] {4}[Hardware Error]: Hardware error from APEI Generic Hardware Error Source: 1
[ 774.866583] {4}[Hardware Error]: event severity: recoverable
[ 774.866738] {4}[Hardware Error]: Error 0, type: recoverable
[ 774.866889] {4}[Hardware Error]: section_type: ARM processor error
[ 774.867048] {4}[Hardware Error]: MIDR: 0x00000000000f0510
[ 774.867189] {4}[Hardware Error]: running state: 0x0
[ 774.867321] {4}[Hardware Error]: Power State Coordination Interface state: 0
[ 774.867511] {4}[Hardware Error]: Error info structure 0:
[ 774.867679] {4}[Hardware Error]: num errors: 2
[ 774.867801] {4}[Hardware Error]: error_type: 0x02: cache error
[ 774.867962] {4}[Hardware Error]: error_info: 0x000000000091000f
[ 774.868124] {4}[Hardware Error]: transaction type: Data Access
[ 774.868280] {4}[Hardware Error]: cache error, operation type: Data write
[ 774.868465] {4}[Hardware Error]: cache level: 2
[ 774.868592] {4}[Hardware Error]: processor context not corrupted
[ 774.868774] [Firmware Warn]: GHES: Unhandled processor error type 0x02: cache error
Such script allows customizing the error data, allowing to change
all fields at the record. Please use:
$ ghes_inject.py arm -h
For more details about its usage.
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Message-ID: <5ea174638e33d23635332fa6d4ae9d751355f127.1758610789.git.mchehab+huawei@kernel.org>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
52 lines
1.5 KiB
Python
Executable File
52 lines
1.5 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
#
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
#
|
|
# Copyright (C) 2024-2025 Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
|
|
|
|
"""
|
|
Handle ACPI GHESv2 error injection logic QEMU QMP interface.
|
|
"""
|
|
|
|
import argparse
|
|
import sys
|
|
|
|
from arm_processor_error import ArmProcessorEinj
|
|
|
|
EINJ_DESC = """
|
|
Handle ACPI GHESv2 error injection logic QEMU QMP interface.
|
|
|
|
It allows using UEFI BIOS EINJ features to generate GHES records.
|
|
|
|
It helps testing CPER and GHES drivers at the guest OS and how
|
|
userspace applications at the guest handle them.
|
|
"""
|
|
|
|
def main():
|
|
"""Main program"""
|
|
|
|
# Main parser - handle generic args like QEMU QMP TCP socket options
|
|
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
|
usage="%(prog)s [options]",
|
|
description=EINJ_DESC)
|
|
|
|
g_options = parser.add_argument_group("QEMU QMP socket options")
|
|
g_options.add_argument("-H", "--host", default="localhost", type=str,
|
|
help="host name")
|
|
g_options.add_argument("-P", "--port", default=4445, type=int,
|
|
help="TCP port number")
|
|
g_options.add_argument('-d', '--debug', action='store_true')
|
|
|
|
subparsers = parser.add_subparsers()
|
|
|
|
ArmProcessorEinj(subparsers)
|
|
|
|
args = parser.parse_args()
|
|
if "func" in args:
|
|
args.func(args)
|
|
else:
|
|
sys.exit(f"Please specify a valid command for {sys.argv[0]}")
|
|
|
|
if __name__ == "__main__":
|
|
main()
|