svn commit: r352817 - in projects/nfsv42/sys: amd64/amd64 amd64/linux amd64/linux32 amd64/sgx amd64/vmm arm/arm arm/freescale/imx arm/nvidia/drm2 arm/ti arm/ti/am335x arm64/arm64 arm64/conf arm64/i...

Rick Macklem rmacklem at FreeBSD.org
Fri Sep 27 20:09:48 UTC 2019


Author: rmacklem
Date: Fri Sep 27 20:09:43 2019
New Revision: 352817
URL: https://svnweb.freebsd.org/changeset/base/352817

Log:
  Merge in an up to date kernel from head.

Added:
  projects/nfsv42/sys/arm64/intel/
     - copied from r352815, head/sys/arm64/intel/
  projects/nfsv42/sys/arm64/linux/linux_genassym.c
     - copied unchanged from r352815, head/sys/arm64/linux/linux_genassym.c
  projects/nfsv42/sys/dev/hwpmc/hwpmc_beri.c
     - copied unchanged from r352815, head/sys/dev/hwpmc/hwpmc_beri.c
  projects/nfsv42/sys/dev/hwpmc/hwpmc_beri.h
     - copied unchanged from r352815, head/sys/dev/hwpmc/hwpmc_beri.h
  projects/nfsv42/sys/dev/nvdimm/nvdimm_acpi.c
     - copied unchanged from r352815, head/sys/dev/nvdimm/nvdimm_acpi.c
  projects/nfsv42/sys/dev/psci/smccc_arm.S
     - copied unchanged from r352815, head/sys/dev/psci/smccc_arm.S
  projects/nfsv42/sys/dev/psci/smccc_arm64.S
     - copied unchanged from r352815, head/sys/dev/psci/smccc_arm64.S
  projects/nfsv42/sys/kern/subr_filter.c
     - copied unchanged from r352815, head/sys/kern/subr_filter.c
  projects/nfsv42/sys/modules/opal_nvram/
     - copied from r352815, head/sys/modules/opal_nvram/
  projects/nfsv42/sys/modules/tcp/bbr/
     - copied from r352815, head/sys/modules/tcp/bbr/
  projects/nfsv42/sys/netinet/tcp_stacks/bbr.c
     - copied unchanged from r352815, head/sys/netinet/tcp_stacks/bbr.c
  projects/nfsv42/sys/netinet/tcp_stacks/tcp_bbr.h
     - copied unchanged from r352815, head/sys/netinet/tcp_stacks/tcp_bbr.h
  projects/nfsv42/sys/powerpc/powernv/opal_nvram.c
     - copied unchanged from r352815, head/sys/powerpc/powernv/opal_nvram.c
  projects/nfsv42/sys/sys/arb.h
     - copied unchanged from r352815, head/sys/sys/arb.h
  projects/nfsv42/sys/sys/tim_filter.h
     - copied unchanged from r352815, head/sys/sys/tim_filter.h
Deleted:
  projects/nfsv42/sys/dev/nand/
  projects/nfsv42/sys/dev/psci/psci_arm.S
  projects/nfsv42/sys/dev/psci/psci_arm64.S
  projects/nfsv42/sys/fs/nandfs/
  projects/nfsv42/sys/gnu/dts/include/dt-bindings/genpd/
  projects/nfsv42/sys/mips/gxemul/
  projects/nfsv42/sys/modules/drm/
  projects/nfsv42/sys/modules/drm2/
  projects/nfsv42/sys/modules/if_tap/
  projects/nfsv42/sys/modules/if_tun/
  projects/nfsv42/sys/modules/nand/
  projects/nfsv42/sys/modules/nandfs/
  projects/nfsv42/sys/modules/nandsim/
