changeset 25236:7459e8d6f008

[illumos-gate merge] commit 7d91603476b740ff8f4c917d71ee5884ab39cb60 12966 imc driver blew up on missing channel commit 777a71cfc7f5d1d0c739d58698fe598f2cdb6f2d 11911 Inconsistent case handling for properties in dladm commit a963a5aa3ca3777616e2475ae05969f48439c694 12947 stand: this statement may fall through commit acdc433c352771bfb6a3cf85e6bc74782da919af 12948 dr_cpu: this statement may fall through commit 6a8fa7ea16d9870b21c82af67a2053cb47ed1fb4 12747 sigsetjmp should allow for 8 byte aligned buffer on amd64 commit 9b65801e8bd9a9007efed89ac479e99b9dab83d1 12950 pcicmu: this statement may fall through commit 6edddafdeaa7f4e95b88c106b4825057c934d52c 12946 want ability to dump smbios data from crash dump commit e98a9323520af2d37dd05c47dd174826c71b0c3a 12951 serengeti: this statement may fall through commit 88b620a7b440907cc75f1955c584204c6b79b6fd 12949 drctl: this statement may fall through
author Jerry Jelinek <jerry.jelinek@joyent.com>
date Wed, 22 Jul 2020 11:45:15 +0000
parents 67c78ce4f29a (current diff) cb6c7dac98cb (diff)
children 4db16368bdda
files manifest usr/src/cmd/mdb/intel/modules/smbios/Makefile usr/src/cmd/mdb/intel/modules/smbios/amd64/Makefile usr/src/lib/libdladm/common/linkprop.c usr/src/pkg/manifests/developer-debug-mdb.mf
diffstat 20 files changed, 304 insertions(+), 35 deletions(-) [+]
line wrap: on
line diff
--- a/manifest	Tue Jul 21 11:47:10 2020 +0000
+++ b/manifest	Wed Jul 22 11:45:15 2020 +0000
@@ -10069,6 +10069,7 @@
 f usr/lib/mdb/kvm/amd64/sctp.so 0555 root sys
 f usr/lib/mdb/kvm/amd64/sd.so 0555 root sys
 f usr/lib/mdb/kvm/amd64/smbfs.so 0555 root sys
+f usr/lib/mdb/kvm/amd64/smbios.so 0555 root sys
 f usr/lib/mdb/kvm/amd64/smbsrv.so 0555 root sys
 f usr/lib/mdb/kvm/amd64/sockfs.so 0555 root sys
 f usr/lib/mdb/kvm/amd64/specfs.so 0555 root sys
--- a/usr/src/cmd/mdb/intel/modules/Makefile	Tue Jul 21 11:47:10 2020 +0000
+++ b/usr/src/cmd/mdb/intel/modules/Makefile	Wed Jul 22 11:45:15 2020 +0000
@@ -27,6 +27,7 @@
 	generic_cpu \
 	amd_opteron \
 	sata \
