import CS lsvpd-1.7.14-4.el9
This commit is contained in:
		
							parent
							
								
									95ed593262
								
							
						
					
					
						commit
						2621a7d59f
					
				
							
								
								
									
										141
									
								
								SOURCES/lsvpd-git50e2fa.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										141
									
								
								SOURCES/lsvpd-git50e2fa.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,141 @@ | ||||
| commit 50e2fa22298de13fd731488306d2cbd0081730d8 | ||||
| Author: Sathvika Vasireddy <sv@linux.ibm.com> | ||||
| 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 <borislav.stoymirski@bg.ibm.com> | ||||
|     Signed-off-by: Sathvika Vasireddy <sv@linux.ibm.com> | ||||
|     Signed-off-by: Mahesh Salgaonkar <mahesh@linux.ibm.com> | ||||
|     Tested-by: Borislav Stoymirski <borislav.stoymirski@bg.ibm.com> | ||||
| 
 | ||||
| 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 <fstream> | ||||
|  #include <cstring> | ||||
|  #include <bitset> | ||||
| +#include <iostream>
 | ||||
| +#include <dirent.h>
 | ||||
| +#include <string.h>
 | ||||
|   | ||||
|  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 ) | ||||
							
								
								
									
										76
									
								
								SOURCES/lsvpd-git8b5d2c.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								SOURCES/lsvpd-git8b5d2c.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,76 @@ | ||||
| commit 8b5d2cfb7d1a6731e72198e7c71fa5bfad1ff0ec | ||||
| Author: Sathvika Vasireddy <sv@linux.ibm.com> | ||||
| 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 <sv@linux.ibm.com> | ||||
|     Signed-off-by: Mahesh Salgaonkar <mahesh@linux.ibm.com> | ||||
| 
 | ||||
| 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"
 | ||||
| @ -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 <than@redhat.com> - 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 <than@redhat.com> - 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 <than@redhat.com> - 1.7.14-2 | ||||
| - Resolves: #2164975, add NVME f1h log page VPD information  | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user