Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 25 Jun 2016 14:20:34 +0000 (UTC)
From:      "Bjoern A. Zeeb" <bz@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r302200 - in projects/vnet: crypto/openssh etc lib/libthr/thread lib/libusb release/doc/en_US.ISO8859-1/relnotes release/tools sbin/sysctl secure/usr.sbin/sshd share/man/man5 share/man/...
Message-ID:  <201606251420.u5PEKYpE065931@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: bz
Date: Sat Jun 25 14:20:34 2016
New Revision: 302200
URL: https://svnweb.freebsd.org/changeset/base/302200

Log:
  MfH @r302199
  
  Sponsored by:	The FreeBSD Foundation

Deleted:
  projects/vnet/crypto/openssh/blacklist.c
  projects/vnet/crypto/openssh/blacklist_client.h
  projects/vnet/sys/mips/sentry5/files.sentry5
  projects/vnet/sys/mips/sentry5/obio.c
  projects/vnet/sys/mips/sentry5/obiovar.h
  projects/vnet/sys/mips/sentry5/s5_machdep.c
  projects/vnet/sys/mips/sentry5/s5reg.h
  projects/vnet/sys/mips/sentry5/std.sentry5
  projects/vnet/sys/mips/sentry5/uart_bus_sbusart.c
  projects/vnet/sys/mips/sentry5/uart_cpu_sbusart.c
Modified:
  projects/vnet/crypto/openssh/auth-pam.c
  projects/vnet/crypto/openssh/auth.c
  projects/vnet/crypto/openssh/auth1.c
  projects/vnet/crypto/openssh/auth2.c
  projects/vnet/crypto/openssh/packet.c
  projects/vnet/crypto/openssh/sshd.c
  projects/vnet/etc/netstart
  projects/vnet/lib/libthr/thread/thr_mutex.c
  projects/vnet/lib/libusb/libusb.h
  projects/vnet/lib/libusb/libusb10.h
  projects/vnet/release/doc/en_US.ISO8859-1/relnotes/article.xml
  projects/vnet/release/tools/ec2.conf
  projects/vnet/sbin/sysctl/sysctl.c
  projects/vnet/secure/usr.sbin/sshd/Makefile
  projects/vnet/secure/usr.sbin/sshd/Makefile.depend
  projects/vnet/share/man/man5/src.conf.5
  projects/vnet/share/man/man9/pci.9
  projects/vnet/share/mk/bsd.prog.mk
  projects/vnet/share/mk/src.opts.mk
  projects/vnet/sys/cam/cam_iosched.c
  projects/vnet/sys/conf/newvers.sh
  projects/vnet/sys/conf/options
  projects/vnet/sys/dev/bhnd/bcma/bcma.c
  projects/vnet/sys/dev/bhnd/bcma/bcma_subr.c
  projects/vnet/sys/dev/bhnd/bcma/bcmavar.h
  projects/vnet/sys/dev/bhnd/bhnd.c
  projects/vnet/sys/dev/bhnd/bhnd_bus_if.m
  projects/vnet/sys/dev/bhnd/bhnd_subr.c
  projects/vnet/sys/dev/bhnd/bhndvar.h
  projects/vnet/sys/dev/bhnd/cores/chipc/bhnd_chipc_if.m
  projects/vnet/sys/dev/bhnd/cores/chipc/bhnd_sprom_chipc.c
  projects/vnet/sys/dev/bhnd/cores/chipc/chipc.c
  projects/vnet/sys/dev/bhnd/cores/chipc/chipc_cfi.c
  projects/vnet/sys/dev/bhnd/cores/chipc/chipc_private.h
  projects/vnet/sys/dev/bhnd/cores/chipc/chipc_slicer.c
  projects/vnet/sys/dev/bhnd/cores/chipc/chipc_slicer.h
  projects/vnet/sys/dev/bhnd/cores/chipc/chipc_spi.c
  projects/vnet/sys/dev/bhnd/cores/chipc/chipc_spi.h
  projects/vnet/sys/dev/bhnd/cores/chipc/chipc_subr.c
  projects/vnet/sys/dev/bhnd/cores/chipc/chipcreg.h
  projects/vnet/sys/dev/bhnd/cores/chipc/chipcvar.h
  projects/vnet/sys/dev/bhnd/siba/siba.c
  projects/vnet/sys/dev/bhnd/siba/siba_subr.c
  projects/vnet/sys/dev/bhnd/siba/sibavar.h
  projects/vnet/sys/dev/pci/pci.c
  projects/vnet/sys/dev/pci/pcivar.h
  projects/vnet/sys/dev/urtwn/if_urtwn.c
  projects/vnet/sys/fs/nfsclient/nfs_clnode.c
  projects/vnet/sys/kern/kern_thr.c
  projects/vnet/sys/mips/atheros/ar71xx_chip.c
  projects/vnet/sys/mips/atheros/ar71xx_machdep.c
  projects/vnet/sys/mips/atheros/ar724x_chip.c
  projects/vnet/sys/mips/atheros/ar91xx_chip.c
  projects/vnet/sys/mips/broadcom/bcm_machdep.c
  projects/vnet/sys/mips/broadcom/bcm_socinfo.c
  projects/vnet/sys/mips/broadcom/bcm_socinfo.h
  projects/vnet/sys/mips/broadcom/std.broadcom
  projects/vnet/sys/mips/broadcom/uart_bus_chipc.c
  projects/vnet/sys/mips/broadcom/uart_cpu_chipc.c
  projects/vnet/sys/mips/conf/BCM
  projects/vnet/sys/mips/conf/BCM.hints
  projects/vnet/sys/mips/conf/SENTRY5
  projects/vnet/sys/mips/conf/SENTRY5.hints
  projects/vnet/sys/sys/bitstring.h
  projects/vnet/sys/sys/proc.h
  projects/vnet/sys/x86/x86/msi.c
  projects/vnet/tests/sys/sys/bitstring_test.c
  projects/vnet/usr.bin/gcore/elfcore.c
  projects/vnet/usr.bin/sockstat/sockstat.c
  projects/vnet/usr.sbin/gstat/gstat.c
Directory Properties:
  projects/vnet/   (props changed)
  projects/vnet/crypto/openssh/   (props changed)
  projects/vnet/sys/contrib/ipfilter/   (props changed)

Modified: projects/vnet/crypto/openssh/auth-pam.c
==============================================================================
--- projects/vnet/crypto/openssh/auth-pam.c	Sat Jun 25 14:14:55 2016	(r302199)
+++ projects/vnet/crypto/openssh/auth-pam.c	Sat Jun 25 14:20:34 2016	(r302200)
@@ -98,9 +98,6 @@
 #include "ssh-gss.h"
 #endif
 #include "monitor_wrap.h"
-#ifdef USE_BLACKLIST
-#include "blacklist_client.h"
-#endif
 
 extern ServerOptions options;
 extern Buffer loginmsg;
@@ -797,9 +794,6 @@ sshpam_query(void *ctx, char **name, cha
 				free(msg);
 				return (0);
 			}
