From owner-svn-src-user@freebsd.org  Mon May 23 05:15:09 2016
Return-Path: <owner-svn-src-user@freebsd.org>
Delivered-To: svn-src-user@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id D0435B46B48
 for <svn-src-user@mailman.ysv.freebsd.org>;
 Mon, 23 May 2016 05:15:09 +0000 (UTC)
 (envelope-from markj@FreeBSD.org)
Received: from repo.freebsd.org (repo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:0])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 8A3641A6A;
 Mon, 23 May 2016 05:15:09 +0000 (UTC)
 (envelope-from markj@FreeBSD.org)
Received: from repo.freebsd.org ([127.0.1.37])
 by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u4N5F8Es084460;
 Mon, 23 May 2016 05:15:08 GMT (envelope-from markj@FreeBSD.org)
Received: (from markj@localhost)
 by repo.freebsd.org (8.15.2/8.15.2/Submit) id u4N5F6eA084436;
 Mon, 23 May 2016 05:15:06 GMT (envelope-from markj@FreeBSD.org)
Message-Id: <201605230515.u4N5F6eA084436@repo.freebsd.org>
X-Authentication-Warning: repo.freebsd.org: markj set sender to
 markj@FreeBSD.org using -f
From: Mark Johnston <markj@FreeBSD.org>
Date: Mon, 23 May 2016 05:15:06 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
Subject: svn commit: r300457 - in user/alc/PQ_LAUNDRY: . bin/ed bin/sh
 contrib/binutils/gas/config contrib/bmake contrib/bmake/mk
 contrib/bmake/mk/sys contrib/elftoolchain/addr2line
 contrib/elftoolchain/bra...
X-SVN-Group: user
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
 src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user/>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 23 May 2016 05:15:09 -0000

Author: markj
Date: Mon May 23 05:15:06 2016
New Revision: 300457
URL: https://svnweb.freebsd.org/changeset/base/300457

Log:
  MFH r300451

Added:
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/libelftc/elftc_reloc_type_str.3
     - copied unchanged from r300451, head/contrib/elftoolchain/libelftc/elftc_reloc_type_str.3
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/libelftc/elftc_reloc_type_str.c
     - copied unchanged from r300451, head/contrib/elftoolchain/libelftc/elftc_reloc_type_str.c
  user/alc/PQ_LAUNDRY/contrib/top/commands.h
     - copied unchanged from r300451, head/contrib/top/commands.h
  user/alc/PQ_LAUNDRY/contrib/top/username.h
     - copied unchanged from r300451, head/contrib/top/username.h
  user/alc/PQ_LAUNDRY/share/man/man9/bus_map_resource.9
     - copied unchanged from r300451, head/share/man/man9/bus_map_resource.9
  user/alc/PQ_LAUNDRY/sys/dev/bhnd/bhndb/bhnd_bhndb.c
     - copied unchanged from r300451, head/sys/dev/bhnd/bhndb/bhnd_bhndb.c
  user/alc/PQ_LAUNDRY/sys/modules/vnic/
     - copied from r300451, head/sys/modules/vnic/
  user/alc/PQ_LAUNDRY/tools/build/options/WITHOUT_SYSTEM_COMPILER
     - copied unchanged from r300451, head/tools/build/options/WITHOUT_SYSTEM_COMPILER
  user/alc/PQ_LAUNDRY/tools/build/options/WITH_LIBSOFT
     - copied unchanged from r300451, head/tools/build/options/WITH_LIBSOFT
  user/alc/PQ_LAUNDRY/tools/build/options/WITH_SYSTEM_COMPILER
     - copied unchanged from r300451, head/tools/build/options/WITH_SYSTEM_COMPILER
Deleted:
  user/alc/PQ_LAUNDRY/lib/libc/aarch64/sys/brk.S
  user/alc/PQ_LAUNDRY/lib/libc/aarch64/sys/sbrk.S
Modified:
  user/alc/PQ_LAUNDRY/Makefile.inc1
  user/alc/PQ_LAUNDRY/ObsoleteFiles.inc
  user/alc/PQ_LAUNDRY/UPDATING
  user/alc/PQ_LAUNDRY/bin/ed/cbc.c
  user/alc/PQ_LAUNDRY/bin/sh/parser.c
  user/alc/PQ_LAUNDRY/contrib/binutils/gas/config/tc-arm.c
  user/alc/PQ_LAUNDRY/contrib/bmake/ChangeLog
  user/alc/PQ_LAUNDRY/contrib/bmake/Makefile
  user/alc/PQ_LAUNDRY/contrib/bmake/arch.c
  user/alc/PQ_LAUNDRY/contrib/bmake/bmake.1
  user/alc/PQ_LAUNDRY/contrib/bmake/bmake.cat1
  user/alc/PQ_LAUNDRY/contrib/bmake/compat.c
  user/alc/PQ_LAUNDRY/contrib/bmake/job.c
  user/alc/PQ_LAUNDRY/contrib/bmake/main.c
  user/alc/PQ_LAUNDRY/contrib/bmake/make.1
  user/alc/PQ_LAUNDRY/contrib/bmake/meta.c
  user/alc/PQ_LAUNDRY/contrib/bmake/meta.h
  user/alc/PQ_LAUNDRY/contrib/bmake/mk/ChangeLog
  user/alc/PQ_LAUNDRY/contrib/bmake/mk/auto.dep.mk
  user/alc/PQ_LAUNDRY/contrib/bmake/mk/autodep.mk
  user/alc/PQ_LAUNDRY/contrib/bmake/mk/dirdeps.mk
  user/alc/PQ_LAUNDRY/contrib/bmake/mk/dpadd.mk
  user/alc/PQ_LAUNDRY/contrib/bmake/mk/final.mk
  user/alc/PQ_LAUNDRY/contrib/bmake/mk/gendirdeps.mk
  user/alc/PQ_LAUNDRY/contrib/bmake/mk/init.mk
  user/alc/PQ_LAUNDRY/contrib/bmake/mk/install-mk
  user/alc/PQ_LAUNDRY/contrib/bmake/mk/lib.mk
  user/alc/PQ_LAUNDRY/contrib/bmake/mk/libnames.mk
  user/alc/PQ_LAUNDRY/contrib/bmake/mk/meta.autodep.mk
  user/alc/PQ_LAUNDRY/contrib/bmake/mk/meta.sys.mk
  user/alc/PQ_LAUNDRY/contrib/bmake/mk/meta2deps.py
  user/alc/PQ_LAUNDRY/contrib/bmake/mk/nls.mk
  user/alc/PQ_LAUNDRY/contrib/bmake/mk/own.mk
  user/alc/PQ_LAUNDRY/contrib/bmake/mk/prog.mk
  user/alc/PQ_LAUNDRY/contrib/bmake/mk/subdir.mk
  user/alc/PQ_LAUNDRY/contrib/bmake/mk/sys.mk
  user/alc/PQ_LAUNDRY/contrib/bmake/mk/sys/AIX.mk
  user/alc/PQ_LAUNDRY/contrib/bmake/mk/sys/Darwin.mk
  user/alc/PQ_LAUNDRY/contrib/bmake/mk/sys/Generic.mk
  user/alc/PQ_LAUNDRY/contrib/bmake/mk/sys/HP-UX.mk
  user/alc/PQ_LAUNDRY/contrib/bmake/mk/sys/IRIX.mk
  user/alc/PQ_LAUNDRY/contrib/bmake/mk/sys/Linux.mk
  user/alc/PQ_LAUNDRY/contrib/bmake/mk/sys/NetBSD.mk
  user/alc/PQ_LAUNDRY/contrib/bmake/mk/sys/OSF1.mk
  user/alc/PQ_LAUNDRY/contrib/bmake/mk/sys/OpenBSD.mk
  user/alc/PQ_LAUNDRY/contrib/bmake/mk/sys/SunOS.mk
  user/alc/PQ_LAUNDRY/contrib/bmake/mk/sys/UnixWare.mk
  user/alc/PQ_LAUNDRY/contrib/bmake/mk/warnings.mk
  user/alc/PQ_LAUNDRY/contrib/bmake/parse.c
  user/alc/PQ_LAUNDRY/contrib/bmake/str.c
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/addr2line/addr2line.c
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/brandelf/brandelf.c
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/common/_elftc.h
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/common/elfdefinitions.h
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/cxxfilt/cxxfilt.c
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/elfcopy/ascii.c
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/elfcopy/binary.c
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/elfcopy/elfcopy.1
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/elfcopy/elfcopy.h
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/elfcopy/main.c
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/elfcopy/sections.c
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/elfcopy/segments.c
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/elfcopy/symbols.c
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/elfdump/elfdump.c
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/libdwarf/libdwarf_abbrev.c
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/libdwarf/libdwarf_elf_init.c
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/libdwarf/libdwarf_reloc.c
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/libelf/_libelf_config.h
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/libelf/elf_data.c
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/libelf/libelf_ar.c
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/libelf/libelf_convert.m4
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/libelftc/Makefile
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/libelftc/libelftc.h
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/libelftc/libelftc_dem_arm.c
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/libelftc/libelftc_dem_gnu2.c
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/libelftc/libelftc_dem_gnu3.c
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/libelftc/make-toolchain-version
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/libpe/libpe_section.c
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/libpe/pe.h
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/nm/nm.c
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/readelf/readelf.c
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/size/size.c
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/strings/strings.c
  user/alc/PQ_LAUNDRY/contrib/gcc/c-typeck.c
  user/alc/PQ_LAUNDRY/contrib/llvm/tools/clang/lib/Basic/Targets.cpp
  user/alc/PQ_LAUNDRY/contrib/netbsd-tests/lib/libc/gen/t_dir.c
  user/alc/PQ_LAUNDRY/contrib/netbsd-tests/lib/libc/sys/t_mlock.c
  user/alc/PQ_LAUNDRY/contrib/top/commands.c
  user/alc/PQ_LAUNDRY/contrib/top/display.c
  user/alc/PQ_LAUNDRY/contrib/top/display.h
  user/alc/PQ_LAUNDRY/contrib/top/machine.h
  user/alc/PQ_LAUNDRY/contrib/top/screen.c
  user/alc/PQ_LAUNDRY/contrib/top/screen.h
  user/alc/PQ_LAUNDRY/contrib/top/top.c
  user/alc/PQ_LAUNDRY/contrib/top/top.h
  user/alc/PQ_LAUNDRY/contrib/top/username.c
  user/alc/PQ_LAUNDRY/contrib/top/utils.h
  user/alc/PQ_LAUNDRY/contrib/top/version.c
  user/alc/PQ_LAUNDRY/etc/defaults/periodic.conf
  user/alc/PQ_LAUNDRY/gnu/usr.bin/cc/cc_tools/Makefile
  user/alc/PQ_LAUNDRY/gnu/usr.bin/grep/config.h
  user/alc/PQ_LAUNDRY/include/Makefile
  user/alc/PQ_LAUNDRY/lib/clang/include/clang/Basic/Version.inc
  user/alc/PQ_LAUNDRY/lib/csu/aarch64/crt1.c
  user/alc/PQ_LAUNDRY/lib/libc/aarch64/Symbol.map
  user/alc/PQ_LAUNDRY/lib/libc/aarch64/sys/Makefile.inc
  user/alc/PQ_LAUNDRY/lib/libc/gen/fts-compat.c
  user/alc/PQ_LAUNDRY/lib/libc/gen/fts.c
  user/alc/PQ_LAUNDRY/lib/libc/regex/engine.c
  user/alc/PQ_LAUNDRY/lib/libc/rpc/getnetconfig.c
  user/alc/PQ_LAUNDRY/lib/libc/rpc/getrpcent.c
  user/alc/PQ_LAUNDRY/lib/libc/rpc/netnamer.c
  user/alc/PQ_LAUNDRY/lib/libc/rpc/rpcb_clnt.c
  user/alc/PQ_LAUNDRY/lib/libc/rpc/svc_generic.c
  user/alc/PQ_LAUNDRY/lib/libc/stdlib/random.c
  user/alc/PQ_LAUNDRY/lib/libc/sys/vfork.2
  user/alc/PQ_LAUNDRY/lib/libelftc/Makefile
  user/alc/PQ_LAUNDRY/lib/libelftc/elftc_version.c
  user/alc/PQ_LAUNDRY/lib/libmt/mtlib.c
  user/alc/PQ_LAUNDRY/lib/libstand/uuid_from_string.c
  user/alc/PQ_LAUNDRY/share/man/man5/src.conf.5
  user/alc/PQ_LAUNDRY/share/man/man9/Makefile
  user/alc/PQ_LAUNDRY/share/man/man9/bus_activate_resource.9
  user/alc/PQ_LAUNDRY/share/man/man9/bus_alloc_resource.9
  user/alc/PQ_LAUNDRY/share/man/man9/rman.9
  user/alc/PQ_LAUNDRY/share/man/man9/sglist.9
  user/alc/PQ_LAUNDRY/share/mk/bsd.compiler.mk
  user/alc/PQ_LAUNDRY/share/mk/bsd.dep.mk
  user/alc/PQ_LAUNDRY/share/mk/local.meta.sys.mk
  user/alc/PQ_LAUNDRY/share/mk/src.opts.mk
  user/alc/PQ_LAUNDRY/share/mk/src.sys.env.mk
  user/alc/PQ_LAUNDRY/share/mk/sys.mk
  user/alc/PQ_LAUNDRY/sys/amd64/amd64/sys_machdep.c
  user/alc/PQ_LAUNDRY/sys/amd64/amd64/vm_machdep.c
  user/alc/PQ_LAUNDRY/sys/amd64/linux/linux_proto.h
  user/alc/PQ_LAUNDRY/sys/amd64/linux/linux_syscall.h
  user/alc/PQ_LAUNDRY/sys/amd64/linux/linux_syscalls.c
  user/alc/PQ_LAUNDRY/sys/amd64/linux/linux_sysent.c
  user/alc/PQ_LAUNDRY/sys/amd64/linux/linux_systrace_args.c
  user/alc/PQ_LAUNDRY/sys/amd64/linux/syscalls.master
  user/alc/PQ_LAUNDRY/sys/amd64/linux32/linux32_proto.h
  user/alc/PQ_LAUNDRY/sys/amd64/linux32/linux32_syscall.h
  user/alc/PQ_LAUNDRY/sys/amd64/linux32/linux32_syscalls.c
  user/alc/PQ_LAUNDRY/sys/amd64/linux32/linux32_sysent.c
  user/alc/PQ_LAUNDRY/sys/amd64/linux32/linux32_systrace_args.c
  user/alc/PQ_LAUNDRY/sys/amd64/linux32/syscalls.master
  user/alc/PQ_LAUNDRY/sys/arm/allwinner/axp209.c
  user/alc/PQ_LAUNDRY/sys/arm/broadcom/bcm2835/bcm2835_cpufreq.c
  user/alc/PQ_LAUNDRY/sys/arm/freescale/imx/imx6_anatop.c
  user/alc/PQ_LAUNDRY/sys/arm/freescale/imx/imx_gpio.c
  user/alc/PQ_LAUNDRY/sys/arm/include/_align.h
  user/alc/PQ_LAUNDRY/sys/arm/include/param.h
  user/alc/PQ_LAUNDRY/sys/arm/mv/mpic.c
  user/alc/PQ_LAUNDRY/sys/arm/mv/mv_ts.c
  user/alc/PQ_LAUNDRY/sys/arm64/arm64/busdma_bounce.c
  user/alc/PQ_LAUNDRY/sys/arm64/arm64/gic_v3_reg.h
  user/alc/PQ_LAUNDRY/sys/arm64/cavium/thunder_pcie_pem.c
  user/alc/PQ_LAUNDRY/sys/arm64/conf/DEFAULTS
  user/alc/PQ_LAUNDRY/sys/boot/efi/loader/main.c
  user/alc/PQ_LAUNDRY/sys/cam/cam_ccb.h
  user/alc/PQ_LAUNDRY/sys/cam/ctl/scsi_ctl.c
  user/alc/PQ_LAUNDRY/sys/compat/linux/linux_file.c
  user/alc/PQ_LAUNDRY/sys/compat/linux/linux_futex.c
  user/alc/PQ_LAUNDRY/sys/compat/linux/linux_socket.c
  user/alc/PQ_LAUNDRY/sys/compat/ndis/subr_ntoskrnl.c
  user/alc/PQ_LAUNDRY/sys/conf/files
  user/alc/PQ_LAUNDRY/sys/conf/files.arm64
  user/alc/PQ_LAUNDRY/sys/conf/kern.post.mk
  user/alc/PQ_LAUNDRY/sys/dev/acpi_support/acpi_asus_wmi.c
  user/alc/PQ_LAUNDRY/sys/dev/acpi_support/acpi_ibm.c
  user/alc/PQ_LAUNDRY/sys/dev/acpi_support/atk0110.c
  user/alc/PQ_LAUNDRY/sys/dev/acpica/acpi_thermal.c
  user/alc/PQ_LAUNDRY/sys/dev/amdtemp/amdtemp.c
  user/alc/PQ_LAUNDRY/sys/dev/ath/ath_hal/ah_regdomain.c
  user/alc/PQ_LAUNDRY/sys/dev/bhnd/bcma/bcma_bhndb.c
  user/alc/PQ_LAUNDRY/sys/dev/bhnd/bhnd.h
  user/alc/PQ_LAUNDRY/sys/dev/bhnd/bhnd_bus_if.m
  user/alc/PQ_LAUNDRY/sys/dev/bhnd/bhnd_types.h
  user/alc/PQ_LAUNDRY/sys/dev/bhnd/bhndb/bhndb.h
  user/alc/PQ_LAUNDRY/sys/dev/bhnd/siba/siba_bhndb.c
  user/alc/PQ_LAUNDRY/sys/dev/bhnd/soc/bhnd_soc.c
  user/alc/PQ_LAUNDRY/sys/dev/bwn/if_bwn.c
  user/alc/PQ_LAUNDRY/sys/dev/coretemp/coretemp.c
  user/alc/PQ_LAUNDRY/sys/dev/cpuctl/cpuctl.c
  user/alc/PQ_LAUNDRY/sys/dev/cxgbe/cxgbei/icl_cxgbei.c
  user/alc/PQ_LAUNDRY/sys/dev/cxgbe/tom/t4_ddp.c
  user/alc/PQ_LAUNDRY/sys/dev/gpio/gpioiic.c
  user/alc/PQ_LAUNDRY/sys/dev/gpio/gpioled.c
  user/alc/PQ_LAUNDRY/sys/dev/iicbus/ds3231reg.h
  user/alc/PQ_LAUNDRY/sys/dev/iicbus/iicbb_if.m
  user/alc/PQ_LAUNDRY/sys/dev/iicbus/iiconf.c
  user/alc/PQ_LAUNDRY/sys/dev/iicbus/lm75.c
  user/alc/PQ_LAUNDRY/sys/dev/iscsi/icl.h
  user/alc/PQ_LAUNDRY/sys/dev/iscsi/icl_soft.c
  user/alc/PQ_LAUNDRY/sys/dev/iscsi/iscsi.c
  user/alc/PQ_LAUNDRY/sys/dev/isp/isp_freebsd.c
  user/alc/PQ_LAUNDRY/sys/dev/ixl/if_ixl.c
  user/alc/PQ_LAUNDRY/sys/dev/mlx5/mlx5_en/en.h
  user/alc/PQ_LAUNDRY/sys/dev/mlx5/mlx5_en/mlx5_en_ethtool.c
  user/alc/PQ_LAUNDRY/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
  user/alc/PQ_LAUNDRY/sys/dev/mlx5/mlx5_en/mlx5_en_tx.c
  user/alc/PQ_LAUNDRY/sys/dev/nvram2env/nvram2env.c
  user/alc/PQ_LAUNDRY/sys/dev/pci/pci_host_generic.c
  user/alc/PQ_LAUNDRY/sys/dev/urtwn/if_urtwn.c
  user/alc/PQ_LAUNDRY/sys/dev/urtwn/if_urtwnreg.h
  user/alc/PQ_LAUNDRY/sys/dev/vnic/mrml_bridge.c
  user/alc/PQ_LAUNDRY/sys/dev/vnic/nic_main.c
  user/alc/PQ_LAUNDRY/sys/dev/vnic/nicvf_main.c
  user/alc/PQ_LAUNDRY/sys/dev/vnic/thunder_bgx.c
  user/alc/PQ_LAUNDRY/sys/dev/vnic/thunder_mdio.c
  user/alc/PQ_LAUNDRY/sys/dev/wi/if_wi.c
  user/alc/PQ_LAUNDRY/sys/fs/cd9660/cd9660_vfsops.c
  user/alc/PQ_LAUNDRY/sys/fs/devfs/devfs_devs.c
  user/alc/PQ_LAUNDRY/sys/fs/ext2fs/ext2_alloc.c
  user/alc/PQ_LAUNDRY/sys/fs/ext2fs/ext2_vfsops.c
  user/alc/PQ_LAUNDRY/sys/fs/msdosfs/msdosfs_vfsops.c
  user/alc/PQ_LAUNDRY/sys/fs/udf/udf_vfsops.c
  user/alc/PQ_LAUNDRY/sys/geom/eli/g_eli.c
  user/alc/PQ_LAUNDRY/sys/geom/geom.h
  user/alc/PQ_LAUNDRY/sys/geom/geom_event.c
  user/alc/PQ_LAUNDRY/sys/geom/geom_kern.c
  user/alc/PQ_LAUNDRY/sys/geom/geom_mbr.c
  user/alc/PQ_LAUNDRY/sys/geom/geom_pc98.c
  user/alc/PQ_LAUNDRY/sys/geom/geom_subr.c
  user/alc/PQ_LAUNDRY/sys/geom/journal/g_journal.c
  user/alc/PQ_LAUNDRY/sys/geom/mirror/g_mirror.c
  user/alc/PQ_LAUNDRY/sys/geom/mountver/g_mountver.c
  user/alc/PQ_LAUNDRY/sys/geom/raid/g_raid.c
  user/alc/PQ_LAUNDRY/sys/geom/raid3/g_raid3.c
  user/alc/PQ_LAUNDRY/sys/gnu/dev/bwn/phy_n/if_bwn_phy_n_core.c
  user/alc/PQ_LAUNDRY/sys/i386/i386/sys_machdep.c
  user/alc/PQ_LAUNDRY/sys/i386/i386/vm_machdep.c
  user/alc/PQ_LAUNDRY/sys/i386/linux/linux_proto.h
  user/alc/PQ_LAUNDRY/sys/i386/linux/linux_syscall.h
  user/alc/PQ_LAUNDRY/sys/i386/linux/linux_syscalls.c
  user/alc/PQ_LAUNDRY/sys/i386/linux/linux_sysent.c
  user/alc/PQ_LAUNDRY/sys/i386/linux/linux_systrace_args.c
  user/alc/PQ_LAUNDRY/sys/i386/linux/syscalls.master
  user/alc/PQ_LAUNDRY/sys/kern/bus_if.m
  user/alc/PQ_LAUNDRY/sys/kern/subr_bus.c
  user/alc/PQ_LAUNDRY/sys/kern/subr_rman.c
  user/alc/PQ_LAUNDRY/sys/kern/subr_sglist.c
  user/alc/PQ_LAUNDRY/sys/kern/subr_taskqueue.c
  user/alc/PQ_LAUNDRY/sys/kern/sys_socket.c
  user/alc/PQ_LAUNDRY/sys/kern/uipc_socket.c
  user/alc/PQ_LAUNDRY/sys/kern/vfs_aio.c
  user/alc/PQ_LAUNDRY/sys/mips/include/clock.h
  user/alc/PQ_LAUNDRY/sys/modules/bhnd/bhndb/Makefile
  user/alc/PQ_LAUNDRY/sys/net80211/ieee80211_scan_sw.c
  user/alc/PQ_LAUNDRY/sys/netinet6/ip6_output.c
  user/alc/PQ_LAUNDRY/sys/netpfil/ipfw/ip_fw_dynamic.c
  user/alc/PQ_LAUNDRY/sys/netpfil/pf/pf_norm.c
  user/alc/PQ_LAUNDRY/sys/powerpc/powermac/powermac_thermal.h
  user/alc/PQ_LAUNDRY/sys/powerpc/powermac/smu.c
  user/alc/PQ_LAUNDRY/sys/powerpc/powermac/smusat.c
  user/alc/PQ_LAUNDRY/sys/powerpc/powerpc/exec_machdep.c
  user/alc/PQ_LAUNDRY/sys/sparc64/include/vm.h
  user/alc/PQ_LAUNDRY/sys/sparc64/sparc64/vm_machdep.c
  user/alc/PQ_LAUNDRY/sys/sys/_task.h
  user/alc/PQ_LAUNDRY/sys/sys/bus.h
  user/alc/PQ_LAUNDRY/sys/sys/kobj.h
  user/alc/PQ_LAUNDRY/sys/sys/param.h
  user/alc/PQ_LAUNDRY/sys/sys/rman.h
  user/alc/PQ_LAUNDRY/sys/sys/sglist.h
  user/alc/PQ_LAUNDRY/sys/sys/sysent.h
  user/alc/PQ_LAUNDRY/sys/sys/taskqueue.h
  user/alc/PQ_LAUNDRY/sys/ufs/ffs/ffs_alloc.c
  user/alc/PQ_LAUNDRY/sys/ufs/ffs/ffs_vfsops.c
  user/alc/PQ_LAUNDRY/sys/vm/swap_pager.c
  user/alc/PQ_LAUNDRY/sys/vm/vm.h
  user/alc/PQ_LAUNDRY/sys/vm/vm_fault.c
  user/alc/PQ_LAUNDRY/sys/vm/vm_glue.c
  user/alc/PQ_LAUNDRY/sys/x86/x86/nexus.c
  user/alc/PQ_LAUNDRY/usr.bin/bmake/Makefile
  user/alc/PQ_LAUNDRY/usr.bin/kdump/kdump.c
  user/alc/PQ_LAUNDRY/usr.bin/mt/mt.1
  user/alc/PQ_LAUNDRY/usr.sbin/bsdinstall/scripts/zfsboot
  user/alc/PQ_LAUNDRY/usr.sbin/periodic/periodic.8
  user/alc/PQ_LAUNDRY/usr.sbin/periodic/periodic.sh
  user/alc/PQ_LAUNDRY/usr.sbin/rpc.yppasswdd/yppasswdd_server.c
