svn commit: r348023 - in user/ngie/bug-237403: cddl/contrib/opensolaris/lib/libzfs/common lib/csu/mips lib/libarchive/tests share/man/man9 stand/common stand/ofw/libofw stand/powerpc/boot1.chrp sta...

Enji Cooper ngie at FreeBSD.org
Tue May 21 00:08:00 UTC 2019


Author: ngie
Date: Tue May 21 00:07:53 2019
New Revision: 348023
URL: https://svnweb.freebsd.org/changeset/base/348023

Log:
  MFhead at r348022

Added:
  user/ngie/bug-237403/share/man/man9/DEFINE_IFUNC.9
     - copied unchanged from r348022, head/share/man/man9/DEFINE_IFUNC.9
Modified:
  user/ngie/bug-237403/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_diff.c
  user/ngie/bug-237403/lib/csu/mips/crtn.S
  user/ngie/bug-237403/lib/libarchive/tests/Makefile
  user/ngie/bug-237403/share/man/man9/DRIVER_MODULE.9
  user/ngie/bug-237403/share/man/man9/Makefile
  user/ngie/bug-237403/stand/common/load_elf.c
  user/ngie/bug-237403/stand/ofw/libofw/ofw_net.c
  user/ngie/bug-237403/stand/ofw/libofw/openfirm.c
  user/ngie/bug-237403/stand/powerpc/boot1.chrp/boot1.c
  user/ngie/bug-237403/stand/powerpc/kboot/Makefile
  user/ngie/bug-237403/stand/powerpc/kboot/main.c
  user/ngie/bug-237403/stand/powerpc/ofw/elf_freebsd.c
  user/ngie/bug-237403/stand/powerpc/ofw/ppc64_elf_freebsd.c
  user/ngie/bug-237403/sys/dev/netmap/netmap_freebsd.c
  user/ngie/bug-237403/sys/dev/usb/net/if_muge.c
  user/ngie/bug-237403/sys/dev/usb/net/if_mugereg.h
  user/ngie/bug-237403/sys/kern/kern_kcov.c
  user/ngie/bug-237403/sys/mips/mediatek/mtk_spi_v1.c
  user/ngie/bug-237403/sys/netinet/netdump/netdump_client.c
  user/ngie/bug-237403/tests/sys/opencrypto/runtests.sh
  user/ngie/bug-237403/tests/sys/sys/rb_test.c
  user/ngie/bug-237403/tests/sys/sys/splay_test.c
Directory Properties:
  user/ngie/bug-237403/   (props changed)
  user/ngie/bug-237403/cddl/   (props changed)
  user/ngie/bug-237403/cddl/contrib/opensolaris/   (props changed)
  user/ngie/bug-237403/cddl/contrib/opensolaris/lib/libzfs/   (props changed)

Modified: user/ngie/bug-237403/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_diff.c
==============================================================================
--- user/ngie/bug-237403/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_diff.c	Tue May 21 00:04:19 2019	(r348022)
+++ user/ngie/bug-237403/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_diff.c	Tue May 21 00:07:53 2019	(r348023)
@@ -114,7 +114,7 @@ get_stats_for_obj(differ_info_t *di, const char *dsnam
 		(void) snprintf(di->errbuf, sizeof (di->errbuf),
 		    dgettext(TEXT_DOMAIN,
 		    "Unable to determine path or stats for "
-		    "object %lld in %s"), obj, dsname);
+		    "object %jd in %s"), (uintmax_t)obj, dsname);
 		return (-1);
 	}
 }
@@ -406,8 +406,8 @@ write_free_diffs(FILE *fp, differ_info_t *di, dmu_diff
 		} else {
 			(void) snprintf(di->errbuf, sizeof (di->errbuf),
 			    dgettext(TEXT_DOMAIN,
-			    "next allocated object (> %lld) find failure"),
-			    zc.zc_obj);
+			    "next allocated object (> %jd) find failure"),
+			    (uintmax_t)zc.zc_obj);
 			di->zerr = errno;
 			break;
 		}

Modified: user/ngie/bug-237403/lib/csu/mips/crtn.S
==============================================================================
--- user/ngie/bug-237403/lib/csu/mips/crtn.S	Tue May 21 00:04:19 2019	(r348022)
+++ user/ngie/bug-237403/lib/csu/mips/crtn.S	Tue May 21 00:07:53 2019	(r348023)
@@ -5,7 +5,6 @@ __FBSDID("$FreeBSD$");
 	.gnu_attribute 4, 0
 #endif
 	.section .init,"ax",%progbits
-	.align 4
 	.set noreorder
 #if defined(__ABICALLS__) && (defined(__mips_n32) || defined(__mips_n64))
 	REG_L	gp, CALLFRAME_GP(sp)
@@ -16,7 +15,6 @@ __FBSDID("$FreeBSD$");
 	.set reorder
 
 	.section .fini,"ax",%progbits
-	.align 4
 	.set noreorder
 #if defined(__ABICALLS__) && (defined(__mips_n32) || defined(__mips_n64))
 	REG_L	gp, CALLFRAME_GP(sp)

Modified: user/ngie/bug-237403/lib/libarchive/tests/Makefile
==============================================================================
--- user/ngie/bug-237403/lib/libarchive/tests/Makefile	Tue May 21 00:04:19 2019	(r348022)
+++ user/ngie/bug-237403/lib/libarchive/tests/Makefile	Tue May 21 00:07:53 2019	(r348023)
@@ -557,6 +557,7 @@ ${PACKAGE}FILES+=	test_read_format_ustar_filename_eucj
 ${PACKAGE}FILES+=	test_read_format_ustar_filename_koi8r.tar.Z.uu
 ${PACKAGE}FILES+=	test_read_format_warc.warc.uu
 ${PACKAGE}FILES+=	test_read_format_zip.zip.uu
+${PACKAGE}FILES+=	test_read_format_zip_7075_utf8_paths.zip.uu
 ${PACKAGE}FILES+=	test_read_format_zip_bz2_hang.zip.uu
 ${PACKAGE}FILES+=	test_read_format_zip_bzip2.zipx.uu
 ${PACKAGE}FILES+=	test_read_format_zip_bzip2_multi.zipx.uu

