Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 15 Feb 2015 21:59:06 +0000 (UTC)
From:      Garrett Cooper <ngie@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r278823 - in projects/building-blocks: bin/sh bin/sh/tests/expansion lib/libc/gen share/man/man4 sys/arm/broadcom/bcm2835 sys/conf sys/contrib/dev/ath/ath_hal/ar9300 sys/dev/atkbdc sys/...
Message-ID:  <201502152159.t1FLx63v080635@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ngie
Date: Sun Feb 15 21:59:05 2015
New Revision: 278823
URL: https://svnweb.freebsd.org/changeset/base/278823

Log:
  MFhead @ r278819

Added:
  projects/building-blocks/bin/sh/tests/expansion/ifs5.0
     - copied unchanged from r278819, head/bin/sh/tests/expansion/ifs5.0
  projects/building-blocks/bin/sh/tests/expansion/pathname5.0
     - copied unchanged from r278819, head/bin/sh/tests/expansion/pathname5.0
  projects/building-blocks/share/man/man4/udl.4
     - copied unchanged from r278819, head/share/man/man4/udl.4
  projects/building-blocks/sys/dev/usb/video/
     - copied from r278819, head/sys/dev/usb/video/
  projects/building-blocks/sys/dev/videomode/
     - copied from r278819, head/sys/dev/videomode/
  projects/building-blocks/sys/modules/usb/udl/
     - copied from r278819, head/sys/modules/usb/udl/
  projects/building-blocks/sys/modules/videomode/
     - copied from r278819, head/sys/modules/videomode/
Modified:
  projects/building-blocks/bin/sh/cd.c
  projects/building-blocks/bin/sh/expand.c
  projects/building-blocks/bin/sh/memalloc.c
  projects/building-blocks/bin/sh/memalloc.h
  projects/building-blocks/bin/sh/tests/expansion/Makefile
  projects/building-blocks/lib/libc/gen/fstab.c
  projects/building-blocks/lib/libc/gen/getgrent.c
  projects/building-blocks/lib/libc/gen/getpwent.c
  projects/building-blocks/lib/libc/gen/ulimit.c
  projects/building-blocks/share/man/man4/Makefile
  projects/building-blocks/sys/arm/broadcom/bcm2835/bcm2835_mbox_prop.h
  projects/building-blocks/sys/conf/files
  projects/building-blocks/sys/conf/options
  projects/building-blocks/sys/contrib/dev/ath/ath_hal/ar9300/ar9300_beacon.c
  projects/building-blocks/sys/contrib/dev/ath/ath_hal/ar9300/ar9300_freebsd.c
  projects/building-blocks/sys/contrib/dev/ath/ath_hal/ar9300/ar9300_misc.c
  projects/building-blocks/sys/dev/atkbdc/atkbd.c
  projects/building-blocks/sys/dev/atkbdc/atkbdc.c
  projects/building-blocks/sys/dev/atkbdc/atkbdcreg.h
  projects/building-blocks/sys/dev/atkbdc/psm.c
  projects/building-blocks/sys/dev/usb/usbdevs
  projects/building-blocks/sys/fs/ext2fs/ext2_htree.c
  projects/building-blocks/sys/fs/ext2fs/ext2_vfsops.c
  projects/building-blocks/sys/kern/kern_procctl.c
  projects/building-blocks/sys/kern/uipc_socket.c
  projects/building-blocks/usr.bin/timeout/timeout.c
  projects/building-blocks/usr.bin/touch/touch.c
  projects/building-blocks/usr.sbin/pw/tests/pw_usernext.sh
Directory Properties:
  projects/building-blocks/   (props changed)
  projects/building-blocks/lib/libc/   (props changed)
  projects/building-blocks/share/   (props changed)
  projects/building-blocks/share/man/man4/   (props changed)
  projects/building-blocks/sys/   (props changed)
  projects/building-blocks/sys/conf/   (props changed)

Modified: projects/building-blocks/bin/sh/cd.c
==============================================================================
--- projects/building-blocks/bin/sh/cd.c	Sun Feb 15 21:52:41 2015	(r278822)
+++ projects/building-blocks/bin/sh/cd.c	Sun Feb 15 21:59:05 2015	(r278823)
@@ -182,7 +182,6 @@ cdlogical(char *dest)
 	struct stat statb;
 	int first;
 	int badstat;
-	size_t len;
 
 	/*
 	 *  Check each component of the path. If we find a symlink or
@@ -190,9 +189,7 @@ cdlogical(char *dest)
 	 *  next time we get the value of the current directory.
 	 */
 	badstat = 0;
