diff --git a/.gitignore b/.gitignore index ac7b48b..b4c9d68 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ /ppc64-diag-2.7.7.tar.gz /ppc64-diag-2.7.8.tar.gz /ppc64-diag-2.7.9.tar.gz +/ppc64-diag-2.7.11.tar.gz diff --git a/ppc64-diag-2.7.9-call_home-fail-on-nvmf-device.patch b/ppc64-diag-2.7.9-call_home-fail-on-nvmf-device.patch deleted file mode 100644 index d3e3006..0000000 --- a/ppc64-diag-2.7.9-call_home-fail-on-nvmf-device.patch +++ /dev/null @@ -1,71 +0,0 @@ -commit db0c6d7974d7f8909878384d77ec02457759d6df -Author: Nilay Shroff -Date: Tue Jan 16 13:55:03 2024 +0530 - - diags/diag_nvme: call_home command fails on nvmf drive - - The diag_nvme command needs to retrieve the VPD log page from NVMe for - filling in the product data while generating the call-home event. - However, call-home feature is supported for directly attached NVMe - module. In the current diag_nvme implementation, if user doesn't - provide NVMe device name for diagnostics then it(diag_nvme) loops - through each NVMe moudle (directly connected to the system/LPAR as - well as discovered over fabrics) and attempt retrieving the SMART log - page as well as VPD page. Unfortunately, diag_nvme fails to retrieve - the VPD page for NVMe connected over fabrics and that causes the - diag_nvme to print "not-so-nice" failure messages on console. - - Henec fixed the diag_nvme code so that for call-home event reporting, - it skips the NVMe which is connected over fabrics and prints a - "nice-message" informing the user that it's skipping diagnosting for - NVMe module connected over fabrics. In a nutshell, with this fix now - diag_nvme would only diagnose the NVMe module which is directtly - attached (over PCIe) to the system. - - Signed-off-by: Nilay Shroff - -diff --git a/diags/diag_nvme.c b/diags/diag_nvme.c -index c1c0a20..e86786c 100644 ---- a/diags/diag_nvme.c -+++ b/diags/diag_nvme.c -@@ -375,9 +375,40 @@ static int diagnose_nvme(char *device_name, struct notify *notify, char *file_pa - char endurance_s[sizeof(vpd.endurance) + 1], capacity_s[sizeof(vpd.capacity)+1]; - uint64_t event_id; - uint8_t severity; -+ FILE *fp; -+ char tr_file_path[PATH_MAX]; - uint32_t raw_data_len = 0; - unsigned char *raw_data = NULL; - -+ /* -+ * Skip diag test if NVMe is connected over fabric -+ */ -+ snprintf(tr_file_path, sizeof(tr_file_path), -+ NVME_SYS_PATH"/%s/%s", device_name, "transport"); -+ fp = fopen(tr_file_path, "r"); -+ if (fp) { -+ char buf[12]; -+ int n = fread(buf, 1, sizeof(buf), fp); -+ -+ if (n) { -+ /* -+ * If NVMe transport is anything but pcie then skip the diag test -+ */ -+ if (strncmp(buf, "pcie", 4) != 0) { -+ fprintf(stdout, "Skipping diagnostics for nvmf : %s\n", -+ device_name); -+ fclose(fp); -+ return 0; -+ } -+ } -+ fclose(fp); -+ } else { -+ fprintf(stderr, "Skipping diagnostics for %s:\n" -+ "Unable to find the nvme transport type\n", -+ device_name); -+ return -1; -+ } -+ - tmp_rc = regex_controller(controller_name, device_name); - if (tmp_rc != 0) - return -1; diff --git a/ppc64-diag-2.7.9-compiler-warnings.patch b/ppc64-diag-2.7.9-compiler-warnings.patch deleted file mode 100644 index 8a9933e..0000000 --- a/ppc64-diag-2.7.9-compiler-warnings.patch +++ /dev/null @@ -1,43 +0,0 @@ -diff --git a/lpd/usysident.c b/lpd/usysident.c -index 8fee736..11a512b 100644 ---- a/lpd/usysident.c -+++ b/lpd/usysident.c -@@ -429,7 +429,7 @@ retry: - * next elements in the list (which may match the device name); - * for this we need to retry, re-starting on the next element. - */ -- if (dvalue && current->devname && -+ if (dvalue && current->devname[0] != '\0' && - strncmp(dvalue, current->devname, DEV_LENGTH)) { - list_start = current->next; - goto retry; -diff --git a/opal_errd/extract_opal_dump.c b/opal_errd/extract_opal_dump.c -index b7f365f..656899d 100644 ---- a/opal_errd/extract_opal_dump.c -+++ b/opal_errd/extract_opal_dump.c -@@ -77,8 +77,10 @@ static void dump_get_file_name(char *buf, int bsize, char *dfile, - if (bsize >= DUMP_HDR_PREFIX_OFFSET + sizeof(uint16_t)) - *prefix_size = be16toh(*(uint16_t *)(buf + DUMP_HDR_PREFIX_OFFSET)); - -- if (bsize >= DUMP_HDR_FNAME_OFFSET + DUMP_MAX_FNAME_LEN) -- strncpy(dfile, buf + DUMP_HDR_FNAME_OFFSET, dfile_size); -+ if (bsize >= DUMP_HDR_FNAME_OFFSET + DUMP_MAX_FNAME_LEN) { -+ strncpy(dfile, buf + DUMP_HDR_FNAME_OFFSET, dfile_size - 1); -+ dfile[dfile_size - 1] = '\0'; -+ } - else - strncpy(dfile, "platform.dumpid.PARTIAL", dfile_size); - -diff --git a/rtas_errd/extract_platdump.c b/rtas_errd/extract_platdump.c -index 831e57e..50bac99 100644 ---- a/rtas_errd/extract_platdump.c -+++ b/rtas_errd/extract_platdump.c -@@ -220,7 +220,7 @@ extract_platform_dump(uint64_t dump_tag) - char filename[DUMP_MAX_FNAME_LEN + 1]; - char pathname[PATH_MAX]; - char dump_err[RTAS_ERROR_LOG_MAX]; -- char dumpid[5]; -+ char dumpid[5] = ""; - int out=-1, rc, librtas_rc, dump_complete=0, ret=0; - - msg("Dump tag: 0x%016LX", dump_tag); diff --git a/ppc64-diag-2.7.9-diag_encl-man-and-help-page.patch b/ppc64-diag-2.7.9-diag_encl-man-and-help-page.patch deleted file mode 100644 index c6b6cdd..0000000 --- a/ppc64-diag-2.7.9-diag_encl-man-and-help-page.patch +++ /dev/null @@ -1,72 +0,0 @@ -commit 565035cf98e97c7adda523221e109c676daf3430 -Author: Barnali Guha Thakurata -Date: Mon Jan 8 20:16:19 2024 +0530 - - diag_encl help output update - - This patch changes "scsi_enclosure" in the help output of diag_encl to - "sgn ..." so that it matches with the naming convention in the - manual page - - Before patch: - - diags/diag_encl --help - Usage: diags/diag_encl [-h] [-V] [...] [] - - [...] - : the sg device on which to operate, such - as sg7; if not specified, all such - devices will be diagnosed - man diags/man/diag_encl.8 - ... - SYNOPSIS - diag_encl [-s [-c][-l]] [-v] [-f ] [sgn ...] - diag_encl -d - diag_encl --version - diag_encl --help - ... - - After patch: - - diags/diag_encl --help - Usage: diags/diag_encl [-h] [-V] [...] [-f ] [] - - [...] - : the scsi device on which to operate, such - as sg7; if not specified, all such - devices will be diagnosed - - man diags/man/diag_encl.8 - ... - SYNOPSIS - diag_encl [-s [-c][-l]] [-v] [-f ] [sgn ...] - diag_encl -d - diag_encl --version - diag_encl --help - ... - - Signed-off-by: Barnali Guha Thakurata - -diff --git a/diags/diag_encl.c b/diags/diag_encl.c -index 449b097..e0d86ce 100644 ---- a/diags/diag_encl.c -+++ b/diags/diag_encl.c -@@ -75,8 +75,7 @@ static struct { - */ - static void - print_usage(const char *name) { -- printf("Usage: %s [-h] [-V] [-s [-c][-l]] [-v] [-f ]" -- " []\n" -+ printf("Usage: %s [-h] [-V] [-s [-c][-l]] [-v] [-f ] []\n" - "\n\t-h: print this help message\n" - "\t-s: generate serviceable events for any failures and\n" - "\t write events to the servicelog\n" -@@ -87,7 +86,7 @@ print_usage(const char *name) { - "\t-V: print the version of the command and exit\n" - "\t-f: for testing, read SES data from path.pg2 and VPD\n" - "\t from path.vpd\n" -- "\t: the sg device on which to operate, such\n" -+ "\t: the scsi device on which to operate, such\n" - "\t as sg7; if not specified, all such\n" - "\t devices will be diagnosed\n", name); - } diff --git a/ppc64-diag-2.7.9-diag_nvme-man-and-help-page.patch b/ppc64-diag-2.7.9-diag_nvme-man-and-help-page.patch deleted file mode 100644 index a794b78..0000000 --- a/ppc64-diag-2.7.9-diag_nvme-man-and-help-page.patch +++ /dev/null @@ -1,62 +0,0 @@ -commit 420d5145230041e0256f0f950a36c4ecaed4d584 -Author: Barnali Guha Thakurata -Date: Mon Jan 8 16:59:33 2024 +0530 - - diag_nvme help output update - - This patch changes "nvme_devices" in the help output of diag_nvme to - "nvmen ..." so that it matches with the naming convention in the - manual page - - Before patch: - - diags/diag_nvme --help - Usage: diags/diag_nvme [-h] [] - -h or --help: print this help message - : the NVMe devices on which to operate, for - example nvme0; if not specified, all detected - nvme devices will be diagnosed - - man diags/man/diag_nvme.8 - ... - SYNOPSIS - diag_nvme [] - diag_nvme - diag_nvme --help - ... - - After patch: - - diags/diag_nvme --help - Usage: diags/diag_nvme [-h] [] - -h or --help: print this help message - : the NVMe devices on which to operate, for - example nvme0; if not specified, all detected - nvme devices will be diagnosed - - man diags/man/diag_nvme.8 - ... - SYNOPSIS - diag_nvme [] - diag_nvme - diag_nvme --help - ... - - Signed-off-by: Barnali Guha Thakurata - -diff --git a/diags/diag_nvme.c b/diags/diag_nvme.c -index c1c0a20..2a74007 100644 ---- a/diags/diag_nvme.c -+++ b/diags/diag_nvme.c -@@ -989,9 +989,9 @@ extern int open_nvme(char *dev_path) { - } - - static void print_usage(char *command) { -- printf("Usage: %s [-h] []\n" -+ printf("Usage: %s [-h] []\n" - "\t-h or --help: print this help message\n" -- "\t: the NVMe devices on which to operate, for\n" -+ "\t: the NVMe devices on which to operate, for\n" - "\t example nvme0; if not specified, all detected\n" - "\t nvme devices will be diagnosed\n", command); - } diff --git a/ppc64-diag-2.7.9-diag_vnme-add-power11-support.patch b/ppc64-diag-2.7.9-diag_vnme-add-power11-support.patch deleted file mode 100644 index 5b18276..0000000 --- a/ppc64-diag-2.7.9-diag_vnme-add-power11-support.patch +++ /dev/null @@ -1,55 +0,0 @@ -commit 6bfa2ec7a7f424b018fd2e21a70e9d2f04041832 -Author: Barnali Guha Thakurata -Date: Tue Oct 22 12:05:39 2024 +0530 - - Added Power11 support for diag_nvme - - Without Patch: - # diag_nvme nvme0 - diag_nvme is only supported in PowerVM LPARs and at least Power10 processors - - With Patch: - # diag_nvme nvme0 - Running diagnostics for nvme0 - - NVMe diag command completed successfully - - Signed-off-by: Barnali Guha Thakurata - Signed-off-by: Nilay Shroff - Reviewed-by: Sathvika Vasireddy - Tested-by: Sathvika Vasireddy - -diff --git a/common/platform.c b/common/platform.c -index 1359adb..801b924 100644 ---- a/common/platform.c -+++ b/common/platform.c -@@ -96,6 +96,9 @@ get_processor(void) - case PVR_POWER10: - rc = POWER10; - break; -+ case PVR_POWER11: -+ rc = POWER11; -+ break; - default: - rc = PROCESSOR_UNKNOWN; - break; -diff --git a/common/platform.h b/common/platform.h -index b265d1e..ae3ea21 100644 ---- a/common/platform.h -+++ b/common/platform.h -@@ -36,6 +36,7 @@ - #define PVR_POWER8 0x004D - #define PVR_POWER9 0x004E - #define PVR_POWER10 0x0080 -+#define PVR_POWER11 0x0082 - - enum { - PLATFORM_UNKNOWN = 0, -@@ -56,6 +57,7 @@ enum { - POWER8, - POWER9, - POWER10, -+ POWER11, - }; - - extern const char *__platform_name[]; diff --git a/ppc64-diag-2.7.9-enable-light-path-diagnostics-for-RTAS-events.patch b/ppc64-diag-2.7.9-enable-light-path-diagnostics-for-RTAS-events.patch deleted file mode 100644 index 67d843f..0000000 --- a/ppc64-diag-2.7.9-enable-light-path-diagnostics-for-RTAS-events.patch +++ /dev/null @@ -1,63 +0,0 @@ -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/ppc64-diag-2.7.9-handle_multiple_platform_dumps.patch b/ppc64-diag-2.7.9-handle_multiple_platform_dumps.patch deleted file mode 100644 index 0846300..0000000 --- a/ppc64-diag-2.7.9-handle_multiple_platform_dumps.patch +++ /dev/null @@ -1,100 +0,0 @@ -commit d05654e5ec6f37cf6caa491fc7d95b336f9603e2 -Author: Sathvika Vasireddy -Date: Mon Jul 10 13:43:21 2023 +0530 - - rtas_errd: Handle multiple platform dumps - - Currently, whenever a new dump arrives, old dump file of that specific dump - type is removed before writing the new dump out. Any dump file with the - same prefix (dump type) gets deleted. This means only one set of dump files - is saved, since only one dump file per dump type is saved. - - Handle multiple dumps on Linux by allowing as many dumps to be offloaded - until disk space is available. To do this, remove the function that checks - for prefix size and removes old dump files. In the event of not enough - disk space available, log an error to the user along with the dump tag. - User will free up space and run extract_platdump tool using the dump tag - provided in the error message to offload the dump. Error log can be viewed - by the user by issuing 'journalctl -p err -t rtas_errd' command. - - Signed-off-by: Sathvika Vasireddy - Signed-off-by: Mahesh Salgaonkar - -diff --git a/rtas_errd/dump.c b/rtas_errd/dump.c -index cc50d91..494c322 100644 ---- a/rtas_errd/dump.c -+++ b/rtas_errd/dump.c -@@ -30,8 +30,10 @@ - #include - #include - #include -+#include - #include - #include -+#include - #include "utils.h" - #include "rtas_errd.h" - -@@ -284,7 +286,9 @@ void - check_platform_dump(struct event *event) - { - struct rtas_dump_scn *dump_scn; -+ struct statvfs vfs; - uint64_t dump_tag; -+ uint64_t dump_size; - char filename[DUMP_MAX_FNAME_LEN + 20], *pos; - char *pathname = NULL; - FILE *f; -@@ -306,11 +310,34 @@ check_platform_dump(struct event *event) - return; - } - -- /* Retrieve the dump */ -+ /* Retrieve the dump tag */ - dump_tag = dump_scn->id; - dump_tag |= ((uint64_t)dump_scn->v6hdr.subtype << 32); - dbg("Dump ID: 0x%016LX", dump_tag); - -+ if (statvfs(d_cfg.platform_dump_path, &vfs) == -1) { -+ log_msg(event, "statvfs() failed on %s: %s", -+ d_cfg.platform_dump_path, strerror(errno)); -+ return; -+ } -+ -+ /* Retrieve the size of the platform dump */ -+ dump_size = dump_scn->size_hi; -+ dump_size <<= 32; -+ dump_size |= dump_scn->size_lo; -+ -+ /* Check if there is sufficient space in the file system to store the dump */ -+ if (vfs.f_bavail * vfs.f_frsize < dump_size) { -+ syslog(LOG_ERR, "Insufficient space in %s to store platform dump for dump ID: " -+ "0x%016lX (required: %lu bytes, available: %lu bytes)", -+ d_cfg.platform_dump_path, dump_tag, dump_size, -+ (vfs.f_bavail * vfs.f_frsize)); -+ syslog(LOG_ERR, "After clearing space, run 'extract_platdump " -+ "0x%016lX'.\n", dump_tag); -+ return; -+ } -+ -+ /* Retrieve the dump */ - snprintf(tmp_sys_arg, 60, "0x%016LX", (long long unsigned int)dump_tag); - system_args[0] = EXTRACT_PLATDUMP_CMD; - system_args[1] = tmp_sys_arg; -diff --git a/rtas_errd/extract_platdump.c b/rtas_errd/extract_platdump.c -index fbe65b2..831e57e 100644 ---- a/rtas_errd/extract_platdump.c -+++ b/rtas_errd/extract_platdump.c -@@ -290,12 +290,6 @@ extract_platform_dump(uint64_t dump_tag) - } - } - -- /* -- * Before writing the new dump out, we need to see if any older -- * dumps need to be removed first -- */ -- remove_old_dumpfiles(filename, prefix_size); -- - /* Copy the dump off to the filesystem */ - pathname[0] = '\0'; - strcpy(pathname, d_cfg.platform_dump_path); diff --git a/ppc64-diag-2.7.9-improvements_status_and_err_messages.patch b/ppc64-diag-2.7.9-improvements_status_and_err_messages.patch deleted file mode 100644 index 9f0b8ad..0000000 --- a/ppc64-diag-2.7.9-improvements_status_and_err_messages.patch +++ /dev/null @@ -1,37 +0,0 @@ -commit 3ad587d20868f154bb7ab972ee7812add1380d7a -Author: Greg Joyce -Date: Wed Oct 11 12:10:40 2023 -0500 - - diag_nvme: improvements to status and err messages - - Signed-off-by: Greg Joyce - -diff --git a/diags/diag_nvme.c b/diags/diag_nvme.c -index df191f2..00efec2 100644 ---- a/diags/diag_nvme.c -+++ b/diags/diag_nvme.c -@@ -166,9 +166,9 @@ int main(int argc, char *argv[]) { - } - - if (rc == 0) -- fprintf(stdout, "Command completed successfully\n"); -+ fprintf(stdout, "NVMe diag command completed successfully\n"); - else -- fprintf(stderr, "Command failed, exiting with rc %d\n", rc); -+ fprintf(stderr, "NVMe diag command failed with rc %d\n", rc); - - return rc; - } -@@ -724,8 +724,11 @@ extern int get_smart_file(char *file_path, struct nvme_smart_log_page *log) { - int num_elements = 0; - struct dictionary dict[MAX_DICT_ELEMENTS]; - -- if ((num_elements = read_file_dict(file_path, dict, MAX_DICT_ELEMENTS)) < 0) -+ if ((num_elements = read_file_dict(file_path, dict, MAX_DICT_ELEMENTS)) < 0) { -+ fprintf(stderr, "read_file_dict failed: %s, rc % d\n", -+ file_path, num_elements); - return num_elements; -+ } - return set_smart_log_field(log, dict, num_elements); - } - diff --git a/ppc64-diag-2.7.9-moving-trim_trail_space-function.patch b/ppc64-diag-2.7.9-moving-trim_trail_space-function.patch deleted file mode 100644 index 53b3f40..0000000 --- a/ppc64-diag-2.7.9-moving-trim_trail_space-function.patch +++ /dev/null @@ -1,136 +0,0 @@ -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/ppc64-diag-2.7.9-remove-d-and-f-from-usage.patch b/ppc64-diag-2.7.9-remove-d-and-f-from-usage.patch deleted file mode 100644 index 3d79a20..0000000 --- a/ppc64-diag-2.7.9-remove-d-and-f-from-usage.patch +++ /dev/null @@ -1,24 +0,0 @@ -commit 316d2baf5dba0d00447a3ac49f2f95339dbdf5cd -Author: Greg Joyce -Date: Wed Nov 15 11:28:05 2023 -0600 - - nvme_call_home: remove -d and -f from usage message - - The -d and -f weren't removed from the first line of the - usage message. - - Signed-off-by: Greg Joyce - -diff --git a/diags/diag_nvme.c b/diags/diag_nvme.c -index 00efec2..164afe1 100644 ---- a/diags/diag_nvme.c -+++ b/diags/diag_nvme.c -@@ -989,7 +989,7 @@ extern int open_nvme(char *dev_path) { - } - - static void print_usage(char *command) { -- printf("Usage: %s [-h] [-d ] [-f ] []\n" -+ printf("Usage: %s [-h] []\n" - "\t-h or --help: print this help message\n" - "\t: the NVMe devices on which to operate, for\n" - "\t example nvme0; if not specified, all detected\n" diff --git a/ppc64-diag-2.7.9-remove_d_and_f_option.patch b/ppc64-diag-2.7.9-remove_d_and_f_option.patch deleted file mode 100644 index 3c7a5a2..0000000 --- a/ppc64-diag-2.7.9-remove_d_and_f_option.patch +++ /dev/null @@ -1,143 +0,0 @@ -commit 11cb2a44a59b63bdc23c94e386c4e2f43ea7eb61 -Author: Greg Joyce -Date: Fri Sep 22 15:19:34 2023 -0500 - - nvme_call_home: remove -d and -f as visible options - - The dump(-d) and file(-f) options have been removed as option in usage - and also in the man page. The options are for internal test only and - should not have been exposed. Also added some helpful status messages. - - Signed-off-by: Greg Joyce - -diff --git a/diags/diag_nvme.c b/diags/diag_nvme.c -index 2a78034..df191f2 100644 ---- a/diags/diag_nvme.c -+++ b/diags/diag_nvme.c -@@ -165,6 +165,11 @@ int main(int argc, char *argv[]) { - optind++; - } - -+ if (rc == 0) -+ fprintf(stdout, "Command completed successfully\n"); -+ else -+ fprintf(stderr, "Command failed, exiting with rc %d\n", rc); -+ - return rc; - } - -@@ -310,6 +315,7 @@ extern int dump_smart_data(char *device_name, char *dump_path) { - int fd, rc; - FILE *fp; - struct nvme_smart_log_page smart_log = { 0 }; -+ char ans; - - /* Read SMART data from device */ - snprintf(dev_path,sizeof(dev_path), "/dev/%s", device_name); -@@ -331,8 +337,16 @@ extern int dump_smart_data(char *device_name, char *dump_path) { - } - fp = fopen(dump_path, "wx"); - if (fp == NULL) { -- fprintf(stderr, "%s open failed: %s\n", dump_path, strerror(errno)); -- return -1; -+ if (errno == EEXIST) { -+ fprintf(stdout, "File %s exists. Overwrite (y/n)? ", dump_path); -+ rc = scanf("%c", &ans); -+ if (ans == 'y' || ans == 'Y') -+ fp = fopen(dump_path, "w"); -+ } -+ if (fp == NULL) { -+ fprintf(stderr, "%s open failed: %s\n", dump_path, strerror(errno)); -+ return -1; -+ } - } - write_smart_file(fp, &smart_log); - fclose(fp); -@@ -974,11 +988,6 @@ extern int open_nvme(char *dev_path) { - static void print_usage(char *command) { - printf("Usage: %s [-h] [-d ] [-f ] []\n" - "\t-h or --help: print this help message\n" -- "\t-d or --dump: dump SMART data to the specified path and file name \n" -- "\t one is expected with this option\n" -- "\t-f or --file: use SMART data from the specified path and file name \n" -- "\t instead of device, one is expected with\n" -- "\t this option\n" - "\t: the NVMe devices on which to operate, for\n" - "\t example nvme0; if not specified, all detected\n" - "\t nvme devices will be diagnosed\n", command); -diff --git a/diags/man/diag_nvme.8 b/diags/man/diag_nvme.8 -index 45567ac..c023ed6 100644 ---- a/diags/man/diag_nvme.8 -+++ b/diags/man/diag_nvme.8 -@@ -1,7 +1,7 @@ - .\" --.\" Copyright (C) 2022 IBM Corporation -+.\" Copyright (C) 2022, 2023 IBM Corporation - .\" --.TH "DIAG_NVME" "8" "June 2022" "Linux" "PowerLinux Diagnostic Tools" -+.TH "DIAG_NVME" "8" "September 2023" "Linux" "PowerLinux Diagnostic Tools" - .hy - .SH NAME - .PP -@@ -12,7 +12,7 @@ diag_nvme \- diagnose NVMe devices - .PD 0 - .P - .PD --\f[B]diag_nvme\f[] [\-d <\f[I]file\f[]>] [\-f <\f[I]file\f[]>] -+\f[B]diag_nvme\f[] - <\f[B]nvme\f[]\f[I]n\f[]> - .PD 0 - .P -@@ -29,52 +29,10 @@ go through the diagnostics procedure. - The user can control which events will be reported through the - configuration file \f[I]/etc/ppc64\-diag/diag_nvme.config\f[] - .SH OPTIONS --.TP --.B \f[B]\-d\f[], \f[B]--dump\f[] \f[I]file\f[] --Dump SMART data to the specified path and file name \f[I]file\f[]. --The SMART data is extracted from an NVMe device, so specifying one is --mandatory if this option is selected. --File created is in a simple key=value format. --.RS --.RE --.TP --.B \f[B]\-f\f[], \f[B]--file\f[] \f[I]file\f[] --This option usage is for testing only. --Use SMART data from the specified path and file name \f[I]file\f[] --instead of device, one NVMe is mandatory if this option is selected. --The expected format of the file is a simple key=value that is the same --one provided with the \-d / --dump option. --If \f[I]file\f[] is missing from the filesystem it will be treated as a --failure to retrieve SMART data and an event will be reported. --.RS --.RE --.TP --.B \f[B]\-h\f[], \f[B]--help\f[] --Print a help message and exit --.RS --.RE --.SH EXAMPLES --.TP --.B \f[B]diag_nvme\f[] --Run diagnostics in all NVMe devices detected in the system. --.RS --.RE --.TP - .B \f[B]diag_nvme nvme0 nvme1\f[] - Run diagnostics only in nvme0 and nvme1 devices. - .RS - .RE --.TP --.B \f[B]diag_nvme \-d smart.txt nvme0\f[] --Dump SMART data from nvme0 into file smart.txt. --.RS --.RE --.TP --.B \f[B]diag_nvme \-f smart.txt nvme0\f[] --Read SMART data from file smart.txt and use it as health information for --diagnostics of device nvme0. --.RS --.RE - .SH REPORTING BUGS - .PP - Patches and issues may be submitted at diff --git a/ppc64-diag-2.7.9-rtas_errd_crash.patch b/ppc64-diag-2.7.9-rtas_errd_crash.patch deleted file mode 100644 index 8b3c554..0000000 --- a/ppc64-diag-2.7.9-rtas_errd_crash.patch +++ /dev/null @@ -1,89 +0,0 @@ -commit 357923dafda766429acbe68470c3bd6028d5ebf5 -Author: Sathvika Vasireddy -Date: Sun May 5 02:48:25 2024 -0400 - - rtas_errd: Fix core dump with large filename passed to -f option - - When a filename passed to rtas_errd's -f option is excessively long, - it causes a stack buffer overflow in the _log_msg() function, leading - to stack smashing. - - The _log_msg() function, utilized by log_msg(), operates with a buffer - limited to 4096 characters. Additional space is consumed by _dbg() and - re-formatting in _log_msg(), increasing the risk of buffer overflow. - - To address this, in case of an error, if the filename exceeds the - length of 2048 characters, truncate it and log a message indicating the - truncation. Use 2048 characters as limit for filename length to allow - space for further modifications. - - Additionally, add a check when processing the -f option to ensure that - the length of the specified filename does not exceed 4096 characters. - - Reported-by: R Nageswara Sastry - Closes: https://github.com/power-ras/ppc64-diag/issues/31 - Signed-off-by: Sathvika Vasireddy - Tested-by: R Nageswara Sastry - Signed-off-by: Mahesh Salgaonkar - -diff --git a/rtas_errd/files.c b/rtas_errd/files.c -index 4be75c6..3750bdc 100644 ---- a/rtas_errd/files.c -+++ b/rtas_errd/files.c -@@ -284,10 +284,27 @@ init_files(void) - proc_error_log_fd = open(proc_error_log2, O_RDONLY); - - if (proc_error_log_fd < 0) { -- log_msg(NULL, "Could not open error log file at either %s or " -- "%s, %s\nThe rtas_errd daemon cannot continue and will " -- "exit", proc_error_log1, proc_error_log2, -- strerror(errno)); -+ -+ if (strlen(proc_error_log1) <= 2048) { -+ log_msg(NULL, "Could not open error log file at either %s or " -+ "%s, %s\nThe rtas_errd daemon cannot continue and will " -+ "exit", proc_error_log1, proc_error_log2, -+ strerror(errno)); -+ } else { -+ /* If the filename is too long, truncate it */ -+ char truncated_filename[2048]; -+ -+ strncpy(truncated_filename, proc_error_log1, -+ sizeof(truncated_filename) - 1); -+ truncated_filename[sizeof(truncated_filename) - 1] = '\0'; -+ -+ log_msg(NULL, "Truncating the filename since it is too long " -+ "(%d characters)", strlen(proc_error_log1)); -+ log_msg(NULL, "Could not open error log file at either %s or " -+ "%s, %s\nThe rtas_errd daemon cannot continue and will " -+ "exit", truncated_filename, proc_error_log2, -+ strerror(errno)); -+ } - return -1; - } - -diff --git a/rtas_errd/rtas_errd.c b/rtas_errd/rtas_errd.c -index 10c422c..f6c6a4a 100644 ---- a/rtas_errd/rtas_errd.c -+++ b/rtas_errd/rtas_errd.c -@@ -30,6 +30,7 @@ - #include - #include - #include -+#include - - #include "rtas_errd.h" - #include "platform.h" -@@ -474,6 +475,12 @@ main(int argc, char *argv[]) - - f_flag++; - proc_error_log1 = optarg; -+ if (strlen(proc_error_log1) > PATH_MAX) { -+ fprintf(stderr, "The specified file path %s exceeds" -+ " the maximum supported file length of 4096 characters.\n", -+ proc_error_log1); -+ goto error_out; -+ } - proc_error_log2 = NULL; - break; - diff --git a/ppc64-diag-2.7.9-utilize-trim_trail_space-in-event_fru_callout.patch b/ppc64-diag-2.7.9-utilize-trim_trail_space-in-event_fru_callout.patch deleted file mode 100644 index 2b0692b..0000000 --- a/ppc64-diag-2.7.9-utilize-trim_trail_space-in-event_fru_callout.patch +++ /dev/null @@ -1,37 +0,0 @@ -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/ppc64-diag.spec b/ppc64-diag.spec index 1a60422..34fe21e 100644 --- a/ppc64-diag.spec +++ b/ppc64-diag.spec @@ -1,6 +1,6 @@ Name: ppc64-diag -Version: 2.7.9 -Release: 6%{?dist} +Version: 2.7.11 +Release: 1%{?dist} Summary: PowerLinux Platform Diagnostics URL: https://github.com/power-ras/%{name} License: GPLv2 @@ -35,19 +35,6 @@ Source5: rtas_errd.8 Patch0: ppc64-diag-2.7.9-fedora.patch # upstream fixes -Patch10: ppc64-diag-2.7.9-handle_multiple_platform_dumps.patch -Patch11: ppc64-diag-2.7.9-remove_d_and_f_option.patch -Patch12: ppc64-diag-2.7.9-moving-trim_trail_space-function.patch -Patch13: ppc64-diag-2.7.9-utilize-trim_trail_space-in-event_fru_callout.patch -Patch14: ppc64-diag-2.7.9-enable-light-path-diagnostics-for-RTAS-events.patch -Patch15: ppc64-diag-2.7.9-improvements_status_and_err_messages.patch -Patch16: ppc64-diag-2.7.9-remove-d-and-f-from-usage.patch -Patch17: ppc64-diag-2.7.9-diag_encl-man-and-help-page.patch -Patch18: ppc64-diag-2.7.9-diag_nvme-man-and-help-page.patch -Patch19: ppc64-diag-2.7.9-call_home-fail-on-nvmf-device.patch -Patch20: ppc64-diag-2.7.9-compiler-warnings.patch -Patch21: ppc64-diag-2.7.9-rtas_errd_crash.patch -Patch22: ppc64-diag-2.7.9-diag_vnme-add-power11-support.patch %description This package contains various diagnostic tools for PowerLinux. @@ -184,6 +171,9 @@ if [ "$1" = "0" ]; then # last uninstall fi %changelog +* Tue Jan 27 2026 Than Ngo - 2.7.11-1 +- Resolves: RHEL-102474, Update to 2.7.11 + * Wed Jan 08 2025 Than Ngo - 2.7.9-6 - Resolves: RHEL-72515, Added Power11 support for diag_nvme diff --git a/sources b/sources index 2d6873d..fd590a4 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ppc64-diag-2.7.9.tar.gz) = b6756c17e67e876ad3a945d05dbd2c2523cbf121c4aa658a4edaf33775c8165ff26a252bdf812600e2d47ae69cd68f6e22c0de6f2d3994856adcd3d949322673 +SHA512 (ppc64-diag-2.7.11.tar.gz) = 651e8faca5bdf092625424239afc5d6f0062ad9d001f70a4759fe9179b021494516e129606d0ae3eedfd2a2d45ad21983fb7fa8836d5310afe9722d3f7b7cd15