Copied: user/ngie/bug-237403/share/man/man9/DEFINE_IFUNC.9 (from r348022, head/share/man/man9/DEFINE_IFUNC.9)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/ngie/bug-237403/share/man/man9/DEFINE_IFUNC.9	Tue May 21 00:07:53 2019	(r348023, copy of r348022, head/share/man/man9/DEFINE_IFUNC.9)
@@ -0,0 +1,143 @@
+.\" Copyright (c) 2019 The FreeBSD Foundation
+.\"
+.\" This documentation was written by Mark Johnston <markj at FreeBSD.org>
+.\" under sponsorship from the FreeBSD Foundation.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd May 18, 2019
+.Dt DEFINE_IFUNC 9
+.Os
+.Sh NAME
+.Nm DEFINE_IFUNC
+.Nd define a kernel function with an implementation selected at run-time
+.Sh SYNOPSIS
+.In machine/ifunc.h
+.Fn DEFINE_IFUNC qual ret_type name args
+.Sh DESCRIPTION
+ifuncs are a linker feature which allows the programmer to define functions
+whose implementation is selected at boot-time or module load-time.
+The
+.Nm
+macro can be used to define an ifunc.
+The selection is performed by a resolver function, which returns a pointer
+to the selected function.
+ifunc resolvers are invoked very early during the machine-dependent
+initialization routine, or at load time for dynamically loaded modules.
+Resolution must occur before the first call to an ifunc.
+ifunc resolution is performed after CPU features are enumerated and after the
+kernel's environment is initialized.
+The typical use-case for an ifunc is a routine whose behavior depends on
+optional CPU features.
+For example, newer generations of a given CPU architecture may provide an
+instruction to optimize a common operation.
+To avoid the overhead of testing for the CPU feature each time the operation
+is performed, an ifunc can be used to provide two implementations for the
+operation: one targeting platforms with the extra instruction, and one
+for older platforms.
+.Pp
+Because
+.Nm
+is a macro that defines a dynamically typed function, its usage looks somewhat
+unusual.
+The
+.Ar qual
+parameter is a list of zero or more C function qualifiers to be applied to the
+ifunc.
+This parameter is typically empty or the
+.Dv static
+qualifier.
+.Ar ret_type
+is the return type of the ifunc.
+.Ar name
+is the name of the ifunc.
+.Ar args
+is a parenthesized, comma-separated list of the parameter types of the function,
+as they would appear in a C function declaration.
+.Pp
+The
+.Nm
+usage must be followed by the resolver function body.
+The resolver must return a function with return type
+.Ar ret_type
+and parameter types
+.Ar args .
+The resolver function is defined with the
+.Ql resolver
+gcc-style function attribute, causing the corresponding
+.Xr elf 5
+function symbol to be of type
+.Dv STT_GNU_IFUNC
+instead of
+.Dv STT_FUNC .
+The kernel linker invokes the resolver to process relocations targeting ifunc
+calls and PLT entries referencing such symbols.
+.Sh EXAMPLES
+ifunc resolvers are executed early during boot, before most kernel facilities
+are available.
+They are effectively limited to checking CPU feature flags and tunables.
+.Bd -literal
+static size_t
+fast_strlen(const char *s __unused)
+{
+	size_t len;
+
+	/* Fast, but may not be correct in all cases. */
+	__asm("movq $42,%0\\n" : "=r" (len));
+	return (len);
+}
+
+static size_t
+slow_strlen(const char *s)
+{
+	const char *t;
+
+	for (t = s; *t != '\\0'; t++);
+	return (t - s);
+}
+
+DEFINE_IFUNC(, size_t, strlen, (const char *))
+{
+	int enabled;
+
+	enabled = 1;
+	TUNABLE_INT_FETCH("debug.use_fast_strlen", &enabled);
+	if (enabled && (cpu_features & CPUID_FAST_STRLEN) != 0)
+		return (fast_strlen);
+	else
+		return (slow_strlen);
+}
+.Ed
+.Pp
+This defines a
+.Fn strlen
+function with an optimized implementation for CPUs that advertise support.
+.Sh SEE ALSO
+.Xr elf 5
+.Sh NOTES
+ifuncs are not supported on all architectures.
+They require both toolchain support, to emit function symbols of type
+.Dv STT_GNU_IFUNC ,
+and kernel linker support to invoke ifunc resolvers during boot or
+during module load.

Modified: user/ngie/bug-237403/share/man/man9/DRIVER_MODULE.9
==============================================================================
--- user/ngie/bug-237403/share/man/man9/DRIVER_MODULE.9	Tue May 21 00:04:19 2019	(r348022)
+++ user/ngie/bug-237403/share/man/man9/DRIVER_MODULE.9	Tue May 21 00:07:53 2019	(r348023)
@@ -125,7 +125,7 @@ macro allows a driver to be registered for a specific 
 The boot time probe and attach process makes multiple passes over the
 device tree.
 Certain critical drivers that provide basic services needed by other
-devices are attach during earlier passes.
+devices are attached during earlier passes.
 Most drivers are attached in a final general pass.
 A driver that attaches during an early pass must register for a specific
 pass level

Modified: user/ngie/bug-237403/share/man/man9/Makefile
==============================================================================
--- user/ngie/bug-237403/share/man/man9/Makefile	Tue May 21 00:04:19 2019	(r348022)
+++ user/ngie/bug-237403/share/man/man9/Makefile	Tue May 21 00:07:53 2019	(r348023)
@@ -75,6 +75,7 @@ MAN=	accept_filter.9 \
 	DB_COMMAND.9 \
 	DECLARE_GEOM_CLASS.9 \
 	DECLARE_MODULE.9 \
+	DEFINE_IFUNC.9 \
 	DELAY.9 \
 	devclass.9 \
 	devclass_find.9 \

Modified: user/ngie/bug-237403/stand/common/load_elf.c
==============================================================================
--- user/ngie/bug-237403/stand/common/load_elf.c	Tue May 21 00:04:19 2019	(r348022)
+++ user/ngie/bug-237403/stand/common/load_elf.c	Tue May 21 00:07:53 2019	(r348023)
@@ -483,7 +483,7 @@ __elfN(loadimage)(struct preloaded_file *fp, elf_file_
 			off += 0x01000000;
 			ehdr->e_entry += off;
 #ifdef ELF_VERBOSE
-			printf("Converted entry 0x%08x\n", ehdr->e_entry);
+			printf("Converted entry 0x%jx\n", (uintmax_t)ehdr->e_entry);
 #endif
 		} else
 			off = 0;