-	len = strlen(dest);
-	cdcomppath = stalloc(len + 1);
-	memcpy(cdcomppath, dest, len + 1);
+	cdcomppath = stsavestr(dest);
 	STARTSTACKSTR(p);
 	if (*dest == '/') {
 		STPUTC('/', p);
@@ -277,7 +274,6 @@ findcwd(char *dir)
 {
 	char *new;
 	char *p;
-	size_t len;
 
 	/*
 	 * If our argument is NULL, we don't know the current directory
@@ -286,9 +282,7 @@ findcwd(char *dir)
 	 */
 	if (dir == NULL || curdir == NULL)
 		return getpwd2();
-	len = strlen(dir);
-	cdcomppath = stalloc(len + 1);
-	memcpy(cdcomppath, dir, len + 1);
+	cdcomppath = stsavestr(dir);
 	STARTSTACKSTR(new);
 	if (*dir != '/') {
 		STPUTS(curdir, new);

Modified: projects/building-blocks/bin/sh/expand.c
==============================================================================
--- projects/building-blocks/bin/sh/expand.c	Sun Feb 15 21:52:41 2015	(r278822)
+++ projects/building-blocks/bin/sh/expand.c	Sun Feb 15 21:59:05 2015	(r278823)
@@ -1284,11 +1284,8 @@ addfname(char *name)
 {
 	char *p;
 	struct strlist *sp;
-	size_t len;
 
-	len = strlen(name);
-	p = stalloc(len + 1);
-	memcpy(p, name, len + 1);
+	p = stsavestr(name);
 	sp = (struct strlist *)stalloc(sizeof *sp);
 	sp->text = p;
 	*exparg.lastp = sp;

Modified: projects/building-blocks/bin/sh/memalloc.c
==============================================================================
--- projects/building-blocks/bin/sh/memalloc.c	Sun Feb 15 21:52:41 2015	(r278822)
+++ projects/building-blocks/bin/sh/memalloc.c	Sun Feb 15 21:59:05 2015	(r278823)
@@ -180,6 +180,18 @@ stunalloc(pointer p)
 }
 
 
+char *
+stsavestr(const char *s)
+{
+	char *p;
+	size_t len;
+
+	len = strlen(s);
+	p = stalloc(len + 1);
+	memcpy(p, s, len + 1);
+	return p;
+}
+
 
 void
 setstackmark(struct stackmark *mark)

Modified: projects/building-blocks/bin/sh/memalloc.h
==============================================================================
--- projects/building-blocks/bin/sh/memalloc.h	Sun Feb 15 21:52:41 2015	(r278822)
+++ projects/building-blocks/bin/sh/memalloc.h	Sun Feb 15 21:59:05 2015	(r278823)
@@ -52,6 +52,7 @@ void ckfree(pointer);
 char *savestr(const char *);
 pointer stalloc(int);
 void stunalloc(pointer);
+char *stsavestr(const char *);
 void setstackmark(struct stackmark *);
 void popstackmark(struct stackmark *);
 char *growstackstr(void);

Modified: projects/building-blocks/bin/sh/tests/expansion/Makefile
==============================================================================
--- projects/building-blocks/bin/sh/tests/expansion/Makefile	Sun Feb 15 21:52:41 2015	(r278822)
+++ projects/building-blocks/bin/sh/tests/expansion/Makefile	Sun Feb 15 21:59:05 2015	(r278823)
@@ -48,6 +48,7 @@ FILES+=		ifs1.0
 FILES+=		ifs2.0
 FILES+=		ifs3.0
 FILES+=		ifs4.0
+FILES+=		ifs5.0
 FILES+=		length1.0
 FILES+=		length2.0
 FILES+=		length3.0
@@ -62,6 +63,7 @@ FILES+=		pathname1.0
 FILES+=		pathname2.0
 FILES+=		pathname3.0
 FILES+=		pathname4.0
+FILES+=		pathname5.0
 FILES+=		plus-minus1.0
 FILES+=		plus-minus2.0
 FILES+=		plus-minus3.0

Copied: projects/building-blocks/bin/sh/tests/expansion/ifs5.0 (from r278819, head/bin/sh/tests/expansion/ifs5.0)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/building-blocks/bin/sh/tests/expansion/ifs5.0	Sun Feb 15 21:59:05 2015	(r278823, copy of r278819, head/bin/sh/tests/expansion/ifs5.0)
@@ -0,0 +1,4 @@
+# $FreeBSD$
+
+set -- $(echo a b c d)
+[ "$#" = 4 ]

Copied: projects/building-blocks/bin/sh/tests/expansion/pathname5.0 (from r278819, head/bin/sh/tests/expansion/pathname5.0)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/building-blocks/bin/sh/tests/expansion/pathname5.0	Sun Feb 15 21:59:05 2015	(r278823, copy of r278819, head/bin/sh/tests/expansion/pathname5.0)
@@ -0,0 +1,3 @@
+# $FreeBSD$
+
+[ `echo '/[e]tc'` = /etc ]

Modified: projects/building-blocks/lib/libc/gen/fstab.c
==============================================================================
--- projects/building-blocks/lib/libc/gen/fstab.c	Sun Feb 15 21:52:41 2015	(r278822)
+++ projects/building-blocks/lib/libc/gen/fstab.c	Sun Feb 15 21:59:05 2015	(r278823)
@@ -181,7 +181,7 @@ fstabscan(void)
 			if (cp != NULL)
 				_fs_fstab.fs_passno = atoi(cp);
 		}
-		strcpy(subline, _fs_fstab.fs_mntops);
+		(void)strlcpy(subline, _fs_fstab.fs_mntops, sizeof(subline));
 		p = subline;
 		for (typexx = 0, cp = strsep(&p, ","); cp;
 		     cp = strsep(&p, ",")) {

Modified: projects/building-blocks/lib/libc/gen/getgrent.c
==============================================================================
--- projects/building-blocks/lib/libc/gen/getgrent.c	Sun Feb 15 21:52:41 2015	(r278822)
+++ projects/building-blocks/lib/libc/gen/getgrent.c	Sun Feb 15 21:59:05 2015	(r278823)
@@ -1450,7 +1450,7 @@ docompat:
 		pos = ftello(st->fp);
 	}
 fin:
-	if (!stayopen && st->fp != NULL) {
+	if (st->fp != NULL && !stayopen) {
 		fclose(st->fp);
 		st->fp = NULL;
 	}

Modified: projects/building-blocks/lib/libc/gen/getpwent.c
==============================================================================
--- projects/building-blocks/lib/libc/gen/getpwent.c	Sun Feb 15 21:52:41 2015	(r278822)
+++ projects/building-blocks/lib/libc/gen/getpwent.c	Sun Feb 15 21:59:05 2015	(r278823)
@@ -815,7 +815,7 @@ files_passwd(void *retval, void *mdata, 
 	size_t			 bufsize, namesize;
 	uid_t			 uid;
 	uint32_t		 store;
-	int			 rv, stayopen, *errnop;
+	int			 rv, stayopen = 0, *errnop;
 
 	name = NULL;
 	uid = (uid_t)-1;

Modified: projects/building-blocks/lib/libc/gen/ulimit.c
==============================================================================
--- projects/building-blocks/lib/libc/gen/ulimit.c	Sun Feb 15 21:52:41 2015	(r278822)
+++ projects/building-blocks/lib/libc/gen/ulimit.c	Sun Feb 15 21:59:05 2015	(r278823)
@@ -33,6 +33,7 @@
 #include <errno.h>
 #include <limits.h>
 #include <stdarg.h>
+#include <stdint.h>
 #include <ulimit.h>
 
 long
@@ -40,6 +41,7 @@ ulimit(int cmd, ...)
 {
 	struct rlimit limit;
 	va_list ap;
+	volatile intmax_t targ;
 	long arg;
 
 	if (cmd == UL_GETFSIZE) {
@@ -51,16 +53,18 @@ ulimit(int cmd, ...)
 		return ((long)limit.rlim_cur);
 	} else if (cmd == UL_SETFSIZE) {
 		va_start(ap, cmd);
-		arg = va_arg(ap, long);
+		targ = arg = va_arg(ap, long);
 		va_end(ap);
-		limit.rlim_max = limit.rlim_cur = (rlim_t)arg * 512;
+		if (targ < 0)
+			targ = LONG_MAX;
+		if (targ > RLIM_INFINITY / 512)
+			targ = RLIM_INFINITY / 512;
+		limit.rlim_max = limit.rlim_cur = targ * 512;
 
 		/* The setrlimit() function sets errno to EPERM if needed. */
 		if (setrlimit(RLIMIT_FSIZE, &limit) == -1)
 			return (-1);
-		if (arg * 512 > LONG_MAX)
-			return (LONG_MAX);
-		return (arg);
+		return ((long)targ);
 	} else {
 		errno = EINVAL;
 		return (-1);

Modified: projects/building-blocks/share/man/man4/Makefile
==============================================================================
--- projects/building-blocks/share/man/man4/Makefile	Sun Feb 15 21:52:41 2015	(r278822)
+++ projects/building-blocks/share/man/man4/Makefile	Sun Feb 15 21:59:05 2015	(r278823)
@@ -849,6 +849,7 @@ MAN+=	\
 	udbp.4 \
 	udp.4 \
 	udplite.4 \
+	udl.4 \
 	uep.4 \
 	ufm.4 \
 	ufoma.4 \

Copied: projects/building-blocks/share/man/man4/udl.4 (from r278819, head/share/man/man4/udl.4)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/building-blocks/share/man/man4/udl.4	Sun Feb 15 21:59:05 2015	(r278823, copy of r278819, head/share/man/man4/udl.4)
@@ -0,0 +1,67 @@
+.\" $OpenBSD: udl.4,v 1.20 2012/09/18 17:11:41 jasper Exp $
+.\" $FreeBSD$
+.\"
+.\" Copyright (c) 2009 Marcus Glocker <mglocker@openbsd.org>
+.\"
+.\" Permission to use, copy, modify, and distribute this software for any
+.\" purpose with or without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\"
+.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+.\"
+.Dd February 15, 2015
+.Dt UDL 4
+.Os
+.Sh NAME
+.Nm udl
+.Nd DisplayLink DL-120 / DL-160 USB display devices
+.Sh SYNOPSIS
+To compile this driver into the kernel,
+place the following line in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device udl"
+.Ed
+.Pp
+Alternatively, to load the driver as a
+module at boot time, place the following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+udl_load="YES"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+driver supports USB display devices based on the DisplayLink DL-120 / DL-160
+graphic chip.
+.Sh HARDWARE
+The following devices should work:
+.Pp
+.Bl -tag -width Ds -offset indent -compact
+.It Century Corp. Japan Plus One LCD-8000U
+.It Century Corp. Japan Plus One LCD-4300U
+.It DisplayLink USB to DVI
+.It ForwardVideo EasyCAP008 USB to DVI
+.It HP USB 2.0 Docking Station (FQ834)
+.It HP USB Graphics Adapter (NL571)
+.It IOGEAR USB 2.0 External DVI (GUC2020)
+.It Koenig CMP-USBVGA10 and CMP-USBVGA11
+.It Lenovo 45K5296 USB to DVI
+.It Lenovo ThinkVision LT1421
+.It Lilliput UM-70
+.It Nanovision MiMo UM-710 and UM-740
+.It Rextron VCUD60 USB to DVI
+.It Samsung LD220
+.It StarTech CONV-USB2DVI
+.It Sunweit USB to DVI
+.It Unitek Y-2240 USB to DVI
+.It VideoHome NBdock1920
+.El
+.Sh SEE ALSO
+.Xr usb 4

Modified: projects/building-blocks/sys/arm/broadcom/bcm2835/bcm2835_mbox_prop.h
==============================================================================
--- projects/building-blocks/sys/arm/broadcom/bcm2835/bcm2835_mbox_prop.h	Sun Feb 15 21:52:41 2015	(r278822)
+++ projects/building-blocks/sys/arm/broadcom/bcm2835/bcm2835_mbox_prop.h	Sun Feb 15 21:59:05 2015	(r278823)
@@ -52,6 +52,53 @@ struct bcm2835_mbox_tag_hdr {
 	uint32_t	val_len;
 };
 
+#define BCM2835_MBOX_POWER_ID_EMMC		0x00000000
+#define BCM2835_MBOX_POWER_ID_UART0		0x00000001
+#define BCM2835_MBOX_POWER_ID_UART1		0x00000002
+#define BCM2835_MBOX_POWER_ID_USB_HCD		0x00000003
+#define BCM2835_MBOX_POWER_ID_I2C0		0x00000004
+#define BCM2835_MBOX_POWER_ID_I2C1		0x00000005
+#define BCM2835_MBOX_POWER_ID_I2C2		0x00000006
+#define BCM2835_MBOX_POWER_ID_SPI		0x00000007
+#define BCM2835_MBOX_POWER_ID_CCP2TX		0x00000008
+
+#define BCM2835_MBOX_POWER_ON			(1 << 0)
+#define BCM2835_MBOX_POWER_WAIT			(1 << 1)
+
+#define BCM2835_MBOX_TAG_GET_POWER_STATE	0x00020001
+#define BCM2835_MBOX_TAG_SET_POWER_STATE	0x00028001
+
+struct msg_get_power_state {
+	struct bcm2835_mbox_hdr hdr;
+	struct bcm2835_mbox_tag_hdr tag_hdr;
+	union {
+		struct {
+			uint32_t device_id;
+		} req;
+		struct {
+			uint32_t device_id;
+			uint32_t state;
+		} resp;
+	} body;
+	uint32_t end_tag;
+};
+
+struct msg_set_power_state {
+	struct bcm2835_mbox_hdr hdr;
+	struct bcm2835_mbox_tag_hdr tag_hdr;
+	union {
+		struct {
+			uint32_t device_id;
+			uint32_t state;
+		} req;
+		struct {
+			uint32_t device_id;
+			uint32_t state;
+		} resp;
+	} body;
+	uint32_t end_tag;
+};
+
 #define BCM2835_MBOX_CLOCK_ID_EMMC		0x00000001
 #define BCM2835_MBOX_CLOCK_ID_UART		0x00000002
 #define BCM2835_MBOX_CLOCK_ID_ARM		0x00000003

Modified: projects/building-blocks/sys/conf/files
==============================================================================
--- projects/building-blocks/sys/conf/files	Sun Feb 15 21:52:41 2015	(r278822)
+++ projects/building-blocks/sys/conf/files	Sun Feb 15 21:59:05 2015	(r278823)
@@ -2563,8 +2563,16 @@ dev/usb/template/usb_template_mtp.c	opti
 dev/usb/template/usb_template_phone.c	optional usb_template
 dev/usb/template/usb_template_serialnet.c	optional usb_template
 #
+# USB video drivers
+#
+dev/usb/video/udl.c			optional udl
+#
 # USB END
 #
+dev/videomode/videomode.c		optional videomode
+dev/videomode/edid.c			optional videomode
+dev/videomode/pickmode.c		optional videomode
+dev/videomode/vesagtf.c			optional videomode
 dev/utopia/idtphy.c		optional utopia
 dev/utopia/suni.c		optional utopia
 dev/utopia/utopia.c		optional utopia

Modified: projects/building-blocks/sys/conf/options
==============================================================================
--- projects/building-blocks/sys/conf/options	Sun Feb 15 21:52:41 2015	(r278822)
+++ projects/building-blocks/sys/conf/options	Sun Feb 15 21:59:05 2015	(r278823)
@@ -889,6 +889,9 @@ TDMA_TXRATE_QUARTER_DEFAULT	opt_tdma.h
 TDMA_TXRATE_11NA_DEFAULT	opt_tdma.h
 TDMA_TXRATE_11NG_DEFAULT	opt_tdma.h
 
+# VideoMode
+PICKMODE_DEBUG			opt_videomode.h
+
 # Network stack virtualization options
 VIMAGE			opt_global.h
 VNET_DEBUG		opt_global.h

Modified: projects/building-blocks/sys/contrib/dev/ath/ath_hal/ar9300/ar9300_beacon.c
==============================================================================
--- projects/building-blocks/sys/contrib/dev/ath/ath_hal/ar9300/ar9300_beacon.c	Sun Feb 15 21:52:41 2015	(r278822)
+++ projects/building-blocks/sys/contrib/dev/ath/ath_hal/ar9300/ar9300_beacon.c	Sun Feb 15 21:59:05 2015	(r278823)
@@ -57,6 +57,9 @@ ar9300_beacon_init(struct ath_hal *ah,
     /* Add the fraction adjustment lost due to unit conversions. */
     beacon_period_usec += beacon_period_fraction;
 
+    HALDEBUG(ah, HAL_DEBUG_BEACON,
+        "%s: next_beacon=0x%08x, beacon_period=%d, opmode=%d, beacon_period_usec=%d\n",
+        __func__, next_beacon, beacon_period, opmode, beacon_period_usec);
 
     OS_REG_WRITE(ah, AR_BEACON_PERIOD, beacon_period_usec);
     OS_REG_WRITE(ah, AR_DMA_BEACON_PERIOD, beacon_period_usec);

Modified: projects/building-blocks/sys/contrib/dev/ath/ath_hal/ar9300/ar9300_freebsd.c
==============================================================================
--- projects/building-blocks/sys/contrib/dev/ath/ath_hal/ar9300/ar9300_freebsd.c	Sun Feb 15 21:52:41 2015	(r278822)
+++ projects/building-blocks/sys/contrib/dev/ath/ath_hal/ar9300/ar9300_freebsd.c	Sun Feb 15 21:59:05 2015	(r278823)
@@ -36,6 +36,9 @@
 static HAL_BOOL ar9300ClrMulticastFilterIndex(struct ath_hal *ah, uint32_t ix);
 static HAL_BOOL ar9300SetMulticastFilterIndex(struct ath_hal *ah, uint32_t ix);
 
+static void ar9300_beacon_set_beacon_timers(struct ath_hal *ah,
+    const HAL_BEACON_TIMERS *bt);
+
 static void
 ar9300SetChainMasks(struct ath_hal *ah, uint32_t tx_chainmask,
     uint32_t rx_chainmask)
@@ -193,10 +196,9 @@ ar9300_attach_freebsd_ops(struct ath_hal
 	/* Beacon functions */
 	/* ah_setBeaconTimers */
 	ah->ah_beaconInit		= ar9300_freebsd_beacon_init;
-	/* ah_setBeaconTimers */
+	ah->ah_setBeaconTimers		= ar9300_beacon_set_beacon_timers;
 	ah->ah_setStationBeaconTimers = ar9300_set_sta_beacon_timers;
 	/* ah_resetStationBeaconTimers */
-	/* ah_getNextTBTT */
 	ah->ah_getNextTBTT = ar9300_get_next_tbtt;
 
 	/* Interrupt functions */
@@ -669,6 +671,55 @@ ar9300SetMulticastFilterIndex(struct ath
 	return (AH_TRUE);
 }
 
+#define	TU_TO_USEC(_tu) ((_tu) << 10)
+#define	ONE_EIGHTH_TU_TO_USEC(_tu8) ((_tu8) << 7)
+
+/*
+ * Initializes all of the hardware registers used to
+ * send beacons.  Note that for station operation the
+ * driver calls ar9300_set_sta_beacon_timers instead.
+ */
+static void
+ar9300_beacon_set_beacon_timers(struct ath_hal *ah,
+    const HAL_BEACON_TIMERS *bt)
+{
+	uint32_t bperiod;
+
+#if 0
+    HALASSERT(opmode == HAL_M_IBSS || opmode == HAL_M_HOSTAP);
+    if (opmode == HAL_M_IBSS) {
+        OS_REG_SET_BIT(ah, AR_TXCFG, AR_TXCFG_ADHOC_BEACON_ATIM_TX_POLICY);
+    }
+#endif
+
+	/* XXX TODO: should migrate the HAL code to always use ONE_EIGHTH_TU */
+	OS_REG_WRITE(ah, AR_NEXT_TBTT_TIMER, TU_TO_USEC(bt->bt_nexttbtt));
+	OS_REG_WRITE(ah, AR_NEXT_DMA_BEACON_ALERT, ONE_EIGHTH_TU_TO_USEC(bt->bt_nextdba));
+	OS_REG_WRITE(ah, AR_NEXT_SWBA, ONE_EIGHTH_TU_TO_USEC(bt->bt_nextswba));
+	OS_REG_WRITE(ah, AR_NEXT_NDP_TIMER, TU_TO_USEC(bt->bt_nextatim));
+
+	bperiod = TU_TO_USEC(bt->bt_intval & HAL_BEACON_PERIOD);
+	/* XXX TODO! */
+//        ahp->ah_beaconInterval = bt->bt_intval & HAL_BEACON_PERIOD;
+	OS_REG_WRITE(ah, AR_BEACON_PERIOD, bperiod);
+	OS_REG_WRITE(ah, AR_DMA_BEACON_PERIOD, bperiod);
+	OS_REG_WRITE(ah, AR_SWBA_PERIOD, bperiod);
+	OS_REG_WRITE(ah, AR_NDP_PERIOD, bperiod);
+
+	/*
+	 * Reset TSF if required.
+	 */
+	if (bt->bt_intval & HAL_BEACON_RESET_TSF)
+		ar9300_reset_tsf(ah);
+
+	/* enable timers */
+	/* NB: flags == 0 handled specially for backwards compatibility */
+	OS_REG_SET_BIT(ah, AR_TIMER_MODE,
+	    bt->bt_flags != 0 ? bt->bt_flags :
+	    AR_TBTT_TIMER_EN | AR_DBA_TIMER_EN | AR_SWBA_TIMER_EN);
+}
+
+
 /*
  * RF attach stubs
  */

Modified: projects/building-blocks/sys/contrib/dev/ath/ath_hal/ar9300/ar9300_misc.c
==============================================================================
--- projects/building-blocks/sys/contrib/dev/ath/ath_hal/ar9300/ar9300_misc.c	Sun Feb 15 21:52:41 2015	(r278822)
+++ projects/building-blocks/sys/contrib/dev/ath/ath_hal/ar9300/ar9300_misc.c	Sun Feb 15 21:59:05 2015	(r278823)
@@ -683,6 +683,7 @@ ar9300_get_capability(struct ath_hal *ah
 {
     struct ath_hal_9300 *ahp = AH9300(ah);
     const HAL_CAPABILITIES *p_cap = &AH_PRIVATE(ah)->ah_caps;
+    struct ar9300_ani_state *ani;
 
     switch (type) {
     case HAL_CAP_CIPHER:            /* cipher handled in hardware */
@@ -911,6 +912,34 @@ ar9300_get_capability(struct ath_hal *ah
             return HAL_ENOTSUPP;
         }
 #endif
+
+    /* FreeBSD ANI */
+    case HAL_CAP_INTMIT:            /* interference mitigation */
+            switch (capability) {
+            case HAL_CAP_INTMIT_PRESENT:            /* hardware capability */
+                    return HAL_OK;
+            case HAL_CAP_INTMIT_ENABLE:
+                    return (ahp->ah_proc_phy_err & HAL_PROCESS_ANI) ?
+                            HAL_OK : HAL_ENXIO;
+            case HAL_CAP_INTMIT_NOISE_IMMUNITY_LEVEL:
+            case HAL_CAP_INTMIT_OFDM_WEAK_SIGNAL_LEVEL:
+//            case HAL_CAP_INTMIT_CCK_WEAK_SIGNAL_THR:
+            case HAL_CAP_INTMIT_FIRSTEP_LEVEL:
+            case HAL_CAP_INTMIT_SPUR_IMMUNITY_LEVEL:
+                    ani = ar9300_ani_get_current_state(ah);
+                    if (ani == AH_NULL)
+                            return HAL_ENXIO;
+                    switch (capability) {
+                    /* XXX AR9300 HAL has OFDM/CCK noise immunity level params? */
+                    case 2: *result = ani->ofdm_noise_immunity_level; break;
+                    case 3: *result = !ani->ofdm_weak_sig_detect_off; break;
+ //                   case 4: *result = ani->cck_weak_sig_threshold; break;
+                    case 5: *result = ani->firstep_level; break;
+                    case 6: *result = ani->spur_immunity_level; break;
+                    }
+                    return HAL_OK;
+            }
+            return HAL_EINVAL;
     default:
         return ath_hal_getcapability(ah, type, capability, result);
     }
@@ -986,6 +1015,27 @@ ar9300_set_capability(struct ath_hal *ah
             return AH_TRUE;
         }
         return AH_FALSE;
+
+    /* FreeBSD interrupt mitigation / ANI */
+    case HAL_CAP_INTMIT: {          /* interference mitigation */
+            /* This maps the public ANI commands to the internal ANI commands */
+            /* Private: HAL_ANI_CMD; Public: HAL_CAP_INTMIT_CMD */
+            static const HAL_ANI_CMD cmds[] = {
+                    HAL_ANI_PRESENT,
+                    HAL_ANI_MODE,
+                    HAL_ANI_NOISE_IMMUNITY_LEVEL,
+                    HAL_ANI_OFDM_WEAK_SIGNAL_DETECTION,
+                    HAL_ANI_CCK_WEAK_SIGNAL_THR,
+                    HAL_ANI_FIRSTEP_LEVEL,
+                    HAL_ANI_SPUR_IMMUNITY_LEVEL,
+            };
+#define N(a)    (sizeof(a) / sizeof(a[0]))
+            return capability < N(cmds) ?
+                    ar9300_ani_control(ah, cmds[capability], setting) :
+                    AH_FALSE;
+#undef N
+    }
+
     case HAL_CAP_RXBUFSIZE:         /* set MAC receive buffer size */
         ahp->rx_buf_size = setting & AR_DATABUF_MASK;
         OS_REG_WRITE(ah, AR_DATABUF, ahp->rx_buf_size);

Modified: projects/building-blocks/sys/dev/atkbdc/atkbd.c
==============================================================================
--- projects/building-blocks/sys/dev/atkbdc/atkbd.c	Sun Feb 15 21:52:41 2015	(r278822)
+++ projects/building-blocks/sys/dev/atkbdc/atkbd.c	Sun Feb 15 21:59:05 2015	(r278823)
@@ -77,6 +77,10 @@ typedef struct atkbd_state {
 
 static void		atkbd_timeout(void *arg);
 static void		atkbd_shutdown_final(void *v);
+static int		atkbd_reset(KBDC kbdc, int flags, int c);
+
+#define HAS_QUIRK(p, q)		(((atkbdc_softc_t *)(p))->quirks & q)
+#define ALLOW_DISABLE_KBD(kbdc)	!HAS_QUIRK(kbdc, KBDC_QUIRK_KEEP_ACTIVATED)
 
 int
 atkbd_probe_unit(device_t dev, int irq, int flags)
@@ -1095,6 +1099,39 @@ atkbd_shutdown_final(void *v)
 #endif
 }
 
+static int
+atkbd_reset(KBDC kbdc, int flags, int c)
+{
+	/* reset keyboard hardware */
+	if (!(flags & KB_CONF_NO_RESET) && !reset_kbd(kbdc)) {
+		/*
+		 * KEYBOARD ERROR
+		 * Keyboard reset may fail either because the keyboard
+		 * doen't exist, or because the keyboard doesn't pass
+		 * the self-test, or the keyboard controller on the
+		 * motherboard and the keyboard somehow fail to shake hands.
+		 * It is just possible, particularly in the last case,
+		 * that the keyboard controller may be left in a hung state.
+		 * test_controller() and test_kbd_port() appear to bring
+		 * the keyboard controller back (I don't know why and how,
+		 * though.)
+		 */
+		empty_both_buffers(kbdc, 10);
+		test_controller(kbdc);
+		test_kbd_port(kbdc);
+		/*
+		 * We could disable the keyboard port and interrupt... but, 
+		 * the keyboard may still exist (see above). 
+		 */
+		set_controller_command_byte(kbdc,
+		    ALLOW_DISABLE_KBD(kbdc) ? 0xff : KBD_KBD_CONTROL_BITS, c);
+		if (bootverbose)
+			printf("atkbd: failed to reset the keyboard.\n");
+		return (EIO);
+	}
+	return (0);
+}
+
 /* local functions */
 
 static int
@@ -1250,13 +1287,14 @@ probe_keyboard(KBDC kbdc, int flags)
 		kbdc_set_device_mask(kbdc, m | KBD_KBD_CONTROL_BITS);
 	} else {
 		/* try to restore the command byte as before */
-		set_controller_command_byte(kbdc, 0xff, c);
+		set_controller_command_byte(kbdc,
+		    ALLOW_DISABLE_KBD(kbdc) ? 0xff : KBD_KBD_CONTROL_BITS, c);
 		kbdc_set_device_mask(kbdc, m);
 	}
 #endif
 
 	kbdc_lock(kbdc, FALSE);
-	return err;
+	return (HAS_QUIRK(kbdc, KBDC_QUIRK_IGNORE_PROBE_RESULT) ? 0 : err);
 }
 
 static int
@@ -1299,6 +1337,12 @@ init_keyboard(KBDC kbdc, int *type, int 
 		return EIO;
 	}
 
+	if (HAS_QUIRK(kbdc, KBDC_QUIRK_RESET_AFTER_PROBE) &&
+	    atkbd_reset(kbdc, flags, c)) {
+		kbdc_lock(kbdc, FALSE);
+		return EIO;
+	}
+
 	/* 
 	 * Check if we have an XT keyboard before we attempt to reset it. 
 	 * The procedure assumes that the keyboard and the controller have 
@@ -1343,31 +1387,9 @@ init_keyboard(KBDC kbdc, int *type, int 
 	if (bootverbose)
 		printf("atkbd: keyboard ID 0x%x (%d)\n", id, *type);
 
-	/* reset keyboard hardware */
-	if (!(flags & KB_CONF_NO_RESET) && !reset_kbd(kbdc)) {
-		/*
-		 * KEYBOARD ERROR
-		 * Keyboard reset may fail either because the keyboard
-		 * doen't exist, or because the keyboard doesn't pass
-		 * the self-test, or the keyboard controller on the
-		 * motherboard and the keyboard somehow fail to shake hands.
-		 * It is just possible, particularly in the last case,
-		 * that the keyboard controller may be left in a hung state.
-		 * test_controller() and test_kbd_port() appear to bring
-		 * the keyboard controller back (I don't know why and how,
-		 * though.)
-		 */
-		empty_both_buffers(kbdc, 10);
-		test_controller(kbdc);
-		test_kbd_port(kbdc);
-		/*
-		 * We could disable the keyboard port and interrupt... but, 
-		 * the keyboard may still exist (see above). 
-		 */
-		set_controller_command_byte(kbdc, 0xff, c);
+	if (!HAS_QUIRK(kbdc, KBDC_QUIRK_RESET_AFTER_PROBE) &&
+	    atkbd_reset(kbdc, flags, c)) {
 		kbdc_lock(kbdc, FALSE);
-		if (bootverbose)
-			printf("atkbd: failed to reset the keyboard.\n");
 		return EIO;
 	}
 
@@ -1387,7 +1409,8 @@ init_keyboard(KBDC kbdc, int *type, int 
 			 * The XT kbd isn't usable unless the proper scan
 			 * code set is selected. 
 			 */
-			set_controller_command_byte(kbdc, 0xff, c);
+			set_controller_command_byte(kbdc, ALLOW_DISABLE_KBD(kbdc)
+			    ? 0xff : KBD_KBD_CONTROL_BITS, c);
 			kbdc_lock(kbdc, FALSE);
 			printf("atkbd: unable to set the XT keyboard mode.\n");
 			return EIO;
@@ -1402,6 +1425,17 @@ init_keyboard(KBDC kbdc, int *type, int 
 	c |= KBD_TRANSLATION;
 #endif
 
+	/*
+	 * Some keyboards require a SETLEDS command to be sent after
+	 * the reset command before they will send keystrokes to us
+	 */
+	if (HAS_QUIRK(kbdc, KBDC_QUIRK_SETLEDS_ON_INIT) &&
+	    send_kbd_command_and_data(kbdc, KBDC_SET_LEDS, 0) != KBD_ACK) {
+		printf("atkbd: setleds failed\n");
+	}
+	if (!ALLOW_DISABLE_KBD(kbdc))
+	    send_kbd_command(kbdc, KBDC_ENABLE_KBD);
+
 	/* enable the keyboard port and intr. */
 	if (!set_controller_command_byte(kbdc, 
 		KBD_KBD_CONTROL_BITS | KBD_TRANSLATION | KBD_OVERRIDE_KBD_LOCK,
@@ -1412,7 +1446,9 @@ init_keyboard(KBDC kbdc, int *type, int 
 		 * This is serious; we are left with the disabled
 		 * keyboard intr. 
 		 */
-		set_controller_command_byte(kbdc, 0xff, c);
+		set_controller_command_byte(kbdc, ALLOW_DISABLE_KBD(kbdc)
+		    ? 0xff : (KBD_KBD_CONTROL_BITS | KBD_TRANSLATION |
+			KBD_OVERRIDE_KBD_LOCK), c);
 		kbdc_lock(kbdc, FALSE);
 		printf("atkbd: unable to enable the keyboard port and intr.\n");
 		return EIO;

Modified: projects/building-blocks/sys/dev/atkbdc/atkbdc.c
==============================================================================
--- projects/building-blocks/sys/dev/atkbdc/atkbdc.c	Sun Feb 15 21:52:41 2015	(r278822)
+++ projects/building-blocks/sys/dev/atkbdc/atkbdc.c	Sun Feb 15 21:59:05 2015	(r278823)
@@ -114,6 +114,41 @@ static int wait_for_kbd_ack(atkbdc_softc
 static int wait_for_aux_data(atkbdc_softc_t *kbdc);
 static int wait_for_aux_ack(atkbdc_softc_t *kbdc);
 
+struct atkbdc_quirks {
+    const char* bios_vendor;
+    const char*	maker;
+    const char*	product;
+    int		quirk;
+};
+
+static struct atkbdc_quirks quirks[] = {
+    {"coreboot", "Acer", "Peppy",
+	KBDC_QUIRK_KEEP_ACTIVATED | KBDC_QUIRK_IGNORE_PROBE_RESULT |
+	KBDC_QUIRK_RESET_AFTER_PROBE | KBDC_QUIRK_SETLEDS_ON_INIT},
+
+    {NULL, NULL, NULL, 0}
+};
+
+#define QUIRK_STR_MATCH(s1, s2) (s1 == NULL || \
+    (s2 != NULL && !strcmp(s1, s2)))
+
+static int
+atkbdc_getquirks(void)
+{
+    int i;
+    char* bios_vendor = kern_getenv("smbios.bios.vendor");
+    char* maker = kern_getenv("smbios.system.maker");
+    char* product = kern_getenv("smbios.system.product");
+
+    for (i=0; quirks[i].quirk != 0; ++i)
+	if (QUIRK_STR_MATCH(quirks[i].bios_vendor, bios_vendor) &&
+	    QUIRK_STR_MATCH(quirks[i].maker, maker) &&
+	    QUIRK_STR_MATCH(quirks[i].product, product))
+		return (quirks[i].quirk);
+
+    return (0);
+}
+
 atkbdc_softc_t
 *atkbdc_get_softc(int unit)
 {
@@ -295,6 +330,7 @@ atkbdc_setup(atkbdc_softc_t *sc, bus_spa
 #else
 	sc->retry = 5000;
 #endif
+	sc->quirks = atkbdc_getquirks();
 
 	return 0;
 }
@@ -1124,7 +1160,8 @@ void
 kbdc_set_device_mask(KBDC p, int mask)
 {
     kbdcp(p)->command_mask = 
-	mask & (KBD_KBD_CONTROL_BITS | KBD_AUX_CONTROL_BITS);
+	mask & (((kbdcp(p)->quirks & KBDC_QUIRK_KEEP_ACTIVATED)
+	    ? 0 : KBD_KBD_CONTROL_BITS) | KBD_AUX_CONTROL_BITS);
 }
 
 int

Modified: projects/building-blocks/sys/dev/atkbdc/atkbdcreg.h
==============================================================================
--- projects/building-blocks/sys/dev/atkbdc/atkbdcreg.h	Sun Feb 15 21:52:41 2015	(r278822)
+++ projects/building-blocks/sys/dev/atkbdc/atkbdcreg.h	Sun Feb 15 21:59:05 2015	(r278823)
@@ -202,6 +202,11 @@ typedef struct atkbdc_softc {
     kqueue kbd;			/* keyboard data queue */
     kqueue aux;			/* auxiliary data queue */
     int retry;
+    int quirks;			/* controller doesn't like deactivate */
+#define KBDC_QUIRK_KEEP_ACTIVATED	(1 << 0)
+#define KBDC_QUIRK_IGNORE_PROBE_RESULT	(1 << 1)
+#define KBDC_QUIRK_RESET_AFTER_PROBE	(1 << 2)
+#define KBDC_QUIRK_SETLEDS_ON_INIT	(1 << 3)
 } atkbdc_softc_t; 
 
 enum kbdc_device_ivar {

Modified: projects/building-blocks/sys/dev/atkbdc/psm.c
==============================================================================
--- projects/building-blocks/sys/dev/atkbdc/psm.c	Sun Feb 15 21:52:41 2015	(r278822)
+++ projects/building-blocks/sys/dev/atkbdc/psm.c	Sun Feb 15 21:59:05 2015	(r278823)
@@ -371,6 +371,10 @@ static devclass_t psm_devclass;
 /* other flags (flags) */
 #define	PSM_FLAGS_FINGERDOWN	0x0001	/* VersaPad finger down */
 
+#define kbdcp(p)			((atkbdc_softc_t *)(p))
+#define ALWAYS_RESTORE_CONTROLLER(kbdc)	!(kbdcp(kbdc)->quirks \
+    & KBDC_QUIRK_KEEP_ACTIVATED)
+
 /* Tunables */
 static int tap_enabled = -1;
 TUNABLE_INT("hw.psm.tap_enabled", &tap_enabled);
@@ -1231,7 +1235,8 @@ psmprobe(device_t dev)
 		 * this is CONTROLLER ERROR; I don't know how to recover
 		 * from this error...
 		 */
-		restore_controller(sc->kbdc, command_byte);
+		if (ALWAYS_RESTORE_CONTROLLER(sc->kbdc))
+			restore_controller(sc->kbdc, command_byte);
 		printf("psm%d: unable to set the command byte.\n", unit);
 		endprobe(ENXIO);
 	}
@@ -1270,7 +1275,8 @@ psmprobe(device_t dev)
 		recover_from_error(sc->kbdc);
 		if (sc->config & PSM_CONFIG_IGNPORTERROR)
 			break;
-		restore_controller(sc->kbdc, command_byte);
+		if (ALWAYS_RESTORE_CONTROLLER(sc->kbdc))
+			restore_controller(sc->kbdc, command_byte);
 		if (verbose)
 			printf("psm%d: the aux port is not functioning (%d).\n",
 			    unit, i);
@@ -1293,7 +1299,8 @@ psmprobe(device_t dev)
 		 */
 		if (!reset_aux_dev(sc->kbdc)) {
 			recover_from_error(sc->kbdc);
-			restore_controller(sc->kbdc, command_byte);
+			if (ALWAYS_RESTORE_CONTROLLER(sc->kbdc))
+				restore_controller(sc->kbdc, command_byte);
 			if (verbose)
 				printf("psm%d: failed to reset the aux "
 				    "device.\n", unit);
@@ -1315,7 +1322,8 @@ psmprobe(device_t dev)
 	if (!enable_aux_dev(sc->kbdc) || !disable_aux_dev(sc->kbdc)) {
 		/* MOUSE ERROR */
 		recover_from_error(sc->kbdc);
-		restore_controller(sc->kbdc, command_byte);
+		if (ALWAYS_RESTORE_CONTROLLER(sc->kbdc))
+			restore_controller(sc->kbdc, command_byte);
 		if (verbose)
 			printf("psm%d: failed to enable the aux device.\n",
 			    unit);
@@ -1337,7 +1345,8 @@ psmprobe(device_t dev)
 	/* verify the device is a mouse */
 	sc->hw.hwid = get_aux_id(sc->kbdc);
 	if (!is_a_mouse(sc->hw.hwid)) {
-		restore_controller(sc->kbdc, command_byte);
+		if (ALWAYS_RESTORE_CONTROLLER(sc->kbdc))
+			restore_controller(sc->kbdc, command_byte);
 		if (verbose)
 			printf("psm%d: unknown device type (%d).\n", unit,
 			    sc->hw.hwid);
@@ -1443,7 +1452,8 @@ psmprobe(device_t dev)
 		 * this is CONTROLLER ERROR; I don't know the proper way to
 		 * recover from this error...
 		 */
-		restore_controller(sc->kbdc, command_byte);
+		if (ALWAYS_RESTORE_CONTROLLER(sc->kbdc))
+			restore_controller(sc->kbdc, command_byte);
 		printf("psm%d: unable to set the command byte.\n", unit);
 		endprobe(ENXIO);
 	}

Modified: projects/building-blocks/sys/dev/usb/usbdevs
==============================================================================
--- projects/building-blocks/sys/dev/usb/usbdevs	Sun Feb 15 21:52:41 2015	(r278822)
+++ projects/building-blocks/sys/dev/usb/usbdevs	Sun Feb 15 21:59:05 2015	(r278823)
@@ -686,6 +686,7 @@ vendor ASUS2		0x1761	ASUS
 vendor SWEEX2		0x177f	Sweex
 vendor METAGEEK		0x1781	MetaGeek
 vendor KAMSTRUP		0x17a8	Kamstrup A/S
+vendor DISPLAYLINK	0x17e9	DisplayLink
 vendor LENOVO		0x17ef	Lenovo
 vendor WAVESENSE	0x17f4	WaveSense
 vendor VAISALA		0x1843	Vaisala
@@ -1655,6 +1656,27 @@ product DLINK2 RT3070_4		0x3c15	RT3070
 product DLINK2 RT3070_5		0x3c16	RT3070
 product DLINK3 DWM652		0x3e04	DWM-652
 
+/* DisplayLink products */
+product DISPLAYLINK LCD4300U	0x01ba	LCD-4300U
+product DISPLAYLINK LCD8000U	0x01bb	LCD-8000U
+product DISPLAYLINK LD220	0x0100	Samsung LD220
+product DISPLAYLINK GUC2020	0x0059	IOGEAR DVI GUC2020
+product DISPLAYLINK VCUD60	0x0136	Rextron DVI
+product DISPLAYLINK CONV	0x0138	StarTech CONV-USB2DVI
+product DISPLAYLINK DLDVI	0x0141	DisplayLink DVI
+product DISPLAYLINK VGA10	0x015a	CMP-USBVGA10
+product DISPLAYLINK WSDVI	0x0198	WS Tech DVI
+product DISPLAYLINK EC008	0x019b	EasyCAP008 DVI
+product DISPLAYLINK HPDOCK	0x01d4	HP USB Docking
+product DISPLAYLINK NL571	0x01d7	HP USB DVI
+product DISPLAYLINK M01061	0x01e2	Lenovo DVI
+product DISPLAYLINK SWDVI	0x024c	SUNWEIT DVI
+product DISPLAYLINK NBDOCK	0x0215	VideoHome NBdock1920
+product DISPLAYLINK LUM70	0x02a9	Lilliput UM-70
+product DISPLAYLINK UM7X0	0x401a	nanovision MiMo
+product DISPLAYLINK LT1421	0x03e0	Lenovo ThinkVision LT1421
+product DISPLAYLINK POLARIS2	0x0117	Polaris2 USB dock
+
 /* DMI products */
 product DMI CFSM_RW		0xa109	CF/SM Reader/Writer
 product DMI DISK		0x2bcf	Generic Disk

Modified: projects/building-blocks/sys/fs/ext2fs/ext2_htree.c
==============================================================================
--- projects/building-blocks/sys/fs/ext2fs/ext2_htree.c	Sun Feb 15 21:52:41 2015	(r278822)
+++ projects/building-blocks/sys/fs/ext2fs/ext2_htree.c	Sun Feb 15 21:59:05 2015	(r278823)
@@ -861,7 +861,7 @@ ext2_htree_add_entry(struct vnode *dvp, 
 	ext2_htree_split_dirblock((char *)bp->b_data, newdirblock, blksize,
 	    fs->e3fs_hash_seed, hash_version, &split_hash, entry);
 	cursize = roundup(ip->i_size, blksize);
-	dirsize = roundup(ip->i_size, blksize) + blksize;
+	dirsize = cursize + blksize;
 	blknum = dirsize / blksize - 1;
 
 	/* Add index entry for the new directory block */

Modified: projects/building-blocks/sys/fs/ext2fs/ext2_vfsops.c
==============================================================================
--- projects/building-blocks/sys/fs/ext2fs/ext2_vfsops.c	Sun Feb 15 21:52:41 2015	(r278822)
+++ projects/building-blocks/sys/fs/ext2fs/ext2_vfsops.c	Sun Feb 15 21:59:05 2015	(r278823)
@@ -355,7 +355,7 @@ compute_sb_data(struct vnode *devvp, str
 	}
 
 	fs->e2fs_ipb = fs->e2fs_bsize / EXT2_INODE_SIZE(fs);
-	fs->e2fs_itpg = fs->e2fs_ipg /fs->e2fs_ipb;
+	fs->e2fs_itpg = fs->e2fs_ipg / fs->e2fs_ipb;
 	/* s_resuid / s_resgid ? */
 	fs->e2fs_gcount = (es->e2fs_bcount - es->e2fs_first_dblock +
 	    EXT2_BLOCKS_PER_GROUP(fs) - 1) / EXT2_BLOCKS_PER_GROUP(fs);
@@ -365,7 +365,7 @@ compute_sb_data(struct vnode *devvp, str
 	fs->e2fs_gd = malloc(db_count * fs->e2fs_bsize,
 	    M_EXT2MNT, M_WAITOK);
 	fs->e2fs_contigdirs = malloc(fs->e2fs_gcount *
-	    sizeof(*fs->e2fs_contigdirs), M_EXT2MNT, M_WAITOK);
+	    sizeof(*fs->e2fs_contigdirs), M_EXT2MNT, M_WAITOK | M_ZERO);
 
 	/*
 	 * Adjust logic_sb_block.
@@ -379,6 +379,7 @@ compute_sb_data(struct vnode *devvp, str
 			 fsbtodb(fs, logic_sb_block + i + 1 ),
 			fs->e2fs_bsize, NOCRED, &bp);
 		if (error) {
+			free(fs->e2fs_contigdirs, M_EXT2MNT);
 			free(fs->e2fs_gd, M_EXT2MNT);
 			brelse(bp);
 			return (error);
@@ -390,11 +391,11 @@ compute_sb_data(struct vnode *devvp, str
 		brelse(bp);
 		bp = NULL;
 	}
+	/* Initialization for the ext2 Orlov allocator variant. */
 	fs->e2fs_total_dir = 0;
-	for (i=0; i < fs->e2fs_gcount; i++){
+	for (i = 0; i < fs->e2fs_gcount; i++)
 		fs->e2fs_total_dir += fs->e2fs_gd[i].ext2bgd_ndirs;
-		fs->e2fs_contigdirs[i] = 0;
-	}
+
 	if (es->e2fs_rev == E2FS_REV0 ||
 	    !EXT2_HAS_RO_COMPAT_FEATURE(fs, EXT2F_ROCOMPAT_LARGEFILE))
 		fs->e2fs_maxfilesize = 0x7fffffff;

Modified: projects/building-blocks/sys/kern/kern_procctl.c
==============================================================================
--- projects/building-blocks/sys/kern/kern_procctl.c	Sun Feb 15 21:52:41 2015	(r278822)
+++ projects/building-blocks/sys/kern/kern_procctl.c	Sun Feb 15 21:59:05 2015	(r278823)
@@ -160,7 +160,7 @@ static int
 reap_status(struct thread *td, struct proc *p,
     struct procctl_reaper_status *rs)
 {
-	struct proc *reap, *p2;
+	struct proc *reap, *p2, *first_p;
 
 	sx_assert(&proctree_lock, SX_LOCKED);
 	bzero(rs, sizeof(*rs));
@@ -176,8 +176,10 @@ reap_status(struct thread *td, struct pr
 	rs->rs_descendants = 0;
 	rs->rs_children = 0;
 	if (!LIST_EMPTY(&reap->p_reaplist)) {
-		KASSERT(!LIST_EMPTY(&reap->p_children), ("no children"));
-		rs->rs_pid = LIST_FIRST(&reap->p_children)->p_pid;
+		first_p = LIST_FIRST(&reap->p_children);
+		if (first_p == NULL)
+			first_p = LIST_FIRST(&reap->p_reaplist);
+		rs->rs_pid = first_p->p_pid;
 		LIST_FOREACH(p2, &reap->p_reaplist, p_reapsibling) {
 			if (proc_realparent(p2) == reap)
 				rs->rs_children++;
@@ -239,13 +241,13 @@ reap_kill(struct thread *td, struct proc
 	int error, error1;
 
 	sx_assert(&proctree_lock, SX_LOCKED);
-	PROC_UNLOCK(p);
 	if (IN_CAPABILITY_MODE(td))
 		return (ECAPMODE);
 	if (rk->rk_sig <= 0 || rk->rk_sig > _SIG_MAXSIG)
 		return (EINVAL);
 	if ((rk->rk_flags & ~REAPER_KILL_CHILDREN) != 0)
 		return (EINVAL);
+	PROC_UNLOCK(p);
 	reap = (p->p_treeflag & P_TREE_REAPER) == 0 ? p->p_reaper : p;
 	ksiginfo_init(&ksi);
 	ksi.ksi_signo = rk->rk_sig;

Modified: projects/building-blocks/sys/kern/uipc_socket.c
==============================================================================
--- projects/building-blocks/sys/kern/uipc_socket.c	Sun Feb 15 21:52:41 2015	(r278822)
+++ projects/building-blocks/sys/kern/uipc_socket.c	Sun Feb 15 21:59:05 2015	(r278823)
@@ -3439,11 +3439,9 @@ soisdisconnecting(struct socket *so)
 	SOCKBUF_LOCK(&so->so_rcv);
 	so->so_state &= ~SS_ISCONNECTING;
 	so->so_state |= SS_ISDISCONNECTING;
-	so->so_rcv.sb_state |= SBS_CANTRCVMORE;
-	sorwakeup_locked(so);
+	socantrcvmore_locked(so);
 	SOCKBUF_LOCK(&so->so_snd);
-	so->so_snd.sb_state |= SBS_CANTSENDMORE;
-	sowwakeup_locked(so);
+	socantsendmore_locked(so);
 	wakeup(&so->so_timeo);
 }
 
@@ -3458,12 +3456,10 @@ soisdisconnected(struct socket *so)
 	SOCKBUF_LOCK(&so->so_rcv);
 	so->so_state &= ~(SS_ISCONNECTING|SS_ISCONNECTED|SS_ISDISCONNECTING);
 	so->so_state |= SS_ISDISCONNECTED;
-	so->so_rcv.sb_state |= SBS_CANTRCVMORE;
-	sorwakeup_locked(so);
+	socantrcvmore_locked(so);
 	SOCKBUF_LOCK(&so->so_snd);
-	so->so_snd.sb_state |= SBS_CANTSENDMORE;
 	sbdrop_locked(&so->so_snd, sbused(&so->so_snd));
-	sowwakeup_locked(so);
+	socantsendmore_locked(so);
 	wakeup(&so->so_timeo);
 }
 

Modified: projects/building-blocks/usr.bin/timeout/timeout.c
==============================================================================
--- projects/building-blocks/usr.bin/timeout/timeout.c	Sun Feb 15 21:52:41 2015	(r278822)
+++ projects/building-blocks/usr.bin/timeout/timeout.c	Sun Feb 15 21:59:05 2015	(r278823)
@@ -172,6 +172,7 @@ main(int argc, char **argv)
 	double second_kill;
 	bool timedout = false;
 	bool do_second_kill = false;
+	bool child_done = false;
 	struct sigaction signals;
 	struct procctl_reaper_status info;

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



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