Date: Fri, 21 Jul 2017 18:54:34 +0000 (UTC) From: Dimitry Andric <dim@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: 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... Message-ID: <201707211854.v6LIsYPX071000@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
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 ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201707211854.v6LIsYPX071000>