@@ -509,8 +509,8 @@ __elfN(loadimage)(struct preloaded_file *fp, elf_file_
 		off -= ehdr->e_entry & ~PAGE_MASK;
 		ehdr->e_entry += off;
 #ifdef ELF_VERBOSE
-		printf("ehdr->e_entry 0x%08x, va<->pa off %llx\n",
-		    ehdr->e_entry, off);
+		printf("ehdr->e_entry 0x%jx", va<->pa off %llx\n",
+		    (uintmax_t)ehdr->e_entry, off);
 #endif
 #else
 		off = 0;	/* other archs use direct mapped kernels */

Modified: user/ngie/bug-237403/stand/ofw/libofw/ofw_net.c
==============================================================================
--- user/ngie/bug-237403/stand/ofw/libofw/ofw_net.c	Tue May 21 00:04:19 2019	(r348022)
+++ user/ngie/bug-237403/stand/ofw/libofw/ofw_net.c	Tue May 21 00:07:53 2019	(r348023)
@@ -225,12 +225,12 @@ ofwn_init(struct iodesc *desc, void *machdep_hint)
 	dmabuf = NULL;
 	if (OF_call_method("dma-alloc", netinstance, 1, 1, (64 * 1024), &dmabuf)
 	    < 0) {   
-		printf("Failed to allocate DMA buffer (got %08x).\n", dmabuf);
+		printf("Failed to allocate DMA buffer (got %p).\n", dmabuf);
 		goto punt;
 	}
 
 #if defined(NETIF_DEBUG)
-	printf("ofwn_init: allocated DMA buffer: %08x\n", dmabuf);
+	printf("ofwn_init: allocated DMA buffer: %p\n", dmabuf);
 #endif
 #endif
 

Modified: user/ngie/bug-237403/stand/ofw/libofw/openfirm.c
==============================================================================
--- user/ngie/bug-237403/stand/ofw/libofw/openfirm.c	Tue May 21 00:04:19 2019	(r348022)
+++ user/ngie/bug-237403/stand/ofw/libofw/openfirm.c	Tue May 21 00:07:53 2019	(r348023)
@@ -669,7 +669,6 @@ OF_block_size(ihandle_t instance)
 }
 
 /* 
-/*
  * Memory functions
  */
 

Modified: user/ngie/bug-237403/stand/powerpc/boot1.chrp/boot1.c
==============================================================================
--- user/ngie/bug-237403/stand/powerpc/boot1.chrp/boot1.c	Tue May 21 00:04:19 2019	(r348022)
+++ user/ngie/bug-237403/stand/powerpc/boot1.chrp/boot1.c	Tue May 21 00:07:53 2019	(r348023)
@@ -23,6 +23,7 @@ __FBSDID("$FreeBSD$");
 #include <machine/elf.h>
 #include <machine/stdarg.h>
 #include <machine/md_var.h>
+#include <ufs/ffs/fs.h>
 
 #include "paths.h"
 

Modified: user/ngie/bug-237403/stand/powerpc/kboot/Makefile
==============================================================================
--- user/ngie/bug-237403/stand/powerpc/kboot/Makefile	Tue May 21 00:04:19 2019	(r348022)
+++ user/ngie/bug-237403/stand/powerpc/kboot/Makefile	Tue May 21 00:07:53 2019	(r348023)
@@ -36,9 +36,6 @@ CFLAGS+=	-DRELOC=${RELOC}
 
 LDFLAGS=	-nostdlib -static -T ${.CURDIR}/ldscript.powerpc
 
-# 64-bit bridge extensions
-CFLAGS+= -Wa,-mppc64bridge
-
 DPADD=		${LDR_INTERP} ${LIBOFW} ${LIBFDT} ${LIBSA}
 LDADD=		${LDR_INTERP} ${LIBOFW} ${LIBFDT} ${LIBSA}
 

Modified: user/ngie/bug-237403/stand/powerpc/kboot/main.c
==============================================================================
--- user/ngie/bug-237403/stand/powerpc/kboot/main.c	Tue May 21 00:04:19 2019	(r348022)
+++ user/ngie/bug-237403/stand/powerpc/kboot/main.c	Tue May 21 00:07:53 2019	(r348023)
@@ -484,8 +484,18 @@ kboot_kseg_get(int *nseg, void **ptr)
 void
 _start(int argc, const char **argv, char **env)
 {
+// This makes error "variable 'sp' is uninitialized" be just a warning on clang.
+// Initializing 'sp' is not desired here as it would overwrite "r1" original value
+#if defined(__clang__)
+#pragma clang diagnostic push
+#pragma clang diagnostic warning "-Wuninitialized"
+#endif
 	register volatile void **sp asm("r1");
 	main((int)sp[0], (const char **)&sp[1]);
+#if defined(__clang__)
+#pragma clang diagnostic pop
+#endif
+
 }
 
 /*

Modified: user/ngie/bug-237403/stand/powerpc/ofw/elf_freebsd.c
==============================================================================
--- user/ngie/bug-237403/stand/powerpc/ofw/elf_freebsd.c	Tue May 21 00:04:19 2019	(r348022)
+++ user/ngie/bug-237403/stand/powerpc/ofw/elf_freebsd.c	Tue May 21 00:07:53 2019	(r348023)
@@ -84,7 +84,7 @@ __elfN(ofw_exec)(struct preloaded_file *fp)
 	if ((error = md_load(fp->f_args, &mdp, &dtbp)) != 0)
 		return (error);
 
-	printf("Kernel entry at 0x%lx ...\n", e->e_entry);
+	printf("Kernel entry at 0x%x ...\n", entry);
 
 	dev_cleanup();
 	if (dtbp != 0) {

Modified: user/ngie/bug-237403/stand/powerpc/ofw/ppc64_elf_freebsd.c
==============================================================================
--- user/ngie/bug-237403/stand/powerpc/ofw/ppc64_elf_freebsd.c	Tue May 21 00:04:19 2019	(r348022)
+++ user/ngie/bug-237403/stand/powerpc/ofw/ppc64_elf_freebsd.c	Tue May 21 00:07:53 2019	(r348023)
@@ -87,7 +87,7 @@ ppc64_ofw_elf_exec(struct preloaded_file *fp)
 	if ((error = md_load64(fp->f_args, &mdp, &dtbp)) != 0)
 		return (error);
 
-	printf("Kernel entry at 0x%lx ...\n", entry);
+	printf("Kernel entry at 0x%x ...\n", entry);
 
 	dev_cleanup();
 

Modified: user/ngie/bug-237403/sys/dev/netmap/netmap_freebsd.c
==============================================================================
--- user/ngie/bug-237403/sys/dev/netmap/netmap_freebsd.c	Tue May 21 00:04:19 2019	(r348022)
+++ user/ngie/bug-237403/sys/dev/netmap/netmap_freebsd.c	Tue May 21 00:07:53 2019	(r348023)
@@ -32,6 +32,7 @@
 #include <sys/param.h>
 #include <sys/module.h>
 #include <sys/errno.h>
+#include <sys/eventhandler.h>
 #include <sys/jail.h>
 #include <sys/poll.h>  /* POLLIN, POLLOUT */
 #include <sys/kernel.h> /* types used in module initialization */

