Message ID | 1489105799-8570-1-git-send-email-debmc@linux.vnet.ibm.com |
---|---|
State | Accepted |
Headers | show |
On 2017-03-10 08:29 AM, Deb McLemore wrote: > This patch checks if the device tree node for the dimm has a > status of okay which indicates the dimm slot is populated. > > If the dimm is populated and status is okay then further properties > will be queried and verified. > > Signed-off-by: Deb McLemore <debmc@linux.vnet.ibm.com> > --- > src/lib/include/fwts_devicetree.h | 5 ++++ > src/lib/src/fwts_devicetree.c | 30 ++++++++++++++++++++ > src/opal/mem_info.c | 59 +++++++++++++++++++++++++++------------ > 3 files changed, 76 insertions(+), 18 deletions(-) > > diff --git a/src/lib/include/fwts_devicetree.h b/src/lib/include/fwts_devicetree.h > index b2669c5..372bdda 100644 > --- a/src/lib/include/fwts_devicetree.h > +++ b/src/lib/include/fwts_devicetree.h > @@ -51,6 +51,11 @@ static inline int fwts_devicetree_read(fwts_framework *fwts > } > #endif > > +bool check_status_property_okay(fwts_framework *fw, > + const char *my_path, > + const char *my_prop_string, > + const char *property); > + > int check_property_printable(fwts_framework *fw, > const char *name, > const char *buf, > diff --git a/src/lib/src/fwts_devicetree.c b/src/lib/src/fwts_devicetree.c > index 923f8fe..bf5686a 100644 > --- a/src/lib/src/fwts_devicetree.c > +++ b/src/lib/src/fwts_devicetree.c > @@ -24,6 +24,8 @@ > > #include "fwts.h" > > +#include <libfdt.h> > + > int fwts_devicetree_read(fwts_framework *fwts) > { > char *command, *data = NULL; > @@ -64,6 +66,34 @@ int fwts_devicetree_read(fwts_framework *fwts) > return FWTS_OK; > } > > +bool check_status_property_okay(fwts_framework *fw, > + const char *my_path, > + const char *my_prop_string, > + const char *property) > +{ > + char *prop_string = strstr(my_path, my_prop_string); > + > + if (prop_string) { > + int prop_len; > + int node = fdt_path_offset(fw->fdt, prop_string); > + > + if (node >= 0) { > + const char *prop_buf; > + > + prop_buf = fdt_getprop(fw->fdt, node, > + property, > + &prop_len); > + if (prop_len > 0) { > + if ((!strcmp(prop_buf, "okay")) || > + (!strcmp(prop_buf, "ok"))) { > + return true; > + } > + } > + } > + } > + return false; > +} > + > int check_property_printable(fwts_framework *fw, > const char *name, > const char *buf, > diff --git a/src/opal/mem_info.c b/src/opal/mem_info.c > index 7bda7bc..2024080 100644 > --- a/src/opal/mem_info.c > +++ b/src/opal/mem_info.c > @@ -27,6 +27,8 @@ > > #include <libfdt.h> > > +bool found_dimm = false; > + > static int get_dimm_property(fwts_framework *fw, > char *my_path, > bool hex, > @@ -185,30 +187,39 @@ static int process_dimm(fwts_framework *fw, > free(namelist[i]); > continue; > } > - if (get_dimm_property(fw, my_path, false, > - DT_PROPERTY_OPAL_SLOT_LOC)) { > - failures ++; > - } > > - if (get_dimm_property(fw, my_path, false, > - DT_PROPERTY_OPAL_PART_NUM)) { > - failures ++; > - } > + char my_prop_string[15]; > + strcpy(my_prop_string, "/memory-buffer"); > + if (check_status_property_okay(fw, my_path, > + my_prop_string, > + DT_PROPERTY_OPAL_STATUS)) { > + found_dimm = true; > + if (get_dimm_property(fw, my_path, false, > + DT_PROPERTY_OPAL_STATUS)) { > + failures ++; > + } > > - if (get_dimm_property(fw, my_path, false, > - DT_PROPERTY_OPAL_SERIAL_NUM)) { > - failures ++; > - } > + if (get_dimm_property(fw, my_path, false, > + DT_PROPERTY_OPAL_SLOT_LOC)) { > + failures ++; > + } > > - if (get_dimm_property(fw, my_path, true, > + if (get_dimm_property(fw, my_path, false, > + DT_PROPERTY_OPAL_PART_NUM)) { > + failures ++; > + } > + > + if (get_dimm_property(fw, my_path, false, > + DT_PROPERTY_OPAL_SERIAL_NUM)) { > + failures ++; > + } > + > + if (get_dimm_property(fw, my_path, true, > DT_PROPERTY_OPAL_MANUFACTURER_ID)) { > - failures ++; > + failures ++; > + } > } > > - if (get_dimm_property(fw, my_path, false, > - DT_PROPERTY_OPAL_STATUS)) { > - failures ++; > - } > free(my_buffer); > free(namelist[i]); > } > @@ -401,6 +412,18 @@ static int get_linux_mem_devices(fwts_framework *fw) > DT_FS_PATH); > } > > + if (!found_dimm) { > + failures ++; > + fwts_log_nl(fw); > + fwts_failed(fw, LOG_LEVEL_CRITICAL, > + "OPAL MEM Info", > + "No MEM DIMM devices (memory-buffer) were found" > + " in \"%s\" with a status of \"okay\" or \"ok\"." > + " This is unexpected so please check your" > + " system setup for issues.", > + DT_FS_PATH); > + } > + > if (failures) { > return FWTS_ERROR; > } else { > Acked-by: Alex Hung <alex.hung@canonical.com>
On 10/03/17 00:29, Deb McLemore wrote: > This patch checks if the device tree node for the dimm has a > status of okay which indicates the dimm slot is populated. > > If the dimm is populated and status is okay then further properties > will be queried and verified. > > Signed-off-by: Deb McLemore <debmc@linux.vnet.ibm.com> > --- > src/lib/include/fwts_devicetree.h | 5 ++++ > src/lib/src/fwts_devicetree.c | 30 ++++++++++++++++++++ > src/opal/mem_info.c | 59 +++++++++++++++++++++++++++------------ > 3 files changed, 76 insertions(+), 18 deletions(-) > > diff --git a/src/lib/include/fwts_devicetree.h b/src/lib/include/fwts_devicetree.h > index b2669c5..372bdda 100644 > --- a/src/lib/include/fwts_devicetree.h > +++ b/src/lib/include/fwts_devicetree.h > @@ -51,6 +51,11 @@ static inline int fwts_devicetree_read(fwts_framework *fwts > } > #endif > > +bool check_status_property_okay(fwts_framework *fw, > + const char *my_path, > + const char *my_prop_string, > + const char *property); > + > int check_property_printable(fwts_framework *fw, > const char *name, > const char *buf, > diff --git a/src/lib/src/fwts_devicetree.c b/src/lib/src/fwts_devicetree.c > index 923f8fe..bf5686a 100644 > --- a/src/lib/src/fwts_devicetree.c > +++ b/src/lib/src/fwts_devicetree.c > @@ -24,6 +24,8 @@ > > #include "fwts.h" > > +#include <libfdt.h> > + > int fwts_devicetree_read(fwts_framework *fwts) > { > char *command, *data = NULL; > @@ -64,6 +66,34 @@ int fwts_devicetree_read(fwts_framework *fwts) > return FWTS_OK; > } > > +bool check_status_property_okay(fwts_framework *fw, > + const char *my_path, > + const char *my_prop_string, > + const char *property) > +{ > + char *prop_string = strstr(my_path, my_prop_string); > + > + if (prop_string) { > + int prop_len; > + int node = fdt_path_offset(fw->fdt, prop_string); > + > + if (node >= 0) { > + const char *prop_buf; > + > + prop_buf = fdt_getprop(fw->fdt, node, > + property, > + &prop_len); > + if (prop_len > 0) { > + if ((!strcmp(prop_buf, "okay")) || > + (!strcmp(prop_buf, "ok"))) { > + return true; > + } > + } > + } > + } > + return false; > +} > + > int check_property_printable(fwts_framework *fw, > const char *name, > const char *buf, > diff --git a/src/opal/mem_info.c b/src/opal/mem_info.c > index 7bda7bc..2024080 100644 > --- a/src/opal/mem_info.c > +++ b/src/opal/mem_info.c > @@ -27,6 +27,8 @@ > > #include <libfdt.h> > > +bool found_dimm = false; > + > static int get_dimm_property(fwts_framework *fw, > char *my_path, > bool hex, > @@ -185,30 +187,39 @@ static int process_dimm(fwts_framework *fw, > free(namelist[i]); > continue; > } > - if (get_dimm_property(fw, my_path, false, > - DT_PROPERTY_OPAL_SLOT_LOC)) { > - failures ++; > - } > > - if (get_dimm_property(fw, my_path, false, > - DT_PROPERTY_OPAL_PART_NUM)) { > - failures ++; > - } > + char my_prop_string[15]; > + strcpy(my_prop_string, "/memory-buffer"); > + if (check_status_property_okay(fw, my_path, > + my_prop_string, > + DT_PROPERTY_OPAL_STATUS)) { > + found_dimm = true; > + if (get_dimm_property(fw, my_path, false, > + DT_PROPERTY_OPAL_STATUS)) { > + failures ++; > + } > > - if (get_dimm_property(fw, my_path, false, > - DT_PROPERTY_OPAL_SERIAL_NUM)) { > - failures ++; > - } > + if (get_dimm_property(fw, my_path, false, > + DT_PROPERTY_OPAL_SLOT_LOC)) { > + failures ++; > + } > > - if (get_dimm_property(fw, my_path, true, > + if (get_dimm_property(fw, my_path, false, > + DT_PROPERTY_OPAL_PART_NUM)) { > + failures ++; > + } > + > + if (get_dimm_property(fw, my_path, false, > + DT_PROPERTY_OPAL_SERIAL_NUM)) { > + failures ++; > + } > + > + if (get_dimm_property(fw, my_path, true, > DT_PROPERTY_OPAL_MANUFACTURER_ID)) { > - failures ++; > + failures ++; > + } > } > > - if (get_dimm_property(fw, my_path, false, > - DT_PROPERTY_OPAL_STATUS)) { > - failures ++; > - } > free(my_buffer); > free(namelist[i]); > } > @@ -401,6 +412,18 @@ static int get_linux_mem_devices(fwts_framework *fw) > DT_FS_PATH); > } > > + if (!found_dimm) { > + failures ++; > + fwts_log_nl(fw); > + fwts_failed(fw, LOG_LEVEL_CRITICAL, > + "OPAL MEM Info", > + "No MEM DIMM devices (memory-buffer) were found" > + " in \"%s\" with a status of \"okay\" or \"ok\"." > + " This is unexpected so please check your" > + " system setup for issues.", > + DT_FS_PATH); > + } > + > if (failures) { > return FWTS_ERROR; > } else { > Thanks! Acked-by: Colin Ian King <colin.king@canonical.com>
diff --git a/src/lib/include/fwts_devicetree.h b/src/lib/include/fwts_devicetree.h index b2669c5..372bdda 100644 --- a/src/lib/include/fwts_devicetree.h +++ b/src/lib/include/fwts_devicetree.h @@ -51,6 +51,11 @@ static inline int fwts_devicetree_read(fwts_framework *fwts } #endif +bool check_status_property_okay(fwts_framework *fw, + const char *my_path, + const char *my_prop_string, + const char *property); + int check_property_printable(fwts_framework *fw, const char *name, const char *buf, diff --git a/src/lib/src/fwts_devicetree.c b/src/lib/src/fwts_devicetree.c index 923f8fe..bf5686a 100644 --- a/src/lib/src/fwts_devicetree.c +++ b/src/lib/src/fwts_devicetree.c @@ -24,6 +24,8 @@ #include "fwts.h" +#include <libfdt.h> + int fwts_devicetree_read(fwts_framework *fwts) { char *command, *data = NULL; @@ -64,6 +66,34 @@ int fwts_devicetree_read(fwts_framework *fwts) return FWTS_OK; } +bool check_status_property_okay(fwts_framework *fw, + const char *my_path, + const char *my_prop_string, + const char *property) +{ + char *prop_string = strstr(my_path, my_prop_string); + + if (prop_string) { + int prop_len; + int node = fdt_path_offset(fw->fdt, prop_string); + + if (node >= 0) { + const char *prop_buf; + + prop_buf = fdt_getprop(fw->fdt, node, + property, + &prop_len); + if (prop_len > 0) { + if ((!strcmp(prop_buf, "okay")) || + (!strcmp(prop_buf, "ok"))) { + return true; + } + } + } + } + return false; +} + int check_property_printable(fwts_framework *fw, const char *name, const char *buf, diff --git a/src/opal/mem_info.c b/src/opal/mem_info.c index 7bda7bc..2024080 100644 --- a/src/opal/mem_info.c +++ b/src/opal/mem_info.c @@ -27,6 +27,8 @@ #include <libfdt.h> +bool found_dimm = false; + static int get_dimm_property(fwts_framework *fw, char *my_path, bool hex, @@ -185,30 +187,39 @@ static int process_dimm(fwts_framework *fw, free(namelist[i]); continue; } - if (get_dimm_property(fw, my_path, false, - DT_PROPERTY_OPAL_SLOT_LOC)) { - failures ++; - } - if (get_dimm_property(fw, my_path, false, - DT_PROPERTY_OPAL_PART_NUM)) { - failures ++; - } + char my_prop_string[15]; + strcpy(my_prop_string, "/memory-buffer"); + if (check_status_property_okay(fw, my_path, + my_prop_string, + DT_PROPERTY_OPAL_STATUS)) { + found_dimm = true; + if (get_dimm_property(fw, my_path, false, + DT_PROPERTY_OPAL_STATUS)) { + failures ++; + } - if (get_dimm_property(fw, my_path, false, - DT_PROPERTY_OPAL_SERIAL_NUM)) { - failures ++; - } + if (get_dimm_property(fw, my_path, false, + DT_PROPERTY_OPAL_SLOT_LOC)) { + failures ++; + } - if (get_dimm_property(fw, my_path, true, + if (get_dimm_property(fw, my_path, false, + DT_PROPERTY_OPAL_PART_NUM)) { + failures ++; + } + + if (get_dimm_property(fw, my_path, false, + DT_PROPERTY_OPAL_SERIAL_NUM)) { + failures ++; + } + + if (get_dimm_property(fw, my_path, true, DT_PROPERTY_OPAL_MANUFACTURER_ID)) { - failures ++; + failures ++; + } } - if (get_dimm_property(fw, my_path, false, - DT_PROPERTY_OPAL_STATUS)) { - failures ++; - } free(my_buffer); free(namelist[i]); } @@ -401,6 +412,18 @@ static int get_linux_mem_devices(fwts_framework *fw) DT_FS_PATH); } + if (!found_dimm) { + failures ++; + fwts_log_nl(fw); + fwts_failed(fw, LOG_LEVEL_CRITICAL, + "OPAL MEM Info", + "No MEM DIMM devices (memory-buffer) were found" + " in \"%s\" with a status of \"okay\" or \"ok\"." + " This is unexpected so please check your" + " system setup for issues.", + DT_FS_PATH); + } + if (failures) { return FWTS_ERROR; } else {
This patch checks if the device tree node for the dimm has a status of okay which indicates the dimm slot is populated. If the dimm is populated and status is okay then further properties will be queried and verified. Signed-off-by: Deb McLemore <debmc@linux.vnet.ibm.com> --- src/lib/include/fwts_devicetree.h | 5 ++++ src/lib/src/fwts_devicetree.c | 30 ++++++++++++++++++++ src/opal/mem_info.c | 59 +++++++++++++++++++++++++++------------ 3 files changed, 76 insertions(+), 18 deletions(-)