[PATCH] [V2] devicetree: dt_sysinfo: Reference compatible whitespace
Deb McLemore
debmc at linux.vnet.ibm.com
Tue Sep 20 13:26:07 UTC 2016
Remove whitespace from the model property when checking the Reference
compatibility feature.
Signed-off-by: Deb McLemore <debmc at linux.vnet.ibm.com>
---
src/devicetree/dt_sysinfo/dt_sysinfo.c | 57 +++++++++++++++++++++++++++++-----
src/lib/include/fwts_devicetree.h | 3 ++
src/lib/src/fwts_devicetree.c | 30 ++++++++++++++++++
3 files changed, 82 insertions(+), 8 deletions(-)
diff --git a/src/devicetree/dt_sysinfo/dt_sysinfo.c b/src/devicetree/dt_sysinfo/dt_sysinfo.c
index 0565979..b180c3e 100644
--- a/src/devicetree/dt_sysinfo/dt_sysinfo.c
+++ b/src/devicetree/dt_sysinfo/dt_sysinfo.c
@@ -29,13 +29,13 @@
static const char op_powernv[] = "ibm,powernv";
static const char *firestone_models[] = {
- "8335-GTA ",
- "8335-GCA ",
- "8335-GTX ",
+ "8335-GTA",
+ "8335-GCA",
+ "8335-GTX",
};
static const char *garrison_models[] = {
- "8335-GTB ",
+ "8335-GTB",
};
static struct reference_platform {
@@ -186,6 +186,7 @@ static int dt_sysinfo_check_ref_plat_compatible(fwts_framework *fw)
return FWTS_ERROR;
} else {
const char *model_buf, *compat_buf;
+ char *orig_model_buf, *tmp_model_buf;
compat_buf = fdt_getprop(fw->fdt, node,
"compatible", &compat_len);
@@ -194,16 +195,54 @@ static int dt_sysinfo_check_ref_plat_compatible(fwts_framework *fw)
if (!model_buf || !compat_buf) {
fwts_failed(fw,LOG_LEVEL_HIGH,
- "DTSysinfoPropertyMissing",
- "can't read properties for OpenPOWER"
+ "DTSysInfoCheck:",
+ " Cannot read the properties for OpenPOWER"
" Reference Compatible check");
return FWTS_ERROR;
}
+ /* need modifiable memory */
+ /* save original ptr to free */
+ tmp_model_buf = orig_model_buf = strdup(model_buf);
+ if (!tmp_model_buf) {
+ fwts_failed(fw, LOG_LEVEL_HIGH,
+ "DTSysInfoCheck:",
+ " Unable to get memory for model"
+ " compare for OpenPOWER"
+ " Reference Compatible check");
+ return FWTS_ERROR;
+ }
+
+ tmp_model_buf = hidewhitespace(tmp_model_buf);
+ if (!(strcmp(model_buf, tmp_model_buf) == 0)) {
+ fwts_warning(fw,
+ "DTSysInfoCheck:"
+ " See further advice in the log.\n");
+ fwts_log_nl(fw);
+ fwts_log_info_verbatim(fw,
+ "DTSysInfoCheck:"
+ " Check the root \"model\" property"
+ " from the device tree %s \"%s\".\n",
+ DT_FS_PATH,
+ model_buf);
+ fwts_advice(fw,
+ "Check the root \"model\" property"
+ " from the device tree %s, "
+ "there are whitespace inconsistentencies"
+ " between the \"model\" property and "
+ " the trimmed value of \"%s\", report"
+ " this as a possible bug."
+ " Run \"hexdump -C model\""
+ " from the \"%s\" directory to view"
+ " the raw contents of the property.",
+ DT_FS_PATH,
+ tmp_model_buf,
+ DT_FS_PATH);
+ }
if (machine_matches_reference_model(fw,
compat_buf,
compat_len,
- model_buf)) {
+ tmp_model_buf)) {
fwts_passed(fw, "OpenPOWER Reference "
"Compatible passed");
} else {
@@ -214,9 +253,11 @@ static int dt_sysinfo_check_ref_plat_compatible(fwts_framework *fw)
/* adding verbatim to show proper string */
fwts_log_info_verbatim(fw,
"Unable to find an OpenPOWER reference"
- " match for \"%s\"", model_buf);
+ " match for \"%s\"", tmp_model_buf);
+ free(orig_model_buf);
return FWTS_ERROR;
}
+ free(orig_model_buf);
}
return FWTS_OK;
diff --git a/src/lib/include/fwts_devicetree.h b/src/lib/include/fwts_devicetree.h
index a0ea9d0..df03207 100644
--- a/src/lib/include/fwts_devicetree.h
+++ b/src/lib/include/fwts_devicetree.h
@@ -37,6 +37,7 @@
#define DT_PROPERTY_OPAL_MANUFACTURER_ID "manufacturer-id"
#define DT_PROPERTY_OPAL_STATUS "status"
#define DT_PROPERTY_OPAL_VENDOR "vendor"
+#define DT_PROPERTY_OPAL_BOARD_INFO "board-info"
#if FWTS_HAS_DEVICETREE
@@ -55,4 +56,6 @@ int check_property_printable(fwts_framework *fw,
const char *buf,
size_t len);
+char *hidewhitespace(char *name);
+
#endif
diff --git a/src/lib/src/fwts_devicetree.c b/src/lib/src/fwts_devicetree.c
index d7facb0..7fd0210 100644
--- a/src/lib/src/fwts_devicetree.c
+++ b/src/lib/src/fwts_devicetree.c
@@ -109,5 +109,35 @@ int check_property_printable(fwts_framework *fw,
name,
buf);
+ fwts_passed(fw,
+ "DTPrintableProperty \"%s\" passed",
+ name);
+
return FWTS_OK;
}
+
+/* hidewhitespace (char *name) */
+/* */
+/* Caller must pass in modifiable memory for name */
+/* Caller must save original memory ptr to free */
+/* the original allocated memory if needed */
+
+char *hidewhitespace(char *name)
+{
+ char *end;
+
+ while (isspace(*name))
+ name++;
+
+ if (!*name)
+ return name;
+
+ end = name + strlen(name) - 1;
+ while (end > name && isspace(*end))
+ end--;
+
+ *(end + 1) = '\0';
+
+ return name;
+
+}
--
2.7.4
More information about the fwts-devel
mailing list