[PATCH 3/3] dmi_decode: Add some more advice text
Keng-Yu Lin
kengyu at canonical.com
Mon Jul 9 08:04:00 UTC 2012
On Fri, Jul 6, 2012 at 10:30 PM, Colin King <colin.king at canonical.com> wrote:
> From: Colin Ian King <colin.king at canonical.com>
>
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
> src/dmi/dmi_decode/dmi_decode.c | 42 +++++++++++++++++++++++++++++++++++++--
> 1 file changed, 40 insertions(+), 2 deletions(-)
>
> diff --git a/src/dmi/dmi_decode/dmi_decode.c b/src/dmi/dmi_decode/dmi_decode.c
> index 67dfea2..940ac35 100644
> --- a/src/dmi/dmi_decode/dmi_decode.c
> +++ b/src/dmi/dmi_decode/dmi_decode.c
> @@ -162,6 +162,17 @@ static uint16_t dmi_remap_version(fwts_framework *fw, uint16_t old)
> return old;
> }
>
> +static void dmi_out_of_range_advice(fwts_framework *fw)
> +{
> + fwts_advice(fw,
> + "A value that is out of range is incorrect and not conforming to "
> + "the SMBIOS specification. It is possible that it "
> + "won't be handled correctly by the operating system or by tools "
> + "like dmidecode. For some fields this out of range setings "
> + "could lead to the operating system to ignore or misunderstand this "
> + "particular SMBIOS configuration.");
> +}
> +
> static void dmi_min_max_uint8_check(fwts_framework *fw,
> const char *table,
> uint32_t addr,
> @@ -172,12 +183,14 @@ static void dmi_min_max_uint8_check(fwts_framework *fw,
> uint8_t max)
> {
> uint8_t val = hdr->data[offset];
> - if ((val < min) || (val > max))
> + if ((val < min) || (val > max)) {
> fwts_failed(fw, LOG_LEVEL_HIGH,
> DMI_VALUE_OUT_OF_RANGE,
> "Out of range value 0x%2.2x (range allowed 0x%2.2x..0x%2.2x) "
> "while accessing entry '%s' @ 0x%8.8x, field '%s', offset 0x%2.2x",
> val, min, max, table, addr, field, offset);
> + dmi_out_of_range_advice(fw);
> + }
> }
>
> static void dmi_min_max_mask_uint8_check(fwts_framework *fw,
> @@ -193,11 +206,13 @@ static void dmi_min_max_mask_uint8_check(fwts_framework *fw,
> {
> uint8_t val = (hdr->data[offset] >> shift) & mask;
>
> - if ((val < min) || (val > max))
> + if ((val < min) || (val > max)) {
> fwts_failed(fw, LOG_LEVEL_HIGH, DMI_VALUE_OUT_OF_RANGE,
> "Out of range value 0x%2.2x (range allowed 0x%2.2x..0x%2.2x) "
> "while accessing entry '%s' @ 0x%8.8x, field '%s', offset 0x%2.2x",
> val, min, max, table, addr, field, offset);
> + dmi_out_of_range_advice(fw);
> + }
> }
>
> static void dmi_str_check_index(fwts_framework *fw,
> @@ -226,6 +241,11 @@ static void dmi_str_check_index(fwts_framework *fw,
> "Out of range string index 0x%2.2x while accessing entry '%s' "
> "@ 0x%8.8x, field '%s', offset 0x%2.2x",
> index, table, addr, field, offset);
> + fwts_advice(fw,
> + "DMI strings are stored in a manner that uses a special "
> + "index to fetch the Nth string from the data. For this "
> + "particular DMI string the index given is not in range "
> + "which means this particular entry is broken.");
> return;
> }
>
> @@ -247,6 +267,13 @@ static void dmi_str_check_index(fwts_framework *fw,
> "offset 0x%2.2x has a default value '%s' and probably has "
> "not been updated by the BIOS vendor.",
> index, table, addr, field, offset, data);
> + fwts_advice(fw,
> + "The DMI table contains data which is clearly been "
> + "left in a default setting and not been configured "
> + "for this machine. While this is not critical it does "
> + "mean that somebody has probably forgotten to define this "
> + "field and it basically means this field is effectively "
> + "useless.");
> }
> }
> }
> @@ -281,6 +308,13 @@ static void dmi_uuid_check(fwts_framework *fw,
> "offset 0x%2.2x has a default value '%s' and probably has "
> "not been updated by the BIOS vendor.",
> table, addr, field, offset, guid_str);
> + fwts_advice(fw,
> + "The DMI table contains a UUID which is clearly been "
> + "left in a default setting and not been configured "
> + "for this machine. While this is not critical it does "
> + "mean that somebody has probably forgotten to define this "
> + "field and it basically means this field is effectively "
> + "useless.");
> }
> }
> }
> @@ -377,6 +411,10 @@ static void dmi_decode_entry(fwts_framework *fw,
> "Incorrect Chassis Type "
> "SMBIOS Type 3 reports 0x%x",
> data[5]);
> + fwts_advice(fw,
> + "The Chassis Type in the ACPI FADT is out of range "
> + "and hence we cannot identify the preferred power "
> + "management profile for this machine.");
> break;
> }
>
> --
> 1.7.10.4
>
Acked-by: Keng-Yu Lin <kengyu at canonical.com>
More information about the fwts-devel
mailing list