Modified: user/ngie/bug-237403/sys/dev/usb/net/if_muge.c
==============================================================================
--- user/ngie/bug-237403/sys/dev/usb/net/if_muge.c	Tue May 21 00:04:19 2019	(r348022)
+++ user/ngie/bug-237403/sys/dev/usb/net/if_muge.c	Tue May 21 00:07:53 2019	(r348023)
@@ -97,6 +97,7 @@ __FBSDID("$FreeBSD$");
 #include <dev/fdt/fdt_common.h>
 #include <dev/ofw/ofw_bus.h>
 #include <dev/ofw/ofw_bus_subr.h>
+#include <dev/usb/usb_fdt_support.h>
 #endif
 
 #include <dev/usb/usb.h>
@@ -173,6 +174,9 @@ struct muge_softc {
 	struct mtx		sc_mtx;
 	struct usb_xfer		*sc_xfer[MUGE_N_TRANSFER];
 	int			sc_phyno;
+	uint32_t		sc_leds;
+	uint16_t		sc_led_modes;
+	uint16_t		sc_led_modes_mask;
 
 	/* Settings for the mac control (MAC_CSR) register. */
 	uint32_t		sc_rfe_ctl;
@@ -889,8 +893,9 @@ static int
 lan78xx_phy_init(struct muge_softc *sc)
 {
 	muge_dbg_printf(sc, "Initializing PHY.\n");
-	uint16_t bmcr;
+	uint16_t bmcr, lmsr;
 	usb_ticks_t start_ticks;
+	uint32_t hw_reg;
 	const usb_ticks_t max_ticks = USB_MS_TO_TICKS(1000);
 
 	MUGE_LOCK_ASSERT(sc, MA_OWNED);
@@ -931,6 +936,25 @@ lan78xx_phy_init(struct muge_softc *sc)
 	bmcr |= BMCR_AUTOEN;
 	lan78xx_miibus_writereg(sc->sc_ue.ue_dev, sc->sc_phyno, MII_BMCR, bmcr);
 	bmcr = lan78xx_miibus_readreg(sc->sc_ue.ue_dev, sc->sc_phyno, MII_BMCR);
+
+	/* Configure LED Modes. */
+	if (sc->sc_led_modes_mask != 0) {
+		lmsr = lan78xx_miibus_readreg(sc->sc_ue.ue_dev, sc->sc_phyno,
+		    MUGE_PHY_LED_MODE);
+		lmsr &= ~sc->sc_led_modes_mask;
+		lmsr |= sc->sc_led_modes;
+		lan78xx_miibus_writereg(sc->sc_ue.ue_dev, sc->sc_phyno,
+		    MUGE_PHY_LED_MODE, lmsr);
+	}
+
+	/* Enable appropriate LEDs. */
+	if (sc->sc_leds != 0 &&
+	    lan78xx_read_reg(sc, ETH_HW_CFG, &hw_reg) == 0) {
+		hw_reg &= ~(ETH_HW_CFG_LEDO_EN_ | ETH_HW_CFG_LED1_EN_ |
+			    ETH_HW_CFG_LED2_EN_ | ETH_HW_CFG_LED3_EN_ );
+		hw_reg |= sc->sc_leds;
+		lan78xx_write_reg(sc, ETH_HW_CFG, hw_reg);
+	}
 	return (0);
 }
 
@@ -1431,101 +1455,7 @@ tr_setup:
 	}
 }
 
