svn commit: r328710 - stable/11/sbin/nvmecontrol

Alexander Motin mav at FreeBSD.org
Thu Feb 1 19:32:46 UTC 2018


Author: mav
Date: Thu Feb  1 19:32:45 2018
New Revision: 328710
URL: https://svnweb.freebsd.org/changeset/base/328710

Log:
  MFC r309413 (by imp):
  Flag the vendor specific pages as such. This allows different decoding
  for the same page number as different vendors encode vendor specific
  pages differently.

Modified:
  stable/11/sbin/nvmecontrol/logpage.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sbin/nvmecontrol/logpage.c
==============================================================================
--- stable/11/sbin/nvmecontrol/logpage.c	Thu Feb  1 19:31:39 2018	(r328709)
+++ stable/11/sbin/nvmecontrol/logpage.c	Thu Feb  1 19:32:45 2018	(r328710)
@@ -793,23 +793,23 @@ print_hgst_info_log(void *buf, uint32_t size __unused)
  */
 static struct logpage_function {
 	uint8_t		log_page;
+	const char     *vendor;
 	print_fn_t	print_fn;
 	size_t		size;
 } logfuncs[] = {
-	{NVME_LOG_ERROR,		print_log_error,
+	{NVME_LOG_ERROR,		NULL,	print_log_error,
 	 0},
-	{NVME_LOG_HEALTH_INFORMATION,	print_log_health,
+	{NVME_LOG_HEALTH_INFORMATION,	NULL,	print_log_health,
 	 sizeof(struct nvme_health_information_page)},
-	{NVME_LOG_FIRMWARE_SLOT,	print_log_firmware,
+	{NVME_LOG_FIRMWARE_SLOT,	NULL,	print_log_firmware,
 	 sizeof(struct nvme_firmware_page)},
-	{INTEL_LOG_TEMP_STATS,		print_intel_temp_stats,
+	{INTEL_LOG_TEMP_STATS,		"intel", print_intel_temp_stats,
 	 sizeof(struct intel_log_temp_stats)},
-	{INTEL_LOG_ADD_SMART,		print_intel_add_smart,
+	{INTEL_LOG_ADD_SMART,		"intel", print_intel_add_smart,
 	 DEFAULT_SIZE},
-	{HGST_INFO_LOG,			print_hgst_info_log,
+	{HGST_INFO_LOG,			"hgst",	print_hgst_info_log,
 	 DEFAULT_SIZE},
-	{0,				NULL,
-	 0},
+	{0,				NULL,	NULL,	 0},
 };
 
 static void
@@ -830,11 +830,12 @@ logpage(int argc, char *argv[])
 	char				cname[64];
 	uint32_t			size;
 	void				*buf;
+	const char			*vendor = NULL;
 	struct logpage_function		*f;
 	struct nvme_controller_data	cdata;
 	print_fn_t			print_fn;
 
-	while ((ch = getopt(argc, argv, "p:x")) != -1) {
+	while ((ch = getopt(argc, argv, "p:xv:")) != -1) {
 		switch (ch) {
 		case 'p':
 			/* TODO: Add human-readable ASCII page IDs */
@@ -850,6 +851,9 @@ logpage(int argc, char *argv[])
 		case 'x':
 			hexflag = true;
 			break;
+		case 'v':
+			vendor = optarg;
+			break;
 		}
 	}
 
@@ -893,18 +897,21 @@ logpage(int argc, char *argv[])
 	size = DEFAULT_SIZE;
 	if (!hexflag) {
 		/*
-		 * See if there is a pretty print function for the
-		 *  specified log page.  If one isn't found, we
-		 *  just revert to the default (print_hex).
+		 * See if there is a pretty print function for the specified log
+		 * page.  If one isn't found, we just revert to the default
+		 * (print_hex). If there was a vendor specified bt the user, and
+		 * the page is vendor specific, don't match the print function
+		 * unless the vendors match.
 		 */
-		f = logfuncs;
-		while (f->log_page > 0) {
-			if (log_page == f->log_page) {
-				print_fn = f->print_fn;
-				size = f->size;
-				break;
-			}
-			f++;
+		for (f = logfuncs; f->log_page > 0; f++) {
+			if (f->vendor != NULL && vendor != NULL &&
+			    strcmp(f->vendor, vendor) != 0)
+				continue;
+			if (log_page != f->log_page)
+				continue;
+			print_fn = f->print_fn;
+			size = f->size;
+			break;
 		}
 	}
 


More information about the svn-src-all mailing list