+	smbios \
 	xhci
 
 include ../../Makefile.subdirs
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mdb/intel/modules/smbios/Makefile	Wed Jul 22 11:45:15 2020 +0000
@@ -0,0 +1,20 @@
+#
+# This file and its contents are supplied under the terms of the
+# Common Development and Distribution License ("CDDL"), version 1.0.
+# You may only use this file in accordance with the terms of version
+# 1.0 of the CDDL.
+#
+# A full copy of the text of the CDDL should have accompanied this
+# source.  A copy of the CDDL is also available via the Internet at
+# http://www.illumos.org/license/CDDL.
+#
+
+#
+# Copyright 2020 Oxide Computer Company
+#
+
+include $(SRC)/Makefile.master
+
+$(BUILD64)SUBDIRS += $(MACH64)
+
+include ../../../Makefile.subdirs
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mdb/intel/modules/smbios/amd64/Makefile	Wed Jul 22 11:45:15 2020 +0000
@@ -0,0 +1,28 @@
+#
+# This file and its contents are supplied under the terms of the
+# Common Development and Distribution License ("CDDL"), version 1.0.
+# You may only use this file in accordance with the terms of version
+# 1.0 of the CDDL.
+#
+# A full copy of the text of the CDDL should have accompanied this
+# source.  A copy of the CDDL is also available via the Internet at
+# http://www.illumos.org/license/CDDL.
+#
+
+#
+# Copyright 2020 Oxide Computer Company
+#
+
+
+MODULE = smbios.so
+MDBTGT = kvm
+
+MODSRCS = smbios.c
+
+include ../../../../../Makefile.cmd
+include ../../../../../Makefile.cmd.64
+include ../../../Makefile.amd64
+include ../../../../Makefile.module
+
+MODULE_BUILD_TYPE = mdb
+LDLIBS += -lsmbios
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mdb/intel/modules/smbios/smbios.c	Wed Jul 22 11:45:15 2020 +0000
@@ -0,0 +1,136 @@
+/*
+ * This file and its contents are supplied under the terms of the
+ * Common Development and Distribution License ("CDDL"), version 1.0.
+ * You may only use this file in accordance with the terms of version
+ * 1.0 of the CDDL.
+ *
+ * A full copy of the text of the CDDL should have accompanied this
+ * source.  A copy of the CDDL is also available via the Internet at
+ * http://www.illumos.org/license/CDDL.
+ */
+
+/*
+ * Copyright 2020 Oxide Computer Company
+ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <sys/mdb_modapi.h>
+#include <sys/smbios_impl.h>
+#include <unistd.h>
+
+/*
+ * Unfortunately, we're in a bit of a bind. Because of the situation we're in,
+ * we cannot use string.h directly as it declares ffs() which is also declared
+ * in sys/systm.h. sys/systm.h is being pulled in because mdb is building with
+ * _KERNEL. Therefore we have to manually declare an extern delaration for
+ * strerror().
+ */
+extern const char *strerror(int);
+
+/*
+ * Take an existing smbios_hdl_t from a dump and slurp out its memory so we can
+ * open up a new smbios handle to perform operations on.
+ */
+static int
+smbios_mdb_write(const char *path, uintptr_t addr)
+{
+	smbios_hdl_t shp, *hdl;
+	void *buf;
+	int err, fd = -1;
+	int ret = DCMD_ERR;
+
+	if (mdb_vread(&shp, sizeof (shp), addr) != sizeof (shp)) {
+		mdb_warn("failed to read smbios_hdl_t at %p", addr);
+		return (DCMD_ERR);
+	}
+
+	buf = mdb_alloc(shp.sh_buflen, UM_NOSLEEP | UM_GC);
+	if (buf == NULL) {
+		mdb_warn("failed to allocate %zu bytes for the smbios "
+		    "data buffer", shp.sh_buflen);
+		return (DCMD_ERR);
+	}
+
+	if (mdb_vread(buf, shp.sh_buflen, (uintptr_t)shp.sh_buf) !=
+	    shp.sh_buflen) {
+		mdb_warn("failed to copy smbios data at %p", shp.sh_buf);
+		return (DCMD_ERR);
+	}
+
+	hdl = smbios_bufopen(&shp.sh_ent, buf, shp.sh_buflen, SMB_VERSION, 0,
+	    &err);
+	if (hdl == NULL) {
+		mdb_warn("failed to load smbios data: %s\n",
+		    smbios_errmsg(err));
+		return (DCMD_ERR);
+	}
+
+	if ((fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0666)) < 0) {
+		mdb_warn("failed to open output file %s: %s\n", path,
+		    strerror(errno));
+		goto out;
+	}
+
+	if (smbios_write(hdl, fd) != 0) {
+		mdb_warn("failed to write smbios data to %s: %s\n", path,
+		    smbios_errmsg(smbios_errno(hdl)));
+		ret = DCMD_ERR;
+	} else {
+		ret = DCMD_OK;
+	}
+out:
+	if (fd != -1) {
+		(void) close(fd);
+	}
+	smbios_close(hdl);
+	return (ret);
+}
+
+static int
+smbios_mdb_smbios(uintptr_t addr, uint_t flags, int argc,
+    const mdb_arg_t *argv)
+{
+	const char *wpath = NULL;
+
+	if (!(flags & DCMD_ADDRSPEC)) {
+		mdb_warn("missing required smbios_hdl_t\n");
+		return (DCMD_USAGE);
+	}
+
+	if (mdb_getopts(argc, argv, 'w', MDB_OPT_STR, &wpath, NULL) != argc) {
+		return (DCMD_USAGE);
+	}
+
+	if (wpath != NULL) {
+		return (smbios_mdb_write(wpath, addr));
+	}
+
+	return (DCMD_USAGE);
+}
+
+static void
+smbios_mdb_help(void)
+{
+	mdb_printf("Given a pointer to an smbios_hdl_t take the following "
+	    "actions:\n\n"
+	    "\t-w path\t\tWrite SMBIOS data out to path\n");
+}
+
+static const mdb_dcmd_t smbios_dcmds[] = {
+	{ "smbios", ":[-w path]", "Manipulate an smbios handle",
+	    smbios_mdb_smbios, smbios_mdb_help },
+	{ NULL }
+};
+
+static const mdb_modinfo_t smbios_modinfo = {
+	MDB_API_VERSION, smbios_dcmds, NULL
+};
+
+const mdb_modinfo_t *
+_mdb_init(void)
+{
+	return (&smbios_modinfo);
+}
--- a/usr/src/lib/libc/amd64/gen/siglongjmp.c	Tue Jul 21 11:47:10 2020 +0000
+++ b/usr/src/lib/libc/amd64/gen/siglongjmp.c	Wed Jul 22 11:45:15 2020 +0000
@@ -29,6 +29,7 @@
 #include <sys/ucontext.h>
 #include <setjmp.h>
 #include <ucontext.h>