-#ifdef FDT
 /**
- *	muge_fdt_find_eth_node - find descendant node with required compatibility
- *	@start: start node
- *	@compatible: compatible string used to identify the node
- *
- *	Loop through all descendant nodes and return first match with required
- *	compatibility.
- *
- *	RETURNS:
- *	Returns node's phandle on success -1 otherwise
- */
-static phandle_t
-muge_fdt_find_eth_node(phandle_t start, const char *compatible)
-{
-	phandle_t child, node;
-
-	/* Traverse through entire tree to find usb ethernet nodes. */
-	for (node = OF_child(start); node != 0; node = OF_peer(node)) {
-		if (ofw_bus_node_is_compatible(node, compatible))
-			return (node);
-		child = muge_fdt_find_eth_node(node, compatible);
-		if (child != -1)
-			return (child);
-	}
-
-	return (-1);
-}
-
-/**
- *	muge_fdt_read_mac_property - read MAC address from node
- *	@node: USB device node
- *	@mac: memory to store MAC address to
- *
- *	Check for common properties that might contain MAC address
- *	passed by boot loader.
- *
- *	RETURNS:
- *	Returns 0 on success, error code otherwise
- */
-static int
-muge_fdt_read_mac_property(phandle_t node, unsigned char *mac)
-{
-	int len;
-
-	/* Check if there is property */
-	if ((len = OF_getproplen(node, "local-mac-address")) > 0) {
-		if (len != ETHER_ADDR_LEN)
-			return (EINVAL);
-
-		OF_getprop(node, "local-mac-address", mac,
-		    ETHER_ADDR_LEN);
-		return (0);
-	}
-
-	if ((len = OF_getproplen(node, "mac-address")) > 0) {
-		if (len != ETHER_ADDR_LEN)
-			return (EINVAL);
-
-		OF_getprop(node, "mac-address", mac,
-		    ETHER_ADDR_LEN);
-		return (0);
-	}
-
-	return (ENXIO);
-}
-
-/**
- *	muge_fdt_find_mac - read MAC address from node
- *	@compatible: compatible string for DTB node in the form "usb[N]NNN,[M]MMM"
- *	    where NNN is vendor id and MMM is product id
- *	@mac: memory to store MAC address to
- *
- *	Tries to find matching node in DTS and obtain MAC address info from it
- *
- *	RETURNS:
- *	Returns 0 on success, error code otherwise
- */
-static int
-muge_fdt_find_mac(const char *compatible, unsigned char *mac)
-{
-	phandle_t node, root;
-
-	root = OF_finddevice("/");
-	node = muge_fdt_find_eth_node(root, compatible);
-	if (node != -1) {
-		if (muge_fdt_read_mac_property(node, mac) == 0)
-			return (0);
-	}
-
-	return (ENXIO);
-}
-#endif
-
-/**
  *	muge_set_mac_addr - Initiailizes NIC MAC address
  *	@ue: the USB ethernet device
  *
@@ -1537,12 +1467,8 @@ muge_set_mac_addr(struct usb_ether *ue)
 {
 	struct muge_softc *sc = uether_getsc(ue);
 	uint32_t mac_h, mac_l;
-#ifdef FDT
-	char compatible[16];
-	struct usb_attach_arg *uaa = device_get_ivars(ue->ue_dev);
-#endif
 
-	memset(sc->sc_ue.ue_eaddr, 0xff, ETHER_ADDR_LEN);
+	memset(ue->ue_eaddr, 0xff, ETHER_ADDR_LEN);
 
 	uint32_t val;
 	lan78xx_read_reg(sc, 0, &val);
@@ -1550,44 +1476,78 @@ muge_set_mac_addr(struct usb_ether *ue)
 	/* Read current MAC address from RX_ADDRx registers. */
 	if ((lan78xx_read_reg(sc, ETH_RX_ADDRL, &mac_l) == 0) &&
 	    (lan78xx_read_reg(sc, ETH_RX_ADDRH, &mac_h) == 0)) {
-		sc->sc_ue.ue_eaddr[5] = (uint8_t)((mac_h >> 8) & 0xff);
-		sc->sc_ue.ue_eaddr[4] = (uint8_t)((mac_h) & 0xff);
-		sc->sc_ue.ue_eaddr[3] = (uint8_t)((mac_l >> 24) & 0xff);
-		sc->sc_ue.ue_eaddr[2] = (uint8_t)((mac_l >> 16) & 0xff);
-		sc->sc_ue.ue_eaddr[1] = (uint8_t)((mac_l >> 8) & 0xff);
-		sc->sc_ue.ue_eaddr[0] = (uint8_t)((mac_l) & 0xff);
+		ue->ue_eaddr[5] = (uint8_t)((mac_h >> 8) & 0xff);
+		ue->ue_eaddr[4] = (uint8_t)((mac_h) & 0xff);
+		ue->ue_eaddr[3] = (uint8_t)((mac_l >> 24) & 0xff);
+		ue->ue_eaddr[2] = (uint8_t)((mac_l >> 16) & 0xff);
+		ue->ue_eaddr[1] = (uint8_t)((mac_l >> 8) & 0xff);
+		ue->ue_eaddr[0] = (uint8_t)((mac_l) & 0xff);
 	}
 
