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/...
Garrett Cooper
ngie at FreeBSD.org
Sun Feb 15 21:59:14 UTC 2015
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 at 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 ***
More information about the svn-src-projects
mailing list