Modified:
  projects/nfsv42/sys/amd64/amd64/efirt_machdep.c
  projects/nfsv42/sys/amd64/amd64/elf_machdep.c
  projects/nfsv42/sys/amd64/amd64/pmap.c
  projects/nfsv42/sys/amd64/amd64/trap.c
  projects/nfsv42/sys/amd64/linux/linux_dummy.c
  projects/nfsv42/sys/amd64/linux/linux_proto.h
  projects/nfsv42/sys/amd64/linux/linux_systrace_args.c
  projects/nfsv42/sys/amd64/linux/syscalls.master
  projects/nfsv42/sys/amd64/linux32/linux32_dummy.c
  projects/nfsv42/sys/amd64/linux32/linux32_proto.h
  projects/nfsv42/sys/amd64/linux32/linux32_systrace_args.c
  projects/nfsv42/sys/amd64/linux32/syscalls.master
  projects/nfsv42/sys/amd64/sgx/sgx.c
  projects/nfsv42/sys/amd64/vmm/vmm.c
  projects/nfsv42/sys/arm/arm/pmap-v4.c
  projects/nfsv42/sys/arm/arm/pmap-v6.c
  projects/nfsv42/sys/arm/arm/trap-v4.c
  projects/nfsv42/sys/arm/arm/trap-v6.c
  projects/nfsv42/sys/arm/freescale/imx/imx6_machdep.c
  projects/nfsv42/sys/arm/nvidia/drm2/tegra_bo.c
  projects/nfsv42/sys/arm/ti/am335x/am335x_dmtpps.c
  projects/nfsv42/sys/arm/ti/ti_sysc.c
  projects/nfsv42/sys/arm64/arm64/efirt_machdep.c
  projects/nfsv42/sys/arm64/arm64/pmap.c
  projects/nfsv42/sys/arm64/arm64/trap.c
  projects/nfsv42/sys/arm64/conf/GENERIC
  projects/nfsv42/sys/arm64/linux/linux_dummy.c
  projects/nfsv42/sys/arm64/linux/linux_proto.h
  projects/nfsv42/sys/arm64/linux/linux_systrace_args.c
  projects/nfsv42/sys/arm64/linux/syscalls.master
  projects/nfsv42/sys/cam/cam_periph.c
  projects/nfsv42/sys/cam/scsi/scsi_da.c
  projects/nfsv42/sys/cam/scsi/scsi_enc_ses.c
  projects/nfsv42/sys/cddl/compat/opensolaris/kern/opensolaris_vfs.c
  projects/nfsv42/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c
  projects/nfsv42/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c
  projects/nfsv42/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
  projects/nfsv42/sys/cddl/dev/dtrace/amd64/dtrace_asm.S
  projects/nfsv42/sys/cddl/dev/dtrace/amd64/dtrace_subr.c
  projects/nfsv42/sys/cddl/dev/dtrace/i386/dtrace_asm.S
  projects/nfsv42/sys/cddl/dev/dtrace/i386/dtrace_subr.c
  projects/nfsv42/sys/compat/cloudabi/cloudabi_fd.c
  projects/nfsv42/sys/compat/freebsd32/freebsd32_proto.h
  projects/nfsv42/sys/compat/freebsd32/freebsd32_syscall.h
  projects/nfsv42/sys/compat/freebsd32/freebsd32_syscalls.c
  projects/nfsv42/sys/compat/freebsd32/freebsd32_sysent.c
  projects/nfsv42/sys/compat/freebsd32/freebsd32_systrace_args.c
  projects/nfsv42/sys/compat/freebsd32/syscalls.master
  projects/nfsv42/sys/compat/linsysfs/linsysfs.c
  projects/nfsv42/sys/compat/linux/linux_file.c
  projects/nfsv42/sys/compat/linuxkpi/common/include/linux/interrupt.h
  projects/nfsv42/sys/compat/linuxkpi/common/include/linux/mm.h
  projects/nfsv42/sys/compat/linuxkpi/common/src/linux_compat.c
  projects/nfsv42/sys/compat/linuxkpi/common/src/linux_page.c
  projects/nfsv42/sys/compat/linuxkpi/common/src/linux_work.c
  projects/nfsv42/sys/conf/files
  projects/nfsv42/sys/conf/files.arm
  projects/nfsv42/sys/conf/files.arm64
  projects/nfsv42/sys/conf/files.mips
  projects/nfsv42/sys/conf/files.powerpc
  projects/nfsv42/sys/conf/kern.mk
  projects/nfsv42/sys/conf/ldscript.riscv
  projects/nfsv42/sys/conf/makeLINT.mk
  projects/nfsv42/sys/conf/options
  projects/nfsv42/sys/conf/options.arm64
  projects/nfsv42/sys/contrib/ipfilter/netinet/fil.c
  projects/nfsv42/sys/contrib/octeon-sdk/cvmx-app-init.h
  projects/nfsv42/sys/contrib/vchiq/interface/vchiq_arm/vchiq_2835_arm.c
  projects/nfsv42/sys/ddb/db_command.h
  projects/nfsv42/sys/ddb/db_lex.c
  projects/nfsv42/sys/ddb/db_lex.h
  projects/nfsv42/sys/ddb/db_run.c
  projects/nfsv42/sys/dev/agp/agp.c
  projects/nfsv42/sys/dev/agp/agp_i810.c
  projects/nfsv42/sys/dev/cxgbe/tom/t4_cpl_io.c
  projects/nfsv42/sys/dev/cxgbe/tom/t4_ddp.c
  projects/nfsv42/sys/dev/drm2/ttm/ttm_bo_vm.c
  projects/nfsv42/sys/dev/drm2/ttm/ttm_page_alloc.c
  projects/nfsv42/sys/dev/drm2/ttm/ttm_tt.c
  projects/nfsv42/sys/dev/firewire/if_fwip.c
  projects/nfsv42/sys/dev/hwpmc/pmc_events.h
  projects/nfsv42/sys/dev/ichiic/ig4_iic.c
  projects/nfsv42/sys/dev/iicbus/iiconf.c
  projects/nfsv42/sys/dev/iicbus/iiconf.h
  projects/nfsv42/sys/dev/ioat/ioat.c
  projects/nfsv42/sys/dev/ioat/ioat_internal.h
  projects/nfsv42/sys/dev/ixgbe/if_ix.c
  projects/nfsv42/sys/dev/ixgbe/if_ixv.c
  projects/nfsv42/sys/dev/ixgbe/ixgbe.h
  projects/nfsv42/sys/dev/jme/if_jme.c
  projects/nfsv42/sys/dev/md/md.c
  projects/nfsv42/sys/dev/netmap/netmap_freebsd.c
  projects/nfsv42/sys/dev/nvdimm/nvdimm.c
  projects/nfsv42/sys/dev/nvdimm/nvdimm_var.h
  projects/nfsv42/sys/dev/nvme/nvme_ahci.c
  projects/nfsv42/sys/dev/nvme/nvme_ctrlr.c
  projects/nfsv42/sys/dev/nvme/nvme_ctrlr_cmd.c
  projects/nfsv42/sys/dev/nvme/nvme_pci.c
  projects/nfsv42/sys/dev/nvme/nvme_private.h
  projects/nfsv42/sys/dev/nvme/nvme_qpair.c
  projects/nfsv42/sys/dev/nvme/nvme_sysctl.c
  projects/nfsv42/sys/dev/pccard/pccard.c
  projects/nfsv42/sys/dev/psci/psci.c
  projects/nfsv42/sys/dev/psci/psci.h
  projects/nfsv42/sys/dev/psci/smccc.h
  projects/nfsv42/sys/dev/ral/if_ral_pci.c
  projects/nfsv42/sys/dev/ral/rt2860.c
  projects/nfsv42/sys/dev/sound/pci/hda/hdac.c
  projects/nfsv42/sys/dev/sound/pci/hda/hdac.h
  projects/nfsv42/sys/dev/uart/uart_dev_ns8250.c
  projects/nfsv42/sys/dev/usb/controller/xhci.c
  projects/nfsv42/sys/dev/usb/usb_bus.h
  projects/nfsv42/sys/dev/usb/usb_ioctl.h
  projects/nfsv42/sys/dev/usb/usb_transfer.c
  projects/nfsv42/sys/dev/vt/hw/fb/vt_fb.c
  projects/nfsv42/sys/dev/vt/vt.h
  projects/nfsv42/sys/dev/vt/vt_buf.c
  projects/nfsv42/sys/dev/vt/vt_core.c
  projects/nfsv42/sys/dev/vt/vt_cpulogos.c
  projects/nfsv42/sys/dev/xen/gntdev/gntdev.c
  projects/nfsv42/sys/dev/xen/privcmd/privcmd.c
  projects/nfsv42/sys/fs/fuse/fuse_internal.c
  projects/nfsv42/sys/fs/fuse/fuse_io.c
  projects/nfsv42/sys/fs/fuse/fuse_node.h
  projects/nfsv42/sys/fs/fuse/fuse_vnops.c
  projects/nfsv42/sys/fs/msdosfs/fat.h
  projects/nfsv42/sys/fs/msdosfs/msdosfs_denode.c
  projects/nfsv42/sys/fs/msdosfs/msdosfs_fat.c
  projects/nfsv42/sys/fs/msdosfs/msdosfs_vfsops.c
  projects/nfsv42/sys/fs/msdosfs/msdosfsmount.h
  projects/nfsv42/sys/fs/nfs/nfsport.h
  projects/nfsv42/sys/fs/nfsclient/nfs_clbio.c
  projects/nfsv42/sys/fs/nfsclient/nfs_clnfsiod.c
  projects/nfsv42/sys/fs/nfsclient/nfs_clnode.c
  projects/nfsv42/sys/fs/nfsclient/nfs_clport.c
  projects/nfsv42/sys/fs/nfsclient/nfs_clrpcops.c
  projects/nfsv42/sys/fs/nfsclient/nfs_clsubs.c
  projects/nfsv42/sys/fs/nfsclient/nfs_clvfsops.c
  projects/nfsv42/sys/fs/nfsclient/nfs_clvnops.c
  projects/nfsv42/sys/fs/pseudofs/pseudofs.c
  projects/nfsv42/sys/fs/pseudofs/pseudofs.h
  projects/nfsv42/sys/fs/tmpfs/tmpfs_subr.c
  projects/nfsv42/sys/geom/nop/g_nop.c
  projects/nfsv42/sys/geom/nop/g_nop.h
  projects/nfsv42/sys/i386/i386/pmap.c
  projects/nfsv42/sys/i386/i386/pmap_base.c
  projects/nfsv42/sys/i386/i386/trap.c
  projects/nfsv42/sys/i386/include/pmap_base.h
  projects/nfsv42/sys/i386/linux/linux_dummy.c
  projects/nfsv42/sys/i386/linux/linux_proto.h
  projects/nfsv42/sys/i386/linux/linux_systrace_args.c
  projects/nfsv42/sys/i386/linux/syscalls.master
  projects/nfsv42/sys/kern/capabilities.conf
  projects/nfsv42/sys/kern/imgact_elf.c
  projects/nfsv42/sys/kern/init_sysent.c
  projects/nfsv42/sys/kern/kern_cpuset.c
  projects/nfsv42/sys/kern/kern_descrip.c
  projects/nfsv42/sys/kern/kern_environment.c
  projects/nfsv42/sys/kern/kern_exec.c
  projects/nfsv42/sys/kern/kern_fork.c
  projects/nfsv42/sys/kern/kern_kcov.c
  projects/nfsv42/sys/kern/kern_rangelock.c
  projects/nfsv42/sys/kern/kern_sendfile.c
  projects/nfsv42/sys/kern/kern_sig.c
  projects/nfsv42/sys/kern/kern_sysctl.c
  projects/nfsv42/sys/kern/kern_tc.c
  projects/nfsv42/sys/kern/kern_thread.c
  projects/nfsv42/sys/kern/kern_timeout.c
  projects/nfsv42/sys/kern/link_elf.c
  projects/nfsv42/sys/kern/makesyscalls.sh
  projects/nfsv42/sys/kern/sched_ule.c
  projects/nfsv42/sys/kern/subr_epoch.c
  projects/nfsv42/sys/kern/subr_lock.c
  projects/nfsv42/sys/kern/subr_pcpu.c
  projects/nfsv42/sys/kern/subr_stack.c
  projects/nfsv42/sys/kern/subr_terminal.c
  projects/nfsv42/sys/kern/sys_process.c
  projects/nfsv42/sys/kern/syscalls.c
  projects/nfsv42/sys/kern/syscalls.master
  projects/nfsv42/sys/kern/systrace_args.c
  projects/nfsv42/sys/kern/uipc_ktls.c
  projects/nfsv42/sys/kern/uipc_mbuf.c
  projects/nfsv42/sys/kern/uipc_shm.c
  projects/nfsv42/sys/kern/vfs_bio.c
  projects/nfsv42/sys/kern/vfs_cache.c
  projects/nfsv42/sys/kern/vfs_cluster.c
  projects/nfsv42/sys/kern/vfs_default.c
  projects/nfsv42/sys/kern/vfs_mount.c
  projects/nfsv42/sys/kern/vfs_mountroot.c
  projects/nfsv42/sys/kern/vfs_subr.c
  projects/nfsv42/sys/kern/vfs_vnops.c
  projects/nfsv42/sys/mips/cavium/std.octeon1
  projects/nfsv42/sys/mips/include/pcpu.h
  projects/nfsv42/sys/mips/mips/pmap.c
  projects/nfsv42/sys/mips/mips/trap.c
  projects/nfsv42/sys/modules/Makefile
  projects/nfsv42/sys/modules/nvdimm/Makefile
  projects/nfsv42/sys/modules/tcp/Makefile
  projects/nfsv42/sys/net/bpf_zerocopy.c
  projects/nfsv42/sys/net/if.c
  projects/nfsv42/sys/net/if.h
  projects/nfsv42/sys/net/if_ethersubr.c
  projects/nfsv42/sys/net/if_spppsubr.c
  projects/nfsv42/sys/net/if_vlan.c
  projects/nfsv42/sys/net/iflib.c
  projects/nfsv42/sys/net/rtsock.c
  projects/nfsv42/sys/netinet/ip_output.c
  projects/nfsv42/sys/netinet/ip_var.h
  projects/nfsv42/sys/netinet/sctp_asconf.c
  projects/nfsv42/sys/netinet/sctp_auth.c
  projects/nfsv42/sys/netinet/sctp_crc32.c
  projects/nfsv42/sys/netinet/sctp_indata.c
  projects/nfsv42/sys/netinet/sctp_input.c
  projects/nfsv42/sys/netinet/sctputil.c
  projects/nfsv42/sys/netinet/sctputil.h
  projects/nfsv42/sys/netinet/tcp.h
  projects/nfsv42/sys/netinet/tcp_input.c
  projects/nfsv42/sys/netinet/tcp_ratelimit.c
  projects/nfsv42/sys/netinet/tcp_ratelimit.h
  projects/nfsv42/sys/netinet/tcp_sack.c
  projects/nfsv42/sys/netinet/tcp_stacks/rack.c
  projects/nfsv42/sys/netinet/tcp_stacks/rack_bbr_common.c
  projects/nfsv42/sys/netinet/tcp_stacks/rack_bbr_common.h
  projects/nfsv42/sys/netinet/tcp_stacks/sack_filter.c
  projects/nfsv42/sys/netinet/tcp_stacks/sack_filter.h
  projects/nfsv42/sys/netinet/tcp_stacks/tcp_rack.h
  projects/nfsv42/sys/netinet/tcp_syncache.c
  projects/nfsv42/sys/netinet/tcp_syncache.h
  projects/nfsv42/sys/netinet6/ip6_input.c
  projects/nfsv42/sys/netpfil/ipfw/ip_fw2.c
  projects/nfsv42/sys/opencrypto/ktls_ocf.c
  projects/nfsv42/sys/powerpc/aim/mmu_oea.c
  projects/nfsv42/sys/powerpc/aim/mmu_oea64.c
  projects/nfsv42/sys/powerpc/booke/pmap.c
  projects/nfsv42/sys/powerpc/include/atomic.h
  projects/nfsv42/sys/powerpc/powernv/opal.h
  projects/nfsv42/sys/powerpc/powernv/opal_hmi.c
  projects/nfsv42/sys/powerpc/powerpc/mp_machdep.c
  projects/nfsv42/sys/powerpc/powerpc/trap.c
  projects/nfsv42/sys/riscv/conf/GENERIC
  projects/nfsv42/sys/riscv/riscv/clock.c
  projects/nfsv42/sys/riscv/riscv/elf_machdep.c
  projects/nfsv42/sys/riscv/riscv/identcpu.c
  projects/nfsv42/sys/riscv/riscv/mp_machdep.c
  projects/nfsv42/sys/riscv/riscv/pmap.c
  projects/nfsv42/sys/riscv/riscv/trap.c
  projects/nfsv42/sys/sparc64/sparc64/pmap.c
  projects/nfsv42/sys/sparc64/sparc64/trap.c
  projects/nfsv42/sys/sys/buf.h
  projects/nfsv42/sys/sys/elf_common.h
  projects/nfsv42/sys/sys/epoch.h
  projects/nfsv42/sys/sys/fcntl.h
  projects/nfsv42/sys/sys/file.h
  projects/nfsv42/sys/sys/ktls.h
  projects/nfsv42/sys/sys/mbuf.h
  projects/nfsv42/sys/sys/mman.h
  projects/nfsv42/sys/sys/mount.h
  projects/nfsv42/sys/sys/param.h
  projects/nfsv42/sys/sys/pcpu.h
  projects/nfsv42/sys/sys/pmc.h
  projects/nfsv42/sys/sys/proc.h
  projects/nfsv42/sys/sys/rangelock.h
  projects/nfsv42/sys/sys/refcount.h
  projects/nfsv42/sys/sys/signal.h
  projects/nfsv42/sys/sys/signalvar.h
  projects/nfsv42/sys/sys/sockio.h
  projects/nfsv42/sys/sys/stack.h
  projects/nfsv42/sys/sys/syscall.h
  projects/nfsv42/sys/sys/syscall.mk
  projects/nfsv42/sys/sys/syscallsubr.h
  projects/nfsv42/sys/sys/sysctl.h
  projects/nfsv42/sys/sys/sysproto.h
  projects/nfsv42/sys/sys/unistd.h
  projects/nfsv42/sys/sys/vnode.h
  projects/nfsv42/sys/tools/fw_stub.awk
  projects/nfsv42/sys/ufs/ffs/ffs_softdep.c
  projects/nfsv42/sys/vm/device_pager.c
  projects/nfsv42/sys/vm/phys_pager.c
  projects/nfsv42/sys/vm/uma.h
  projects/nfsv42/sys/vm/vm_extern.h
  projects/nfsv42/sys/vm/vm_fault.c
  projects/nfsv42/sys/vm/vm_glue.c
  projects/nfsv42/sys/vm/vm_map.c
  projects/nfsv42/sys/vm/vm_object.c
  projects/nfsv42/sys/vm/vm_page.c
  projects/nfsv42/sys/vm/vm_page.h
  projects/nfsv42/sys/vm/vm_pageout.c
  projects/nfsv42/sys/vm/vm_param.h
  projects/nfsv42/sys/vm/vm_swapout.c
  projects/nfsv42/sys/x86/iommu/intel_idpgtbl.c
  projects/nfsv42/sys/x86/x86/tsc.c