-	/* If RX_ADDRx did not provide a valid MAC address, try EEPROM. */
-	if (ETHER_IS_VALID(sc->sc_ue.ue_eaddr)) {
+	/*
+	 * If RX_ADDRx did not provide a valid MAC address, try EEPROM.  If that
+	 * doesn't work, try OTP.  Whether any of these methods work or not, try
+	 * FDT data, because it is allowed to override the EEPROM/OTP values.
+	 */
+	if (ETHER_IS_VALID(ue->ue_eaddr)) {
 		muge_dbg_printf(sc, "MAC assigned from registers\n");
-		return;
+	} else if (lan78xx_eeprom_present(sc) && lan78xx_eeprom_read_raw(sc,
+	    ETH_E2P_MAC_OFFSET, ue->ue_eaddr, ETHER_ADDR_LEN) == 0 &&
+	    ETHER_IS_VALID(ue->ue_eaddr)) {
+		muge_dbg_printf(sc, "MAC assigned from EEPROM\n");
+	} else if (lan78xx_otp_read(sc, OTP_MAC_OFFSET, ue->ue_eaddr,
+	    ETHER_ADDR_LEN) == 0 && ETHER_IS_VALID(ue->ue_eaddr)) {
+		muge_dbg_printf(sc, "MAC assigned from OTP\n");
 	}
 
-	if ((lan78xx_eeprom_present(sc) &&
-	    lan78xx_eeprom_read_raw(sc, ETH_E2P_MAC_OFFSET,
-	    sc->sc_ue.ue_eaddr, ETHER_ADDR_LEN) == 0) ||
-	    (lan78xx_otp_read(sc, OTP_MAC_OFFSET,
-	    sc->sc_ue.ue_eaddr, ETHER_ADDR_LEN) == 0)) {
-		if (ETHER_IS_VALID(sc->sc_ue.ue_eaddr)) {
-			muge_dbg_printf(sc, "MAC read from EEPROM\n");
-			return;
-		}
+#ifdef FDT
+	/* ue->ue_eaddr modified only if config exists for this dev instance. */
+	usb_fdt_get_mac_addr(ue->ue_dev, ue);
+	if (ETHER_IS_VALID(ue->ue_eaddr)) {
+		muge_dbg_printf(sc, "MAC assigned from FDT data\n");
 	}
+#endif
 
+	if (!ETHER_IS_VALID(ue->ue_eaddr)) {
+		muge_dbg_printf(sc, "MAC assigned randomly\n");
+		arc4rand(ue->ue_eaddr, ETHER_ADDR_LEN, 0);
+		ue->ue_eaddr[0] &= ~0x01;	/* unicast */
+		ue->ue_eaddr[0] |= 0x02;	/* locally administered */
+	}
+}
+
+/**
+ *	muge_set_leds - Initializes NIC LEDs pattern
+ *	@ue: the USB ethernet device
+ *
+ *	Tries to store the LED modes.
+ *	Supports only DTB blob like the	Linux driver does.
+ */
+static void
+muge_set_leds(struct usb_ether *ue)
+{
 #ifdef FDT
-	snprintf(compatible, sizeof(compatible), "usb%x,%x",
-	    uaa->info.idVendor, uaa->info.idProduct);
-	if (muge_fdt_find_mac(compatible, sc->sc_ue.ue_eaddr) == 0) {
-		muge_dbg_printf(sc, "MAC assigned from FDT blob\n");
-		return;
+	struct muge_softc *sc = uether_getsc(ue);
+	phandle_t node;
+	pcell_t modes[4];	/* 4 LEDs are possible */
+	ssize_t proplen;
+	uint32_t count;
+
+	if ((node = usb_fdt_get_node(ue->ue_dev, ue->ue_udev)) != -1 &&
+	    (proplen = OF_getencprop(node, "microchip,led-modes", modes,
+	    sizeof(modes))) > 0) {
+		count = proplen / sizeof( uint32_t );
+		sc->sc_leds = (count > 0) * ETH_HW_CFG_LEDO_EN_ |
+			      (count > 1) * ETH_HW_CFG_LED1_EN_ |
+			      (count > 2) * ETH_HW_CFG_LED2_EN_ |
+			      (count > 3) * ETH_HW_CFG_LED3_EN_;
+		while (count-- > 0) {
+			sc->sc_led_modes |= (modes[count] & 0xf) << (4 * count);
+			sc->sc_led_modes_mask |= 0xf << (4 * count);
+		}
+		muge_dbg_printf(sc, "LED modes set from FDT data\n");
 	}
 #endif
-
-	muge_dbg_printf(sc, "MAC assigned randomly\n");
-	arc4rand(sc->sc_ue.ue_eaddr, ETHER_ADDR_LEN, 0);
-	sc->sc_ue.ue_eaddr[0] &= ~0x01;	/* unicast */
-	sc->sc_ue.ue_eaddr[0] |= 0x02;	/* locally administered */
 }
 
 /**
@@ -1610,6 +1570,7 @@ muge_attach_post(struct usb_ether *ue)
 	sc->sc_phyno = 1;
 
 	muge_set_mac_addr(ue);
+	muge_set_leds(ue);
 
 	/* Initialise the chip for the first time */
 	lan78xx_chip_init(sc);

Modified: user/ngie/bug-237403/sys/dev/usb/net/if_mugereg.h
==============================================================================
--- user/ngie/bug-237403/sys/dev/usb/net/if_mugereg.h	Tue May 21 00:04:19 2019	(r348022)
+++ user/ngie/bug-237403/sys/dev/usb/net/if_mugereg.h	Tue May 21 00:07:53 2019	(r348023)
@@ -190,6 +190,8 @@
 #define MUGE_EXT_PAGE_SPACE_1		0x0001
 #define MUGE_EXT_PAGE_SPACE_2		0x0002
 
+#define MUGE_PHY_LED_MODE		29
+
 /* Extended Register Page 1 Space */
 #define MUGE_EXT_MODE_CTRL			0x0013
 #define MUGE_EXT_MODE_CTRL_MDIX_MASK_	0x000C

Modified: user/ngie/bug-237403/sys/kern/kern_kcov.c
==============================================================================
--- user/ngie/bug-237403/sys/kern/kern_kcov.c	Tue May 21 00:04:19 2019	(r348022)
+++ user/ngie/bug-237403/sys/kern/kern_kcov.c	Tue May 21 00:07:53 2019	(r348023)
@@ -41,6 +41,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/conf.h>
+#include <sys/eventhandler.h>
 #include <sys/kcov.h>
 #include <sys/kernel.h>
 #include <sys/limits.h>

Modified: user/ngie/bug-237403/sys/mips/mediatek/mtk_spi_v1.c
==============================================================================
--- user/ngie/bug-237403/sys/mips/mediatek/mtk_spi_v1.c	Tue May 21 00:04:19 2019	(r348022)
+++ user/ngie/bug-237403/sys/mips/mediatek/mtk_spi_v1.c	Tue May 21 00:07:53 2019	(r348023)
@@ -43,6 +43,11 @@ __FBSDID("$FreeBSD$");
 #include <machine/bus.h>
 #include <machine/cpu.h>
 
+#include <sys/gpio.h>
+#include "gpiobus_if.h"
+
+#include <dev/gpio/gpiobusvar.h>
+
 #include <dev/spibus/spi.h>
 #include <dev/spibus/spibusvar.h>
 #include "spibus_if.h"
@@ -53,6 +58,7 @@ __FBSDID("$FreeBSD$");
 #include <dev/ofw/ofw_bus.h>
 #include <dev/ofw/ofw_bus_subr.h>
 
+#include <mips/mediatek/mtk_soc.h>
 #include <mips/mediatek/mtk_spi_v1.h>
 #include <dev/flash/mx25lreg.h>
 
@@ -81,6 +87,8 @@ __FBSDID("$FreeBSD$");
 struct mtk_spi_softc {
 	device_t		sc_dev;
 	struct resource		*sc_mem_res;
+	struct gpiobus_pin	*gpio_cs;
+	int			nonflash;
 };
 
 static int	mtk_spi_probe(device_t);
@@ -127,7 +135,7 @@ mtk_spi_attach(device_t dev)
 	sc->sc_dev = dev;
         rid = 0;
 	sc->sc_mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid,
-	    RF_ACTIVE);
+	    RF_SHAREABLE | RF_ACTIVE);
 	if (!sc->sc_mem_res) {
 		device_printf(dev, "Could not map memory\n");
 		return (ENXIO);
@@ -138,14 +146,20 @@ mtk_spi_attach(device_t dev)
 		return (EBUSY);
 	}
 
-	SPI_WRITE(sc, MTK_SPICFG, MSBFIRST | SPICLKPOL | TX_ON_CLK_FALL |
-	    SPI_CLK_DIV8); /* XXX: make it configurable */
-	    /*
-	     * W25Q64CV max 104MHz, bus 120-192 MHz, so divide by 2.
-	     * Update: divide by 4, DEV2 to fast for flash.
-	     */
+	if (ofw_bus_has_prop(dev, "non-flash"))
+		sc->nonflash = 1;
+	else
+		sc->nonflash = 0;
 
