From 2621a7d59f0fc8461c3d92a9ee9fd00f92b001b8 Mon Sep 17 00:00:00 2001 From: eabdullin Date: Mon, 9 Oct 2023 11:15:48 +0000 Subject: [PATCH] import CS lsvpd-1.7.14-4.el9 --- SOURCES/lsvpd-git50e2fa.patch | 141 ++++++++++++++++++++++++++++++++++ SOURCES/lsvpd-git8b5d2c.patch | 76 ++++++++++++++++++ SPECS/lsvpd.spec | 12 ++- 3 files changed, 228 insertions(+), 1 deletion(-) create mode 100644 SOURCES/lsvpd-git50e2fa.patch create mode 100644 SOURCES/lsvpd-git8b5d2c.patch diff --git a/SOURCES/lsvpd-git50e2fa.patch b/SOURCES/lsvpd-git50e2fa.patch new file mode 100644 index 0000000..3e8c257 --- /dev/null +++ b/SOURCES/lsvpd-git50e2fa.patch @@ -0,0 +1,141 @@ +commit 50e2fa22298de13fd731488306d2cbd0081730d8 +Author: Sathvika Vasireddy +Date: Fri Feb 10 14:55:41 2023 +0530 + + lsvpd: Fill firmware information by recursively looking for firmware specific files within sysfs ID + + Currently, fillFirmware() is filling firmware information based on the + classNode value of a given component. It then looks for firmware specific + sysfs files (fw_version, fwrev, firmware_rev), within the classNode path, + to set firmware fields accordingly. For components that do not have a + classNode value, fillFirmware() does not look for firmware information + within the sysfs firmware files, and hence does not set firmware fields. + + This patch recursively looks for sysfs firmware files within the ID path of + a component, and sets the firmware fields accordingly, if not already set. + + Reported-by: Borislav Stoymirski + Signed-off-by: Sathvika Vasireddy + Signed-off-by: Mahesh Salgaonkar + Tested-by: Borislav Stoymirski + +diff --git a/src/include/icollector.hpp b/src/include/icollector.hpp +index 894dd99..392632f 100644 +--- a/src/include/icollector.hpp ++++ b/src/include/icollector.hpp +@@ -116,6 +116,25 @@ namespace lsvpd + virtual ~ICollector( ){} + + protected: ++ /** Recursively search for attrName within a given path. ++ * ++ * @param path ++ * Directory path to search for filename. ++ * ++ * @param attrName ++ * Filename to search for. ++ * ++ * @return ++ * Path in which attrName file exists. ++ * ++ * If attrName is fwrev, and is found at ++ * /sys/devices/pci0020:01/0020:01:00.1/host4/scsi_host/host4/fwrev, ++ * searchFile() will return ++ * /sys/devices/pci0020:01/0020:01:00.1/host4/scsi_host/host4. ++ */ ++ string searchFile( const string& path, ++ const string& attrName ); ++ + string getAttrValue( const string& path, + const string& attrName ); + +diff --git a/src/internal/sys_interface/icollector.cpp b/src/internal/sys_interface/icollector.cpp +index 5c4dccc..7586fe8 100644 +--- a/src/internal/sys_interface/icollector.cpp ++++ b/src/internal/sys_interface/icollector.cpp +@@ -32,11 +32,46 @@ + #include + #include + #include ++#include ++#include ++#include + + using namespace std; + + namespace lsvpd + { ++ ++ string ICollector::searchFile( const string& path, const string& attrName ) ++ { ++ DIR *dir; ++ struct dirent *entry; ++ ++ if ((dir = opendir(path.c_str())) == NULL) ++ return ""; ++ ++ while ((entry = readdir(dir)) != NULL) { ++ if (entry->d_type == DT_DIR) { ++ // Found a directory, but ignore . and .. ++ if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) ++ continue; ++ string newPath = path + "/" + entry->d_name; ++ string result = searchFile(newPath, attrName); ++ if (result != "") { ++ closedir(dir); ++ return result; ++ } ++ } ++ else { ++ if (entry->d_name == attrName) { ++ closedir(dir); ++ return path; ++ } ++ } ++ } ++ closedir(dir); ++ return ""; ++ } ++ + /** + * Read a device attribute, given dev path and attribute name + * @var path Full path to device in sysfs +diff --git a/src/internal/sys_interface/sysfstreecollector.cpp b/src/internal/sys_interface/sysfstreecollector.cpp +index c5eb71d..03eb7da 100644 +--- a/src/internal/sys_interface/sysfstreecollector.cpp ++++ b/src/internal/sys_interface/sysfstreecollector.cpp +@@ -1837,6 +1837,10 @@ ERROR: + + void SysFSTreeCollector::fillFirmware( Component* fillMe ) + { ++ string result = ""; ++ string path = fillMe->getID(); ++ const string firmwareAttributes[] = {"fw_version", "firmware_rev"}; ++ const size_t firmwareAttributesSize = sizeof(firmwareAttributes) / sizeof(firmwareAttributes[0]); + string classNode = fillMe->getClassNode(); + if (classNode.length() > 0) { + fillMe->mFirmwareVersion.setValue( getAttrValue( classNode, +@@ -1848,6 +1852,23 @@ ERROR: + fillMe->mFirmwareVersion.setValue( getAttrValue( classNode, + "firmware_rev" ), 30, __FILE__, __LINE__ ); + } ++ ++ if (fillMe->mFirmwareLevel.dataValue.empty()) { ++ result = searchFile(path, "fwrev"); ++ if (!result.empty()) { ++ fillMe->mFirmwareLevel.setValue( getAttrValue( result, ++ "fwrev" ), 30, __FILE__, __LINE__ ); ++ } ++ } ++ ++ for (size_t i = 0; i < firmwareAttributesSize && fillMe->mFirmwareVersion.dataValue.empty(); i++) { ++ result = searchFile(path, firmwareAttributes[i]); ++ if (!result.empty()) { ++ fillMe->mFirmwareVersion.setValue( getAttrValue( result, ++ firmwareAttributes[i]), 30, __FILE__, __LINE__ ); ++ break; ++ } ++ } + } + + string SysFSTreeCollector::resolveClassPath( const string& path ) diff --git a/SOURCES/lsvpd-git8b5d2c.patch b/SOURCES/lsvpd-git8b5d2c.patch new file mode 100644 index 0000000..6553bc7 --- /dev/null +++ b/SOURCES/lsvpd-git8b5d2c.patch @@ -0,0 +1,76 @@ +commit 8b5d2cfb7d1a6731e72198e7c71fa5bfad1ff0ec +Author: Sathvika Vasireddy +Date: Wed Mar 29 12:10:36 2023 +0530 + + lsvpd: Update nvme_templates with logpage format for 0005 and 0006 versions + + To collect nvme vpd data and set vpd fields accordingly, we interpret nvme + f1h logpage. Currently, there is support to interpret NVMe logpage versions + till 0004. NVMe devices with Alterable ROM Level REV.SN66 have f1h logpage + versions of 0005 and above. Since there is no support for 0005 and above + versions of nvme f1h logpage in the code yet, code returns without + interpreting logpage information, and hence nvme vpd data for such devices + are not being set and displayed completely. To address this issue, add nvme + template for f1h logpage versions 0005 and 0006. + + Starting with Version 0005, a new value was added to Encryption field + (2 = BootROM support). And, starting with Version 0006, two new fields + (Reserved for Future DS8K Usage and DLFEAT PI Deviation Support) were added + to f1h logpage. + + Before this patch: + $ lscfg -vl 05ed:70:00.0 + 05ed:70:00.0 nvme0 pci1014,6bc U50EE.001.WZS005P-P3-C13 + 1.6TB NVMe Gen4 II U.2 SSD (1014a825) + Manufacturer Name.........IBM + Machine Type-Model........NVMe SSD Controller PM173Xa + Alterable ROM Level.......REV.SN66 + Device Specific.(YC)......0 + Location Code.(YL)........U50EE.001.WZS005P-P3-C13 + + After this patch: + $ lscfg -vl 05ed:70:00.0 + 05ed:70:00.0 nvme0 pci1014,6bc U50EE.001.WZS005P-P3-C13 + 1.6TB NVMe Gen4 II U.2 SSD (1014a825) + Manufacturer Name.........IBM + Machine Type-Model........NVMe SSD Controller PM173Xa + Engineering Change Level..P65460 + Field Replaceable Unit Number + ..........................02YC725 + Manufacturer ID...........S6RUNE0T901384 + Part Number of assembly...01CM549 + Serial Number.............ANYH60HA + Alterable ROM Level.......REV.SN66 + Device Specific.(ID)......1.6TB NVMe Gen4 U.2 SSD III + Final Assembly PN.(AN)....02YC721 + Customer Card ID Number.(CC) + ..........................5B52 + Device Specific.(Z0)......101406BC + Device Specific.(Z1)......3.0 + Device Specific.(Z2)......1600 + Device Specific.(Z3)......8.76 + Device Specific.(Z4)......2 + Device Specific.(Z5)......02 + Device Specific.(Z6)......A1800114 + Device Specific.(Z7)......0YA + Device Specific.(Z8)......2901 + Device Specific.(Z9)......08 + Device Specific.(ZA)......0008 + Device Specific.(ZB)......0040 + Device Specific.(ZC)......00 + Device Specific.(YC)......0 + Location Code.(YL)........U50EE.001.WZS005P-P3-C13 + + Signed-off-by: Sathvika Vasireddy + Signed-off-by: Mahesh Salgaonkar + +diff --git a/nvme_templates.conf b/nvme_templates.conf +index 269c0af..473734d 100644 +--- a/nvme_templates.conf ++++ b/nvme_templates.conf +@@ -2,3 +2,5 @@ + "0002", "_:4,ID:40,PN:12,EC:10,FN:12,AN:12,FC:4,CC:4,SN:8,Z0:8,Z1:4,Z2:10,Z3:12,Z4:1,Z5:2,Z6:8,Z7:3,Z8:5,Z9:2,ZA:4,ZB:4,ZC:2,MN:20,RM:8" + "0003", "_:4,ID:40,PN:12,EC:10,FN:12,AN:12,FC:4,CC:4,SN:8,Z0:8,Z1:4,Z2:10,Z3:12,Z4:1,Z5:2,Z6:8,Z7:3,Z8:5,Z9:2,ZA:4,ZB:4,ZC:2,MN:20,RM:8" + "0004", "_:4,ID:40,PN:12,EC:10,FN:12,AN:12,FC:4,CC:4,SN:8,Z0:8,Z1:4,Z2:10,Z3:12,Z4:1,Z5:2,Z6:8,Z7:3,Z8:5,Z9:2,ZA:4,ZB:4,ZC:2,MN:20,RM:8" ++"0005", "_:4,ID:40,PN:12,EC:10,FN:12,AN:12,FC:4,CC:4,SN:8,Z0:8,Z1:4,Z2:10,Z3:12,Z4:1,Z5:2,Z6:8,Z7:3,Z8:5,Z9:2,ZA:4,ZB:4,ZC:2,MN:20,RM:8" ++"0006", "_:4,ID:40,PN:12,EC:10,FN:12,AN:12,FC:4,CC:4,SN:8,Z0:8,Z1:4,Z2:10,Z3:12,Z4:1,Z5:2,Z6:8,Z7:3,Z8:5,Z9:2,ZA:4,ZB:4,ZC:2,MN:20,RM:8" diff --git a/SPECS/lsvpd.spec b/SPECS/lsvpd.spec index 9669a22..d43ae6d 100644 --- a/SPECS/lsvpd.spec +++ b/SPECS/lsvpd.spec @@ -3,7 +3,7 @@ Name: lsvpd Version: 1.7.14 -Release: 2%{?dist} +Release: 4%{?dist} Summary: VPD/hardware inventory utilities for Linux License: GPLv2+ @@ -12,6 +12,8 @@ Source: https://github.com/power-ras/%{name}/archive/v%{version}/%{name}-%{versi Patch0: lsvpd-git1ca39c.patch Patch1: lsvpd-git6ff86f.patch +Patch2: lsvpd-git50e2fa.patch +Patch3: lsvpd-git8b5d2c.patch BuildRequires: gcc-c++ BuildRequires: libvpd-devel >= 2.2.9 @@ -75,6 +77,14 @@ exit 0 %dir %{_sysconfdir}/lsvpd %changelog +* Tue Apr 11 2023 Than Ngo - 1.7.14-4 +- Related: #2181241, backport upstream patch to update update nvme_templates + with logpage format for 0005 and 0006 versions + +* Fri Mar 24 2023 Than Ngo - 1.7.14-3 +- Resolves: #2181241, lsvpd is not reporting the correct I/O microcode + for HBA, PCIe, SAS adapters, HDD, etc + * Sun Feb 05 2023 Than Ngo - 1.7.14-2 - Resolves: #2164975, add NVME f1h log page VPD information