Directory Properties:
  user/alc/PQ_LAUNDRY/   (props changed)
  user/alc/PQ_LAUNDRY/contrib/binutils/   (props changed)
  user/alc/PQ_LAUNDRY/contrib/bmake/   (props changed)
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/   (props changed)
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/brandelf/   (props changed)
  user/alc/PQ_LAUNDRY/contrib/elftoolchain/elfdump/   (props changed)
  user/alc/PQ_LAUNDRY/contrib/gcc/   (props changed)
  user/alc/PQ_LAUNDRY/contrib/llvm/   (props changed)
  user/alc/PQ_LAUNDRY/contrib/llvm/tools/clang/   (props changed)
  user/alc/PQ_LAUNDRY/contrib/top/   (props changed)
  user/alc/PQ_LAUNDRY/gnu/usr.bin/cc/cc_tools/   (props changed)

Modified: user/alc/PQ_LAUNDRY/Makefile.inc1
==============================================================================
--- user/alc/PQ_LAUNDRY/Makefile.inc1	Mon May 23 05:14:26 2016	(r300456)
+++ user/alc/PQ_LAUNDRY/Makefile.inc1	Mon May 23 05:15:06 2016	(r300457)
@@ -48,6 +48,7 @@
 .error "Both TARGET and TARGET_ARCH must be defined."
 .endif
 
+SRCDIR?=	${.CURDIR}
 LOCALBASE?=	/usr/local
 
 # Cross toolchain changes must be in effect before bsd.compiler.mk
@@ -56,8 +57,100 @@ LOCALBASE?=	/usr/local
 .include "${LOCALBASE}/share/toolchains/${CROSS_TOOLCHAIN}.mk"
 CROSSENV+=CROSS_TOOLCHAIN="${CROSS_TOOLCHAIN}"
 .endif
-.include <bsd.compiler.mk>		# don't depend on src.opts.mk doing it
-.include "share/mk/src.opts.mk"	
+.if defined(CROSS_TOOLCHAIN_PREFIX)
+CROSS_COMPILER_PREFIX?=${CROSS_TOOLCHAIN_PREFIX}
+CROSS_BINUTILS_PREFIX?=${CROSS_TOOLCHAIN_PREFIX}
+.endif
+# If we do not have a bootstrap binutils (because the in-tree one does not
+# support the target architecture), provide a default cross-binutils prefix.
+# This allows aarch64 builds, for example, to automatically use the
+# aarch64-binutils port or package.
+.if !make(showconfig)
+.if !empty(BROKEN_OPTIONS:MBINUTILS_BOOTSTRAP) && \
+    !defined(CROSS_BINUTILS_PREFIX)
+CROSS_BINUTILS_PREFIX=/usr/local/${TARGET_ARCH}-freebsd/bin/
+.if !exists(${CROSS_BINUTILS_PREFIX})
+.error In-tree binutils does not support the ${TARGET_ARCH} architecture. Install the ${TARGET_ARCH}-binutils port or package or set CROSS_BINUTILS_PREFIX.
+.endif
+.endif
+.endif
+
+XCOMPILERS=	CC CXX CPP
+.for COMPILER in ${XCOMPILERS}
+.if defined(CROSS_COMPILER_PREFIX)
+X${COMPILER}?=	${CROSS_COMPILER_PREFIX}${${COMPILER}}
+.else
+X${COMPILER}?=	${${COMPILER}}
+.endif
+.endfor
+XBINUTILS=	AS AR LD NM OBJCOPY OBJDUMP RANLIB SIZE STRINGS
+.for BINUTIL in ${XBINUTILS}
+.if defined(CROSS_BINUTILS_PREFIX) && \
+    exists(${CROSS_BINUTILS_PREFIX}${${BINUTIL}})
+X${BINUTIL}?=	${CROSS_BINUTILS_PREFIX}${${BINUTIL}}
+.else
+X${BINUTIL}?=	${${BINUTIL}}
+.endif
+.endfor
+# If a full path to an external cross compiler is given, don't build
+# a cross compiler.
+.if ${XCC:N${CCACHE_BIN}:M/*}
+MK_CROSS_COMPILER=	no
+.endif
+
+# Pull in COMPILER_TYPE and COMPILER_FREEBSD_VERSION early.
+.include <bsd.compiler.mk>
+.include "share/mk/src.opts.mk"
+
+# Check if there is a local compiler that can satisfy as an external compiler.
+.if ${MK_SYSTEM_COMPILER} == "yes" && ${MK_CROSS_COMPILER} == "yes" && \
+    (${MK_CLANG_BOOTSTRAP} == "yes" || ${MK_GCC_BOOTSTRAP} == "yes") && \
+    !make(showconfig)
+# Which compiler is expected to be used?
+.if ${MK_CLANG_BOOTSTRAP} == "yes"
+_expected_compiler_type=	clang
+.elif ${MK_GCC_BOOTSTRAP} == "yes"
+_expected_compiler_type=	gcc
+.endif
+# If the expected vs CC is different then we can't skip.
+# GCC cannot be used for cross-arch yet.  For clang we pass -target later if
+# TARGET_ARCH!=MACHINE_ARCH.
+.if ${_expected_compiler_type} == ${COMPILER_TYPE} && \
+    (${COMPILER_TYPE} == "clang" || ${TARGET_ARCH} == ${MACHINE_ARCH})
+# It needs to be the same revision as we would build for the bootstrap.
+.if !defined(CROSS_COMPILER_FREEBSD_VERSION)
+.if ${_expected_compiler_type} == "clang"
+CROSS_COMPILER_FREEBSD_VERSION!= \
+	awk '$$2 == "FREEBSD_CC_VERSION" {printf("%d\n", $$3)}' \
+	${SRCDIR}/lib/clang/include/clang/Basic/Version.inc || echo unknown
+CROSS_COMPILER_VERSION!= \
+	awk '$$2 == "CLANG_VERSION" {split($$3, a, "."); print a[1] * 10000 + a[2] * 100 + a[3]}' \
+	${SRCDIR}/lib/clang/include/clang/Basic/Version.inc || echo unknown
+.elif ${_expected_compiler_type} == "gcc"
+CROSS_COMPILER_FREEBSD_VERSION!= \
+	awk '$$2 == "FBSD_CC_VER" {printf("%d\n", $$3)}' \
+	${SRCDIR}/gnu/usr.bin/cc/cc_tools/freebsd-native.h || echo unknown
+CROSS_COMPILER_VERSION!= \
+	awk -F. '{print $$1 * 10000 + $$2 * 100 + $$3}' \
+	${SRCDIR}/contrib/gcc/BASE-VER || echo unknown
+.endif
+.export CROSS_COMPILER_FREEBSD_VERSION CROSS_COMPILER_VERSION
+.endif	# !defined(CROSS_COMPILER_FREEBSD_VERSION)
+.if ${COMPILER_VERSION} == ${CROSS_COMPILER_VERSION} && \
+    ${COMPILER_FREEBSD_VERSION} == ${CROSS_COMPILER_FREEBSD_VERSION}
+# Everything matches, disable the bootstrap compiler.
+MK_CLANG_BOOTSTRAP=	no
+MK_GCC_BOOTSTRAP=	no
+CROSSENV+=	COMPILER_VERSION=${COMPILER_VERSION} \
+		COMPILER_TYPE=${COMPILER_TYPE} \
+		COMPILER_FREEBSD_VERSION=${COMPILER_FREEBSD_VERSION}
+.if make(buildworld)
+.info SYSTEM_COMPILER: Determined that CC=${CC} matches the source tree.  Not bootstrapping a cross-compiler.
+.endif
+.endif	# ${COMPILER_VERSION} == ${CROSS_COMPILER_VERSION}
+.endif	# ${_expected_compiler_type} == ${COMPILER_TYPE}
+.endif	# ${XCC:N${CCACHE_BIN}:M/*}
+
 
 # We must do lib/ and libexec/ before bin/ in case of a mid-install error to
 # keep the users system reasonably usable.  For static->dynamic root upgrades,
@@ -67,7 +160,6 @@ CROSSENV+=CROSS_TOOLCHAIN="${CROSS_TOOLC
 # This ordering is not a guarantee though.  The only guarantee of a working
 # system here would require fine-grained ordering of all components based
 # on their dependencies.
-SRCDIR?=	${.CURDIR}
 .if !empty(SUBDIR_OVERRIDE)
 SUBDIR=	${SUBDIR_OVERRIDE}
 .else
@@ -404,42 +496,6 @@ HMAKE=		PATH=${TMPPATH} ${MAKE} LOCAL_MT
 HMAKE+=		PATH=${TMPPATH} METALOG=${METALOG} -DNO_ROOT
 .endif
 
-.if defined(CROSS_TOOLCHAIN_PREFIX)
-CROSS_COMPILER_PREFIX?=${CROSS_TOOLCHAIN_PREFIX}
-CROSS_BINUTILS_PREFIX?=${CROSS_TOOLCHAIN_PREFIX}
-.endif
-
-# If we do not have a bootstrap binutils (because the in-tree one does not
-# support the target architecture), provide a default cross-binutils prefix.
-# This allows aarch64 builds, for example, to automatically use the
-# aarch64-binutils port or package.
-.if !make(showconfig)
-.if !empty(BROKEN_OPTIONS:MBINUTILS_BOOTSTRAP) && \
-    !defined(CROSS_BINUTILS_PREFIX)
-CROSS_BINUTILS_PREFIX=/usr/local/${TARGET_ARCH}-freebsd/bin/
-.if !exists(${CROSS_BINUTILS_PREFIX})
-.error In-tree binutils does not support the ${TARGET_ARCH} architecture. Install the ${TARGET_ARCH}-binutils port or package or set CROSS_BINUTILS_PREFIX.
-.endif
-.endif
-.endif
-
-XCOMPILERS=	CC CXX CPP
-.for COMPILER in ${XCOMPILERS}
-.if defined(CROSS_COMPILER_PREFIX)
-X${COMPILER}?=	${CROSS_COMPILER_PREFIX}${${COMPILER}}
-.else
-X${COMPILER}?=	${${COMPILER}}
-.endif
-.endfor
-XBINUTILS=	AS AR LD NM OBJCOPY OBJDUMP RANLIB SIZE STRINGS
-.for BINUTIL in ${XBINUTILS}
-.if defined(CROSS_BINUTILS_PREFIX) && \
-    exists(${CROSS_BINUTILS_PREFIX}${${BINUTIL}})
-X${BINUTIL}?=	${CROSS_BINUTILS_PREFIX}${${BINUTIL}}
-.else
-X${BINUTIL}?=	${${BINUTIL}}
-.endif
-.endfor
 CROSSENV+=	CC="${XCC} ${XCFLAGS}" CXX="${XCXX} ${XCFLAGS} ${XCXXFLAGS}" \
 		CPP="${XCPP} ${XCFLAGS}" \
 		AS="${XAS}" AR="${XAR}" LD="${XLD}" NM=${XNM} \
@@ -455,7 +511,8 @@ BFLAGS+=	-B${CROSS_BINUTILS_PREFIX}
 .endif
 
 # External compiler needs sysroot and target flags.
-.if ${XCC:N${CCACHE_BIN}:M/*} || ${MK_CROSS_COMPILER} == "no"
+.if ${MK_CROSS_COMPILER} == "no" || \
+    (${MK_CLANG_BOOTSTRAP} == "no" && ${MK_GCC_BOOTSTRAP} == "no")
 .if !defined(CROSS_BINUTILS_PREFIX) || !exists(${CROSS_BINUTILS_PREFIX})
 BFLAGS+=	-B${WORLDTMP}/usr/bin
 .endif
@@ -479,7 +536,7 @@ XCFLAGS+=	-target ${TARGET_TRIPLE}
 .endif
 XCFLAGS+=	--sysroot=${WORLDTMP}
 .else
-.endif # ${XCC:M/*} || ${MK_CROSS_COMPILER} == "no"
+.endif # ${MK_CROSS_COMPILER} == "no"
 
 .if !empty(BFLAGS)
 XCFLAGS+=	${BFLAGS}
@@ -533,7 +590,7 @@ KMAKE=		${KMAKEENV} ${MAKE} ${.MAKEFLAGS
 .if ${MK_META_MODE} == "yes"
 # meta mode normally is disallowed when building from curdir==objdir, but we
 # want to allow it for the kernel build.
-KMAKE+=	.MAKE.MODE="${.MAKE.MODE} curdirOk=yes"
+KMAKEENV+=	META_MODE="${.MAKE.MODE} curdirOk=yes"
 .endif
 
 #
@@ -1715,9 +1772,7 @@ _elftctools=	lib/libelftc \
 		usr.bin/elfcopy
 .endif
 
-# If an full path to an external cross compiler is given, don't build
-# a cross compiler.
-.if ${XCC:N${CCACHE_BIN}:M/*} == "" && ${MK_CROSS_COMPILER} != "no"
+.if ${MK_CROSS_COMPILER} != "no"
 .if ${MK_CLANG_BOOTSTRAP} != "no"
 _clang=		usr.bin/clang
 _clang_libs=	lib/clang

Modified: user/alc/PQ_LAUNDRY/ObsoleteFiles.inc
==============================================================================
--- user/alc/PQ_LAUNDRY/ObsoleteFiles.inc	Mon May 23 05:14:26 2016	(r300456)
+++ user/alc/PQ_LAUNDRY/ObsoleteFiles.inc	Mon May 23 05:15:06 2016	(r300457)
@@ -39,11 +39,11 @@
 # done
 
 # 20160519: remove DTrace Toolkit from base
-OLD_FILES+=usr/share/dtrace/toolkit/execsnoop*
-OLD_FILES+=usr/share/dtrace/toolkit/hotkernel*
-OLD_FILES+=usr/share/dtrace/toolkit/hotuser*
-OLD_FILES+=usr/share/dtrace/toolkit/opensnoop*
-OLD_FILES+=usr/share/dtrace/toolkit/procsystime*
+OLD_FILES+=usr/share/dtrace/toolkit/execsnoop
+OLD_FILES+=usr/share/dtrace/toolkit/hotkernel
+OLD_FILES+=usr/share/dtrace/toolkit/hotuser
+OLD_FILES+=usr/share/dtrace/toolkit/opensnoop
+OLD_FILES+=usr/share/dtrace/toolkit/procsystime
 OLD_DIRS+=usr/share/dtrace/toolkit
 # 20160519: stale MLINK removed
 OLD_FILES+=usr/share/man/man9/rman_await_resource.9.gz

Modified: user/alc/PQ_LAUNDRY/UPDATING
==============================================================================
--- user/alc/PQ_LAUNDRY/UPDATING	Mon May 23 05:14:26 2016	(r300456)
+++ user/alc/PQ_LAUNDRY/UPDATING	Mon May 23 05:15:06 2016	(r300457)
@@ -31,6 +31,12 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 11
 	disable the most expensive debugging functionality run
 	"ln -s 'abort:false,junk:false' /etc/malloc.conf".)
 
+20160520:
+	The brk and sbrk functions have been removed from libc on arm64.
+	Binutils from ports has been updated to not link to these
+	functions and should be updated to the latest version before
+	installing a new libc.
+
 20160517:
 	The armv6 port now defaults to hard float ABI. Limited support
 	for running both hardfloat and soft float on the same system
@@ -39,6 +45,10 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 11
 	and packages may fail or need manual intervention to run. New
 	packages will be needed.
 
+	To update an existing self-hosted armv6hf system, you must add
+	TARGET_ARCH=armv6 on the make command line for both the build 
+	and the install steps.
+
 20160510:
 	Kernel modules compiled outside of a kernel build now default to
 	installing to /boot/modules instead of /boot/kernel.  Many kernel

Modified: user/alc/PQ_LAUNDRY/bin/ed/cbc.c
==============================================================================
--- user/alc/PQ_LAUNDRY/bin/ed/cbc.c	Mon May 23 05:14:26 2016	(r300456)
+++ user/alc/PQ_LAUNDRY/bin/ed/cbc.c	Mon May 23 05:15:06 2016	(r300457)
@@ -90,16 +90,13 @@ void
 init_des_cipher(void)
 {
 #ifdef DES
-	int i;
-
 	des_ct = des_n = 0;
 
 	/* initialize the initialization vector */
 	MEMZERO(ivec, 8);
 
 	/* initialize the padding vector */
-	for (i = 0; i < 8; i++)
-		pvec[i] = (char) (arc4random() % 256);
+	arc4random_buf(pvec, sizeof(pvec));
 #endif
 }
 
