svn commit: r307896 - in user/alc/PQ_LAUNDRY: contrib/bsnmp/lib lib/libc/powerpc/gen lib/libnetbsd lib/libnetbsd/sys release/tools share/mk sys/amd64/amd64 sys/arm/allwinner sys/arm/conf sys/boot/e...
Alan Cox
alc at FreeBSD.org
Tue Oct 25 03:34:29 UTC 2016
Author: alc
Date: Tue Oct 25 03:34:24 2016
New Revision: 307896
URL: https://svnweb.freebsd.org/changeset/base/307896
Log:
MFH r307894
Added:
user/alc/PQ_LAUNDRY/sys/boot/forth/efi.4th
- copied unchanged from r307894, head/sys/boot/forth/efi.4th
Deleted:
user/alc/PQ_LAUNDRY/sys/boot/ficl/efi.c
Modified:
user/alc/PQ_LAUNDRY/contrib/bsnmp/lib/snmp.c
user/alc/PQ_LAUNDRY/lib/libc/powerpc/gen/Makefile.inc
user/alc/PQ_LAUNDRY/lib/libnetbsd/sys/cdefs.h
user/alc/PQ_LAUNDRY/lib/libnetbsd/util.c
user/alc/PQ_LAUNDRY/release/tools/arm.subr
user/alc/PQ_LAUNDRY/share/mk/bsd.compiler.mk
user/alc/PQ_LAUNDRY/sys/amd64/amd64/trap.c
user/alc/PQ_LAUNDRY/sys/arm/allwinner/aw_rsb.c
user/alc/PQ_LAUNDRY/sys/arm/allwinner/aw_thermal.c
user/alc/PQ_LAUNDRY/sys/arm/allwinner/files.allwinner
user/alc/PQ_LAUNDRY/sys/arm/conf/GENERIC
user/alc/PQ_LAUNDRY/sys/boot/efi/libefi/Makefile
user/alc/PQ_LAUNDRY/sys/boot/efi/libefi/env.c
user/alc/PQ_LAUNDRY/sys/boot/efi/loader/main.c
user/alc/PQ_LAUNDRY/sys/boot/fdt/dts/arm/olimex-a20-som-evb.dts
user/alc/PQ_LAUNDRY/sys/boot/ficl/loader.c
user/alc/PQ_LAUNDRY/sys/boot/forth/Makefile.inc
user/alc/PQ_LAUNDRY/sys/boot/forth/loader.4th
user/alc/PQ_LAUNDRY/sys/contrib/rdma/krping/krping.c
user/alc/PQ_LAUNDRY/sys/dev/cxgbe/t4_sge.c
user/alc/PQ_LAUNDRY/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
user/alc/PQ_LAUNDRY/sys/i386/i386/trap.c
user/alc/PQ_LAUNDRY/sys/kern/subr_prf.c
user/alc/PQ_LAUNDRY/sys/netinet/ip_output.c
user/alc/PQ_LAUNDRY/sys/ufs/ffs/ffs_tables.c
user/alc/PQ_LAUNDRY/sys/x86/include/x86_var.h
user/alc/PQ_LAUNDRY/sys/x86/x86/cpu_machdep.c
user/alc/PQ_LAUNDRY/sys/x86/x86/mp_x86.c
user/alc/PQ_LAUNDRY/usr.sbin/mountd/mountd.8
user/alc/PQ_LAUNDRY/usr.sbin/mountd/mountd.c
Directory Properties:
user/alc/PQ_LAUNDRY/ (props changed)
Modified: user/alc/PQ_LAUNDRY/contrib/bsnmp/lib/snmp.c
==============================================================================
--- user/alc/PQ_LAUNDRY/contrib/bsnmp/lib/snmp.c Tue Oct 25 03:26:00 2016 (r307895)
+++ user/alc/PQ_LAUNDRY/contrib/bsnmp/lib/snmp.c Tue Oct 25 03:34:24 2016 (r307896)
@@ -288,7 +288,7 @@ parse_secparams(struct asn_buf *b, struc
memset(buf, 0, 256);
tb.asn_ptr = buf;
tb.asn_len = 256;
- u_int len;
+ u_int len = 256;
if (asn_get_octetstring(b, buf, &len) != ASN_ERR_OK) {
snmp_error("cannot parse usm header");
Modified: user/alc/PQ_LAUNDRY/lib/libc/powerpc/gen/Makefile.inc
==============================================================================
--- user/alc/PQ_LAUNDRY/lib/libc/powerpc/gen/Makefile.inc Tue Oct 25 03:26:00 2016 (r307895)
+++ user/alc/PQ_LAUNDRY/lib/libc/powerpc/gen/Makefile.inc Tue Oct 25 03:34:24 2016 (r307896)
@@ -1,6 +1,6 @@
# $FreeBSD$
-.include "${LIBC_SRC}/powerpc/gen/Makefile.common"
+.include "${LIBC_SRCTOP}/powerpc/gen/Makefile.common"
SRCS += fabs.S flt_rounds.c fpgetmask.c fpgetround.c \
fpgetsticky.c fpsetmask.c fpsetround.c \
Modified: user/alc/PQ_LAUNDRY/lib/libnetbsd/sys/cdefs.h
==============================================================================
--- user/alc/PQ_LAUNDRY/lib/libnetbsd/sys/cdefs.h Tue Oct 25 03:26:00 2016 (r307895)
+++ user/alc/PQ_LAUNDRY/lib/libnetbsd/sys/cdefs.h Tue Oct 25 03:34:24 2016 (r307896)
@@ -35,11 +35,13 @@
#include_next <sys/cdefs.h>
+#ifndef __dead
#ifdef __dead2
#define __dead __dead2
#else
#define __dead
#endif
+#endif /* !__dead */
/*
* The __CONCAT macro is used to concatenate parts of symbol names, e.g.
Modified: user/alc/PQ_LAUNDRY/lib/libnetbsd/util.c
==============================================================================
--- user/alc/PQ_LAUNDRY/lib/libnetbsd/util.c Tue Oct 25 03:26:00 2016 (r307895)
+++ user/alc/PQ_LAUNDRY/lib/libnetbsd/util.c Tue Oct 25 03:34:24 2016 (r307896)
@@ -36,7 +36,8 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include <util.h>
+
+#include "util.h"
char *
flags_to_string(u_long flags, const char *def)
Modified: user/alc/PQ_LAUNDRY/release/tools/arm.subr
==============================================================================
--- user/alc/PQ_LAUNDRY/release/tools/arm.subr Tue Oct 25 03:26:00 2016 (r307895)
+++ user/alc/PQ_LAUNDRY/release/tools/arm.subr Tue Oct 25 03:34:24 2016 (r307896)
@@ -88,7 +88,6 @@ arm_create_user() {
-c 'FreeBSD User' -d '/home/freebsd' -s '/bin/csh'
chroot ${CHROOTDIR} /usr/sbin/pw -R ${DESTDIR} \
usermod root -w yes
- chroot ${CHROOTDIR} ln -s /home ${DESTDIR}/usr/home
return 0
}
Modified: user/alc/PQ_LAUNDRY/share/mk/bsd.compiler.mk
==============================================================================
--- user/alc/PQ_LAUNDRY/share/mk/bsd.compiler.mk Tue Oct 25 03:26:00 2016 (r307895)
+++ user/alc/PQ_LAUNDRY/share/mk/bsd.compiler.mk Tue Oct 25 03:34:24 2016 (r307896)
@@ -147,7 +147,7 @@ ${X_}COMPILER_TYPE:= clang
${X_}COMPILER_TYPE:= gcc
. elif ${_v:M\(GCC\)}
${X_}COMPILER_TYPE:= gcc
-. elif ${_v:Mclang}
+. elif ${_v:Mclang} || ${_v:M(clang-*.*.*)}
${X_}COMPILER_TYPE:= clang
. else
.error Unable to determine compiler type for ${cc}=${${cc}}. Consider setting ${X_}COMPILER_TYPE.
Modified: user/alc/PQ_LAUNDRY/sys/amd64/amd64/trap.c
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/amd64/amd64/trap.c Tue Oct 25 03:26:00 2016 (r307895)
+++ user/alc/PQ_LAUNDRY/sys/amd64/amd64/trap.c Tue Oct 25 03:34:24 2016 (r307896)
@@ -144,9 +144,6 @@ static char *trap_msg[] = {
"DTrace pid return trap", /* 32 T_DTRACE_RET */
};
-static int panic_on_nmi = 1;
-SYSCTL_INT(_machdep, OID_AUTO, panic_on_nmi, CTLFLAG_RWTUN,
- &panic_on_nmi, 0, "Panic on NMI");
static int prot_fault_translation;
SYSCTL_INT(_machdep, OID_AUTO, prot_fault_translation, CTLFLAG_RWTUN,
&prot_fault_translation, 0,
@@ -372,7 +369,7 @@ trap(struct trapframe *frame)
#ifdef DEV_ISA
case T_NMI:
- nmi_handle_intr(type, frame, true);
+ nmi_handle_intr(type, frame);
break;
#endif /* DEV_ISA */
@@ -544,10 +541,8 @@ trap(struct trapframe *frame)
#ifdef DEV_ISA
case T_NMI:
- if (nmi_handle_intr(type, frame, false) ||
- !panic_on_nmi)
- goto out;
- /* FALLTHROUGH */
+ nmi_handle_intr(type, frame);
+ goto out;
#endif /* DEV_ISA */
}
Modified: user/alc/PQ_LAUNDRY/sys/arm/allwinner/aw_rsb.c
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/arm/allwinner/aw_rsb.c Tue Oct 25 03:26:00 2016 (r307895)
+++ user/alc/PQ_LAUNDRY/sys/arm/allwinner/aw_rsb.c Tue Oct 25 03:34:24 2016 (r307896)
@@ -27,7 +27,7 @@
*/
/*
- * Allwinner RSB (Reduced Serial Bus)
+ * Allwinner RSB (Reduced Serial Bus) and P2WI (Push-Pull Two Wire Interface)
*/
#include <sys/cdefs.h>
@@ -92,8 +92,12 @@ __FBSDID("$FreeBSD$");
#define RSB_ADDR_PMIC_SECONDARY 0x745
#define RSB_ADDR_PERIPH_IC 0xe89
+#define A31_P2WI 1
+#define A23_RSB 2
+
static struct ofw_compat_data compat_data[] = {
- { "allwinner,sun8i-a23-rsb", 1 },
+ { "allwinner,sun6i-a31-p2wi", A31_P2WI },
+ { "allwinner,sun8i-a23-rsb", A23_RSB },
{ NULL, 0 }
};
@@ -131,6 +135,7 @@ struct rsb_softc {
int busy;
uint32_t status;
uint16_t cur_addr;
+ int type;
struct iic_msg *msg;
};
@@ -270,8 +275,8 @@ rsb_transfer(device_t dev, struct iic_ms
sc = device_get_softc(dev);
/*
- * RSB is not really an I2C or SMBus controller, so there are some
- * restrictions imposed by the driver.
+ * P2WI and RSB are not really I2C or SMBus controllers, so there are
+ * some restrictions imposed by the driver.
*
* Transfers must contain exactly two messages. The first is always
* a write, containing a single data byte offset. Data will either
@@ -284,34 +289,36 @@ rsb_transfer(device_t dev, struct iic_ms
msgs[0].len != 1 || msgs[1].len > RSB_MAXLEN)
return (EINVAL);
- /* The controller can read or write 1, 2, or 4 bytes at a time. */
- if ((msgs[1].flags & IIC_M_RD) != 0) {
- switch (msgs[1].len) {
- case 1:
- cmd = CMD_RD8;
- break;
- case 2:
- cmd = CMD_RD16;
- break;
- case 4:
- cmd = CMD_RD32;
- break;
- default:
- return (EINVAL);
- }
- } else {
- switch (msgs[1].len) {
- case 1:
- cmd = CMD_WR8;
- break;
- case 2:
- cmd = CMD_WR16;
- break;
- case 4:
- cmd = CMD_WR32;
- break;
- default:
- return (EINVAL);
+ /* The RSB controller can read or write 1, 2, or 4 bytes at a time. */
+ if (sc->type == A23_RSB) {
+ if ((msgs[1].flags & IIC_M_RD) != 0) {
+ switch (msgs[1].len) {
+ case 1:
+ cmd = CMD_RD8;
+ break;
+ case 2:
+ cmd = CMD_RD16;
+ break;
+ case 4:
+ cmd = CMD_RD32;
+ break;
+ default:
+ return (EINVAL);
+ }
+ } else {
+ switch (msgs[1].len) {
+ case 1:
+ cmd = CMD_WR8;
+ break;
+ case 2:
+ cmd = CMD_WR16;
+ break;
+ case 4:
+ cmd = CMD_WR32;
+ break;
+ default:
+ return (EINVAL);
+ }
}
}
@@ -322,13 +329,15 @@ rsb_transfer(device_t dev, struct iic_ms
sc->status = 0;
/* Select current run-time address if necessary */
- device_addr = msgs[0].slave >> 1;
- if (sc->cur_addr != device_addr) {
- error = rsb_set_rta(dev, device_addr);
- if (error != 0)
- goto done;
- sc->cur_addr = device_addr;
- sc->status = 0;
+ if (sc->type == A23_RSB) {
+ device_addr = msgs[0].slave >> 1;
+ if (sc->cur_addr != device_addr) {
+ error = rsb_set_rta(dev, device_addr);
+ if (error != 0)
+ goto done;
+ sc->cur_addr = device_addr;
+ sc->status = 0;
+ }
}
/* Clear interrupt status */
@@ -344,8 +353,9 @@ rsb_transfer(device_t dev, struct iic_ms
RSB_WRITE(sc, RSB_DATA0, data[0]);
}
- /* Set command type */
- RSB_WRITE(sc, RSB_CMD, cmd);
+ /* Set command type for RSB */
+ if (sc->type == A23_RSB)
+ RSB_WRITE(sc, RSB_CMD, cmd);
/* Program data length register and transfer direction */
dlen = msgs[0].len - 1;
@@ -379,10 +389,17 @@ rsb_probe(device_t dev)
if (!ofw_bus_status_okay(dev))
return (ENXIO);
- if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0)
+ switch (ofw_bus_search_compatible(dev, compat_data)->ocd_data) {
+ case A23_RSB:
+ device_set_desc(dev, "Allwinner RSB");
+ break;
+ case A31_P2WI:
+ device_set_desc(dev, "Allwinner P2WI");
+ break;
+ default:
return (ENXIO);
+ }
- device_set_desc(dev, "Allwinner RSB");
return (BUS_PROBE_DEFAULT);
}
@@ -395,6 +412,8 @@ rsb_attach(device_t dev)
sc = device_get_softc(dev);
mtx_init(&sc->mtx, device_get_nameunit(dev), "rsb", MTX_DEF);
+ sc->type = ofw_bus_search_compatible(dev, compat_data)->ocd_data;
+
if (clk_get_by_ofw_index(dev, 0, 0, &sc->clk) == 0) {
error = clk_enable(sc->clk);
if (error != 0) {
Modified: user/alc/PQ_LAUNDRY/sys/arm/allwinner/aw_thermal.c
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/arm/allwinner/aw_thermal.c Tue Oct 25 03:26:00 2016 (r307895)
+++ user/alc/PQ_LAUNDRY/sys/arm/allwinner/aw_thermal.c Tue Oct 25 03:34:24 2016 (r307896)
@@ -42,6 +42,7 @@ __FBSDID("$FreeBSD$");
#include <sys/reboot.h>
#include <sys/module.h>
#include <sys/cpu.h>
+#include <sys/taskqueue.h>
#include <machine/bus.h>
#include <dev/ofw/ofw_bus.h>
@@ -249,6 +250,7 @@ struct aw_thermal_softc {
struct resource *res[2];
struct aw_thermal_config *conf;
+ struct task cf_task;
int throttle;
int min_freq;
struct cf_level levels[MAX_CF_LEVELS];
@@ -390,6 +392,16 @@ aw_thermal_throttle(struct aw_thermal_so
}
static void
+aw_thermal_cf_task(void *arg, int pending)
+{
+ struct aw_thermal_softc *sc;
+
+ sc = arg;
+
+ aw_thermal_throttle(sc, 1);
+}
+
+static void
aw_thermal_cf_pre_change(void *arg, const struct cf_level *level, int *status)
{
struct aw_thermal_softc *sc;
@@ -430,7 +442,7 @@ aw_thermal_intr(void *arg)
}
if ((ints & ALARM_INT_ALL) != 0)
- aw_thermal_throttle(sc, 1);
+ taskqueue_enqueue(taskqueue_thread, &sc->cf_task);
}
static int
@@ -461,6 +473,7 @@ aw_thermal_attach(device_t dev)
ih = NULL;
sc->conf = THS_CONF(dev);
+ TASK_INIT(&sc->cf_task, 0, aw_thermal_cf_task, sc);
if (bus_alloc_resources(dev, aw_thermal_spec, sc->res) != 0) {
device_printf(dev, "cannot allocate resources for device\n");
Modified: user/alc/PQ_LAUNDRY/sys/arm/allwinner/files.allwinner
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/arm/allwinner/files.allwinner Tue Oct 25 03:26:00 2016 (r307895)
+++ user/alc/PQ_LAUNDRY/sys/arm/allwinner/files.allwinner Tue Oct 25 03:34:24 2016 (r307896)
@@ -12,7 +12,7 @@ arm/allwinner/a10_mmc.c optional mmc
arm/allwinner/a10_sramc.c standard
arm/allwinner/aw_nmi.c optional intrng
arm/allwinner/aw_if_dwc.c optional dwc
-arm/allwinner/aw_rsb.c optional rsb
+arm/allwinner/aw_rsb.c optional rsb | p2wi
arm/allwinner/aw_rtc.c standard
arm/allwinner/aw_ts.c standard
arm/allwinner/aw_wdog.c standard
Modified: user/alc/PQ_LAUNDRY/sys/arm/conf/GENERIC
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/arm/conf/GENERIC Tue Oct 25 03:26:00 2016 (r307895)
+++ user/alc/PQ_LAUNDRY/sys/arm/conf/GENERIC Tue Oct 25 03:34:24 2016 (r307896)
@@ -106,11 +106,13 @@ device psci
device iicbus
device iic
device twsi
-device rsb
+device rsb # Allwinner Reduced Serial Bus
+device p2wi # Allwinner Push-Pull Two Wire
device axp209 # AXP209 Power Management Unit
device axp81x # AXP813/818 Power Management Unit
device bcm2835_bsc
device icee
+device sy8106a # SY8106A Buck Regulator
# GPIO
device gpio
Modified: user/alc/PQ_LAUNDRY/sys/boot/efi/libefi/Makefile
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/boot/efi/libefi/Makefile Tue Oct 25 03:26:00 2016 (r307895)
+++ user/alc/PQ_LAUNDRY/sys/boot/efi/libefi/Makefile Tue Oct 25 03:34:24 2016 (r307896)
@@ -26,6 +26,7 @@ CFLAGS+= -msoft-float -mgeneral-regs-onl
.if ${MACHINE_ARCH} == "amd64"
CFLAGS+= -fPIC -mno-red-zone
.endif
+CFLAGS+= -I${.CURDIR}/../../ficl -I${.CURDIR}/../../ficl/${MACHINE}
CFLAGS+= -I${.CURDIR}/../include
CFLAGS+= -I${.CURDIR}/../include/${MACHINE}
CFLAGS+= -I${.CURDIR}/../../../../lib/libstand
Modified: user/alc/PQ_LAUNDRY/sys/boot/efi/libefi/env.c
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/boot/efi/libefi/env.c Tue Oct 25 03:26:00 2016 (r307895)
+++ user/alc/PQ_LAUNDRY/sys/boot/efi/libefi/env.c Tue Oct 25 03:34:24 2016 (r307896)
@@ -26,8 +26,15 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include <stand.h>
+#include <string.h>
#include <efi.h>
#include <efilib.h>
+#include <uuid.h>
+#include "bootstrap.h"
+#include "ficl.h"
+
+int efi_variable_support = 1;
/*
* Simple wrappers to the underlying UEFI functions.
@@ -53,3 +60,175 @@ efi_set_variable(CHAR16 *variable_name,
{
return RS->SetVariable(variable_name, vendor_guid, attributes, data_size, data);
}
+
+/*
+ * FreeBSD's loader interaction words and extras
+ *
+ * efi-setenv ( value n name n guid n attr -- 0 | -1)
+ * efi-getenv ( guid n addr n -- addr' n' | -1 )
+ * efi-unsetenv ( name n guid n'' -- )
+ */
+
+/*
+ * efi-setenv
+ * efi-setenv ( value n name n guid n attr -- 0 | -1)
+ *
+ * Set environment variables using the SetVariable EFI runtime service.
+ *
+ * Value and guid are passed through in binary form (so guid needs to be
+ * converted to binary form from its string form). Name is converted from
+ * ASCII to CHAR16. Since ficl doesn't have support for internationalization,
+ * there's no native CHAR16 interface provided.
+ *
+ * attr is an int in the bitmask of the following attributes for this variable.
+ *
+ * 1 Non volatile
+ * 2 Boot service access
+ * 4 Run time access
+ * (corresponding to the same bits in the UEFI spec).
+ */
+void
+ficlEfiSetenv(FICL_VM *pVM)
+{
+#ifndef TESTMAIN
+ char *value = NULL, *guid = NULL;
+ CHAR16 *name = NULL;
+ int i;
+#endif
+ char *namep, *valuep, *guidp;
+ int names, values, guids, attr;
+ int status;
+ uuid_t u;
+ uint32_t ustatus;
+
+#if FICL_ROBUST > 1
+ vmCheckStack(pVM, 6, 0);
+#endif
+ attr = stackPopINT(pVM->pStack);
+ guids = stackPopINT(pVM->pStack);
+ guidp = (char*)stackPopPtr(pVM->pStack);
+ names = stackPopINT(pVM->pStack);
+ namep = (char*)stackPopPtr(pVM->pStack);
+ values = stackPopINT(pVM->pStack);
+ valuep = (char*)stackPopPtr(pVM->pStack);
+
+#ifndef TESTMAIN
+ guid = (char*)ficlMalloc(guids);
+ if (guid != NULL)
+ vmThrowErr(pVM, "Error: out of memory");
+ memcpy(guid, guidp, guids);
+ uuid_from_string(guid, &u, &ustatus);
+ if (ustatus != uuid_s_ok) {
+ stackPushINT(pVM->pStack, -1);
+ goto out;
+ }
+
+ name = (CHAR16 *)ficlMalloc((names + 1) * sizeof(CHAR16));
+ if (name == NULL)
+ vmThrowErr(pVM, "Error: out of memory");
+ for (i = 0; i < names; i++)
+ name[i] = namep[i];
+ name[names] = (CHAR16)0;
+
+ value = (char*)ficlMalloc(values + 1);
+ if (value != NULL)
+ vmThrowErr(pVM, "Error: out of memory");
+ memcpy(value, valuep, values);
+
+ status = efi_set_variable(name, (EFI_GUID *)&u, attr, values, value);
+ if (status == EFI_SUCCESS)
+ stackPushINT(pVM->pStack, 0);
+ else
+ stackPushINT(pVM->pStack, -1);
+out:
+ ficlFree(name);
+ ficlFree(value);
+ ficlFree(guid);
+#endif
+
+ return;
+}
+
+void
+ficlEfiGetenv(FICL_VM *pVM)
+{
+#ifndef TESTMAIN
+ char *name, *value;
+#endif
+ char *namep;
+ int names;
+
+#if FICL_ROBUST > 1
+ vmCheckStack(pVM, 2, 2);
+#endif
+ names = stackPopINT(pVM->pStack);
+ namep = (char*) stackPopPtr(pVM->pStack);
+
+#ifndef TESTMAIN
+ name = (char*) ficlMalloc(names+1);
+ if (!name)
+ vmThrowErr(pVM, "Error: out of memory");
+ strncpy(name, namep, names);
+ name[names] = '\0';
+
+ value = getenv(name);
+ ficlFree(name);
+
+ if(value != NULL) {
+ stackPushPtr(pVM->pStack, value);
+ stackPushINT(pVM->pStack, strlen(value));
+ } else
+#endif
+ stackPushINT(pVM->pStack, -1);
+
+ return;
+}
+
+void
+ficlEfiUnsetenv(FICL_VM *pVM)
+{
+#ifndef TESTMAIN
+ char *name;
+#endif
+ char *namep;
+ int names;
+
+#if FICL_ROBUST > 1
+ vmCheckStack(pVM, 2, 0);
+#endif
+ names = stackPopINT(pVM->pStack);
+ namep = (char*) stackPopPtr(pVM->pStack);
+
+#ifndef TESTMAIN
+ name = (char*) ficlMalloc(names+1);
+ if (!name)
+ vmThrowErr(pVM, "Error: out of memory");
+ strncpy(name, namep, names);
+ name[names] = '\0';
+
+ unsetenv(name);
+ ficlFree(name);
+#endif
+
+ return;
+}
+
+/**************************************************************************
+** Add FreeBSD UEFI platform extensions into the system dictionary
+**************************************************************************/
+void ficlEfiCompilePlatform(FICL_SYSTEM *pSys)
+{
+ FICL_DICT *dp = pSys->dp;
+ assert (dp);
+
+ dictAppendWord(dp, "efi-setenv", ficlEfiSetenv, FW_DEFAULT);
+ dictAppendWord(dp, "efi-getenv", ficlEfiGetenv, FW_DEFAULT);
+ dictAppendWord(dp, "efi-unsetenv", ficlEfiUnsetenv, FW_DEFAULT);
+
+ /* Would like to export the EFI version, but this will do for now */
+ ficlSetEnv(pSys, "efi-boot", 1);
+
+ return;
+}
+
+FICL_COMPILE_SET(ficlEfiCompilePlatform);
Modified: user/alc/PQ_LAUNDRY/sys/boot/efi/loader/main.c
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/boot/efi/loader/main.c Tue Oct 25 03:26:00 2016 (r307895)
+++ user/alc/PQ_LAUNDRY/sys/boot/efi/loader/main.c Tue Oct 25 03:34:24 2016 (r307896)
@@ -55,6 +55,10 @@ extern char bootprog_rev[];
extern char bootprog_date[];
extern char bootprog_maker[];
+/* Force a reference to bring in EFI support from the library */
+extern int efi_variable_support;
+int *dummy1 = &efi_variable_support;
+
struct arch_switch archsw; /* MI/MD interface boundary */
EFI_GUID acpi = ACPI_TABLE_GUID;
@@ -906,8 +910,8 @@ command_efi_show(int argc, char *argv[])
return (rv);
}
- if (argc != 0) {
- printf("Too many args\n");
+ if (argc > 0) {
+ printf("Too many args %d\n", argc);
pager_close();
return (CMD_ERROR);
}
Modified: user/alc/PQ_LAUNDRY/sys/boot/fdt/dts/arm/olimex-a20-som-evb.dts
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/boot/fdt/dts/arm/olimex-a20-som-evb.dts Tue Oct 25 03:26:00 2016 (r307895)
+++ user/alc/PQ_LAUNDRY/sys/boot/fdt/dts/arm/olimex-a20-som-evb.dts Tue Oct 25 03:34:24 2016 (r307896)
@@ -41,3 +41,7 @@
};
};
};
+
+&cpu0 {
+ cpu-supply = <®_dcdc2>;
+};
Modified: user/alc/PQ_LAUNDRY/sys/boot/ficl/loader.c
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/boot/ficl/loader.c Tue Oct 25 03:26:00 2016 (r307895)
+++ user/alc/PQ_LAUNDRY/sys/boot/ficl/loader.c Tue Oct 25 03:34:24 2016 (r307896)
@@ -824,9 +824,8 @@ void ficlCompilePlatform(FICL_SYSTEM *pS
dictAppendWord(dp, "uuid-from-string", ficlUuidFromString, FW_DEFAULT);
dictAppendWord(dp, "uuid-to-string", ficlUuidToString, FW_DEFAULT);
- SET_FOREACH(fnpp, Xficl_compile_set) {
+ SET_FOREACH(fnpp, Xficl_compile_set)
(*fnpp)(pSys);
- }
#if defined(PC98)
ficlSetEnv(pSys, "arch-pc98", FICL_TRUE);
Modified: user/alc/PQ_LAUNDRY/sys/boot/forth/Makefile.inc
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/boot/forth/Makefile.inc Tue Oct 25 03:26:00 2016 (r307895)
+++ user/alc/PQ_LAUNDRY/sys/boot/forth/Makefile.inc Tue Oct 25 03:34:24 2016 (r307896)
@@ -6,6 +6,7 @@ FILES+= brand-fbsd.4th
FILES+= check-password.4th
FILES+= color.4th
FILES+= delay.4th
+FILES+= efi.4th
FILES+= frames.4th
FILES+= loader.4th
FILES+= loader.conf
Copied: user/alc/PQ_LAUNDRY/sys/boot/forth/efi.4th (from r307894, head/sys/boot/forth/efi.4th)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/alc/PQ_LAUNDRY/sys/boot/forth/efi.4th Tue Oct 25 03:34:24 2016 (r307896, copy of r307894, head/sys/boot/forth/efi.4th)
@@ -0,0 +1,30 @@
+\ Copyright (c) 2016 Netflix, Inc
+\ All rights reserved.
+\
+\ Redistribution and use in source and binary forms, with or without
+\ modification, are permitted provided that the following conditions
+\ are met:
+\ 1. Redistributions of source code must retain the above copyright
+\ notice, this list of conditions and the following disclaimer.
+\ 2. Redistributions in binary form must reproduce the above copyright
+\ notice, this list of conditions and the following disclaimer in the
+\ documentation and/or other materials provided with the distribution.
+\
+\ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+\ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+\ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+\ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+\ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+\ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+\ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+\ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+\ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+\ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+\ SUCH DAMAGE.
+\
+\ $FreeBSD$
+
+only forth definitions
+
+\ Place holder for more functions
+.( EFI boot environment) cr
Modified: user/alc/PQ_LAUNDRY/sys/boot/forth/loader.4th
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/boot/forth/loader.4th Tue Oct 25 03:26:00 2016 (r307895)
+++ user/alc/PQ_LAUNDRY/sys/boot/forth/loader.4th Tue Oct 25 03:34:24 2016 (r307896)
@@ -46,6 +46,9 @@ include /boot/support.4th
include /boot/color.4th
include /boot/delay.4th
include /boot/check-password.4th
+s" efi-boot" environment? [if] [if]
+ include /boot/efi.4th
+[then] [then]
only forth definitions
Modified: user/alc/PQ_LAUNDRY/sys/contrib/rdma/krping/krping.c
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/contrib/rdma/krping/krping.c Tue Oct 25 03:26:00 2016 (r307895)
+++ user/alc/PQ_LAUNDRY/sys/contrib/rdma/krping/krping.c Tue Oct 25 03:34:24 2016 (r307896)
@@ -548,11 +548,11 @@ static int krping_setup_buffers(struct k
DEBUG_LOG(cb, "krping_setup_buffers called on cb %p\n", cb);
- cb->recv_dma_addr = dma_map_single(cb->pd->device->dma_device,
+ cb->recv_dma_addr = ib_dma_map_single(cb->pd->device,
&cb->recv_buf,
sizeof(cb->recv_buf), DMA_BIDIRECTIONAL);
pci_unmap_addr_set(cb, recv_mapping, cb->recv_dma_addr);
- cb->send_dma_addr = dma_map_single(cb->pd->device->dma_device,
+ cb->send_dma_addr = ib_dma_map_single(cb->pd->device,
&cb->send_buf, sizeof(cb->send_buf),
DMA_BIDIRECTIONAL);
pci_unmap_addr_set(cb, send_mapping, cb->send_dma_addr);
@@ -606,7 +606,7 @@ static int krping_setup_buffers(struct k
goto bail;
}
- cb->rdma_dma_addr = dma_map_single(cb->pd->device->dma_device,
+ cb->rdma_dma_addr = ib_dma_map_single(cb->pd->device,
cb->rdma_buf, cb->size,
DMA_BIDIRECTIONAL);
pci_unmap_addr_set(cb, rdma_mapping, cb->rdma_dma_addr);
@@ -676,7 +676,7 @@ static int krping_setup_buffers(struct k
goto bail;
}
- cb->start_dma_addr = dma_map_single(cb->pd->device->dma_device,
+ cb->start_dma_addr = ib_dma_map_single(cb->pd->device,
cb->start_buf, cb->size,
DMA_BIDIRECTIONAL);
pci_unmap_addr_set(cb, start_mapping, cb->start_dma_addr);
@@ -1707,7 +1707,7 @@ static void krping_fr_test5(struct krpin
goto err2;
}
DEBUG_LOG(cb, "%s buf[%u] %p\n", __func__, scnt, buf[scnt]);
- dma_addr[scnt] = dma_map_single(cb->pd->device->dma_device,
+ dma_addr[scnt] = ib_dma_map_single(cb->pd->device,
buf[scnt], cb->size,
DMA_BIDIRECTIONAL);
if (dma_mapping_error(cb->pd->device->dma_device,
@@ -2032,7 +2032,7 @@ static void krping_fr_test6(struct krpin
goto err2;
}
DEBUG_LOG(cb, "%s buf[%u] %p\n", __func__, scnt, buf[scnt]);
- dma_addr[scnt] = dma_map_single(cb->pd->device->dma_device,
+ dma_addr[scnt] = ib_dma_map_single(cb->pd->device,
buf[scnt], cb->size,
DMA_BIDIRECTIONAL);
if (dma_mapping_error(cb->pd->device->dma_device,
Modified: user/alc/PQ_LAUNDRY/sys/dev/cxgbe/t4_sge.c
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/dev/cxgbe/t4_sge.c Tue Oct 25 03:26:00 2016 (r307895)
+++ user/alc/PQ_LAUNDRY/sys/dev/cxgbe/t4_sge.c Tue Oct 25 03:34:24 2016 (r307896)
@@ -2110,24 +2110,6 @@ m_advance(struct mbuf **pm, int *poffset
return ((void *)p);
}
-static inline int
-same_paddr(char *a, char *b)
-{
-
- if (a == b)
- return (1);
- else if (a != NULL && b != NULL) {
- vm_offset_t x = (vm_offset_t)a;
- vm_offset_t y = (vm_offset_t)b;
-
- if ((x & PAGE_MASK) == (y & PAGE_MASK) &&
- pmap_kextract(x) == pmap_kextract(y))
- return (1);
- }
-
- return (0);
-}
-
/*
* Can deal with empty mbufs in the chain that have m_len = 0, but the chain
* must have at least one mbuf that's not empty.
@@ -2135,24 +2117,25 @@ same_paddr(char *a, char *b)
static inline int
count_mbuf_nsegs(struct mbuf *m)
{
- char *prev_end, *start;
+ vm_paddr_t lastb, next;
+ vm_offset_t va;
int len, nsegs;
MPASS(m != NULL);
nsegs = 0;
- prev_end = NULL;
+ lastb = 0;
for (; m; m = m->m_next) {
len = m->m_len;
if (__predict_false(len == 0))
continue;
- start = mtod(m, char *);
-
- nsegs += sglist_count(start, len);
- if (same_paddr(prev_end, start))
+ va = mtod(m, vm_offset_t);
+ next = pmap_kextract(va);
+ nsegs += sglist_count(m->m_data, len);
+ if (lastb + 1 == next)
nsegs--;
- prev_end = start + len;
+ lastb = pmap_kextract(va + len - 1);
}
MPASS(nsegs > 0);
Modified: user/alc/PQ_LAUNDRY/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c Tue Oct 25 03:26:00 2016 (r307895)
+++ user/alc/PQ_LAUNDRY/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c Tue Oct 25 03:34:24 2016 (r307896)
@@ -789,6 +789,7 @@ netvsc_attach(device_t dev)
* Setup the ifnet for this interface.
*/
+ ifp->if_baudrate = IF_Gbps(10);
ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
ifp->if_ioctl = hn_ioctl;
ifp->if_init = hn_init;
Modified: user/alc/PQ_LAUNDRY/sys/i386/i386/trap.c
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/i386/i386/trap.c Tue Oct 25 03:26:00 2016 (r307895)
+++ user/alc/PQ_LAUNDRY/sys/i386/i386/trap.c Tue Oct 25 03:34:24 2016 (r307896)
@@ -158,14 +158,6 @@ static char *trap_msg[] = {
int has_f00f_bug = 0; /* Initialized so that it can be patched. */
#endif
-#ifdef KDB
-static int kdb_on_nmi = 1;
-SYSCTL_INT(_machdep, OID_AUTO, kdb_on_nmi, CTLFLAG_RWTUN,
- &kdb_on_nmi, 0, "Go to KDB on NMI");
-#endif
-static int panic_on_nmi = 1;
-SYSCTL_INT(_machdep, OID_AUTO, panic_on_nmi, CTLFLAG_RWTUN,
- &panic_on_nmi, 0, "Panic on NMI");
static int prot_fault_translation = 0;
SYSCTL_INT(_machdep, OID_AUTO, prot_fault_translation, CTLFLAG_RW,
&prot_fault_translation, 0, "Select signal to deliver on protection fault");
@@ -467,7 +459,7 @@ user_trctrap_out:
}
goto userout;
#else /* !POWERFAIL_NMI */
- nmi_handle_intr(type, frame, true);
+ nmi_handle_intr(type, frame);
break;
#endif /* POWERFAIL_NMI */
#endif /* DEV_ISA */
@@ -716,10 +708,8 @@ kernel_trctrap:
}
goto out;
#else /* !POWERFAIL_NMI */
- if (nmi_handle_intr(type, frame, false) ||
- !panic_on_nmi)
- goto out;
- /* FALLTHROUGH */
+ nmi_handle_intr(type, frame);
+ goto out;
#endif /* POWERFAIL_NMI */
#endif /* DEV_ISA */
}
Modified: user/alc/PQ_LAUNDRY/sys/kern/subr_prf.c
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/kern/subr_prf.c Tue Oct 25 03:26:00 2016 (r307895)
+++ user/alc/PQ_LAUNDRY/sys/kern/subr_prf.c Tue Oct 25 03:34:24 2016 (r307896)
@@ -72,7 +72,11 @@ __FBSDID("$FreeBSD$");
* Note that stdarg.h and the ANSI style va_start macro is used for both
* ANSI and traditional C compilers.
*/
+#ifdef _KERNEL
#include <machine/stdarg.h>
+#else
+#include <stdarg.h>
+#endif
#ifdef _KERNEL
Modified: user/alc/PQ_LAUNDRY/sys/netinet/ip_output.c
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/netinet/ip_output.c Tue Oct 25 03:26:00 2016 (r307895)
+++ user/alc/PQ_LAUNDRY/sys/netinet/ip_output.c Tue Oct 25 03:34:24 2016 (r307896)
@@ -350,7 +350,8 @@ again:
have_ia_ref = 1;
ifp = ia->ia_ifp;
ip->ip_ttl = 1;
- isbroadcast = in_ifaddr_broadcast(dst->sin_addr, ia);
+ isbroadcast = ifp->if_flags & IFF_BROADCAST ?
+ in_ifaddr_broadcast(dst->sin_addr, ia) : 0;
} else if (IN_MULTICAST(ntohl(ip->ip_dst.s_addr)) &&
imo != NULL && imo->imo_multicast_ifp != NULL) {
/*
@@ -403,8 +404,10 @@ again:
gw = (struct sockaddr_in *)rte->rt_gateway;
if (rte->rt_flags & RTF_HOST)
isbroadcast = (rte->rt_flags & RTF_BROADCAST);
- else
+ else if (ifp->if_flags & IFF_BROADCAST)
isbroadcast = in_ifaddr_broadcast(gw->sin_addr, ia);
+ else
+ isbroadcast = 0;
}
/*
Modified: user/alc/PQ_LAUNDRY/sys/ufs/ffs/ffs_tables.c
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/ufs/ffs/ffs_tables.c Tue Oct 25 03:26:00 2016 (r307895)
+++ user/alc/PQ_LAUNDRY/sys/ufs/ffs/ffs_tables.c Tue Oct 25 03:34:24 2016 (r307896)
@@ -33,6 +33,7 @@
__FBSDID("$FreeBSD$");
#include <sys/param.h>
+#include <sys/types.h>
#include <ufs/ufs/dinode.h>
#include <ufs/ffs/fs.h>
Modified: user/alc/PQ_LAUNDRY/sys/x86/include/x86_var.h
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/x86/include/x86_var.h Tue Oct 25 03:26:00 2016 (r307895)
+++ user/alc/PQ_LAUNDRY/sys/x86/include/x86_var.h Tue Oct 25 03:34:24 2016 (r307896)
@@ -108,10 +108,9 @@ bool fix_cpuid(void);
void fillw(int /*u_short*/ pat, void *base, size_t cnt);
int is_physical_memory(vm_paddr_t addr);
int isa_nmi(int cd);
-bool nmi_call_kdb(u_int cpu, u_int type, struct trapframe *frame,
- bool panic);
-bool nmi_call_kdb_smp(u_int type, struct trapframe *frame, bool panic);
-int nmi_handle_intr(u_int type, struct trapframe *frame, bool panic);
+void nmi_call_kdb(u_int cpu, u_int type, struct trapframe *frame);
+void nmi_call_kdb_smp(u_int type, struct trapframe *frame);
+void nmi_handle_intr(u_int type, struct trapframe *frame);
void pagecopy(void *from, void *to);
void printcpuinfo(void);
int user_dbreg_trap(void);
Modified: user/alc/PQ_LAUNDRY/sys/x86/x86/cpu_machdep.c
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/x86/x86/cpu_machdep.c Tue Oct 25 03:26:00 2016 (r307895)
+++ user/alc/PQ_LAUNDRY/sys/x86/x86/cpu_machdep.c Tue Oct 25 03:34:24 2016 (r307896)
@@ -524,6 +524,10 @@ idle_sysctl(SYSCTL_HANDLER_ARGS)
SYSCTL_PROC(_machdep, OID_AUTO, idle, CTLTYPE_STRING | CTLFLAG_RW, 0, 0,
idle_sysctl, "A", "currently selected idle function");
+static int panic_on_nmi = 1;
+SYSCTL_INT(_machdep, OID_AUTO, panic_on_nmi, CTLFLAG_RWTUN,
+ &panic_on_nmi, 0,
+ "Panic on NMI");
int nmi_is_broadcast = 1;
SYSCTL_INT(_machdep, OID_AUTO, nmi_is_broadcast, CTLFLAG_RWTUN,
&nmi_is_broadcast, 0,
@@ -536,8 +540,8 @@ SYSCTL_INT(_machdep, OID_AUTO, kdb_on_nm
#endif
#ifdef DEV_ISA
-bool
-nmi_call_kdb(u_int cpu, u_int type, struct trapframe *frame, bool do_panic)
+void
+nmi_call_kdb(u_int cpu, u_int type, struct trapframe *frame)
{
/* machine/parity/power fail/"kitchen sink" faults */
@@ -549,26 +553,25 @@ nmi_call_kdb(u_int cpu, u_int type, stru
if (kdb_on_nmi) {
printf ("NMI/cpu%d ... going to debugger\n", cpu);
kdb_trap(type, 0, frame);
- return (true);
}
- } else
#endif /* KDB */
- if (do_panic)
+ } else if (panic_on_nmi) {
panic("NMI indicates hardware failure");
- return (false);
+ }
}
#endif
-int
-nmi_handle_intr(u_int type, struct trapframe *frame, bool panic)
+void
+nmi_handle_intr(u_int type, struct trapframe *frame)
{
#ifdef DEV_ISA
#ifdef SMP
- if (nmi_is_broadcast)
- return (nmi_call_kdb_smp(type, frame, panic));
- else
+ if (nmi_is_broadcast) {
+ nmi_call_kdb_smp(type, frame);
+ return;
+ }
#endif
- return (nmi_call_kdb(0, type, frame, panic));
+ nmi_call_kdb(0, type, frame);
#endif
}
Modified: user/alc/PQ_LAUNDRY/sys/x86/x86/mp_x86.c
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/x86/x86/mp_x86.c Tue Oct 25 03:26:00 2016 (r307895)
+++ user/alc/PQ_LAUNDRY/sys/x86/x86/mp_x86.c Tue Oct 25 03:34:24 2016 (r307896)
@@ -1216,18 +1216,17 @@ ipi_nmi_handler(void)
#ifdef DEV_ISA
int nmi_kdb_lock;
-bool
-nmi_call_kdb_smp(u_int type, struct trapframe *frame, bool do_panic)
+void
+nmi_call_kdb_smp(u_int type, struct trapframe *frame)
{
int cpu;
- bool call_post, ret;
+ bool call_post;
cpu = PCPU_GET(cpuid);
if (atomic_cmpset_acq_int(&nmi_kdb_lock, 0, 1)) {
- ret = nmi_call_kdb(cpu, type, frame, do_panic);
+ nmi_call_kdb(cpu, type, frame);
call_post = false;
} else {
- ret = true;
savectx(&stoppcbs[cpu]);
CPU_SET_ATOMIC(cpu, &stopped_cpus);
while (!atomic_cmpset_acq_int(&nmi_kdb_lock, 0, 1))
@@ -1237,7 +1236,6 @@ nmi_call_kdb_smp(u_int type, struct trap
atomic_store_rel_int(&nmi_kdb_lock, 0);
if (call_post)
cpustop_handler_post(cpu);
- return (ret);
}
#endif
@@ -1351,7 +1349,7 @@ invlcache_handler(void)
* Reading the generation here allows greater parallelism
* since wbinvd is a serializing instruction. Without the
* temporary, we'd wait for wbinvd to complete, then the read
- * would execute, then the dependent write, whuch must then
+ * would execute, then the dependent write, which must then
* complete before return from interrupt.
*/
generation = smp_tlb_generation;
Modified: user/alc/PQ_LAUNDRY/usr.sbin/mountd/mountd.8
==============================================================================
--- user/alc/PQ_LAUNDRY/usr.sbin/mountd/mountd.8 Tue Oct 25 03:26:00 2016 (r307895)
+++ user/alc/PQ_LAUNDRY/usr.sbin/mountd/mountd.8 Tue Oct 25 03:34:24 2016 (r307896)
@@ -28,7 +28,7 @@
.\" @(#)mountd.8 8.4 (Berkeley) 4/28/95
.\" $FreeBSD$
.\"
-.Dd October 14, 2012
+.Dd October 24, 2016
.Dt MOUNTD 8
.Os
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-user
mailing list