+#include "sigjmp_struct.h"
 #include "libc.h"
 
 #pragma weak _siglongjmp = siglongjmp
@@ -36,8 +37,7 @@
 void
 siglongjmp(sigjmp_buf env, int val)
 {
-	/* LINTED alignment */
-	ucontext_t *ucp = (ucontext_t *)env;
+	ucontext_t *ucp = SIGJMP2UCONTEXT(env);
 
 	if (val)
 		ucp->uc_mcontext.gregs[REG_R0] = val;
--- a/usr/src/lib/libc/amd64/threads/asm_subr.s	Tue Jul 21 11:47:10 2020 +0000
+++ b/usr/src/lib/libc/amd64/threads/asm_subr.s	Wed Jul 22 11:45:15 2020 +0000
@@ -104,7 +104,11 @@
 
 #undef	sigsetjmp
 
-#if SIZEOF_SIGJMP_BUF < SIZEOF_UCONTEXT_T
+/*
+ * Ensure that a "ucontext_t" will fit within a "sigjmp_buf", including the
+ * extra 8 bytes we may need for correct alignment on AMD64.
+ */
+#if SIZEOF_SIGJMP_BUF - _LONG_ALIGNMENT < SIZEOF_UCONTEXT_T
 
 #error "sigjmp_buf is too small to contain a ucontext_t"
 
@@ -171,4 +175,4 @@
 	SET_SIZE(sigsetjmp)
 	SET_SIZE(_sigsetjmp)
 
-#endif	/* SIZEOF_SIGJMP_BUF < SIZEOF_UCONTEXT_T */
+#endif	/* SIZEOF_SIGJMP_BUF - _LONG_ALIGNMENT < SIZEOF_UCONTEXT_T */
--- a/usr/src/lib/libc/amd64/threads/machdep.c	Tue Jul 21 11:47:10 2020 +0000
+++ b/usr/src/lib/libc/amd64/threads/machdep.c	Wed Jul 22 11:45:15 2020 +0000
@@ -28,6 +28,7 @@
 #include <procfs.h>
 #include <ucontext.h>
 #include <setjmp.h>
+#include "sigjmp_struct.h"
 
 extern int getlwpstatus(thread_t, lwpstatus_t *);
 extern int putlwpregs(thread_t, prgregset_t);
@@ -66,7 +67,7 @@
 
 int
 setup_context(ucontext_t *ucp, void *(*func)(ulwp_t *),
-	ulwp_t *ulwp, caddr_t stk, size_t stksize)
+    ulwp_t *ulwp, caddr_t stk, size_t stksize)
 {
 	uint64_t *stack;
 
@@ -172,8 +173,7 @@
 int
 __csigsetjmp(sigjmp_buf env, int savemask, gregset_t rs)
 {
-	/* LINTED alignment */
-	ucontext_t *ucp = (ucontext_t *)env;
+	ucontext_t *ucp = SIGJMP2UCONTEXT(env);
 	ulwp_t *self = curthread;
 
 	ucp->uc_link = self->ul_siglink;
--- a/usr/src/lib/libc/inc/sigjmp_struct.h	Tue Jul 21 11:47:10 2020 +0000
+++ b/usr/src/lib/libc/inc/sigjmp_struct.h	Wed Jul 22 11:45:15 2020 +0000
@@ -32,6 +32,7 @@
 
 #include <sys/types.h>
 #include <sys/stack.h>
+#include <sys/sysmacros.h>
 #include <ucontext.h>
 #include <setjmp.h>
 
@@ -73,6 +74,20 @@
 
 #endif	/* __sparc */
 
+#if defined(__amd64)
+/*
+ * The "sigjmp_buf" type is an array of long and thus can have 8-byte alignment
+ * on AMD64 systems.  The "ucontext_t" type has a stricter 16-byte alignment
+ * requirement, so we must round the pointer up when casting.
+ *
+ * This is not required on other architectures:
+ *  - SPARC does not store the ucontext_t in the sigjmp_buf
+ *  - i386 only requires 4-byte alignment for ucontext_t
+ */
+#define	SIGJMP2UCONTEXT(x)	\
+	((ucontext_t *)P2ROUNDUP((uintptr_t)(x),  sizeof (upad128_t)))
+#endif
+
 #ifdef	__cplusplus
 }
 #endif
--- a/usr/src/lib/libdladm/common/linkprop.c	Tue Jul 21 11:47:10 2020 +0000
+++ b/usr/src/lib/libdladm/common/linkprop.c	Wed Jul 22 11:45:15 2020 +0000
@@ -1131,6 +1131,21 @@
 	}
 
 	/*
+	 * For well-known property names, normalize the case.  We can also
+	 * save the property name itself, so that we can just do a pointer
+	 * equality test later and avoid an extra strcmp.
+	 */
+	if (prop_name != NULL) {
+		int i;
+		for (i = 0; i < DLADM_MAX_PROPS; i++) {
+			if (strcasecmp(prop_name, prop_table[i].pd_name) == 0) {
+				prop_name = prop_table[i].pd_name;
+				break;
+			}
+		}
+	}
+
+	/*
 	 * Check for valid link property against the flags passed
 	 * and set the link property when active flag is passed.
 	 */