@@ -164,7 +161,7 @@ get_keyword(void)
 	/*
 	 * get the key
 	 */
-	if (*(p = getpass("Enter key: "))) {
+	if ((p = getpass("Enter key: ")) != NULL && *p != '\0') {
 
 		/*
 		 * copy it, nul-padded, into the key area

Modified: user/alc/PQ_LAUNDRY/bin/sh/parser.c
==============================================================================
--- user/alc/PQ_LAUNDRY/bin/sh/parser.c	Mon May 23 05:14:26 2016	(r300456)
+++ user/alc/PQ_LAUNDRY/bin/sh/parser.c	Mon May 23 05:15:06 2016	(r300457)
@@ -1998,7 +1998,7 @@ getprompt(void *unused __unused)
 	/*
 	 * Format prompt string.
 	 */
-	for (i = 0; (i < 127) && (*fmt != '\0'); i++, fmt++)
+	for (i = 0; (i < PROMPTLEN - 1) && (*fmt != '\0'); i++, fmt++)
 		if (*fmt == '\\')
 			switch (*++fmt) {
 
@@ -2011,7 +2011,8 @@ getprompt(void *unused __unused)
 			case 'h':
 			case 'H':
 				ps[i] = '\0';
-				gethostname(&ps[i], PROMPTLEN - i);
+				gethostname(&ps[i], PROMPTLEN - i - 1);
+				ps[PROMPTLEN - 1] = '\0';
 				/* Skip to end of hostname. */
 				trim = (*fmt == 'h') ? '.' : '\0';
 				while ((ps[i] != '\0') && (ps[i] != trim))
@@ -2061,8 +2062,9 @@ getprompt(void *unused __unused)
 				 * Emit unrecognized formats verbatim.
 				 */
 			default:
-				ps[i++] = '\\';
-				ps[i] = *fmt;
+				ps[i] = '\\';
+				if (i < PROMPTLEN - 1)
+					ps[++i] = *fmt;
 				break;
 			}
 		else

Modified: user/alc/PQ_LAUNDRY/contrib/binutils/gas/config/tc-arm.c
==============================================================================
--- user/alc/PQ_LAUNDRY/contrib/binutils/gas/config/tc-arm.c	Mon May 23 05:14:26 2016	(r300456)
+++ user/alc/PQ_LAUNDRY/contrib/binutils/gas/config/tc-arm.c	Mon May 23 05:15:06 2016	(r300457)
@@ -2284,6 +2284,37 @@ s_unreq (int a ATTRIBUTE_UNUSED)
   demand_empty_rest_of_line ();
 }
 
+static void
+s_inst(int unused ATTRIBUTE_UNUSED)
+{
+	expressionS exp;
+
+	if (thumb_mode) {
+		as_bad(".inst not implemented for Thumb mode");
+		ignore_rest_of_line();
+		return;
+	}
+
+	if (is_it_end_of_statement()) {
+		demand_empty_rest_of_line();
+		return;
+	}
+
+	do {
+		expression(&exp);
+
+		if (exp.X_op != O_constant)
+			as_bad("constant expression required");
+		else
+			emit_expr(&exp, 4);
+
+	} while (*input_line_pointer++ == ',');
+
+	/* Put terminator back into stream. */
+	input_line_pointer--;
+	demand_empty_rest_of_line();
+}
+
 /* Directives: Instruction set selection.  */
 
 #ifdef OBJ_ELF
@@ -3837,10 +3868,10 @@ s_arm_eabi_attribute (int ignored ATTRIB
 #endif /* OBJ_ELF */
 
 static void s_arm_arch (int);
-static void s_arm_arch_extension (int);
 static void s_arm_object_arch (int);
 static void s_arm_cpu (int);
 static void s_arm_fpu (int);
+static void s_arm_arch_extension (int);
 
 #ifdef TE_PE
 
@@ -3892,9 +3923,10 @@ const pseudo_typeS md_pseudo_table[] =
   { "syntax",	   s_syntax,	  0 },
   { "cpu",	   s_arm_cpu,	  0 },
   { "arch",	   s_arm_arch,	  0 },
-  { "arch_extension",	   s_arm_arch_extension,	  0 },
   { "object_arch", s_arm_object_arch,	0 },
   { "fpu",	   s_arm_fpu,	  0 },
+  { "arch_extension",	   s_arm_arch_extension,	  0 },
+  { "inst",	   s_inst,	  0 },
 #ifdef OBJ_ELF
   { "word",	   s_arm_elf_cons, 4 },
   { "long",	   s_arm_elf_cons, 4 },

Modified: user/alc/PQ_LAUNDRY/contrib/bmake/ChangeLog
==============================================================================
--- user/alc/PQ_LAUNDRY/contrib/bmake/ChangeLog	Mon May 23 05:14:26 2016	(r300456)
+++ user/alc/PQ_LAUNDRY/contrib/bmake/ChangeLog	Mon May 23 05:15:06 2016	(r300457)
@@ -1,3 +1,26 @@
+2016-05-12  Simon J. Gerraty  <sjg@bad.crufty.net>
+
+	* Makefile (_MAKE_VERSION): 20160512
+	  Merge with NetBSD make, pick up
+	  o meta.c: ignore paths that match .MAKE.META.IGNORE_PATTERNS
+	    this is useful for gcov builds.
+	  o propagate errors from filemon(4).
+	
+2016-05-09  Simon J. Gerraty  <sjg@bad.crufty.net>
+
+	* Makefile (_MAKE_VERSION): 20160509
+	  Merge with NetBSD make, pick up
+	  o remove use of non-standard types u_int etc.
+	  o meta.c: apply realpath() before matching against metaIgnorePaths
+
+2016-04-04  Simon J. Gerraty  <sjg@bad.crufty.net>
+
+	* Makefile (_MAKE_VERSION): 20160404
+	  Merge with NetBSD make, pick up
+	  o allow makefile to set .MAKE.JOBS
+
+	* Makefile (PROG_NAME): use ${_MAKE_VERSION}
+
 2016-03-15  Simon J. Gerraty  <sjg@bad.crufty.net>
 
 	* Makefile (_MAKE_VERSION): 20160315

Modified: user/alc/PQ_LAUNDRY/contrib/bmake/Makefile
==============================================================================
--- user/alc/PQ_LAUNDRY/contrib/bmake/Makefile	Mon May 23 05:14:26 2016	(r300456)
+++ user/alc/PQ_LAUNDRY/contrib/bmake/Makefile	Mon May 23 05:15:06 2016	(r300457)
@@ -1,7 +1,7 @@
-#	$Id: Makefile,v 1.58 2016/03/15 23:39:12 sjg Exp $
+#	$Id: Makefile,v 1.63 2016/05/12 20:34:46 sjg Exp $
 
 # Base version on src date
-_MAKE_VERSION= 20160315
+_MAKE_VERSION= 20160512
 
 PROG=	bmake
 
@@ -131,9 +131,9 @@ OPTIONS_DEFAULT_NO+= \
 .include <own.mk>
 
 .if ${MK_PROG_VERSION} == "yes"
-PROG_NAME= ${PROG}-${MAKE_VERSION}
+PROG_NAME= ${PROG}-${_MAKE_VERSION}
 .if ${MK_PROG_LINK} == "yes"
-SYMLINKS+= ${PROG}-${MAKE_VERSION} ${BINDIR}/${PROG}
+SYMLINKS+= ${PROG_NAME} ${BINDIR}/${PROG}
 .endif
 .endif
 

Modified: user/alc/PQ_LAUNDRY/contrib/bmake/arch.c
==============================================================================
--- user/alc/PQ_LAUNDRY/contrib/bmake/arch.c	Mon May 23 05:14:26 2016	(r300456)
+++ user/alc/PQ_LAUNDRY/contrib/bmake/arch.c	Mon May 23 05:15:06 2016	(r300457)
@@ -1,4 +1,4 @@
-/*	$NetBSD: arch.c,v 1.68 2016/02/18 18:29:14 christos Exp $	*/
+/*	$NetBSD: arch.c,v 1.69 2016/04/06 09:57:00 gson Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -69,14 +69,14 @@
  */
 
 #ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: arch.c,v 1.68 2016/02/18 18:29:14 christos Exp $";
+static char rcsid[] = "$NetBSD: arch.c,v 1.69 2016/04/06 09:57:00 gson Exp $";
 #else
 #include <sys/cdefs.h>
 #ifndef lint
 #if 0
 static char sccsid[] = "@(#)arch.c	8.2 (Berkeley) 1/2/94";
 #else
-__RCSID("$NetBSD: arch.c,v 1.68 2016/02/18 18:29:14 christos Exp $");
+__RCSID("$NetBSD: arch.c,v 1.69 2016/04/06 09:57:00 gson Exp $");
 #endif
 #endif /* not lint */
 #endif
@@ -832,7 +832,7 @@ ArchSVR4Entry(Arch *ar, char *name, size
 	    }
 	if (DEBUG(ARCH)) {
 	    fprintf(debug_file, "Found svr4 archive name table with %lu entries\n",
-	            (u_long)entry);
+	            (unsigned long)entry);
 	}
 	return 0;
     }
@@ -850,7 +850,7 @@ ArchSVR4Entry(Arch *ar, char *name, size
     if (entry >= ar->fnamesize) {
 	if (DEBUG(ARCH)) {
 	    fprintf(debug_file, "SVR4 entry offset %s is greater than %lu\n",
-		   name, (u_long)ar->fnamesize);
+		   name, (unsigned long)ar->fnamesize);
 	}
 	return 2;
     }

Modified: user/alc/PQ_LAUNDRY/contrib/bmake/bmake.1
==============================================================================
--- user/alc/PQ_LAUNDRY/contrib/bmake/bmake.1	Mon May 23 05:14:26 2016	(r300456)
+++ user/alc/PQ_LAUNDRY/contrib/bmake/bmake.1	Mon May 23 05:15:06 2016	(r300457)
@@ -1,4 +1,4 @@
-.\"	$NetBSD: make.1,v 1.255 2016/03/14 07:42:15 matthias Exp $
+.\"	$NetBSD: make.1,v 1.257 2016/05/10 23:45:45 sjg Exp $
 .\"
 .\" Copyright (c) 1990, 1993
 .\"	The Regents of the University of California.  All rights reserved.
@@ -29,7 +29,7 @@
 .\"
 .\"	from: @(#)make.1	8.4 (Berkeley) 3/19/94
 .\"
-.Dd February 19, 2016
+.Dd May 10, 2016
 .Dt MAKE 1
 .Os
 .Sh NAME
@@ -913,6 +913,9 @@ Provides a list of path prefixes that sh
 because the contents are expected to change over time.
 The default list includes:
 .Ql Pa /dev /etc /proc /tmp /var/run /var/tmp
+.It Va .MAKE.META.IGNORE_PATTERNS
+Provides a list of patterns to match against pathnames.
+Ignore any that match.
 .It Va .MAKE.META.PREFIX
 Defines the message printed for each meta file updated in "meta verbose" mode.
 The default value is:

