ACK: [PATCH] acpi: bert: do not fail if BERT error region raw_data_length is zero
Colin Ian King
colin.king at canonical.com
Wed Aug 17 21:44:20 UTC 2016
On 17/08/16 21:51, Ricardo Neri wrote:
> If there are no errors to report, the Boot Error Region pointed by the
> BERT ACPI table in certain systems is populated with zeros. This implies
> that the Raw Data Offset field will also be zero. In such a case, we will
> not meet the condition
>
> error_region.raw_data_offset > sizeof(error_region) +
> error_region.data_length). (1)
>
> This is not an error if there is not raw data. Instead, fail the test case
> only if error_region.raw_data_length is non-zero.
>
> This brings FWTS in alignment with what Linux does to check the validity of
> the BERT error region.
>
> In order to not mask actual issues in the BERT error region and conserve
> some of the current behavior, issue a warning when (1) is not met and add
> commentary on the fact that there might not be raw data.
>
> Signed-off-by: Ricardo Neri <ricardo.neri-calderon at linux.intel.com>
> ---
> src/acpi/bert/bert.c | 29 +++++++++++++++++++++++------
> 1 file changed, 23 insertions(+), 6 deletions(-)
>
> diff --git a/src/acpi/bert/bert.c b/src/acpi/bert/bert.c
> index 19ce608..3dc48b6 100644
> --- a/src/acpi/bert/bert.c
> +++ b/src/acpi/bert/bert.c
> @@ -126,12 +126,29 @@ static int bert_test1(fwts_framework *fw)
> }
> if (region->raw_data_offset <
> sizeof(fwts_acpi_table_boot_error_region) + region->data_length) {
> - fwts_failed(fw, LOG_LEVEL_HIGH,
> - "BERTBootErrorRegionRawDataOffset",
> - "BERT Boot Error Region Raw Data Offset %" PRIu32
> - " is smaller than end of the data region",
> - region->raw_data_offset);
> - passed = false;
> + if (region->raw_data_length) {
> + fwts_failed(fw, LOG_LEVEL_HIGH,
> + "BERTBootErrorRegionRawDataOffset",
> + "BERT Boot Error Region Raw Data Offset %" PRIu32
> + " is smaller than end of the data region and"
> + " BERT Boot Error Region Raw Data Length %" PRIu32
> + " is non-zero.",
> + region->raw_data_offset,
> + region->raw_data_length);
> + passed = false;
> + } else {
> + fwts_warning(fw, "BERT Boot Error Region Raw Data Offset %"
> + PRIu32 " is smaller than end of the data"
> + "region. BERT Boot Error Region Data Lenght "
> + "is zero.",
> + region->raw_data_offset);
> + fwts_advice(fw,
> + "If there is raw data in the BERT Boot Error Region, "
> + "Raw Data Offset must be larger than the end of the "
> + "data region if there is raw data. However, since "
> + "BERT Boot Error Region Raw Data Lenght is zero, "
> + "this may mean that there is no raw data.");
> + }
> }
> if (region->raw_data_length + region->raw_data_offset > bert->boot_error_region_length) {
> fwts_failed(fw, LOG_LEVEL_HIGH,
>
Thanks Ricardo.
Acked-by: Colin Ian King <colin.king at canonical.com>
More information about the fwts-devel
mailing list