Re: [Qemu-devel] [PATCH v18 2/6] docs: APEI GHES generation and CPER record description
Hi Igor, Thanks for your review! On 2019/10/4 16:20, Igor Mammedov wrote: > On Fri, 6 Sep 2019 16:31:48 +0800 > Xiang Zheng wrote: > >> From: Dongjiu Geng >> > [...] >> + >> +(9) When QEMU gets SIGBUS from the kernel, QEMU formats the CPER right into >> +guest memory, and then injects whatever interrupt (or assert whatever >> GPIO > s/whatever .../platform specific/ > > and add concrete impl info like: > "in case of arm/virt machine it's ..." OK, I will add the concrete impl info. > >> +line) as a notification which is necessary for notifying the guest. > [...] > > . > -- Thanks, Xiang
Re: [Qemu-devel] [PATCH v18 2/6] docs: APEI GHES generation and CPER record description
On Fri, 6 Sep 2019 16:31:48 +0800 Xiang Zheng wrote: > From: Dongjiu Geng > [...] > + > +(9) When QEMU gets SIGBUS from the kernel, QEMU formats the CPER right into > +guest memory, and then injects whatever interrupt (or assert whatever > GPIO s/whatever .../platform specific/ and add concrete impl info like: "in case of arm/virt machine it's ..." > +line) as a notification which is necessary for notifying the guest. [...]
Re: [PATCH v18 2/6] docs: APEI GHES generation and CPER record description
Hi Peter, thanks for your review! On 2019/9/19 21:25, Peter Maydell wrote: > On Fri, 6 Sep 2019 at 09:33, Xiang Zheng wrote: >> >> From: Dongjiu Geng >> >> Add APEI/GHES detailed design document >> >> Signed-off-by: Dongjiu Geng >> Signed-off-by: Xiang Zheng >> --- >> docs/specs/acpi_hest_ghes.txt | 88 +++ >> 1 file changed, 88 insertions(+) >> create mode 100644 docs/specs/acpi_hest_ghes.txt > > Hi; new documentation in docs/specs should be in rst format and > listed in the contents page for the manual at docs/specs/index.rst, > please. Conversion from plain text should hopefully be fairly > straightforward. > Got it! > > I've also provided some minor typo/grammar fixes below. > Thanks, I will fix them soon. > >> diff --git a/docs/specs/acpi_hest_ghes.txt b/docs/specs/acpi_hest_ghes.txt >> new file mode 100644 >> index 00..690d4b2bd0 >> --- /dev/null >> +++ b/docs/specs/acpi_hest_ghes.txt >> @@ -0,0 +1,88 @@ >> +APEI tables generating and CPER record >> += >> + >> +Copyright (C) 2019 Huawei Corporation. >> + >> +Design Details: >> +--- >> + >> + etc/acpi/tables etc/hardware_errors >> + >> == >> ++ +--++---+ >> +| | HEST ||address| >>+--+ >> +| +--+|registers | >>| Error Status | >> +| | GHES1|| +-+ >>| Data Block 1 | >> +| +--+ +->| |error_block_address1 >> |--->| ++ >> +| | .| | | +-+ >>| | CPER | >> +| | error_status_address-+-+ +--->| |error_block_address2 >> |+ | | CPER | >> +| | .| || +-+ >> | | | | >> +| | read_ack_register+-+ || |.. | >> | | | CPER | >> +| | read_ack_preserve| | |+---+ >> | | ++ >> +| | read_ack_write | | | +->| |error_block_addressN |--+ >> | | Error Status | >> ++ +--+ | | | | +-+ | >> | | Data Block 2 | >> +| | GHES2| +-+-+->| |read_ack_register1 | | >> +-->| ++ >> ++ +--+ | | | +-+ | >>| | CPER | >> +| | .| | | +--->| |read_ack_register2 | | >>| | CPER | >> +| | error_status_address-+---+ | || +-+ | >>| | | >> +| | .| | || | . | | >>| | CPER | >> +| | read_ack_register+-+-+| +-+ | >>+-++ >> +| | read_ack_preserve| | +->| |read_ack_registerN | | >>| |.. | >> +| | read_ack_write | | | | +-+ | >>| ++ >> ++ +--| | | | >>| Error Status | >> +| | ... | | | | >>| Data Block N | >> ++ +--+ | | >> +>| ++ >> +| | GHESN| | | >>| | CPER | >> ++ +--+ | | >>| | CPER | >> +| | .| | | >>| | | >> +| | error_status_address-+-+ | >>| | CPER | >> +| | .| | >>+-++ >> +| | read_ack_register+-+ >> +| | read_ack_preserve| >> +| | read_ack_write | >> ++ +--+ >> + >> +(1) QEMU generates the ACPI HEST table. This table goes in the current >> +"etc/acpi/tables" fw_cfg blob. Each error source has different >> +notification types. >> + >> +(2) A new fw_cfg blob called "etc/hardware_errors" is introduced. QEMU >> +also need to populate this blob. The "etc/hardwre_errors" fw_cfg blob > > "needs". "hardware_errors". > >> +contains an address registers table and an Error Status Data Block >> table. >> + >> +(3) The address registers table contains N Error Block Address entries >> +and N Read Ack Register entries, the size for each entry is 8-byte. > > ". The size". >
Re: [Qemu-devel] [PATCH v18 2/6] docs: APEI GHES generation and CPER record description
On Fri, 6 Sep 2019 at 09:33, Xiang Zheng wrote: > > From: Dongjiu Geng > > Add APEI/GHES detailed design document > > Signed-off-by: Dongjiu Geng > Signed-off-by: Xiang Zheng > --- > docs/specs/acpi_hest_ghes.txt | 88 +++ > 1 file changed, 88 insertions(+) > create mode 100644 docs/specs/acpi_hest_ghes.txt Hi; new documentation in docs/specs should be in rst format and listed in the contents page for the manual at docs/specs/index.rst, please. Conversion from plain text should hopefully be fairly straightforward. I've also provided some minor typo/grammar fixes below. > diff --git a/docs/specs/acpi_hest_ghes.txt b/docs/specs/acpi_hest_ghes.txt > new file mode 100644 > index 00..690d4b2bd0 > --- /dev/null > +++ b/docs/specs/acpi_hest_ghes.txt > @@ -0,0 +1,88 @@ > +APEI tables generating and CPER record > += > + > +Copyright (C) 2019 Huawei Corporation. > + > +Design Details: > +--- > + > + etc/acpi/tables etc/hardware_errors > + > == > ++ +--++---+ > +| | HEST ||address| > +--+ > +| +--+|registers | > | Error Status | > +| | GHES1|| +-+ > | Data Block 1 | > +| +--+ +->| |error_block_address1 > |--->| ++ > +| | .| | | +-+ > | | CPER | > +| | error_status_address-+-+ +--->| |error_block_address2 |+ > | | CPER | > +| | .| || +-+| > | | | > +| | read_ack_register+-+ || |.. || > | | CPER | > +| | read_ack_preserve| | |+---+| > | ++ > +| | read_ack_write | | | +->| |error_block_addressN |--+ | > | Error Status | > ++ +--+ | | | | +-+ | | > | Data Block 2 | > +| | GHES2| +-+-+->| |read_ack_register1 | | > +-->| ++ > ++ +--+ | | | +-+ | > | | CPER | > +| | .| | | +--->| |read_ack_register2 | | > | | CPER | > +| | error_status_address-+---+ | || +-+ | > | | | > +| | .| | || | . | | > | | CPER | > +| | read_ack_register+-+-+| +-+ | > +-++ > +| | read_ack_preserve| | +->| |read_ack_registerN | | > | |.. | > +| | read_ack_write | | | | +-+ | > | ++ > ++ +--| | | | > | Error Status | > +| | ... | | | | > | Data Block N | > ++ +--+ | | > +>| ++ > +| | GHESN| | | > | | CPER | > ++ +--+ | | > | | CPER | > +| | .| | | > | | | > +| | error_status_address-+-+ | > | | CPER | > +| | .| | > +-++ > +| | read_ack_register+-+ > +| | read_ack_preserve| > +| | read_ack_write | > ++ +--+ > + > +(1) QEMU generates the ACPI HEST table. This table goes in the current > +"etc/acpi/tables" fw_cfg blob. Each error source has different > +notification types. > + > +(2) A new fw_cfg blob called "etc/hardware_errors" is introduced. QEMU > +also need to populate this blob. The "etc/hardwre_errors" fw_cfg blob "needs". "hardware_errors". > +contains an address registers table and an Error Status Data Block table. > + > +(3) The address registers table contains N Error Block Address entries > +and N Read Ack Register entries, the size for each entry is 8-byte. ". The size". > +The Error Status Data Block table contains N Error Status Data Block > +entries, the size for each entry is 4096(0x1000) bytes. The total size ". The size" > +for "etc/hardware_errors" fw_cfg blob is (N * 8 * 2 + N * 4096) bytes. "f
[Qemu-devel] [PATCH v18 2/6] docs: APEI GHES generation and CPER record description
From: Dongjiu Geng Add APEI/GHES detailed design document Signed-off-by: Dongjiu Geng Signed-off-by: Xiang Zheng --- docs/specs/acpi_hest_ghes.txt | 88 +++ 1 file changed, 88 insertions(+) create mode 100644 docs/specs/acpi_hest_ghes.txt diff --git a/docs/specs/acpi_hest_ghes.txt b/docs/specs/acpi_hest_ghes.txt new file mode 100644 index 00..690d4b2bd0 --- /dev/null +++ b/docs/specs/acpi_hest_ghes.txt @@ -0,0 +1,88 @@ +APEI tables generating and CPER record += + +Copyright (C) 2019 Huawei Corporation. + +Design Details: +--- + + etc/acpi/tables etc/hardware_errors + == ++ +--++---+ +| | HEST ||address| +--+ +| +--+|registers | | Error Status | +| | GHES1|| +-+ | Data Block 1 | +| +--+ +->| |error_block_address1 |--->| ++ +| | .| | | +-+ | | CPER | +| | error_status_address-+-+ +--->| |error_block_address2 |+ | | CPER | +| | .| || +-+| | | | +| | read_ack_register+-+ || |.. || | | CPER | +| | read_ack_preserve| | |+---+| | ++ +| | read_ack_write | | | +->| |error_block_addressN |--+ | | Error Status | ++ +--+ | | | | +-+ | | | Data Block 2 | +| | GHES2| +-+-+->| |read_ack_register1 | | +-->| ++ ++ +--+ | | | +-+ | | | CPER | +| | .| | | +--->| |read_ack_register2 | | | | CPER | +| | error_status_address-+---+ | || +-+ | | | | +| | .| | || | . | | | | CPER | +| | read_ack_register+-+-+| +-+ | +-++ +| | read_ack_preserve| | +->| |read_ack_registerN | | | |.. | +| | read_ack_write | | | | +-+ | | ++ ++ +--| | | | | Error Status | +| | ... | | | | | Data Block N | ++ +--+ | | +>| ++ +| | GHESN| | | | | CPER | ++ +--+ | | | | CPER | +| | .| | | | | | +| | error_status_address-+-+ | | | CPER | +| | .| | +-++ +| | read_ack_register+-+ +| | read_ack_preserve| +| | read_ack_write | ++ +--+ + +(1) QEMU generates the ACPI HEST table. This table goes in the current +"etc/acpi/tables" fw_cfg blob. Each error source has different +notification types. + +(2) A new fw_cfg blob called "etc/hardware_errors" is introduced. QEMU +also need to populate this blob. The "etc/hardwre_errors" fw_cfg blob +contains an address registers table and an Error Status Data Block table. + +(3) The address registers table contains N Error Block Address entries +and N Read Ack Register entries, the size for each entry is 8-byte. +The Error Status Data Block table contains N Error Status Data Block +entries, the size for each entry is 4096(0x1000) bytes. The total size +for "etc/hardware_errors" fw_cfg blob is (N * 8 * 2 + N * 4096) bytes. +N is the kinds of hardware error sources. + +(4) QEMU generates the ACPI linker/loader script for the firmware, the +firmware pre-allocates memory for "etc/acpi/tables", "etc/hardware_errors" +and copies blobs content there. + +(5) QEMU generates N ADD_POINTER commands, which patch address in the +"error_status_address" fields of the HEST table with a pointer to the +corresponding "address registers" in "etc/hardware_errors" blob. + +(6) QEMU generates N ADD_POINTER commands, which patch address in the +"read_ack_register" fields of the HEST table with a