-	device_add_child(dev, "spibus", 0);
+	ofw_gpiobus_parse_gpios(dev, "cs-gpios", &sc->gpio_cs);
+
+	if (sc->gpio_cs != NULL) {
+		GPIO_PIN_SETFLAGS(sc->gpio_cs->dev, sc->gpio_cs->pin,
+		    GPIO_PIN_OUTPUT);
+		GPIO_PIN_SET(sc->gpio_cs->dev, sc->gpio_cs->pin, 1);
+	}
+
+	device_add_child(dev, "spibus", -1);
 	return (bus_generic_attach(dev));
 }
 
@@ -169,7 +183,12 @@ mtk_spi_chip_activate(struct mtk_spi_softc *sc)
 	/*
 	 * Put all CSx to low
 	 */
-	SPI_CLEAR_BITS(sc, MTK_SPICTL, CS_HIGH | HIZSMOSI);
+	if (sc->gpio_cs != NULL) {
+		GPIO_PIN_SET(sc->gpio_cs->dev, sc->gpio_cs->pin, 0);
+		SPI_CLEAR_BITS(sc, MTK_SPICTL, HIZSMOSI);
+	} else {
+		SPI_CLEAR_BITS(sc, MTK_SPICTL, CS_HIGH | HIZSMOSI);
+	}
 }
 
 static void
@@ -179,7 +198,12 @@ mtk_spi_chip_deactivate(struct mtk_spi_softc *sc)
 	/*
 	 * Put all CSx to high
 	 */
-	SPI_SET_BITS(sc, MTK_SPICTL, CS_HIGH | HIZSMOSI);
+	if (sc->gpio_cs != NULL) {
+		GPIO_PIN_SET(sc->gpio_cs->dev, sc->gpio_cs->pin, 1);
+		SPI_SET_BITS(sc, MTK_SPICTL, HIZSMOSI);
+	} else {
+		SPI_SET_BITS(sc, MTK_SPICTL, CS_HIGH | HIZSMOSI);
+	}
 }
 
 static int
