svn commit: r321351 - in projects/clang500-import: contrib/netbsd-tests/lib/libc/regex/data lib/libc/tests/sys lib/librt share/mk sys/amd64/amd64 sys/conf sys/dev/e1000 sys/dev/netmap sys/fs/nfscli...
Dimitry Andric
dim at FreeBSD.org
Fri Jul 21 18:54:38 UTC 2017
Author: dim
Date: Fri Jul 21 18:54:34 2017
New Revision: 321351
URL: https://svnweb.freebsd.org/changeset/base/321351
Log:
Merge ^/head r321307 through r321350.
Added:
projects/clang500-import/sys/powerpc/cpufreq/mpc85xx_jog.c
- copied unchanged from r321350, head/sys/powerpc/cpufreq/mpc85xx_jog.c
Modified:
projects/clang500-import/contrib/netbsd-tests/lib/libc/regex/data/subexp.in
projects/clang500-import/lib/libc/tests/sys/Makefile
projects/clang500-import/lib/librt/Symbol.map
projects/clang500-import/lib/librt/aio.c
projects/clang500-import/share/mk/bsd.files.mk
projects/clang500-import/share/mk/bsd.sys.mk
projects/clang500-import/sys/amd64/amd64/pmap.c
projects/clang500-import/sys/conf/files.powerpc
projects/clang500-import/sys/dev/e1000/if_em.c
projects/clang500-import/sys/dev/netmap/netmap_freebsd.c
projects/clang500-import/sys/dev/netmap/netmap_generic.c
projects/clang500-import/sys/dev/netmap/netmap_mem2.c
projects/clang500-import/sys/fs/nfsclient/nfs_clrpcops.c
projects/clang500-import/sys/kern/uipc_socket.c
projects/clang500-import/sys/net/netmap_user.h
projects/clang500-import/sys/netpfil/ipfw/ip_fw_table.c
projects/clang500-import/sys/ufs/ffs/ffs_snapshot.c
projects/clang500-import/sys/vm/vm_object.h
projects/clang500-import/sys/x86/x86/mp_x86.c
projects/clang500-import/tests/sys/aio/lio_test.c
projects/clang500-import/usr.bin/ktrace/ktrace.1
projects/clang500-import/usr.bin/truss/truss.1
projects/clang500-import/usr.sbin/bsdinstall/scripts/hardening
Directory Properties:
projects/clang500-import/ (props changed)
projects/clang500-import/contrib/netbsd-tests/ (props changed)
Modified: projects/clang500-import/contrib/netbsd-tests/lib/libc/regex/data/subexp.in
==============================================================================
--- projects/clang500-import/contrib/netbsd-tests/lib/libc/regex/data/subexp.in Fri Jul 21 18:53:43 2017 (r321350)
+++ projects/clang500-import/contrib/netbsd-tests/lib/libc/regex/data/subexp.in Fri Jul 21 18:54:34 2017 (r321351)
@@ -11,6 +11,9 @@ a(b+)c - abc abc b
a(b+)c - abbbc abbbc bbb
a(b*)c - ac ac @c
(a|ab)(bc([de]+)f|cde) - abcdef abcdef a,bcdef,de
+# Begin FreeBSD
+a\(b\|c\)d b ab|cd ab|cd b|c
+# End FreeBSD
# the regression tester only asks for 9 subexpressions
a(b)(c)(d)(e)(f)(g)(h)(i)(j)k - abcdefghijk abcdefghijk b,c,d,e,f,g,h,i,j
a(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)l - abcdefghijkl abcdefghijkl b,c,d,e,f,g,h,i,j,k
Modified: projects/clang500-import/lib/libc/tests/sys/Makefile
==============================================================================
--- projects/clang500-import/lib/libc/tests/sys/Makefile Fri Jul 21 18:53:43 2017 (r321350)
+++ projects/clang500-import/lib/libc/tests/sys/Makefile Fri Jul 21 18:54:34 2017 (r321351)
@@ -87,7 +87,7 @@ FILESGROUPS+= truncate_test_FILES
truncate_test_FILES= truncate_test.root_owned
truncate_test_FILESDIR= ${TESTSDIR}
truncate_test_FILESMODE= 0600
-truncate_test_FILESOWNER= root
+truncate_test_FILESOWN= root
truncate_test_FILESGRP= wheel
truncate_test_FILESPACKAGE= ${PACKAGE}
Modified: projects/clang500-import/lib/librt/Symbol.map
==============================================================================
--- projects/clang500-import/lib/librt/Symbol.map Fri Jul 21 18:53:43 2017 (r321350)
+++ projects/clang500-import/lib/librt/Symbol.map Fri Jul 21 18:54:34 2017 (r321351)
@@ -26,6 +26,7 @@ FBSD_1.0 {
};
FBSD_1.5 {
+ lio_listio;
mq_getfd_np;
timer_oshandle_np;
};
Modified: projects/clang500-import/lib/librt/aio.c
==============================================================================
--- projects/clang500-import/lib/librt/aio.c Fri Jul 21 18:53:43 2017 (r321350)
+++ projects/clang500-import/lib/librt/aio.c Fri Jul 21 18:54:34 2017 (r321351)
@@ -44,6 +44,7 @@ __weak_reference(__aio_write, aio_write);
__weak_reference(__aio_return, aio_return);
__weak_reference(__aio_waitcomplete, aio_waitcomplete);
__weak_reference(__aio_fsync, aio_fsync);
+__weak_reference(__lio_listio, lio_listio);
typedef void (*aio_func)(union sigval val, struct aiocb *iocb);
@@ -53,6 +54,8 @@ extern ssize_t __sys_aio_waitcomplete(struct aiocb **i
extern ssize_t __sys_aio_return(struct aiocb *iocb);
extern int __sys_aio_error(struct aiocb *iocb);
extern int __sys_aio_fsync(int op, struct aiocb *iocb);
+extern int __sys_lio_listio(int mode, struct aiocb * const list[], int nent,
+ struct sigevent *sig);
static void
aio_dispatch(struct sigev_node *sn)
@@ -63,8 +66,8 @@ aio_dispatch(struct sigev_node *sn)
}
static int
-aio_sigev_alloc(struct aiocb *iocb, struct sigev_node **sn,
- struct sigevent *saved_ev)
+aio_sigev_alloc(sigev_id_t id, struct sigevent *sigevent,
+ struct sigev_node **sn, struct sigevent *saved_ev)
{
if (__sigev_check_init()) {
/* This might be that thread library is not enabled. */
@@ -72,15 +75,15 @@ aio_sigev_alloc(struct aiocb *iocb, struct sigev_node
return (-1);
}
- *sn = __sigev_alloc(SI_ASYNCIO, &iocb->aio_sigevent, NULL, 1);
+ *sn = __sigev_alloc(SI_ASYNCIO, sigevent, NULL, 1);
if (*sn == NULL) {
errno = EAGAIN;
return (-1);
}
- *saved_ev = iocb->aio_sigevent;
- (*sn)->sn_id = (sigev_id_t)iocb;
- __sigev_get_sigevent(*sn, &iocb->aio_sigevent, (*sn)->sn_id);
+ *saved_ev = *sigevent;
+ (*sn)->sn_id = id;
+ __sigev_get_sigevent(*sn, sigevent, (*sn)->sn_id);
(*sn)->sn_dispatch = aio_dispatch;
__sigev_list_lock();
@@ -102,7 +105,8 @@ aio_io(struct aiocb *iocb, int (*sysfunc)(struct aiocb
return (ret);
}
- ret = aio_sigev_alloc(iocb, &sn, &saved_ev);
+ ret = aio_sigev_alloc((sigev_id_t)iocb, &iocb->aio_sigevent, &sn,
+ &saved_ev);
if (ret)
return (ret);
ret = sysfunc(iocb);
@@ -183,11 +187,38 @@ __aio_fsync(int op, struct aiocb *iocb)
if (iocb->aio_sigevent.sigev_notify != SIGEV_THREAD)
return __sys_aio_fsync(op, iocb);
- ret = aio_sigev_alloc(iocb, &sn, &saved_ev);
+ ret = aio_sigev_alloc((sigev_id_t)iocb, &iocb->aio_sigevent, &sn,
+ &saved_ev);
if (ret)
return (ret);
ret = __sys_aio_fsync(op, iocb);
iocb->aio_sigevent = saved_ev;
+ if (ret != 0) {
+ err = errno;
+ __sigev_list_lock();
+ __sigev_delete_node(sn);
+ __sigev_list_unlock();
+ errno = err;
+ }
+ return (ret);
+}
+
+int
+__lio_listio(int mode, struct aiocb * const list[], int nent,
+ struct sigevent *sig)
+{
+ struct sigev_node *sn;
+ struct sigevent saved_ev;
+ int ret, err;
+
+ if (sig == NULL || sig->sigev_notify != SIGEV_THREAD)
+ return (__sys_lio_listio(mode, list, nent, sig));
+
+ ret = aio_sigev_alloc((sigev_id_t)list, sig, &sn, &saved_ev);
+ if (ret)
+ return (ret);
+ ret = __sys_lio_listio(mode, list, nent, sig);
+ *sig = saved_ev;
if (ret != 0) {
err = errno;
__sigev_list_lock();
Modified: projects/clang500-import/share/mk/bsd.files.mk
==============================================================================
--- projects/clang500-import/share/mk/bsd.files.mk Fri Jul 21 18:53:43 2017 (r321350)
+++ projects/clang500-import/share/mk/bsd.files.mk Fri Jul 21 18:54:34 2017 (r321351)
@@ -26,6 +26,10 @@ installfiles: installfiles-${group}
${group}OWN?= ${SHAREOWN}
${group}GRP?= ${SHAREGRP}
+.if ${MK_INSTALL_AS_USER} == "yes"
+${group}OWN= ${SHAREOWN}
+${group}GRP= ${SHAREGRP}
+.endif
${group}MODE?= ${SHAREMODE}
${group}DIR?= ${BINDIR}
STAGE_SETS+= ${group:C,[/*],_,g}
@@ -46,6 +50,10 @@ _${group}FILES=
defined(${group}NAME_${file:T}) || defined(${group}NAME)
${group}OWN_${file:T}?= ${${group}OWN}
${group}GRP_${file:T}?= ${${group}GRP}
+.if ${MK_INSTALL_AS_USER} == "yes"
+${group}OWN_${file:T}= ${SHAREOWN}
+${group}GRP_${file:T}= ${SHAREGRP}
+.endif
${group}MODE_${file:T}?= ${${group}MODE}
${group}DIR_${file:T}?= ${${group}DIR}
.if defined(${group}NAME)
Modified: projects/clang500-import/share/mk/bsd.sys.mk
==============================================================================
--- projects/clang500-import/share/mk/bsd.sys.mk Fri Jul 21 18:53:43 2017 (r321350)
+++ projects/clang500-import/share/mk/bsd.sys.mk Fri Jul 21 18:54:34 2017 (r321351)
@@ -145,6 +145,23 @@ CWARNFLAGS+= -Wno-error=misleading-indentation \
-Wno-error=unused-const-variable
.endif
+# GCC 7.1.0
+.if ${COMPILER_TYPE} == "gcc" && ${COMPILER_VERSION} >= 70100
+CWARNFLAGS+= -Wno-error=deprecated \
+ -Wno-error=pointer-compare \
+ -Wno-error=format-truncation \
+ -Wno-error=implicit-fallthrough \
+ -Wno-error=expansion-to-defined \
+ -Wno-error=int-in-bool-context \
+ -Wno-error=bool-operation \
+ -Wno-error=format-overflow \
+ -Wno-error=stringop-overflow \
+ -Wno-error=memset-elt-size \
+ -Wno-error=int-in-bool-context \
+ -Wno-error=unused-const-variable \
+ -Wno-error=nonnull
+.endif
+
# How to handle FreeBSD custom printf format specifiers.
.if ${COMPILER_TYPE} == "clang" && ${COMPILER_VERSION} >= 30600
FORMAT_EXTENSIONS= -D__printf__=__freebsd_kprintf__
Modified: projects/clang500-import/sys/amd64/amd64/pmap.c
==============================================================================
--- projects/clang500-import/sys/amd64/amd64/pmap.c Fri Jul 21 18:53:43 2017 (r321350)
+++ projects/clang500-import/sys/amd64/amd64/pmap.c Fri Jul 21 18:54:34 2017 (r321351)
@@ -274,8 +274,6 @@ pmap_modified_bit(pmap_t pmap)
return (mask);
}
-extern struct pcpu __pcpu[];
-
#if !defined(DIAGNOSTIC)
#ifdef __GNUC_GNU_INLINE__
#define PMAP_INLINE __attribute__((__gnu_inline__)) inline
@@ -1063,8 +1061,8 @@ pmap_bootstrap(vm_paddr_t *firstaddr)
kernel_pmap->pm_pcids[i].pm_pcid = PMAP_PCID_KERN;
kernel_pmap->pm_pcids[i].pm_gen = 1;
}
- __pcpu[0].pc_pcid_next = PMAP_PCID_KERN + 1;
- __pcpu[0].pc_pcid_gen = 1;
+ PCPU_SET(pcid_next, PMAP_PCID_KERN + 1);
+ PCPU_SET(pcid_gen, 1);
/*
* pcpu area for APs is zeroed during AP startup.
* pc_pcid_next and pc_pcid_gen are initialized by AP
Modified: projects/clang500-import/sys/conf/files.powerpc
==============================================================================
--- projects/clang500-import/sys/conf/files.powerpc Fri Jul 21 18:53:43 2017 (r321350)
+++ projects/clang500-import/sys/conf/files.powerpc Fri Jul 21 18:54:34 2017 (r321351)
@@ -15,7 +15,7 @@ font.h optional sc \
clean "font.h ${SC_DFLT_FONT}-8x14 ${SC_DFLT_FONT}-8x16 ${SC_DFLT_FONT}-8x8"
#
# There is only an asm version on ppc64.
-cddl/compat/opensolaris/kern/opensolaris_atomic.c optional zfs powerpc | dtrace powerpc compile-with "${ZFS_C}"
+cddl/compat/opensolaris/kern/opensolaris_atomic.c optional zfs powerpc | dtrace powerpc | zfs powerpcspe | dtrace powerpcspe compile-with "${ZFS_C}"
cddl/contrib/opensolaris/common/atomic/powerpc64/opensolaris_atomic.S optional zfs powerpc64 | dtrace powerpc64 compile-with "${ZFS_S}"
cddl/dev/dtrace/powerpc/dtrace_asm.S optional dtrace compile-with "${DTRACE_S}"
cddl/dev/dtrace/powerpc/dtrace_subr.c optional dtrace compile-with "${DTRACE_C}"
@@ -118,6 +118,7 @@ powerpc/booke/platform_bare.c optional booke
powerpc/booke/pmap.c optional booke
powerpc/booke/spe.c optional powerpcspe
powerpc/cpufreq/dfs.c optional cpufreq
+powerpc/cpufreq/mpc85xx_jog.c optional cpufreq mpc85xx
powerpc/cpufreq/pcr.c optional cpufreq aim
powerpc/cpufreq/pmufreq.c optional cpufreq aim pmu
powerpc/fpu/fpu_add.c optional fpu_emu
Modified: projects/clang500-import/sys/dev/e1000/if_em.c
==============================================================================
--- projects/clang500-import/sys/dev/e1000/if_em.c Fri Jul 21 18:53:43 2017 (r321350)
+++ projects/clang500-import/sys/dev/e1000/if_em.c Fri Jul 21 18:54:34 2017 (r321351)
@@ -1663,9 +1663,7 @@ em_if_timer(if_ctx_t ctx, uint16_t qid)
if (qid != 0)
return;
- em_if_update_admin_status(ctx);
- em_update_stats_counters(adapter);
-
+ iflib_admin_intr_deferred(ctx);
/* Reset LAA into RAR[0] on 82571 */
if ((adapter->hw.mac.type == e1000_82571) &&
e1000_get_laa_state_82571(&adapter->hw))
@@ -1781,6 +1779,7 @@ em_if_update_admin_status(if_ctx_t ctx)
iflib_link_state_change(ctx, LINK_STATE_DOWN, ifp->if_baudrate);
printf("link state changed to down\n");
}
+ em_update_stats_counters(adapter);
E1000_WRITE_REG(&adapter->hw, E1000_IMS, EM_MSIX_LINK | E1000_IMS_LSC);
}
Modified: projects/clang500-import/sys/dev/netmap/netmap_freebsd.c
==============================================================================
--- projects/clang500-import/sys/dev/netmap/netmap_freebsd.c Fri Jul 21 18:53:43 2017 (r321350)
+++ projects/clang500-import/sys/dev/netmap/netmap_freebsd.c Fri Jul 21 18:54:34 2017 (r321351)
@@ -671,7 +671,7 @@ nm_os_pt_memdev_iomap(struct ptnetmap_memdev *ptn_dev,
&rid, 0, ~0, *mem_size, RF_ACTIVE);
if (ptn_dev->pci_mem == NULL) {
*nm_paddr = 0;
- *nm_addr = 0;
+ *nm_addr = NULL;
return ENOMEM;
}
Modified: projects/clang500-import/sys/dev/netmap/netmap_generic.c
==============================================================================
--- projects/clang500-import/sys/dev/netmap/netmap_generic.c Fri Jul 21 18:53:43 2017 (r321350)
+++ projects/clang500-import/sys/dev/netmap/netmap_generic.c Fri Jul 21 18:54:34 2017 (r321351)
@@ -75,6 +75,7 @@ __FBSDID("$FreeBSD$");
#include <sys/socket.h> /* sockaddrs */
#include <sys/selinfo.h>
#include <net/if.h>
+#include <net/if_types.h>
#include <net/if_var.h>
#include <machine/bus.h> /* bus_dmamap_* in netmap_kern.h */
@@ -1197,6 +1198,13 @@ generic_netmap_attach(struct ifnet *ifp)
struct netmap_generic_adapter *gna;
int retval;
u_int num_tx_desc, num_rx_desc;
+
+#ifdef __FreeBSD__
+ if (ifp->if_type == IFT_LOOP) {
+ D("if_loop is not supported by %s", __func__);
+ return EINVAL;
+ }
+#endif
num_tx_desc = num_rx_desc = netmap_generic_ringsize; /* starting point */
Modified: projects/clang500-import/sys/dev/netmap/netmap_mem2.c
==============================================================================
--- projects/clang500-import/sys/dev/netmap/netmap_mem2.c Fri Jul 21 18:53:43 2017 (r321350)
+++ projects/clang500-import/sys/dev/netmap/netmap_mem2.c Fri Jul 21 18:54:34 2017 (r321351)
@@ -2146,7 +2146,7 @@ netmap_mem_pt_guest_deref(struct netmap_mem_d *nmd)
if (ptnmd->ptn_dev) {
nm_os_pt_memdev_iounmap(ptnmd->ptn_dev);
}
- ptnmd->nm_addr = 0;
+ ptnmd->nm_addr = NULL;
ptnmd->nm_paddr = 0;
}
}
Modified: projects/clang500-import/sys/fs/nfsclient/nfs_clrpcops.c
==============================================================================
--- projects/clang500-import/sys/fs/nfsclient/nfs_clrpcops.c Fri Jul 21 18:53:43 2017 (r321350)
+++ projects/clang500-import/sys/fs/nfsclient/nfs_clrpcops.c Fri Jul 21 18:54:34 2017 (r321351)
@@ -4674,6 +4674,11 @@ nfsrpc_createsession(struct nfsmount *nmp, struct nfsc
struct nfsrv_descript *nd = &nfsd;
int error, irdcnt;
+ /* Make sure nm_rsize, nm_wsize is set. */
+ if (nmp->nm_rsize > NFS_MAXBSIZE || nmp->nm_rsize == 0)
+ nmp->nm_rsize = NFS_MAXBSIZE;
+ if (nmp->nm_wsize > NFS_MAXBSIZE || nmp->nm_wsize == 0)
+ nmp->nm_wsize = NFS_MAXBSIZE;
nfscl_reqstart(nd, NFSPROC_CREATESESSION, nmp, NULL, 0, NULL, NULL);
NFSM_BUILD(tl, uint32_t *, 4 * NFSX_UNSIGNED);
*tl++ = sep->nfsess_clientid.lval[0];
Modified: projects/clang500-import/sys/kern/uipc_socket.c
==============================================================================
--- projects/clang500-import/sys/kern/uipc_socket.c Fri Jul 21 18:53:43 2017 (r321350)
+++ projects/clang500-import/sys/kern/uipc_socket.c Fri Jul 21 18:54:34 2017 (r321351)
@@ -3020,19 +3020,23 @@ integer:
goto integer;
case SO_SNDBUF:
- optval = so->so_snd.sb_hiwat;
+ optval = SOLISTENING(so) ? so->sol_sbsnd_hiwat :
+ so->so_snd.sb_hiwat;
goto integer;
case SO_RCVBUF:
- optval = so->so_rcv.sb_hiwat;
+ optval = SOLISTENING(so) ? so->sol_sbrcv_hiwat :
+ so->so_rcv.sb_hiwat;
goto integer;
case SO_SNDLOWAT:
- optval = so->so_snd.sb_lowat;
+ optval = SOLISTENING(so) ? so->sol_sbsnd_lowat :
+ so->so_snd.sb_lowat;
goto integer;
case SO_RCVLOWAT:
- optval = so->so_rcv.sb_lowat;
+ optval = SOLISTENING(so) ? so->sol_sbrcv_lowat :
+ so->so_rcv.sb_lowat;
goto integer;
case SO_SNDTIMEO:
Modified: projects/clang500-import/sys/net/netmap_user.h
==============================================================================
--- projects/clang500-import/sys/net/netmap_user.h Fri Jul 21 18:53:43 2017 (r321350)
+++ projects/clang500-import/sys/net/netmap_user.h Fri Jul 21 18:54:34 2017 (r321351)
@@ -309,16 +309,16 @@ typedef void (*nm_cb_t)(u_char *, const struct nm_pkth
* ifname (netmap:foo or vale:foo) is the port name
* a suffix can indicate the follwing:
* ^ bind the host (sw) ring pair
- * * bind host and NIC ring pairs (transparent)
+ * * bind host and NIC ring pairs
* -NN bind individual NIC ring pair
* {NN bind master side of pipe NN
* }NN bind slave side of pipe NN
* a suffix starting with / and the following flags,
* in any order:
* x exclusive access
- * z zero copy monitor
- * t monitor tx side
- * r monitor rx side
+ * z zero copy monitor (both tx and rx)
+ * t monitor tx side (copy monitor)
+ * r monitor rx side (copy monitor)
* R bind only RX ring(s)
* T bind only TX ring(s)
*
@@ -634,9 +634,10 @@ nm_open(const char *ifname, const struct nmreq *req,
const char *vpname = NULL;
#define MAXERRMSG 80
char errmsg[MAXERRMSG] = "";
- enum { P_START, P_RNGSFXOK, P_GETNUM, P_FLAGS, P_FLAGSOK } p_state;
+ enum { P_START, P_RNGSFXOK, P_GETNUM, P_FLAGS, P_FLAGSOK, P_MEMID } p_state;
int is_vale;
long num;
+ uint16_t nr_arg2 = 0;
if (strncmp(ifname, "netmap:", 7) &&
strncmp(ifname, NM_BDG_NAME, strlen(NM_BDG_NAME))) {
@@ -665,7 +666,7 @@ nm_open(const char *ifname, const struct nmreq *req,
}
/* scan for a separator */
- for (; *port && !index("-*^{}/", *port); port++)
+ for (; *port && !index("-*^{}/@", *port); port++)
;
if (is_vale && !nm_is_identifier(vpname, port)) {
@@ -707,6 +708,9 @@ nm_open(const char *ifname, const struct nmreq *req,
case '/': /* start of flags */
p_state = P_FLAGS;
break;
+ case '@': /* start of memid */
+ p_state = P_MEMID;
+ break;
default:
snprintf(errmsg, MAXERRMSG, "unknown modifier: '%c'", *port);
goto fail;
@@ -718,6 +722,9 @@ nm_open(const char *ifname, const struct nmreq *req,
case '/':
p_state = P_FLAGS;
break;
+ case '@':
+ p_state = P_MEMID;
+ break;
default:
snprintf(errmsg, MAXERRMSG, "unexpected character: '%c'", *port);
goto fail;
@@ -736,6 +743,11 @@ nm_open(const char *ifname, const struct nmreq *req,
break;
case P_FLAGS:
case P_FLAGSOK:
+ if (*port == '@') {
+ port++;
+ p_state = P_MEMID;
+ break;
+ }
switch (*port) {
case 'x':
nr_flags |= NR_EXCLUSIVE;
@@ -762,17 +774,25 @@ nm_open(const char *ifname, const struct nmreq *req,
port++;
p_state = P_FLAGSOK;
break;
+ case P_MEMID:
+ if (nr_arg2 != 0) {
+ snprintf(errmsg, MAXERRMSG, "double setting of memid");
+ goto fail;
+ }
+ num = strtol(port, (char **)&port, 10);
+ if (num <= 0) {
+ snprintf(errmsg, MAXERRMSG, "invalid memid %ld, must be >0", num);
+ goto fail;
+ }
+ nr_arg2 = num;
+ p_state = P_RNGSFXOK;
+ break;
}
}
if (p_state != P_START && p_state != P_RNGSFXOK && p_state != P_FLAGSOK) {
snprintf(errmsg, MAXERRMSG, "unexpected end of port name");
goto fail;
}
- if ((nr_flags & NR_ZCOPY_MON) &&
- !(nr_flags & (NR_MONITOR_TX|NR_MONITOR_RX))) {
- snprintf(errmsg, MAXERRMSG, "'z' used but neither 'r', nor 't' found");
- goto fail;
- }
ND("flags: %s %s %s %s",
(nr_flags & NR_EXCLUSIVE) ? "EXCLUSIVE" : "",
(nr_flags & NR_ZCOPY_MON) ? "ZCOPY_MON" : "",
@@ -799,6 +819,8 @@ nm_open(const char *ifname, const struct nmreq *req,
/* these fields are overridden by ifname and flags processing */
d->req.nr_ringid |= nr_ringid;
d->req.nr_flags |= nr_flags;
+ if (nr_arg2)
+ d->req.nr_arg2 = nr_arg2;
memcpy(d->req.nr_name, ifname, namelen);
d->req.nr_name[namelen] = '\0';
/* optionally import info from parent */
@@ -848,7 +870,7 @@ nm_open(const char *ifname, const struct nmreq *req,
nr_reg = d->req.nr_flags & NR_REG_MASK;
- if (nr_reg == NR_REG_SW) { /* host stack */
+ if (nr_reg == NR_REG_SW) { /* host stack */
d->first_tx_ring = d->last_tx_ring = d->req.nr_tx_rings;
d->first_rx_ring = d->last_rx_ring = d->req.nr_rx_rings;
} else if (nr_reg == NR_REG_ALL_NIC) { /* only nic */
Modified: projects/clang500-import/sys/netpfil/ipfw/ip_fw_table.c
==============================================================================
--- projects/clang500-import/sys/netpfil/ipfw/ip_fw_table.c Fri Jul 21 18:53:43 2017 (r321350)
+++ projects/clang500-import/sys/netpfil/ipfw/ip_fw_table.c Fri Jul 21 18:54:34 2017 (r321351)
@@ -1658,7 +1658,7 @@ ipfw_unref_table(struct ip_fw_chain *ch, uint16_t kidx
}
/*
- * Lookup an arbtrary key @paddr of legth @plen in table @tbl.
+ * Lookup an arbitrary key @paddr of length @plen in table @tbl.
* Stores found value in @val.
*
* Returns 1 if key was found.
Copied: projects/clang500-import/sys/powerpc/cpufreq/mpc85xx_jog.c (from r321350, head/sys/powerpc/cpufreq/mpc85xx_jog.c)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ projects/clang500-import/sys/powerpc/cpufreq/mpc85xx_jog.c Fri Jul 21 18:54:34 2017 (r321351, copy of r321350, head/sys/powerpc/cpufreq/mpc85xx_jog.c)
@@ -0,0 +1,343 @@
+/*-
+ * Copyright (c) 2017 Justin Hibbits
+ * 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 ``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 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.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/bus.h>
+#include <sys/cpu.h>
+#include <sys/kernel.h>
+#include <sys/module.h>
+#include <sys/smp.h>
+
+#include <dev/ofw/ofw_bus.h>
+#include <dev/ofw/ofw_bus_subr.h>
+
+#include <machine/cpu.h>
+
+#include <powerpc/mpc85xx/mpc85xx.h>
+
+#include "cpufreq_if.h"
+
+/* No worries about uint32_t math overflow in here, because the highest
+ * multiplier supported is 4, and the highest speed part is still well below
+ * 2GHz.
+ */
+
+#define GUTS_PORPLLSR (CCSRBAR_VA + 0xe0000)
+#define GUTS_PMJCR (CCSRBAR_VA + 0xe007c)
+#define PMJCR_RATIO_M 0x3f
+#define PMJCR_CORE_MULT(x,y) ((x) << (16 + ((y) * 8)))
+#define PMJCR_GET_CORE_MULT(x,y) (((x) >> (16 + ((y) * 8))) & 0x3f)
+#define GUTS_POWMGTCSR (CCSRBAR_VA + 0xe0080)
+#define POWMGTCSR_JOG 0x00200000
+#define POWMGTCSR_INT_MASK 0x00000f00
+
+#define MHZ 1000000
+
+struct mpc85xx_jog_softc {
+ device_t dev;
+ int cpu;
+ int low;
+ int high;
+ int min_freq;
+};
+
+static struct ofw_compat_data *mpc85xx_jog_devcompat(void);
+static void mpc85xx_jog_identify(driver_t *driver, device_t parent);
+static int mpc85xx_jog_probe(device_t dev);
+static int mpc85xx_jog_attach(device_t dev);
+static int mpc85xx_jog_settings(device_t dev, struct cf_setting *sets, int *count);
+static int mpc85xx_jog_set(device_t dev, const struct cf_setting *set);
+static int mpc85xx_jog_get(device_t dev, struct cf_setting *set);
+static int mpc85xx_jog_type(device_t dev, int *type);
+
+static device_method_t mpc85xx_jog_methods[] = {
+ /* Device interface */
+ DEVMETHOD(device_identify, mpc85xx_jog_identify),
+ DEVMETHOD(device_probe, mpc85xx_jog_probe),
+ DEVMETHOD(device_attach, mpc85xx_jog_attach),
+
+ /* cpufreq interface */
+ DEVMETHOD(cpufreq_drv_set, mpc85xx_jog_set),
+ DEVMETHOD(cpufreq_drv_get, mpc85xx_jog_get),
+ DEVMETHOD(cpufreq_drv_type, mpc85xx_jog_type),
+ DEVMETHOD(cpufreq_drv_settings, mpc85xx_jog_settings),
+
+ {0, 0}
+};
+
+static driver_t mpc85xx_jog_driver = {
+ "jog",
+ mpc85xx_jog_methods,
+ sizeof(struct mpc85xx_jog_softc)
+};
+
+static devclass_t mpc85xx_jog_devclass;
+DRIVER_MODULE(mpc85xx_jog, cpu, mpc85xx_jog_driver, mpc85xx_jog_devclass, 0, 0);
+
+struct mpc85xx_constraints {
+ int threshold; /* Threshold frequency, in MHz, for setting CORE_SPD bit. */
+ int min_mult; /* Minimum PLL multiplier. */
+};
+
+static struct mpc85xx_constraints mpc8536_constraints = {
+ 800,
+ 3
+};
+
+static struct mpc85xx_constraints p1022_constraints = {
+ 500,
+ 2
+};
+
+static struct ofw_compat_data jog_compat[] = {
+ {"fsl,mpc8536-guts", (uintptr_t)&mpc8536_constraints},
+ {"fsl,p1022-guts", (uintptr_t)&p1022_constraints},
+ {NULL, 0}
+};
+
+static struct ofw_compat_data *
+mpc85xx_jog_devcompat()
+{
+ phandle_t node;
+ int i;
+
+ node = OF_finddevice("/soc");
+ if (node <= 0)
+ return (NULL);
+
+ for (i = 0; jog_compat[i].ocd_str != NULL; i++)
+ if (ofw_bus_find_compatible(node, jog_compat[i].ocd_str) > 0)
+ break;
+
+ if (jog_compat[i].ocd_str == NULL)
+ return (NULL);
+
+ return (&jog_compat[i]);
+}
+
+static void
+mpc85xx_jog_identify(driver_t *driver, device_t parent)
+{
+ struct ofw_compat_data *compat;
+
+ /* Make sure we're not being doubly invoked. */
+ if (device_find_child(parent, "mpc85xx_jog", -1) != NULL)
+ return;
+
+ compat = mpc85xx_jog_devcompat();
+ if (compat == NULL)
+ return;
+
+ /*
+ * We attach a child for every CPU since settings need to
+ * be performed on every CPU in the SMP case.
+ */
+ if (BUS_ADD_CHILD(parent, 10, "jog", -1) == NULL)
+ device_printf(parent, "add jog child failed\n");
+}
+
+static int
+mpc85xx_jog_probe(device_t dev)
+{
+ struct ofw_compat_data *compat;
+
+ compat = mpc85xx_jog_devcompat();
+ if (compat == NULL || compat->ocd_str == NULL)
+ return (ENXIO);
+
+ device_set_desc(dev, "Freescale CPU Jogger");
+ return (0);
+}
+
+static int
+mpc85xx_jog_attach(device_t dev)
+{
+ struct ofw_compat_data *compat;
+ struct mpc85xx_jog_softc *sc;
+ struct mpc85xx_constraints *constraints;
+ phandle_t cpu;
+ uint32_t reg;
+
+ sc = device_get_softc(dev);
+ sc->dev = dev;
+
+ compat = mpc85xx_jog_devcompat();
+ constraints = (struct mpc85xx_constraints *)compat->ocd_data;
+ cpu = ofw_bus_get_node(device_get_parent(dev));
+
+ if (cpu <= 0) {
+ device_printf(dev,"No CPU device tree node!\n");
+ return (ENXIO);
+ }
+
+ OF_getencprop(cpu, "reg", &sc->cpu, sizeof(sc->cpu));
+
+ reg = ccsr_read4(GUTS_PORPLLSR);
+
+ /*
+ * Assume power-on PLL is the highest PLL config supported on the
+ * board.
+ */
+ sc->high = PMJCR_GET_CORE_MULT(reg, sc->cpu);
+ sc->min_freq = constraints->threshold;
+ sc->low = constraints->min_mult;
+
+ cpufreq_register(dev);
+ return (0);
+}
+
+static int
+mpc85xx_jog_settings(device_t dev, struct cf_setting *sets, int *count)
+{
+ struct mpc85xx_jog_softc *sc;
+ uint32_t sysclk;
+ int i;
+
+ sc = device_get_softc(dev);
+ if (sets == NULL || count == NULL)
+ return (EINVAL);
+ if (*count < sc->high - 1)
+ return (E2BIG);
+
+ sysclk = mpc85xx_get_system_clock();
+ /* Return a list of valid settings for this driver. */
+ memset(sets, CPUFREQ_VAL_UNKNOWN, sizeof(*sets) * sc->high);
+
+ for (i = sc->high; i >= sc->low; --i) {
+ sets[sc->high - i].freq = sysclk * i / MHZ;
+ sets[sc->high - i].dev = dev;
+ sets[sc->high - i].spec[0] = i;
+ }
+ *count = sc->high - sc->low + 1;
+
+ return (0);
+}
+
+struct jog_rv_args {
+ int cpu;
+ int mult;
+ int slow;
+ volatile int inprogress;
+};
+
+static void
+mpc85xx_jog_set_int(void *arg)
+{
+ struct jog_rv_args *args = arg;
+ uint32_t reg;
+
+ if (PCPU_GET(cpuid) == args->cpu) {
+ reg = ccsr_read4(GUTS_PMJCR);
+ reg &= ~PMJCR_CORE_MULT(PMJCR_RATIO_M, args->cpu);
+ reg |= PMJCR_CORE_MULT(args->mult, args->cpu);
+ if (args->slow)
+ reg &= ~(1 << (12 + args->cpu));
+ else
+ reg |= (1 << (12 + args->cpu));
+
+ ccsr_write4(GUTS_PMJCR, reg);
+
+ reg = ccsr_read4(GUTS_POWMGTCSR);
+ reg |= POWMGTCSR_JOG | POWMGTCSR_INT_MASK;
+ ccsr_write4(GUTS_POWMGTCSR, reg);
+
+ /* Wait for completion */
+ do {
+ DELAY(100);
+ reg = ccsr_read4(GUTS_POWMGTCSR);
+ } while (reg & POWMGTCSR_JOG);
+
+ reg = ccsr_read4(GUTS_POWMGTCSR);
+ ccsr_write4(GUTS_POWMGTCSR, reg & ~POWMGTCSR_INT_MASK);
+ ccsr_read4(GUTS_POWMGTCSR);
+
+ args->inprogress = 0;
+ } else {
+ while (args->inprogress)
+ cpu_spinwait();
+ }
+}
+
+static int
+mpc85xx_jog_set(device_t dev, const struct cf_setting *set)
+{
+ struct mpc85xx_jog_softc *sc;
+ struct jog_rv_args args;
+
+ if (set == NULL)
+ return (EINVAL);
+
+ sc = device_get_softc(dev);
+
+ args.slow = (set->freq <= sc->min_freq);
+ args.mult = set->spec[0];
+ args.cpu = PCPU_GET(cpuid);
+ args.inprogress = 1;
+ smp_rendezvous(smp_no_rendezvous_barrier, mpc85xx_jog_set_int,
+ smp_no_rendezvous_barrier, &args);
+
+ return (0);
+}
+
+static int
+mpc85xx_jog_get(device_t dev, struct cf_setting *set)
+{
+ struct mpc85xx_jog_softc *sc;
+ uint32_t pmjcr;
+ uint32_t freq;
+
+ if (set == NULL)
+ return (EINVAL);
+
+ sc = device_get_softc(dev);
+ memset(set, CPUFREQ_VAL_UNKNOWN, sizeof(*set));
+
+ pmjcr = ccsr_read4(GUTS_PORPLLSR);
+ freq = PMJCR_GET_CORE_MULT(pmjcr, sc->cpu);
+ freq *= mpc85xx_get_system_clock();
+ freq /= MHZ;
+
+ set->freq = freq;
+ set->dev = dev;
+
+ return (0);
+}
+
+static int
+mpc85xx_jog_type(device_t dev, int *type)
+{
+
+ if (type == NULL)
+ return (EINVAL);
+
+ *type = CPUFREQ_TYPE_ABSOLUTE;
+ return (0);
+}
+
Modified: projects/clang500-import/sys/ufs/ffs/ffs_snapshot.c
==============================================================================
--- projects/clang500-import/sys/ufs/ffs/ffs_snapshot.c Fri Jul 21 18:53:43 2017 (r321350)
+++ projects/clang500-import/sys/ufs/ffs/ffs_snapshot.c Fri Jul 21 18:54:34 2017 (r321351)
@@ -1598,7 +1598,7 @@ ffs_snapremove(vp)
struct buf *ibp;
struct fs *fs;
ufs2_daddr_t numblks, blkno, dblk;
- int error, loc, last;
+ int error, i, last, loc;
struct snapdata *sn;
ip = VTOI(vp);
@@ -1618,10 +1618,14 @@ ffs_snapremove(vp)
ip->i_nextsnap.tqe_prev = 0;
VI_UNLOCK(devvp);
lockmgr(&vp->v_lock, LK_EXCLUSIVE, NULL);
+ for (i = 0; i < sn->sn_lock.lk_recurse; i++)
+ lockmgr(&vp->v_lock, LK_EXCLUSIVE, NULL);
KASSERT(vp->v_vnlock == &sn->sn_lock,
("ffs_snapremove: lost lock mutation"));
vp->v_vnlock = &vp->v_lock;
VI_LOCK(devvp);
+ while (sn->sn_lock.lk_recurse > 0)
+ lockmgr(&sn->sn_lock, LK_RELEASE, NULL);
lockmgr(&sn->sn_lock, LK_RELEASE, NULL);
try_free_snapdata(devvp);
} else
@@ -1931,7 +1935,7 @@ retry:
*/
if (error != 0 && wkhd != NULL)
softdep_freework(wkhd);
- lockmgr(vp->v_vnlock, LK_RELEASE, NULL);
+ lockmgr(&sn->sn_lock, LK_RELEASE, NULL);
return (error);
}
@@ -2634,8 +2638,8 @@ try_free_snapdata(struct vnode *devvp)
static struct snapdata *
ffs_snapdata_acquire(struct vnode *devvp)
{
- struct snapdata *nsn;
- struct snapdata *sn;
+ struct snapdata *nsn, *sn;
+ int error;
/*
* Allocate a free snapdata. This is done before acquiring the
@@ -2643,23 +2647,37 @@ ffs_snapdata_acquire(struct vnode *devvp)
* held.
*/
nsn = ffs_snapdata_alloc();
- /*
- * If there snapshots already exist on this filesystem grab a
- * reference to the shared lock. Otherwise this is the first
- * snapshot on this filesystem and we need to use our
- * pre-allocated snapdata.
- */
- VI_LOCK(devvp);
- if (devvp->v_rdev->si_snapdata == NULL) {
- devvp->v_rdev->si_snapdata = nsn;
- nsn = NULL;
+
+ for (;;) {
+ VI_LOCK(devvp);
+ sn = devvp->v_rdev->si_snapdata;
+ if (sn == NULL) {
+ /*
+ * This is the first snapshot on this
+ * filesystem and we use our pre-allocated
+ * snapdata. Publish sn with the sn_lock
+ * owned by us, to avoid the race.
+ */
+ error = lockmgr(&nsn->sn_lock, LK_EXCLUSIVE |
+ LK_NOWAIT, NULL);
+ if (error != 0)
+ panic("leaked sn, lockmgr error %d", error);
+ sn = devvp->v_rdev->si_snapdata = nsn;
+ VI_UNLOCK(devvp);
+ nsn = NULL;
+ break;
+ }
+
+ /*
+ * There is a snapshots which already exists on this
+ * filesystem, grab a reference to the common lock.
+ */
+ error = lockmgr(&sn->sn_lock, LK_INTERLOCK |
+ LK_EXCLUSIVE | LK_SLEEPFAIL, VI_MTX(devvp));
+ if (error == 0)
+ break;
}
- sn = devvp->v_rdev->si_snapdata;
- /*
- * Acquire the snapshot lock.
- */
- lockmgr(&sn->sn_lock,
- LK_INTERLOCK | LK_EXCLUSIVE | LK_RETRY, VI_MTX(devvp));
+
/*
* Free any unused snapdata.
*/
Modified: projects/clang500-import/sys/vm/vm_object.h
==============================================================================
--- projects/clang500-import/sys/vm/vm_object.h Fri Jul 21 18:53:43 2017 (r321350)
+++ projects/clang500-import/sys/vm/vm_object.h Fri Jul 21 18:54:34 2017 (r321351)
@@ -171,11 +171,11 @@ struct vm_object {
#define OBJ_FICTITIOUS 0x0001 /* (c) contains fictitious pages */
#define OBJ_UNMANAGED 0x0002 /* (c) contains unmanaged pages */
#define OBJ_POPULATE 0x0004 /* pager implements populate() */
-#define OBJ_DEAD 0x0008 /* dead objects (during rundown) */
+#define OBJ_DEAD 0x0008 /* dead objects (during rundown) */
#define OBJ_NOSPLIT 0x0010 /* dont split this object */
#define OBJ_UMTXDEAD 0x0020 /* umtx pshared was terminated */
-#define OBJ_PIPWNT 0x0040 /* paging in progress wanted */
-#define OBJ_MIGHTBEDIRTY 0x0100 /* object might be dirty, only for vnode */
+#define OBJ_PIPWNT 0x0040 /* paging in progress wanted */
+#define OBJ_MIGHTBEDIRTY 0x0100 /* object might be dirty, only for vnode */
#define OBJ_TMPFS_NODE 0x0200 /* object belongs to tmpfs VREG node */
#define OBJ_TMPFS_DIRTY 0x0400 /* dirty tmpfs obj */
#define OBJ_COLORED 0x1000 /* pg_color is defined */
Modified: projects/clang500-import/sys/x86/x86/mp_x86.c
==============================================================================
--- projects/clang500-import/sys/x86/x86/mp_x86.c Fri Jul 21 18:53:43 2017 (r321350)
+++ projects/clang500-import/sys/x86/x86/mp_x86.c Fri Jul 21 18:54:34 2017 (r321351)
@@ -90,8 +90,6 @@ int mcount_lock;
int mp_naps; /* # of Applications processors */
int boot_cpu_id = -1; /* designated BSP */
-extern struct pcpu __pcpu[];
-
/* AP uses this during bootstrap. Do not staticize. */
char *bootSTK;
int bootAP;
Modified: projects/clang500-import/tests/sys/aio/lio_test.c
==============================================================================
--- projects/clang500-import/tests/sys/aio/lio_test.c Fri Jul 21 18:53:43 2017 (r321350)
+++ projects/clang500-import/tests/sys/aio/lio_test.c Fri Jul 21 18:54:34 2017 (r321351)
@@ -119,8 +119,8 @@ ATF_TC_BODY(lio_listio_empty_nowait_thread, tc)
struct aiocb *list = NULL;
struct sigevent sev;
- atf_tc_expect_fail("Bug 220459 - lio_listio(2) doesn't support"
- " SIGEV_THREAD");
+ atf_tc_expect_timeout("Bug 220398 - lio_listio(2) never sends"
+ "asynchronous notification if nent==0");
ATF_REQUIRE_EQ(0, sem_init(&completions, false, 0));
bzero(&sev, sizeof(sev));
sev.sigev_notify = SIGEV_THREAD;
Modified: projects/clang500-import/usr.bin/ktrace/ktrace.1
==============================================================================
--- projects/clang500-import/usr.bin/ktrace/ktrace.1 Fri Jul 21 18:53:43 2017 (r321350)
+++ projects/clang500-import/usr.bin/ktrace/ktrace.1 Fri Jul 21 18:54:34 2017 (r321351)
@@ -28,7 +28,7 @@
.\" @(#)ktrace.1 8.1 (Berkeley) 6/6/93
.\" $FreeBSD$
.\"
-.Dd March 31, 2016
+.Dd July 24, 2017
.Dt KTRACE 1
.Os
.Sh NAME
@@ -148,31 +148,31 @@ and
.Ar command
options are mutually exclusive.
.Sh EXAMPLES
-# trace all kernel operations of process id 34
+Trace all kernel operations of process id 34:
.Dl $ ktrace -p 34
.Pp
-# trace all kernel operations of processes in process group 15 and
-# pass the trace flags to all current and future children
+Trace all kernel operations of processes in process group 15 and
+pass the trace flags to all current and future children:
.Dl $ ktrace -idg 15
.Pp
-# disable all tracing of process 65
+Disable all tracing of process 65:
.Dl $ ktrace -cp 65
.Pp
-# disable tracing signals on process 70 and all current children
+Disable tracing signals on process 70 and all current children:
.Dl $ ktrace -t s -cdp 70
.Pp
-# enable tracing of
+Enable tracing of
.Tn I/O
-on process 67
+on process 67:
.Dl $ ktrace -ti -p 67
.Pp
-# run the command "w", tracing only system calls
+Run the command "w", tracing only system calls:
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-projects
mailing list