Directory Properties:
  projects/nfsv42/sys/   (props changed)
  projects/nfsv42/sys/arm64/conf/   (props changed)
  projects/nfsv42/sys/cddl/contrib/opensolaris/   (props changed)
  projects/nfsv42/sys/contrib/ipfilter/   (props changed)
  projects/nfsv42/sys/contrib/octeon-sdk/   (props changed)
  projects/nfsv42/sys/gnu/dts/include/   (props changed)

Modified: projects/nfsv42/sys/amd64/amd64/efirt_machdep.c
==============================================================================
--- projects/nfsv42/sys/amd64/amd64/efirt_machdep.c	Fri Sep 27 20:08:19 2019	(r352816)
+++ projects/nfsv42/sys/amd64/amd64/efirt_machdep.c	Fri Sep 27 20:09:43 2019	(r352817)
@@ -74,7 +74,7 @@ efi_destroy_1t1_map(void)
 	if (obj_1t1_pt != NULL) {
 		VM_OBJECT_RLOCK(obj_1t1_pt);
 		TAILQ_FOREACH(m, &obj_1t1_pt->memq, listq)
-			m->wire_count = 0;
+			m->ref_count = VPRC_OBJREF;
 		vm_wire_sub(obj_1t1_pt->resident_page_count);
 		VM_OBJECT_RUNLOCK(obj_1t1_pt);
 		vm_object_deallocate(obj_1t1_pt);

Modified: projects/nfsv42/sys/amd64/amd64/elf_machdep.c
==============================================================================
--- projects/nfsv42/sys/amd64/amd64/elf_machdep.c	Fri Sep 27 20:08:19 2019	(r352816)
+++ projects/nfsv42/sys/amd64/amd64/elf_machdep.c	Fri Sep 27 20:09:43 2019	(r352817)
@@ -267,7 +267,6 @@ elf_reloc_internal(linker_file_t lf, Elf_Addr relocbas
 			 */
 			printf("kldload: unexpected R_COPY relocation\n");
 			return (-1);
-			break;
 
 		case R_X86_64_GLOB_DAT:	/* S */
 		case R_X86_64_JMP_SLOT:	/* XXX need addend + offset */
@@ -279,7 +278,7 @@ elf_reloc_internal(linker_file_t lf, Elf_Addr relocbas
 			break;
 
 		case R_X86_64_RELATIVE:	/* B + A */
-			addr = relocbase + addend;
+			addr = elf_relocaddr(lf, relocbase + addend);
 			val = addr;
 			if (*where != val)
 				*where = val;

Modified: projects/nfsv42/sys/amd64/amd64/pmap.c
==============================================================================
--- projects/nfsv42/sys/amd64/amd64/pmap.c	Fri Sep 27 20:08:19 2019	(r352816)
+++ projects/nfsv42/sys/amd64/amd64/pmap.c	Fri Sep 27 20:09:43 2019	(r352817)
@@ -1539,13 +1539,13 @@ create_pagetables(vm_paddr_t *firstaddr)
 	}
 	for (j = 0; i < ndmpdp; i++, j++) {
 		pdp_p[i] = DMPDphys + ptoa(j);
-		pdp_p[i] |= X86_PG_RW | X86_PG_V;
+		pdp_p[i] |= X86_PG_RW | X86_PG_V | pg_nx;
 	}
 
 	/*
 	 * Instead of using a 1G page for the memory containing the kernel,
-	 * use 2M pages with appropriate permissions. (If using 1G pages,
-	 * this will partially overwrite the PDPEs above.)
+	 * use 2M pages with read-only and no-execute permissions.  (If using 1G
+	 * pages, this will partially overwrite the PDPEs above.)
 	 */
 	if (ndm1g) {
 		pd_p = (pd_entry_t *)DMPDkernphys;
@@ -1555,7 +1555,7 @@ create_pagetables(vm_paddr_t *firstaddr)
 			    bootaddr_rwx(i << PDRSHIFT);
 		for (i = 0; i < nkdmpde; i++)
 			pdp_p[i] = (DMPDkernphys + ptoa(i)) | X86_PG_RW |
-			    X86_PG_V;
+			    X86_PG_V | pg_nx;
 	}
 
 	/* And recursively map PML4 to itself in order to get PTmap */
@@ -1566,7 +1566,7 @@ create_pagetables(vm_paddr_t *firstaddr)
 	/* Connect the Direct Map slot(s) up to the PML4. */
 	for (i = 0; i < ndmpdpphys; i++) {
 		p4_p[DMPML4I + i] = DMPDPphys + ptoa(i);
-		p4_p[DMPML4I + i] |= X86_PG_RW | X86_PG_V;
+		p4_p[DMPML4I + i] |= X86_PG_RW | X86_PG_V | pg_nx;
 	}
 
 	/* Connect the KVA slots up to the PML4 */
@@ -1856,7 +1856,7 @@ pmap_init(void)
 		    ("pmap_init: page table page is out of range"));
 		mpte->pindex = pmap_pde_pindex(KERNBASE) + i;
 		mpte->phys_addr = KPTphys + (i << PAGE_SHIFT);
-		mpte->wire_count = 1;
+		mpte->ref_count = 1;
 
 		/*
 		 * Collect the page table pages that were replaced by a 2MB
@@ -1947,7 +1947,7 @@ pmap_init(void)
 	if (lm_ents > LMEPML4I - LMSPML4I + 1)
 		lm_ents = LMEPML4I - LMSPML4I + 1;
 	if (bootverbose)
-		printf("pmap: large map %u PML4 slots (%lu Gb)\n",
+		printf("pmap: large map %u PML4 slots (%lu GB)\n",
 		    lm_ents, (u_long)lm_ents * (NBPML4 / 1024 / 1024 / 1024));
 	if (lm_ents != 0) {
 		large_vmem = vmem_create("large", LARGEMAP_MIN_ADDRESS,
@@ -1965,6 +1965,11 @@ pmap_init(void)
 	}
 }
 
+SYSCTL_UINT(_vm_pmap, OID_AUTO, large_map_pml4_entries,
+    CTLFLAG_RDTUN | CTLFLAG_NOFETCH, &lm_ents, 0,
+    "Maximum number of PML4 entries for use by large map (tunable).  "
+    "Each entry corresponds to 512GB of address space.");
+
 static SYSCTL_NODE(_vm_pmap, OID_AUTO, pde, CTLFLAG_RD, 0,
     "2MB page mapping counters");
 
@@ -3064,38 +3069,28 @@ pmap_extract_and_hold(pmap_t pmap, vm_offset_t va, vm_
 {
 	pd_entry_t pde, *pdep;
 	pt_entry_t pte, PG_RW, PG_V;
-	vm_paddr_t pa;
 	vm_page_t m;
 
-	pa = 0;
 	m = NULL;
 	PG_RW = pmap_rw_bit(pmap);
 	PG_V = pmap_valid_bit(pmap);
+
 	PMAP_LOCK(pmap);
-retry:
 	pdep = pmap_pde(pmap, va);
 	if (pdep != NULL && (pde = *pdep)) {
 		if (pde & PG_PS) {
-			if ((pde & PG_RW) || (prot & VM_PROT_WRITE) == 0) {
-				if (vm_page_pa_tryrelock(pmap, (pde &
-				    PG_PS_FRAME) | (va & PDRMASK), &pa))
-					goto retry;
-				m = PHYS_TO_VM_PAGE(pa);
-			}
+			if ((pde & PG_RW) != 0 || (prot & VM_PROT_WRITE) == 0)
+				m = PHYS_TO_VM_PAGE((pde & PG_PS_FRAME) |
+				    (va & PDRMASK));
 		} else {
 			pte = *pmap_pde_to_pte(pdep, va);
-			if ((pte & PG_V) &&
-			    ((pte & PG_RW) || (prot & VM_PROT_WRITE) == 0)) {
-				if (vm_page_pa_tryrelock(pmap, pte & PG_FRAME,
-				    &pa))
-					goto retry;
-				m = PHYS_TO_VM_PAGE(pa);
-			}
+			if ((pte & PG_V) != 0 &&
+			    ((pte & PG_RW) != 0 || (prot & VM_PROT_WRITE) == 0))
+				m = PHYS_TO_VM_PAGE(pte & PG_FRAME);
 		}
-		if (m != NULL)
-			vm_page_wire(m);
+		if (m != NULL && !vm_page_wire_mapped(m))
+			m = NULL;
 	}
-	PA_UNLOCK_COND(pa);
 	PMAP_UNLOCK(pmap);
 	return (m);
 }
@@ -3144,7 +3139,7 @@ pmap_kenter(vm_offset_t va, vm_paddr_t pa)
 	pt_entry_t *pte;
 
 	pte = vtopte(va);
-	pte_store(pte, pa | X86_PG_RW | X86_PG_V | pg_g);
+	pte_store(pte, pa | X86_PG_RW | X86_PG_V | pg_g | pg_nx);
 }
 
 static __inline void
@@ -3155,7 +3150,7 @@ pmap_kenter_attr(vm_offset_t va, vm_paddr_t pa, int mo
 
 	pte = vtopte(va);
 	cache_bits = pmap_cache_bits(kernel_pmap, mode, 0);
-	pte_store(pte, pa | X86_PG_RW | X86_PG_V | pg_g | cache_bits);
+	pte_store(pte, pa | X86_PG_RW | X86_PG_V | pg_g | pg_nx | cache_bits);
 }
 
 /*
@@ -3295,8 +3290,8 @@ pmap_remove_pt_page(pmap_t pmap, vm_offset_t va)
 }
 
 /*
- * Decrements a page table page's wire count, which is used to record the
- * number of valid page table entries within the page.  If the wire count
+ * Decrements a page table page's reference count, which is used to record the
+ * number of valid page table entries within the page.  If the reference count
  * drops to zero, then the page table page is unmapped.  Returns TRUE if the
  * page table page was unmapped and FALSE otherwise.
  */
@@ -3304,8 +3299,8 @@ static inline boolean_t
 pmap_unwire_ptp(pmap_t pmap, vm_offset_t va, vm_page_t m, struct spglist *free)
 {
 
-	--m->wire_count;
-	if (m->wire_count == 0) {
+	--m->ref_count;
+	if (m->ref_count == 0) {
 		_pmap_unwire_ptp(pmap, va, m, free);
 		return (TRUE);
 	} else
@@ -3365,7 +3360,7 @@ _pmap_unwire_ptp(pmap_t pmap, vm_offset_t va, vm_page_
 
 /*
  * After removing a page table entry, this routine is used to
- * conditionally free the page, and manage the hold/wire counts.
+ * conditionally free the page, and manage the reference count.
  */
 static int
 pmap_unuse_pt(pmap_t pmap, vm_offset_t va, pd_entry_t ptepde,
@@ -3625,7 +3620,7 @@ _pmap_allocpte(pmap_t pmap, vm_pindex_t ptepindex, str
 		} else {
 			/* Add reference to pdp page */
 			pdppg = PHYS_TO_VM_PAGE(*pml4 & PG_FRAME);
-			pdppg->wire_count++;
+			pdppg->ref_count++;
 		}
 		pdp = (pdp_entry_t *)PHYS_TO_DMAP(*pml4 & PG_FRAME);
 
@@ -3670,7 +3665,7 @@ _pmap_allocpte(pmap_t pmap, vm_pindex_t ptepindex, str
 			} else {
 				/* Add reference to the pd page */
 				pdpg = PHYS_TO_VM_PAGE(*pdp & PG_FRAME);
-				pdpg->wire_count++;
+				pdpg->ref_count++;
 			}
 		}
 		pd = (pd_entry_t *)PHYS_TO_DMAP(*pdp & PG_FRAME);
@@ -3699,7 +3694,7 @@ retry:
 	if (pdpe != NULL && (*pdpe & PG_V) != 0) {
 		/* Add a reference to the pd page. */
 		pdpg = PHYS_TO_VM_PAGE(*pdpe & PG_FRAME);
-		pdpg->wire_count++;
+		pdpg->ref_count++;
 	} else {
 		/* Allocate a pd page. */
 		ptepindex = pmap_pde_pindex(va);
@@ -3750,7 +3745,7 @@ retry:
 	 */
 	if (pd != NULL && (*pd & PG_V) != 0) {
 		m = PHYS_TO_VM_PAGE(*pd & PG_FRAME);
-		m->wire_count++;
+		m->ref_count++;
 	} else {
 		/*
 		 * Here if the pte page isn't mapped, or if it has been
@@ -4215,7 +4210,7 @@ next_chunk:
 		m_pc = SLIST_FIRST(&free);
 		SLIST_REMOVE_HEAD(&free, plinks.s.ss);
 		/* Recycle a freed page table page. */
-		m_pc->wire_count = 1;
+		m_pc->ref_count = 1;
 	}
 	vm_page_free_pages_toq(&free, true);
 	return (m_pc);
@@ -4795,7 +4790,7 @@ pmap_demote_pde_locked(pmap_t pmap, pd_entry_t *pde, v
 		}
 
 		if (!in_kernel) {
-			mpte->wire_count = NPTEPG;
+			mpte->ref_count = NPTEPG;
 			pmap_resident_count_inc(pmap, 1);
 		}
 	}
@@ -4956,9 +4951,9 @@ pmap_remove_pde(pmap_t pmap, pd_entry_t *pdq, vm_offse
 			KASSERT(mpte->valid == VM_PAGE_BITS_ALL,
 			    ("pmap_remove_pde: pte page not promoted"));
 			pmap_resident_count_dec(pmap, 1);
-			KASSERT(mpte->wire_count == NPTEPG,
-			    ("pmap_remove_pde: pte page wire count error"));
-			mpte->wire_count = 0;
+			KASSERT(mpte->ref_count == NPTEPG,
+			    ("pmap_remove_pde: pte page ref count error"));
+			mpte->ref_count = 0;
 			pmap_add_delayed_free_list(mpte, free, FALSE);
 		}
 	}
@@ -5719,7 +5714,7 @@ retry:
 		pte = pmap_pde_to_pte(pde, va);
 		if (va < VM_MAXUSER_ADDRESS && mpte == NULL) {
 			mpte = PHYS_TO_VM_PAGE(*pde & PG_FRAME);
-			mpte->wire_count++;
+			mpte->ref_count++;
 		}
 	} else if (va < VM_MAXUSER_ADDRESS) {
 		/*
@@ -5761,8 +5756,8 @@ retry:
 		 * Remove the extra PT page reference.
 		 */
 		if (mpte != NULL) {
-			mpte->wire_count--;
-			KASSERT(mpte->wire_count > 0,
+			mpte->ref_count--;
+			KASSERT(mpte->ref_count > 0,
 			    ("pmap_enter: missing reference to page table page,"
 			     " va: 0x%lx", va));
 		}
@@ -5883,7 +5878,7 @@ unchanged:
 	 * If both the page table page and the reservation are fully
 	 * populated, then attempt promotion.
 	 */
-	if ((mpte == NULL || mpte->wire_count == NPTEPG) &&
+	if ((mpte == NULL || mpte->ref_count == NPTEPG) &&
 	    pmap_ps_enabled(pmap) &&
 	    (m->flags & PG_FICTITIOUS) == 0 &&
 	    vm_reserv_level_iffullpop(m) == 0)
@@ -5985,10 +5980,10 @@ pmap_enter_pde(pmap_t pmap, vm_offset_t va, pd_entry_t
 	pde = &pde[pmap_pde_index(va)];
 	oldpde = *pde;
 	if ((oldpde & PG_V) != 0) {
-		KASSERT(pdpg->wire_count > 1,
-		    ("pmap_enter_pde: pdpg's wire count is too low"));
+		KASSERT(pdpg->ref_count > 1,
+		    ("pmap_enter_pde: pdpg's reference count is too low"));
 		if ((flags & PMAP_ENTER_NOREPLACE) != 0) {
-			pdpg->wire_count--;
+			pdpg->ref_count--;
 			CTR2(KTR_PMAP, "pmap_enter_pde: failure for va %#lx"
 			    " in pmap %p", va, pmap);
 			return (KERN_FAILURE);
@@ -6162,7 +6157,7 @@ pmap_enter_quick_locked(pmap_t pmap, vm_offset_t va, v
 		 */
 		ptepindex = pmap_pde_pindex(va);
 		if (mpte && (mpte->pindex == ptepindex)) {
-			mpte->wire_count++;
+			mpte->ref_count++;
 		} else {
 			/*
 			 * Get the page directory entry
@@ -6179,7 +6174,7 @@ pmap_enter_quick_locked(pmap_t pmap, vm_offset_t va, v
 				if (*ptepa & PG_PS)
 					return (NULL);
 				mpte = PHYS_TO_VM_PAGE(*ptepa & PG_FRAME);
-				mpte->wire_count++;
+				mpte->ref_count++;
 			} else {
 				/*
 				 * Pass NULL instead of the PV list lock
@@ -6198,7 +6193,7 @@ pmap_enter_quick_locked(pmap_t pmap, vm_offset_t va, v
 	}
 	if (*pte) {
 		if (mpte != NULL) {
-			mpte->wire_count--;
+			mpte->ref_count--;
 			mpte = NULL;
 		}
 		return (mpte);
@@ -6344,8 +6339,8 @@ pmap_object_init_pt(pmap_t pmap, vm_offset_t addr, vm_
 				atomic_add_long(&pmap_pde_mappings, 1);
 			} else {
 				/* Continue on if the PDE is already valid. */
-				pdpg->wire_count--;
-				KASSERT(pdpg->wire_count > 0,
+				pdpg->ref_count--;
+				KASSERT(pdpg->ref_count > 0,
 				    ("pmap_object_init_pt: missing reference "
 				    "to page directory page, va: 0x%lx", addr));
 			}
@@ -6535,13 +6530,13 @@ pmap_copy(pmap_t dst_pmap, pmap_t src_pmap, vm_offset_
 				    PAGE_SIZE);
 				atomic_add_long(&pmap_pde_mappings, 1);
 			} else
-				dst_pdpg->wire_count--;
+				dst_pdpg->ref_count--;
 			continue;
 		}
 
 		srcptepaddr &= PG_FRAME;
 		srcmpte = PHYS_TO_VM_PAGE(srcptepaddr);
-		KASSERT(srcmpte->wire_count > 0,
+		KASSERT(srcmpte->ref_count > 0,
 		    ("pmap_copy: source page table page is unused"));
 
 		if (va_next > end_addr)
@@ -6563,7 +6558,7 @@ pmap_copy(pmap_t dst_pmap, pmap_t src_pmap, vm_offset_
 				KASSERT(dstmpte->pindex ==
 				    pmap_pde_pindex(addr),
 				    ("dstmpte pindex/addr mismatch"));
-				dstmpte->wire_count++;
+				dstmpte->ref_count++;
 			} else if ((dstmpte = pmap_allocpte(dst_pmap, addr,
 			    NULL)) == NULL)
 				goto out;
@@ -6596,7 +6591,7 @@ pmap_copy(pmap_t dst_pmap, pmap_t src_pmap, vm_offset_
 				goto out;
 			}
 			/* Have we copied all of the valid mappings? */ 
-			if (dstmpte->wire_count >= srcmpte->wire_count)
+			if (dstmpte->ref_count >= srcmpte->ref_count)
 				break;
 		}
 	}
@@ -7006,9 +7001,9 @@ pmap_remove_pages(pmap_t pmap)
 						KASSERT(mpte->valid == VM_PAGE_BITS_ALL,
 						    ("pmap_remove_pages: pte page not promoted"));
 						pmap_resident_count_dec(pmap, 1);
-						KASSERT(mpte->wire_count == NPTEPG,
-						    ("pmap_remove_pages: pte page wire count error"));
-						mpte->wire_count = 0;
+						KASSERT(mpte->ref_count == NPTEPG,
+						    ("pmap_remove_pages: pte page reference count error"));
+						mpte->ref_count = 0;
 						pmap_add_delayed_free_list(mpte, &free, FALSE);
 					}
 				} else {
@@ -8738,7 +8733,7 @@ pmap_emulate_accessed_dirty(pmap_t pmap, vm_offset_t v
 
 	m = PHYS_TO_VM_PAGE(*pte & PG_FRAME);
 
-	if ((mpte == NULL || mpte->wire_count == NPTEPG) &&
+	if ((mpte == NULL || mpte->ref_count == NPTEPG) &&
 	    pmap_ps_enabled(pmap) &&
 	    (m->flags & PG_FICTITIOUS) == 0 &&
 	    vm_reserv_level_iffullpop(m) == 0) {
@@ -8929,12 +8924,12 @@ pmap_quick_remove_page(vm_offset_t addr)
 /*
  * Pdp pages from the large map are managed differently from either
  * kernel or user page table pages.  They are permanently allocated at
- * initialization time, and their wire count is permanently set to
+ * initialization time, and their reference count is permanently set to
  * zero.  The pml4 entries pointing to those pages are copied into
  * each allocated pmap.
  *
  * In contrast, pd and pt pages are managed like user page table
- * pages.  They are dynamically allocated, and their wire count
+ * pages.  They are dynamically allocated, and their reference count
  * represents the number of valid entries within the page.
  */
 static vm_page_t
@@ -9021,7 +9016,7 @@ retry:
 			goto retry;
 		mphys = VM_PAGE_TO_PHYS(m);
 		*pde = mphys | X86_PG_A | X86_PG_RW | X86_PG_V | pg_nx;
-		PHYS_TO_VM_PAGE(DMAP_TO_PHYS((uintptr_t)pde))->wire_count++;
+		PHYS_TO_VM_PAGE(DMAP_TO_PHYS((uintptr_t)pde))->ref_count++;
 	} else {
 		MPASS((*pde & X86_PG_PS) == 0);
 		mphys = *pde & PG_FRAME;
@@ -9141,7 +9136,7 @@ pmap_large_map(vm_paddr_t spa, vm_size_t len, void **a
 			    X86_PG_V | X86_PG_A | pg_nx |
 			    pmap_cache_bits(kernel_pmap, mattr, TRUE);
 			PHYS_TO_VM_PAGE(DMAP_TO_PHYS((uintptr_t)pde))->
-			    wire_count++;
+			    ref_count++;
 			inc = NBPDR;
 		} else {
 			pte = pmap_large_map_pte(va);
@@ -9150,7 +9145,7 @@ pmap_large_map(vm_paddr_t spa, vm_size_t len, void **a
 			    X86_PG_A | pg_nx | pmap_cache_bits(kernel_pmap,
 			    mattr, FALSE);
 			PHYS_TO_VM_PAGE(DMAP_TO_PHYS((uintptr_t)pte))->
-			    wire_count++;
+			    ref_count++;
 			inc = PAGE_SIZE;
 		}
 	}
@@ -9219,8 +9214,8 @@ pmap_large_unmap(void *svaa, vm_size_t len)
 			pde_store(pde, 0);
 			inc = NBPDR;
 			m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS((vm_offset_t)pde));
-			m->wire_count--;
-			if (m->wire_count == 0) {
+			m->ref_count--;
+			if (m->ref_count == 0) {
 				*pdpe = 0;
 				SLIST_INSERT_HEAD(&spgf, m, plinks.s.ss);
 			}
@@ -9233,13 +9228,13 @@ pmap_large_unmap(void *svaa, vm_size_t len)
 		pte_clear(pte);
 		inc = PAGE_SIZE;
 		m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS((vm_offset_t)pte));
-		m->wire_count--;
-		if (m->wire_count == 0) {
+		m->ref_count--;
+		if (m->ref_count == 0) {
 			*pde = 0;
 			SLIST_INSERT_HEAD(&spgf, m, plinks.s.ss);
 			m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS((vm_offset_t)pde));
-			m->wire_count--;
-			if (m->wire_count == 0) {
+			m->ref_count--;
+			if (m->ref_count == 0) {
 				*pdpe = 0;
 				SLIST_INSERT_HEAD(&spgf, m, plinks.s.ss);
 			}
@@ -9446,7 +9441,7 @@ static bool
 pmap_pti_free_page(vm_page_t m)
 {
 
-	KASSERT(m->wire_count > 0, ("page %p not wired", m));
+	KASSERT(m->ref_count > 0, ("page %p not referenced", m));
 	if (!vm_page_unwire_noq(m))
 		return (false);
 	vm_page_free_zero(m);
@@ -9540,7 +9535,7 @@ pmap_pti_wire_pte(void *pte)
 
 	VM_OBJECT_ASSERT_WLOCKED(pti_obj);
 	m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS((uintptr_t)pte));
-	m->wire_count++;
+	m->ref_count++;
 }
 
 static void
@@ -9550,8 +9545,8 @@ pmap_pti_unwire_pde(void *pde, bool only_ref)
 
 	VM_OBJECT_ASSERT_WLOCKED(pti_obj);
 	m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS((uintptr_t)pde));
-	MPASS(m->wire_count > 0);
-	MPASS(only_ref || m->wire_count > 1);
+	MPASS(m->ref_count > 0);
+	MPASS(only_ref || m->ref_count > 1);
 	pmap_pti_free_page(m);
 }
 
@@ -9563,7 +9558,7 @@ pmap_pti_unwire_pte(void *pte, vm_offset_t va)
 
 	VM_OBJECT_ASSERT_WLOCKED(pti_obj);
 	m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS((uintptr_t)pte));
-	MPASS(m->wire_count > 0);
+	MPASS(m->ref_count > 0);
 	if (pmap_pti_free_page(m)) {
 		pde = pmap_pti_pde(va);
 		MPASS((*pde & (X86_PG_PS | X86_PG_V)) == X86_PG_V);
@@ -10033,6 +10028,9 @@ sysctl_kmaps_dump(struct sbuf *sb, struct pmap_kernel_
 	case PAT_UNCACHEABLE:
 		mode = "UC";
 		break;
+	case PAT_UNCACHED:
+		mode = "U-";
+		break;
 	case PAT_WRITE_PROTECTED:
 		mode = "WP";
 		break;
@@ -10040,13 +10038,13 @@ sysctl_kmaps_dump(struct sbuf *sb, struct pmap_kernel_
 		mode = "WC";
 		break;
 	default:
-		printf("%s: unknown PAT mode %#x for range %#016lx-%#016lx\n",
-		    __func__, i, range->sva, eva);
+		printf("%s: unknown PAT mode %#x for range 0x%016lx-0x%016lx\n",
+		    __func__, pat_idx, range->sva, eva);
 		mode = "??";
 		break;
 	}
 
-	sbuf_printf(sb, "%#016lx-%#016lx r%c%c%c%c %s %d %d %d\n",
+	sbuf_printf(sb, "0x%016lx-0x%016lx r%c%c%c%c %s %d %d %d\n",
 	    range->sva, eva,
 	    (range->attrs & X86_PG_RW) != 0 ? 'w' : '-',
 	    (range->attrs & pg_nx) != 0 ? '-' : 'x',
@@ -10281,25 +10279,25 @@ DB_SHOW_COMMAND(pte, pmap_print_pte)
 
 	PG_V = pmap_valid_bit(pmap);
 	pml4 = pmap_pml4e(pmap, va);
-	db_printf("VA %#016lx pml4e %#016lx", va, *pml4);
+	db_printf("VA 0x%016lx pml4e 0x%016lx", va, *pml4);
 	if ((*pml4 & PG_V) == 0) {
 		db_printf("\n");
 		return;
 	}
 	pdp = pmap_pml4e_to_pdpe(pml4, va);
-	db_printf(" pdpe %#016lx", *pdp);
+	db_printf(" pdpe 0x%016lx", *pdp);
 	if ((*pdp & PG_V) == 0 || (*pdp & PG_PS) != 0) {
 		db_printf("\n");
 		return;
 	}
 	pde = pmap_pdpe_to_pde(pdp, va);
-	db_printf(" pde %#016lx", *pde);
+	db_printf(" pde 0x%016lx", *pde);
 	if ((*pde & PG_V) == 0 || (*pde & PG_PS) != 0) {
 		db_printf("\n");
 		return;
 	}
 	pte = pmap_pde_to_pte(pde, va);
-	db_printf(" pte %#016lx\n", *pte);
+	db_printf(" pte 0x%016lx\n", *pte);
 }
 
 DB_SHOW_COMMAND(phys2dmap, pmap_phys2dmap)

Modified: projects/nfsv42/sys/amd64/amd64/trap.c
==============================================================================
--- projects/nfsv42/sys/amd64/amd64/trap.c	Fri Sep 27 20:08:19 2019	(r352816)
+++ projects/nfsv42/sys/amd64/amd64/trap.c	Fri Sep 27 20:09:43 2019	(r352817)
@@ -111,7 +111,7 @@ void __noinline trap(struct trapframe *frame);
 void trap_check(struct trapframe *frame);
 void dblfault_handler(struct trapframe *frame);
 
-static int trap_pfault(struct trapframe *, int);
+static int trap_pfault(struct trapframe *, bool, int *, int *);
 static void trap_fatal(struct trapframe *, vm_offset_t);
 #ifdef KDTRACE_HOOKS
 static bool trap_user_dtrace(struct trapframe *,
@@ -155,10 +155,6 @@ static const char *const trap_msg[] = {
 	[T_DTRACE_RET] =	"DTrace pid return trap",
 };
 
-static int prot_fault_translation;
-SYSCTL_INT(_machdep, OID_AUTO, prot_fault_translation, CTLFLAG_RWTUN,
-    &prot_fault_translation, 0,
-    "Select signal to deliver on protection fault");
 static int uprintf_signal;
 SYSCTL_INT(_machdep, OID_AUTO, uprintf_signal, CTLFLAG_RWTUN,
     &uprintf_signal, 0,
@@ -192,14 +188,11 @@ trap(struct trapframe *frame)
 	struct thread *td;
 	struct proc *p;
 	register_t addr, dr6;
-	int signo, ucode;
+	int pf, signo, ucode;
 	u_int type;
 
 	td = curthread;
 	p = td->td_proc;
-	signo = 0;
-	ucode = 0;
-	addr = 0;
 	dr6 = 0;
 
 	VM_CNT_INC(v_trap);
@@ -345,47 +338,18 @@ trap(struct trapframe *frame)
 
 		case T_PAGEFLT:		/* page fault */
 			/*
-			 * Emulator can take care about this trap?
+			 * Can emulator handle this trap?
 			 */
 			if (*p->p_sysent->sv_trap != NULL &&
 			    (*p->p_sysent->sv_trap)(td) == 0)
 				return;
 
-			addr = frame->tf_addr;
-			signo = trap_pfault(frame, TRUE);
-			if (signo == -1)
+			pf = trap_pfault(frame, true, &signo, &ucode);
+			if (pf == -1)
 				return;
-			if (signo == 0)
+			if (pf == 0)
 				goto userret;
-			if (signo == SIGSEGV) {
-				ucode = SEGV_MAPERR;
-			} else if (prot_fault_translation == 0) {
-				/*
-				 * Autodetect.  This check also covers
-				 * the images without the ABI-tag ELF
-				 * note.
-				 */
-				if (SV_CURPROC_ABI() == SV_ABI_FREEBSD &&
-				    p->p_osrel >= P_OSREL_SIGSEGV) {
-					signo = SIGSEGV;
-					ucode = SEGV_ACCERR;
-				} else {
-					signo = SIGBUS;
-					ucode = T_PAGEFLT;
-				}
-			} else if (prot_fault_translation == 1) {
-				/*
-				 * Always compat mode.
-				 */
-				signo = SIGBUS;
-				ucode = T_PAGEFLT;
-			} else {
-				/*
-				 * Always SIGSEGV mode.
-				 */
-				signo = SIGSEGV;
-				ucode = SEGV_ACCERR;
-			}
+			addr = frame->tf_addr;
 			break;
 
 		case T_DIVIDE:		/* integer divide fault */
@@ -440,7 +404,7 @@ trap(struct trapframe *frame)
 		    ("kernel trap doesn't have ucred"));
 		switch (type) {
 		case T_PAGEFLT:			/* page fault */
-			(void) trap_pfault(frame, FALSE);
+			(void)trap_pfault(frame, false, NULL, NULL);
 			return;
 
 		case T_DNA:
@@ -712,17 +676,29 @@ trap_is_pti(struct trapframe *frame)
 	    (PCPU_GET(curpmap)->pm_cr3 & ~CR3_PCID_MASK));
 }
 
+/*
+ * Handle all details of a page fault.
+ * Returns:
+ * -1 if this fault was fatal, typically from kernel mode
+ *    (cannot happen, but we need to return something).
+ * 0  if this fault was handled by updating either the user or kernel
+ *    page table, execution can continue.
+ * 1  if this fault was from usermode and it was not handled, a synchronous
+ *    signal should be delivered to the thread.  *signo returns the signal
+ *    number, *ucode gives si_code.
+ */
 static int
-trap_pfault(struct trapframe *frame, int usermode)
+trap_pfault(struct trapframe *frame, bool usermode, int *signo, int *ucode)
 {
 	struct thread *td;
 	struct proc *p;
 	vm_map_t map;
-	vm_offset_t va;
+	vm_offset_t eva;
 	int rv;
 	vm_prot_t ftype;
-	vm_offset_t eva;
 
+	MPASS(!usermode || (signo != NULL && ucode != NULL));
+
 	td = curthread;
 	p = td->td_proc;
 	eva = frame->tf_addr;
@@ -771,13 +747,15 @@ trap_pfault(struct trapframe *frame, int usermode)
 			return (-1);
 		}
 	}
-	va = trunc_page(eva);
-	if (va >= VM_MIN_KERNEL_ADDRESS) {
+	if (eva >= VM_MIN_KERNEL_ADDRESS) {
 		/*
 		 * Don't allow user-mode faults in kernel address space.
 		 */
-		if (usermode)
-			return (SIGSEGV);
+		if (usermode) {
+			*signo = SIGSEGV;
+			*ucode = SEGV_MAPERR;
+			return (1);
+		}
 
 		map = kernel_map;
 	} else {
@@ -819,7 +797,11 @@ trap_pfault(struct trapframe *frame, int usermode)
 			trap_fatal(frame, eva);
 			return (-1);
 		}
-		rv = KERN_PROTECTION_FAILURE;
+		if (usermode) {
+			*signo = SIGSEGV;
+			*ucode = SEGV_PKUERR;
+			return (1);
+		}
 		goto after_vmfault;
 	}
 
@@ -843,7 +825,7 @@ trap_pfault(struct trapframe *frame, int usermode)
 		ftype = VM_PROT_READ;
 
 	/* Fault in the page. */
-	rv = vm_fault(map, va, ftype, VM_FAULT_NORMAL);
+	rv = vm_fault_trap(map, eva, ftype, VM_FAULT_NORMAL, signo, ucode);
 	if (rv == KERN_SUCCESS) {
 #ifdef HWPMC_HOOKS
 		if (ftype == VM_PROT_READ || ftype == VM_PROT_WRITE) {
@@ -858,17 +840,17 @@ trap_pfault(struct trapframe *frame, int usermode)
 #endif
 		return (0);
 	}
+
+	if (usermode)
+		return (1);
 after_vmfault:
-	if (!usermode) {
-		if (td->td_intr_nesting_level == 0 &&
-		    curpcb->pcb_onfault != NULL) {
-			frame->tf_rip = (long)curpcb->pcb_onfault;
-			return (0);
-		}
-		trap_fatal(frame, eva);
-		return (-1);
+	if (td->td_intr_nesting_level == 0 &&
+	    curpcb->pcb_onfault != NULL) {
+		frame->tf_rip = (long)curpcb->pcb_onfault;
+		return (0);
 	}
-	return ((rv == KERN_PROTECTION_FAILURE) ? SIGBUS : SIGSEGV);
+	trap_fatal(frame, eva);
+	return (-1);
 }
 
 static void

Modified: projects/nfsv42/sys/amd64/linux/linux_dummy.c
==============================================================================
--- projects/nfsv42/sys/amd64/linux/linux_dummy.c	Fri Sep 27 20:08:19 2019	(r352816)
+++ projects/nfsv42/sys/amd64/linux/linux_dummy.c	Fri Sep 27 20:09:43 2019	(r352817)
@@ -99,11 +99,13 @@ DUMMY(migrate_pages);
 DUMMY(unshare);
 /* Linux 2.6.17: */
 DUMMY(splice);
-DUMMY(tee);
 DUMMY(sync_file_range);
+DUMMY(tee);
 DUMMY(vmsplice);
 /* Linux 2.6.18: */
 DUMMY(move_pages);
+/* Linux 2.6.19: */
+DUMMY(getcpu);
 /* Linux 2.6.22: */
 DUMMY(signalfd);
 /* Linux 2.6.27: */
@@ -111,7 +113,7 @@ DUMMY(signalfd4);
 DUMMY(inotify_init1);
 /* Linux 2.6.31: */
 DUMMY(perf_event_open);
-/* Linux 2.6.38: */
+/* Linux 2.6.36: */
 DUMMY(fanotify_init);
 DUMMY(fanotify_mark);
 /* Linux 2.6.39: */
@@ -120,7 +122,6 @@ DUMMY(open_by_handle_at);
 DUMMY(clock_adjtime);
 /* Linux 3.0: */
 DUMMY(setns);
-DUMMY(getcpu);
 /* Linux 3.2: */
 DUMMY(process_vm_readv);
 DUMMY(process_vm_writev);
@@ -130,12 +131,11 @@ DUMMY(kcmp);
 DUMMY(finit_module);
 DUMMY(sched_setattr);
 DUMMY(sched_getattr);
-/* Linux 3.14: */
-DUMMY(renameat2);
 /* Linux 3.15: */
-DUMMY(seccomp);
-DUMMY(memfd_create);
 DUMMY(kexec_file_load);
+/* Linux 3.17: */
+DUMMY(memfd_create);
+DUMMY(seccomp);
 /* Linux 3.18: */
 DUMMY(bpf);
 /* Linux 3.19: */

Modified: projects/nfsv42/sys/amd64/linux/linux_proto.h
==============================================================================
--- projects/nfsv42/sys/amd64/linux/linux_proto.h	Fri Sep 27 20:08:19 2019	(r352816)
+++ projects/nfsv42/sys/amd64/linux/linux_proto.h	Fri Sep 27 20:09:43 2019	(r352817)
@@ -1125,9 +1125,9 @@ struct linux_sched_getattr_args {
 	char flags_l_[PADL_(l_uint)]; l_uint flags; char flags_r_[PADR_(l_uint)];
 };
 struct linux_renameat2_args {
-	char oldfd_l_[PADL_(l_int)]; l_int oldfd; char oldfd_r_[PADR_(l_int)];
+	char olddfd_l_[PADL_(l_int)]; l_int olddfd; char olddfd_r_[PADR_(l_int)];
 	char oldname_l_[PADL_(const char *)]; const char * oldname; char oldname_r_[PADR_(const char *)];
-	char newfd_l_[PADL_(l_int)]; l_int newfd; char newfd_r_[PADR_(l_int)];
+	char newdfd_l_[PADL_(l_int)]; l_int newdfd; char newdfd_r_[PADR_(l_int)];
 	char newname_l_[PADL_(const char *)]; const char * newname; char newname_r_[PADR_(const char *)];
 	char flags_l_[PADL_(unsigned int)]; unsigned int flags; char flags_r_[PADR_(unsigned int)];
 };
@@ -1555,6 +1555,13 @@ int	linux_io_uring_register(struct thread *, struct li
 #define	nosys	linux_nosys
 
 #endif /* COMPAT_FREEBSD11 */
+
+
+#ifdef COMPAT_FREEBSD12
+
+#define	nosys	linux_nosys
+
+#endif /* COMPAT_FREEBSD12 */
 
 #define	LINUX_SYS_AUE_linux_open	AUE_OPEN_RWTC
 #define	LINUX_SYS_AUE_linux_newstat	AUE_STAT

Modified: projects/nfsv42/sys/amd64/linux/linux_systrace_args.c
==============================================================================
--- projects/nfsv42/sys/amd64/linux/linux_systrace_args.c	Fri Sep 27 20:08:19 2019	(r352816)
+++ projects/nfsv42/sys/amd64/linux/linux_systrace_args.c	Fri Sep 27 20:09:43 2019	(r352817)
@@ -2297,9 +2297,9 @@ systrace_args(int sysnum, void *params, uint64_t *uarg
 	/* linux_renameat2 */
 	case 316: {
 		struct linux_renameat2_args *p = params;
-		iarg[0] = p->oldfd; /* l_int */
+		iarg[0] = p->olddfd; /* l_int */
 		uarg[1] = (intptr_t) p->oldname; /* const char * */
-		iarg[2] = p->newfd; /* l_int */
+		iarg[2] = p->newdfd; /* l_int */
 		uarg[3] = (intptr_t) p->newname; /* const char * */
 		uarg[4] = p->flags; /* unsigned int */
 		*n_args = 5;

Modified: projects/nfsv42/sys/amd64/linux/syscalls.master
==============================================================================
--- projects/nfsv42/sys/amd64/linux/syscalls.master	Fri Sep 27 20:08:19 2019	(r352816)
+++ projects/nfsv42/sys/amd64/linux/syscalls.master	Fri Sep 27 20:09:43 2019	(r352817)
@@ -550,8 +550,8 @@
 315	AUE_NULL	STD	{ int linux_sched_getattr(l_pid_t pid,		\
 				    void *attr, l_uint size, l_uint flags); }
 ; Linux 3.15:
-316	AUE_NULL	STD	{ int linux_renameat2(l_int oldfd,		\
-				    const char *oldname, l_int newfd,		\
+316	AUE_NULL	STD	{ int linux_renameat2(l_int olddfd,		\
+				    const char *oldname, l_int newdfd,		\
 				    const char *newname, unsigned int flags); }
 ; Linux 3.17:
 317	AUE_NULL	STD	{ int linux_seccomp(l_uint op, l_uint flags,	\

Modified: projects/nfsv42/sys/amd64/linux32/linux32_dummy.c
==============================================================================
--- projects/nfsv42/sys/amd64/linux32/linux32_dummy.c	Fri Sep 27 20:08:19 2019	(r352816)
+++ projects/nfsv42/sys/amd64/linux32/linux32_dummy.c	Fri Sep 27 20:09:43 2019	(r352817)
@@ -119,7 +119,7 @@ DUMMY(signalfd4);
 DUMMY(inotify_init1);
 /* Linux 2.6.31: */
 DUMMY(perf_event_open);
-/* Linux 2.6.33: */
+/* Linux 2.6.36: */
 DUMMY(fanotify_init);
 DUMMY(fanotify_mark);
 /* Linux 2.6.39: */
@@ -137,11 +137,9 @@ DUMMY(kcmp);
 DUMMY(finit_module);
 DUMMY(sched_setattr);
 DUMMY(sched_getattr);
-/* Linux 3.14: */
-DUMMY(renameat2);
-/* Linux 3.15: */
-DUMMY(seccomp);
+/* Linux 3.17: */
 DUMMY(memfd_create);
+DUMMY(seccomp);
 /* Linux 3.18: */
 DUMMY(bpf);
 /* Linux 3.19: */

Modified: projects/nfsv42/sys/amd64/linux32/linux32_proto.h
==============================================================================
--- projects/nfsv42/sys/amd64/linux32/linux32_proto.h	Fri Sep 27 20:08:19 2019	(r352816)
+++ projects/nfsv42/sys/amd64/linux32/linux32_proto.h	Fri Sep 27 20:09:43 2019	(r352817)
@@ -1199,9 +1199,9 @@ struct linux_sched_getattr_args {
 	char flags_l_[PADL_(l_uint)]; l_uint flags; char flags_r_[PADR_(l_uint)];
 };
 struct linux_renameat2_args {
-	char oldfd_l_[PADL_(l_int)]; l_int oldfd; char oldfd_r_[PADR_(l_int)];
+	char olddfd_l_[PADL_(l_int)]; l_int olddfd; char olddfd_r_[PADR_(l_int)];
 	char oldname_l_[PADL_(const char *)]; const char * oldname; char oldname_r_[PADR_(const char *)];
-	char newfd_l_[PADL_(l_int)]; l_int newfd; char newfd_r_[PADR_(l_int)];
+	char newdfd_l_[PADL_(l_int)]; l_int newdfd; char newdfd_r_[PADR_(l_int)];
 	char newname_l_[PADL_(const char *)]; const char * newname; char newname_r_[PADR_(const char *)];
 	char flags_l_[PADL_(unsigned int)]; unsigned int flags; char flags_r_[PADR_(unsigned int)];
 };
@@ -1895,6 +1895,13 @@ int	linux_io_uring_register(struct thread *, struct li
 #define	nosys	linux_nosys
 
 #endif /* COMPAT_FREEBSD11 */
+
+
+#ifdef COMPAT_FREEBSD12
+
+#define	nosys	linux_nosys
+
+#endif /* COMPAT_FREEBSD12 */
 
 #define	LINUX32_SYS_AUE_linux_exit	AUE_EXIT
 #define	LINUX32_SYS_AUE_linux_fork	AUE_FORK

Modified: projects/nfsv42/sys/amd64/linux32/linux32_systrace_args.c
==============================================================================
--- projects/nfsv42/sys/amd64/linux32/linux32_systrace_args.c	Fri Sep 27 20:08:19 2019	(r352816)
+++ projects/nfsv42/sys/amd64/linux32/linux32_systrace_args.c	Fri Sep 27 20:09:43 2019	(r352817)
@@ -2424,9 +2424,9 @@ systrace_args(int sysnum, void *params, uint64_t *uarg
 	/* linux_renameat2 */
 	case 353: {
 		struct linux_renameat2_args *p = params;
-		iarg[0] = p->oldfd; /* l_int */
+		iarg[0] = p->olddfd; /* l_int */
 		uarg[1] = (intptr_t) p->oldname; /* const char * */
-		iarg[2] = p->newfd; /* l_int */
+		iarg[2] = p->newdfd; /* l_int */
 		uarg[3] = (intptr_t) p->newname; /* const char * */
 		uarg[4] = p->flags; /* unsigned int */
 		*n_args = 5;

Modified: projects/nfsv42/sys/amd64/linux32/syscalls.master
==============================================================================
--- projects/nfsv42/sys/amd64/linux32/syscalls.master	Fri Sep 27 20:08:19 2019	(r352816)
+++ projects/nfsv42/sys/amd64/linux32/syscalls.master	Fri Sep 27 20:09:43 2019	(r352817)
@@ -610,8 +610,8 @@
 352	AUE_NULL	STD	{ int linux_sched_getattr(l_pid_t pid,		\
 				    void *attr, l_uint size, l_uint flags); }
 ; Linux 3.15:
-353	AUE_NULL	STD	{ int linux_renameat2(l_int oldfd,		\
-				    const char *oldname, l_int newfd, 		\
+353	AUE_NULL	STD	{ int linux_renameat2(l_int olddfd,		\
+				    const char *oldname, l_int newdfd, 		\
 				    const char *newname, unsigned int flags); }
 ; Linux 3.17:
 354	AUE_NULL	STD	{ int linux_seccomp(l_uint op, l_uint flags,	\

Modified: projects/nfsv42/sys/amd64/sgx/sgx.c
==============================================================================
--- projects/nfsv42/sys/amd64/sgx/sgx.c	Fri Sep 27 20:08:19 2019	(r352816)
+++ projects/nfsv42/sys/amd64/sgx/sgx.c	Fri Sep 27 20:09:43 2019	(r352817)
@@ -357,9 +357,7 @@ sgx_page_remove(struct sgx_softc *sc, vm_page_t p)
 	vm_paddr_t pa;
 	uint64_t offs;
 
-	vm_page_lock(p);
 	(void)vm_page_remove(p);
-	vm_page_unlock(p);
 
 	dprintf("%s: p->pidx %ld\n", __func__, p->pindex);
 

Modified: projects/nfsv42/sys/amd64/vmm/vmm.c
==============================================================================
--- projects/nfsv42/sys/amd64/vmm/vmm.c	Fri Sep 27 20:08:19 2019	(r352816)
+++ projects/nfsv42/sys/amd64/vmm/vmm.c	Fri Sep 27 20:09:43 2019	(r352817)
@@ -1002,9 +1002,7 @@ vm_gpa_release(void *cookie)
 {
 	vm_page_t m = cookie;
 
-	vm_page_lock(m);
 	vm_page_unwire(m, PQ_ACTIVE);
-	vm_page_unlock(m);
 }
 
 int
@@ -1413,7 +1411,7 @@ vm_handle_paging(struct vm *vm, int vcpuid, bool *retu
 	}
 
 	map = &vm->vmspace->vm_map;
-	rv = vm_fault(map, vme->u.paging.gpa, ftype, VM_FAULT_NORMAL);
+	rv = vm_fault(map, vme->u.paging.gpa, ftype, VM_FAULT_NORMAL, NULL);
 
 	VCPU_CTR3(vm, vcpuid, "vm_handle_paging rv = %d, gpa = %#lx, "
 	    "ftype = %d", rv, vme->u.paging.gpa, ftype);

Modified: projects/nfsv42/sys/arm/arm/pmap-v4.c
==============================================================================
--- projects/nfsv42/sys/arm/arm/pmap-v4.c	Fri Sep 27 20:08:19 2019	(r352816)
+++ projects/nfsv42/sys/arm/arm/pmap-v4.c	Fri Sep 27 20:09:43 2019	(r352817)
@@ -3415,14 +3415,14 @@ pmap_extract_and_hold(pmap_t pmap, vm_offset_t va, vm_
 	struct l2_dtable *l2;
 	pd_entry_t l1pd;
 	pt_entry_t *ptep, pte;
-	vm_paddr_t pa, paddr;
-	vm_page_t m = NULL;
+	vm_paddr_t pa;
+	vm_page_t m;
 	u_int l1idx;
+
 	l1idx = L1_IDX(va);
-	paddr = 0;
+	m = NULL;
 

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


More information about the svn-src-projects mailing list