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>