From 715b71a2e46e1fbcb0f58426c54ae0789d938d8e Mon Sep 17 00:00:00 2001 From: eabdullin Date: Thu, 4 Apr 2024 07:20:33 +0000 Subject: [PATCH] import CS ppc64-diag-2.7.9-3.el9 --- ...ght-path-diagnostics-for-RTAS-events.patch | 63 ++++++++ ...7.9-moving-trim_trail_space-function.patch | 136 ++++++++++++++++++ ...rim_trail_space-in-event_fru_callout.patch | 37 +++++ SPECS/ppc64-diag.spec | 9 +- 4 files changed, 244 insertions(+), 1 deletion(-) create mode 100644 SOURCES/ppc64-diag-2.7.9-enable-light-path-diagnostics-for-RTAS-events.patch create mode 100644 SOURCES/ppc64-diag-2.7.9-moving-trim_trail_space-function.patch create mode 100644 SOURCES/ppc64-diag-2.7.9-utilize-trim_trail_space-in-event_fru_callout.patch diff --git a/SOURCES/ppc64-diag-2.7.9-enable-light-path-diagnostics-for-RTAS-events.patch b/SOURCES/ppc64-diag-2.7.9-enable-light-path-diagnostics-for-RTAS-events.patch new file mode 100644 index 0000000..67d843f --- /dev/null +++ b/SOURCES/ppc64-diag-2.7.9-enable-light-path-diagnostics-for-RTAS-events.patch @@ -0,0 +1,63 @@ +commit 0fa486dbe800bea05c81fc33eee197873573fefb +Author: Sathvika Vasireddy +Date: Fri Sep 8 12:35:14 2023 +0530 + + ppc64-diag/lp_diag: Enable light path diagnostics for RTAS events + + Currently, Light Path Diagnostics support is enabled only for OS and + Enclosure type events. Enable light path diagnostics support for RTAS + type events by turning on only the high priority FRU callouts. + + Signed-off-by: Sathvika Vasireddy + Signed-off-by: Mahesh Salgaonkar + +diff --git a/lpd/lp_diag.c b/lpd/lp_diag.c +index e6f5d3c..e67db02 100644 +--- a/lpd/lp_diag.c ++++ b/lpd/lp_diag.c +@@ -37,6 +37,8 @@ + #include "lp_util.h" + #include "utils.h" + ++static int rtas_event; ++ + /* FRU callout priority as defined in PAPR+ + * + * Note: Order of the priority is important! +@@ -173,8 +175,10 @@ service_event_supported(struct sl_event *event) + return 0; + } + break; +- case SL_TYPE_BMC: + case SL_TYPE_RTAS: ++ rtas_event = 1; ++ break; ++ case SL_TYPE_BMC: + case SL_TYPE_BASIC: + default: + return 0; +@@ -446,14 +450,20 @@ parse_service_event(int event_id) + attn_loc = &list[0]; + + if (operating_mode == LED_MODE_LIGHT_PATH) { +- if (event->callouts) ++ if (event->callouts) { + /* Run over FRU callout priority in order and + * enable fault indicator + */ +- for (i = 0; FRU_CALLOUT_PRIORITY[i]; i++) ++ if (!rtas_event) { ++ for (i = 0; FRU_CALLOUT_PRIORITY[i]; i++) ++ rc = event_fru_callout(event->callouts, list, ++ FRU_CALLOUT_PRIORITY[i], ++ &attn_on); ++ } else { + rc = event_fru_callout(event->callouts, list, +- FRU_CALLOUT_PRIORITY[i], +- &attn_on); ++ 'H', &attn_on); ++ } ++ } + else { + /* No callout list, enable check log indicator */ + indicator_log_write("Empty callout list"); diff --git a/SOURCES/ppc64-diag-2.7.9-moving-trim_trail_space-function.patch b/SOURCES/ppc64-diag-2.7.9-moving-trim_trail_space-function.patch new file mode 100644 index 0000000..53b3f40 --- /dev/null +++ b/SOURCES/ppc64-diag-2.7.9-moving-trim_trail_space-function.patch @@ -0,0 +1,136 @@ +commit c507319d1b5f0286d67e08a3598949ca4144f475 +Author: Sathvika Vasireddy +Date: Fri Sep 8 12:35:12 2023 +0530 + + ppc64-diag: Move trim_trail_space() function to common/utils.c + + Currently, trim_trail_space() function is used in diags/diag_nvme.c file + to be able to trim trailing white spaces from a given location code. Allow + code reusability by moving the trim_trail_space() function from + diags/diag_nvme.c to common/utils.c. + + Signed-off-by: Sathvika Vasireddy + Signed-off-by: Mahesh Salgaonkar + +diff --git a/common/utils.c b/common/utils.c +index 0312943..2349878 100644 +--- a/common/utils.c ++++ b/common/utils.c +@@ -24,9 +24,34 @@ + #include + #include + #include ++#include + + #include "utils.h" + ++/* trim_trail_space - Trim trailing white spaces from string ++ * @string - Null terminated string to remove white spaces from ++ * ++ * This function will alter the passed string by removing any trailing white spaces and null ++ * terminating it at that point. ++ */ ++void trim_trail_space(char *string) ++{ ++ char *end; ++ size_t length; ++ ++ if (string == NULL) ++ return; ++ ++ length = strlen(string); ++ if (length == 0) ++ return; ++ ++ end = string + length - 1; ++ while (end >= string && isspace(*end)) ++ end--; ++ *(end + 1) = '\0'; ++} ++ + static int process_child(char *argv[], int pipefd[]) + { + int nullfd; +diff --git a/common/utils.h b/common/utils.h +index ec2072d..2459b5b 100644 +--- a/common/utils.h ++++ b/common/utils.h +@@ -18,6 +18,7 @@ + #ifndef UTILS_H + #define UTILS_H + ++void trim_trail_space(char *string); + FILE *spopen(char **, pid_t *); + int spclose(FILE *, pid_t); + +diff --git a/diags/Makefile.am b/diags/Makefile.am +index 4ac81b8..dea0a79 100644 +--- a/diags/Makefile.am ++++ b/diags/Makefile.am +@@ -13,7 +13,8 @@ encl_led_h_files = diags/encl_led.h \ + $(diag_common_h_files) + + diag_nvme_h_files = diags/diag_nvme.h \ +- common/platform.h ++ common/platform.h \ ++ common/utils.h + + sbin_PROGRAMS += diags/diag_encl diags/encl_led diags/diag_nvme + +@@ -41,6 +42,7 @@ diags_encl_led_SOURCES = diags/encl_led.c \ + + diags_diag_nvme_SOURCES = diags/diag_nvme.c \ + common/platform.c \ ++ common/utils.c \ + $(diag_nvme_h_files) + diags_diag_nvme_LDADD = -lservicelog -lm + diags_diag_nvme_CFLAGS = $(AM_CFLAGS) -Wno-stringop-truncation +diff --git a/diags/diag_nvme.c b/diags/diag_nvme.c +index 2a78034..2606f2c 100644 +--- a/diags/diag_nvme.c ++++ b/diags/diag_nvme.c +@@ -27,6 +27,7 @@ + #include + #include "diag_nvme.h" + #include "platform.h" ++#include "utils.h" + + #define ITEM_DATA_LENGTH 255 + #define MIN_HOURS_ON 720 +@@ -71,7 +72,6 @@ static int raw_data_smart(unsigned char **raw_data, uint32_t *raw_data_len, stru + static int raw_data_vpd(unsigned char **raw_data, uint32_t *raw_data_len, struct nvme_ibm_vpd *vpd); + static int regex_controller(char *controller_name, char *device_name); + static void set_notify(struct notify *notify, struct dictionary *dict, int num_elements); +-static void trim_trail_space(char *string); + static long double uint128_to_long_double(uint8_t *data); + + int main(int argc, char *argv[]) { +@@ -1426,28 +1426,6 @@ extern void set_vpd_pcie_field(const char *keyword, const char *vpd_data, struct + strncpy(vpd->firmware_level, vpd_data, sizeof(vpd->firmware_level)); + } + +-/* trim_trail_space - Trim trailing white spaces from string +- * @string - Null terminated string to remove white spaces from +- * +- * This function will alter the passed string by removing any trailing white spaces and null +- * terminating it at that point. +- */ +-static void trim_trail_space(char *string) { +- char *end; +- size_t length; +- +- if (string == NULL) +- return; +- +- if ((length = strlen(string)) == 0) +- return; +- +- end = string + length - 1; +- while (end >= string && isspace(*end)) +- end--; +- *(end + 1) = '\0'; +-} +- + static long double uint128_to_long_double(uint8_t *data) { + int i; + long double value = 0; diff --git a/SOURCES/ppc64-diag-2.7.9-utilize-trim_trail_space-in-event_fru_callout.patch b/SOURCES/ppc64-diag-2.7.9-utilize-trim_trail_space-in-event_fru_callout.patch new file mode 100644 index 0000000..2b0692b --- /dev/null +++ b/SOURCES/ppc64-diag-2.7.9-utilize-trim_trail_space-in-event_fru_callout.patch @@ -0,0 +1,37 @@ +commit 476b0af7516b86c4d98cfa229fb0c6b856eea31d +Author: Sathvika Vasireddy +Date: Fri Sep 8 12:35:13 2023 +0530 + + ppc64-diag/lp_diag: Utilize trim_trail_space() function in event_fru_callout() + + Update the event_fru_callout() function to use the trim_trail_space() + function to be able to remove any trailing spaces from the location code. + This change aims to address an issue where the presence of trailing spaces + in the location code results in failure to find an indicator for the given + location code. Use trim_trail_space() on the location to ensure that the + device location code is properly compared with the indicator list. + + Signed-off-by: Sathvika Vasireddy + Signed-off-by: Mahesh Salgaonkar + +diff --git a/lpd/lp_diag.c b/lpd/lp_diag.c +index 988a021..e6f5d3c 100644 +--- a/lpd/lp_diag.c ++++ b/lpd/lp_diag.c +@@ -35,6 +35,7 @@ + #include "servicelog.h" + #include "indicator.h" + #include "lp_util.h" ++#include "utils.h" + + /* FRU callout priority as defined in PAPR+ + * +@@ -344,6 +345,8 @@ event_fru_callout(struct sl_callout *callouts, struct loc_code *list, + /* get FRUs nearest fault indicator */ + strncpy(location, callout->location, LOCATION_LENGTH); + location[LOCATION_LENGTH - 1] = '\0'; ++ trim_trail_space(location); ++ + loc_led = get_fru_indicator(list, location, &truncated); + if (!loc_led) { /* No indicator found for the given loc code */ + *attn_on = 1; diff --git a/SPECS/ppc64-diag.spec b/SPECS/ppc64-diag.spec index a3a1c72..08f2f9b 100644 --- a/SPECS/ppc64-diag.spec +++ b/SPECS/ppc64-diag.spec @@ -1,6 +1,6 @@ Name: ppc64-diag Version: 2.7.9 -Release: 2%{?dist} +Release: 3%{?dist} Summary: PowerLinux Platform Diagnostics URL: https://github.com/power-ras/%{name} License: GPLv2 @@ -37,6 +37,9 @@ Patch0: ppc64-diag-2.7.9-fedora.patch # upstream fixes # rtas_errd: Handle multiple platform dumps Patch10: ppc64-diag-2.7.9-handle_multiple_platform_dumps.patch +Patch11: ppc64-diag-2.7.9-moving-trim_trail_space-function.patch +Patch12: ppc64-diag-2.7.9-utilize-trim_trail_space-in-event_fru_callout.patch +Patch13: ppc64-diag-2.7.9-enable-light-path-diagnostics-for-RTAS-events.patch %description This package contains various diagnostic tools for PowerLinux. @@ -173,6 +176,10 @@ if [ "$1" = "0" ]; then # last uninstall fi %changelog +* Sun Dec 10 2023 Than Ngo - 2.7.9-3 +- Enable light path diagnostics for RTAS events + Resolves: RHEL-11478 + * Thu Jul 20 2023 Than Ngo - 2.7.9-2 - Resolves: #2177948, handle multiple platform dumps