Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package ppc64-diag for openSUSE:Factory checked in at 2024-09-17 18:20:04 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/ppc64-diag (Old) and /work/SRC/openSUSE:Factory/.ppc64-diag.new.29891 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ppc64-diag" Tue Sep 17 18:20:04 2024 rev:53 rq:1201651 version:2.7.10 Changes: -------- --- /work/SRC/openSUSE:Factory/ppc64-diag/ppc64-diag.changes 2024-02-26 19:50:41.105392336 +0100 +++ /work/SRC/openSUSE:Factory/.ppc64-diag.new.29891/ppc64-diag.changes 2024-09-17 18:20:41.241123679 +0200 @@ -1,0 +2,20 @@ +Tue Sep 17 14:28:38 UTC 2024 - Michal Suchanek <msucha...@suse.com> + +- Version 2.6.10 (jsc#PED-9918). + * Add support for multiple platform dumps + * Add support for light path diagnostics for rtas events + * Enable correct display of model and system-id for IPS Power systems + * Fix call home feature for nvmf devices + * Fix crash in rtas_errd due to invalid -f option values + * Fix build warnings with GCC-15 +- Remove upstreamed patches + * rtas_errd-Handle-multiple-platform-dumps.patch + * 0001-ppc64-diag-Move-trim_trail_space-function-to-common-.patch + * 0002-ppc64-diag-lp_diag-Utilize-trim_trail_space-function.patch + * 0003-ppc64-diag-lp_diag-Enable-light-path-diagnostics-for.patch + * nvme_call_home-remove-d-and-f-as-visible-options.patch + * nvme_call_home-remove-d-and-f-from-usage-message.patch + * diag_nvme-improvements-to-status-and-err-messages.patch + * diags-diag_nvme-call_home-command-fails-on-nvmf-driv.patch + +------------------------------------------------------------------- Old: ---- 0001-ppc64-diag-Move-trim_trail_space-function-to-common-.patch 0002-ppc64-diag-lp_diag-Utilize-trim_trail_space-function.patch 0003-ppc64-diag-lp_diag-Enable-light-path-diagnostics-for.patch diag_nvme-improvements-to-status-and-err-messages.patch diags-diag_nvme-call_home-command-fails-on-nvmf-driv.patch nvme_call_home-remove-d-and-f-as-visible-options.patch nvme_call_home-remove-d-and-f-from-usage-message.patch ppc64-diag-2.7.9.tar.gz rtas_errd-Handle-multiple-platform-dumps.patch New: ---- ppc64-diag-2.7.10.tar.gz BETA DEBUG BEGIN: Old: * rtas_errd-Handle-multiple-platform-dumps.patch * 0001-ppc64-diag-Move-trim_trail_space-function-to-common-.patch * 0002-ppc64-diag-lp_diag-Utilize-trim_trail_space-function.patch Old: * 0001-ppc64-diag-Move-trim_trail_space-function-to-common-.patch * 0002-ppc64-diag-lp_diag-Utilize-trim_trail_space-function.patch * 0003-ppc64-diag-lp_diag-Enable-light-path-diagnostics-for.patch Old: * 0002-ppc64-diag-lp_diag-Utilize-trim_trail_space-function.patch * 0003-ppc64-diag-lp_diag-Enable-light-path-diagnostics-for.patch * nvme_call_home-remove-d-and-f-as-visible-options.patch Old: * nvme_call_home-remove-d-and-f-from-usage-message.patch * diag_nvme-improvements-to-status-and-err-messages.patch * diags-diag_nvme-call_home-command-fails-on-nvmf-driv.patch Old: * diag_nvme-improvements-to-status-and-err-messages.patch * diags-diag_nvme-call_home-command-fails-on-nvmf-driv.patch Old: * 0003-ppc64-diag-lp_diag-Enable-light-path-diagnostics-for.patch * nvme_call_home-remove-d-and-f-as-visible-options.patch * nvme_call_home-remove-d-and-f-from-usage-message.patch Old: * nvme_call_home-remove-d-and-f-as-visible-options.patch * nvme_call_home-remove-d-and-f-from-usage-message.patch * diag_nvme-improvements-to-status-and-err-messages.patch Old:- Remove upstreamed patches * rtas_errd-Handle-multiple-platform-dumps.patch * 0001-ppc64-diag-Move-trim_trail_space-function-to-common-.patch BETA DEBUG END: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ppc64-diag.spec ++++++ --- /var/tmp/diff_new_pack.XD2Mex/_old 2024-09-17 18:20:41.877149393 +0200 +++ /var/tmp/diff_new_pack.XD2Mex/_new 2024-09-17 18:20:41.881149555 +0200 @@ -17,7 +17,7 @@ Name: ppc64-diag -Version: 2.7.9 +Version: 2.7.10 Release: 0 Summary: Linux for Power Platform Diagnostics License: GPL-2.0-or-later @@ -30,16 +30,6 @@ Source4: ppc64-diag-nvme.timer #PATCH-FIX-OPENSUSE - ppc64-diag.varunused.patch - fix unused variables Patch1: ppc64-diag.varunused.patch -#PATCH-FIX-UPSTREAM - rtas_errd-Handle-multiple-platform-dumps.patch - store multiple dumps -Patch2: rtas_errd-Handle-multiple-platform-dumps.patch -#PATCH-FIX-UPSTREAM - Enclosure fault LED support -Patch3: 0001-ppc64-diag-Move-trim_trail_space-function-to-common-.patch -Patch4: 0002-ppc64-diag-lp_diag-Utilize-trim_trail_space-function.patch -Patch5: 0003-ppc64-diag-lp_diag-Enable-light-path-diagnostics-for.patch -Patch6: nvme_call_home-remove-d-and-f-as-visible-options.patch -Patch7: nvme_call_home-remove-d-and-f-from-usage-message.patch -Patch8: diag_nvme-improvements-to-status-and-err-messages.patch -Patch9: diags-diag_nvme-call_home-command-fails-on-nvmf-driv.patch BuildRequires: autoconf BuildRequires: automake BuildRequires: bison ++++++ ppc64-diag-2.7.9.tar.gz -> ppc64-diag-2.7.10.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.7.9/.travis.yml new/ppc64-diag-2.7.10/.travis.yml --- old/ppc64-diag-2.7.9/.travis.yml 2022-10-14 11:41:34.000000000 +0200 +++ new/ppc64-diag-2.7.10/.travis.yml 2024-09-13 07:24:56.000000000 +0200 @@ -1,8 +1,7 @@ language: c -os: linux-ppc64le -group: ibm-cloud -dist: bionic +arch: ppc64le +group: power-focal sudo: required @@ -11,7 +10,7 @@ env: matrix: - RUN_ON_CONTAINER=fedora-37 - - RUN_ON_CONTAINER=ubuntu-22.10 + - RUN_ON_CONTAINER=ubuntu-23.04 install: - docker build --pull -t ${RUN_ON_CONTAINER} -f ppc64-diag-ci/Dockerfile-${RUN_ON_CONTAINER} . @@ -25,3 +24,10 @@ --tmpfs /tmp/ --rm -t $RUN_ON_CONTAINER bash -c "./ppc64-diag-ci/build-${RUN_ON_CONTAINER}.sh"; + +notifications: + slack: + on_failure: always + on_success: always + rooms: + - secure: "kjiysvfyVNaN9/NrGQu5CVxDnTC04pepsw0e//ClYPTj/C439KL+mcNjOhqK620pOCIC4f+HcDSQbXWyVb8WLBqszLvwt000qdzUPOSJPIXXD1cjnoGGKPaWIzCipIpGQ0vIXxBAJ34bC8VxxI4hls0hG61S+yjMOnVQrG8jlwEFrPQmkDckt/ydvB3YC5YN6kOnzwwzXaKLtWRsQbxmnmxjX6ydQrExofS3OojCmLA+nyYH5+HcquSZcrjfMJPJ5X/cfiqxeBdfVNOBWfNPPoj5tRlME9SP8CE8N265IJjomGLumFi5UEIjUCwF5U+kDk8zIjmQxA5wNHUuQnpajfQemZx6rIi7cNDTns4HItBGLJXbtbsuxxuQhVCndg5F5FKLaGpUWBvCnMjJf5/eoDhDGlLR/m3/d70X00gWJndC2tMoSinVB4SFoAoCecmt0P5WrgOwycwg8L9F7Bvtcpldgy7LgJi88xrnqykc4jAnYRT0nu8T9foy9s6jfDzWcF03P/cw60ueKAr61ljFfDmlYorFHuuqaxKL99EEwY2i6y9VqgjwHu3j7LRMMmng2nz94EQYUpXPHQThHTymonxKiHTBTj+tuT7sDcosqgNdQezMHxd8FjDWQghOMqejAiIGpRXAohoqAEu0lbwkf4bt0AGjrUGyCgCXDLa0kqk=" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.7.9/common/utils.c new/ppc64-diag-2.7.10/common/utils.c --- old/ppc64-diag-2.7.9/common/utils.c 2022-10-14 11:41:34.000000000 +0200 +++ new/ppc64-diag-2.7.10/common/utils.c 2024-09-13 07:24:56.000000000 +0200 @@ -24,9 +24,34 @@ #include <fcntl.h> #include <string.h> #include <assert.h> +#include <ctype.h> #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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.7.9/common/utils.h new/ppc64-diag-2.7.10/common/utils.h --- old/ppc64-diag-2.7.9/common/utils.h 2022-10-14 11:41:34.000000000 +0200 +++ new/ppc64-diag-2.7.10/common/utils.h 2024-09-13 07:24:56.000000000 +0200 @@ -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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.7.9/configure.ac new/ppc64-diag-2.7.10/configure.ac --- old/ppc64-diag-2.7.9/configure.ac 2022-10-14 11:41:34.000000000 +0200 +++ new/ppc64-diag-2.7.10/configure.ac 2024-09-13 07:24:56.000000000 +0200 @@ -1,6 +1,6 @@ # -*- Autoconf -*- # Process this file with autoconf to produce a configure script. -m4_define([ppc64_diag_version], 2.7.9) +m4_define([ppc64_diag_version], 2.7.10) AC_PREREQ([2.69]) AC_INIT([ppc64-diag], ppc64_diag_version, [mah...@linux.ibm.com, s...@linux.ibm.com]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.7.9/diags/Makefile.am new/ppc64-diag-2.7.10/diags/Makefile.am --- old/ppc64-diag-2.7.9/diags/Makefile.am 2022-10-14 11:41:34.000000000 +0200 +++ new/ppc64-diag-2.7.10/diags/Makefile.am 2024-09-13 07:24:56.000000000 +0200 @@ -13,7 +13,8 @@ $(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_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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.7.9/diags/diag_disk.c new/ppc64-diag-2.7.10/diags/diag_disk.c --- old/ppc64-diag-2.7.9/diags/diag_disk.c 2022-10-14 11:41:34.000000000 +0200 +++ new/ppc64-diag-2.7.10/diags/diag_disk.c 2024-09-13 07:24:56.000000000 +0200 @@ -43,7 +43,9 @@ #define SYSFS_SG_PATH "/sys/class/scsi_generic" #define DEVICE_TREE "/proc/device-tree/" #define DEVICE_TREE_SYSTEM_ID DEVICE_TREE"system-id" +#define DEVICE_TREE_VENDOR_SYSTEM_ID DEVICE_TREE"ibm,vendor-system-id" #define DEVICE_TREE_MODEL DEVICE_TREE"model" +#define DEVICE_TREE_VENDOR_MODEL DEVICE_TREE"ibm,vendor-model" #define BUFFER_LENGTH 16 #define SERIAL_NUM_LEN 8 @@ -248,9 +250,18 @@ char model[BUFFER_LENGTH] = {0}; char *temp; - device_fd = open(DEVICE_TREE_SYSTEM_ID, O_RDONLY); - if (device_fd < 0) - return -1; + /* + * Always use ibm,vendor-system-id device-tree property + * to get machine serial number. If it does not exist, + * then fallback to system-id property to get machine + * serial number. + */ + device_fd = open(DEVICE_TREE_VENDOR_SYSTEM_ID, O_RDONLY); + if (device_fd < 0) { + device_fd = open(DEVICE_TREE_SYSTEM_ID, O_RDONLY); + if (device_fd < 0) + return -1; + } rc = read(device_fd, serial, BUFFER_LENGTH); close(device_fd); @@ -266,9 +277,17 @@ memcpy(machine_serial, serial + start_index, SERIAL_NUM_LEN); machine_serial[SERIAL_NUM_LEN - 1] = '\0'; - device_fd = open(DEVICE_TREE_MODEL, O_RDONLY); - if (device_fd < 0) - return -1; + /* + * Always use ibm,vendor-model device-tree property + * to get model info. If it does not exist, then + * fallback to model property to get model info. + */ + device_fd = open(DEVICE_TREE_VENDOR_MODEL, O_RDONLY); + if (device_fd < 0) { + device_fd = open(DEVICE_TREE_MODEL, O_RDONLY); + if (device_fd < 0) + return -1; + } rc = read(device_fd, model, BUFFER_LENGTH); close(device_fd); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.7.9/diags/diag_encl.c new/ppc64-diag-2.7.10/diags/diag_encl.c --- old/ppc64-diag-2.7.9/diags/diag_encl.c 2022-10-14 11:41:34.000000000 +0200 +++ new/ppc64-diag-2.7.10/diags/diag_encl.c 2024-09-13 07:24:56.000000000 +0200 @@ -75,8 +75,7 @@ */ static void print_usage(const char *name) { - printf("Usage: %s [-h] [-V] [-s [-c][-l]] [-v] [-f <path.pg2>]" - " [<scsi_enclosure>]\n" + printf("Usage: %s [-h] [-V] [-s [-c][-l]] [-v] [-f <path.pg2>] [<sgn ...>]\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 @@ "\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<scsi_enclosure>: the sg device on which to operate, such\n" + "\t<sgn ...>: 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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.7.9/diags/diag_nvme.c new/ppc64-diag-2.7.10/diags/diag_nvme.c --- old/ppc64-diag-2.7.9/diags/diag_nvme.c 2022-10-14 11:41:34.000000000 +0200 +++ new/ppc64-diag-2.7.10/diags/diag_nvme.c 2024-09-13 07:24:56.000000000 +0200 @@ -27,6 +27,7 @@ #include <sys/utsname.h> #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_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[]) { @@ -165,6 +165,11 @@ optind++; } + if (rc == 0) + fprintf(stdout, "NVMe diag command completed successfully\n"); + else + fprintf(stderr, "NVMe diag command failed with rc %d\n", rc); + return rc; } @@ -310,6 +315,7 @@ 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 @@ } 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); @@ -361,9 +375,40 @@ 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; @@ -710,8 +755,11 @@ 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); } @@ -972,14 +1020,9 @@ } static void print_usage(char *command) { - printf("Usage: %s [-h] [-d <file>] [-f <file>] [<nvme_devices>]\n" + printf("Usage: %s [-h] [<nvmen ...>]\n" "\t-h or --help: print this help message\n" - "\t-d or --dump: dump SMART data to the specified path and file name <file>\n" - "\t one <nvme_device> is expected with this option\n" - "\t-f or --file: use SMART data from the specified path and file name <file>\n" - "\t instead of device, one <nvme_device> is expected with\n" - "\t this option\n" - "\t<nvme_devices>: the NVMe devices on which to operate, for\n" + "\t<nvmen ...>: 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); } @@ -1426,28 +1469,6 @@ 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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.7.9/diags/man/diag_nvme.8 new/ppc64-diag-2.7.10/diags/man/diag_nvme.8 --- old/ppc64-diag-2.7.9/diags/man/diag_nvme.8 2022-10-14 11:41:34.000000000 +0200 +++ new/ppc64-diag-2.7.10/diags/man/diag_nvme.8 2024-09-13 07:24:56.000000000 +0200 @@ -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 @@ .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 @@ 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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.7.9/lpd/lp_diag.c new/ppc64-diag-2.7.10/lpd/lp_diag.c --- old/ppc64-diag-2.7.9/lpd/lp_diag.c 2022-10-14 11:41:34.000000000 +0200 +++ new/ppc64-diag-2.7.10/lpd/lp_diag.c 2024-09-13 07:24:56.000000000 +0200 @@ -35,6 +35,9 @@ #include "servicelog.h" #include "indicator.h" #include "lp_util.h" +#include "utils.h" + +static int rtas_event; /* FRU callout priority as defined in PAPR+ * @@ -172,8 +175,10 @@ 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; @@ -344,6 +349,8 @@ /* 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; @@ -443,14 +450,20 @@ 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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.7.9/lpd/usysident.c new/ppc64-diag-2.7.10/lpd/usysident.c --- old/ppc64-diag-2.7.9/lpd/usysident.c 2022-10-14 11:41:34.000000000 +0200 +++ new/ppc64-diag-2.7.10/lpd/usysident.c 2024-09-13 07:24:56.000000000 +0200 @@ -429,7 +429,7 @@ * 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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.7.9/opal_errd/extract_opal_dump.c new/ppc64-diag-2.7.10/opal_errd/extract_opal_dump.c --- old/ppc64-diag-2.7.9/opal_errd/extract_opal_dump.c 2022-10-14 11:41:34.000000000 +0200 +++ new/ppc64-diag-2.7.10/opal_errd/extract_opal_dump.c 2024-09-13 07:24:56.000000000 +0200 @@ -77,8 +77,10 @@ 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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.7.9/ppc64-diag-ci/Dockerfile-ubuntu-22.10 new/ppc64-diag-2.7.10/ppc64-diag-ci/Dockerfile-ubuntu-22.10 --- old/ppc64-diag-2.7.9/ppc64-diag-ci/Dockerfile-ubuntu-22.10 2022-10-14 11:41:34.000000000 +0200 +++ new/ppc64-diag-2.7.10/ppc64-diag-ci/Dockerfile-ubuntu-22.10 1970-01-01 01:00:00.000000000 +0100 @@ -1,11 +0,0 @@ -FROM ubuntu:22.10 -ENV DEBIAN_FRONTEND noninteractive - -RUN apt-get update -qq -RUN apt-get update -qq && apt-get install -y gcc g++ libstdc++-10-dev git make flex bison automake libtool pkg-config -RUN apt-get update -qq && apt-get install -y debianutils xz-utils perl-base device-tree-compiler -RUN apt-get update -qq && apt-get install -y libsqlite3-dev zlib1g-dev libvpd-dev librtas-dev librtasevent-dev -RUN apt-get update -qq && apt-get install -y libservicelog-dev libncurses5-dev libsystemd-dev libudev-dev -#RUN dnf -y install servicelog powerpc-utils lsvpd -COPY . /build/ -WORKDIR /build diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.7.9/ppc64-diag-ci/Dockerfile-ubuntu-23.04 new/ppc64-diag-2.7.10/ppc64-diag-ci/Dockerfile-ubuntu-23.04 --- old/ppc64-diag-2.7.9/ppc64-diag-ci/Dockerfile-ubuntu-23.04 1970-01-01 01:00:00.000000000 +0100 +++ new/ppc64-diag-2.7.10/ppc64-diag-ci/Dockerfile-ubuntu-23.04 2024-09-13 07:24:56.000000000 +0200 @@ -0,0 +1,11 @@ +FROM ubuntu:23.04 +ENV DEBIAN_FRONTEND noninteractive + +RUN apt-get update -qq +RUN apt-get update -qq && apt-get install -y gcc g++ libstdc++-10-dev git make flex bison automake libtool pkg-config +RUN apt-get update -qq && apt-get install -y debianutils xz-utils perl-base device-tree-compiler +RUN apt-get update -qq && apt-get install -y libsqlite3-dev zlib1g-dev libvpd-dev librtas-dev librtasevent-dev +RUN apt-get update -qq && apt-get install -y libservicelog-dev libncurses5-dev libsystemd-dev libudev-dev +#RUN dnf -y install servicelog powerpc-utils lsvpd +COPY . /build/ +WORKDIR /build diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.7.9/ppc64-diag-ci/build-ubuntu-22.10.sh new/ppc64-diag-2.7.10/ppc64-diag-ci/build-ubuntu-22.10.sh --- old/ppc64-diag-2.7.9/ppc64-diag-ci/build-ubuntu-22.10.sh 2022-10-14 11:41:34.000000000 +0200 +++ new/ppc64-diag-2.7.10/ppc64-diag-ci/build-ubuntu-22.10.sh 1970-01-01 01:00:00.000000000 +0100 @@ -1,22 +0,0 @@ -#!/bin/bash - -set -uo pipefail -set -e -set -vx -MAKE_J=$(grep -c processor /proc/cpuinfo) -BUILDDIR=`pwd` - -#Build the sources -./autogen.sh -./configure -make -j $MAKE_J -make -j $MAKE_J check - -#Run tests -cd $BUILDDIR/opal_errd/ && ./run_tests -cd $BUILDDIR/common && ./run_tests -cd $BUILDDIR/diags/test && ./run_tests -cd $BUILDDIR - -#Build rpms -make dist-gzip diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.7.9/ppc64-diag-ci/build-ubuntu-23.04.sh new/ppc64-diag-2.7.10/ppc64-diag-ci/build-ubuntu-23.04.sh --- old/ppc64-diag-2.7.9/ppc64-diag-ci/build-ubuntu-23.04.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/ppc64-diag-2.7.10/ppc64-diag-ci/build-ubuntu-23.04.sh 2024-09-13 07:24:56.000000000 +0200 @@ -0,0 +1,22 @@ +#!/bin/bash + +set -uo pipefail +set -e +set -vx +MAKE_J=$(grep -c processor /proc/cpuinfo) +BUILDDIR=`pwd` + +#Build the sources +./autogen.sh +./configure +make -j $MAKE_J +make -j $MAKE_J check + +#Run tests +cd $BUILDDIR/opal_errd/ && ./run_tests +cd $BUILDDIR/common && ./run_tests +cd $BUILDDIR/diags/test && ./run_tests +cd $BUILDDIR + +#Build rpms +make dist-gzip diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.7.9/ppc64-diag.spec.in new/ppc64-diag-2.7.10/ppc64-diag.spec.in --- old/ppc64-diag-2.7.9/ppc64-diag.spec.in 2022-10-14 11:41:34.000000000 +0200 +++ new/ppc64-diag-2.7.10/ppc64-diag.spec.in 2024-09-13 07:24:56.000000000 +0200 @@ -124,6 +124,15 @@ fi %changelog +* Fri Sep 13 2024 - Mahesh Salgaonkar <mah...@linux.ibm.com> - 2.7.10 +- Add support for multiple platform dumps +- Add support for light path diagnostics for rtas events +- Enable correct display of model and system-id for IPS Power systems +- Fix call home feature for nvmf devices +- Fix crash in rtas_errd due to invalid -f option values +- Fix build warnings with GCC-15 +- Update travis build to use v3 supported tags + * Wed Oct 12 2022 - Mahesh Salgaonkar <mah...@linux.ibm.com> - 2.7.9 - Add NVMe diagnostics support (Murilo). - Update travis build to use fedora37 and Ubuntu22.10 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.7.9/rtas_errd/dump.c new/ppc64-diag-2.7.10/rtas_errd/dump.c --- old/ppc64-diag-2.7.9/rtas_errd/dump.c 2022-10-14 11:41:34.000000000 +0200 +++ new/ppc64-diag-2.7.10/rtas_errd/dump.c 2024-09-13 07:24:56.000000000 +0200 @@ -30,8 +30,10 @@ #include <fcntl.h> #include <librtas.h> #include <librtasevent.h> +#include <syslog.h> #include <sys/stat.h> #include <sys/wait.h> +#include <sys/statvfs.h> #include "utils.h" #include "rtas_errd.h" @@ -41,6 +43,7 @@ #define SCANLOG_DUMP_FILE "/proc/ppc64/scan-log-dump" #define SCANLOG_DUMP_EXISTS "/proc/device-tree/chosen/ibm,scan-log-data" #define SYSID_FILE "/proc/device-tree/system-id" +#define SYSID_VENDOR_FILE "/proc/device-tree/ibm,vendor-system-id" #define SCANLOG_MODULE "scanlog" #define MODPROBE_PROGRAM "/sbin/modprobe" @@ -60,21 +63,26 @@ { FILE *fp; char buf[20] = {0,}, *ret = NULL; + char *filename = SYSID_VENDOR_FILE; /* * Odds of SYSID_FILE, open failing is almost none. * But, better to catch the odds. */ - fp = fopen(SYSID_FILE, "r"); + fp = fopen(filename, "r"); if (!fp) { - log_msg(NULL, "%s: Failed to open %s, %s", - __func__, SYSID_FILE, strerror(errno)); - return ret; + filename = SYSID_FILE; + fp = fopen(filename, "r"); + if (!fp) { + log_msg(NULL, "%s: Failed to open %s, %s", __func__, + filename, strerror(errno)); + return ret; + } } if (fgets(buf, sizeof(buf), fp) == NULL) { log_msg(NULL, "%s: Reading file %s failed, %s", - __func__, SYSID_FILE, strerror(errno)); + __func__, filename, strerror(errno)); } else { ret = strdup(buf + 4); if (!ret) { @@ -284,7 +292,9 @@ 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 +316,34 @@ 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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.7.9/rtas_errd/extract_platdump.c new/ppc64-diag-2.7.10/rtas_errd/extract_platdump.c --- old/ppc64-diag-2.7.9/rtas_errd/extract_platdump.c 2022-10-14 11:41:34.000000000 +0200 +++ new/ppc64-diag-2.7.10/rtas_errd/extract_platdump.c 2024-09-13 07:24:56.000000000 +0200 @@ -220,7 +220,7 @@ 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); @@ -290,12 +290,6 @@ } } - /* - * 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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.7.9/rtas_errd/files.c new/ppc64-diag-2.7.10/rtas_errd/files.c --- old/ppc64-diag-2.7.9/rtas_errd/files.c 2022-10-14 11:41:34.000000000 +0200 +++ new/ppc64-diag-2.7.10/rtas_errd/files.c 2024-09-13 07:24:56.000000000 +0200 @@ -284,10 +284,27 @@ 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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.7.9/rtas_errd/rtas_errd.c new/ppc64-diag-2.7.10/rtas_errd/rtas_errd.c --- old/ppc64-diag-2.7.9/rtas_errd/rtas_errd.c 2022-10-14 11:41:34.000000000 +0200 +++ new/ppc64-diag-2.7.10/rtas_errd/rtas_errd.c 2024-09-13 07:24:56.000000000 +0200 @@ -30,6 +30,7 @@ #include <sys/stat.h> #include <sys/wait.h> #include <librtas.h> +#include <limits.h> #include "rtas_errd.h" #include "platform.h" @@ -474,6 +475,12 @@ 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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.7.9/scripts/ppc64_diag_mkrsrc new/ppc64-diag-2.7.10/scripts/ppc64_diag_mkrsrc --- old/ppc64-diag-2.7.9/scripts/ppc64_diag_mkrsrc 2022-10-14 11:41:34.000000000 +0200 +++ new/ppc64-diag-2.7.10/scripts/ppc64_diag_mkrsrc 2024-09-13 07:24:56.000000000 +0200 @@ -122,11 +122,18 @@ $partition_no = "000"; } -# Retrieve CEC MTMS from /proc/device-tree/model and /proc/device-tree/system-id -$cec_machinetype = `cat /proc/device-tree/model | cut -c5- 2>/dev/null`; +# Retrieve CEC MTMS from /proc/device-tree/*model and /proc/device-tree/*system-id +$cec_machinetype = -e '/proc/device-tree/ibm,vendor-model' ? +`cat /proc/device-tree/ibm,vendor-model | cut -c5- 2>/dev/null` : +`cat /proc/device-tree/model | cut -c5- 2>/dev/null`; + chomp $cec_machinetype; chop $cec_machinetype; -$cec_machineserial = `cat /proc/device-tree/system-id | cut -c7- 2>/dev/null`; + +$cec_machineserial = -e '/proc/device-tree/ibm,vendor-system-id' ? +`cat /proc/device-tree/ibm,vendor-system-id | cut -c5- 2>/dev/null` : +`cat /proc/device-tree/system-id | cut -c5- 2>/dev/null` : + chomp $cec_machineserial; chop $cec_machineserial;