-#ifdef USE_BLACKLIST
-			blacklist_notify(1);
-#endif
 			error("PAM: %s for %s%.100s from %.100s", msg,
 			    sshpam_authctxt->valid ? "" : "illegal user ",
 			    sshpam_authctxt->user,

Modified: projects/vnet/crypto/openssh/auth.c
==============================================================================
--- projects/vnet/crypto/openssh/auth.c	Sat Jun 25 14:14:55 2016	(r302199)
+++ projects/vnet/crypto/openssh/auth.c	Sat Jun 25 14:20:34 2016	(r302200)
@@ -75,9 +75,6 @@ __RCSID("$FreeBSD$");
 #include "authfile.h"
 #include "ssherr.h"
 #include "compat.h"
-#ifdef USE_BLACKLIST
-#include "blacklist_client.h"
-#endif
 
 /* import */
 extern ServerOptions options;
@@ -309,10 +306,6 @@ auth_log(Authctxt *authctxt, int authent
 	    compat20 ? "ssh2" : "ssh1",
 	    authctxt->info != NULL ? ": " : "",
 	    authctxt->info != NULL ? authctxt->info : "");
-#ifdef USE_BLACKLIST
-	if (!authctxt->postponed)
-		blacklist_notify(!authenticated);
-#endif
 	free(authctxt->info);
 	authctxt->info = NULL;
 
@@ -647,9 +640,6 @@ getpwnamallow(const char *user)
 	}
 #endif
 	if (pw == NULL) {
-#ifdef USE_BLACKLIST
-		blacklist_notify(1);
-#endif
 		logit("Invalid user %.100s from %.100s",
 		    user, get_remote_ipaddr());
 #ifdef CUSTOM_FAILED_LOGIN

Modified: projects/vnet/crypto/openssh/auth1.c
==============================================================================
--- projects/vnet/crypto/openssh/auth1.c	Sat Jun 25 14:14:55 2016	(r302199)
+++ projects/vnet/crypto/openssh/auth1.c	Sat Jun 25 14:20:34 2016	(r302200)
@@ -43,9 +43,6 @@
 #endif
 #include "monitor_wrap.h"
 #include "buffer.h"
-#ifdef USE_BLACKLIST
-#include "blacklist_client.h"
-#endif
 
 /* import */
 extern ServerOptions options;
@@ -340,9 +337,6 @@ do_authloop(Authctxt *authctxt)
 			char *msg;
 			size_t len;
 
-#ifdef USE_BLACKLIST
-			blacklist_notify(1);
-#endif
 			error("Access denied for user %s by PAM account "
 			    "configuration", authctxt->user);
 			len = buffer_len(&loginmsg);
@@ -410,9 +404,6 @@ do_authentication(Authctxt *authctxt)
 	else {
 		debug("do_authentication: invalid user %s", user);
 		authctxt->pw = fakepw();
-#ifdef USE_BLACKLIST
-		blacklist_notify(1);
-#endif
 	}
 
 	/* Configuration may have changed as a result of Match */

Modified: projects/vnet/crypto/openssh/auth2.c
==============================================================================
--- projects/vnet/crypto/openssh/auth2.c	Sat Jun 25 14:14:55 2016	(r302199)
+++ projects/vnet/crypto/openssh/auth2.c	Sat Jun 25 14:20:34 2016	(r302200)
@@ -52,9 +52,6 @@ __RCSID("$FreeBSD$");
 #include "pathnames.h"
 #include "buffer.h"
 #include "canohost.h"
-#ifdef USE_BLACKLIST
-#include "blacklist_client.h"
-#endif
 
 #ifdef GSSAPI
 #include "ssh-gss.h"
@@ -251,9 +248,6 @@ input_userauth_request(int type, u_int32
 		} else {
 			logit("input_userauth_request: invalid user %s", user);
 			authctxt->pw = fakepw();
-#ifdef USE_BLACKLIST
-			blacklist_notify(1);
-#endif
 #ifdef SSH_AUDIT_EVENTS
 			PRIVSEP(audit_event(SSH_INVALID_USER));
 #endif

Modified: projects/vnet/crypto/openssh/packet.c
==============================================================================
--- projects/vnet/crypto/openssh/packet.c	Sat Jun 25 14:14:55 2016	(r302199)
+++ projects/vnet/crypto/openssh/packet.c	Sat Jun 25 14:20:34 2016	(r302200)
@@ -86,9 +86,6 @@ __RCSID("$FreeBSD$");
 #include "packet.h"
 #include "ssherr.h"
 #include "sshbuf.h"
-#ifdef USE_BLACKLIST
-#include "blacklist_client.h"
-#endif
 
 #ifdef PACKET_DEBUG
 #define DBG(x) x
@@ -2074,9 +2071,6 @@ sshpkt_fatal(struct ssh *ssh, const char
 	case SSH_ERR_NO_KEX_ALG_MATCH:
 	case SSH_ERR_NO_HOSTKEY_ALG_MATCH:
 		if (ssh && ssh->kex && ssh->kex->failed_choice) {
-#ifdef USE_BLACKLIST
-			blacklist_notify(1);
-#endif
 			fatal("Unable to negotiate with %.200s port %d: %s. "
 			    "Their offer: %s", ssh_remote_ipaddr(ssh),
 			    ssh_remote_port(ssh), ssh_err(r),

Modified: projects/vnet/crypto/openssh/sshd.c
==============================================================================
--- projects/vnet/crypto/openssh/sshd.c	Sat Jun 25 14:14:55 2016	(r302199)
+++ projects/vnet/crypto/openssh/sshd.c	Sat Jun 25 14:20:34 2016	(r302200)
@@ -135,9 +135,6 @@ __RCSID("$FreeBSD$");
 #include "ssh-sandbox.h"
 #include "version.h"
 #include "ssherr.h"
-#ifdef USE_BLACKLIST
-#include "blacklist_client.h"
-#endif
 
 #ifdef LIBWRAP
 #include <tcpd.h>
@@ -391,9 +388,6 @@ grace_alarm_handler(int sig)
 		kill(0, SIGTERM);
 	}
 
-#ifdef USE_BLACKLIST
-	blacklist_notify(1);
-#endif
 	/* Log error and exit. */
 	sigdie("Timeout before authentication for %s", get_remote_ipaddr());
 }
@@ -655,10 +649,6 @@ privsep_preauth_child(void)
 	/* Demote the private keys to public keys. */
 	demote_sensitive_data();
 
-#ifdef USE_BLACKLIST
-	blacklist_init();
-#endif
-
 	/* Demote the child */
 	if (getuid() == 0 || geteuid() == 0) {
 		/* Change our root directory */
@@ -1282,9 +1272,6 @@ server_accept_loop(int *sock_in, int *so
 	for (i = 0; i < options.max_startups; i++)
 		startup_pipes[i] = -1;
 
-#ifdef USE_BLACKLIST
-	blacklist_init();
-#endif
 	/*
 	 * Stay listening for connections until the system crashes or
 	 * the daemon is killed with a signal.

Modified: projects/vnet/etc/netstart
==============================================================================
--- projects/vnet/etc/netstart	Sat Jun 25 14:14:55 2016	(r302199)
+++ projects/vnet/etc/netstart	Sat Jun 25 14:20:34 2016	(r302200)
@@ -52,7 +52,6 @@ _start=quietstart
 /etc/rc.d/ppp ${_start}
 /etc/rc.d/ipfw ${_start}
 /etc/rc.d/routing ${_start}
-/etc/rc.d/mroute6d ${_start}
 /etc/rc.d/route6d ${_start}
 /etc/rc.d/routed ${_start}
 /etc/rc.d/rtsold ${_start}

Modified: projects/vnet/lib/libthr/thread/thr_mutex.c
==============================================================================
--- projects/vnet/lib/libthr/thread/thr_mutex.c	Sat Jun 25 14:14:55 2016	(r302199)
+++ projects/vnet/lib/libthr/thread/thr_mutex.c	Sat Jun 25 14:20:34 2016	(r302200)
@@ -850,9 +850,12 @@ mutex_self_trylock(struct pthread_mutex 
 
 	switch (PMUTEX_TYPE(m->m_flags)) {
 	case PTHREAD_MUTEX_ERRORCHECK:
-	case PTHREAD_MUTEX_NORMAL:
 	case PTHREAD_MUTEX_ADAPTIVE_NP:
-		ret = EBUSY; 
+		ret = EDEADLK;
+		break;
+
+	case PTHREAD_MUTEX_NORMAL:
+		ret = EBUSY;
 		break;
 
 	case PTHREAD_MUTEX_RECURSIVE:

Modified: projects/vnet/lib/libusb/libusb.h
==============================================================================
--- projects/vnet/lib/libusb/libusb.h	Sat Jun 25 14:14:55 2016	(r302199)
+++ projects/vnet/lib/libusb/libusb.h	Sat Jun 25 14:20:34 2016	(r302200)
@@ -254,7 +254,7 @@ struct libusb_context;
 struct libusb_device;
 struct libusb_transfer;
 struct libusb_device_handle;
-struct libusb_hotplug_callback_handle;
+struct libusb_hotplug_callback_handle_struct;
 
 struct libusb_pollfd {
 	int	fd;
@@ -276,7 +276,7 @@ typedef struct libusb_device_handle libu
 typedef struct libusb_pollfd libusb_pollfd;
 typedef void (*libusb_pollfd_added_cb) (int fd, short events, void *user_data);
 typedef void (*libusb_pollfd_removed_cb) (int fd, void *user_data);
-typedef struct libusb_hotplug_callback_handle *libusb_hotplug_callback_handle;
+typedef struct libusb_hotplug_callback_handle_struct *libusb_hotplug_callback_handle;
 
 typedef struct libusb_device_descriptor {
 	uint8_t	bLength;

Modified: projects/vnet/lib/libusb/libusb10.h
==============================================================================
--- projects/vnet/lib/libusb/libusb10.h	Sat Jun 25 14:14:55 2016	(r302199)
+++ projects/vnet/lib/libusb/libusb10.h	Sat Jun 25 14:20:34 2016	(r302200)
@@ -75,8 +75,8 @@ struct libusb_super_transfer {
 #define	LIBUSB_SUPER_XFER_ST_PEND 1
 };
 
-struct libusb_hotplug_callback_handle {
-	TAILQ_ENTRY(libusb_hotplug_callback_handle) entry;
+struct libusb_hotplug_callback_handle_struct {
+	TAILQ_ENTRY(libusb_hotplug_callback_handle_struct) entry;
 	int events;
 	int vendor;
 	int product;
@@ -101,7 +101,7 @@ struct libusb_context {
 
 	TAILQ_HEAD(, libusb_super_pollfd) pollfds;
 	TAILQ_HEAD(, libusb_super_transfer) tr_done;
-	TAILQ_HEAD(, libusb_hotplug_callback_handle) hotplug_cbh;
+	TAILQ_HEAD(, libusb_hotplug_callback_handle_struct) hotplug_cbh;
   	TAILQ_HEAD(, libusb_device) hotplug_devs;
 
 	struct libusb_super_pollfd ctx_poll;

Modified: projects/vnet/release/doc/en_US.ISO8859-1/relnotes/article.xml
==============================================================================
--- projects/vnet/release/doc/en_US.ISO8859-1/relnotes/article.xml	Sat Jun 25 14:14:55 2016	(r302199)
+++ projects/vnet/release/doc/en_US.ISO8859-1/relnotes/article.xml	Sat Jun 25 14:20:34 2016	(r302200)
@@ -621,9 +621,8 @@
 	A selection of system daemons, including:
 	<application>fingerd</application>,
 	<application>ftpd</application>,
-	<application>rlogind</application>,
-	<application>rshd</application>, and
-	<application>sshd</application> have been modified to support
+	<application>rlogind</application>, and
+	<application>rshd</application> have been modified to support
 	sending notifications to the <application>blacklistd</application>
 	daemon.</para>
 

Modified: projects/vnet/release/tools/ec2.conf
==============================================================================
--- projects/vnet/release/tools/ec2.conf	Sat Jun 25 14:14:55 2016	(r302199)
+++ projects/vnet/release/tools/ec2.conf	Sat Jun 25 14:20:34 2016	(r302200)
@@ -77,6 +77,12 @@ vm_extra_pre_umount() {
 	# by default for now.
 	echo 'hw.xbd.xbd_enable_indirect="0"' >> ${DESTDIR}/boot/loader.conf
 
+	# Some EC2 instances run on a version of Xen which has a bug relating
+	# to the migration of MSI-X interrupts; this is visible as SR-IOV
+	# networking (aka. "EC2 Enhanced Networking") not being able to pass
+	# packets.  Disable MSI-X interrupt migration to work around this bug.
+	echo 'machdep.disable_msix_migration="1"' >> ${DESTDIR}/boot/loader.conf
+
 	# The first time the AMI boots, the installed "first boot" scripts
 	# should be allowed to run:
 	# * ec2_configinit (download and process EC2 user-data)

Modified: projects/vnet/sbin/sysctl/sysctl.c
==============================================================================
--- projects/vnet/sbin/sysctl/sysctl.c	Sat Jun 25 14:14:55 2016	(r302199)
+++ projects/vnet/sbin/sysctl/sysctl.c	Sat Jun 25 14:20:34 2016	(r302200)
@@ -623,15 +623,15 @@ S_vmtotal(size_t l2, void *p)
 	    "%hd Sleep: %hd)\n",
 	    v->t_rq, v->t_dw, v->t_pw, v->t_sl);
 	printf(
-	    "Virtual Memory:\t\t(Total: %dK Active: %dK)\n",
-	    v->t_vm * pageKilo, v->t_avm * pageKilo);
-	printf("Real Memory:\t\t(Total: %dK Active: %dK)\n",
-	    v->t_rm * pageKilo, v->t_arm * pageKilo);
-	printf("Shared Virtual Memory:\t(Total: %dK Active: %dK)\n",
-	    v->t_vmshr * pageKilo, v->t_avmshr * pageKilo);
-	printf("Shared Real Memory:\t(Total: %dK Active: %dK)\n",
-	    v->t_rmshr * pageKilo, v->t_armshr * pageKilo);
-	printf("Free Memory:\t%dK", v->t_free * pageKilo);
+	    "Virtual Memory:\t\t(Total: %jdK Active: %jdK)\n",
+	    (intmax_t)v->t_vm * pageKilo, (intmax_t)v->t_avm * pageKilo);
+	printf("Real Memory:\t\t(Total: %jdK Active: %jdK)\n",
+	    (intmax_t)v->t_rm * pageKilo, (intmax_t)v->t_arm * pageKilo);
+	printf("Shared Virtual Memory:\t(Total: %jdK Active: %jdK)\n",
+	    (intmax_t)v->t_vmshr * pageKilo, (intmax_t)v->t_avmshr * pageKilo);
+	printf("Shared Real Memory:\t(Total: %jdK Active: %jdK)\n",
+	    (intmax_t)v->t_rmshr * pageKilo, (intmax_t)v->t_armshr * pageKilo);
+	printf("Free Memory:\t%jdK", (intmax_t)v->t_free * pageKilo);
 
 	return (0);
 }

Modified: projects/vnet/secure/usr.sbin/sshd/Makefile
==============================================================================
--- projects/vnet/secure/usr.sbin/sshd/Makefile	Sat Jun 25 14:14:55 2016	(r302199)
+++ projects/vnet/secure/usr.sbin/sshd/Makefile	Sat Jun 25 14:20:34 2016	(r302200)
@@ -40,13 +40,6 @@ CFLAGS+= -DUSE_BSM_AUDIT -DHAVE_GETAUDIT
 LIBADD+=	bsm
 .endif
 
-.if ${MK_BLACKLIST_SUPPORT} != "no"
-CFLAGS+= -DUSE_BLACKLIST -I${SRCTOP}/contrib/blacklist/include
-SRCS+= blacklist.c
-LIBADD+= blacklist
-LDFLAGS+=-L${LIBBLACKLISTDIR}
-.endif
-
 .if ${MK_KERBEROS_SUPPORT} != "no"
 CFLAGS+= -include krb5_config.h
 SRCS+=	krb5_config.h

Modified: projects/vnet/secure/usr.sbin/sshd/Makefile.depend
==============================================================================
--- projects/vnet/secure/usr.sbin/sshd/Makefile.depend	Sat Jun 25 14:14:55 2016	(r302199)
+++ projects/vnet/secure/usr.sbin/sshd/Makefile.depend	Sat Jun 25 14:20:34 2016	(r302200)
@@ -17,7 +17,6 @@ DIRDEPS = \
 	kerberos5/lib/libroken \
 	kerberos5/lib/libwind \
 	lib/${CSU_DIR} \
-	lib/libblacklist \
 	lib/libbsm \
 	lib/libc \
 	lib/libcom_err \

Modified: projects/vnet/share/man/man5/src.conf.5
==============================================================================
--- projects/vnet/share/man/man5/src.conf.5	Sat Jun 25 14:14:55 2016	(r302199)
+++ projects/vnet/share/man/man5/src.conf.5	Sat Jun 25 14:20:34 2016	(r302200)
@@ -1,7 +1,7 @@
 .\" DO NOT EDIT-- this file is automatically generated.
 .\" from FreeBSD: head/tools/build/options/makeman 292283 2015-12-15 18:42:30Z bdrewery
 .\" $FreeBSD$
-.Dd June 14, 2016
+.Dd June 24, 2016
 .Dt SRC.CONF 5
 .Os
 .Sh NAME
@@ -536,6 +536,10 @@ When set, it also enforces the following
 When set, the following options are also in effect:
 .Pp
 .Bl -inset -compact
+.It Va WITHOUT_SYSTEM_COMPILER
+(unless
+.Va WITH_SYSTEM_COMPILER
+is set explicitly)
 .It Va WITH_AUTO_OBJ
 (unless
 .Va WITHOUT_AUTO_OBJ
@@ -1134,6 +1138,14 @@ to
 .Pp
 Currently this also enforces
 .Va WITHOUT_SYSTEM_COMPILER .
+When set, the following options are also in effect:
+.Pp
+.Bl -inset -compact
+.It Va WITHOUT_SYSTEM_COMPILER
+(unless
+.Va WITH_SYSTEM_COMPILER
+is set explicitly)
+.El
 .Pp
 This must be set in the environment, make command line, or
 .Pa /etc/src-env.conf ,
@@ -1434,12 +1446,12 @@ This must be set in the environment, mak
 .Pa /etc/src-env.conf ,
 not
 .Pa /etc/src.conf .
-.It Va WITH_SYSTEM_COMPILER
-.\" from FreeBSD: head/tools/build/options/WITH_SYSTEM_COMPILER 300354 2016-05-21 01:32:23Z bdrewery
-Set to opportunistically skip building a cross-compiler during the
+.It Va WITHOUT_SYSTEM_COMPILER
+.\" from FreeBSD: head/tools/build/options/WITHOUT_SYSTEM_COMPILER 300354 2016-05-21 01:32:23Z bdrewery
+Set to not opportunistically skip building a cross-compiler during the
 bootstrap phase of the build.
-If the currently installed compiler matches the planned bootstrap compiler
-type and revision, then it will not be built.
+Normally, if the currently installed compiler matches the planned bootstrap
+compiler type and revision, then it will not be built.
 This does not prevent a compiler from being built for installation though,
 only for building one for the build itself.
 The

Modified: projects/vnet/share/man/man9/pci.9
==============================================================================
--- projects/vnet/share/man/man9/pci.9	Sat Jun 25 14:14:55 2016	(r302199)
+++ projects/vnet/share/man/man9/pci.9	Sat Jun 25 14:20:34 2016	(r302200)
@@ -25,7 +25,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd May 16, 2016
+.Dd June 24, 2016
 .Dt PCI 9
 .Os
 .Sh NAME
@@ -44,6 +44,7 @@
 .Nm pci_find_htcap ,
 .Nm pci_find_pcie_root_port ,
 .Nm pci_get_id ,
+.Nm pci_get_max_payload ,
 .Nm pci_get_max_read_req ,
 .Nm pci_get_powerstate ,
 .Nm pci_get_vpd_ident ,
@@ -100,6 +101,8 @@
 .Ft int
 .Fn pci_get_id "device_t dev" "enum pci_id_type type" "uintptr_t *id"
 .Ft int
+.Fn pci_get_max_payload "device_t dev"
+.Ft int
 .Fn pci_get_max_read_req "device_t dev"
 .Ft int
 .Fn pci_get_powerstate "device_t dev"
@@ -461,6 +464,16 @@ or
 .Xr bus_activate_resource 9 .
 .Pp
 The
+.Fn pci_get_max_payload
+function returns the current maximum TLP payload size in bytes for a
+PCI-express device.
+If the
+.Fa dev
+device is not a PCI-express device,
+.Fn pci_get_max_payload
+returns zero.
+.Pp
+The
 .Fn pci_get_max_read_req
 function returns the current maximum read request size in bytes for a
 PCI-express device.

Modified: projects/vnet/share/mk/bsd.prog.mk
==============================================================================
--- projects/vnet/share/mk/bsd.prog.mk	Sat Jun 25 14:14:55 2016	(r302199)
+++ projects/vnet/share/mk/bsd.prog.mk	Sat Jun 25 14:20:34 2016	(r302200)
@@ -66,7 +66,8 @@ PROG_FULL=${PROG}.full
     ${BINDIR} == "/bin" ||\
     ${BINDIR:C%/libexec(/.*)?%/libexec%} == "/libexec" ||\
     ${BINDIR} == "/sbin" ||\
-    ${BINDIR:C%/usr/(bin|bsdinstall|libexec|lpr|sendmail|sm.bin|sbin|tests)(/.*)?%/usr/bin%} == "/usr/bin"\
+    ${BINDIR:C%/usr/(bin|bsdinstall|libexec|lpr|sendmail|sm.bin|sbin|tests)(/.*)?%/usr/bin%} == "/usr/bin" ||\
+    ${BINDIR} == "/usr/lib" \
      )
 DEBUGFILEDIR=	${DEBUGDIR}${BINDIR}
 .else

Modified: projects/vnet/share/mk/src.opts.mk
==============================================================================
--- projects/vnet/share/mk/src.opts.mk	Sat Jun 25 14:14:55 2016	(r302199)
+++ projects/vnet/share/mk/src.opts.mk	Sat Jun 25 14:20:34 2016	(r302200)
@@ -158,6 +158,7 @@ __DEFAULT_YES_OPTIONS = \
     SOURCELESS_UCODE \
     SVNLITE \
     SYSCONS \
+    SYSTEM_COMPILER \
     TALK \
     TCP_WRAPPERS \
     TCSH \
@@ -189,7 +190,6 @@ __DEFAULT_NO_OPTIONS = \
     SHARED_TOOLCHAIN \
     SORT_THREADS \
     SVN \
-    SYSTEM_COMPILER \
 
 
 #

Modified: projects/vnet/sys/cam/cam_iosched.c
==============================================================================
--- projects/vnet/sys/cam/cam_iosched.c	Sat Jun 25 14:14:55 2016	(r302199)
+++ projects/vnet/sys/cam/cam_iosched.c	Sat Jun 25 14:20:34 2016	(r302200)
@@ -61,7 +61,7 @@ static MALLOC_DEFINE(M_CAMSCHED, "CAM I/
  * for trims.
  */
 
-#ifdef CAM_NETFLIX_IOSCHED
+#ifdef CAM_IOSCHED_DYNAMIC
 
 static int do_netflix_iosched = 1;
 TUNABLE_INT("kern.cam.do_netflix_iosched", &do_netflix_iosched);
@@ -250,7 +250,7 @@ struct cam_iosched_softc
 				/* scheduler flags < 16, user flags >= 16 */
 	uint32_t	flags;
 	int		sort_io_queue;
-#ifdef CAM_NETFLIX_IOSCHED
+#ifdef CAM_IOSCHED_DYNAMIC
 	int		read_bias;		/* Read bias setting */
 	int		current_read_bias;	/* Current read bias state */
 	int		total_ticks;
@@ -269,7 +269,7 @@ struct cam_iosched_softc
 #endif
 };
 
-#ifdef CAM_NETFLIX_IOSCHED
+#ifdef CAM_IOSCHED_DYNAMIC
 /*
  * helper functions to call the limsw functions.
  */
@@ -624,7 +624,7 @@ cam_iosched_cl_maybe_steer(struct contro
 			/* Periph drivers set these flags to indicate work */
 #define CAM_IOSCHED_FLAG_WORK_FLAGS	((0xffffu) << 16)
 
-#ifdef CAM_NETFLIX_IOSCHED
+#ifdef CAM_IOSCHED_DYNAMIC
 static void
 cam_iosched_io_metric_update(struct cam_iosched_softc *isc,
     sbintime_t sim_latency, int cmd, size_t size);
@@ -639,7 +639,7 @@ cam_iosched_has_flagged_work(struct cam_
 static inline int
 cam_iosched_has_io(struct cam_iosched_softc *isc)
 {
-#ifdef CAM_NETFLIX_IOSCHED
+#ifdef CAM_IOSCHED_DYNAMIC
 	if (do_netflix_iosched) {
 		struct bio *rbp = bioq_first(&isc->bio_queue);
 		struct bio *wbp = bioq_first(&isc->write_queue);
@@ -672,7 +672,7 @@ cam_iosched_has_more_trim(struct cam_ios
 static inline int
 cam_iosched_has_work(struct cam_iosched_softc *isc)
 {
-#ifdef CAM_NETFLIX_IOSCHED
+#ifdef CAM_IOSCHED_DYNAMIC
 	if (iosched_debug > 2)
 		printf("has work: %d %d %d\n", cam_iosched_has_io(isc),
 		    cam_iosched_has_more_trim(isc),
@@ -684,7 +684,7 @@ cam_iosched_has_work(struct cam_iosched_
 		cam_iosched_has_flagged_work(isc);
 }
 
-#ifdef CAM_NETFLIX_IOSCHED
+#ifdef CAM_IOSCHED_DYNAMIC
 static void
 cam_iosched_iop_stats_init(struct cam_iosched_softc *isc, struct iop_stats *ios)
 {
@@ -946,14 +946,14 @@ cam_iosched_init(struct cam_iosched_soft
 	*iscp = malloc(sizeof(**iscp), M_CAMSCHED, M_NOWAIT | M_ZERO);
 	if (*iscp == NULL)
 		return ENOMEM;
-#ifdef CAM_NETFLIX_IOSCHED
+#ifdef CAM_IOSCHED_DYNAMIC
 	if (iosched_debug)
 		printf("CAM IOSCHEDULER Allocating entry at %p\n", *iscp);
 #endif
 	(*iscp)->sort_io_queue = -1;
 	bioq_init(&(*iscp)->bio_queue);
 	bioq_init(&(*iscp)->trim_queue);
-#ifdef CAM_NETFLIX_IOSCHED
+#ifdef CAM_IOSCHED_DYNAMIC
 	if (do_netflix_iosched) {
 		bioq_init(&(*iscp)->write_queue);
 		(*iscp)->read_bias = 100;
@@ -984,7 +984,7 @@ cam_iosched_fini(struct cam_iosched_soft
 {
 	if (isc) {
 		cam_iosched_flush(isc, NULL, ENXIO);
-#ifdef CAM_NETFLIX_IOSCHED
+#ifdef CAM_IOSCHED_DYNAMIC
 		cam_iosched_iop_stats_fini(&isc->read_stats);
 		cam_iosched_iop_stats_fini(&isc->write_stats);
 		cam_iosched_iop_stats_fini(&isc->trim_stats);
@@ -1009,7 +1009,7 @@ cam_iosched_fini(struct cam_iosched_soft
 void cam_iosched_sysctl_init(struct cam_iosched_softc *isc,
     struct sysctl_ctx_list *ctx, struct sysctl_oid *node)
 {
-#ifdef CAM_NETFLIX_IOSCHED
+#ifdef CAM_IOSCHED_DYNAMIC
 	struct sysctl_oid_list *n;
 #endif
 
@@ -1018,7 +1018,7 @@ void cam_iosched_sysctl_init(struct cam_
 		&isc->sort_io_queue, 0,
 		"Sort IO queue to try and optimise disk access patterns");
 
-#ifdef CAM_NETFLIX_IOSCHED
+#ifdef CAM_IOSCHED_DYNAMIC
 	if (!do_netflix_iosched)
 		return;
 
@@ -1060,13 +1060,13 @@ cam_iosched_flush(struct cam_iosched_sof
 {
 	bioq_flush(&isc->bio_queue, stp, err);
 	bioq_flush(&isc->trim_queue, stp, err);
-#ifdef CAM_NETFLIX_IOSCHED
+#ifdef CAM_IOSCHED_DYNAMIC
 	if (do_netflix_iosched)
 		bioq_flush(&isc->write_queue, stp, err);
 #endif
 }
 
-#ifdef CAM_NETFLIX_IOSCHED
+#ifdef CAM_IOSCHED_DYNAMIC
 static struct bio *
 cam_iosched_get_write(struct cam_iosched_softc *isc)
 {
@@ -1132,7 +1132,7 @@ void
 cam_iosched_put_back_trim(struct cam_iosched_softc *isc, struct bio *bp)
 {
 	bioq_insert_head(&isc->trim_queue, bp);
-#ifdef CAM_NETFLIX_IOSCHED
+#ifdef CAM_IOSCHED_DYNAMIC
 	isc->trim_stats.queued++;
 	isc->trim_stats.total--;		/* since we put it back, don't double count */
 	isc->trim_stats.pending--;
@@ -1155,7 +1155,7 @@ cam_iosched_next_trim(struct cam_iosched
 	if (bp == NULL)
 		return NULL;
 	bioq_remove(&isc->trim_queue, bp);
-#ifdef CAM_NETFLIX_IOSCHED
+#ifdef CAM_IOSCHED_DYNAMIC
 	isc->trim_stats.queued--;
 	isc->trim_stats.total++;
 	isc->trim_stats.pending++;
@@ -1201,7 +1201,7 @@ cam_iosched_next_bio(struct cam_iosched_
 	if ((bp = cam_iosched_get_trim(isc)) != NULL)
 		return bp;
 
-#ifdef CAM_NETFLIX_IOSCHED
+#ifdef CAM_IOSCHED_DYNAMIC
 	/*
 	 * See if we have any pending writes, and room in the queue for them,
 	 * and if so, those are next.
@@ -1218,7 +1218,7 @@ cam_iosched_next_bio(struct cam_iosched_
 	if ((bp = bioq_first(&isc->bio_queue)) == NULL)
 		return NULL;
 
-#ifdef CAM_NETFLIX_IOSCHED
+#ifdef CAM_IOSCHED_DYNAMIC
 	/*
 	 * For the netflix scheduler, bio_queue is only for reads, so enforce
 	 * the limits here. Enforce only for reads.
@@ -1230,7 +1230,7 @@ cam_iosched_next_bio(struct cam_iosched_
 	}
 #endif
 	bioq_remove(&isc->bio_queue, bp);
-#ifdef CAM_NETFLIX_IOSCHED
+#ifdef CAM_IOSCHED_DYNAMIC
 	if (do_netflix_iosched) {
 		if (bp->bio_cmd == BIO_READ) {
 			isc->read_stats.queued--;
@@ -1262,12 +1262,12 @@ cam_iosched_queue_work(struct cam_iosche
 	 */
 	if (bp->bio_cmd == BIO_DELETE) {
 		bioq_disksort(&isc->trim_queue, bp);
-#ifdef CAM_NETFLIX_IOSCHED
+#ifdef CAM_IOSCHED_DYNAMIC
 		isc->trim_stats.in++;
 		isc->trim_stats.queued++;
 #endif
 	}
-#ifdef CAM_NETFLIX_IOSCHED
+#ifdef CAM_IOSCHED_DYNAMIC
 	else if (do_netflix_iosched &&
 	    (bp->bio_cmd == BIO_WRITE || bp->bio_cmd == BIO_FLUSH)) {
 		if (cam_iosched_sort_queue(isc))
@@ -1287,7 +1287,7 @@ cam_iosched_queue_work(struct cam_iosche
 			bioq_disksort(&isc->bio_queue, bp);
 		else
 			bioq_insert_tail(&isc->bio_queue, bp);
-#ifdef CAM_NETFLIX_IOSCHED
+#ifdef CAM_IOSCHED_DYNAMIC
 		if (iosched_debug > 9)
 			printf("Qr  : %p %#x\n", bp, bp->bio_cmd);
 		if (bp->bio_cmd == BIO_READ) {
@@ -1331,7 +1331,7 @@ cam_iosched_bio_complete(struct cam_iosc
     union ccb *done_ccb)
 {
 	int retval = 0;
-#ifdef CAM_NETFLIX_IOSCHED
+#ifdef CAM_IOSCHED_DYNAMIC
 	if (!do_netflix_iosched)
 		return retval;
 
@@ -1399,7 +1399,7 @@ cam_iosched_clr_work_flags(struct cam_io
 	isc->flags &= ~flags;
 }
 
-#ifdef CAM_NETFLIX_IOSCHED
+#ifdef CAM_IOSCHED_DYNAMIC
 /*
  * After the method presented in Jack Crenshaw's 1998 article "Integer
  * Suqare Roots," reprinted at
@@ -1523,7 +1523,7 @@ cam_iosched_update(struct iop_stats *iop
 	iop->sd = (int64_t)var < 0 ? 0 : isqrt64(var);
 }
 
-#ifdef CAM_NETFLIX_IOSCHED
+#ifdef CAM_IOSCHED_DYNAMIC
 static void
 cam_iosched_io_metric_update(struct cam_iosched_softc *isc,
     sbintime_t sim_latency, int cmd, size_t size)

Modified: projects/vnet/sys/conf/newvers.sh
==============================================================================
--- projects/vnet/sys/conf/newvers.sh	Sat Jun 25 14:14:55 2016	(r302199)
+++ projects/vnet/sys/conf/newvers.sh	Sat Jun 25 14:20:34 2016	(r302200)
@@ -32,7 +32,7 @@
 
 TYPE="FreeBSD"
 REVISION="11.0"
-BRANCH="ALPHA4"
+BRANCH="ALPHA5"
 if [ -n "${BRANCH_OVERRIDE}" ]; then
 	BRANCH=${BRANCH_OVERRIDE}
 fi

Modified: projects/vnet/sys/conf/options
==============================================================================
--- projects/vnet/sys/conf/options	Sat Jun 25 14:14:55 2016	(r302199)
+++ projects/vnet/sys/conf/options	Sat Jun 25 14:20:34 2016	(r302200)
@@ -330,7 +330,7 @@ CAM_DEBUG_TARGET	opt_cam.h
 CAM_DEBUG_LUN		opt_cam.h
 CAM_DEBUG_FLAGS		opt_cam.h
 CAM_BOOT_DELAY		opt_cam.h
-CAM_NETFLIX_IOSCHED	opt_cam.h
+CAM_IOSCHED_DYNAMIC	opt_cam.h
 SCSI_DELAY		opt_scsi.h
 SCSI_NO_SENSE_STRINGS	opt_scsi.h
 SCSI_NO_OP_STRINGS	opt_scsi.h

Modified: projects/vnet/sys/dev/bhnd/bcma/bcma.c
==============================================================================
--- projects/vnet/sys/dev/bhnd/bcma/bcma.c	Sat Jun 25 14:14:55 2016	(r302199)
+++ projects/vnet/sys/dev/bhnd/bcma/bcma.c	Sat Jun 25 14:20:34 2016	(r302200)
@@ -181,14 +181,6 @@ bcma_write_ivar(device_t dev, device_t c
 	}
 }
 
-static void
-bcma_child_deleted(device_t dev, device_t child)
-{
-	struct bcma_devinfo *dinfo = device_get_ivars(child);
-	if (dinfo != NULL)
-		bcma_free_dinfo(dev, dinfo);
-}
-
 static struct resource_list *
 bcma_get_resource_list(device_t dev, device_t child)
 {
@@ -415,6 +407,19 @@ bcma_get_region_addr(device_t dev, devic
 	return (ENOENT);
 }
 
+static struct bhnd_devinfo *
+bcma_alloc_bhnd_dinfo(device_t dev)
+{
+	struct bcma_devinfo *dinfo = bcma_alloc_dinfo(dev);
+	return ((struct bhnd_devinfo *)dinfo);
+}
+
+static void
+bcma_free_bhnd_dinfo(device_t dev, struct bhnd_devinfo *dinfo)
+{
+	bcma_free_dinfo(dev, (struct bcma_devinfo *)dinfo);
+}
+
 /**
  * Scan a device enumeration ROM table, adding all valid discovered cores to
  * the bus.
@@ -431,8 +436,7 @@ bcma_add_children(device_t bus, struct r
 	struct bcma_devinfo	*dinfo;
 	device_t		 child;
 	int			 error;
-	
-	dinfo = NULL;
+
 	corecfg = NULL;
 
 	/* Initialize our reader */
@@ -450,26 +454,20 @@ bcma_add_children(device_t bus, struct r
 			goto failed;
 		}
 
-		/* Allocate per-device bus info */
-		dinfo = bcma_alloc_dinfo(bus, corecfg);
-		if (dinfo == NULL) {
-			error = ENXIO;
-			goto failed;
-		}
-
-		/* The dinfo instance now owns the corecfg value */
-		corecfg = NULL;
-
 		/* Add the child device */
-		child = device_add_child(bus, NULL, -1);
+		child = BUS_ADD_CHILD(bus, 0, NULL, -1);
 		if (child == NULL) {
 			error = ENXIO;
 			goto failed;
 		}
 
-		/* The child device now owns the dinfo pointer */
-		device_set_ivars(child, dinfo);
-		dinfo = NULL;
+		/* Initialize device ivars */
+		dinfo = device_get_ivars(child);
+		if ((error = bcma_init_dinfo(bus, dinfo, corecfg)))
+			goto failed;
+
+		/* The dinfo instance now owns the corecfg value */
+		corecfg = NULL;
 
 		/* If pins are floating or the hardware is otherwise
 		 * unpopulated, the device shouldn't be used. */
@@ -482,9 +480,6 @@ bcma_add_children(device_t bus, struct r
 		return (0);
 	
 failed:
-	if (dinfo != NULL)
-		bcma_free_dinfo(bus, dinfo);
-
 	if (corecfg != NULL)
 		bcma_free_corecfg(corecfg);
 
@@ -499,13 +494,14 @@ static device_method_t bcma_methods[] = 
 	DEVMETHOD(device_detach,		bcma_detach),
 	
 	/* Bus interface */
-	DEVMETHOD(bus_child_deleted,		bcma_child_deleted),
 	DEVMETHOD(bus_read_ivar,		bcma_read_ivar),
 	DEVMETHOD(bus_write_ivar,		bcma_write_ivar),
 	DEVMETHOD(bus_get_resource_list,	bcma_get_resource_list),
 
 	/* BHND interface */
 	DEVMETHOD(bhnd_bus_find_hostb_device,	bcma_find_hostb_device),
+	DEVMETHOD(bhnd_bus_alloc_devinfo,	bcma_alloc_bhnd_dinfo),
+	DEVMETHOD(bhnd_bus_free_devinfo,	bcma_free_bhnd_dinfo),
 	DEVMETHOD(bhnd_bus_reset_core,		bcma_reset_core),
 	DEVMETHOD(bhnd_bus_suspend_core,	bcma_suspend_core),
 	DEVMETHOD(bhnd_bus_get_port_count,	bcma_get_port_count),

Modified: projects/vnet/sys/dev/bhnd/bcma/bcma_subr.c
==============================================================================
--- projects/vnet/sys/dev/bhnd/bcma/bcma_subr.c	Sat Jun 25 14:14:55 2016	(r302199)
+++ projects/vnet/sys/dev/bhnd/bcma/bcma_subr.c	Sat Jun 25 14:20:34 2016	(r302200)
@@ -186,28 +186,54 @@ bcma_dinfo_init_resource_info(device_t b
 	}
 }
 
+
 /**
- * Allocate and initialize new device info structure, assuming ownership
- * of the provided core configuration.
+ * Allocate and return a new empty device info structure.
  * 
  * @param bus The requesting bus device.
- * @param corecfg Device core configuration.
+ * 
+ * @retval NULL if allocation failed.
  */
 struct bcma_devinfo *
-bcma_alloc_dinfo(device_t bus, struct bcma_corecfg *corecfg)
+bcma_alloc_dinfo(device_t bus)
 {
 	struct bcma_devinfo *dinfo;
 	
-	dinfo = malloc(sizeof(struct bcma_devinfo), M_BHND, M_NOWAIT);
+	dinfo = malloc(sizeof(struct bcma_devinfo), M_BHND, M_NOWAIT|M_ZERO);
 	if (dinfo == NULL)
-		return NULL;
+		return (NULL);
 
-	dinfo->corecfg = corecfg;
+	dinfo->corecfg = NULL;
 	dinfo->res_agent = NULL;
 	dinfo->rid_agent = -1;
 
 	resource_list_init(&dinfo->resources);
 
+	return (dinfo);
+}
+
+/**
+ * Initialize a device info structure previously allocated via
+ * bcma_alloc_dinfo, assuming ownership of the provided core
+ * configuration.
+ * 
+ * @param bus The requesting bus device.
+ * @param dinfo The device info instance.
+ * @param corecfg Device core configuration; ownership of this value
+ * will be assumed by @p dinfo.
+ * 
+ * @retval 0 success
+ * @retval non-zero initialization failed.
+ */
+int
+bcma_init_dinfo(device_t bus, struct bcma_devinfo *dinfo,
+    struct bcma_corecfg *corecfg)
+{
+	KASSERT(dinfo->corecfg == NULL, ("dinfo previously initialized"));
+
+	/* Save core configuration value */
+	dinfo->corecfg = corecfg;
+
 	/* The device ports must always be initialized first to ensure that
 	 * rid 0 maps to the first device port */
 	bcma_dinfo_init_resource_info(bus, dinfo, &corecfg->dev_ports);
@@ -215,7 +241,7 @@ bcma_alloc_dinfo(device_t bus, struct bc
 	bcma_dinfo_init_resource_info(bus, dinfo, &corecfg->bridge_ports);
 	bcma_dinfo_init_resource_info(bus, dinfo, &corecfg->wrapper_ports);
 
-	return dinfo;
+	return (0);
 }
 
 /**
@@ -227,9 +253,11 @@ bcma_alloc_dinfo(device_t bus, struct bc
 void
 bcma_free_dinfo(device_t bus, struct bcma_devinfo *dinfo)
 {
-	bcma_free_corecfg(dinfo->corecfg);
 	resource_list_free(&dinfo->resources);
 
+	if (dinfo->corecfg != NULL)
+		bcma_free_corecfg(dinfo->corecfg);
+
 	/* Release agent resource, if any */
 	if (dinfo->res_agent != NULL) {
 		bhnd_release_resource(bus, SYS_RES_MEMORY, dinfo->rid_agent,

Modified: projects/vnet/sys/dev/bhnd/bcma/bcmavar.h
==============================================================================
--- projects/vnet/sys/dev/bhnd/bcma/bcmavar.h	Sat Jun 25 14:14:55 2016	(r302199)
+++ projects/vnet/sys/dev/bhnd/bcma/bcmavar.h	Sat Jun 25 14:20:34 2016	(r302200)
@@ -69,7 +69,9 @@ int			 bcma_add_children(device_t bus,
 struct bcma_sport_list	*bcma_corecfg_get_port_list(struct bcma_corecfg *cfg,
 			     bhnd_port_type type);
 
-struct bcma_devinfo	*bcma_alloc_dinfo(device_t bus,
+struct bcma_devinfo	*bcma_alloc_dinfo(device_t bus);
+int			 bcma_init_dinfo(device_t bus,
+			     struct bcma_devinfo *dinfo,
 			     struct bcma_corecfg *corecfg);
 void			 bcma_free_dinfo(device_t bus,
 			     struct bcma_devinfo *dinfo);
@@ -132,7 +134,9 @@ struct bcma_corecfg {
  * BCMA per-device info
  */
 struct bcma_devinfo {
-	struct resource_list	resources;	/**< Slave port memory regions. */
+	struct bhnd_devinfo	 bhnd_dinfo;	/**< superclass device info. */
+
+	struct resource_list	 resources;	/**< Slave port memory regions. */
 	struct bcma_corecfg	*corecfg;	/**< IP core/block config */
 
 	struct bhnd_resource	*res_agent;	/**< Agent (wrapper) resource, or NULL. Not
@@ -147,4 +151,4 @@ struct bcma_softc {
 	device_t		hostb_dev;	/**< host bridge core, or NULL */
 };
 
-#endif /* _BCMA_BCMAVAR_H_ */
\ No newline at end of file
+#endif /* _BCMA_BCMAVAR_H_ */

Modified: projects/vnet/sys/dev/bhnd/bhnd.c
==============================================================================
--- projects/vnet/sys/dev/bhnd/bhnd.c	Sat Jun 25 14:14:55 2016	(r302199)
+++ projects/vnet/sys/dev/bhnd/bhnd.c	Sat Jun 25 14:20:34 2016	(r302200)
@@ -493,6 +493,54 @@ bhnd_child_location_str(device_t dev, de
 }
 
 /**
+ * Default bhnd(4) bus driver implementation of BUS_ADD_CHILD().
+ * 
+ * This implementation manages internal bhnd(4) state, and must be called
+ * by subclassing drivers.
+ */
+device_t
+bhnd_generic_add_child(device_t dev, u_int order, const char *name, int unit)
+{
+	struct bhnd_devinfo	*dinfo;
+	device_t		 child;
+
+	child = device_add_child_ordered(dev, order, name, unit);
+	if (child == NULL)
+		return (NULL);
+
+	if ((dinfo = BHND_BUS_ALLOC_DEVINFO(dev)) == NULL) {
+		device_delete_child(dev, child);
+		return (NULL);
+	}
+
+	device_set_ivars(child, dinfo);
+
+	/* Inform concrete bus driver. */
+	BHND_BUS_CHILD_ADDED(dev, child);
+
+	return (child);
+}
+
+/**
+ * Default bhnd(4) bus driver implementation of BUS_CHILD_DELETED().
+ * 
+ * This implementation manages internal bhnd(4) state, and must be called
+ * by subclassing drivers.
+ */
+void
+bhnd_generic_child_deleted(device_t dev, device_t child)
+{
+	struct bhnd_softc	*sc;
+	struct bhnd_devinfo	*dinfo;
+
+	sc = device_get_softc(dev);
+
+	/* Free device info */
+	if ((dinfo = device_get_ivars(child)) != NULL)
+		BHND_BUS_FREE_DEVINFO(dev, dinfo);
+}
+
+/**
  * Helper function for implementing BUS_SUSPEND_CHILD().
  *
  * TODO: Power management
@@ -611,6 +659,8 @@ static device_method_t bhnd_methods[] = 
 	DEVMETHOD(device_resume,		bhnd_generic_resume),
 
 	/* Bus interface */
+	DEVMETHOD(bus_add_child,		bhnd_generic_add_child),
+	DEVMETHOD(bus_child_deleted,		bhnd_generic_child_deleted),
 	DEVMETHOD(bus_probe_nomatch,		bhnd_generic_probe_nomatch),
 	DEVMETHOD(bus_print_child,		bhnd_generic_print_child),
 	DEVMETHOD(bus_child_pnpinfo_str,	bhnd_child_pnpinfo_str),

Modified: projects/vnet/sys/dev/bhnd/bhnd_bus_if.m
==============================================================================
--- projects/vnet/sys/dev/bhnd/bhnd_bus_if.m	Sat Jun 25 14:14:55 2016	(r302199)
+++ projects/vnet/sys/dev/bhnd/bhnd_bus_if.m	Sat Jun 25 14:20:34 2016	(r302200)
@@ -41,6 +41,7 @@ HEADER {
 	struct bhnd_board_info;
 	struct bhnd_core_info;
 	struct bhnd_chipid;
+	struct bhnd_devinfo;
 	struct bhnd_resource;
 }
 
@@ -55,12 +56,23 @@ CODE {

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201606251420.u5PEKYpE065931>