@@ -224,12 +248,15 @@ mtk_spi_transfer(device_t dev, device_t child, struct 
 {
 	struct mtk_spi_softc *sc;
 	uint8_t *buf, byte, *tx_buf;
-	uint32_t cs;
+	uint32_t cs, clock, mode;
 	int i, sz, error = 0, write = 0;
+	int div, clk, cfgreg;
 
 	sc = device_get_softc(dev);
 
 	spibus_get_cs(child, &cs);
+	spibus_get_clock(child, &clock);
+	spibus_get_mode(child, &mode);
 
 	cs &= ~SPIBUS_CS_HIGH;
 
@@ -237,44 +264,80 @@ mtk_spi_transfer(device_t dev, device_t child, struct 
 		/* Only 1 CS */
 		return (ENXIO);
 
-        /* There is always a command to transfer. */
-        tx_buf = (uint8_t *)(cmd->tx_cmd);
-        
-        /* Perform some fixup because MTK dont support duplex SPI */
-        switch(tx_buf[0]) {
-                case CMD_READ_IDENT:
-                        cmd->tx_cmd_sz = 1;
-                        cmd->rx_cmd_sz = 3;
+	cfgreg = MSBFIRST;
+	switch(mode) {
+		case 0:	/* This is workadound because of
+			   mode 0 not work this soc. */
+		case 3:
+			cfgreg |= SPICLKPOL | TX_ON_CLK_FALL;
                         break;
-		case CMD_ENTER_4B_MODE:
-		case CMD_EXIT_4B_MODE:
-                case CMD_WRITE_ENABLE:
-                case CMD_WRITE_DISABLE:
-                        cmd->tx_cmd_sz = 1;
-                        cmd->rx_cmd_sz = 0;
+		case 1:
+			cfgreg |= TX_ON_CLK_FALL;
                         break;
-                case CMD_READ_STATUS:
-                        cmd->tx_cmd_sz = 1;
-                        cmd->rx_cmd_sz = 1;
+		case 2:
+			cfgreg |= CAPT_ON_CLK_FALL;
                         break;
-                case CMD_READ:
-                case CMD_FAST_READ:
-                        cmd->rx_cmd_sz = cmd->tx_data_sz = 0;
-                        break;
-                case CMD_SECTOR_ERASE:
-                        cmd->rx_cmd_sz = 0;
-                        break;
-                case CMD_PAGE_PROGRAM:
-                        cmd->rx_cmd_sz = cmd->rx_data_sz = 0;
-                        break;
-        }      
+	}
+
+	/*
+	 * W25Q64CV max 104MHz, bus 120-192 MHz, so divide by 2.
+	 * Update: divide by 4, DEV2 to fast for flash.
+	 */
+	if (clock != 0) {
+		div = (mtk_soc_get_cpuclk() + (clock - 1)) / clock;
+		clk = fls(div) - 2;
+		if (clk < 0)
+			clk = 0;
+		else if (clk > 6)
+			clk = 6;
+	} else {
+		clk = 6;
+	}
+
+	SPI_WRITE(sc, MTK_SPICFG, cfgreg | clk);
+
+	if (sc->nonflash == 0) {
+		/* There is always a command to transfer. */
+		tx_buf = (uint8_t *)(cmd->tx_cmd);
+
+		/* Perform some fixup because MTK dont support duplex SPI */
+		switch(tx_buf[0]) {
+			case CMD_READ_IDENT:
+				cmd->tx_cmd_sz = 1;
+				cmd->rx_cmd_sz = 3;
+				break;
+			case CMD_ENTER_4B_MODE:
+			case CMD_EXIT_4B_MODE:
+			case CMD_WRITE_ENABLE:
+			case CMD_WRITE_DISABLE:
+				cmd->tx_cmd_sz = 1;
+				cmd->rx_cmd_sz = 0;
+				break;
+			case CMD_READ_STATUS:
+				cmd->tx_cmd_sz = 1;
+				cmd->rx_cmd_sz = 1;
+				break;
+			case CMD_READ:
+			case CMD_FAST_READ:
+				cmd->rx_cmd_sz = cmd->tx_data_sz = 0;
+				break;
+			case CMD_SECTOR_ERASE:
+				cmd->rx_cmd_sz = 0;
+				break;
+			case CMD_PAGE_PROGRAM:
+				cmd->rx_cmd_sz = cmd->rx_data_sz = 0;
+				break;
+		}
+	}
         
 	mtk_spi_chip_activate(sc);
 
 	if (cmd->tx_cmd_sz + cmd->rx_cmd_sz) {
 		buf = (uint8_t *)(cmd->rx_cmd);
 		tx_buf = (uint8_t *)(cmd->tx_cmd);
-		sz = cmd->tx_cmd_sz + cmd->rx_cmd_sz;
+		sz = cmd->tx_cmd_sz;
+		if (sc->nonflash == 0)
+			sz += cmd->rx_cmd_sz;
 
 		for (i = 0; i < sz; i++) {
                         if(i < cmd->tx_cmd_sz) {

Modified: user/ngie/bug-237403/sys/netinet/netdump/netdump_client.c
==============================================================================
--- user/ngie/bug-237403/sys/netinet/netdump/netdump_client.c	Tue May 21 00:04:19 2019	(r348022)
+++ user/ngie/bug-237403/sys/netinet/netdump/netdump_client.c	Tue May 21 00:07:53 2019	(r348023)
@@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/conf.h>
 #include <sys/disk.h>
 #include <sys/endian.h>
+#include <sys/eventhandler.h>
 #include <sys/jail.h>
 #include <sys/kernel.h>
 #include <sys/kerneldump.h>

Modified: user/ngie/bug-237403/tests/sys/opencrypto/runtests.sh
==============================================================================
--- user/ngie/bug-237403/tests/sys/opencrypto/runtests.sh	Tue May 21 00:04:19 2019	(r348022)
+++ user/ngie/bug-237403/tests/sys/opencrypto/runtests.sh	Tue May 21 00:07:53 2019	(r348023)
@@ -81,7 +81,7 @@ if ! sysctl $cdas_sysctl=1; then
 fi
 
 echo "1..1"
-if "$PYTHON" $(dirname $0)/cryptotest.py; then
+if "$PYTHON" $(dirname $0)/cryptotest.py $CRYPTOTEST_ARGS; then
 	echo "ok 1"
 else
 	echo "not ok 1"

Modified: user/ngie/bug-237403/tests/sys/sys/rb_test.c
==============================================================================
--- user/ngie/bug-237403/tests/sys/sys/rb_test.c	Tue May 21 00:04:19 2019	(r348022)
+++ user/ngie/bug-237403/tests/sys/sys/rb_test.c	Tue May 21 00:07:53 2019	(r348023)
@@ -69,7 +69,7 @@ ATF_TC_BODY(rb_test, tc)
 
 	for (i = 0; i < ITER; i++) {
 		tmp = malloc(sizeof(struct node));
-		ATF_CHECK_MSG(tmp != NULL, "malloc failed");
+		ATF_REQUIRE_MSG(tmp != NULL, "malloc failed");
 		do {
 			tmp->key = arc4random_uniform(MAX-MIN);
 			tmp->key += MIN;
@@ -82,20 +82,22 @@ ATF_TC_BODY(rb_test, tc)
 			if (tmp->key < min)
 				min = tmp->key;
 		}
-		ATF_CHECK_EQ(NULL, RB_INSERT(tree, &root, tmp));
+		ATF_REQUIRE_EQ(NULL, RB_INSERT(tree, &root, tmp));
 	}
 
 	ins = RB_MIN(tree, &root);
+	ATF_REQUIRE_MSG(ins != NULL, "RB_MIN error");
 	ATF_CHECK_EQ(min, ins->key);
 	tmp = ins;
 	ins = RB_MAX(tree, &root);
+	ATF_REQUIRE_MSG(ins != NULL, "RB_MAX error");
 	ATF_CHECK_EQ(max, ins->key);
 
 	ATF_CHECK_EQ(tmp, RB_REMOVE(tree, &root, tmp));
 
 	for (i = 0; i < ITER - 1; i++) {
 		tmp = RB_ROOT(&root);
-		ATF_CHECK_MSG(tmp != NULL, "RB_ROOT error");
+		ATF_REQUIRE_MSG(tmp != NULL, "RB_ROOT error");
 		ATF_CHECK_EQ(tmp, RB_REMOVE(tree, &root, tmp));
 		free(tmp);
 	}

Modified: user/ngie/bug-237403/tests/sys/sys/splay_test.c
==============================================================================
--- user/ngie/bug-237403/tests/sys/sys/splay_test.c	Tue May 21 00:04:19 2019	(r348022)
+++ user/ngie/bug-237403/tests/sys/sys/splay_test.c	Tue May 21 00:07:53 2019	(r348023)
@@ -69,7 +69,7 @@ ATF_TC_BODY(splay_test, tc)
 
 	for (i = 0; i < ITER; i++) {
 		tmp = malloc(sizeof(struct node));
-		ATF_CHECK_MSG(tmp != NULL, "malloc failed");
+		ATF_REQUIRE_MSG(tmp != NULL, "malloc failed");
 		do {
 			tmp->key = arc4random_uniform(MAX-MIN);
 			tmp->key += MIN;
@@ -82,20 +82,22 @@ ATF_TC_BODY(splay_test, tc)
 			if (tmp->key < min)
 				min = tmp->key;
 		}
-		ATF_CHECK_EQ(NULL, SPLAY_INSERT(tree, &root, tmp));
+		ATF_REQUIRE_EQ(NULL, SPLAY_INSERT(tree, &root, tmp));
 	}
 
 	ins = SPLAY_MIN(tree, &root);
+	ATF_REQUIRE_MSG(ins != NULL, "SPLAY_MIN error");
 	ATF_CHECK_EQ(min, ins->key);
 	tmp = ins;
 	ins = SPLAY_MAX(tree, &root);
+	ATF_REQUIRE_MSG(ins != NULL, "SPLAY_MAX error");
 	ATF_CHECK_EQ(max, ins->key);
 
 	ATF_CHECK_EQ(tmp, SPLAY_REMOVE(tree, &root, tmp));
 
 	for (i = 0; i < ITER - 1; i++) {
 		tmp = SPLAY_ROOT(&root);
-		ATF_CHECK_MSG(tmp != NULL, "SPLAY_ROOT error");
+		ATF_REQUIRE_MSG(tmp != NULL, "SPLAY_ROOT error");
 		ATF_CHECK_EQ(tmp, SPLAY_REMOVE(tree, &root, tmp));
 		free(tmp);
 	}


More information about the svn-src-user mailing list