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