@@ -1160,7 +1175,7 @@
 				if (!(pdp->pd_flags & PD_AFTER_PERM))
 					continue;
 				if (prop_name != NULL &&
-				    strcasecmp(prop_name, pdp->pd_name) != 0)
+				    prop_name != pdp->pd_name)
 					continue;
 				status = pdp->pd_set(handle, pdp, linkid, NULL,
 				    0, flags, 0);
@@ -1240,9 +1255,12 @@
 	    prop_val == NULL || val_cntp == NULL || *val_cntp == 0)
 		return (DLADM_STATUS_BADARG);
 
-	for (i = 0; i < DLADM_MAX_PROPS; i++)
-		if (strcasecmp(prop_name, prop_table[i].pd_name) == 0)
+	for (i = 0; i < DLADM_MAX_PROPS; i++) {
+		if (strcasecmp(prop_name, prop_table[i].pd_name) == 0) {
+			prop_name = prop_table[i].pd_name;
 			break;
+		}
+	}
 
 	if (i == DLADM_MAX_PROPS) {
 		if (prop_name[0] == '_') {
@@ -1372,9 +1390,12 @@
 	    ret_val == NULL || val_cntp == NULL || *val_cntp == 0)
 		return (DLADM_STATUS_BADARG);
 
-	for (pdp = prop_table; pdp < prop_table + DLADM_MAX_PROPS; pdp++)
-		if (strcasecmp(prop_name, pdp->pd_name) == 0)
+	for (pdp = prop_table; pdp < prop_table + DLADM_MAX_PROPS; pdp++) {
+		if (strcasecmp(prop_name, pdp->pd_name) == 0) {
+			prop_name = pdp->pd_name;
 			break;
+		}
+	}
 
 	if (pdp == prop_table + DLADM_MAX_PROPS)
 		return (DLADM_STATUS_NOTFOUND);
--- a/usr/src/pkg/manifests/developer-debug-mdb.mf	Tue Jul 21 11:47:10 2020 +0000
+++ b/usr/src/pkg/manifests/developer-debug-mdb.mf	Wed Jul 22 11:45:15 2020 +0000
@@ -200,6 +200,7 @@
 file path=usr/lib/mdb/kvm/$(ARCH64)/scsi_vhci.so group=sys mode=0555
 file path=usr/lib/mdb/kvm/$(ARCH64)/sctp.so group=sys mode=0555
 file path=usr/lib/mdb/kvm/$(ARCH64)/sd.so group=sys mode=0555
+$(i386_ONLY)file path=usr/lib/mdb/kvm/$(ARCH64)/smbios.so group=sys mode=0555
 file path=usr/lib/mdb/kvm/$(ARCH64)/sockfs.so group=sys mode=0555
 file path=usr/lib/mdb/kvm/$(ARCH64)/specfs.so group=sys mode=0555
 file path=usr/lib/mdb/kvm/$(ARCH64)/sppp.so group=sys mode=0555
--- a/usr/src/stand/lib/inet/ipv4.c	Tue Jul 21 11:47:10 2020 +0000
+++ b/usr/src/stand/lib/inet/ipv4.c	Wed Jul 22 11:45:15 2020 +0000
@@ -219,7 +219,7 @@
 	ipp = fragment[first_frag].ipp;
 	for (i = 0; i < FRAG_MAX; i++) {
 		if (fragment[i].mp != NULL && ip_id != fragment[i].ipid &&
-			fragment[i].ipp != ipp) {
+		    fragment[i].ipp != ipp) {
 #ifdef FRAG_DEBUG
 			printf("ipv4: Frag id mismatch: %x != %x\n",
 			    fragment[i].ipid, ip_id);
@@ -342,7 +342,7 @@
 {
 	static	int	routing_table_initialized;
 	int		index;
-	uint8_t 	tmp_flag;
+	uint8_t		tmp_flag;
 
 	if (gatewayp == NULL) {
 		errno = EINVAL;
@@ -383,8 +383,10 @@
 			table[index].flag = RT_UNUSED;
 			table[index].dest.s_addr = htonl(INADDR_ANY);
 			table[index].gateway.s_addr = htonl(INADDR_ANY);
-		} else
+		} else {
 			table[index].flag = RT_NG;
+		}
+		break;
 	default:
 		errno = EINVAL;
 		return (-1);
@@ -716,7 +718,7 @@
 		iphp = (struct ip *)igp->igm_mp->b_rptr;
 		if (iphp->ip_v != IPVERSION) {
 			dprintf("ipv4_input(%d): IPv%d datagram discarded\n",
-			index, iphp->ip_v);
+			    index, iphp->ip_v);
 			del_gram(&sockets[index].inq, igp, TRUE);
 			continue;
 		}
@@ -1080,7 +1082,7 @@
 
 	/* Routing necessary? */
 	if (((datagram.igm_oflags & MSG_DONTROUTE) == 0) &&
-		((iph->ip_dst.s_addr & netmask.s_addr) != mynet.s_addr)) {
+	    ((iph->ip_dst.s_addr & netmask.s_addr) != mynet.s_addr)) {
 		if ((rip = ipv4_get_route(RT_HOST, &iph->ip_dst,
 		    NULL)) == NULL) {
 			rip = ipv4_get_route(RT_DEFAULT, NULL, NULL);
@@ -1141,7 +1143,7 @@
 	while ((c = *cp) != '\0') {
 		if (isdigit(c)) {
 			if ((c - '0') >= base)
-			    break;
+				break;
 			val = (val * base) + (c - '0');
 			cp++;
 			continue;
@@ -1186,20 +1188,20 @@
 
 	case 2:				/* a.b -- 8.24 bits */
 		if (parts[1] > 0xffffff)
-		    return ((uint32_t)-1);
+			return ((uint32_t)-1);
 		val = (parts[0] << 24) | (parts[1] & 0xffffff);
 		break;
 
 	case 3:				/* a.b.c -- 8.8.16 bits */
 		if (parts[2] > 0xffff)
-		    return ((uint32_t)-1);
+			return ((uint32_t)-1);
 		val = (parts[0] << 24) | ((parts[1] & 0xff) << 16) |
-			(parts[2] & 0xffff);
+		    (parts[2] & 0xffff);
 		break;
 
 	case 4:				/* a.b.c.d -- 8.8.8.8 bits */
 		if (parts[3] > 0xff)
-		    return ((uint32_t)-1);
+			return ((uint32_t)-1);
 		val = (parts[0] << 24) | ((parts[1] & 0xff) << 16) |
 		    ((parts[2] & 0xff) << 8) | (parts[3] & 0xff);
 		break;
--- a/usr/src/stand/lib/sock/socket.c	Tue Jul 21 11:47:10 2020 +0000
+++ b/usr/src/stand/lib/sock/socket.c	Wed Jul 22 11:45:15 2020 +0000
@@ -25,8 +25,6 @@
  * socket.c, Code implementing a simple socket interface.
  */
 
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
 #include <sys/types.h>
 #include "socket_impl.h"
 #include <sys/isa_defs.h>
@@ -85,7 +83,7 @@
  *
  * Notes:
  *	Only PF_INET communication domains are supported. Within
- * 	this domain, only SOCK_RAW, SOCK_DGRAM and SOCK_STREAM types are
+ *	this domain, only SOCK_RAW, SOCK_DGRAM and SOCK_STREAM types are
  *	supported.
  */
 int
@@ -242,6 +240,7 @@
 				*optlen = 0;
 				errno = EINVAL;
 			}
+			break;
 		default:
 			errno = ENOPROTOOPT;
 			break;
--- a/usr/src/uts/i86pc/io/imc/imc.c	Tue Jul 21 11:47:10 2020 +0000
+++ b/usr/src/uts/i86pc/io/imc/imc.c	Wed Jul 22 11:45:15 2020 +0000
@@ -932,6 +932,40 @@
 }
 
 /*
+ * In the wild we've hit a few odd cases where not all devices are exposed that
+ * we might expect by firmware. In particular we've seen and validate the
+ * following cases:
+ *
+ *  o We don't find all of the channel devices that we expect, e.g. we have the
+ *    stubs for channels 1-3, but not 0. That has been seen on an Intel S2600CW
+ *    with an E5-2630v3.
+ */
+static boolean_t
+imc_validate_stubs(imc_t *imc)
+{
+	for (uint_t sock = 0; sock < imc->imc_nsockets; sock++) {
+		imc_socket_t *socket = &imc->imc_sockets[sock];
+
+		for (uint_t mc = 0; mc < socket->isock_nimc; mc++) {
+			imc_mc_t *mcp = &socket->isock_imcs[mc];
+
+			for (uint_t chan = 0; chan < mcp->icn_nchannels;
+			    chan++) {
+				if (mcp->icn_channels[chan].ich_desc == NULL) {
+					dev_err(imc->imc_dip, CE_WARN,
+					    "!missing device for socket %u/"
+					    "imc %u/channel %u", sock, mc,
+					    chan);
+					return (B_FALSE);
+				}
+			}
+		}
+	}
+
+	return (B_TRUE);
+}
+
+/*
  * Attempt to map all of the discovered sockets to the corresponding APIC based
  * socket. We do these mappings by getting the node id of the socket and
  * adjusting it to make sure that no home agent is present in it. We use the
@@ -2194,6 +2228,11 @@
 		goto done;
 	}
 
+	if (!imc_validate_stubs(imc)) {
+		imc->imc_flags |= IMC_F_VALIDATE_FAILED;
+		goto done;
+	}
+
 	imc_fixup_stubs(imc);
 	imc_map_sockets(imc);
 
--- a/usr/src/uts/i86pc/io/imc/imc.h	Tue Jul 21 11:47:10 2020 +0000
+++ b/usr/src/uts/i86pc/io/imc/imc.h	Wed Jul 22 11:45:15 2020 +0000
@@ -500,12 +500,13 @@
 	IMC_F_SCAN_COMPLETE	= (1 << 2),
 	IMC_F_ATTACH_DISPATCHED	= (1 << 3),
 	IMC_F_ATTACH_COMPLETE	= (1 << 4),
-	IMC_F_MCREG_FAILED	= (1 << 5)
+	IMC_F_MCREG_FAILED	= (1 << 5),
+	IMC_F_VALIDATE_FAILED	= (1 << 6)
 } imc_flags_t;
 
 #define	IMC_F_ALL_FLAGS	(IMC_F_UNSUP_PLATFORM | IMC_F_SCAN_DISPATCHED | \
     IMC_F_SCAN_COMPLETE | IMC_F_ATTACH_DISPATCHED | IMC_F_ATTACH_COMPLETE | \
-    IMC_F_MCREG_FAILED)
+    IMC_F_MCREG_FAILED | IMC_F_VALIDATE_FAILED)
 
 typedef enum imc_dimm_type {
 	IMC_DIMM_UNKNOWN,
--- a/usr/src/uts/sun4u/opl/io/oplmsu/oplmsu_ioctl_uwp.c	Tue Jul 21 11:47:10 2020 +0000
+++ b/usr/src/uts/sun4u/opl/io/oplmsu/oplmsu_ioctl_uwp.c	Wed Jul 22 11:45:15 2020 +0000
@@ -221,7 +221,7 @@
 			 * When traditional_status isn't MSU_SETID,
 			 * the error is reported.
 			 */
-
+			/* FALLTHROUGH */
 		default :
 			/*
 			 * When upath->status isn't MSU_PSTAT_STOP or
--- a/usr/src/uts/sun4u/opl/io/pcicmu/pcmu_util.c	Tue Jul 21 11:47:10 2020 +0000
+++ b/usr/src/uts/sun4u/opl/io/pcicmu/pcmu_util.c	Wed Jul 22 11:45:15 2020 +0000
@@ -137,7 +137,7 @@
  */
 int
 pcmu_reloc_reg(dev_info_t *dip, dev_info_t *rdip, pcmu_t *pcmu_p,
-	pci_regspec_t *rp)
+    pci_regspec_t *rp)
 {
 	int assign_len, assign_entries, i;
 	pci_regspec_t *assign_p;
@@ -507,11 +507,11 @@
 
 			switch (pci_err_tbl[i].reg_bit) {
 			case PCI_STAT_R_MAST_AB:
-				aux_msg = "Recieved Master Abort";
-				/* LINTED fallthrough on case statement */
+				aux_msg = "Receieved Master Abort";
+				/* FALLTHROUGH */
 			case PCI_STAT_R_TARG_AB:
 				if (aux_msg != NULL)
-					aux_msg = "Recieved Target Abort";
+					aux_msg = "Receieved Target Abort";
 				if (prierr) {
 					/*
 					 * piow case are already handled in
@@ -675,7 +675,7 @@
 
 void
 pcmu_debug(uint64_t flag, dev_info_t *dip, char *fmt,
-	uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5)
+    uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5)
 {
 	char *s = "pcmu unknown";
 	uint_t cont = 0;
--- a/usr/src/uts/sun4u/os/plat_ecc_unum.c	Tue Jul 21 11:47:10 2020 +0000
+++ b/usr/src/uts/sun4u/os/plat_ecc_unum.c	Wed Jul 22 11:45:15 2020 +0000
@@ -853,6 +853,7 @@
 			if (plat_ecc_capability_map_sc &
 			    PLAT_ECC_CAPABILITY_DIMM_SID)
 				return (1);
+			/* FALLTHROUGH */
 		default:
 			return (0);
 	}
--- a/usr/src/uts/sun4v/io/dr_cpu.c	Tue Jul 21 11:47:10 2020 +0000
+++ b/usr/src/uts/sun4v/io/dr_cpu.c	Wed Jul 22 11:45:15 2020 +0000
@@ -411,7 +411,7 @@
 	case DR_CPU_FORCE_UNCONFIG:
 		drctl_flags = DRCTL_FLAG_FORCE;
 		force = B_TRUE;
-		_NOTE(FALLTHROUGH)
+		/* FALLTHROUGH */
 	case DR_CPU_UNCONFIGURE:
 		dr_fn = dr_cpu_unconfigure;
 		drctl_cmd = DRCTL_CPU_UNCONFIG_REQUEST;
--- a/usr/src/uts/sun4v/io/drctl_impl.c	Tue Jul 21 11:47:10 2020 +0000
+++ b/usr/src/uts/sun4v/io/drctl_impl.c	Wed Jul 22 11:45:15 2020 +0000
@@ -124,7 +124,7 @@
 		switch (up_err) {
 		case EINTR:
 			DR_DBG_CTL("%s: door call returned EINTR\n", me);
-			_NOTE(FALLTHROUGH)
+			/* FALLTHROUGH */
 		case EAGAIN:
 			/*
 			 * Server process may be forking, try again.