Modified: user/alc/PQ_LAUNDRY/contrib/bmake/bmake.cat1
==============================================================================
--- user/alc/PQ_LAUNDRY/contrib/bmake/bmake.cat1	Mon May 23 05:14:26 2016	(r300456)
+++ user/alc/PQ_LAUNDRY/contrib/bmake/bmake.cat1	Mon May 23 05:15:06 2016	(r300457)
@@ -586,6 +586,10 @@ VVAARRIIAABBLLEE AASSSSIIGG
                      The default list includes: `_/_d_e_v _/_e_t_c _/_p_r_o_c _/_t_m_p _/_v_a_r_/_r_u_n
                      _/_v_a_r_/_t_m_p'
 
+     _._M_A_K_E_._M_E_T_A_._I_G_N_O_R_E___P_A_T_T_E_R_N_S
+                     Provides a list of patterns to match against pathnames.
+                     Ignore any that match.
+
      _._M_A_K_E_._M_E_T_A_._P_R_E_F_I_X
                      Defines the message printed for each meta file updated in
                      "meta verbose" mode.  The default value is:
@@ -1471,4 +1475,4 @@ BBUUGGSS
 
      There is no way of escaping a space character in a filename.
 
-NetBSD 5.1                     February 19, 2016                    NetBSD 5.1
+NetBSD 5.1                       May 10, 2016                       NetBSD 5.1

Modified: user/alc/PQ_LAUNDRY/contrib/bmake/compat.c
==============================================================================
--- user/alc/PQ_LAUNDRY/contrib/bmake/compat.c	Mon May 23 05:14:26 2016	(r300456)
+++ user/alc/PQ_LAUNDRY/contrib/bmake/compat.c	Mon May 23 05:15:06 2016	(r300457)
@@ -1,4 +1,4 @@
-/*	$NetBSD: compat.c,v 1.104 2016/02/18 18:29:14 christos Exp $	*/
+/*	$NetBSD: compat.c,v 1.105 2016/05/12 20:28:34 sjg Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -70,14 +70,14 @@
  */
 
 #ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: compat.c,v 1.104 2016/02/18 18:29:14 christos Exp $";
+static char rcsid[] = "$NetBSD: compat.c,v 1.105 2016/05/12 20:28:34 sjg Exp $";
 #else
 #include <sys/cdefs.h>
 #ifndef lint
 #if 0
 static char sccsid[] = "@(#)compat.c	8.2 (Berkeley) 3/19/94";
 #else
-__RCSID("$NetBSD: compat.c,v 1.104 2016/02/18 18:29:14 christos Exp $");
+__RCSID("$NetBSD: compat.c,v 1.105 2016/05/12 20:28:34 sjg Exp $");
 #endif
 #endif /* not lint */
 #endif
@@ -586,7 +586,8 @@ Compat_Make(void *gnp, void *pgnp)
 	}
 #ifdef USE_META
 	if (useMeta && !NoExecute(gn)) {
-	    meta_job_finish(NULL);
+	    if (meta_job_finish(NULL) != 0)
+		gn->made = ERROR;
 	}
 #endif
 

Modified: user/alc/PQ_LAUNDRY/contrib/bmake/job.c
==============================================================================
--- user/alc/PQ_LAUNDRY/contrib/bmake/job.c	Mon May 23 05:14:26 2016	(r300456)
+++ user/alc/PQ_LAUNDRY/contrib/bmake/job.c	Mon May 23 05:15:06 2016	(r300457)
@@ -1,4 +1,4 @@
-/*	$NetBSD: job.c,v 1.186 2016/02/18 18:29:14 christos Exp $	*/
+/*	$NetBSD: job.c,v 1.187 2016/05/12 20:28:34 sjg Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -70,14 +70,14 @@
  */
 
 #ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: job.c,v 1.186 2016/02/18 18:29:14 christos Exp $";
+static char rcsid[] = "$NetBSD: job.c,v 1.187 2016/05/12 20:28:34 sjg Exp $";
 #else
 #include <sys/cdefs.h>
 #ifndef lint
 #if 0
 static char sccsid[] = "@(#)job.c	8.2 (Berkeley) 3/19/94";
 #else
-__RCSID("$NetBSD: job.c,v 1.186 2016/02/18 18:29:14 christos Exp $");
+__RCSID("$NetBSD: job.c,v 1.187 2016/05/12 20:28:34 sjg Exp $");
 #endif
 #endif /* not lint */
 #endif
@@ -1072,7 +1072,11 @@ JobFinish (Job *job, WAIT_T status)
 
 #ifdef USE_META
     if (useMeta) {
-	meta_job_finish(job);
+	int x;
+
+	if ((x = meta_job_finish(job)) != 0 && status == 0) {
+	    status = x;
+	}
     }
 #endif
     

Modified: user/alc/PQ_LAUNDRY/contrib/bmake/main.c
==============================================================================
--- user/alc/PQ_LAUNDRY/contrib/bmake/main.c	Mon May 23 05:14:26 2016	(r300456)
+++ user/alc/PQ_LAUNDRY/contrib/bmake/main.c	Mon May 23 05:15:06 2016	(r300457)
@@ -1,4 +1,4 @@
-/*	$NetBSD: main.c,v 1.242 2016/03/07 21:45:43 christos Exp $	*/
+/*	$NetBSD: main.c,v 1.244 2016/04/05 04:25:43 sjg Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -69,7 +69,7 @@
  */
 
 #ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: main.c,v 1.242 2016/03/07 21:45:43 christos Exp $";
+static char rcsid[] = "$NetBSD: main.c,v 1.244 2016/04/05 04:25:43 sjg Exp $";
 #else
 #include <sys/cdefs.h>
 #ifndef lint
@@ -81,7 +81,7 @@ __COPYRIGHT("@(#) Copyright (c) 1988, 19
 #if 0
 static char sccsid[] = "@(#)main.c	8.3 (Berkeley) 3/19/94";
 #else
-__RCSID("$NetBSD: main.c,v 1.242 2016/03/07 21:45:43 christos Exp $");
+__RCSID("$NetBSD: main.c,v 1.244 2016/04/05 04:25:43 sjg Exp $");
 #endif
 #endif /* not lint */
 #endif
@@ -1152,14 +1152,6 @@ main(int argc, char **argv)
 	}
 
 	/*
-	 * Be compatible if user did not specify -j and did not explicitly
-	 * turned compatibility on
-	 */
-	if (!compatMake && !forceJobs) {
-		compatMake = TRUE;
-	}
-	
-	/*
 	 * Initialize archive, target and suffix modules in preparation for
 	 * parsing the makefile(s)
 	 */
@@ -1275,6 +1267,36 @@ main(int argc, char **argv)
 	Var_Append("MFLAGS", Var_Value(MAKEFLAGS, VAR_GLOBAL, &p1), VAR_GLOBAL);
 	free(p1);
 
+	if (!forceJobs && !compatMake &&
+	    Var_Exists(".MAKE.JOBS", VAR_GLOBAL)) {
+	    char *value;
+	    int n;
+
+	    value = Var_Subst(NULL, "${.MAKE.JOBS}", VAR_GLOBAL, VARF_WANTRES);
+	    n = strtol(value, NULL, 0);
+	    if (n < 1) {
+		(void)fprintf(stderr, "%s: illegal value for .MAKE.JOBS -- must be positive integer!\n",
+		    progname);
+		exit(1);
+	    }
+	    if (n != maxJobs) {
+		Var_Append(MAKEFLAGS, "-j", VAR_GLOBAL);
+		Var_Append(MAKEFLAGS, value, VAR_GLOBAL);
+	    }
+	    maxJobs = n;
+	    maxJobTokens = maxJobs;
+	    forceJobs = TRUE;
+	    free(value);
+	}
+
+	/*
+	 * Be compatible if user did not specify -j and did not explicitly
+	 * turned compatibility on
+	 */
+	if (!compatMake && !forceJobs) {
+	    compatMake = TRUE;
+	}
+
 	if (!compatMake)
 	    Job_ServerStart(maxJobTokens, jp_0, jp_1);
 	if (DEBUG(JOB))

Modified: user/alc/PQ_LAUNDRY/contrib/bmake/make.1
==============================================================================
--- user/alc/PQ_LAUNDRY/contrib/bmake/make.1	Mon May 23 05:14:26 2016	(r300456)
+++ user/alc/PQ_LAUNDRY/contrib/bmake/make.1	Mon May 23 05:15:06 2016	(r300457)
@@ -1,4 +1,4 @@
-.\"	$NetBSD: make.1,v 1.255 2016/03/14 07:42:15 matthias Exp $
+.\"	$NetBSD: make.1,v 1.257 2016/05/10 23:45:45 sjg Exp $
 .\"
 .\" Copyright (c) 1990, 1993
 .\"	The Regents of the University of California.  All rights reserved.
@@ -29,7 +29,7 @@
 .\"
 .\"	from: @(#)make.1	8.4 (Berkeley) 3/19/94
 .\"
-.Dd February 19, 2016
+.Dd May 10, 2016
 .Dt MAKE 1
 .Os
 .Sh NAME
@@ -924,6 +924,9 @@ Provides a list of path prefixes that sh
 because the contents are expected to change over time.
 The default list includes:
 .Ql Pa /dev /etc /proc /tmp /var/run /var/tmp
+.It Va .MAKE.META.IGNORE_PATTERNS
+Provides a list of patterns to match against pathnames.
+Ignore any that match.
 .It Va .MAKE.META.PREFIX
 Defines the message printed for each meta file updated in "meta verbose" mode.
 The default value is:

Modified: user/alc/PQ_LAUNDRY/contrib/bmake/meta.c
==============================================================================
--- user/alc/PQ_LAUNDRY/contrib/bmake/meta.c	Mon May 23 05:14:26 2016	(r300456)
+++ user/alc/PQ_LAUNDRY/contrib/bmake/meta.c	Mon May 23 05:15:06 2016	(r300457)
@@ -1,4 +1,4 @@
-/*      $NetBSD: meta.c,v 1.54 2016/03/11 07:01:21 sjg Exp $ */
+/*      $NetBSD: meta.c,v 1.57 2016/05/12 20:28:34 sjg Exp $ */
 
 /*
  * Implement 'meta' mode.
@@ -66,6 +66,9 @@ static char *metaIgnorePathsStr;	/* stri
 #ifndef MAKE_META_IGNORE_PATHS
 #define MAKE_META_IGNORE_PATHS ".MAKE.META.IGNORE_PATHS"
 #endif
+#ifndef MAKE_META_IGNORE_PATTERNS
+#define MAKE_META_IGNORE_PATTERNS ".MAKE.META.IGNORE_PATTERNS"
+#endif
 
 Boolean useMeta = FALSE;
 static Boolean useFilemon = FALSE;
@@ -73,6 +76,7 @@ static Boolean writeMeta = FALSE;
 static Boolean metaEnv = FALSE;		/* don't save env unless asked */
 static Boolean metaVerbose = FALSE;
 static Boolean metaIgnoreCMDs = FALSE;	/* ignore CMDs in .meta files */
+static Boolean metaIgnorePatterns = FALSE; /* do we need to do pattern matches */
 static Boolean metaCurdirOk = FALSE;	/* write .meta in .CURDIR Ok? */
 static Boolean metaSilent = FALSE;	/* if we have a .meta be SILENT */
 
@@ -157,28 +161,33 @@ filemon_open(BuildMon *pbm)
  * Read the build monitor output file and write records to the target's
  * metadata file.
  */
-static void
+static int
 filemon_read(FILE *mfp, int fd)
 {
     char buf[BUFSIZ];
     int n;
+    int error;
 
     /* Check if we're not writing to a meta data file.*/
     if (mfp == NULL) {
 	if (fd >= 0)
 	    close(fd);			/* not interested */
-	return;
+	return 0;
     }
     /* rewind */
     (void)lseek(fd, (off_t)0, SEEK_SET);
 
+    error = 0;
     fprintf(mfp, "\n-- filemon acquired metadata --\n");
 
     while ((n = read(fd, buf, sizeof(buf))) > 0) {
-	fwrite(buf, 1, n, mfp);
+	if ((int)fwrite(buf, 1, n, mfp) < n)
+	    error = EIO;
     }
     fflush(mfp);
-    close(fd);
+    if (close(fd) < 0)
+	error = errno;
+    return error;
 }
 #endif
 
@@ -620,6 +629,15 @@ meta_mode_init(const char *make_mode)
     if (metaIgnorePathsStr) {
 	str2Lst_Append(metaIgnorePaths, metaIgnorePathsStr, NULL);
     }
+
+    /*
+     * We ignore any paths that match ${.MAKE.META.IGNORE_PATTERNS}
+     */
+    cp = NULL;
+    if (Var_Value(MAKE_META_IGNORE_PATTERNS, VAR_GLOBAL, &cp)) {
+	metaIgnorePatterns = TRUE;
+	free(cp);
+    }
 }
 
 /*
@@ -744,27 +762,35 @@ meta_job_output(Job *job, char *cp, cons
     }
 }
 
-void
+int
 meta_cmd_finish(void *pbmp)
 {
+    int error = 0;
 #ifdef USE_FILEMON
     BuildMon *pbm = pbmp;
+    int x;
 
     if (!pbm)
 	pbm = &Mybm;
 
     if (pbm->filemon_fd >= 0) {
-	close(pbm->filemon_fd);
-	filemon_read(pbm->mfp, pbm->mon_fd);
+	if (close(pbm->filemon_fd) < 0)
+	    error = errno;
+	x = filemon_read(pbm->mfp, pbm->mon_fd);
+	if (error == 0 && x != 0)
+	    error = x;
 	pbm->filemon_fd = pbm->mon_fd = -1;
     }
 #endif
+    return error;
 }
 
-void
+int
 meta_job_finish(Job *job)
 {
     BuildMon *pbm;
+    int error = 0;
+    int x;
 
     if (job != NULL) {
 	pbm = &job->bm;
@@ -772,11 +798,14 @@ meta_job_finish(Job *job)
 	pbm = &Mybm;
     }
     if (pbm->mfp != NULL) {
-	meta_cmd_finish(pbm);
-	fclose(pbm->mfp);
+	error = meta_cmd_finish(pbm);
+	x = fclose(pbm->mfp);
+	if (error == 0 && x != 0)
+	    error = errno;
 	pbm->mfp = NULL;
 	pbm->meta_fname[0] = '\0';
     }
+    return error;
 }
 
 void
@@ -1209,14 +1238,35 @@ meta_oodate(GNode *gn, Boolean oodate)
 		     * be part of the dependencies because
 		     * they are _expected_ to change.
 		     */
-		    if (*p == '/' &&
-			Lst_ForEach(metaIgnorePaths, prefix_match, p)) {
+		    if (*p == '/') {
+			realpath(p, fname1); /* clean it up */
+			if (Lst_ForEach(metaIgnorePaths, prefix_match, fname1)) {
 #ifdef DEBUG_META_MODE
-			if (DEBUG(META))
-			    fprintf(debug_file, "meta_oodate: ignoring: %s\n",
-				    p);
+			    if (DEBUG(META))
+				fprintf(debug_file, "meta_oodate: ignoring path: %s\n",
+					p);
 #endif
-			break;
+			    break;
+			}
+		    }
+
+		    if (metaIgnorePatterns) {
+			char *pm;
+
+			snprintf(fname1, sizeof(fname1),
+				 "${%s:@m@${%s:L:M$m}@}",
+				 MAKE_META_IGNORE_PATTERNS, p);
+			pm = Var_Subst(NULL, fname1, gn, VARF_WANTRES);
+			if (*pm) {
+#ifdef DEBUG_META_MODE
+			    if (DEBUG(META))
+				fprintf(debug_file, "meta_oodate: ignoring pattern: %s\n",
+					p);
+#endif
+			    free(pm);
+			    break;
+			}
+			free(pm);
 		    }
 
 		    /*

Modified: user/alc/PQ_LAUNDRY/contrib/bmake/meta.h
==============================================================================
--- user/alc/PQ_LAUNDRY/contrib/bmake/meta.h	Mon May 23 05:14:26 2016	(r300456)
+++ user/alc/PQ_LAUNDRY/contrib/bmake/meta.h	Mon May 23 05:15:06 2016	(r300457)
@@ -1,4 +1,4 @@
-/*      $NetBSD: meta.h,v 1.4 2016/03/07 21:45:43 christos Exp $ */
+/*      $NetBSD: meta.h,v 1.5 2016/05/12 20:28:34 sjg Exp $ */
 
 /*
  * Things needed for 'meta' mode.
@@ -48,8 +48,8 @@ void meta_job_start(struct Job *, GNode 
 void meta_job_child(struct Job *);
 void meta_job_error(struct Job *, GNode *, int, int);
 void meta_job_output(struct Job *, char *, const char *);
-void meta_cmd_finish(void *);
-void meta_job_finish(struct Job *);
+int  meta_cmd_finish(void *);
+int  meta_job_finish(struct Job *);
 Boolean meta_oodate(GNode *, Boolean);
 void meta_compat_start(void);
 void meta_compat_child(void);

Modified: user/alc/PQ_LAUNDRY/contrib/bmake/mk/ChangeLog
==============================================================================
--- user/alc/PQ_LAUNDRY/contrib/bmake/mk/ChangeLog	Mon May 23 05:14:26 2016	(r300456)
+++ user/alc/PQ_LAUNDRY/contrib/bmake/mk/ChangeLog	Mon May 23 05:15:06 2016	(r300457)
@@ -1,3 +1,57 @@
+2016-05-12  Simon J. Gerraty  <sjg@bad.crufty.net>
+
+	* install-mk (MK_VERSION): 20160512
+
+	* dpadd.mk: always include local.dpadd.mk if it exists
+	  remove some things that better belong in local.dpadd.mk
+	  skip INCLUDES_* for staged libs unless SRC_* defined.
+
+	* own.mk: add INCLUDEDIR
+	
+2016-04-18  Simon J. Gerraty  <sjg@bad.crufty.net>
+
+	* dirdeps.mk: when doing -f dirdeps.mk if target suppies no
+	  TARGET_MACHINE - :E will be empty or match part of path, use
+	  ${MACHINE}
+
+2016-04-07  Simon J. Gerraty  <sjg@bad.crufty.net>
+
+	* meta.autodep.mk: issue a warning if UPDATE_DEPENDFILE=NO due to
+	  NO_FILEMON_COOKIE  
+
+	* dirdeps.mk: move the logic that allows for 
+	  make -f dirdeps.mk some/dir.${TARGET_SPEC}
+	  inside the check for !target(_DIRDEP_USE)
+
+2016-04-04  Simon J. Gerraty  <sjg@bad.crufty.net>
+
+	* Use <> when including local*.mk and others which may exist
+	  elsewhere so that user can better control what they get.
+	
+	* meta.autodep.mk (NO_FILEMON_COOKIE): 
+	  create a cookie if we ever build dir with nofilemon
+	  so that UPDATE_DEPENDFILE will be forced to NO until cleaned.
+
+2016-04-01  Simon J. Gerraty  <sjg@bad.crufty.net>
+
+	* install-mk (MK_VERSION): 20160401
+	
+	* meta2deps.py: fix old print statement when debugging.
+
+	* gendirdeps.mk: META2DEPS_CMD append M2D_EXCLUDES with -X
+	  patch from Bryan Drewery
+
+2016-03-22  Simon J. Gerraty  <sjg@bad.crufty.net>
+
+	* install-mk (MK_VERSION): 20160317 (St. Pats)
+	
+	* warnings.mk: g++ does not like -Wimplicit
+	
+	* sys.mk sys/*.mk lib.mk prog.mk: use CXX_SUFFIXES to handle the
+	  pelthora of common suffixes for C++
+	
+	* lib.mk: use .So for shared objects
+
 2016-03-15  Simon J. Gerraty  <sjg@bad.crufty.net>
 
 	* install-mk (MK_VERSION): 20160315

Modified: user/alc/PQ_LAUNDRY/contrib/bmake/mk/auto.dep.mk
==============================================================================
--- user/alc/PQ_LAUNDRY/contrib/bmake/mk/auto.dep.mk	Mon May 23 05:14:26 2016	(r300456)
+++ user/alc/PQ_LAUNDRY/contrib/bmake/mk/auto.dep.mk	Mon May 23 05:15:06 2016	(r300457)
@@ -1,6 +1,6 @@
 #
 # RCSid:
-#	$Id: auto.dep.mk,v 1.4 2016/02/18 21:16:39 sjg Exp $
+#	$Id: auto.dep.mk,v 1.5 2016/04/05 15:58:37 sjg Exp $
 #
 #	@(#) Copyright (c) 2010, Simon J. Gerraty
 #
@@ -66,7 +66,7 @@ ${.MAKE.DEPENDFILE}: ${OBJS} ${POBJS} ${
 .if empty(_SKIP_BUILD)
 _all_objs = ${OBJS} ${POBJS} ${SOBJS}
 .for d in ${_all_objs:M*o:T:O:u:%=%.d}
-.dinclude "$d"
+.dinclude <$d>
 .endfor
 .endif
 

Modified: user/alc/PQ_LAUNDRY/contrib/bmake/mk/autodep.mk
==============================================================================
--- user/alc/PQ_LAUNDRY/contrib/bmake/mk/autodep.mk	Mon May 23 05:14:26 2016	(r300456)
+++ user/alc/PQ_LAUNDRY/contrib/bmake/mk/autodep.mk	Mon May 23 05:15:06 2016	(r300457)
@@ -1,6 +1,6 @@
 #
 # RCSid:
-#	$Id: autodep.mk,v 1.34 2014/08/04 05:12:27 sjg Exp $
+#	$Id: autodep.mk,v 1.36 2016/04/05 15:58:37 sjg Exp $
 #
 #	@(#) Copyright (c) 1999-2010, Simon J. Gerraty
 #
@@ -25,7 +25,11 @@ __${.PARSEFILE}__:
 DEPENDFILE?= .depend
 .for d in ${DEPENDFILE:N.depend}
 # bmake only groks .depend
-.-include "$d"
+.if ${MAKE_VERSION} < 20160218
+.-include <$d>
+.else
+.dinclude <$d>
+.endif
 .endfor
 
 # it does nothing if SRCS is not defined or is empty
@@ -75,6 +79,9 @@ CXXFLAGS_MD=${CXXFLAGS:M-[IUD]*} ${CPPFL
 CC_MD?=${CC}
 CXX_MD?=${CXX}
 
+# should have been set by sys.mk
+CXX_SUFFIXES?= .cc .cpp .cxx .C

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

From owner-svn-src-user@freebsd.org  Mon May 23 05:28:04 2016
Return-Path: <owner-svn-src-user@freebsd.org>
Delivered-To: svn-src-user@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3E8C2B460A6
 for <svn-src-user@mailman.ysv.freebsd.org>;
 Mon, 23 May 2016 05:28:04 +0000 (UTC)
 (envelope-from markj@FreeBSD.org)
Received: from repo.freebsd.org (repo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:0])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 0FE9619DF;
 Mon, 23 May 2016 05:28:03 +0000 (UTC)
 (envelope-from markj@FreeBSD.org)
Received: from repo.freebsd.org ([127.0.1.37])
 by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u4N5S3H2088159;
 Mon, 23 May 2016 05:28:03 GMT (envelope-from markj@FreeBSD.org)
Received: (from markj@localhost)
 by repo.freebsd.org (8.15.2/8.15.2/Submit) id u4N5S34B088158;
 Mon, 23 May 2016 05:28:03 GMT (envelope-from markj@FreeBSD.org)
Message-Id: <201605230528.u4N5S34B088158@repo.freebsd.org>
X-Authentication-Warning: repo.freebsd.org: markj set sender to
 markj@FreeBSD.org using -f
From: Mark Johnston <markj@FreeBSD.org>
Date: Mon, 23 May 2016 05:28:03 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
Subject: svn commit: r300465 - user/alc/PQ_LAUNDRY/sys/vm
X-SVN-Group: user
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
 src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user/>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 23 May 2016 05:28:04 -0000

Author: markj
Date: Mon May 23 05:28:03 2016
New Revision: 300465
URL: https://svnweb.freebsd.org/changeset/base/300465

Log:
  Address over-eager OOM kills.
  
  Prior to this change, vm_page_free_wakeup() and thus vm_page_free() would
  clear vm_pages_needed when the free page count is above v_free_min. If the
  pagedaemon is starved for pages to reclaim because of a runaway process or
  because all inactive pages are dirty, but other threads are occasionally
  freeing pages, and v_free_min <= v_free_count <= vm_pageout_wakeup_thresh,
  concurrent vm_page_free() and vm_page_alloc() calls will respectively clear
  and set vm_pages_needed, waking up the pagedaemon in the process. This can
  cause the domain's oom_seq value to increment very quickly, leading to a
  spurious OOM kill when the pagedaemon cannot find clean pages to reclaim in
  the time that it takes for some pages to be laundered.
  
  This can be triggered during multiple consecutive sysbench runs when it
  writes mmap'ed files that are larger than system memory.
  
  Fix the problem by modifying vm_page_free_wakeup() to only clear
  vm_pages_needed once v_free_count has risen above vm_pageout_wakeup_thresh.
  
  Reviewed by:	alc

Modified:
  user/alc/PQ_LAUNDRY/sys/vm/vm_page.c

Modified: user/alc/PQ_LAUNDRY/sys/vm/vm_page.c
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/vm/vm_page.c	Mon May 23 05:28:02 2016	(r300464)
+++ user/alc/PQ_LAUNDRY/sys/vm/vm_page.c	Mon May 23 05:28:03 2016	(r300465)
@@ -2910,7 +2910,8 @@ vm_page_free_wakeup(void)
 	 * lots of memory. this process will swapin processes.
 	 */
 	if (vm_pages_needed && !vm_page_count_min()) {
-		vm_pages_needed = 0;
+		if (!vm_paging_needed())
+			vm_pages_needed = 0;
 		wakeup(&vm_cnt.v_free_count);
 	}
 }

From owner-svn-src-user@freebsd.org  Mon May 23 05:37:46 2016
Return-Path: <owner-svn-src-user@freebsd.org>
Delivered-To: svn-src-user@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 9BB7FB463DB
 for <svn-src-user@mailman.ysv.freebsd.org>;
 Mon, 23 May 2016 05:37:46 +0000 (UTC)
 (envelope-from markj@FreeBSD.org)
Received: from repo.freebsd.org (repo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:0])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 63C9A12FC;
 Mon, 23 May 2016 05:37:46 +0000 (UTC)
 (envelope-from markj@FreeBSD.org)
Received: from repo.freebsd.org ([127.0.1.37])
 by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u4N5bjQP091548;
 Mon, 23 May 2016 05:37:45 GMT (envelope-from markj@FreeBSD.org)
Received: (from markj@localhost)
 by repo.freebsd.org (8.15.2/8.15.2/Submit) id u4N5bj1I091547;
 Mon, 23 May 2016 05:37:45 GMT (envelope-from markj@FreeBSD.org)
Message-Id: <201605230537.u4N5bj1I091547@repo.freebsd.org>
X-Authentication-Warning: repo.freebsd.org: markj set sender to
 markj@FreeBSD.org using -f
From: Mark Johnston <markj@FreeBSD.org>
Date: Mon, 23 May 2016 05:37:45 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
Subject: svn commit: r300468 - user/alc/PQ_LAUNDRY/sys/vm
X-SVN-Group: user
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
 src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user/>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 23 May 2016 05:37:46 -0000

Author: markj
Date: Mon May 23 05:37:45 2016
New Revision: 300468
URL: https://svnweb.freebsd.org/changeset/base/300468

Log:
  Fix laundry queue handling when multiple domains are configured.
  
  Currently, there is only a single laundry thread and it operates on
  queues in domain 0. Therefore, when placing a page in PQ_LAUNDRY, it
  should be placed in the PQ_LAUNDRY queue for domain 0.
  
  Reviewed by:	alc

Modified:
  user/alc/PQ_LAUNDRY/sys/vm/vm_page.c

Modified: user/alc/PQ_LAUNDRY/sys/vm/vm_page.c
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/vm/vm_page.c	Mon May 23 05:31:53 2016	(r300467)
+++ user/alc/PQ_LAUNDRY/sys/vm/vm_page.c	Mon May 23 05:37:45 2016	(r300468)
@@ -2738,7 +2738,10 @@ struct vm_pagequeue *
 vm_page_pagequeue(vm_page_t m)
 {
 
-	return (&vm_phys_domain(m)->vmd_pagequeues[m->queue]);
+	if (vm_page_in_laundry(m))
+		return (&vm_dom[0].vmd_pagequeues[m->queue]);
+	else
+		return (&vm_phys_domain(m)->vmd_pagequeues[m->queue]);
 }
 
 /*
@@ -2800,7 +2803,10 @@ vm_page_enqueue(uint8_t queue, vm_page_t
 	KASSERT(queue < PQ_COUNT,
 	    ("vm_page_enqueue: invalid queue %u request for page %p",
 	    queue, m));
-	pq = &vm_phys_domain(m)->vmd_pagequeues[queue];
+	if (queue == PQ_LAUNDRY)
+		pq = &vm_dom[0].vmd_pagequeues[queue];
+	else
+		pq = &vm_phys_domain(m)->vmd_pagequeues[queue];
 	vm_pagequeue_lock(pq);
 	m->queue = queue;
 	TAILQ_INSERT_TAIL(&pq->pq_pl, m, plinks.q);
@@ -3182,7 +3188,9 @@ vm_page_deactivate_noreuse(vm_page_t m)
 }
 
 /*
- * XXX
+ * vm_page_launder
+ *
+ * 	Put a page in the laundry.
  */
 void
 vm_page_launder(vm_page_t m)

From owner-svn-src-user@freebsd.org  Mon May 23 06:04:39 2016
Return-Path: <owner-svn-src-user@freebsd.org>
Delivered-To: svn-src-user@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id BFC3FB46D72
 for <svn-src-user@mailman.ysv.freebsd.org>;
 Mon, 23 May 2016 06:04:39 +0000 (UTC)
 (envelope-from markj@FreeBSD.org)
Received: from repo.freebsd.org (repo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:0])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 9ACCE1B30;
 Mon, 23 May 2016 06:04:39 +0000 (UTC)
 (envelope-from markj@FreeBSD.org)
Received: from repo.freebsd.org ([127.0.1.37])
 by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u4N64cnu001234;
 Mon, 23 May 2016 06:04:38 GMT (envelope-from markj@FreeBSD.org)
Received: (from markj@localhost)
 by repo.freebsd.org (8.15.2/8.15.2/Submit) id u4N64cOG001232;
 Mon, 23 May 2016 06:04:38 GMT (envelope-from markj@FreeBSD.org)
Message-Id: <201605230604.u4N64cOG001232@repo.freebsd.org>
X-Authentication-Warning: repo.freebsd.org: markj set sender to
 markj@FreeBSD.org using -f
From: Mark Johnston <markj@FreeBSD.org>
Date: Mon, 23 May 2016 06:04:38 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
Subject: svn commit: r300476 - in user/alc/PQ_LAUNDRY/sys: sys vm
X-SVN-Group: user
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
 src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user/>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 23 May 2016 06:04:39 -0000

Author: markj
Date: Mon May 23 06:04:38 2016
New Revision: 300476
URL: https://svnweb.freebsd.org/changeset/base/300476

Log:
  Add a basic laundering policy.
  
  This policy stems from the notion that there are two reasons to launder
  pages:
  
  1. Shortfall, in which the inactive and free queues are depleted, and
     the system must launder dirty pages in order to reclaim memory.
  
  2. Fairness: the system should periodically launder dirty pages to
     ensure that applications cannot excessively influence the system's
     memory reclaimation behaviour. Note that this does not imply that
     clear and dirty pages must be treated equally: page laundering is an
     expensive operation. However, the relative costs of reclaiming a
     clean vs. dirty page should be bounded in some well-defined way, and
     in particular, it should not be possible to force the system to
     reclaim only clean pages indefinitely. Under memory pressure the
     system should eventually launder some dirty pages, even when inactive
     clean pages are plentiful.
  
  Thus, laundering targets are chosen based on the current state of the
  paging queues. In shortfall, the laundry thread attempts to meet the
  shortfall within 0.5s, the pagedaemon sleep period. Because it is the
  sole source of clean pages, no attempts are made to limit the laundering
  rate: the laundry thread goes all-out.
  
  If the system is not in shortfall, the laundry thread may elect to
  launder some dirty pages in an attempt to satisfy the fairness policy.
  This is referred to as background laundering. Several conditions must be
  met for background laundering to occur:
  
  a) The laundry queue must contain a significant amount of the system's
     inactive memory: if the number of dirty pages is miniscule, nothing
     is gained by laundering them. Moreover, write clustering works better
     if the number of dirty pages is allowed to grow to some threshold
     before any laundering is performed. The ratio of clean to dirty pages
     serves as a threshold here, controlled by bkgrd_launder_ratio. By
     default, dirty pages must constitute at least 1% of inactive memory
     for background laundering to occur.
  
  b) The number of free pages must be low. If there is plentiful free
     memory, there's no reason to launder pages. The number of free pages
     must be smaller than bkgrd_launder_thresh for background laundering
     to occur. By default, this is chosen to be the max of half the free
     target and 3/2s of the pagedaemon wakeup threshold. The idea is to
     start laundering before the pagedaemon wakes up.
  
  c) The pagedaemon thread(s) must be active. If the number of free pages
     is low but the system is not under memory pressure, we should not
     continue background laundering indefinitely. We use
     vm_cnt.v_pdwakeups as a proxy for pagedaemon activity: when a
     background laundering run begins, the pdwakeups value is recorded; a
     second run cannot begin until pdwakeups has been incremented at least
     once.
  
  When the conditions for background laundering are met, the laundry
  thread determines the target number of pages and begins laundering. It
  attempts to meet the target within one second unless the corresponding
  laundering rate would exceed bkgrd_launder_max (32MB/s by default). The
  target is given by 0.5*l(L)*FT/l(I), where FT is the free page threshold
  used by the pagedaemon. In particular, the number of pages laundered is
  proportional to the ratio of dirty to clean inactive pages. When
  performing background laundering, the pagedaemon counts reactivated
  pages towards its target.
  
  Reviewed by:	alc

Modified:
  user/alc/PQ_LAUNDRY/sys/sys/vmmeter.h
  user/alc/PQ_LAUNDRY/sys/vm/vm_pageout.c

Modified: user/alc/PQ_LAUNDRY/sys/sys/vmmeter.h
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/sys/vmmeter.h	Mon May 23 06:01:04 2016	(r300475)
+++ user/alc/PQ_LAUNDRY/sys/sys/vmmeter.h	Mon May 23 06:04:38 2016	(r300476)
@@ -185,6 +185,18 @@ vm_paging_needed(void)
 	    (u_int)vm_pageout_wakeup_thresh);
 }
 
+/*
+ * Return the number of pages we need to launder.
+ * A positive number indicates that we have a shortfall of clean pages.
+ */
+static inline int
+vm_laundry_target(void)
+{
+
+	return (vm_cnt.v_inactive_target - vm_cnt.v_inactive_count +
+	    vm_paging_target());
+}
+
 #endif
 
 /* systemwide totals computed every five seconds */

Modified: user/alc/PQ_LAUNDRY/sys/vm/vm_pageout.c
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/vm/vm_pageout.c	Mon May 23 06:01:04 2016	(r300475)
+++ user/alc/PQ_LAUNDRY/sys/vm/vm_pageout.c	Mon May 23 06:04:38 2016	(r300476)
@@ -231,6 +231,21 @@ SYSCTL_INT(_vm, OID_AUTO, act_scan_laund
 	CTLFLAG_RW, &act_scan_laundry_weight, 0,
 	"weight given to clean vs. dirty pages in active queue scans");
 
+static u_int bkgrd_launder_ratio = 100;
+SYSCTL_UINT(_vm, OID_AUTO, bkgrd_launder_ratio,
+	CTLFLAG_RW, &bkgrd_launder_ratio, 0,
+	"ratio of inactive to laundry pages to trigger background laundering");
+
+static u_int bkgrd_launder_max = 32768;
+SYSCTL_UINT(_vm, OID_AUTO, bkgrd_launder_max,
+	CTLFLAG_RW, &bkgrd_launder_max, 0,
+	"maximum background laundering rate, in pages per second");
+
+static u_int bkgrd_launder_thresh;
+SYSCTL_UINT(_vm, OID_AUTO, bkgrd_launder_thresh,
+	CTLFLAG_RW, &bkgrd_launder_thresh, 0,
+	"free page threshold below which background laundering may be started");
+
 #define VM_PAGEOUT_PAGE_COUNT 16
 int vm_pageout_page_count = VM_PAGEOUT_PAGE_COUNT;
 
@@ -239,7 +254,7 @@ SYSCTL_INT(_vm, OID_AUTO, max_wired,
 	CTLFLAG_RW, &vm_page_max_wired, 0, "System-wide limit to wired page count");
 
 static boolean_t vm_pageout_fallback_object_lock(vm_page_t, vm_page_t *);
-static void vm_pageout_launder(struct vm_domain *vmd);
+static int vm_pageout_launder(struct vm_domain *vmd, int launder);
 static void vm_pageout_laundry_worker(void *arg);
 #if !defined(NO_SWAPPING)
 static void vm_pageout_map_deactivate_pages(vm_map_t, long);
@@ -877,32 +892,21 @@ unlock_mp:
 }
 
 /*
- * XXX
+ * Attempt to launder the specified number of pages.
+ *
+ * Returns the number of pages successfully laundered.
  */
-static void
-vm_pageout_launder(struct vm_domain *vmd)
+static int
+vm_pageout_launder(struct vm_domain *vmd, int launder)
 {
 	vm_page_t m, next;
 	struct vm_pagequeue *pq;
 	vm_object_t object;
-	int act_delta, error, launder, maxscan, numpagedout, vnodes_skipped;
-	boolean_t pageout_ok, queue_locked;
-
-	/*
-	 * Compute the number of pages we want to move from the laundry queue to
-	 * the inactive queue.  If there is no shortage of clean, inactive
-	 * pages, we allow laundering to proceed at a trickle to ensure that
-	 * dirty pages will eventually be reused.  Otherwise, the inactive queue
-	 * target is scaled by the ratio of the sleep intervals of the laundry
-	 * queue and inactive queue worker threads.
-	 */
-	launder = vm_cnt.v_inactive_target - vm_cnt.v_inactive_count +
-	    vm_paging_target() + vm_pageout_deficit;
-	if (launder < 0)
-		launder = 1;
-	else
-		launder /= VM_LAUNDER_RATE;
+	int act_delta, error, maxscan, numpagedout, starting_target;
+	int vnodes_skipped;
+	boolean_t pageout_ok, queue_locked, shortfall;
 
+	starting_target = launder;
 	vnodes_skipped = 0;
 
 	/*
@@ -917,6 +921,8 @@ vm_pageout_launder(struct vm_domain *vmd
 	 */
 	pq = &vmd->vmd_pagequeues[PQ_LAUNDRY];
 	maxscan = pq->pq_cnt;
+	shortfall = vm_laundry_target() > 0;
+
 	vm_pagequeue_lock(pq);
 	queue_locked = TRUE;
 	for (m = TAILQ_FIRST(&pq->pq_pl);
@@ -991,6 +997,17 @@ vm_pageout_launder(struct vm_domain *vmd
 				 * queue.
  				 */
 				m->act_count += act_delta + ACT_ADVANCE;
+
+				/*
+				 * If this was a background laundering, count
+				 * activated pages towards our target.  The
+				 * purpose of background laundering is to ensure
+				 * that pages are eventually cycled through the
+				 * laundry queue, and an activation is a valid
+				 * way out.
+				 */
+				if (!shortfall)
+					launder--;
 				goto drop_page;
 			} else if ((object->flags & OBJ_DEAD) == 0)
 				goto requeue_page;
@@ -1064,29 +1081,121 @@ relock_queue:
 	 */
 	if (vnodes_skipped > 0 && launder > 0)
 		(void)speedup_syncer();
+
+	return (starting_target - launder);
 }
 
 /*
- * XXX
+ * Perform the work of the laundry thread: periodically wake up and determine
+ * whether any pages need to be laundered.  If so, determine the number of pages
+ * that need to be laundered, and launder them.
  */
 static void
 vm_pageout_laundry_worker(void *arg)
 {
 	struct vm_domain *domain;
-	int domidx;
+	uint64_t ninact, nlaundry;
+	int cycle, tcycle, domidx, gen, launder, laundered;
+	int shortfall, prev_shortfall, target;
 
 	domidx = (uintptr_t)arg;
 	domain = &vm_dom[domidx];
 	KASSERT(domain->vmd_segs != 0, ("domain without segments"));
 	vm_pageout_init_marker(&domain->vmd_laundry_marker, PQ_LAUNDRY);
 
+	cycle = tcycle = 0;
+	gen = -1;
+	shortfall = prev_shortfall = 0;
+	target = 0;
+
+	if (bkgrd_launder_thresh == 0)
+		bkgrd_launder_thresh = max(vm_cnt.v_free_target / 2,
+		    3 * vm_pageout_wakeup_thresh / 2);
+
 	/*
 	 * The pageout laundry worker is never done, so loop forever.
 	 */
 	for (;;) {
+		KASSERT(target >= 0, ("negative target %d", target));
+		launder = 0;
+
+		/*
+		 * First determine whether we're in shortfall.  If so, there's
+		 * an impending need for clean pages.  We attempt to launder the
+		 * target within one pagedaemon sleep period.
+		 */
+		shortfall = vm_laundry_target() + vm_pageout_deficit;
+		if (shortfall > 0) {
+			/*
+			 * If the shortfall has grown since the last cycle or
+			 * we're still in shortfall despite a previous
+			 * laundering run, start a new run.
+			 */
+			if (shortfall > prev_shortfall || cycle == tcycle) {
+				target = shortfall;
+				cycle = 0;
+				tcycle = VM_LAUNDER_RATE;
+			}
+			prev_shortfall = shortfall;
+			launder = target / (tcycle - (cycle % tcycle));
+			goto launder;
+		} else {
+			if (prev_shortfall > 0)
+				/* We're out of shortfall; the target is met. */
+				target = 0;
+			shortfall = prev_shortfall = 0;
+		}
+
+		/*
+		 * There's no immediate need to launder any pages; see if we
+		 * meet the conditions to perform background laundering:
+		 *
+		 * 1. we haven't yet reached the target of the current
+		 *    background laundering run, or
+		 * 2. the ratio of dirty to clean inactive pages exceeds the
+		 *    background laundering threshold and the free page count is
+		 *    low.
+		 *
+		 * We don't start a new background laundering run unless the
+		 * pagedaemon has been woken up at least once since the previous
+		 * run.
+		 */
+		if (target > 0 && cycle != tcycle) {
+			/* Continue an ongoing background run. */
+			launder = target / (tcycle - (cycle % tcycle));
+			goto launder;
+		}
+
+		ninact = vm_cnt.v_inactive_count;
+		nlaundry = vm_cnt.v_laundry_count;
+		if (ninact > 0 &&
+		    vm_cnt.v_pdwakeups != gen &&
+		    vm_cnt.v_free_count < bkgrd_launder_thresh &&
+		    nlaundry * bkgrd_launder_ratio >= ninact) {
+			cycle = 0;
+			tcycle = VM_LAUNDER_INTERVAL;
+			gen = vm_cnt.v_pdwakeups;
+			if (nlaundry >= ninact)
+				target = vm_cnt.v_free_target;
+			else
+				target = (nlaundry * vm_cnt.v_free_target << 16) /
+				    ninact >> 16;
+			target /= 2;
+			if (target > bkgrd_launder_max)
+				tcycle = target * VM_LAUNDER_INTERVAL /
+				    bkgrd_launder_max;
+			launder = target / (tcycle - (cycle % tcycle));
+		}
+
+launder:
+		if (launder > 0) {
+			laundered = vm_pageout_launder(domain, launder);
+			target -= min(laundered, target);
+		}
+
 		tsleep(&vm_cnt.v_laundry_count, PVM, "laundr",
 		    hz / VM_LAUNDER_INTERVAL);
-		vm_pageout_launder(domain);
+		cycle++;
 	}
 }
 

From owner-svn-src-user@freebsd.org  Mon May 23 06:13:37 2016
Return-Path: <owner-svn-src-user@freebsd.org>
Delivered-To: svn-src-user@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 05030B46FE7
 for <svn-src-user@mailman.ysv.freebsd.org>;
 Mon, 23 May 2016 06:13:37 +0000 (UTC)
 (envelope-from markj@FreeBSD.org)
Received: from repo.freebsd.org (repo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:0])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id D4AB11F84;
 Mon, 23 May 2016 06:13:36 +0000 (UTC)
 (envelope-from markj@FreeBSD.org)
Received: from repo.freebsd.org ([127.0.1.37])
 by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u4N6DaVs004176;
 Mon, 23 May 2016 06:13:36 GMT (envelope-from markj@FreeBSD.org)
Received: (from markj@localhost)
 by repo.freebsd.org (8.15.2/8.15.2/Submit) id u4N6DZa8004174;
 Mon, 23 May 2016 06:13:35 GMT (envelope-from markj@FreeBSD.org)
Message-Id: <201605230613.u4N6DZa8004174@repo.freebsd.org>
X-Authentication-Warning: repo.freebsd.org: markj set sender to
 markj@FreeBSD.org using -f
From: Mark Johnston <markj@FreeBSD.org>
Date: Mon, 23 May 2016 06:13:35 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
Subject: svn commit: r300477 - user/alc/PQ_LAUNDRY/sys/vm
X-SVN-Group: user
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
 src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user/>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 23 May 2016 06:13:37 -0000

Author: markj
Date: Mon May 23 06:13:35 2016
New Revision: 300477
URL: https://svnweb.freebsd.org/changeset/base/300477

Log:
  Run dirty pages through the inactive queue before the laundry queue.
  
  This change modifies the active queue aging scan to place dirty pages in
  the inactive queue rather than the laundry queue. vm_page_advise() is
  modified similarly.
  
  One side effect of this change is that dirty pages are given more time
  to be reactivated instead of being paged out. However, this is not its
  primary motivation. Pushing dirty pages through the inactive queue
  establishes a temporal relationship between the inactive and laundry
  queues and results in a more cohesive LRU page replacement mechanism. In
  the absence of this change, the pagedaemon and laundry threads have
  little information about each other's activity, and we can say little
  about the relative ages of the pages at the beginning of the inactive
  and laundry queues at a given point in time. However, in general we
  would prefer to avoid laundering a given page until some number of clean
  pages have been reclaimed in an attempt to satisfy a page shortage. The
  implemented laundering policy uses the ratio of dirty to clean inactive
  pages to set a minimum threshold for laundering, but without a shared
  queue, we cannot be satisfied that all less-recently-used clean pages
  have been reclaimed before deciding to launder a dirty page.
  
  A downside to this change is that the pagedaemons are forced to expend
  more CPU cycles handling dirty pages, as they must now examine dirty
  pages twice. However, this cost is small relative to that of a swap
  pageout. It may be reasonable to move vnode-backed pages directly to the
  laundry queue, but this change aims to minimize differences in behaviour
  with respect to HEAD.
  
  Reviewed by:	alc

Modified:
  user/alc/PQ_LAUNDRY/sys/vm/vm_page.c
  user/alc/PQ_LAUNDRY/sys/vm/vm_pageout.c

Modified: user/alc/PQ_LAUNDRY/sys/vm/vm_page.c
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/vm/vm_page.c	Mon May 23 06:04:38 2016	(r300476)
+++ user/alc/PQ_LAUNDRY/sys/vm/vm_page.c	Mon May 23 06:13:35 2016	(r300477)
@@ -3273,14 +3273,13 @@ vm_page_advise(vm_page_t m, int advice)
 		vm_page_dirty(m);
 
 	/*
-	 * Place clean pages at the head of the inactive queue rather than the
-	 * tail, thus defeating the queue's LRU operation and ensuring that the
-	 * page will be reused quickly.
+	 * Place clean pages near the head of the inactive queue rather than
+	 * the tail, thus defeating the queue's LRU operation and ensuring that
+	 * the page will be reused quickly.  Dirty pages are given a chance to
+	 * cycle once through the inactive queue before becoming eligible for
+	 * laundering.
 	 */
-	if (m->dirty == 0)
-		_vm_page_deactivate(m, TRUE);
-	else
-		vm_page_launder(m);
+	_vm_page_deactivate(m, m->dirty == 0);
 }
 
 /*

Modified: user/alc/PQ_LAUNDRY/sys/vm/vm_pageout.c
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/vm/vm_pageout.c	Mon May 23 06:04:38 2016	(r300476)
+++ user/alc/PQ_LAUNDRY/sys/vm/vm_pageout.c	Mon May 23 06:13:35 2016	(r300477)
@@ -1553,15 +1553,35 @@ drop_page:
 			/* Dequeue to avoid later lock recursion. */
 			vm_page_dequeue_locked(m);
 #if 0
+			/*
+			 * This requires the object write lock.  It might be a
+			 * good idea during a page shortage, but might also
+			 * cause contention with a concurrent attempt to launder
+			 * pages from this object.
+			 */
 			if (m->object->ref_count != 0)
 				vm_page_test_dirty(m);
 #endif
-			if (m->dirty == 0) {
+			/*
+			 * When not short for inactive pages, let dirty pages go
+			 * through the inactive queue before moving to the
+			 * laundry queues.  This gives them some extra time to
+			 * be reactivated, potentially avoiding an expensive
+			 * pageout.  During a page shortage, the inactive queue
+			 * is necessarily small, so we may move dirty pages
+			 * directly to the laundry queue.
+			 */
+			if (page_shortage <= 0)
 				vm_page_deactivate(m);
-				page_shortage -= act_scan_laundry_weight;
-			} else {
-				vm_page_launder(m);
-				page_shortage--;
+			else {
+				if (m->dirty == 0) {
+					vm_page_deactivate(m);
+					page_shortage -=
+					    act_scan_laundry_weight;
+				} else {
+					vm_page_launder(m);
+					page_shortage--;
+				}
 			}
 		} else
 			vm_page_requeue_locked(m);

From owner-svn-src-user@freebsd.org  Mon May 23 12:49:23 2016
Return-Path: <owner-svn-src-user@freebsd.org>
Delivered-To: svn-src-user@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 39004B462CB
 for <svn-src-user@mailman.ysv.freebsd.org>;
 Mon, 23 May 2016 12:49:23 +0000 (UTC)
 (envelope-from kostikbel@gmail.com)
Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1])
 (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id AFA5E19DF;
 Mon, 23 May 2016 12:49:22 +0000 (UTC)
 (envelope-from kostikbel@gmail.com)
Received: from tom.home (kib@localhost [127.0.0.1])
 by kib.kiev.ua (8.15.2/8.15.2) with ESMTPS id u4NCnDku009002
 (version=TLSv1 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO);
 Mon, 23 May 2016 15:49:13 +0300 (EEST)
 (envelope-from kostikbel@gmail.com)
DKIM-Filter: OpenDKIM Filter v2.10.3 kib.kiev.ua u4NCnDku009002
Received: (from kostik@localhost)
 by tom.home (8.15.2/8.15.2/Submit) id u4NCnDSd009001;
 Mon, 23 May 2016 15:49:13 +0300 (EEST)
 (envelope-from kostikbel@gmail.com)
X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com
 using -f
Date: Mon, 23 May 2016 15:49:13 +0300
From: Konstantin Belousov <kostikbel@gmail.com>
To: Mark Johnston <markj@FreeBSD.org>
Cc: src-committers@freebsd.org, svn-src-user@freebsd.org
Subject: Re: svn commit: r300465 - user/alc/PQ_LAUNDRY/sys/vm
Message-ID: <20160523124913.GU89104@kib.kiev.ua>
References: <201605230528.u4N5S34B088158@repo.freebsd.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <201605230528.u4N5S34B088158@repo.freebsd.org>
User-Agent: Mutt/1.6.1 (2016-04-27)
X-Spam-Status: No, score=-2.0 required=5.0 tests=ALL_TRUSTED,BAYES_00,
 DKIM_ADSP_CUSTOM_MED,FREEMAIL_FROM,NML_ADSP_CUSTOM_MED autolearn=no
 autolearn_force=no version=3.4.1
X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on tom.home
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
 src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user/>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 23 May 2016 12:49:23 -0000

On Mon, May 23, 2016 at 05:28:03AM +0000, Mark Johnston wrote:
> Author: markj
> Date: Mon May 23 05:28:03 2016
> New Revision: 300465
> URL: https://svnweb.freebsd.org/changeset/base/300465
> 
> Log:
>   Address over-eager OOM kills.
>   
>   Prior to this change, vm_page_free_wakeup() and thus vm_page_free() would
>   clear vm_pages_needed when the free page count is above v_free_min. If the
>   pagedaemon is starved for pages to reclaim because of a runaway process or
>   because all inactive pages are dirty, but other threads are occasionally
>   freeing pages, and v_free_min <= v_free_count <= vm_pageout_wakeup_thresh,
>   concurrent vm_page_free() and vm_page_alloc() calls will respectively clear
>   and set vm_pages_needed, waking up the pagedaemon in the process. This can
>   cause the domain's oom_seq value to increment very quickly, leading to a
>   spurious OOM kill when the pagedaemon cannot find clean pages to reclaim in
>   the time that it takes for some pages to be laundered.
>   
>   This can be triggered during multiple consecutive sysbench runs when it
>   writes mmap'ed files that are larger than system memory.
>   
>   Fix the problem by modifying vm_page_free_wakeup() to only clear
>   vm_pages_needed once v_free_count has risen above vm_pageout_wakeup_thresh.
>   
>   Reviewed by:	alc
> 
> Modified:
>   user/alc/PQ_LAUNDRY/sys/vm/vm_page.c
> 
> Modified: user/alc/PQ_LAUNDRY/sys/vm/vm_page.c
> ==============================================================================
> --- user/alc/PQ_LAUNDRY/sys/vm/vm_page.c	Mon May 23 05:28:02 2016	(r300464)
> +++ user/alc/PQ_LAUNDRY/sys/vm/vm_page.c	Mon May 23 05:28:03 2016	(r300465)
> @@ -2910,7 +2910,8 @@ vm_page_free_wakeup(void)
>  	 * lots of memory. this process will swapin processes.
>  	 */
>  	if (vm_pages_needed && !vm_page_count_min()) {
> -		vm_pages_needed = 0;
> +		if (!vm_paging_needed())
> +			vm_pages_needed = 0;
>  		wakeup(&vm_cnt.v_free_count);
>  	}
>  }

I looked at this change for some time after you referenced it.  Can this
occur on the stoxk HEAD ?  At least I do not see why it cannot, from the
description.

From owner-svn-src-user@freebsd.org  Mon May 23 17:37:36 2016
Return-Path: <owner-svn-src-user@freebsd.org>
Delivered-To: svn-src-user@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id B887EB47266
 for <svn-src-user@mailman.ysv.freebsd.org>;
 Mon, 23 May 2016 17:37:36 +0000 (UTC)
 (envelope-from markjdb@gmail.com)
Received: from mail-pa0-x232.google.com (mail-pa0-x232.google.com
 [IPv6:2607:f8b0:400e:c03::232])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (Client CN "smtp.gmail.com",
 Issuer "Google Internet Authority G2" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 8A49710CC;
 Mon, 23 May 2016 17:37:36 +0000 (UTC)
 (envelope-from markjdb@gmail.com)
Received: by mail-pa0-x232.google.com with SMTP id tb2so47706139pac.2;
 Mon, 23 May 2016 10:37:36 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
 h=sender:date:from:to:cc:subject:message-id:references:mime-version
 :content-disposition:in-reply-to:user-agent;
 bh=0qrNyK2oAyNdX2Wsyoo9hOgUqnAOU9lIUxRLxnLKPiM=;
 b=VC/j1wPwLUxgdOxe3SnfQNtcJEpoGToBADsYYegwgsd7Uk46TGclfdxA9zAN/clUyP
 6I6sfj+NZOjjLn+0x1jLzWQ6nccswZZV5C3SgkheoAVY/mET3jcegfis/59yL5SRoAsi
 TQ56m40PnIzOpsPRd6YcMpFGFunZkYU3VV8pYXIVpc4NSFa17lALq32KbyHuofYkoZ5Y
 HeQg2b3sd20DVfZiz0AgK6NRU8ziGxED8PjpCT8dKv4wvRmZe9nEG0+LlyopJgHzMM9I
 bU+mk2tv0R9g8qsENdha0f4o3B1Zht0eC8KyF1IuLbV+fQkBUxFP01B6J9rmyYY7Bmfn
 xEGQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20130820;
 h=x-gm-message-state:sender:date:from:to:cc:subject:message-id
 :references:mime-version:content-disposition:in-reply-to:user-agent;
 bh=0qrNyK2oAyNdX2Wsyoo9hOgUqnAOU9lIUxRLxnLKPiM=;
 b=lC4ZuDtI1oLXyEoiEDkeeVqSj00RVrZssgbIlwolu/ZwtMQF3evW4ptnLc5t88W4Jd
 HBrOWyvZORVaEbZ65P8Sew9vill8q6PYnjGfLiEPvO8Ev9MGgwmD/7oLm2ICxSPQxRzT
 fkjnOMlDnun/w6uflcRpQ/vGakJtt96lL5ENzqbR4R6mRhwvH6zN3TI1g8HVoNdskq3R
 HZ+fCnb8jXXBqrDu+67s2dwaFJS3ILYvN0UuGnxN6PdOd/s5vDAEhbI6hignB3X0UOWG
 60FNrqnrcHP9ADeHVXgNkJ3lMIXI8+iNSkUIVOoV3MkHoL7RSd4clhZOSyKPqbMOGSP4
 LLvw==
X-Gm-Message-State: ALyK8tIcI/JUSHg9I4tAKpzDsmL97rJmFtMw1VlUVNXd0dAZqF+3FwYBaXRqfSm+fvzOOg==
X-Received: by 10.66.82.8 with SMTP id e8mr58794pay.124.1464025055405;
 Mon, 23 May 2016 10:37:35 -0700 (PDT)
Received: from wkstn-mjohnston.west.isilon.com
 (c-76-104-201-218.hsd1.wa.comcast.net. [76.104.201.218])
 by smtp.gmail.com with ESMTPSA id lz5sm48239627pab.34.2016.05.23.10.37.34
 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
 Mon, 23 May 2016 10:37:34 -0700 (PDT)
Sender: Mark Johnston <markjdb@gmail.com>
Date: Mon, 23 May 2016 10:40:46 -0700
From: Mark Johnston <markj@FreeBSD.org>
To: Konstantin Belousov <kostikbel@gmail.com>
Cc: src-committers@freebsd.org, svn-src-user@freebsd.org
Subject: Re: svn commit: r300465 - user/alc/PQ_LAUNDRY/sys/vm
Message-ID: <20160523174046.GB51657@wkstn-mjohnston.west.isilon.com>
References: <201605230528.u4N5S34B088158@repo.freebsd.org>
 <20160523124913.GU89104@kib.kiev.ua>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20160523124913.GU89104@kib.kiev.ua>
User-Agent: Mutt/1.6.1 (2016-04-27)
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
 src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user/>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 23 May 2016 17:37:36 -0000

On Mon, May 23, 2016 at 03:49:13PM +0300, Konstantin Belousov wrote:
> On Mon, May 23, 2016 at 05:28:03AM +0000, Mark Johnston wrote:
> > Author: markj
> > Date: Mon May 23 05:28:03 2016
> > New Revision: 300465
> > URL: https://svnweb.freebsd.org/changeset/base/300465
> > 
> > Log:
> >   Address over-eager OOM kills.
> >   
> >   Prior to this change, vm_page_free_wakeup() and thus vm_page_free() would
> >   clear vm_pages_needed when the free page count is above v_free_min. If the
> >   pagedaemon is starved for pages to reclaim because of a runaway process or
> >   because all inactive pages are dirty, but other threads are occasionally
> >   freeing pages, and v_free_min <= v_free_count <= vm_pageout_wakeup_thresh,
> >   concurrent vm_page_free() and vm_page_alloc() calls will respectively clear
> >   and set vm_pages_needed, waking up the pagedaemon in the process. This can
> >   cause the domain's oom_seq value to increment very quickly, leading to a
> >   spurious OOM kill when the pagedaemon cannot find clean pages to reclaim in
> >   the time that it takes for some pages to be laundered.
> >   
> >   This can be triggered during multiple consecutive sysbench runs when it
> >   writes mmap'ed files that are larger than system memory.
> >   
> >   Fix the problem by modifying vm_page_free_wakeup() to only clear
> >   vm_pages_needed once v_free_count has risen above vm_pageout_wakeup_thresh.
> >   
> >   Reviewed by:	alc
> > 
> > Modified:
> >   user/alc/PQ_LAUNDRY/sys/vm/vm_page.c
> > 
> > Modified: user/alc/PQ_LAUNDRY/sys/vm/vm_page.c
> > ==============================================================================
> > --- user/alc/PQ_LAUNDRY/sys/vm/vm_page.c	Mon May 23 05:28:02 2016	(r300464)
> > +++ user/alc/PQ_LAUNDRY/sys/vm/vm_page.c	Mon May 23 05:28:03 2016	(r300465)
> > @@ -2910,7 +2910,8 @@ vm_page_free_wakeup(void)
> >  	 * lots of memory. this process will swapin processes.
> >  	 */
> >  	if (vm_pages_needed && !vm_page_count_min()) {
> > -		vm_pages_needed = 0;
> > +		if (!vm_paging_needed())
> > +			vm_pages_needed = 0;
> >  		wakeup(&vm_cnt.v_free_count);
> >  	}
> >  }
> 
> I looked at this change for some time after you referenced it.  Can this
> occur on the stoxk HEAD ?  At least I do not see why it cannot, from the
> description.

I agree - in principle this problem exists in HEAD as well. I haven't
been able to trigger the spurious OOM kills there, but I also haven't
spent much time trying to do so, and my test case will occasionally
result in a low-memory deadlock on HEAD instead.

In my test case, the pagedaemon would block while laundering pages
(since the vnode pager's putpages operation is synchronous when memory
is low), so I suspect that it is generally able to launder and free some
pages before hitting the oom_seq threshold.

From owner-svn-src-user@freebsd.org  Wed May 25 10:02:15 2016
Return-Path: <owner-svn-src-user@freebsd.org>
Delivered-To: svn-src-user@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id E849FB49B29
 for <svn-src-user@mailman.ysv.freebsd.org>;
 Wed, 25 May 2016 10:02:15 +0000 (UTC) (envelope-from pho@FreeBSD.org)
Received: from repo.freebsd.org (repo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:0])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id AA2451C46;
 Wed, 25 May 2016 10:02:15 +0000 (UTC) (envelope-from pho@FreeBSD.org)
Received: from repo.freebsd.org ([127.0.1.37])
 by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u4PA2Eqk072993;
 Wed, 25 May 2016 10:02:14 GMT (envelope-from pho@FreeBSD.org)
Received: (from pho@localhost)
 by repo.freebsd.org (8.15.2/8.15.2/Submit) id u4PA2EnN072992;
 Wed, 25 May 2016 10:02:14 GMT (envelope-from pho@FreeBSD.org)
Message-Id: <201605251002.u4PA2EnN072992@repo.freebsd.org>
X-Authentication-Warning: repo.freebsd.org: pho set sender to pho@FreeBSD.org
 using -f
From: Peter Holm <pho@FreeBSD.org>
Date: Wed, 25 May 2016 10:02:14 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
Subject: svn commit: r300672 - user/pho/stress2/misc
X-SVN-Group: user
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
 src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user/>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 25 May 2016 10:02:16 -0000

Author: pho
Date: Wed May 25 10:02:14 2016
New Revision: 300672
URL: https://svnweb.freebsd.org/changeset/base/300672

Log:
  sendmsg(2) fuzz test scenario added.
  
  PR:		 209748
  Sponsored by:	EMC / Isilon Storage Division

Added:
  user/pho/stress2/misc/sendmsg.sh   (contents, props changed)

Added: user/pho/stress2/misc/sendmsg.sh
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/pho/stress2/misc/sendmsg.sh	Wed May 25 10:02:14 2016	(r300672)
@@ -0,0 +1,226 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2016 EMC Corp.
+# 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$
+#
+
+# sendmsg(2) fuzz test.
+
+# Looping test program seen:
+# https://people.freebsd.org/~pho/stress/log/sendmsg.txt
+
+. ../default.cfg
+
+dir=/tmp
+odir=`pwd`
+cd $dir
+sed '1,/^EOF/d' < $odir/$0 > $dir/sendmsg.c
+mycc -o sendmsg -Wall -Wextra -O0 -g sendmsg.c || exit 1
+rm -f sendmsg.c
+cd $odir
+
+daemon sh -c "(cd ../testcases/swap; ./swap -t 5m -i 20 -k -h)" > /dev/null
+sleep 2
+
+/tmp/sendmsg 2>/dev/null
+
+while pgrep -q swap; do
+	pkill -9 swap
+done
+rm -f /tmp/sendmsg sendmsg.core
+
+n=0
+while pgrep -q sendmsg; do
+	pkill -9 sendmsg
+	n=$((n + 1))
+	[ $n -gt 20 ] && { echo "Looping sendmsg"; exit 1; }
+	sleep 1
+done
+exit 0
+
+EOF
+#include <sys/param.h>
+#include <sys/mman.h>
+#include <sys/socket.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+
+#include <machine/atomic.h>
+
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+
+volatile u_int *share;
+
+#define PARALLEL 16
+#define RUNTIME (5 * 60)
+#define SYNC 0
+
+int
+setflag(void)
+{
+	int flag, i;
+
+	i = arc4random() % 100;
+
+	if (i < 33)
+		flag = 0;
+	else if (i >= 33 && i < 66)
+		flag = 2 <<  (arc4random() % 9);
+	else
+		flag = arc4random();
+
+	return(flag);
+}
+
+void
+corrupt(unsigned char *buf, int len)
+{
+	unsigned char byte, mask;
+	int bit, i;
+
+	i = arc4random() % len;
+	byte = buf[i];
+	bit = arc4random() % 8;
+	mask = ~(1 << bit);
+	byte = (byte & mask) | (~byte & ~mask);
+	buf[i] = byte;
+}
+
+/*
+   Based on https://www.win.tue.nl/~aeb/linux/lk/sendfd.c
+ */
+void
+test(void)
+{
+	struct cmsghdr *cmsg;
+	struct msghdr msg;
+	pid_t pid;
+	int fd, flag, n, pair[2];
+	char buf[1024];
+	char fdbuf[CMSG_SPACE(sizeof(int))];
+
+	/* dummy */
+	struct iovec vec;
+	char ch = '\0';
+
+	atomic_add_int(&share[SYNC], 1);
+	while (share[SYNC] != PARALLEL)
+		;
+
+	memset(&msg, 0, sizeof(msg));
+
+	/* having zero msg_iovlen or iov_len doesnt seem to work */
+	vec.iov_base = &ch;
+	vec.iov_len = 1;
+	msg.msg_iov = &vec;
+	msg.msg_iovlen = 1;
+
+	msg.msg_control = fdbuf;
+	msg.msg_controllen = CMSG_LEN(sizeof(int));
+	cmsg = CMSG_FIRSTHDR(&msg);
+	cmsg->cmsg_len = CMSG_LEN(sizeof(int));
+
+	if (socketpair(AF_UNIX, SOCK_STREAM, 0, pair))
+		err(1, "socketpair");
+
+	if ((pid = fork()) == -1)
+		err(1, "fork");
+
+	if (pid == 0) {	
+		fd = open("/etc/passwd", O_RDONLY);
+		if (fd < 0)
+			err(1, "/etc/passwd");
+#if defined(DEBUG)
+		printf("child: sending fd=%d for /etc/passwd\n", fd);
+#endif
+
+		cmsg->cmsg_level = SOL_SOCKET;
+		cmsg->cmsg_type = SCM_RIGHTS;
+		*(int *)CMSG_DATA(cmsg) = fd;
+		flag = setflag();
+		if (arc4random() % 2 == 0)
+			corrupt((unsigned char *)&msg, sizeof(msg));
+		else
+			corrupt((unsigned char *)&cmsg, sizeof(cmsg));
+		if (sendmsg(pair[0], &msg, flag) < 0)
+			err(1, "sendmsg");
+		_exit(0);
+	}
+	alarm(2);
+	if (recvmsg(pair[1], &msg, 0) < 0)
+		err(1, "recvmsg");
+	if (cmsg->cmsg_type != SCM_RIGHTS)
+		err(1, "didnt get a fd?\n");
+	fd = *(int *)CMSG_DATA(cmsg);
+#if defined(DEBUG)
+	printf("parent: received fd=%d\n", fd);
+#endif
+	n = read(fd, buf, sizeof(buf));
+	if (n < 0)
+		err(1, "read");
+	if (n != sizeof(buf))
+		printf("read %d bytes\n", n);
+	wait(NULL);
+
+	_exit(0);
+}
+
+int
+main(void)
+{
+	size_t len;
+	time_t start;
+	int e, i, pids[PARALLEL], status;
+
+	e = 0;
+	len = PAGE_SIZE;
+	if ((share = mmap(NULL, len, PROT_READ | PROT_WRITE,
+	    MAP_ANON | MAP_SHARED, -1, 0)) == MAP_FAILED)
+		err(1, "mmap");
+
+	start = time(NULL);
+	while ((time(NULL) - start) < RUNTIME) {
+		share[SYNC] = 0;
+		for (i = 0; i < PARALLEL; i++) {
+			if ((pids[i] = fork()) == 0)
+				test();
+		}
+		for (i = 0; i < PARALLEL; i++) {
+			waitpid(pids[i], &status, 0);
+			e += status == 0 ? 0 : 1;
+		}
+	}
+
+	return (e);
+}

From owner-svn-src-user@freebsd.org  Thu May 26 08:28:12 2016
Return-Path: <owner-svn-src-user@freebsd.org>
Delivered-To: svn-src-user@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 13229B4B418
 for <svn-src-user@mailman.ysv.freebsd.org>;
 Thu, 26 May 2016 08:28:12 +0000 (UTC) (envelope-from pho@FreeBSD.org)
Received: from repo.freebsd.org (repo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:0])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id D57341329;
 Thu, 26 May 2016 08:28:11 +0000 (UTC) (envelope-from pho@FreeBSD.org)
Received: from repo.freebsd.org ([127.0.1.37])
 by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u4Q8SBUU039436;
 Thu, 26 May 2016 08:28:11 GMT (envelope-from pho@FreeBSD.org)
Received: (from pho@localhost)
 by repo.freebsd.org (8.15.2/8.15.2/Submit) id u4Q8SBu6039435;
 Thu, 26 May 2016 08:28:11 GMT (envelope-from pho@FreeBSD.org)
Message-Id: <201605260828.u4Q8SBu6039435@repo.freebsd.org>
X-Authentication-Warning: repo.freebsd.org: pho set sender to pho@FreeBSD.org
 using -f
From: Peter Holm <pho@FreeBSD.org>
Date: Thu, 26 May 2016 08:28:10 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
Subject: svn commit: r300716 - user/pho/stress2/misc
X-SVN-Group: user
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
 src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user/>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 26 May 2016 08:28:12 -0000

Author: pho
Date: Thu May 26 08:28:10 2016
New Revision: 300716
URL: https://svnweb.freebsd.org/changeset/base/300716

Log:
  Note that "SIGABRT" is to be expected. Remove redundant rm(1).
  
  Sponsored by:	EMC / Isilon Storage Division

Modified:
  user/pho/stress2/misc/pthread6.sh

Modified: user/pho/stress2/misc/pthread6.sh
==============================================================================
--- user/pho/stress2/misc/pthread6.sh	Thu May 26 07:20:33 2016	(r300715)
+++ user/pho/stress2/misc/pthread6.sh	Thu May 26 08:28:10 2016	(r300716)
@@ -38,10 +38,10 @@ cd /tmp
 sed '1,/^EOF/d' < $here/$0 > pthread6.c
 mycc -o pthread6 -Wall -Wextra -O2 -g -gdwarf-2 pthread6.c -lpthread || exit 1
 rm -f pthread6.c /tmp/pthread6.core
-rm -f /tmp/pthread6.core
 
 daemon sh -c "(cd $here/../testcases/swap; ./swap -t 2m -i 20 -k)"
 sleep `jot -r 1 1 9`
+echo "Expect SIGABRT"
 for i in `jot 50`; do
 	/tmp/pthread6
 done

From owner-svn-src-user@freebsd.org  Thu May 26 08:31:10 2016
Return-Path: <owner-svn-src-user@freebsd.org>
Delivered-To: svn-src-user@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 56699B4B53B
 for <svn-src-user@mailman.ysv.freebsd.org>;
 Thu, 26 May 2016 08:31:10 +0000 (UTC) (envelope-from pho@FreeBSD.org)
Received: from repo.freebsd.org (repo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:0])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 297A51756;
 Thu, 26 May 2016 08:31:10 +0000 (UTC) (envelope-from pho@FreeBSD.org)
Received: from repo.freebsd.org ([127.0.1.37])
 by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u4Q8V92h039771;
 Thu, 26 May 2016 08:31:09 GMT (envelope-from pho@FreeBSD.org)
Received: (from pho@localhost)
 by repo.freebsd.org (8.15.2/8.15.2/Submit) id u4Q8V967039770;
 Thu, 26 May 2016 08:31:09 GMT (envelope-from pho@FreeBSD.org)
Message-Id: <201605260831.u4Q8V967039770@repo.freebsd.org>
X-Authentication-Warning: repo.freebsd.org: pho set sender to pho@FreeBSD.org
 using -f
From: Peter Holm <pho@FreeBSD.org>
Date: Thu, 26 May 2016 08:31:09 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
Subject: svn commit: r300717 - user/pho/stress2/misc
X-SVN-Group: user
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
 src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user/>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 26 May 2016 08:31:10 -0000

Author: pho
Date: Thu May 26 08:31:09 2016
New Revision: 300717
URL: https://svnweb.freebsd.org/changeset/base/300717

Log:
  Added comment about problem found.
  
  Sponsored by:	EMC / Isilon Storage Division

Modified:
  user/pho/stress2/misc/core3.sh

Modified: user/pho/stress2/misc/core3.sh
==============================================================================
--- user/pho/stress2/misc/core3.sh	Thu May 26 08:28:10 2016	(r300716)
+++ user/pho/stress2/misc/core3.sh	Thu May 26 08:31:09 2016	(r300717)
@@ -34,6 +34,9 @@
 # Fixed by r272535.
 # On i386 pgrep(1) loops. Fixed by r272566.
 
+# "Sleeping on "pmapdi" with the following non-sleepable locks held:"
+# https://people.freebsd.org/~pho/stress/log/kostik883.txt
+
 . ../default.cfg
 
 odir=`pwd`

From owner-svn-src-user@freebsd.org  Thu May 26 18:37:53 2016
Return-Path: <owner-svn-src-user@freebsd.org>
Delivered-To: svn-src-user@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1899BB4BE89
 for <svn-src-user@mailman.ysv.freebsd.org>;
 Thu, 26 May 2016 18:37:53 +0000 (UTC) (envelope-from gjb@FreeBSD.org)
Received: from repo.freebsd.org (repo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:0])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id DA74617E1;
 Thu, 26 May 2016 18:37:52 +0000 (UTC) (envelope-from gjb@FreeBSD.org)
Received: from repo.freebsd.org ([127.0.1.37])
 by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u4QIbqZ1066822;
 Thu, 26 May 2016 18:37:52 GMT (envelope-from gjb@FreeBSD.org)
Received: (from gjb@localhost)
 by repo.freebsd.org (8.15.2/8.15.2/Submit) id u4QIbqxQ066821;
 Thu, 26 May 2016 18:37:52 GMT (envelope-from gjb@FreeBSD.org)
Message-Id: <201605261837.u4QIbqxQ066821@repo.freebsd.org>
X-Authentication-Warning: repo.freebsd.org: gjb set sender to gjb@FreeBSD.org
 using -f
From: Glen Barber <gjb@FreeBSD.org>
Date: Thu, 26 May 2016 18:37:52 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
Subject: svn commit: r300765 - user/gjb/thermite
X-SVN-Group: user
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
 src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user/>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 26 May 2016 18:37:53 -0000

Author: gjb
Date: Thu May 26 18:37:51 2016
New Revision: 300765
URL: https://svnweb.freebsd.org/changeset/base/300765

Log:
  Resync from upstream:
  
  - Remove the pkgbase bits.
  
  - Disconnect upload_azure_image(), as FreeBSD on Azure has
    been taken over by Microsoft.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  user/gjb/thermite/thermite.sh

Modified: user/gjb/thermite/thermite.sh
==============================================================================
--- user/gjb/thermite/thermite.sh	Thu May 26 18:35:37 2016	(r300764)
+++ user/gjb/thermite/thermite.sh	Thu May 26 18:37:51 2016	(r300765)
@@ -282,12 +282,6 @@ ftp_stage() {
 			_type="snapshots"
 			;;
 	esac
-	if [ ! -z "${TURNITUPTOELEVEN}" ]; then
-		chroot ${CHROOTDIR} make -C /usr/src \
-			TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
-			KERNCONF=${KERNEL} \
-			packages >> ${logdir}/${_build}.log 2>&1
-	fi
 
 	mkdir -p "${ftpdir}/${_type}"
 	rsync -avH ${CHROOTDIR}/R/ftp-stage/${_type}/* \
@@ -550,12 +544,10 @@ main() {
 	runall build_chroots
 	runall install_chroots
 	runall build_release
-	if [ -z "${TURNITUPTOELEVEN}" ]; then
-		runall upload_ec2_ami
-		runall upload_azure_image
-		runall upload_gce_image
-		runall upload_vagrant_image
-	fi
+	runall upload_ec2_ami
+	#runall upload_azure_image
+	runall upload_gce_image
+	runall upload_vagrant_image
 }
 
 main "$@"

From owner-svn-src-user@freebsd.org  Thu May 26 18:39:20 2016
Return-Path: <owner-svn-src-user@freebsd.org>
Delivered-To: svn-src-user@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3DF6CB4BEAB
 for <svn-src-user@mailman.ysv.freebsd.org>;
 Thu, 26 May 2016 18:39:20 +0000 (UTC) (envelope-from gjb@FreeBSD.org)
Received: from repo.freebsd.org (repo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:0])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id EA8BE1988;
 Thu, 26 May 2016 18:39:19 +0000 (UTC) (envelope-from gjb@FreeBSD.org)
Received: from repo.freebsd.org ([127.0.1.37])
 by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u4QIdJYK066918;
 Thu, 26 May 2016 18:39:19 GMT (envelope-from gjb@FreeBSD.org)
Received: (from gjb@localhost)
 by repo.freebsd.org (8.15.2/8.15.2/Submit) id u4QIdJob066917;
 Thu, 26 May 2016 18:39:19 GMT (envelope-from gjb@FreeBSD.org)
Message-Id: <201605261839.u4QIdJob066917@repo.freebsd.org>
X-Authentication-Warning: repo.freebsd.org: gjb set sender to gjb@FreeBSD.org
 using -f
From: Glen Barber <gjb@FreeBSD.org>
Date: Thu, 26 May 2016 18:39:19 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
Subject: svn commit: r300766 - user/gjb/thermite-v2
X-SVN-Group: user
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
 src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user/>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 26 May 2016 18:39:20 -0000

Author: gjb
Date: Thu May 26 18:39:18 2016
New Revision: 300766
URL: https://svnweb.freebsd.org/changeset/base/300766

Log:
  Remove user/gjb/thermite-v2, which was intended for packaged base, which
  will not be ready for 11.0-RELEASE.
  
  Sponsored by:	The FreeBSD Foundation

Deleted:
  user/gjb/thermite-v2/

From owner-svn-src-user@freebsd.org  Sat May 28 18:28:29 2016
Return-Path: <owner-svn-src-user@freebsd.org>
Delivered-To: svn-src-user@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 61622B4E88E
 for <svn-src-user@mailman.ysv.freebsd.org>;
 Sat, 28 May 2016 18:28:29 +0000 (UTC) (envelope-from des@FreeBSD.org)
Received: from repo.freebsd.org (repo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:0])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 326321E59;
 Sat, 28 May 2016 18:28:29 +0000 (UTC) (envelope-from des@FreeBSD.org)
Received: from repo.freebsd.org ([127.0.1.37])
 by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u4SISSY6034629;
 Sat, 28 May 2016 18:28:28 GMT (envelope-from des@FreeBSD.org)
Received: (from des@localhost)
 by repo.freebsd.org (8.15.2/8.15.2/Submit) id u4SISS4d034628;
 Sat, 28 May 2016 18:28:28 GMT (envelope-from des@FreeBSD.org)
Message-Id: <201605281828.u4SISS4d034628@repo.freebsd.org>
X-Authentication-Warning: repo.freebsd.org: des set sender to des@FreeBSD.org
 using -f
From: =?UTF-8?Q?Dag-Erling_Sm=c3=b8rgrav?= <des@FreeBSD.org>
Date: Sat, 28 May 2016 18:28:28 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
Subject: svn commit: r300907 - user/des/fbce/lib/FBCE/Script
X-SVN-Group: user
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
 src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user/>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sat, 28 May 2016 18:28:29 -0000

Author: des
Date: Sat May 28 18:28:28 2016
New Revision: 300907
URL: https://svnweb.freebsd.org/changeset/base/300907

Log:
  Include incumbent status in the output of the list command.

Modified:
  user/des/fbce/lib/FBCE/Script/User.pm

Modified: user/des/fbce/lib/FBCE/Script/User.pm
==============================================================================
--- user/des/fbce/lib/FBCE/Script/User.pm	Sat May 28 17:43:40 2016	(r300906)
+++ user/des/fbce/lib/FBCE/Script/User.pm	Sat May 28 18:28:28 2016	(r300907)
@@ -133,14 +133,16 @@ sub cmd_list($@) {
 	if @argv;
     my $persons = FBCE->model('FBCE::Person')->
 	search(undef, { order_by => 'login' });
-    printf("%-16s%-8s%-8s%s\n",
+    printf("%-16s%-8s%-8s%-8s%s\n",
 	   'login',
-	   'active',
-	   'admin',
+	   'inc',
+	   'act',
+	   'adm',
 	   'name');
     foreach my $person ($persons->all()) {
-	printf("%-16s%-8s%-8s%s\n",
+	printf("%-16s%-8s%-8s%-8s%s\n",
 	       $person->login,
+	       $person->incumbent ? 'yes' : 'no',
 	       $person->active ? 'yes' : 'no',
 	       $person->admin ? 'yes' : 'no',
 	       $person->name);

From owner-svn-src-user@freebsd.org  Sat May 28 18:44:53 2016
Return-Path: <owner-svn-src-user@freebsd.org>
Delivered-To: svn-src-user@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 70579B4ECAE
 for <svn-src-user@mailman.ysv.freebsd.org>;
 Sat, 28 May 2016 18:44:53 +0000 (UTC) (envelope-from des@FreeBSD.org)
Received: from repo.freebsd.org (repo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:0])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 3CA681AA1;
 Sat, 28 May 2016 18:44:53 +0000 (UTC) (envelope-from des@FreeBSD.org)
Received: from repo.freebsd.org ([127.0.1.37])
 by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u4SIiqCu042187;
 Sat, 28 May 2016 18:44:52 GMT (envelope-from des@FreeBSD.org)
Received: (from des@localhost)
 by repo.freebsd.org (8.15.2/8.15.2/Submit) id u4SIiqFt042186;
 Sat, 28 May 2016 18:44:52 GMT (envelope-from des@FreeBSD.org)
Message-Id: <201605281844.u4SIiqFt042186@repo.freebsd.org>
X-Authentication-Warning: repo.freebsd.org: des set sender to des@FreeBSD.org
 using -f
From: =?UTF-8?Q?Dag-Erling_Sm=c3=b8rgrav?= <des@FreeBSD.org>
Date: Sat, 28 May 2016 18:44:52 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
Subject: svn commit: r300908 - user/des/fbce/lib/FBCE/Script
X-SVN-Group: user
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
 src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user/>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sat, 28 May 2016 18:44:53 -0000

Author: des
Date: Sat May 28 18:44:52 2016
New Revision: 300908
URL: https://svnweb.freebsd.org/changeset/base/300908

Log:
  Rename the file and tarball options.  Add author and license.

Modified:
  user/des/fbce/lib/FBCE/Script/User.pm

Modified: user/des/fbce/lib/FBCE/Script/User.pm
==============================================================================
--- user/des/fbce/lib/FBCE/Script/User.pm	Sat May 28 18:28:28 2016	(r300907)
+++ user/des/fbce/lib/FBCE/Script/User.pm	Sat May 28 18:44:52 2016	(r300908)
@@ -26,7 +26,7 @@ has dryrun => (
     documentation => q{Dry run},
 );
 
-has tarball => (
+has pwtarball => (
     traits	  => [qw(Getopt)],
     cmd_aliases	  => 't',
     isa		  => Str,
@@ -35,7 +35,7 @@ has tarball => (
     default       => 'fbce-passwords.tgz',
 );
 
-has file => (
+has pwfile => (
     traits	  => [qw(Getopt)],
     cmd_aliases	  => 'f',
     isa		  => Str,
@@ -305,10 +305,10 @@ sub cmd_pwgen($@) {
 	if @argv;
 
     # Please don't overwrite an existing password tarball!
-    my $tarball = $self->tarball;
+    my $tarball = $self->pwtarball;
     die("$tarball exists, delete or move and try again\n")
 	if -e $tarball;
-    my $pwfile = $self->file;
+    my $pwfile = $self->pwfile;
 
     # Generate enough passwords for everybody
     my $persons = FBCE->model('FBCE::Person')->
@@ -375,3 +375,14 @@ __PACKAGE__->meta->make_immutable;
 1;
 
 # $FreeBSD$
+
+=head1 AUTHOR
+
+Dag-Erling Smørgrav
+
+=head1 LICENSE
+
+This library is free software. You can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut

From owner-svn-src-user@freebsd.org  Sat May 28 18:47:26 2016
Return-Path: <owner-svn-src-user@freebsd.org>
Delivered-To: svn-src-user@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id EAA0FB4ED06
 for <svn-src-user@mailman.ysv.freebsd.org>;
 Sat, 28 May 2016 18:47:26 +0000 (UTC) (envelope-from des@FreeBSD.org)
Received: from repo.freebsd.org (repo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:0])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id C27401BF5;
 Sat, 28 May 2016 18:47:26 +0000 (UTC) (envelope-from des@FreeBSD.org)
Received: from repo.freebsd.org ([127.0.1.37])
 by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u4SIlPrT042325;
 Sat, 28 May 2016 18:47:25 GMT (envelope-from des@FreeBSD.org)
Received: (from des@localhost)
 by repo.freebsd.org (8.15.2/8.15.2/Submit) id u4SIlPoK042324;
 Sat, 28 May 2016 18:47:25 GMT (envelope-from des@FreeBSD.org)
Message-Id: <201605281847.u4SIlPoK042324@repo.freebsd.org>
X-Authentication-Warning: repo.freebsd.org: des set sender to des@FreeBSD.org
 using -f
From: =?UTF-8?Q?Dag-Erling_Sm=c3=b8rgrav?= <des@FreeBSD.org>
Date: Sat, 28 May 2016 18:47:25 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
Subject: svn commit: r300909 - user/des/fbce/script
X-SVN-Group: user
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
 src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user/>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sat, 28 May 2016 18:47:27 -0000

Author: des
Date: Sat May 28 18:47:25 2016
New Revision: 300909
URL: https://svnweb.freebsd.org/changeset/base/300909

Log:
  Add POD.

Modified:
  user/des/fbce/script/fbce_user.pl

Modified: user/des/fbce/script/fbce_user.pl
==============================================================================
--- user/des/fbce/script/fbce_user.pl	Sat May 28 18:44:52 2016	(r300908)
+++ user/des/fbce/script/fbce_user.pl	Sat May 28 18:47:25 2016	(r300909)
@@ -6,3 +6,126 @@ Catalyst::ScriptRunner->run('FBCE', 'Use
 1;
 
 # $FreeBSD$
+
+=encoding utf8
+
+=head1 NAME
+
+fbce_user.pl - Manage FBCE Users
+
+=head1 SYNOPSIS
+
+fbce_user.pl [options] command [arguments]
+
+ Options:
+   --debug        print additional information while working
+   --dryrun       don't actually do anything
+   --pwfile       name of password file for pwgen command
+   --pwtarball    name of password tarball for pwgen command
+   --help         show this message and exit
+
+ Commands:
+
+   list           list existing users
+   import         import new users
+   gecos          set real name for listed user(s)
+   pwgen          generate passwords
+   smash          clear active and incumbent bit for all users
+   activate	  set active bit for listed user(s)
+   deactivate	  clear active bit for listed user(s)
+   incumbent      set incumbent bit for listed user(s)
+
+=head1 DESCRIPTION
+
+The B<fbce_user> script is used to manage users in the FBCE system.
+The following commands are available:
+
+=over
+
+=item B<list>
+
+List all users.  Prints one line per user with their login, active
+status, admin status and name as recorded in the database.
+
+=item B<import> [I<file> ...]
+
+Import users.  If the input includes the users' names, those will be
+imported too; otherwise, their names will be set equal to their login
+names.
+
+=item B<gecos> [I<file> ...]
+
+Set the specified users' names to those indicated in the input.  Note
+that if the input includes lines where no name is specified, those
+users' names will be reset to their login.
+
+=item B<pwgen>
+
+Generate passwords for users that don't already have one.  This
+command will also generate a tarball containing individual files for
+each user, containing that user's password, in a subdirectory bearing
+the user's name.  Each file's owner and group will be set equal to the
+corresponding user's login.
+
+=item B<smash>
+
+Clear all users' active and incumbent bits.
+
+=item B<activate> [I<file> ...]
+
+Mark the specified users as active, allowing them to run and vote in
+the election.
+
+=item B<deactivate> [I<file> ...]
+
+Mark the specified users as inactive, preventing them from running or
+voting in the election.
+
+=item B<incumbent> [I<file> ...]
+
+Mark the specified users as incumbents so they are listed as such in
+the list of candidates presented to voters.
+
+=back
+
+=head2 Input Format
+
+All commands that operate on a list of users, rather than on the
+entire user base, expect that list to be provided either on stdin or
+in files listed on the command line.  Each line in the input must be
+in one of the following formats:
+
+=over
+
+=item *
+
+login only (any leading or trailing whitespace is ignored)
+
+=item *
+
+login and real name separated by whitespace (any leading or trailing
+whitespace is ignored)
+
+=item *
+
+Unix v7 (seven-field) passwd format
+
+=item *
+
+BSD (ten-field) passwd format
+
+=back
+
+Any input which B<fbce_user> doesn't understand will simply be
+ignored.
+
+=head1 AUTHORS
+
+Dag-Erling Smørgrav <des@FreeBSD.org>
+
+=head1 COPYRIGHT
+
+This library is free software. You can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut