aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2018-11-04 15:49:06 +0000
committerDimitry Andric <dim@FreeBSD.org>2018-11-04 15:49:06 +0000
commit2a22df74e9fceaffd62ee437de08383d6cf8cfe0 (patch)
treed4887f0719a9a8b98c787012703fa65e21554dc8 /sys
parent689486003b2d4637b61b61d5a30bf98fb11ddc16 (diff)
parent6d080f8660b370f83eb10a840b6d14b6dd84a1de (diff)
Notes
Diffstat (limited to 'sys')
-rw-r--r--sys/amd64/amd64/machdep.c51
-rw-r--r--sys/amd64/amd64/trap.c2
-rw-r--r--sys/amd64/conf/GENERIC1
-rw-r--r--sys/amd64/conf/MINIMAL1
-rw-r--r--sys/amd64/include/md_var.h4
-rw-r--r--sys/amd64/vmm/amd/svm_msr.c5
-rw-r--r--sys/amd64/vmm/intel/vmcs.h8
-rw-r--r--sys/arm/arm/trap-v4.c2
-rw-r--r--sys/arm/arm/trap-v6.c2
-rw-r--r--sys/arm/conf/std.arm2
-rw-r--r--sys/arm/conf/std.armv62
-rw-r--r--sys/arm/conf/std.armv72
-rw-r--r--sys/arm64/arm64/locore.S2
-rw-r--r--sys/arm64/arm64/mp_machdep.c79
-rw-r--r--sys/arm64/arm64/pmap.c32
-rw-r--r--sys/arm64/arm64/swtch.S4
-rw-r--r--sys/arm64/arm64/trap.c2
-rw-r--r--sys/arm64/conf/GENERIC1
-rw-r--r--sys/arm64/include/armreg.h21
-rw-r--r--sys/arm64/include/hypervisor.h11
-rw-r--r--sys/cam/cam_periph.c6
-rw-r--r--sys/cam/scsi/scsi_da.c7
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c36
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c2
-rw-r--r--sys/compat/freebsd32/freebsd32_misc.c2
-rw-r--r--sys/compat/freebsd32/freebsd32_proto.h34
-rw-r--r--sys/compat/freebsd32/freebsd32_systrace_args.c244
-rw-r--r--sys/compat/freebsd32/freebsd32_util.h2
-rw-r--r--sys/compat/freebsd32/syscalls.master160
-rw-r--r--sys/compat/linuxkpi/common/include/linux/dmapool.h7
-rw-r--r--sys/compat/linuxkpi/common/include/linux/gfp.h2
-rw-r--r--sys/compat/linuxkpi/common/include/linux/kernel.h4
-rw-r--r--sys/compat/linuxkpi/common/src/linux_compat.c15
-rw-r--r--sys/conf/Makefile.amd643
-rw-r--r--sys/conf/Makefile.i3863
-rw-r--r--sys/conf/files.amd641
-rw-r--r--sys/conf/kern.mk4
-rw-r--r--sys/conf/kern.post.mk28
-rw-r--r--sys/conf/newvers.sh32
-rw-r--r--sys/conf/options1
-rw-r--r--sys/contrib/dev/acpica/changes.txt50
-rw-r--r--sys/contrib/dev/acpica/common/dmtbdump3.c52
-rw-r--r--sys/contrib/dev/acpica/common/dmtbinfo3.c20
-rw-r--r--sys/contrib/dev/acpica/compiler/aslcompile.c2
-rw-r--r--sys/contrib/dev/acpica/compiler/aslerror.c4
-rw-r--r--sys/contrib/dev/acpica/compiler/aslload.c97
-rw-r--r--sys/contrib/dev/acpica/compiler/aslmain.c2
-rw-r--r--sys/contrib/dev/acpica/compiler/aslmessages.c6
-rw-r--r--sys/contrib/dev/acpica/compiler/aslmessages.h2
-rw-r--r--sys/contrib/dev/acpica/compiler/aslpredef.c2
-rw-r--r--sys/contrib/dev/acpica/compiler/aslxref.c46
-rw-r--r--sys/contrib/dev/acpica/compiler/dtio.c28
-rw-r--r--sys/contrib/dev/acpica/compiler/dttable2.c66
-rw-r--r--sys/contrib/dev/acpica/compiler/prscan.c1
-rw-r--r--sys/contrib/dev/acpica/components/debugger/dbxface.c122
-rw-r--r--sys/contrib/dev/acpica/components/dispatcher/dsopcode.c3
-rw-r--r--sys/contrib/dev/acpica/components/dispatcher/dswload2.c9
-rw-r--r--sys/contrib/dev/acpica/components/namespace/nsaccess.c21
-rw-r--r--sys/contrib/dev/acpica/components/parser/psloop.c22
-rw-r--r--sys/contrib/dev/acpica/components/parser/psobject.c2
-rw-r--r--sys/contrib/dev/acpica/components/tables/tbxfload.c2
-rw-r--r--sys/contrib/dev/acpica/include/acdisasm.h2
-rw-r--r--sys/contrib/dev/acpica/include/acnamesp.h1
-rw-r--r--sys/contrib/dev/acpica/include/acpixf.h9
-rw-r--r--sys/contrib/dev/acpica/include/actbinfo.h2
-rw-r--r--sys/contrib/dev/acpica/include/actbl3.h28
-rw-r--r--sys/dev/acpica/acpi_battery.c5
-rw-r--r--sys/dev/ahci/ahci.c50
-rw-r--r--sys/dev/ahci/ahci.h2
-rw-r--r--sys/dev/ahci/ahci_pci.c1
-rw-r--r--sys/dev/atkbdc/atkbd.c2
-rw-r--r--sys/dev/cxgbe/crypto/t4_crypto.c116
-rw-r--r--sys/dev/cxgbe/iw_cxgbe/cm.c47
-rw-r--r--sys/dev/cxgbe/iw_cxgbe/qp.c16
-rw-r--r--sys/dev/cxgbe/t4_main.c40
-rw-r--r--sys/dev/cxgbe/t4_sge.c83
-rw-r--r--sys/dev/evdev/cdev.c13
-rw-r--r--sys/dev/evdev/evdev.c44
-rw-r--r--sys/dev/evdev/evdev_private.h12
-rw-r--r--sys/dev/filemon/filemon_wrapper.c6
-rw-r--r--sys/dev/hwpmc/hwpmc_amd.c151
-rw-r--r--sys/dev/hwpmc/hwpmc_amd.h48
-rw-r--r--sys/dev/hwpmc/hwpmc_logging.c16
-rw-r--r--sys/dev/hwpmc/hwpmc_mod.c54
-rw-r--r--sys/dev/ixl/iavf_vc.c6
-rw-r--r--sys/dev/ixl/if_iavf.c4
-rw-r--r--sys/dev/kbdmux/kbdmux.c2
-rw-r--r--sys/dev/random/random_harvestq.c25
-rw-r--r--sys/dev/sound/pci/hda/hdac.c2
-rw-r--r--sys/dev/usb/controller/ehci_pci.c3
-rw-r--r--sys/dev/usb/input/ukbd.c2
-rw-r--r--sys/fs/ext2fs/ext2_vnops.c4
-rw-r--r--sys/fs/fuse/fuse_vnops.c2
-rw-r--r--sys/fs/nandfs/nandfs_vnops.c4
-rw-r--r--sys/fs/nfs/nfs_var.h2
-rw-r--r--sys/fs/nfsclient/nfs_clrpcops.c2
-rw-r--r--sys/fs/nfsclient/nfs_clvnops.c15
-rw-r--r--sys/fs/tmpfs/tmpfs.h4
-rw-r--r--sys/fs/tmpfs/tmpfs_subr.c4
-rw-r--r--sys/fs/tmpfs/tmpfs_vnops.c2
-rw-r--r--sys/geom/concat/g_concat.c35
-rw-r--r--sys/geom/concat/g_concat.h1
-rw-r--r--sys/geom/geom.h4
-rw-r--r--sys/geom/geom_disk.h7
-rw-r--r--sys/geom/geom_dump.c8
-rw-r--r--sys/geom/geom_redboot.c6
-rw-r--r--sys/geom/geom_subr.c4
-rw-r--r--sys/geom/nop/g_nop.c4
-rw-r--r--sys/geom/part/g_part.c6
-rw-r--r--sys/geom/raid/g_raid.c2
-rw-r--r--sys/geom/stripe/g_stripe.c23
-rw-r--r--sys/geom/stripe/g_stripe.h2
-rw-r--r--sys/geom/uzip/g_uzip.c6
-rw-r--r--sys/i386/conf/GENERIC1
-rw-r--r--sys/i386/conf/MINIMAL1
-rw-r--r--sys/i386/i386/pmap.c4
-rw-r--r--sys/i386/i386/trap.c2
-rw-r--r--sys/kern/kern_cpuset.c39
-rw-r--r--sys/kern/kern_exec.c2
-rw-r--r--sys/kern/kern_malloc.c30
-rw-r--r--sys/kern/kern_mbuf.c6
-rw-r--r--sys/kern/kern_pmc.c32
-rw-r--r--sys/kern/kern_shutdown.c9
-rw-r--r--sys/kern/kern_sysctl.c47
-rw-r--r--sys/kern/link_elf.c12
-rw-r--r--sys/kern/link_elf_obj.c30
-rw-r--r--sys/kern/subr_busdma_bufalloc.c10
-rw-r--r--sys/kern/subr_epoch.c9
-rw-r--r--sys/kern/subr_gtaskqueue.c56
-rw-r--r--sys/kern/subr_kdb.c12
-rw-r--r--sys/kern/sys_generic.c7
-rw-r--r--sys/kern/sys_process.c5
-rw-r--r--sys/kern/syscalls.master4117
-rw-r--r--sys/kern/systrace_args.c260
-rw-r--r--sys/kern/vfs_syscalls.c78
-rw-r--r--sys/kern/vnode_if.src2
-rw-r--r--sys/mips/mips/trap.c2
-rw-r--r--sys/modules/bios/smapi/Makefile2
-rw-r--r--sys/modules/linuxkpi/Makefile3
-rw-r--r--sys/net/if.c3
-rw-r--r--sys/net/if_ethersubr.c20
-rw-r--r--sys/net/if_lagg.c67
-rw-r--r--sys/net/pfvar.h33
-rw-r--r--sys/net/vnet.c2
-rw-r--r--sys/netinet/icmp6.h4
-rw-r--r--sys/netinet/in_pcb.c59
-rw-r--r--sys/netinet/ip_carp.c15
-rw-r--r--sys/netinet/ip_icmp.c1
-rw-r--r--sys/netinet/netdump/netdump_client.c24
-rw-r--r--sys/netinet/tcp_syncache.c21
-rw-r--r--sys/netinet6/in6_pcb.c6
-rw-r--r--sys/netinet6/nd6.h3
-rw-r--r--sys/netinet6/nd6_rtr.c38
-rw-r--r--sys/netpfil/pf/if_pfsync.c76
-rw-r--r--sys/netpfil/pf/pf.c42
-rw-r--r--sys/netpfil/pf/pf_if.c15
-rw-r--r--sys/netpfil/pf/pf_ioctl.c22
-rw-r--r--sys/netpfil/pf/pf_norm.c294
-rw-r--r--sys/powerpc/conf/GENERIC1
-rw-r--r--sys/powerpc/conf/GENERIC641
-rw-r--r--sys/powerpc/mpc85xx/pci_mpc85xx.c13
-rw-r--r--sys/powerpc/powermac/fcu.c6
-rw-r--r--sys/powerpc/powerpc/trap.c2
-rw-r--r--sys/riscv/conf/GENERIC2
-rw-r--r--sys/riscv/include/pte.h2
-rw-r--r--sys/riscv/riscv/intr_machdep.c4
-rw-r--r--sys/riscv/riscv/locore.S2
-rw-r--r--sys/riscv/riscv/machdep.c7
-rw-r--r--sys/riscv/riscv/mp_machdep.c2
-rw-r--r--sys/riscv/riscv/pmap.c23
-rw-r--r--sys/riscv/riscv/trap.c6
-rw-r--r--sys/security/audit/audit.h2
-rw-r--r--sys/security/audit/audit_arg.c2
-rw-r--r--sys/sparc64/conf/GENERIC1
-rw-r--r--sys/sys/domainset.h3
-rw-r--r--sys/sys/elf_common.h1
-rw-r--r--sys/sys/epoch_private.h11
-rw-r--r--sys/sys/gtaskqueue.h5
-rw-r--r--sys/sys/imgact.h2
-rw-r--r--sys/sys/kdb.h2
-rw-r--r--sys/sys/malloc.h10
-rw-r--r--sys/sys/mount.h3
-rw-r--r--sys/sys/param.h2
-rw-r--r--sys/sys/queue.h8
-rw-r--r--sys/sys/random.h3
-rw-r--r--sys/sys/syscallsubr.h52
-rw-r--r--sys/sys/sysctl.h39
-rw-r--r--sys/sys/sysproto.h158
-rw-r--r--sys/sys/types.h6
-rw-r--r--sys/tools/embed_mfs.sh15
-rw-r--r--sys/ufs/ufs/ufs_vnops.c6
-rw-r--r--sys/vm/uma_core.c23
-rw-r--r--sys/vm/vm_extern.h14
-rw-r--r--sys/vm/vm_fault.c10
-rw-r--r--sys/vm/vm_init.c8
-rw-r--r--sys/vm/vm_kern.c41
-rw-r--r--sys/vm/vm_map.c11
-rw-r--r--sys/vm/vm_map.h19
-rw-r--r--sys/vm/vm_object.c5
-rw-r--r--sys/vm/vm_page.c5
-rw-r--r--sys/vm/vm_pageout.c42
-rw-r--r--sys/x86/iommu/busdma_dmar.c19
-rw-r--r--sys/x86/pci/pci_early_quirks.c287
-rw-r--r--sys/x86/pci/pci_early_quirks.h479
-rw-r--r--sys/x86/x86/busdma_bounce.c38
205 files changed, 6727 insertions, 2524 deletions
diff --git a/sys/amd64/amd64/machdep.c b/sys/amd64/amd64/machdep.c
index 87e018e09b8f..6e36ae975239 100644
--- a/sys/amd64/amd64/machdep.c
+++ b/sys/amd64/amd64/machdep.c
@@ -317,6 +317,12 @@ cpu_startup(dummy)
printf("avail memory = %ju (%ju MB)\n",
ptoa((uintmax_t)vm_free_count()),
ptoa((uintmax_t)vm_free_count()) / 1048576);
+#ifdef DEV_PCI
+ if (bootverbose && intel_graphics_stolen_base != 0)
+ printf("intel stolen mem: base %#jx size %ju MB\n",
+ (uintmax_t)intel_graphics_stolen_base,
+ (uintmax_t)intel_graphics_stolen_size / 1024 / 1024);
+#endif
/*
* Set up buffers, so they can be used to read disk labels.
@@ -1792,6 +1798,11 @@ hammer_time(u_int64_t modulep, u_int64_t physfree)
/* now running on new page tables, configured,and u/iom is accessible */
+#ifdef DEV_PCI
+ /* This call might adjust phys_avail[]. */
+ pci_early_quirks();
+#endif
+
if (late_console)
cninit();
@@ -2616,15 +2627,14 @@ set_pcb_flags_raw(struct pcb *pcb, const u_int flags)
* the PCB_FULL_IRET flag is set. We disable interrupts to sync with
* context switches.
*/
-void
-set_pcb_flags(struct pcb *pcb, const u_int flags)
+static void
+set_pcb_flags_fsgsbase(struct pcb *pcb, const u_int flags)
{
register_t r;
if (curpcb == pcb &&
(flags & PCB_FULL_IRET) != 0 &&
- (pcb->pcb_flags & PCB_FULL_IRET) == 0 &&
- (cpu_stdext_feature & CPUID_STDEXT_FSGSBASE) != 0) {
+ (pcb->pcb_flags & PCB_FULL_IRET) == 0) {
r = intr_disable();
if ((pcb->pcb_flags & PCB_FULL_IRET) == 0) {
if (rfs() == _ufssel)
@@ -2639,6 +2649,13 @@ set_pcb_flags(struct pcb *pcb, const u_int flags)
}
}
+DEFINE_IFUNC(, void, set_pcb_flags, (struct pcb *, const u_int), static)
+{
+
+ return ((cpu_stdext_feature & CPUID_STDEXT_FSGSBASE) != 0 ?
+ set_pcb_flags_fsgsbase : set_pcb_flags_raw);
+}
+
void
clear_pcb_flags(struct pcb *pcb, const u_int flags)
{
@@ -2683,25 +2700,31 @@ DEFINE_IFUNC(, void *, memset, (void *, int, size_t), static)
{
return ((cpu_stdext_feature & CPUID_STDEXT_ERMS) != 0 ?
- memset_erms : memset_std);
+ memset_erms : memset_std);
}
-void *memmove_std(void * _Nonnull dst, const void * _Nonnull src, size_t len);
-void *memmove_erms(void * _Nonnull dst, const void * _Nonnull src, size_t len);
-DEFINE_IFUNC(, void *, memmove, (void * _Nonnull, const void * _Nonnull, size_t), static)
+void *memmove_std(void * _Nonnull dst, const void * _Nonnull src,
+ size_t len);
+void *memmove_erms(void * _Nonnull dst, const void * _Nonnull src,
+ size_t len);
+DEFINE_IFUNC(, void *, memmove, (void * _Nonnull, const void * _Nonnull,
+ size_t), static)
{
return ((cpu_stdext_feature & CPUID_STDEXT_ERMS) != 0 ?
- memmove_erms : memmove_std);
+ memmove_erms : memmove_std);
}
-void *memcpy_std(void * _Nonnull dst, const void * _Nonnull src, size_t len);
-void *memcpy_erms(void * _Nonnull dst, const void * _Nonnull src, size_t len);
-DEFINE_IFUNC(, void *, memcpy, (void * _Nonnull, const void * _Nonnull, size_t), static)
+void *memcpy_std(void * _Nonnull dst, const void * _Nonnull src,
+ size_t len);
+void *memcpy_erms(void * _Nonnull dst, const void * _Nonnull src,
+ size_t len);
+DEFINE_IFUNC(, void *, memcpy, (void * _Nonnull, const void * _Nonnull,size_t),
+ static)
{
return ((cpu_stdext_feature & CPUID_STDEXT_ERMS) != 0 ?
- memcpy_erms : memcpy_std);
+ memcpy_erms : memcpy_std);
}
void pagezero_std(void *addr);
@@ -2710,5 +2733,5 @@ DEFINE_IFUNC(, void , pagezero, (void *), static)
{
return ((cpu_stdext_feature & CPUID_STDEXT_ERMS) != 0 ?
- pagezero_erms : pagezero_std);
+ pagezero_erms : pagezero_std);
}
diff --git a/sys/amd64/amd64/trap.c b/sys/amd64/amd64/trap.c
index 27faa7c14fac..7a0973025296 100644
--- a/sys/amd64/amd64/trap.c
+++ b/sys/amd64/amd64/trap.c
@@ -916,7 +916,7 @@ trap_fatal(frame, eva)
curproc->p_pid, curthread->td_name);
#ifdef KDB
- if (debugger_on_panic) {
+ if (debugger_on_trap) {
kdb_why = KDB_WHY_TRAP;
handled = kdb_trap(type, 0, frame);
kdb_why = KDB_WHY_UNSET;
diff --git a/sys/amd64/conf/GENERIC b/sys/amd64/conf/GENERIC
index d3cdef23bbc9..f74db37a283e 100644
--- a/sys/amd64/conf/GENERIC
+++ b/sys/amd64/conf/GENERIC
@@ -99,6 +99,7 @@ options INVARIANT_SUPPORT # Extra sanity checks of internal structures, require
options WITNESS # Enable checks to detect deadlocks and cycles
options WITNESS_SKIPSPIN # Don't run witness on spinlocks for speed
options MALLOC_DEBUG_MAXZONES=8 # Separate malloc(9) zones
+options VERBOSE_SYSINIT=0 # Support debug.verbose_sysinit, off by default
# Kernel dump features.
options EKCD # Support for encrypted kernel dumps
diff --git a/sys/amd64/conf/MINIMAL b/sys/amd64/conf/MINIMAL
index 011400f3967f..4a2bb7a0920b 100644
--- a/sys/amd64/conf/MINIMAL
+++ b/sys/amd64/conf/MINIMAL
@@ -91,6 +91,7 @@ options INVARIANT_SUPPORT # Extra sanity checks of internal structures, require
options WITNESS # Enable checks to detect deadlocks and cycles
options WITNESS_SKIPSPIN # Don't run witness on spinlocks for speed
options MALLOC_DEBUG_MAXZONES=8 # Separate malloc(9) zones
+options VERBOSE_SYSINIT=0 # Support debug.verbose_sysinit, off by default
# Make an SMP-capable kernel by default
options SMP # Symmetric MultiProcessor Kernel
diff --git a/sys/amd64/include/md_var.h b/sys/amd64/include/md_var.h
index 5296517595f0..cd8036e25a29 100644
--- a/sys/amd64/include/md_var.h
+++ b/sys/amd64/include/md_var.h
@@ -43,6 +43,9 @@ extern int hw_ssb_disable;
extern int nmi_flush_l1d_sw;
extern int syscall_ret_l1d_flush_mode;
+extern vm_paddr_t intel_graphics_stolen_base;
+extern vm_paddr_t intel_graphics_stolen_size;
+
/*
* The file "conf/ldscript.amd64" defines the symbol "kernphys". Its
* value is the physical address at which the kernel is loaded.
@@ -79,5 +82,6 @@ void setidt(int idx, alias_for_inthand_t *func, int typ, int dpl, int ist);
void sse2_pagezero(void *addr);
struct savefpu *get_pcb_user_save_td(struct thread *td);
struct savefpu *get_pcb_user_save_pcb(struct pcb *pcb);
+void pci_early_quirks(void);
#endif /* !_MACHINE_MD_VAR_H_ */
diff --git a/sys/amd64/vmm/amd/svm_msr.c b/sys/amd64/vmm/amd/svm_msr.c
index 0417983233a9..67c43100f168 100644
--- a/sys/amd64/vmm/amd/svm_msr.c
+++ b/sys/amd64/vmm/amd/svm_msr.c
@@ -122,9 +122,8 @@ svm_rdmsr(struct svm_softc *sc, int vcpu, u_int num, uint64_t *result,
case MSR_MTRR16kBase ... MSR_MTRR16kBase + 1:
case MSR_MTRR64kBase:
case MSR_SYSCFG:
- *result = 0;
- break;
case MSR_AMDK8_IPM:
+ case MSR_EXTFEATURES:
*result = 0;
break;
default:
@@ -163,6 +162,8 @@ svm_wrmsr(struct svm_softc *sc, int vcpu, u_int num, uint64_t val, bool *retu)
* Ignore writes to microcode update register.
*/
break;
+ case MSR_EXTFEATURES:
+ break;
default:
error = EINVAL;
break;
diff --git a/sys/amd64/vmm/intel/vmcs.h b/sys/amd64/vmm/intel/vmcs.h
index a1404834b7fa..29e0263fb9f2 100644
--- a/sys/amd64/vmm/intel/vmcs.h
+++ b/sys/amd64/vmm/intel/vmcs.h
@@ -338,6 +338,14 @@ vmcs_write(uint32_t encoding, uint64_t val)
#define EXIT_REASON_WBINVD 54
#define EXIT_REASON_XSETBV 55
#define EXIT_REASON_APIC_WRITE 56
+#define EXIT_REASON_RDRAND 57
+#define EXIT_REASON_INVPCID 58
+#define EXIT_REASON_VMFUNC 59
+#define EXIT_REASON_ENCLS 60
+#define EXIT_REASON_RDSEED 61
+#define EXIT_REASON_PM_LOG_FULL 62
+#define EXIT_REASON_XSAVES 63
+#define EXIT_REASON_XRSTORS 64
/*
* NMI unblocking due to IRET.
diff --git a/sys/arm/arm/trap-v4.c b/sys/arm/arm/trap-v4.c
index cd701c95f6ab..d2690ba46d62 100644
--- a/sys/arm/arm/trap-v4.c
+++ b/sys/arm/arm/trap-v4.c
@@ -456,7 +456,7 @@ dab_fatal(struct trapframe *tf, u_int fsr, u_int far, struct thread *td,
printf(", pc =%08x\n\n", tf->tf_pc);
#ifdef KDB
- if (debugger_on_panic) {
+ if (debugger_on_trap) {
kdb_why = KDB_WHY_TRAP;
handled = kdb_trap(fsr, 0, tf);
kdb_why = KDB_WHY_UNSET;
diff --git a/sys/arm/arm/trap-v6.c b/sys/arm/arm/trap-v6.c
index ae78401e91a3..58941f06ae99 100644
--- a/sys/arm/arm/trap-v6.c
+++ b/sys/arm/arm/trap-v6.c
@@ -599,7 +599,7 @@ abort_fatal(struct trapframe *tf, u_int idx, u_int fsr, u_int far,
printf(", pc =%08x\n\n", tf->tf_pc);
#ifdef KDB
- if (debugger_on_panic) {
+ if (debugger_on_trap) {
kdb_why = KDB_WHY_TRAP;
kdb_trap(fsr, 0, tf);
kdb_why = KDB_WHY_UNSET;
diff --git a/sys/arm/conf/std.arm b/sys/arm/conf/std.arm
index d69f06c579f4..7ce4823b486f 100644
--- a/sys/arm/conf/std.arm
+++ b/sys/arm/conf/std.arm
@@ -20,6 +20,7 @@ options WITNESS_SKIPSPIN # Don't run witness on spinlocks for speed
#options MALLOC_DEBUG_MAXZONES=8 # Separate malloc(9) zones
options ALT_BREAK_TO_DEBUGGER # Enter debugger on keyboard escape sequence
options USB_DEBUG # Enable usb debug support code
+options VERBOSE_SYSINIT=0 # Support debug.verbose_sysinit, off by default
# Optional extras, never enabled by default:
#options BOOTVERBOSE
@@ -31,7 +32,6 @@ options USB_DEBUG # Enable usb debug support code
#options KTR_VERBOSE=0
#options USB_REQ_DEBUG
#options USB_VERBOSE
-#options VERBOSE_SYSINIT # Enable verbose sysinit messages
diff --git a/sys/arm/conf/std.armv6 b/sys/arm/conf/std.armv6
index 52685a9b13bf..742dbc42bf49 100644
--- a/sys/arm/conf/std.armv6
+++ b/sys/arm/conf/std.armv6
@@ -70,6 +70,7 @@ options WITNESS_SKIPSPIN # Don't run witness on spinlocks for speed
options MALLOC_DEBUG_MAXZONES=8 # Separate malloc(9) zones
options ALT_BREAK_TO_DEBUGGER # Enter debugger on keyboard escape sequence
options USB_DEBUG # Enable usb debug support code
+options VERBOSE_SYSINIT=0 # Support debug.verbose_sysinit, off by default
# Optional extras, never enabled by default:
#options BOOTVERBOSE
@@ -81,5 +82,4 @@ options USB_DEBUG # Enable usb debug support code
#options KTR_VERBOSE=0
#options USB_REQ_DEBUG
#options USB_VERBOSE
-#options VERBOSE_SYSINIT # Enable verbose sysinit messages
diff --git a/sys/arm/conf/std.armv7 b/sys/arm/conf/std.armv7
index c3ab6852e615..428b7b144006 100644
--- a/sys/arm/conf/std.armv7
+++ b/sys/arm/conf/std.armv7
@@ -70,6 +70,7 @@ options WITNESS_SKIPSPIN # Don't run witness on spinlocks for speed
options MALLOC_DEBUG_MAXZONES=8 # Separate malloc(9) zones
options ALT_BREAK_TO_DEBUGGER # Enter debugger on keyboard escape sequence
options USB_DEBUG # Enable usb debug support code
+options VERBOSE_SYSINIT=0 # Support debug.verbose_sysinit, off by default
# Optional extras, never enabled by default:
#options BOOTVERBOSE
@@ -81,4 +82,3 @@ options USB_DEBUG # Enable usb debug support code
#options KTR_VERBOSE=0
#options USB_REQ_DEBUG
#options USB_VERBOSE
-#options VERBOSE_SYSINIT # Enable verbose sysinit messages
diff --git a/sys/arm64/arm64/locore.S b/sys/arm64/arm64/locore.S
index 107d189618e4..f87a4d5bb59c 100644
--- a/sys/arm64/arm64/locore.S
+++ b/sys/arm64/arm64/locore.S
@@ -633,7 +633,7 @@ sctlr_set:
sctlr_clear:
/* Bits to clear */
.quad (SCTLR_EE | SCTLR_EOE | SCTLR_IESB | SCTLR_WXN | SCTLR_UMA | \
- SCTLR_ITD | SCTLR_THEE | SCTLR_A)
+ SCTLR_ITD | SCTLR_A)
.globl abort
abort:
diff --git a/sys/arm64/arm64/mp_machdep.c b/sys/arm64/arm64/mp_machdep.c
index 241634a0bb44..ef17ca422771 100644
--- a/sys/arm64/arm64/mp_machdep.c
+++ b/sys/arm64/arm64/mp_machdep.c
@@ -113,10 +113,6 @@ static void intr_pic_ipi_setup(u_int, const char *, intr_ipi_handler_t *,
extern struct pcpu __pcpu[];
-static device_identify_t arm64_cpu_identify;
-static device_probe_t arm64_cpu_probe;
-static device_attach_t arm64_cpu_attach;
-
static void ipi_ast(void *);
static void ipi_hardclock(void *);
static void ipi_preempt(void *);
@@ -126,8 +122,6 @@ static void ipi_stop(void *);
struct mtx ap_boot_mtx;
struct pcb stoppcbs[MAXCPU];
-static device_t cpu_list[MAXCPU];
-
/*
* Not all systems boot from the first CPU in the device tree. To work around
* this we need to find which CPU we have booted from so when we later
@@ -146,78 +140,6 @@ volatile int aps_ready = 0;
/* Temporary variables for init_secondary() */
void *dpcpu[MAXCPU - 1];
-static device_method_t arm64_cpu_methods[] = {
- /* Device interface */
- DEVMETHOD(device_identify, arm64_cpu_identify),
- DEVMETHOD(device_probe, arm64_cpu_probe),
- DEVMETHOD(device_attach, arm64_cpu_attach),
-
- DEVMETHOD_END
-};
-
-static devclass_t arm64_cpu_devclass;
-static driver_t arm64_cpu_driver = {
- "arm64_cpu",
- arm64_cpu_methods,
- 0
-};
-
-DRIVER_MODULE(arm64_cpu, cpu, arm64_cpu_driver, arm64_cpu_devclass, 0, 0);
-
-static void
-arm64_cpu_identify(driver_t *driver, device_t parent)
-{
-
- if (device_find_child(parent, "arm64_cpu", -1) != NULL)
- return;
- if (BUS_ADD_CHILD(parent, 0, "arm64_cpu", -1) == NULL)
- device_printf(parent, "add child failed\n");
-}
-
-static int
-arm64_cpu_probe(device_t dev)
-{
- u_int cpuid;
-
- cpuid = device_get_unit(dev);
- if (cpuid >= MAXCPU || cpuid > mp_maxid)
- return (EINVAL);
-
- device_quiet(dev);
- return (0);
-}
-
-static int
-arm64_cpu_attach(device_t dev)
-{
- const uint32_t *reg;
- size_t reg_size;
- u_int cpuid;
- int i;
-
- cpuid = device_get_unit(dev);
-
- if (cpuid >= MAXCPU || cpuid > mp_maxid)
- return (EINVAL);
- KASSERT(cpu_list[cpuid] == NULL, ("Already have cpu %u", cpuid));
-
- reg = cpu_get_cpuid(dev, &reg_size);
- if (reg == NULL)
- return (EINVAL);
-
- if (bootverbose) {
- device_printf(dev, "register <");
- for (i = 0; i < reg_size; i++)
- printf("%s%x", (i == 0) ? "" : " ", reg[i]);
- printf(">\n");
- }
-
- /* Set the device to start it later */
- cpu_list[cpuid] = dev;
-
- return (0);
-}
-
static void
release_aps(void *dummy __unused)
{
@@ -603,6 +525,7 @@ cpu_mp_start(void)
switch(arm64_bus_method) {
#ifdef DEV_ACPI
case ARM64_BUS_ACPI:
+ mp_quirks = MP_QUIRK_CPULIST;
KASSERT(cpu0 >= 0, ("Current CPU was not found"));
cpu_init_acpi();
break;
diff --git a/sys/arm64/arm64/pmap.c b/sys/arm64/arm64/pmap.c
index 390bfbe307c6..1e8f61fa1a5e 100644
--- a/sys/arm64/arm64/pmap.c
+++ b/sys/arm64/arm64/pmap.c
@@ -4604,8 +4604,9 @@ pmap_mapbios(vm_paddr_t pa, vm_size_t size)
if (size == 0)
return (NULL);
- /* Calculate how many full L2 blocks are needed for the mapping */
- l2_blocks = (roundup2(pa + size, L2_SIZE) - rounddown2(pa, L2_SIZE)) >> L2_SHIFT;
+ /* Calculate how many L2 blocks are needed for the mapping */
+ l2_blocks = (roundup2(pa + size, L2_SIZE) -
+ rounddown2(pa, L2_SIZE)) >> L2_SHIFT;
offset = pa & L2_OFFSET;
@@ -4652,19 +4653,21 @@ pmap_mapbios(vm_paddr_t pa, vm_size_t size)
for (i = 0; i < l2_blocks; i++) {
pde = pmap_pde(kernel_pmap, va, &lvl);
KASSERT(pde != NULL,
- ("pmap_mapbios: Invalid page entry, va: 0x%lx", va));
- KASSERT(lvl == 1, ("pmap_mapbios: Invalid level %d", lvl));
+ ("pmap_mapbios: Invalid page entry, va: 0x%lx",
+ va));
+ KASSERT(lvl == 1,
+ ("pmap_mapbios: Invalid level %d", lvl));
/* Insert L2_BLOCK */
l2 = pmap_l1_to_l2(pde, va);
pmap_load_store(l2,
pa | ATTR_DEFAULT | ATTR_XN |
ATTR_IDX(CACHED_MEMORY) | L2_BLOCK);
- pmap_invalidate_range(kernel_pmap, va, va + L2_SIZE);
va += L2_SIZE;
pa += L2_SIZE;
}
+ pmap_invalidate_all(kernel_pmap);
va = preinit_map_va + (start_idx * L2_SIZE);
@@ -4697,35 +4700,44 @@ pmap_unmapbios(vm_offset_t va, vm_size_t size)
pd_entry_t *pde;
pt_entry_t *l2;
int i, lvl, l2_blocks, block;
+ bool preinit_map;
- l2_blocks = (roundup2(va + size, L2_SIZE) - rounddown2(va, L2_SIZE)) >> L2_SHIFT;
+ l2_blocks =
+ (roundup2(va + size, L2_SIZE) - rounddown2(va, L2_SIZE)) >> L2_SHIFT;
KASSERT(l2_blocks > 0, ("pmap_unmapbios: invalid size %lx", size));
/* Remove preinit mapping */
+ preinit_map = false;
block = 0;
for (i = 0; i < PMAP_PREINIT_MAPPING_COUNT; i++) {
ppim = pmap_preinit_mapping + i;
if (ppim->va == va) {
- KASSERT(ppim->size == size, ("pmap_unmapbios: size mismatch"));
+ KASSERT(ppim->size == size,
+ ("pmap_unmapbios: size mismatch"));
ppim->va = 0;
ppim->pa = 0;
ppim->size = 0;
+ preinit_map = true;
offset = block * L2_SIZE;
va_trunc = rounddown2(va, L2_SIZE) + offset;
/* Remove L2_BLOCK */
pde = pmap_pde(kernel_pmap, va_trunc, &lvl);
KASSERT(pde != NULL,
- ("pmap_unmapbios: Invalid page entry, va: 0x%lx", va_trunc));
+ ("pmap_unmapbios: Invalid page entry, va: 0x%lx",
+ va_trunc));
l2 = pmap_l1_to_l2(pde, va_trunc);
pmap_load_clear(l2);
- pmap_invalidate_range(kernel_pmap, va_trunc, va_trunc + L2_SIZE);
if (block == (l2_blocks - 1))
- return;
+ break;
block++;
}
}
+ if (preinit_map) {
+ pmap_invalidate_all(kernel_pmap);
+ return;
+ }
/* Unmap the pages reserved with kva_alloc. */
if (vm_initialized) {
diff --git a/sys/arm64/arm64/swtch.S b/sys/arm64/arm64/swtch.S
index 4c2c3aca5833..d9921f7e9528 100644
--- a/sys/arm64/arm64/swtch.S
+++ b/sys/arm64/arm64/swtch.S
@@ -236,12 +236,12 @@ ENTRY(fork_trampoline)
msr daifset, #2
/* Restore sp and lr */
- ldp x0, x1, [sp]
+ ldp x0, x1, [sp, #TF_SP]
msr sp_el0, x0
mov lr, x1
/* Restore elr and spsr */
- ldp x0, x1, [sp, #16]
+ ldp x0, x1, [sp, #TF_ELR]
msr elr_el1, x0
msr spsr_el1, x1
diff --git a/sys/arm64/arm64/trap.c b/sys/arm64/arm64/trap.c
index 9de154798002..bb5924336b58 100644
--- a/sys/arm64/arm64/trap.c
+++ b/sys/arm64/arm64/trap.c
@@ -256,7 +256,7 @@ no_pmap_fault:
printf(" esr: %.8lx\n", esr);
#ifdef KDB
- if (debugger_on_panic) {
+ if (debugger_on_trap) {
kdb_why = KDB_WHY_TRAP;
handled = kdb_trap(ESR_ELx_EXCEPTION(esr), 0,
frame);
diff --git a/sys/arm64/conf/GENERIC b/sys/arm64/conf/GENERIC
index 92e7c9347ac2..ee4ab292928f 100644
--- a/sys/arm64/conf/GENERIC
+++ b/sys/arm64/conf/GENERIC
@@ -91,6 +91,7 @@ options WITNESS_SKIPSPIN # Don't run witness on spinlocks for speed
options MALLOC_DEBUG_MAXZONES=8 # Separate malloc(9) zones
options ALT_BREAK_TO_DEBUGGER # Enter debugger on keyboard escape sequence
options USB_DEBUG # enable debug msgs
+options VERBOSE_SYSINIT=0 # Support debug.verbose_sysinit, off by default
# Kernel dump features.
options EKCD # Support for encrypted kernel dumps
diff --git a/sys/arm64/include/armreg.h b/sys/arm64/include/armreg.h
index 05d504ca71ce..1ef9fdb5aeb8 100644
--- a/sys/arm64/include/armreg.h
+++ b/sys/arm64/include/armreg.h
@@ -525,7 +525,7 @@
#define PAR_S_MASK (0x1 << PAR_S_SHIFT)
/* SCTLR_EL1 - System Control Register */
-#define SCTLR_RES0 0xc8222400 /* Reserved ARMv8.0, write 0 */
+#define SCTLR_RES0 0xc8222440 /* Reserved ARMv8.0, write 0 */
#define SCTLR_RES1 0x30d00800 /* Reserved ARMv8.0, write 1 */
#define SCTLR_M 0x00000001
@@ -534,23 +534,32 @@
#define SCTLR_SA 0x00000008
#define SCTLR_SA0 0x00000010
#define SCTLR_CP15BEN 0x00000020
-#define SCTLR_THEE 0x00000040
+/* Bit 6 is reserved */
#define SCTLR_ITD 0x00000080
#define SCTLR_SED 0x00000100
#define SCTLR_UMA 0x00000200
+/* Bit 10 is reserved */
+/* Bit 11 is reserved */
#define SCTLR_I 0x00001000
+#define SCTLR_EnDB 0x00002000 /* ARMv8.3 */
#define SCTLR_DZE 0x00004000
#define SCTLR_UCT 0x00008000
#define SCTLR_nTWI 0x00010000
+/* Bit 17 is reserved */
#define SCTLR_nTWE 0x00040000
#define SCTLR_WXN 0x00080000
-#define SCTLR_IESB 0x00200000
-#define SCTLR_SPAN 0x00800000
+/* Bit 20 is reserved */
+#define SCTLR_IESB 0x00200000 /* ARMv8.2 */
+/* Bit 22 is reserved */
+#define SCTLR_SPAN 0x00800000 /* ARMv8.1 */
#define SCTLR_EOE 0x01000000
#define SCTLR_EE 0x02000000
#define SCTLR_UCI 0x04000000
-#define SCTLR_nTLSMD 0x10000000
-#define SCTLR_LSMAOE 0x20000000
+#define SCTLR_EnDA 0x08000000 /* ARMv8.3 */
+#define SCTLR_nTLSMD 0x10000000 /* ARMv8.2 */
+#define SCTLR_LSMAOE 0x20000000 /* ARMv8.2 */
+#define SCTLR_EnIB 0x40000000 /* ARMv8.3 */
+#define SCTLR_EnIA 0x80000000 /* ARMv8.3 */
/* SPSR_EL1 */
/*
diff --git a/sys/arm64/include/hypervisor.h b/sys/arm64/include/hypervisor.h
index 4e9980f9ba36..7ac0069af1be 100644
--- a/sys/arm64/include/hypervisor.h
+++ b/sys/arm64/include/hypervisor.h
@@ -80,6 +80,17 @@
#define HCR_RW 0x0000000080000000
#define HCR_CD 0x0000000100000000
#define HCR_ID 0x0000000200000000
+#define HCR_E2H 0x0000000400000000
+#define HCR_TLOR 0x0000000800000000
+#define HCR_TERR 0x0000001000000000
+#define HCR_TEA 0x0000002000000000
+#define HCR_MIOCNCE 0x0000004000000000
+/* Bit 39 is reserved */
+#define HCR_APK 0x0000010000000000
+#define HCR_API 0x0000020000000000
+#define HCR_NV 0x0000040000000000
+#define HCR_NV1 0x0000080000000000
+#define HCR_AT 0x0000100000000000
#endif
diff --git a/sys/cam/cam_periph.c b/sys/cam/cam_periph.c
index d814c0ef6d89..cc069325748c 100644
--- a/sys/cam/cam_periph.c
+++ b/sys/cam/cam_periph.c
@@ -470,6 +470,12 @@ cam_periph_release(struct cam_periph *periph)
mtx_unlock(mtx);
}
+/*
+ * hold/unhold act as mutual exclusion for sections of the code that
+ * need to sleep and want to make sure that other sections that
+ * will interfere are held off. This only protects exclusive sections
+ * from each other.
+ */
int
cam_periph_hold(struct cam_periph *periph, int priority)
{
diff --git a/sys/cam/scsi/scsi_da.c b/sys/cam/scsi/scsi_da.c
index 701d141ff61e..2483c5e7633e 100644
--- a/sys/cam/scsi/scsi_da.c
+++ b/sys/cam/scsi/scsi_da.c
@@ -2697,9 +2697,10 @@ daregister(struct cam_periph *periph, void *arg)
TASK_INIT(&softc->sysctl_task, 0, dasysctlinit, periph);
/*
- * Take an exclusive refcount on the periph while dastart is called
- * to finish the probe. The reference will be dropped in dadone at
- * the end of probe.
+ * Take an exclusive section lock qon the periph while dastart is called
+ * to finish the probe. The lock will be dropped in dadone at the end
+ * of probe. This locks out daopen and daclose from racing with the
+ * probe.
*
* XXX if cam_periph_hold returns an error, we don't hold a refcount.
*/
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c
index 8d78d1d5ec18..9646c396efc0 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c
@@ -2143,6 +2143,7 @@ receive_object(struct receive_writer_arg *rwa, struct drr_object *drro,
{
dmu_object_info_t doi;
dmu_tx_t *tx;
+ dmu_buf_t *db;
uint64_t object;
int err;
@@ -2190,12 +2191,14 @@ receive_object(struct receive_writer_arg *rwa, struct drr_object *drro,
tx = dmu_tx_create(rwa->os);
dmu_tx_hold_bonus(tx, object);
+ dmu_tx_hold_write(tx, object, 0, 0);
err = dmu_tx_assign(tx, TXG_WAIT);
if (err != 0) {
dmu_tx_abort(tx);
return (err);
}
+ db = NULL;
if (object == DMU_NEW_OBJECT) {
/* currently free, want to be allocated */
err = dmu_object_claim_dnsize(rwa->os, drro->drr_object,
@@ -2203,15 +2206,33 @@ receive_object(struct receive_writer_arg *rwa, struct drr_object *drro,
drro->drr_bonustype, drro->drr_bonuslen,
drro->drr_dn_slots << DNODE_SHIFT, tx);
} else if (drro->drr_type != doi.doi_type ||
- drro->drr_blksz != doi.doi_data_block_size ||
- drro->drr_bonustype != doi.doi_bonus_type ||
- drro->drr_bonuslen != doi.doi_bonus_size) {
+ (drro->drr_blksz != doi.doi_data_block_size &&
+ doi.doi_max_offset > doi.doi_data_block_size)) {
/* currently allocated, but with different properties */
err = dmu_object_reclaim(rwa->os, drro->drr_object,
drro->drr_type, drro->drr_blksz,
drro->drr_bonustype, drro->drr_bonuslen, tx);
+ } else {
+ /*
+ * Currently allocated, but with slightly different properties,
+ * that may change live, like block size or bonus buffer.
+ * Change those specifically to not loose the spill block, etc.
+ */
+ if (drro->drr_bonustype != doi.doi_bonus_type ||
+ drro->drr_bonuslen != doi.doi_bonus_size)
+ VERIFY0(dmu_bonus_hold(rwa->os, drro->drr_object, FTAG,
+ &db));
+ if (drro->drr_bonustype != doi.doi_bonus_type)
+ VERIFY0(dmu_set_bonustype(db, drro->drr_bonustype, tx));
+ if (drro->drr_bonuslen != doi.doi_bonus_size)
+ VERIFY0(dmu_set_bonus(db, drro->drr_bonuslen, tx));
+ if (drro->drr_blksz != doi.doi_data_block_size)
+ err = dmu_object_set_blocksize(rwa->os, drro->drr_object,
+ drro->drr_blksz, 0, tx);
}
if (err != 0) {
+ if (db != NULL)
+ dmu_buf_rele(db, FTAG);
dmu_tx_commit(tx);
return (SET_ERROR(EINVAL));
}
@@ -2222,9 +2243,9 @@ receive_object(struct receive_writer_arg *rwa, struct drr_object *drro,
drro->drr_compress, tx);
if (data != NULL) {
- dmu_buf_t *db;
-
- VERIFY0(dmu_bonus_hold(rwa->os, drro->drr_object, FTAG, &db));
+ if (db == NULL)
+ VERIFY0(dmu_bonus_hold(rwa->os, drro->drr_object, FTAG,
+ &db));
dmu_buf_will_dirty(db, tx);
ASSERT3U(db->db_size, >=, drro->drr_bonuslen);
@@ -2235,8 +2256,9 @@ receive_object(struct receive_writer_arg *rwa, struct drr_object *drro,
dmu_ot_byteswap[byteswap].ob_func(db->db_data,
drro->drr_bonuslen);
}
- dmu_buf_rele(db, FTAG);
}
+ if (db != NULL)
+ dmu_buf_rele(db, FTAG);
dmu_tx_commit(tx);
return (0);
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
index 9515ab8b2509..4f8dd84f4d3d 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
@@ -5314,7 +5314,7 @@ zfs_freebsd_symlink(ap)
vattr_init_mask(vap);
return (zfs_symlink(ap->a_dvp, ap->a_vpp, cnp->cn_nameptr, vap,
- ap->a_target, cnp->cn_cred, cnp->cn_thread));
+ __DECONST(char *, ap->a_target), cnp->cn_cred, cnp->cn_thread));
}
static int
diff --git a/sys/compat/freebsd32/freebsd32_misc.c b/sys/compat/freebsd32/freebsd32_misc.c
index 070a9bcd8a76..71b8a4e992b2 100644
--- a/sys/compat/freebsd32/freebsd32_misc.c
+++ b/sys/compat/freebsd32/freebsd32_misc.c
@@ -332,7 +332,7 @@ freebsd32_sigaltstack(struct thread *td,
* the pointers.
*/
int
-freebsd32_exec_copyin_args(struct image_args *args, char *fname,
+freebsd32_exec_copyin_args(struct image_args *args, const char *fname,
enum uio_seg segflg, u_int32_t *argv, u_int32_t *envv)
{
char *argp, *envp;
diff --git a/sys/compat/freebsd32/freebsd32_proto.h b/sys/compat/freebsd32/freebsd32_proto.h
index b7c0cdddc321..ed48baf7295f 100644
--- a/sys/compat/freebsd32/freebsd32_proto.h
+++ b/sys/compat/freebsd32/freebsd32_proto.h
@@ -77,7 +77,7 @@ struct freebsd32_ioctl_args {
char data_l_[PADL_(struct md_ioctl32 *)]; struct md_ioctl32 * data; char data_r_[PADR_(struct md_ioctl32 *)];
};
struct freebsd32_execve_args {
- char fname_l_[PADL_(char *)]; char * fname; char fname_r_[PADR_(char *)];
+ char fname_l_[PADL_(const char *)]; const char * fname; char fname_r_[PADR_(const char *)];
char argv_l_[PADL_(uint32_t *)]; uint32_t * argv; char argv_r_[PADR_(uint32_t *)];
char envv_l_[PADL_(uint32_t *)]; uint32_t * envv; char envv_r_[PADR_(uint32_t *)];
};
@@ -130,7 +130,7 @@ struct freebsd32_settimeofday_args {
char tzp_l_[PADL_(struct timezone *)]; struct timezone * tzp; char tzp_r_[PADR_(struct timezone *)];
};
struct freebsd32_utimes_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char tptr_l_[PADL_(struct timeval32 *)]; struct timeval32 * tptr; char tptr_r_[PADR_(struct timeval32 *)];
};
struct freebsd32_adjtime_args {
@@ -243,7 +243,7 @@ struct freebsd32_lio_listio_args {
char sig_l_[PADL_(struct sigevent32 *)]; struct sigevent32 * sig; char sig_r_[PADR_(struct sigevent32 *)];
};
struct freebsd32_lutimes_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char tptr_l_[PADL_(struct timeval32 *)]; struct timeval32 * tptr; char tptr_r_[PADR_(struct timeval32 *)];
};
struct freebsd32_preadv_args {
@@ -434,7 +434,7 @@ struct freebsd32_lseek_args {
char whence_l_[PADL_(int)]; int whence; char whence_r_[PADR_(int)];
};
struct freebsd32_truncate_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char pad_l_[PADL_(int)]; int pad; char pad_r_[PADR_(int)];
char length1_l_[PADL_(uint32_t)]; uint32_t length1; char length1_r_[PADR_(uint32_t)];
char length2_l_[PADL_(uint32_t)]; uint32_t length2; char length2_r_[PADR_(uint32_t)];
@@ -476,7 +476,7 @@ struct freebsd32_lseek_args {
char whence_l_[PADL_(int)]; int whence; char whence_r_[PADR_(int)];
};
struct freebsd32_truncate_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char length1_l_[PADL_(uint32_t)]; uint32_t length1; char length1_r_[PADR_(uint32_t)];
char length2_l_[PADL_(uint32_t)]; uint32_t length2; char length2_r_[PADR_(uint32_t)];
};
@@ -532,7 +532,7 @@ struct freebsd32_fexecve_args {
};
struct freebsd32_futimesat_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char times_l_[PADL_(struct timeval *)]; struct timeval * times; char times_r_[PADR_(struct timeval *)];
};
struct freebsd32_jail_get_args {
@@ -666,7 +666,7 @@ struct freebsd32_futimens_args {
};
struct freebsd32_utimensat_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char times_l_[PADL_(struct timespec *)]; struct timespec * times; char times_r_[PADR_(struct timespec *)];
char flag_l_[PADL_(int)]; int flag; char flag_r_[PADR_(int)];
};
@@ -676,7 +676,7 @@ struct freebsd32_fstat_args {
};
struct freebsd32_fstatat_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char buf_l_[PADL_(struct stat32 *)]; struct stat32 * buf; char buf_r_[PADR_(struct stat32 *)];
char flag_l_[PADL_(int)]; int flag; char flag_r_[PADR_(int)];
};
@@ -854,11 +854,11 @@ struct ofreebsd32_lseek_args {
char whence_l_[PADL_(int)]; int whence; char whence_r_[PADR_(int)];
};
struct ofreebsd32_stat_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char ub_l_[PADL_(struct ostat32 *)]; struct ostat32 * ub; char ub_r_[PADR_(struct ostat32 *)];
};
struct ofreebsd32_lstat_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char ub_l_[PADL_(struct ostat *)]; struct ostat * ub; char ub_r_[PADR_(struct ostat *)];
};
struct ofreebsd32_sigaction_args {
@@ -946,7 +946,7 @@ struct freebsd4_freebsd32_getfsstat_args {
char mode_l_[PADL_(int)]; int mode; char mode_r_[PADR_(int)];
};
struct freebsd4_freebsd32_statfs_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char buf_l_[PADL_(struct statfs32 *)]; struct statfs32 * buf; char buf_r_[PADR_(struct statfs32 *)];
};
struct freebsd4_freebsd32_fstatfs_args {
@@ -1037,7 +1037,7 @@ struct freebsd6_freebsd32_lseek_args {
char whence_l_[PADL_(int)]; int whence; char whence_r_[PADR_(int)];
};
struct freebsd6_freebsd32_truncate_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char pad_l_[PADL_(int)]; int pad; char pad_r_[PADR_(int)];
char length1_l_[PADL_(uint32_t)]; uint32_t length1; char length1_r_[PADR_(uint32_t)];
char length2_l_[PADL_(uint32_t)]; uint32_t length2; char length2_r_[PADR_(uint32_t)];
@@ -1153,12 +1153,12 @@ int freebsd10_freebsd32_pipe(struct thread *, struct freebsd10_freebsd32_pipe_ar
#define PAD64_REQUIRED
#endif
struct freebsd11_freebsd32_mknod_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char mode_l_[PADL_(int)]; int mode; char mode_r_[PADR_(int)];
char dev_l_[PADL_(int)]; int dev; char dev_r_[PADR_(int)];
};
struct freebsd11_freebsd32_stat_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char ub_l_[PADL_(struct freebsd11_stat32 *)]; struct freebsd11_stat32 * ub; char ub_r_[PADR_(struct freebsd11_stat32 *)];
};
struct freebsd11_freebsd32_fstat_args {
@@ -1166,7 +1166,7 @@ struct freebsd11_freebsd32_fstat_args {
char ub_l_[PADL_(struct freebsd11_stat32 *)]; struct freebsd11_stat32 * ub; char ub_r_[PADR_(struct freebsd11_stat32 *)];
};
struct freebsd11_freebsd32_lstat_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char ub_l_[PADL_(struct freebsd11_stat32 *)]; struct freebsd11_stat32 * ub; char ub_r_[PADR_(struct freebsd11_stat32 *)];
};
struct freebsd11_freebsd32_getdirentries_args {
@@ -1200,13 +1200,13 @@ struct freebsd11_freebsd32_kevent_args {
#endif
struct freebsd11_freebsd32_fstatat_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char buf_l_[PADL_(struct freebsd11_stat32 *)]; struct freebsd11_stat32 * buf; char buf_r_[PADR_(struct freebsd11_stat32 *)];
char flag_l_[PADL_(int)]; int flag; char flag_r_[PADR_(int)];
};
struct freebsd11_freebsd32_mknodat_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char mode_l_[PADL_(mode_t)]; mode_t mode; char mode_r_[PADR_(mode_t)];
char dev_l_[PADL_(uint32_t)]; uint32_t dev; char dev_r_[PADR_(uint32_t)];
};
diff --git a/sys/compat/freebsd32/freebsd32_systrace_args.c b/sys/compat/freebsd32/freebsd32_systrace_args.c
index c3ee144f07e2..59d97c7a74ce 100644
--- a/sys/compat/freebsd32/freebsd32_systrace_args.c
+++ b/sys/compat/freebsd32/freebsd32_systrace_args.c
@@ -52,9 +52,9 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* open */
case 5: {
struct open_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
iarg[1] = p->flags; /* int */
- iarg[2] = p->mode; /* int */
+ iarg[2] = p->mode; /* mode_t */
*n_args = 3;
break;
}
@@ -78,22 +78,22 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* link */
case 9: {
struct link_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
- uarg[1] = (intptr_t) p->link; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
+ uarg[1] = (intptr_t) p->link; /* const char * */
*n_args = 2;
break;
}
/* unlink */
case 10: {
struct unlink_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
*n_args = 1;
break;
}
/* chdir */
case 12: {
struct chdir_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
*n_args = 1;
break;
}
@@ -107,15 +107,15 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* chmod */
case 15: {
struct chmod_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
- iarg[1] = p->mode; /* int */
+ uarg[0] = (intptr_t) p->path; /* const char * */
+ iarg[1] = p->mode; /* mode_t */
*n_args = 2;
break;
}
/* chown */
case 16: {
struct chown_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
iarg[1] = p->uid; /* int */
iarg[2] = p->gid; /* int */
*n_args = 3;
@@ -136,8 +136,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* mount */
case 21: {
struct mount_args *p = params;
- uarg[0] = (intptr_t) p->type; /* char * */
- uarg[1] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->type; /* const char * */
+ uarg[1] = (intptr_t) p->path; /* const char * */
iarg[2] = p->flags; /* int */
uarg[3] = (intptr_t) p->data; /* caddr_t */
*n_args = 4;
@@ -146,7 +146,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* unmount */
case 22: {
struct unmount_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
iarg[1] = p->flags; /* int */
*n_args = 2;
break;
@@ -238,7 +238,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* access */
case 33: {
struct access_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
iarg[1] = p->amode; /* int */
*n_args = 2;
break;
@@ -325,14 +325,14 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* setlogin */
case 50: {
struct setlogin_args *p = params;
- uarg[0] = (intptr_t) p->namebuf; /* char * */
+ uarg[0] = (intptr_t) p->namebuf; /* const char * */
*n_args = 1;
break;
}
/* acct */
case 51: {
struct acct_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
*n_args = 1;
break;
}
@@ -363,22 +363,22 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* revoke */
case 56: {
struct revoke_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
*n_args = 1;
break;
}
/* symlink */
case 57: {
struct symlink_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
- uarg[1] = (intptr_t) p->link; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
+ uarg[1] = (intptr_t) p->link; /* const char * */
*n_args = 2;
break;
}
/* readlink */
case 58: {
struct readlink_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
uarg[1] = (intptr_t) p->buf; /* char * */
uarg[2] = p->count; /* size_t */
*n_args = 3;
@@ -387,7 +387,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* freebsd32_execve */
case 59: {
struct freebsd32_execve_args *p = params;
- uarg[0] = (intptr_t) p->fname; /* char * */
+ uarg[0] = (intptr_t) p->fname; /* const char * */
uarg[1] = (intptr_t) p->argv; /* uint32_t * */
uarg[2] = (intptr_t) p->envv; /* uint32_t * */
*n_args = 3;
@@ -396,14 +396,14 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* umask */
case 60: {
struct umask_args *p = params;
- iarg[0] = p->newmask; /* int */
+ iarg[0] = p->newmask; /* mode_t */
*n_args = 1;
break;
}
/* chroot */
case 61: {
struct chroot_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
*n_args = 1;
break;
}
@@ -511,7 +511,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* swapon */
case 85: {
struct swapon_args *p = params;
- uarg[0] = (intptr_t) p->name; /* char * */
+ uarg[0] = (intptr_t) p->name; /* const char * */
*n_args = 1;
break;
}
@@ -692,7 +692,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 124: {
struct fchmod_args *p = params;
iarg[0] = p->fd; /* int */
- iarg[1] = p->mode; /* int */
+ iarg[1] = p->mode; /* mode_t */
*n_args = 2;
break;
}
@@ -715,8 +715,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* rename */
case 128: {
struct rename_args *p = params;
- uarg[0] = (intptr_t) p->from; /* char * */
- uarg[1] = (intptr_t) p->to; /* char * */
+ uarg[0] = (intptr_t) p->from; /* const char * */
+ uarg[1] = (intptr_t) p->to; /* const char * */
*n_args = 2;
break;
}
@@ -731,8 +731,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* mkfifo */
case 132: {
struct mkfifo_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
- iarg[1] = p->mode; /* int */
+ uarg[0] = (intptr_t) p->path; /* const char * */
+ iarg[1] = p->mode; /* mode_t */
*n_args = 2;
break;
}
@@ -769,22 +769,22 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* mkdir */
case 136: {
struct mkdir_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
- iarg[1] = p->mode; /* int */
+ uarg[0] = (intptr_t) p->path; /* const char * */
+ iarg[1] = p->mode; /* mode_t */
*n_args = 2;
break;
}
/* rmdir */
case 137: {
struct rmdir_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
*n_args = 1;
break;
}
/* freebsd32_utimes */
case 138: {
struct freebsd32_utimes_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
uarg[1] = (intptr_t) p->tptr; /* struct timeval32 * */
*n_args = 2;
break;
@@ -805,7 +805,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* quotactl */
case 148: {
struct quotactl_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
iarg[1] = p->cmd; /* int */
iarg[2] = p->uid; /* int */
uarg[3] = (intptr_t) p->arg; /* caddr_t */
@@ -815,7 +815,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* getfh */
case 161: {
struct getfh_args *p = params;
- uarg[0] = (intptr_t) p->fname; /* char * */
+ uarg[0] = (intptr_t) p->fname; /* const char * */
uarg[1] = (intptr_t) p->fhp; /* struct fhandle * */
*n_args = 2;
break;
@@ -901,7 +901,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* pathconf */
case 191: {
struct pathconf_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
iarg[1] = p->name; /* int */
*n_args = 2;
break;
@@ -966,7 +966,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* undelete */
case 205: {
struct undelete_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
*n_args = 1;
break;
}
@@ -1254,7 +1254,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* lchown */
case 254: {
struct lchown_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
iarg[1] = p->uid; /* int */
iarg[2] = p->gid; /* int */
*n_args = 3;
@@ -1287,7 +1287,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* lchmod */
case 274: {
struct lchmod_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
iarg[1] = p->mode; /* mode_t */
*n_args = 2;
break;
@@ -1295,7 +1295,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* freebsd32_lutimes */
case 276: {
struct freebsd32_lutimes_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
uarg[1] = (intptr_t) p->tptr; /* struct timeval32 * */
*n_args = 2;
break;
@@ -1790,7 +1790,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* eaccess */
case 376: {
struct eaccess_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
iarg[1] = p->amode; /* int */
*n_args = 2;
break;
@@ -2178,7 +2178,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* auditctl */
case 453: {
struct auditctl_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
*n_args = 1;
break;
}
@@ -2400,7 +2400,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* freebsd32_truncate */
case 479: {
struct freebsd32_truncate_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
iarg[1] = p->pad; /* int */
uarg[2] = p->length1; /* uint32_t */
uarg[3] = p->length2; /* uint32_t */
@@ -2466,7 +2466,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* freebsd32_truncate */
case 479: {
struct freebsd32_truncate_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
uarg[1] = p->length1; /* uint32_t */
uarg[2] = p->length2; /* uint32_t */
*n_args = 3;
@@ -2577,7 +2577,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 489: {
struct faccessat_args *p = params;
iarg[0] = p->fd; /* int */
- uarg[1] = (intptr_t) p->path; /* char * */
+ uarg[1] = (intptr_t) p->path; /* const char * */
iarg[2] = p->amode; /* int */
iarg[3] = p->flag; /* int */
*n_args = 4;
@@ -2597,7 +2597,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 491: {
struct fchownat_args *p = params;
iarg[0] = p->fd; /* int */
- uarg[1] = (intptr_t) p->path; /* char * */
+ uarg[1] = (intptr_t) p->path; /* const char * */
uarg[2] = p->uid; /* uid_t */
iarg[3] = p->gid; /* gid_t */
iarg[4] = p->flag; /* int */
@@ -2617,7 +2617,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 494: {
struct freebsd32_futimesat_args *p = params;
iarg[0] = p->fd; /* int */
- uarg[1] = (intptr_t) p->path; /* char * */
+ uarg[1] = (intptr_t) p->path; /* const char * */
uarg[2] = (intptr_t) p->times; /* struct timeval * */
*n_args = 3;
break;
@@ -2626,9 +2626,9 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 495: {
struct linkat_args *p = params;
iarg[0] = p->fd1; /* int */
- uarg[1] = (intptr_t) p->path1; /* char * */
+ uarg[1] = (intptr_t) p->path1; /* const char * */
iarg[2] = p->fd2; /* int */
- uarg[3] = (intptr_t) p->path2; /* char * */
+ uarg[3] = (intptr_t) p->path2; /* const char * */
iarg[4] = p->flag; /* int */
*n_args = 5;
break;
@@ -2637,7 +2637,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 496: {
struct mkdirat_args *p = params;
iarg[0] = p->fd; /* int */
- uarg[1] = (intptr_t) p->path; /* char * */
+ uarg[1] = (intptr_t) p->path; /* const char * */
iarg[2] = p->mode; /* mode_t */
*n_args = 3;
break;
@@ -2646,7 +2646,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 497: {
struct mkfifoat_args *p = params;
iarg[0] = p->fd; /* int */
- uarg[1] = (intptr_t) p->path; /* char * */
+ uarg[1] = (intptr_t) p->path; /* const char * */
iarg[2] = p->mode; /* mode_t */
*n_args = 3;
break;
@@ -2655,7 +2655,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 499: {
struct openat_args *p = params;
iarg[0] = p->fd; /* int */
- uarg[1] = (intptr_t) p->path; /* char * */
+ uarg[1] = (intptr_t) p->path; /* const char * */
iarg[2] = p->flag; /* int */
iarg[3] = p->mode; /* mode_t */
*n_args = 4;
@@ -2665,7 +2665,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 500: {
struct readlinkat_args *p = params;
iarg[0] = p->fd; /* int */
- uarg[1] = (intptr_t) p->path; /* char * */
+ uarg[1] = (intptr_t) p->path; /* const char * */
uarg[2] = (intptr_t) p->buf; /* char * */
uarg[3] = p->bufsize; /* size_t */
*n_args = 4;
@@ -2675,7 +2675,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 501: {
struct renameat_args *p = params;
iarg[0] = p->oldfd; /* int */
- uarg[1] = (intptr_t) p->old; /* char * */
+ uarg[1] = (intptr_t) p->old; /* const char * */
iarg[2] = p->newfd; /* int */
uarg[3] = (intptr_t) p->new; /* const char * */
*n_args = 4;
@@ -2684,9 +2684,9 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* symlinkat */
case 502: {
struct symlinkat_args *p = params;
- uarg[0] = (intptr_t) p->path1; /* char * */
+ uarg[0] = (intptr_t) p->path1; /* const char * */
iarg[1] = p->fd; /* int */
- uarg[2] = (intptr_t) p->path2; /* char * */
+ uarg[2] = (intptr_t) p->path2; /* const char * */
*n_args = 3;
break;
}
@@ -2694,7 +2694,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 503: {
struct unlinkat_args *p = params;
iarg[0] = p->fd; /* int */
- uarg[1] = (intptr_t) p->path; /* char * */
+ uarg[1] = (intptr_t) p->path; /* const char * */
iarg[2] = p->flag; /* int */
*n_args = 3;
break;
@@ -2769,7 +2769,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* lpathconf */
case 513: {
struct lpathconf_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
iarg[1] = p->name; /* int */
*n_args = 2;
break;
@@ -3119,7 +3119,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 547: {
struct freebsd32_utimensat_args *p = params;
iarg[0] = p->fd; /* int */
- uarg[1] = (intptr_t) p->path; /* char * */
+ uarg[1] = (intptr_t) p->path; /* const char * */
uarg[2] = (intptr_t) p->times; /* struct timespec * */
iarg[3] = p->flag; /* int */
*n_args = 4;
@@ -3144,7 +3144,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 552: {
struct freebsd32_fstatat_args *p = params;
iarg[0] = p->fd; /* int */
- uarg[1] = (intptr_t) p->path; /* char * */
+ uarg[1] = (intptr_t) p->path; /* const char * */
uarg[2] = (intptr_t) p->buf; /* struct stat32 * */
iarg[3] = p->flag; /* int */
*n_args = 4;
@@ -3171,7 +3171,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* statfs */
case 555: {
struct statfs_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
uarg[1] = (intptr_t) p->buf; /* struct statfs32 * */
*n_args = 2;
break;
@@ -3205,7 +3205,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 559: {
struct mknodat_args *p = params;
iarg[0] = p->fd; /* int */
- uarg[1] = (intptr_t) p->path; /* char * */
+ uarg[1] = (intptr_t) p->path; /* const char * */
iarg[2] = p->mode; /* mode_t */
iarg[3] = p->dev; /* dev_t */
*n_args = 4;
@@ -3323,13 +3323,13 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 5:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "int";
break;
case 2:
- p = "int";
+ p = "mode_t";
break;
default:
break;
@@ -3368,10 +3368,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 9:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
default:
break;
@@ -3381,7 +3381,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 10:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
default:
break;
@@ -3391,7 +3391,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 12:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
default:
break;
@@ -3411,10 +3411,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 15:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
- p = "int";
+ p = "mode_t";
break;
default:
break;
@@ -3424,7 +3424,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 16:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "int";
@@ -3453,10 +3453,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 21:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
case 2:
p = "int";
@@ -3472,7 +3472,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 22:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "int";
@@ -3625,7 +3625,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 33:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "int";
@@ -3750,7 +3750,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 50:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
default:
break;
@@ -3760,7 +3760,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 51:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
default:
break;
@@ -3809,7 +3809,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 56:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
default:
break;
@@ -3819,10 +3819,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 57:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
default:
break;
@@ -3832,7 +3832,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 58:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "userland char *";
@@ -3848,7 +3848,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 59:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "userland uint32_t *";
@@ -3864,7 +3864,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 60:
switch(ndx) {
case 0:
- p = "int";
+ p = "mode_t";
break;
default:
break;
@@ -3874,7 +3874,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 61:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
default:
break;
@@ -4042,7 +4042,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 85:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
default:
break;
@@ -4353,7 +4353,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "int";
+ p = "mode_t";
break;
default:
break;
@@ -4389,10 +4389,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 128:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
default:
break;
@@ -4415,10 +4415,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 132:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
- p = "int";
+ p = "mode_t";
break;
default:
break;
@@ -4485,10 +4485,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 136:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
- p = "int";
+ p = "mode_t";
break;
default:
break;
@@ -4498,7 +4498,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 137:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
default:
break;
@@ -4508,7 +4508,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 138:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "userland struct timeval32 *";
@@ -4537,7 +4537,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 148:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "int";
@@ -4556,7 +4556,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 161:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "userland struct fhandle *";
@@ -4704,7 +4704,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 191:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "int";
@@ -4810,7 +4810,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 205:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
default:
break;
@@ -5234,7 +5234,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 254:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "int";
@@ -5289,7 +5289,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 274:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "mode_t";
@@ -5302,7 +5302,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 276:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "userland struct timeval32 *";
@@ -6112,7 +6112,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 376:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "int";
@@ -6759,7 +6759,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 453:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
default:
break;
@@ -7181,7 +7181,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 479:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "int";
@@ -7311,7 +7311,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 479:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "uint32_t";
@@ -7515,7 +7515,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
case 2:
p = "int";
@@ -7553,7 +7553,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
case 2:
p = "uid_t";
@@ -7591,7 +7591,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
case 2:
p = "userland struct timeval *";
@@ -7607,13 +7607,13 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
case 2:
p = "int";
break;
case 3:
- p = "userland char *";
+ p = "userland const char *";
break;
case 4:
p = "int";
@@ -7629,7 +7629,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
case 2:
p = "mode_t";
@@ -7645,7 +7645,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
case 2:
p = "mode_t";
@@ -7661,7 +7661,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
case 2:
p = "int";
@@ -7680,7 +7680,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
case 2:
p = "userland char *";
@@ -7699,7 +7699,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
case 2:
p = "int";
@@ -7715,13 +7715,13 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 502:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "int";
break;
case 2:
- p = "userland char *";
+ p = "userland const char *";
break;
default:
break;
@@ -7734,7 +7734,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
case 2:
p = "int";
@@ -7860,7 +7860,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 513:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "int";
@@ -8501,7 +8501,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
case 2:
p = "userland struct timespec *";
@@ -8543,7 +8543,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
case 2:
p = "userland struct stat32 *";
@@ -8591,7 +8591,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 555:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "userland struct statfs32 *";
@@ -8649,7 +8649,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
case 2:
p = "mode_t";
diff --git a/sys/compat/freebsd32/freebsd32_util.h b/sys/compat/freebsd32/freebsd32_util.h
index ffbe0d57d799..cf6ff0d5a3ce 100644
--- a/sys/compat/freebsd32/freebsd32_util.h
+++ b/sys/compat/freebsd32/freebsd32_util.h
@@ -118,7 +118,7 @@ int freebsd32_copyiniov(struct iovec32 *iovp, u_int iovcnt,
void freebsd32_rusage_out(const struct rusage *s, struct rusage32 *s32);
struct image_args;
-int freebsd32_exec_copyin_args(struct image_args *args, char *fname,
+int freebsd32_exec_copyin_args(struct image_args *args, const char *fname,
enum uio_seg segflg, u_int32_t *argv, u_int32_t *envv);
#endif /* !_COMPAT_FREEBSD32_FREEBSD32_UTIL_H_ */
diff --git a/sys/compat/freebsd32/syscalls.master b/sys/compat/freebsd32/syscalls.master
index 61877582c89a..36d2d65fa3ce 100644
--- a/sys/compat/freebsd32/syscalls.master
+++ b/sys/compat/freebsd32/syscalls.master
@@ -72,21 +72,22 @@
size_t nbyte); }
4 AUE_WRITE NOPROTO { ssize_t write(int fd, const void *buf, \
size_t nbyte); }
-5 AUE_OPEN_RWTC NOPROTO { int open(char *path, int flags, \
- int mode); }
+5 AUE_OPEN_RWTC NOPROTO { int open(const char *path, int flags, \
+ mode_t mode); }
6 AUE_CLOSE NOPROTO { int close(int fd); }
7 AUE_WAIT4 STD { int freebsd32_wait4(int pid, int *status, \
int options, struct rusage32 *rusage); }
8 AUE_CREAT OBSOL old creat
-9 AUE_LINK NOPROTO { int link(char *path, char *link); }
-10 AUE_UNLINK NOPROTO { int unlink(char *path); }
+9 AUE_LINK NOPROTO { int link(const char *path, \
+ const char *link); }
+10 AUE_UNLINK NOPROTO { int unlink(const char *path); }
11 AUE_NULL OBSOL execv
-12 AUE_CHDIR NOPROTO { int chdir(char *path); }
+12 AUE_CHDIR NOPROTO { int chdir(const char *path); }
13 AUE_FCHDIR NOPROTO { int fchdir(int fd); }
-14 AUE_MKNOD COMPAT11 { int freebsd32_mknod(char *path, \
+14 AUE_MKNOD COMPAT11 { int freebsd32_mknod(const char *path, \
int mode, int dev); }
-15 AUE_CHMOD NOPROTO { int chmod(char *path, int mode); }
-16 AUE_CHOWN NOPROTO { int chown(char *path, int uid, int gid); }
+15 AUE_CHMOD NOPROTO { int chmod(const char *path, mode_t mode); }
+16 AUE_CHOWN NOPROTO { int chown(const char *path, int uid, int gid); }
17 AUE_NULL NOPROTO { caddr_t break(char *nsize); }
18 AUE_GETFSSTAT COMPAT4 { int freebsd32_getfsstat( \
struct statfs32 *buf, long bufsize, \
@@ -94,9 +95,10 @@
19 AUE_LSEEK COMPAT { int freebsd32_lseek(int fd, int offset, \
int whence); }
20 AUE_GETPID NOPROTO { pid_t getpid(void); }
-21 AUE_MOUNT NOPROTO { int mount(char *type, char *path, \
+21 AUE_MOUNT NOPROTO { int mount(const char *type, \
+ const char *path, \
int flags, caddr_t data); }
-22 AUE_UMOUNT NOPROTO { int unmount(char *path, int flags); }
+22 AUE_UMOUNT NOPROTO { int unmount(const char *path, int flags); }
23 AUE_SETUID NOPROTO { int setuid(uid_t uid); }
24 AUE_GETUID NOPROTO { uid_t getuid(void); }
25 AUE_GETEUID NOPROTO { uid_t geteuid(void); }
@@ -115,15 +117,15 @@
int *alen); }
32 AUE_GETSOCKNAME NOPROTO { int getsockname(int fdes, caddr_t asa, \
int *alen); }
-33 AUE_ACCESS NOPROTO { int access(char *path, int amode); }
+33 AUE_ACCESS NOPROTO { int access(const char *path, int amode); }
34 AUE_CHFLAGS NOPROTO { int chflags(const char *path, u_long flags); }
35 AUE_FCHFLAGS NOPROTO { int fchflags(int fd, u_long flags); }
36 AUE_SYNC NOPROTO { int sync(void); }
37 AUE_KILL NOPROTO { int kill(int pid, int signum); }
-38 AUE_STAT COMPAT { int freebsd32_stat(char *path, \
+38 AUE_STAT COMPAT { int freebsd32_stat(const char *path, \
struct ostat32 *ub); }
39 AUE_GETPPID NOPROTO { pid_t getppid(void); }
-40 AUE_LSTAT COMPAT { int freebsd32_lstat(char *path, \
+40 AUE_LSTAT COMPAT { int freebsd32_lstat(const char *path, \
struct ostat *ub); }
41 AUE_DUP NOPROTO { int dup(u_int fd); }
42 AUE_PIPE COMPAT10 { int freebsd32_pipe(void); }
@@ -140,8 +142,8 @@
osigset_t mask); }
49 AUE_GETLOGIN NOPROTO { int getlogin(char *namebuf, \
u_int namelen); }
-50 AUE_SETLOGIN NOPROTO { int setlogin(char *namebuf); }
-51 AUE_ACCT NOPROTO { int acct(char *path); }
+50 AUE_SETLOGIN NOPROTO { int setlogin(const char *namebuf); }
+51 AUE_ACCT NOPROTO { int acct(const char *path); }
52 AUE_SIGPENDING COMPAT { int freebsd32_sigpending(void); }
53 AUE_SIGALTSTACK STD { int freebsd32_sigaltstack( \
struct sigaltstack32 *ss, \
@@ -149,14 +151,15 @@
54 AUE_IOCTL STD { int freebsd32_ioctl(int fd, uint32_t com, \
struct md_ioctl32 *data); }
55 AUE_REBOOT NOPROTO { int reboot(int opt); }
-56 AUE_REVOKE NOPROTO { int revoke(char *path); }
-57 AUE_SYMLINK NOPROTO { int symlink(char *path, char *link); }
-58 AUE_READLINK NOPROTO { ssize_t readlink(char *path, char *buf, \
+56 AUE_REVOKE NOPROTO { int revoke(const char *path); }
+57 AUE_SYMLINK NOPROTO { int symlink(const char *path, \
+ const char *link); }
+58 AUE_READLINK NOPROTO { ssize_t readlink(const char *path, char *buf, \
size_t count); }
-59 AUE_EXECVE STD { int freebsd32_execve(char *fname, \
+59 AUE_EXECVE STD { int freebsd32_execve(const char *fname, \
uint32_t *argv, uint32_t *envv); }
-60 AUE_UMASK NOPROTO { int umask(int newmask); }
-61 AUE_CHROOT NOPROTO { int chroot(char *path); }
+60 AUE_UMASK NOPROTO { int umask(mode_t newmask); }
+61 AUE_CHROOT NOPROTO { int chroot(const char *path); }
62 AUE_FSTAT COMPAT { int freebsd32_fstat(int fd, \
struct ostat32 *ub); }
63 AUE_NULL OBSOL ogetkerninfo
@@ -192,7 +195,7 @@
struct itimerval32 *oitv); }
84 AUE_NULL OBSOL owait
; XXX implement
-85 AUE_SWAPON NOPROTO { int swapon(char *name); }
+85 AUE_SWAPON NOPROTO { int swapon(const char *name); }
86 AUE_GETITIMER STD { int freebsd32_getitimer(u_int which, \
struct itimerval32 *itv); }
87 AUE_O_GETHOSTNAME OBSOL ogethostname
@@ -253,25 +256,26 @@
struct timeval32 *tv, \
struct timezone *tzp); }
123 AUE_FCHOWN NOPROTO { int fchown(int fd, int uid, int gid); }
-124 AUE_FCHMOD NOPROTO { int fchmod(int fd, int mode); }
+124 AUE_FCHMOD NOPROTO { int fchmod(int fd, mode_t mode); }
125 AUE_RECVFROM OBSOL orecvfrom
126 AUE_SETREUID NOPROTO { int setreuid(int ruid, int euid); }
127 AUE_SETREGID NOPROTO { int setregid(int rgid, int egid); }
-128 AUE_RENAME NOPROTO { int rename(char *from, char *to); }
-129 AUE_TRUNCATE COMPAT|NOPROTO { int truncate(char *path, \
+128 AUE_RENAME NOPROTO { int rename(const char *from, \
+ const char *to); }
+129 AUE_TRUNCATE COMPAT|NOPROTO { int truncate(const char *path, \
int length); }
130 AUE_FTRUNCATE COMPAT|NOPROTO { int ftruncate(int fd, int length); }
131 AUE_FLOCK NOPROTO { int flock(int fd, int how); }
-132 AUE_MKFIFO NOPROTO { int mkfifo(char *path, int mode); }
+132 AUE_MKFIFO NOPROTO { int mkfifo(const char *path, mode_t mode); }
133 AUE_SENDTO NOPROTO { int sendto(int s, caddr_t buf, \
size_t len, int flags, caddr_t to, \
int tolen); }
134 AUE_SHUTDOWN NOPROTO { int shutdown(int s, int how); }
135 AUE_SOCKETPAIR NOPROTO { int socketpair(int domain, int type, \
int protocol, int *rsv); }
-136 AUE_MKDIR NOPROTO { int mkdir(char *path, int mode); }
-137 AUE_RMDIR NOPROTO { int rmdir(char *path); }
-138 AUE_UTIMES STD { int freebsd32_utimes(char *path, \
+136 AUE_MKDIR NOPROTO { int mkdir(const char *path, mode_t mode); }
+137 AUE_RMDIR NOPROTO { int rmdir(const char *path); }
+138 AUE_UTIMES STD { int freebsd32_utimes(const char *path, \
struct timeval32 *tptr); }
139 AUE_NULL OBSOL 4.2 sigreturn
140 AUE_ADJTIME STD { int freebsd32_adjtime( \
@@ -284,8 +288,8 @@
145 AUE_SETRLIMIT OBSOL setrlimit
146 AUE_KILLPG OBSOL killpg
147 AUE_SETSID NOPROTO { int setsid(void); }
-148 AUE_QUOTACTL NOPROTO { int quotactl(char *path, int cmd, int uid, \
- caddr_t arg); }
+148 AUE_QUOTACTL NOPROTO { int quotactl(const char *path, int cmd, \
+ int uid, caddr_t arg); }
149 AUE_O_QUOTA OBSOL oquota
150 AUE_GETSOCKNAME OBSOL ogetsockname
@@ -303,13 +307,13 @@
155 AUE_NFS_SVC UNIMPL nfssvc
156 AUE_GETDIRENTRIES COMPAT { int freebsd32_getdirentries(int fd, \
char *buf, u_int count, uint32_t *basep); }
-157 AUE_STATFS COMPAT4 { int freebsd32_statfs(char *path, \
+157 AUE_STATFS COMPAT4 { int freebsd32_statfs(const char *path, \
struct statfs32 *buf); }
158 AUE_FSTATFS COMPAT4 { int freebsd32_fstatfs(int fd, \
struct statfs32 *buf); }
159 AUE_NULL UNIMPL nosys
160 AUE_LGETFH UNIMPL lgetfh
-161 AUE_NFS_GETFH NOPROTO { int getfh(char *fname, \
+161 AUE_NFS_GETFH NOPROTO { int getfh(const char *fname, \
struct fhandle *fhp); }
162 AUE_SYSCTL OBSOL getdomainname
163 AUE_SYSCTL OBSOL setdomainname
@@ -347,13 +351,13 @@
185 AUE_NULL OBSOL lfs_markv
186 AUE_NULL OBSOL lfs_segclean
187 AUE_NULL OBSOL lfs_segwait
-188 AUE_STAT COMPAT11 { int freebsd32_stat(char *path, \
+188 AUE_STAT COMPAT11 { int freebsd32_stat(const char *path, \
struct freebsd11_stat32 *ub); }
189 AUE_FSTAT COMPAT11 { int freebsd32_fstat(int fd, \
struct freebsd11_stat32 *ub); }
-190 AUE_LSTAT COMPAT11 { int freebsd32_lstat(char *path, \
+190 AUE_LSTAT COMPAT11 { int freebsd32_lstat(const char *path, \
struct freebsd11_stat32 *ub); }
-191 AUE_PATHCONF NOPROTO { int pathconf(char *path, int name); }
+191 AUE_PATHCONF NOPROTO { int pathconf(const char *path, int name); }
192 AUE_FPATHCONF NOPROTO { int fpathconf(int fd, int name); }
193 AUE_NULL UNIMPL nosys
194 AUE_GETRLIMIT NOPROTO { int getrlimit(u_int which, \
@@ -372,7 +376,7 @@
199 AUE_LSEEK COMPAT6 { off_t freebsd32_lseek(int fd, int pad, \
uint32_t offset1, uint32_t offset2, \
int whence); }
-200 AUE_TRUNCATE COMPAT6 { int freebsd32_truncate(char *path, \
+200 AUE_TRUNCATE COMPAT6 { int freebsd32_truncate(const char *path, \
int pad, uint32_t length1, \
uint32_t length2); }
201 AUE_FTRUNCATE COMPAT6 { int freebsd32_ftruncate(int fd, int pad, \
@@ -385,7 +389,7 @@
size_t len); }
204 AUE_MUNLOCK NOPROTO { int munlock(const void *addr, \
size_t len); }
-205 AUE_UNDELETE NOPROTO { int undelete(char *path); }
+205 AUE_UNDELETE NOPROTO { int undelete(const char *path); }
206 AUE_FUTIMES STD { int freebsd32_futimes(int fd, \
struct timeval32 *tptr); }
207 AUE_GETPGID NOPROTO { int getpgid(pid_t pid); }
@@ -473,7 +477,8 @@
251 AUE_RFORK NOPROTO { int rfork(int flags); }
252 AUE_POLL OBSOL openbsd_poll
253 AUE_ISSETUGID NOPROTO { int issetugid(void); }
-254 AUE_LCHOWN NOPROTO { int lchown(char *path, int uid, int gid); }
+254 AUE_LCHOWN NOPROTO { int lchown(const char *path, int uid, \
+ int gid); }
255 AUE_AIO_READ STD { int freebsd32_aio_read( \
struct aiocb32 *aiocbp); }
256 AUE_AIO_WRITE STD { int freebsd32_aio_write( \
@@ -498,14 +503,16 @@
272 AUE_O_GETDENTS COMPAT11 { int freebsd32_getdents(int fd, char *buf, \
int count); }
273 AUE_NULL UNIMPL nosys
-274 AUE_LCHMOD NOPROTO { int lchmod(char *path, mode_t mode); }
+274 AUE_LCHMOD NOPROTO { int lchmod(const char *path, mode_t mode); }
275 AUE_NULL OBSOL netbsd_lchown
-276 AUE_LUTIMES STD { int freebsd32_lutimes(char *path, \
+276 AUE_LUTIMES STD { int freebsd32_lutimes(const char *path, \
struct timeval32 *tptr); }
277 AUE_NULL OBSOL netbsd_msync
-278 AUE_STAT COMPAT11|NOPROTO { int nstat(char *path, struct nstat *ub); }
+278 AUE_STAT COMPAT11|NOPROTO { int nstat(const char *path, \
+ struct nstat *ub); }
279 AUE_FSTAT COMPAT11|NOPROTO { int nfstat(int fd, struct nstat *sb); }
-280 AUE_LSTAT COMPAT11|NOPROTO { int nlstat(char *path, struct nstat *ub); }
+280 AUE_LSTAT COMPAT11|NOPROTO { int nlstat(const char *path, \
+ struct nstat *ub); }
281 AUE_NULL UNIMPL nosys
282 AUE_NULL UNIMPL nosys
283 AUE_NULL UNIMPL nosys
@@ -680,7 +687,7 @@
const char *attrname); }
374 AUE_SETUGID NOPROTO { int __setugid(int flag); }
375 AUE_NULL OBSOL nfsclnt
-376 AUE_EACCESS NOPROTO { int eaccess(char *path, int amode); }
+376 AUE_EACCESS NOPROTO { int eaccess(const char *path, int amode); }
377 AUE_NULL UNIMPL afs_syscall
378 AUE_NMOUNT STD { int freebsd32_nmount(struct iovec32 *iovp, \
unsigned int iovcnt, int flags); }
@@ -709,7 +716,7 @@
395 AUE_GETFSSTAT COMPAT11|NOPROTO { int getfsstat( \
struct freebsd11_statfs *buf, \
long bufsize, int mode); }
-396 AUE_STATFS COMPAT11|NOPROTO { int statfs(char *path, \
+396 AUE_STATFS COMPAT11|NOPROTO { int statfs(const char *path, \
struct statfs *buf); }
397 AUE_FSTATFS COMPAT11|NOPROTO { int fstatfs(int fd, \
struct freebsd11_statfs *buf); }
@@ -808,7 +815,7 @@
452 AUE_SETAUDIT_ADDR NOPROTO { int setaudit_addr( \
struct auditinfo_addr *auditinfo_addr, \
u_int length); }
-453 AUE_AUDITCTL NOPROTO { int auditctl(char *path); }
+453 AUE_AUDITCTL NOPROTO { int auditctl(const char *path); }
454 AUE_NULL STD { int freebsd32_umtx_op(void *obj, int op,\
u_long val, void *uaddr, \
void *uaddr2); }
@@ -871,7 +878,7 @@
int pad, \
uint32_t offset1, uint32_t offset2, \
int whence); }
-479 AUE_TRUNCATE STD { int freebsd32_truncate(char *path, \
+479 AUE_TRUNCATE STD { int freebsd32_truncate(const char *path, \
int pad, \
uint32_t length1, uint32_t length2); }
480 AUE_FTRUNCATE STD { int freebsd32_ftruncate(int fd, \
@@ -890,7 +897,7 @@
478 AUE_LSEEK STD { off_t freebsd32_lseek(int fd, \
uint32_t offset1, uint32_t offset2, \
int whence); }
-479 AUE_TRUNCATE STD { int freebsd32_truncate(char *path, \
+479 AUE_TRUNCATE STD { int freebsd32_truncate(const char *path, \
uint32_t length1, uint32_t length2); }
480 AUE_FTRUNCATE STD { int freebsd32_ftruncate(int fd, \
uint32_t length1, uint32_t length2); }
@@ -924,36 +931,39 @@
uint32_t id1, uint32_t id2, \
size_t cpusetsize, \
const cpuset_t *mask); }
-489 AUE_FACCESSAT NOPROTO { int faccessat(int fd, char *path, int amode, \
- int flag); }
+489 AUE_FACCESSAT NOPROTO { int faccessat(int fd, const char *path, \
+ int amode, int flag); }
490 AUE_FCHMODAT NOPROTO { int fchmodat(int fd, const char *path, \
mode_t mode, int flag); }
-491 AUE_FCHOWNAT NOPROTO { int fchownat(int fd, char *path, uid_t uid, \
- gid_t gid, int flag); }
+491 AUE_FCHOWNAT NOPROTO { int fchownat(int fd, const char *path, \
+ uid_t uid, gid_t gid, int flag); }
492 AUE_FEXECVE STD { int freebsd32_fexecve(int fd, \
uint32_t *argv, uint32_t *envv); }
493 AUE_FSTATAT COMPAT11 { int freebsd32_fstatat(int fd, \
- char *path, struct freebsd11_stat32 *buf, \
+ const char *path, \
+ struct freebsd11_stat32 *buf, \
int flag); }
-494 AUE_FUTIMESAT STD { int freebsd32_futimesat(int fd, char *path, \
+494 AUE_FUTIMESAT STD { int freebsd32_futimesat(int fd, \
+ const char *path, \
struct timeval *times); }
-495 AUE_LINKAT NOPROTO { int linkat(int fd1, char *path1, int fd2, \
- char *path2, int flag); }
-496 AUE_MKDIRAT NOPROTO { int mkdirat(int fd, char *path, \
- mode_t mode); }
-497 AUE_MKFIFOAT NOPROTO { int mkfifoat(int fd, char *path, \
+495 AUE_LINKAT NOPROTO { int linkat(int fd1, const char *path1, \
+ int fd2, const char *path2, int flag); }
+496 AUE_MKDIRAT NOPROTO { int mkdirat(int fd, const char *path, \
mode_t mode); }
-498 AUE_MKNODAT COMPAT11 { int freebsd32_mknodat(int fd, char *path, \
- mode_t mode, uint32_t dev); }
-499 AUE_OPENAT_RWTC NOPROTO { int openat(int fd, char *path, int flag, \
+497 AUE_MKFIFOAT NOPROTO { int mkfifoat(int fd, const char *path, \
mode_t mode); }
-500 AUE_READLINKAT NOPROTO { int readlinkat(int fd, char *path, char *buf, \
- size_t bufsize); }
-501 AUE_RENAMEAT NOPROTO { int renameat(int oldfd, char *old, int newfd, \
- const char *new); }
-502 AUE_SYMLINKAT NOPROTO { int symlinkat(char *path1, int fd, \
- char *path2); }
-503 AUE_UNLINKAT NOPROTO { int unlinkat(int fd, char *path, \
+498 AUE_MKNODAT COMPAT11 { int freebsd32_mknodat(int fd, \
+ const char *path, mode_t mode, \
+ uint32_t dev); }
+499 AUE_OPENAT_RWTC NOPROTO { int openat(int fd, const char *path, \
+ int flag, mode_t mode); }
+500 AUE_READLINKAT NOPROTO { int readlinkat(int fd, const char *path, \
+ char *buf, size_t bufsize); }
+501 AUE_RENAMEAT NOPROTO { int renameat(int oldfd, const char *old, \
+ int newfd, const char *new); }
+502 AUE_SYMLINKAT NOPROTO { int symlinkat(const char *path1, int fd, \
+ const char *path2); }
+503 AUE_UNLINKAT NOPROTO { int unlinkat(int fd, const char *path, \
int flag); }
504 AUE_POSIX_OPENPT NOPROTO { int posix_openpt(int flags); }
; 505 is initialised by the kgssapi code, if present.
@@ -970,7 +980,7 @@
struct msqid_ds32 *buf); }
512 AUE_SHMCTL NOSTD { int freebsd32_shmctl(int shmid, int cmd, \
struct shmid_ds32 *buf); }
-513 AUE_LPATHCONF NOPROTO { int lpathconf(char *path, int name); }
+513 AUE_LPATHCONF NOPROTO { int lpathconf(const char *path, int name); }
514 AUE_NULL OBSOL cap_new
515 AUE_CAP_RIGHTS_GET NOPROTO { int __cap_rights_get(int version, \
int fd, cap_rights_t *rightsp); }
@@ -1072,7 +1082,7 @@
546 AUE_FUTIMES STD { int freebsd32_futimens(int fd, \
struct timespec *times); }
547 AUE_FUTIMESAT STD { int freebsd32_utimensat(int fd, \
- char *path, \
+ const char *path, \
struct timespec *times, int flag); }
548 AUE_NULL OBSOL numa_getaffinity
549 AUE_NULL OBSOL numa_setaffinity
@@ -1080,7 +1090,7 @@
551 AUE_FSTAT STD { int freebsd32_fstat(int fd, \
struct stat32 *ub); }
552 AUE_FSTATAT STD { int freebsd32_fstatat(int fd, \
- char *path, struct stat32 *buf, \
+ const char *path, struct stat32 *buf, \
int flag); }
553 AUE_FHSTAT STD { int freebsd32_fhstat( \
const struct fhandle *u_fhp, \
@@ -1088,15 +1098,15 @@
554 AUE_GETDIRENTRIES NOPROTO { ssize_t getdirentries( \
int fd, char *buf, size_t count, \
off_t *basep); }
-555 AUE_STATFS NOPROTO { int statfs(char *path, \
+555 AUE_STATFS NOPROTO { int statfs(const char *path, \
struct statfs32 *buf); }
556 AUE_FSTATFS NOPROTO { int fstatfs(int fd, struct statfs32 *buf); }
557 AUE_GETFSSTAT NOPROTO { int getfsstat(struct statfs32 *buf, \
long bufsize, int mode); }
558 AUE_FHSTATFS NOPROTO { int fhstatfs(const struct fhandle *u_fhp, \
struct statfs32 *buf); }
-559 AUE_MKNODAT NOPROTO { int mknodat(int fd, char *path, mode_t mode, \
- dev_t dev); }
+559 AUE_MKNODAT NOPROTO { int mknodat(int fd, const char *path, \
+ mode_t mode, dev_t dev); }
560 AUE_KEVENT STD { int freebsd32_kevent(int fd, \
const struct kevent32 *changelist, \
int nchanges, \
diff --git a/sys/compat/linuxkpi/common/include/linux/dmapool.h b/sys/compat/linuxkpi/common/include/linux/dmapool.h
index 0253d6f63e49..c68e34264f76 100644
--- a/sys/compat/linuxkpi/common/include/linux/dmapool.h
+++ b/sys/compat/linuxkpi/common/include/linux/dmapool.h
@@ -77,6 +77,13 @@ dma_pool_alloc(struct dma_pool *pool, gfp_t mem_flags, dma_addr_t *handle)
return (vaddr);
}
+static inline void *
+dma_pool_zalloc(struct dma_pool *pool, gfp_t mem_flags, dma_addr_t *handle)
+{
+
+ return (dma_pool_alloc(pool, mem_flags | __GFP_ZERO, handle));
+}
+
static inline void
dma_pool_free(struct dma_pool *pool, void *vaddr, dma_addr_t addr)
{
diff --git a/sys/compat/linuxkpi/common/include/linux/gfp.h b/sys/compat/linuxkpi/common/include/linux/gfp.h
index 5d6d4da3515a..a20e3606ca05 100644
--- a/sys/compat/linuxkpi/common/include/linux/gfp.h
+++ b/sys/compat/linuxkpi/common/include/linux/gfp.h
@@ -52,6 +52,7 @@
#define __GFP_RETRY_MAYFAIL 0
#define __GFP_MOVABLE 0
#define __GFP_COMP 0
+#define __GFP_KSWAPD_RECLAIM 0
#define __GFP_IO 0
#define __GFP_NO_KSWAPD 0
@@ -73,6 +74,7 @@
#define GFP_TEMPORARY M_NOWAIT
#define GFP_NATIVE_MASK (M_NOWAIT | M_WAITOK | M_USE_RESERVE | M_ZERO)
#define GFP_TRANSHUGE 0
+#define GFP_TRANSHUGE_LIGHT 0
CTASSERT((__GFP_DMA32 & GFP_NATIVE_MASK) == 0);
CTASSERT((__GFP_BITS_MASK & GFP_NATIVE_MASK) == GFP_NATIVE_MASK);
diff --git a/sys/compat/linuxkpi/common/include/linux/kernel.h b/sys/compat/linuxkpi/common/include/linux/kernel.h
index b66323d945de..5ff30ba9c28d 100644
--- a/sys/compat/linuxkpi/common/include/linux/kernel.h
+++ b/sys/compat/linuxkpi/common/include/linux/kernel.h
@@ -131,12 +131,16 @@
#undef PTR_ALIGN
#define PTR_ALIGN(p, a) ((__typeof(p))ALIGN((uintptr_t)(p), (a)))
#define DIV_ROUND_UP(x, n) howmany(x, n)
+#define __KERNEL_DIV_ROUND_UP(x, n) howmany(x, n)
#define DIV_ROUND_UP_ULL(x, n) DIV_ROUND_UP((unsigned long long)(x), (n))
#define FIELD_SIZEOF(t, f) sizeof(((t *)0)->f)
#define printk(...) printf(__VA_ARGS__)
#define vprintk(f, a) vprintf(f, a)
+extern void linux_dump_stack(void);
+#define dump_stack() linux_dump_stack()
+
struct va_format {
const char *fmt;
va_list *va;
diff --git a/sys/compat/linuxkpi/common/src/linux_compat.c b/sys/compat/linuxkpi/common/src/linux_compat.c
index e3fb0a0ce496..1cae0fcf1427 100644
--- a/sys/compat/linuxkpi/common/src/linux_compat.c
+++ b/sys/compat/linuxkpi/common/src/linux_compat.c
@@ -30,6 +30,8 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include "opt_stack.h"
+
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/malloc.h>
@@ -46,6 +48,7 @@ __FBSDID("$FreeBSD$");
#include <sys/filio.h>
#include <sys/rwlock.h>
#include <sys/mman.h>
+#include <sys/stack.h>
#include <vm/vm.h>
#include <vm/pmap.h>
@@ -2207,6 +2210,18 @@ __unregister_chrdev(unsigned int major, unsigned int baseminor,
}
}
+void
+linux_dump_stack(void)
+{
+#ifdef STACK
+ struct stack st;
+
+ stack_zero(&st);
+ stack_save(&st);
+ stack_print(&st);
+#endif
+}
+
#if defined(__i386__) || defined(__amd64__)
bool linux_cpu_has_clflush;
#endif
diff --git a/sys/conf/Makefile.amd64 b/sys/conf/Makefile.amd64
index 696ef55a3fb0..d34359f1d30b 100644
--- a/sys/conf/Makefile.amd64
+++ b/sys/conf/Makefile.amd64
@@ -37,9 +37,6 @@ INCLUDES+= -I$S/contrib/libfdt
CFLAGS+= -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer
.endif
-ASM_CFLAGS.acpi_wakecode.S= ${CLANG_NO_IAS34}
-ASM_CFLAGS.mpboot.S= ${CLANG_NO_IAS34}
-
%BEFORE_DEPEND
%OBJS
diff --git a/sys/conf/Makefile.i386 b/sys/conf/Makefile.i386
index 6b1eca42f1bb..621ebff79e19 100644
--- a/sys/conf/Makefile.i386
+++ b/sys/conf/Makefile.i386
@@ -32,9 +32,6 @@ S= ../../..
INCLUDES+= -I$S/contrib/libfdt
-ASM_CFLAGS.acpi_wakecode.S= ${CLANG_NO_IAS34}
-ASM_CFLAGS.mpboot.s= ${CLANG_NO_IAS34}
-
%BEFORE_DEPEND
%OBJS
diff --git a/sys/conf/files.amd64 b/sys/conf/files.amd64
index 097c3ff26eee..8c09cf6617a0 100644
--- a/sys/conf/files.amd64
+++ b/sys/conf/files.amd64
@@ -721,6 +721,7 @@ x86/isa/isa_dma.c standard
x86/isa/nmi.c standard
x86/isa/orm.c optional isa
x86/pci/pci_bus.c optional pci
+x86/pci/pci_early_quirks.c optional pci
x86/pci/qpi.c optional pci
x86/x86/autoconf.c standard
x86/x86/bus_machdep.c standard
diff --git a/sys/conf/kern.mk b/sys/conf/kern.mk
index 3cd293b3342f..76bfa3e9e67f 100644
--- a/sys/conf/kern.mk
+++ b/sys/conf/kern.mk
@@ -40,10 +40,6 @@ CWARNEXTRA+= -Wno-address-of-packed-member
.endif
CLANG_NO_IAS= -no-integrated-as
-.if ${COMPILER_VERSION} < 30500
-# XXX: clang < 3.5 integrated-as doesn't grok .codeNN directives
-CLANG_NO_IAS34= -no-integrated-as
-.endif
.endif
.if ${COMPILER_TYPE} == "gcc"
diff --git a/sys/conf/kern.post.mk b/sys/conf/kern.post.mk
index 046080f42f1c..98d179446905 100644
--- a/sys/conf/kern.post.mk
+++ b/sys/conf/kern.post.mk
@@ -35,15 +35,34 @@ KERN_DEBUGDIR?= ${DEBUGDIR}
.MAIN: all
+.if !defined(NO_MODULES)
+# Default prefix used for modules installed from ports
+LOCALBASE?= /usr/local
+
+LOCAL_MODULES_DIR?= ${LOCALBASE}/sys/modules
+
+# Default to installing all modules installed by ports unless overridden
+# by the user.
+.if !defined(LOCAL_MODULES) && exists($LOCAL_MODULES_DIR)
+LOCAL_MODULES!= ls ${LOCAL_MODULES_DIR}
+.endif
+.endif
+
.for target in all clean cleandepend cleandir clobber depend install \
${_obj} reinstall tags
${target}: kernel-${target}
-.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists($S/modules)
+.if !defined(NO_MODULES)
${target}: modules-${target}
modules-${target}:
+.if !defined(MODULES_WITH_WORLD) && exists($S/modules)
cd $S/modules; ${MKMODULESENV} ${MAKE} \
${target:S/^reinstall$/install/:S/^clobber$/cleandir/}
.endif
+.for module in ${LOCAL_MODULES}
+ cd ${LOCAL_MODULES_DIR}/${module}; ${MKMODULESENV} ${MAKE} \
+ ${target:S/^reinstall$/install/:S/^clobber$/cleandir/}
+.endfor
+.endif
.endfor
# Handle ports (as defined by the user) that build kernel modules
@@ -51,8 +70,6 @@ modules-${target}:
#
# The ports tree needs some environment variables defined to match the new kernel
#
-# Ports search for some dependencies in PATH, so add the location of the installed files
-LOCALBASE?= /usr/local
# SRC_BASE is how the ports tree refers to the location of the base source files
.if !defined(SRC_BASE)
SRC_BASE= ${SYSDIR:H:tA}
@@ -64,6 +81,9 @@ OSRELDATE!= awk '/^\#define[[:space:]]*__FreeBSD_version/ { print $$3 }' \
${MAKEOBJDIRPREFIX}${SRC_BASE}/include/osreldate.h
.endif
# Keep the related ports builds in the obj directory so that they are only rebuilt once per kernel build
+#
+# Ports search for some dependencies in PATH, so add the location of the
+# installed files
WRKDIRPREFIX?= ${.OBJDIR}
PORTSMODULESENV=\
env \
@@ -110,7 +130,7 @@ kernel-clobber:
kernel-obj:
-.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists($S/modules)
+.if !defined(NO_MODULES)
modules: modules-all
.if !defined(NO_MODULES_OBJ)
diff --git a/sys/conf/newvers.sh b/sys/conf/newvers.sh
index 120b96473166..8c1937fcc166 100644
--- a/sys/conf/newvers.sh
+++ b/sys/conf/newvers.sh
@@ -76,6 +76,35 @@ findvcs()
return 1
}
+git_tree_modified()
+{
+ # git diff-index lists both files that are known to have changes as
+ # well as those with metadata that does not match what is recorded in
+ # git's internal state. The latter case is indicated by an all-zero
+ # destination file hash.
+
+ local fifo vcstop_abs
+
+ fifo=$(mktemp -u)
+ mkfifo -m 600 $fifo
+ vcstop_abs=$(realpath $VCSTOP)
+ $git_cmd --work-tree=${VCSTOP} diff-index HEAD > $fifo &
+ while read smode dmode ssha dsha status file; do
+ if ! expr $dsha : '^00*$' >/dev/null; then
+ rm $fifo
+ return 0
+ fi
+ if ! $git_cmd diff --quiet -- "${vcstop_abs}/${file}"; then
+ rm $fifo
+ return 0
+ fi
+ done < $fifo
+ # No files with content differences.
+ rm $fifo
+ return 1
+}
+
+
if [ -z "${SYSDIR}" ]; then
SYSDIR=$(dirname $0)/..
fi
@@ -240,8 +269,7 @@ if [ -n "$git_cmd" ] ; then
if [ -n "$git_b" ] ; then
git="${git}(${git_b})"
fi
- if $git_cmd --work-tree=${VCSTOP} diff-index \
- --name-only HEAD | read dummy; then
+ if git_tree_modified; then
git="${git}-dirty"
modified=true
fi
diff --git a/sys/conf/options b/sys/conf/options
index 2519d17411e7..9d86cbdfd663 100644
--- a/sys/conf/options
+++ b/sys/conf/options
@@ -95,6 +95,7 @@ _COMPAT_LINUX32 opt_compat.h # XXX: make sure opt_compat.h exists
COMPILING_LINT opt_global.h
CY_PCI_FASTINTR
DEADLKRES opt_watchdog.h
+EXPERIMENTAL opt_global.h
EXT_RESOURCES opt_global.h
DIRECTIO
FILEMON opt_dontuse.h
diff --git a/sys/contrib/dev/acpica/changes.txt b/sys/contrib/dev/acpica/changes.txt
index c84aab623809..91ac04cfef80 100644
--- a/sys/contrib/dev/acpica/changes.txt
+++ b/sys/contrib/dev/acpica/changes.txt
@@ -1,4 +1,54 @@
----------------------------------------
+31 October 2018. Summary of changes for version 20181031:
+
+This release is available at https://acpica.org/downloads
+
+
+An Operation Region regression was fixed by properly adding address
+ranges to a global list during initialization. This allows OS to
+accurately check for overlapping regions between native devices (such as
+PCI) and Operation regions as well as checking for region conflicts
+between two Operation Regions.
+
+Added support for the 2-byte extended opcodes in the code/feature that
+attempts to continue parsing during the table load phase. Skip parsing
+Device declarations (and other extended opcodes) when an error occurs
+during parsing. Previously, only single-byte opcodes were supported.
+
+Cleanup: Simplified the module-level code support by eliminating a
+useless global variable (AcpiGbl_GroupModuleLeveCode).
+
+
+2) iASL Compiler/Disassembler and Tools:
+
+iASL/Preprocessor: Fixed a regression where an incorrect use of ACPI_FREE
+could cause a fault in the preprocessor. This was an inadvertent side-
+effect from moving more allocations/frees to the local cache/memory
+mechanism.
+
+iASL: Enhanced error detection by validating that all NameSeg elements
+within a NamePatch actually exist. The previous behavior was spotty at
+best, and such errors could be improperly ignored at compiler time (never
+at runtime, however. There are two new error messages, as shown in the
+examples below:
+
+dsdt.asl 33: CreateByteField (TTTT.BXXX, 1, CBF1)
+Error 6161 - ^ One or more objects within
+the Pathname do not exist (TTTT.BXXX)
+
+dsdt.asl 34: CreateByteField (BUF1, UUUU.INT1, BBBB.CBF1)
+Error 6160 - One or more prefix Scopes do not exist ^
+(BBBB.CBF1)
+
+iASL: Disassembler/table-compiler: Added support for the static data
+table TPM2 revision 3 (an older version of TPM2). The support has been
+added for the compiler and the disassembler.
+
+Fixed compilation of DOS format data table file on Unix/Linux systems.
+iASL now properly detects line continuations (\) for DOS format data
+table definition language files on when executing on Unix/Linux.
+
+----------------------------------------
03 October 2018. Summary of changes for version 20181003:
diff --git a/sys/contrib/dev/acpica/common/dmtbdump3.c b/sys/contrib/dev/acpica/common/dmtbdump3.c
index a67deebc155d..7037d0d1d7b0 100644
--- a/sys/contrib/dev/acpica/common/dmtbdump3.c
+++ b/sys/contrib/dev/acpica/common/dmtbdump3.c
@@ -497,6 +497,51 @@ AcpiDmDumpTcpa (
* DESCRIPTION: Format the contents of a TPM2.
*
******************************************************************************/
+static void
+AcpiDmDumpTpm2Rev3 (
+ ACPI_TABLE_HEADER *Table)
+{
+ UINT32 Offset = sizeof (ACPI_TABLE_TPM23);
+ ACPI_TABLE_TPM23 *CommonHeader = ACPI_CAST_PTR (ACPI_TABLE_TPM23, Table);
+ ACPI_TPM23_TRAILER *Subtable = ACPI_ADD_PTR (ACPI_TPM23_TRAILER, Table, Offset);
+ ACPI_STATUS Status;
+
+
+ /* Main table */
+
+ Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoTpm23);
+ if (ACPI_FAILURE (Status))
+ {
+ return;
+ }
+
+ /* Optional subtable if start method is ACPI start method */
+
+ switch (CommonHeader->StartMethod)
+ {
+ case ACPI_TPM23_ACPI_START_METHOD:
+
+ Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+ Table->Length - Offset, AcpiDmTableInfoTpm23a);
+ break;
+
+ default:
+ break;
+ }
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmDumpTpm2
+ *
+ * PARAMETERS: Table - A TPM2 table
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Format the contents of a TPM2.
+ *
+ ******************************************************************************/
void
AcpiDmDumpTpm2 (
@@ -509,9 +554,16 @@ AcpiDmDumpTpm2 (
ACPI_STATUS Status;
+ if (Table->Revision == 3)
+ {
+ AcpiDmDumpTpm2Rev3(Table);
+ return;
+ }
+
/* Main table */
Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoTpm2);
+
if (ACPI_FAILURE (Status))
{
return;
diff --git a/sys/contrib/dev/acpica/common/dmtbinfo3.c b/sys/contrib/dev/acpica/common/dmtbinfo3.c
index e971ad492b64..0cdefbc40cfe 100644
--- a/sys/contrib/dev/acpica/common/dmtbinfo3.c
+++ b/sys/contrib/dev/acpica/common/dmtbinfo3.c
@@ -446,6 +446,26 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaServer[] =
*
******************************************************************************/
+/* TPM2 revision 3 */
+
+ACPI_DMTABLE_INFO AcpiDmTableInfoTpm23[] =
+{
+ {ACPI_DMT_UINT32, ACPI_TPM23_OFFSET (Reserved), "Reserved", 0},
+ {ACPI_DMT_UINT64, ACPI_TPM23_OFFSET (ControlAddress), "Control Address", 0},
+ {ACPI_DMT_UINT32, ACPI_TPM23_OFFSET (StartMethod), "Start Method", 0},
+ ACPI_DMT_TERMINATOR
+};
+
+/* Trailer in the case that StartMethod == 2 */
+
+ACPI_DMTABLE_INFO AcpiDmTableInfoTpm23a[] =
+{
+ {ACPI_DMT_UINT32, ACPI_TPM23A_OFFSET (Reserved), "Reserved", DT_OPTIONAL},
+ ACPI_DMT_TERMINATOR
+};
+
+/* TPM2 revision 4 */
+
ACPI_DMTABLE_INFO AcpiDmTableInfoTpm2[] =
{
{ACPI_DMT_UINT16, ACPI_TPM2_OFFSET (PlatformClass), "Platform Class", 0},
diff --git a/sys/contrib/dev/acpica/compiler/aslcompile.c b/sys/contrib/dev/acpica/compiler/aslcompile.c
index d857ff6ea0b6..51fa6c04608d 100644
--- a/sys/contrib/dev/acpica/compiler/aslcompile.c
+++ b/sys/contrib/dev/acpica/compiler/aslcompile.c
@@ -858,7 +858,7 @@ CmCleanupAndExit (
if (AslGbl_ExceptionCount[ASL_ERROR] > ASL_MAX_ERROR_COUNT)
{
- printf ("\nMaximum error count (%u) exceeded\n",
+ printf ("\nMaximum error count (%d) exceeded\n",
ASL_MAX_ERROR_COUNT);
}
diff --git a/sys/contrib/dev/acpica/compiler/aslerror.c b/sys/contrib/dev/acpica/compiler/aslerror.c
index 0b84a3608214..9ddb68322945 100644
--- a/sys/contrib/dev/acpica/compiler/aslerror.c
+++ b/sys/contrib/dev/acpica/compiler/aslerror.c
@@ -1097,7 +1097,7 @@ AslExpectException (
if (AslGbl_ExpectedMessagesIndex >= ASL_MAX_EXPECTED_MESSAGES)
{
- printf ("Too many messages have been registered as expected (max %u)\n",
+ printf ("Too many messages have been registered as expected (max %d)\n",
ASL_MAX_DISABLED_MESSAGES);
return (AE_LIMIT);
}
@@ -1144,7 +1144,7 @@ AslDisableException (
if (AslGbl_DisabledMessagesIndex >= ASL_MAX_DISABLED_MESSAGES)
{
- printf ("Too many messages have been disabled (max %u)\n",
+ printf ("Too many messages have been disabled (max %d)\n",
ASL_MAX_DISABLED_MESSAGES);
return (AE_LIMIT);
}
diff --git a/sys/contrib/dev/acpica/compiler/aslload.c b/sys/contrib/dev/acpica/compiler/aslload.c
index dc7071d8f8cf..69cb6e9db7d5 100644
--- a/sys/contrib/dev/acpica/compiler/aslload.c
+++ b/sys/contrib/dev/acpica/compiler/aslload.c
@@ -417,10 +417,8 @@ LdLoadResourceElements (
{
Status = AcpiNsLookup (WalkState->ScopeInfo,
InitializerOp->Asl.ExternalName,
- ACPI_TYPE_LOCAL_RESOURCE_FIELD,
- ACPI_IMODE_LOAD_PASS1,
- ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE,
- NULL, &Node);
+ ACPI_TYPE_LOCAL_RESOURCE_FIELD, ACPI_IMODE_LOAD_PASS1,
+ ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE, NULL, &Node);
if (ACPI_FAILURE (Status))
{
return (Status);
@@ -687,8 +685,7 @@ LdNamespace1Begin (
* handle this case. Perhaps someday this case can go away.
*/
Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ACPI_TYPE_ANY,
- ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT,
- WalkState, &(Node));
+ ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT, WalkState, &Node);
if (ACPI_FAILURE (Status))
{
if (Status == AE_NOT_FOUND)
@@ -696,23 +693,26 @@ LdNamespace1Begin (
/* The name was not found, go ahead and create it */
Status = AcpiNsLookup (WalkState->ScopeInfo, Path,
- ACPI_TYPE_LOCAL_SCOPE,
- ACPI_IMODE_LOAD_PASS1, Flags,
- WalkState, &(Node));
+ ACPI_TYPE_LOCAL_SCOPE, ACPI_IMODE_LOAD_PASS1,
+ Flags, WalkState, &Node);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
- /*
- * However, this is an error -- primarily because the MS
- * interpreter can't handle a forward reference from the
- * Scope() operator.
- */
- AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
- Op->Asl.ExternalName);
- AslError (ASL_ERROR, ASL_MSG_SCOPE_FWD_REF, Op,
- Op->Asl.ExternalName);
+ /* However, this is an error -- operand to Scope must exist */
+
+ if (strlen (Op->Asl.ExternalName) == ACPI_NAME_SIZE)
+ {
+ AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
+ Op->Asl.ExternalName);
+ }
+ else
+ {
+ AslError (ASL_ERROR, ASL_MSG_NAMEPATH_NOT_EXIST, Op,
+ Op->Asl.ExternalName);
+ }
+
goto FinishNode;
}
@@ -824,7 +824,6 @@ LdNamespace1Begin (
break;
}
-
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Loading name: %s, (%s)\n",
Op->Asl.ExternalName, AcpiUtGetTypeName (ObjectType)));
@@ -833,6 +832,18 @@ LdNamespace1Begin (
Flags |= ACPI_NS_ERROR_IF_FOUND;
/*
+ * For opcodes that enter new names into the namespace,
+ * all prefix NameSegs must exist.
+ */
+ WalkState->OpInfo = AcpiPsGetOpcodeInfo (Op->Asl.AmlOpcode);
+ if (((WalkState->OpInfo->Flags & AML_NAMED) ||
+ (WalkState->OpInfo->Flags & AML_CREATE)) &&
+ (Op->Asl.AmlOpcode != AML_EXTERNAL_OP))
+ {
+ Flags |= ACPI_NS_PREFIX_MUST_EXIST;
+ }
+
+ /*
* Enter the named type into the internal namespace. We enter the name
* as we go downward in the parse tree. Any necessary subobjects that
* involve arguments to the opcode must be created as we go back up the
@@ -915,8 +926,20 @@ LdNamespace1Begin (
return_ACPI_STATUS (AE_OK);
}
}
+ else if (AE_NOT_FOUND)
+ {
+ /*
+ * One or more prefix NameSegs of the NamePath do not exist
+ * (all of them must exist). Attempt to continue compilation
+ * by setting the current scope to the root.
+ */
+ Node = AcpiGbl_RootNode;
+ Status = AE_OK;
+ }
else
{
+ /* Flag all other errors as coming from the ACPICA core */
+
AslCoreSubsystemError (Op, Status,
"Failure from namespace lookup", FALSE);
return_ACPI_STATUS (Status);
@@ -1043,10 +1066,10 @@ LdNamespace2Begin (
if (Op->Asl.ParseOpcode == PARSEOP_ALIAS)
{
- /* Complete the alias node by getting and saving the target node */
-
- /* First child is the alias target */
-
+ /*
+ * Complete the alias node by getting and saving the target node.
+ * First child is the alias target
+ */
Arg = Op->Asl.Child;
/* Get the target pathname */
@@ -1070,18 +1093,34 @@ LdNamespace2Begin (
{
if (Status == AE_NOT_FOUND)
{
- AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
- Op->Asl.ExternalName);
+ /* Standalone NameSeg vs. NamePath */
+
+ if (strlen (Arg->Asl.ExternalName) == ACPI_NAME_SIZE)
+ {
+ AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
+ Arg->Asl.ExternalName);
+ }
+ else
+ {
+ AslError (ASL_ERROR, ASL_MSG_NAMEPATH_NOT_EXIST, Op,
+ Arg->Asl.ExternalName);
+ }
+#if 0
+/*
+ * NOTE: Removed 10/2018 to enhance compiler error reporting. No
+ * regressions seen.
+ */
/*
* The name was not found, go ahead and create it.
* This prevents more errors later.
*/
Status = AcpiNsLookup (WalkState->ScopeInfo, Path,
- ACPI_TYPE_ANY,
- ACPI_IMODE_LOAD_PASS1, ACPI_NS_NO_UPSEARCH,
- WalkState, &(Node));
- return (AE_OK);
+ ACPI_TYPE_ANY, ACPI_IMODE_LOAD_PASS1,
+ ACPI_NS_NO_UPSEARCH, WalkState, &Node);
+#endif
+ return (Status);
+/* Removed: return (AE_OK)*/
}
AslCoreSubsystemError (Op, Status,
diff --git a/sys/contrib/dev/acpica/compiler/aslmain.c b/sys/contrib/dev/acpica/compiler/aslmain.c
index 02fa6c29adc6..ca700e8f317b 100644
--- a/sys/contrib/dev/acpica/compiler/aslmain.c
+++ b/sys/contrib/dev/acpica/compiler/aslmain.c
@@ -329,7 +329,7 @@ AslSignalHandler (
default:
- printf (ASL_PREFIX "Unknown interrupt signal (%u)\n", Sig);
+ printf (ASL_PREFIX "Unknown interrupt signal (%d)\n", Sig);
break;
}
diff --git a/sys/contrib/dev/acpica/compiler/aslmessages.c b/sys/contrib/dev/acpica/compiler/aslmessages.c
index 60f584128cbf..a5182cbb878a 100644
--- a/sys/contrib/dev/acpica/compiler/aslmessages.c
+++ b/sys/contrib/dev/acpica/compiler/aslmessages.c
@@ -285,7 +285,7 @@ const char *AslCompilerMsgs [] =
/* ASL_MSG_NON_ASCII */ "Invalid characters found in file",
/* ASL_MSG_NON_ZERO */ "Operand evaluates to zero",
/* ASL_MSG_NOT_EXIST */ "Object does not exist",
-/* ASL_MSG_NOT_FOUND */ "Object not found or not accessible from scope",
+/* ASL_MSG_NOT_FOUND */ "Object not found or not accessible from current scope",
/* ASL_MSG_NOT_METHOD */ "Not a control method, cannot invoke",
/* ASL_MSG_NOT_PARAMETER */ "Not a parameter, used as local only",
/* ASL_MSG_NOT_REACHABLE */ "Object is not accessible from this scope",
@@ -359,7 +359,9 @@ const char *AslCompilerMsgs [] =
/* ASL_MSG_OEM_ID */ "Invalid OEM ID",
/* ASL_MSG_UNLOAD */ "Unload is not supported by all operating systems",
/* ASL_MSG_OFFSET */ "Unnecessary/redundant use of Offset operator",
-/* ASL_MSG_LONG_SLEEP */ "Very long Sleep, greater than 1 second"
+/* ASL_MSG_LONG_SLEEP */ "Very long Sleep, greater than 1 second",
+/* ASL_MSG_PREFIX_NOT_EXIST */ "One or more prefix Scopes do not exist",
+/* ASL_MSG_NAMEPATH_NOT_EXIST */ "One or more objects within the Pathname do not exist"
};
/* Table compiler */
diff --git a/sys/contrib/dev/acpica/compiler/aslmessages.h b/sys/contrib/dev/acpica/compiler/aslmessages.h
index 907744a23a57..c932aded425a 100644
--- a/sys/contrib/dev/acpica/compiler/aslmessages.h
+++ b/sys/contrib/dev/acpica/compiler/aslmessages.h
@@ -362,6 +362,8 @@ typedef enum
ASL_MSG_UNLOAD,
ASL_MSG_OFFSET,
ASL_MSG_LONG_SLEEP,
+ ASL_MSG_PREFIX_NOT_EXIST,
+ ASL_MSG_NAMEPATH_NOT_EXIST,
/* These messages are used by the Data Table compiler only */
diff --git a/sys/contrib/dev/acpica/compiler/aslpredef.c b/sys/contrib/dev/acpica/compiler/aslpredef.c
index f615a6dffb6f..2ff46bb9d993 100644
--- a/sys/contrib/dev/acpica/compiler/aslpredef.c
+++ b/sys/contrib/dev/acpica/compiler/aslpredef.c
@@ -222,7 +222,7 @@ ApCheckForPredefinedMethod (
if (MethodInfo->NumArguments != 0)
{
- sprintf (AslGbl_MsgBuffer, "%s requires %u", Op->Asl.ExternalName, 0);
+ sprintf (AslGbl_MsgBuffer, "%s requires %d", Op->Asl.ExternalName, 0);
AslError (ASL_WARNING, ASL_MSG_RESERVED_ARG_COUNT_HI, Op,
AslGbl_MsgBuffer);
diff --git a/sys/contrib/dev/acpica/compiler/aslxref.c b/sys/contrib/dev/acpica/compiler/aslxref.c
index cceede21f080..fbf69b543890 100644
--- a/sys/contrib/dev/acpica/compiler/aslxref.c
+++ b/sys/contrib/dev/acpica/compiler/aslxref.c
@@ -718,11 +718,34 @@ XfNamespaceLocateBegin (
}
else
{
- /* Check for a fully qualified path */
+ /* The NamePath contains multiple NameSegs */
- if (Path[0] == AML_ROOT_PREFIX)
+ if ((OpInfo->Flags & AML_CREATE) ||
+ (OpInfo->ObjectType == ACPI_TYPE_LOCAL_ALIAS))
{
- /* Gave full path, the object does not exist */
+ /*
+ * The new name is the last parameter. For the
+ * CreateXXXXField and Alias operators
+ */
+ NextOp = Op->Asl.Child;
+ while (!(NextOp->Asl.CompileFlags & OP_IS_NAME_DECLARATION))
+ {
+ NextOp = NextOp->Asl.Next;
+ }
+
+ AslError (ASL_ERROR, ASL_MSG_PREFIX_NOT_EXIST, NextOp,
+ NextOp->Asl.ExternalName);
+ }
+ else if (OpInfo->Flags & AML_NAMED)
+ {
+ /* The new name is the first parameter */
+
+ AslError (ASL_ERROR, ASL_MSG_PREFIX_NOT_EXIST, Op,
+ Op->Asl.ExternalName);
+ }
+ else if (Path[0] == AML_ROOT_PREFIX)
+ {
+ /* Full namepath from root, the object does not exist */
AslError (ASL_ERROR, ASL_MSG_NOT_EXIST, Op,
Op->Asl.ExternalName);
@@ -730,11 +753,20 @@ XfNamespaceLocateBegin (
else
{
/*
- * We can't tell whether it doesn't exist or just
- * can't be reached.
+ * Generic "not found" error. Cannot determine whether it
+ * doesn't exist or just can't be reached. However, we
+ * can differentiate between a NameSeg vs. NamePath.
*/
- AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
- Op->Asl.ExternalName);
+ if (strlen (Op->Asl.ExternalName) == ACPI_NAME_SIZE)
+ {
+ AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
+ Op->Asl.ExternalName);
+ }
+ else
+ {
+ AslError (ASL_ERROR, ASL_MSG_NAMEPATH_NOT_EXIST, Op,
+ Op->Asl.ExternalName);
+ }
}
}
diff --git a/sys/contrib/dev/acpica/compiler/dtio.c b/sys/contrib/dev/acpica/compiler/dtio.c
index 212107036d45..4dcb1ea13883 100644
--- a/sys/contrib/dev/acpica/compiler/dtio.c
+++ b/sys/contrib/dev/acpica/compiler/dtio.c
@@ -236,7 +236,7 @@ DtTrim (
/* Skip lines that start with a space */
- if (!strcmp (String, " "))
+ if (*String == 0 || !strcmp (String, " "))
{
ReturnString = UtLocalCacheCalloc (1);
return (ReturnString);
@@ -258,7 +258,7 @@ DtTrim (
while (End >= Start)
{
- if (*End == '\r' || *End == '\n')
+ if (*End == '\n')
{
End--;
continue;
@@ -522,6 +522,7 @@ DtGetNextLine (
UINT32 CurrentLineOffset;
UINT32 i;
int c;
+ int c1;
memset (AslGbl_CurrentLineBuffer, 0, AslGbl_LineBufferSize);
@@ -569,6 +570,29 @@ DtGetNextLine (
c = '\n';
State = DT_NORMAL_TEXT;
}
+ else if (c == '\r')
+ {
+ c1 = getc (Handle);
+ if (c1 == '\n')
+ {
+ /*
+ * Skip the carriage return as if it didn't exist. This is
+ * onlt meant for input files in DOS format in unix. fopen in
+ * unix may not support "text mode" and leaves CRLF intact.
+ */
+ c = '\n';
+ }
+ else
+ {
+ /* This was not a CRLF. Only a CR */
+
+ ungetc(c1, Handle);
+
+ DtFatal (ASL_MSG_COMPILER_INTERNAL, NULL,
+ "Carriage return without linefeed detected");
+ return (ASL_EOF);
+ }
+ }
switch (State)
{
diff --git a/sys/contrib/dev/acpica/compiler/dttable2.c b/sys/contrib/dev/acpica/compiler/dttable2.c
index 0d5443783a28..b1387f426be1 100644
--- a/sys/contrib/dev/acpica/compiler/dttable2.c
+++ b/sys/contrib/dev/acpica/compiler/dttable2.c
@@ -1878,6 +1878,62 @@ DtCompileTcpa (
/******************************************************************************
*
+ * FUNCTION: DtCompileTpm2Rev3
+ *
+ * PARAMETERS: PFieldList - Current field list pointer
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Compile TPM2 revision 3
+ *
+ *****************************************************************************/
+static ACPI_STATUS
+DtCompileTpm2Rev3 (
+ void **List)
+{
+ DT_FIELD **PFieldList = (DT_FIELD **) List;
+ DT_SUBTABLE *Subtable;
+ ACPI_TABLE_TPM23 *Tpm23Header;
+ DT_SUBTABLE *ParentTable;
+ ACPI_STATUS Status = AE_OK;
+
+
+ Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm23,
+ &Subtable);
+
+ ParentTable = DtPeekSubtable ();
+ DtInsertSubtable (ParentTable, Subtable);
+ Tpm23Header = ACPI_CAST_PTR (ACPI_TABLE_TPM23, ParentTable->Buffer);
+
+ /* Subtable type depends on the StartMethod */
+
+ switch (Tpm23Header->StartMethod)
+ {
+ case ACPI_TPM23_ACPI_START_METHOD:
+
+ /* Subtable specific to to ARM_SMC */
+
+ Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm23a,
+ &Subtable);
+ if (ACPI_FAILURE (Status))
+ {
+ return (Status);
+ }
+
+ ParentTable = DtPeekSubtable ();
+ DtInsertSubtable (ParentTable, Subtable);
+ break;
+
+ default:
+ break;
+ }
+
+ return (Status);
+}
+
+
+/******************************************************************************
+ *
* FUNCTION: DtCompileTpm2
*
* PARAMETERS: PFieldList - Current field list pointer
@@ -1897,8 +1953,18 @@ DtCompileTpm2 (
ACPI_TABLE_TPM2 *Tpm2Header;
DT_SUBTABLE *ParentTable;
ACPI_STATUS Status = AE_OK;
+ ACPI_TABLE_HEADER *Header;
+ ParentTable = DtPeekSubtable ();
+
+ Header = ACPI_CAST_PTR (ACPI_TABLE_HEADER, ParentTable->Buffer);
+
+ if (Header->Revision == 3)
+ {
+ return (DtCompileTpm2Rev3 (List));
+ }
+
/* Compile the main table */
Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm2,
diff --git a/sys/contrib/dev/acpica/compiler/prscan.c b/sys/contrib/dev/acpica/compiler/prscan.c
index 88ed494fad66..662d9567004e 100644
--- a/sys/contrib/dev/acpica/compiler/prscan.c
+++ b/sys/contrib/dev/acpica/compiler/prscan.c
@@ -1259,7 +1259,6 @@ PrPopDirective (
AslGbl_DirectiveInfo[Info->Directive].Name,
Info->Argument, AslGbl_IgnoringThisCodeBlock ? "TRUE" : "FALSE");
- ACPI_FREE (Info);
return (AE_OK);
}
diff --git a/sys/contrib/dev/acpica/components/debugger/dbxface.c b/sys/contrib/dev/acpica/components/debugger/dbxface.c
index 2661b9b61603..6b878d83fa0e 100644
--- a/sys/contrib/dev/acpica/components/debugger/dbxface.c
+++ b/sys/contrib/dev/acpica/components/debugger/dbxface.c
@@ -174,6 +174,12 @@ AcpiDbMethodEnd (
ACPI_WALK_STATE *WalkState);
#endif
+#ifdef ACPI_DISASSEMBLER
+static ACPI_PARSE_OBJECT *
+AcpiDbGetDisplayOp (
+ ACPI_WALK_STATE *WalkState,
+ ACPI_PARSE_OBJECT *Op);
+#endif
/*******************************************************************************
*
@@ -273,6 +279,74 @@ AcpiDbSignalBreakPoint (
}
+#ifdef ACPI_DISASSEMBLER
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDbGetDisplayOp
+ *
+ * PARAMETERS: WalkState - Current walk
+ * Op - Current executing op (from aml interpreter)
+ *
+ * RETURN: Opcode to display
+ *
+ * DESCRIPTION: Find the opcode to display during single stepping
+ *
+ ******************************************************************************/
+
+static ACPI_PARSE_OBJECT *
+AcpiDbGetDisplayOp (
+ ACPI_WALK_STATE *WalkState,
+ ACPI_PARSE_OBJECT *Op)
+{
+ ACPI_PARSE_OBJECT *DisplayOp;
+ ACPI_PARSE_OBJECT *ParentOp;
+
+ DisplayOp = Op;
+ ParentOp = Op->Common.Parent;
+ if (ParentOp)
+ {
+ if ((WalkState->ControlState) &&
+ (WalkState->ControlState->Common.State ==
+ ACPI_CONTROL_PREDICATE_EXECUTING))
+ {
+ /*
+ * We are executing the predicate of an IF or WHILE statement
+ * Search upwards for the containing IF or WHILE so that the
+ * entire predicate can be displayed.
+ */
+ while (ParentOp)
+ {
+ if ((ParentOp->Common.AmlOpcode == AML_IF_OP) ||
+ (ParentOp->Common.AmlOpcode == AML_WHILE_OP))
+ {
+ DisplayOp = ParentOp;
+ break;
+ }
+ ParentOp = ParentOp->Common.Parent;
+ }
+ }
+ else
+ {
+ while (ParentOp)
+ {
+ if ((ParentOp->Common.AmlOpcode == AML_IF_OP) ||
+ (ParentOp->Common.AmlOpcode == AML_ELSE_OP) ||
+ (ParentOp->Common.AmlOpcode == AML_SCOPE_OP) ||
+ (ParentOp->Common.AmlOpcode == AML_METHOD_OP) ||
+ (ParentOp->Common.AmlOpcode == AML_WHILE_OP))
+ {
+ break;
+ }
+ DisplayOp = ParentOp;
+ ParentOp = ParentOp->Common.Parent;
+ }
+ }
+ }
+ return DisplayOp;
+}
+#endif
+
+
/*******************************************************************************
*
* FUNCTION: AcpiDbSingleStep
@@ -296,8 +370,6 @@ AcpiDbSingleStep (
ACPI_PARSE_OBJECT *Next;
ACPI_STATUS Status = AE_OK;
UINT32 OriginalDebugLevel;
- ACPI_PARSE_OBJECT *DisplayOp;
- ACPI_PARSE_OBJECT *ParentOp;
UINT32 AmlOffset;
@@ -393,53 +465,11 @@ AcpiDbSingleStep (
Next = Op->Common.Next;
Op->Common.Next = NULL;
-
- DisplayOp = Op;
- ParentOp = Op->Common.Parent;
- if (ParentOp)
- {
- if ((WalkState->ControlState) &&
- (WalkState->ControlState->Common.State ==
- ACPI_CONTROL_PREDICATE_EXECUTING))
- {
- /*
- * We are executing the predicate of an IF or WHILE statement
- * Search upwards for the containing IF or WHILE so that the
- * entire predicate can be displayed.
- */
- while (ParentOp)
- {
- if ((ParentOp->Common.AmlOpcode == AML_IF_OP) ||
- (ParentOp->Common.AmlOpcode == AML_WHILE_OP))
- {
- DisplayOp = ParentOp;
- break;
- }
- ParentOp = ParentOp->Common.Parent;
- }
- }
- else
- {
- while (ParentOp)
- {
- if ((ParentOp->Common.AmlOpcode == AML_IF_OP) ||
- (ParentOp->Common.AmlOpcode == AML_ELSE_OP) ||
- (ParentOp->Common.AmlOpcode == AML_SCOPE_OP) ||
- (ParentOp->Common.AmlOpcode == AML_METHOD_OP) ||
- (ParentOp->Common.AmlOpcode == AML_WHILE_OP))
- {
- break;
- }
- DisplayOp = ParentOp;
- ParentOp = ParentOp->Common.Parent;
- }
- }
- }
-
/* Now we can disassemble and display it */
#ifdef ACPI_DISASSEMBLER
- AcpiDmDisassemble (WalkState, DisplayOp, ACPI_UINT32_MAX);
+ AcpiDmDisassemble (WalkState, AcpiDbGetDisplayOp (WalkState, Op),
+ ACPI_UINT32_MAX);
#else
/*
* The AML Disassembler is not configured - at least we can
diff --git a/sys/contrib/dev/acpica/components/dispatcher/dsopcode.c b/sys/contrib/dev/acpica/components/dispatcher/dsopcode.c
index 6dd7591e1b4e..e170e0eab560 100644
--- a/sys/contrib/dev/acpica/components/dispatcher/dsopcode.c
+++ b/sys/contrib/dev/acpica/components/dispatcher/dsopcode.c
@@ -586,6 +586,9 @@ AcpiDsEvalRegionOperands (
ObjDesc, ACPI_FORMAT_UINT64 (ObjDesc->Region.Address),
ObjDesc->Region.Length));
+ Status = AcpiUtAddAddressRange (ObjDesc->Region.SpaceId,
+ ObjDesc->Region.Address, ObjDesc->Region.Length, Node);
+
/* Now the address and length are valid for this opregion */
ObjDesc->Region.Flags |= AOPOBJ_DATA_VALID;
diff --git a/sys/contrib/dev/acpica/components/dispatcher/dswload2.c b/sys/contrib/dev/acpica/components/dispatcher/dswload2.c
index 455ea0b853ca..fd5c5f8389df 100644
--- a/sys/contrib/dev/acpica/components/dispatcher/dswload2.c
+++ b/sys/contrib/dev/acpica/components/dispatcher/dswload2.c
@@ -448,6 +448,15 @@ AcpiDsLoad2BeginOp (
}
#endif
+ /*
+ * For name creation opcodes, the full namepath prefix must
+ * exist, except for the final (new) nameseg.
+ */
+ if (WalkState->OpInfo->Flags & AML_NAMED)
+ {
+ Flags |= ACPI_NS_PREFIX_MUST_EXIST;
+ }
+
/* Add new entry or lookup existing entry */
Status = AcpiNsLookup (WalkState->ScopeInfo, BufferPtr, ObjectType,
diff --git a/sys/contrib/dev/acpica/components/namespace/nsaccess.c b/sys/contrib/dev/acpica/components/namespace/nsaccess.c
index 768380731024..bde30372ac06 100644
--- a/sys/contrib/dev/acpica/components/namespace/nsaccess.c
+++ b/sys/contrib/dev/acpica/components/namespace/nsaccess.c
@@ -421,6 +421,7 @@ AcpiNsLookup (
ACPI_OBJECT_TYPE ThisSearchType;
UINT32 SearchParentFlag = ACPI_NS_SEARCH_PARENT;
UINT32 LocalFlags;
+ ACPI_INTERPRETER_MODE LocalInterpreterMode;
ACPI_FUNCTION_TRACE (NsLookup);
@@ -670,6 +671,7 @@ AcpiNsLookup (
*/
ThisSearchType = ACPI_TYPE_ANY;
CurrentNode = ThisNode;
+
while (NumSegments && CurrentNode)
{
NumSegments--;
@@ -704,6 +706,16 @@ AcpiNsLookup (
}
}
+ /* Handle opcodes that create a new NameSeg via a full NamePath */
+
+ LocalInterpreterMode = InterpreterMode;
+ if ((Flags & ACPI_NS_PREFIX_MUST_EXIST) && (NumSegments > 0))
+ {
+ /* Every element of the path must exist (except for the final NameSeg) */
+
+ LocalInterpreterMode = ACPI_IMODE_EXECUTE;
+ }
+
/* Extract one ACPI name from the front of the pathname */
ACPI_MOVE_32_TO_32 (&SimpleName, Path);
@@ -711,11 +723,18 @@ AcpiNsLookup (
/* Try to find the single (4 character) ACPI name */
Status = AcpiNsSearchAndEnter (SimpleName, WalkState, CurrentNode,
- InterpreterMode, ThisSearchType, LocalFlags, &ThisNode);
+ LocalInterpreterMode, ThisSearchType, LocalFlags, &ThisNode);
if (ACPI_FAILURE (Status))
{
if (Status == AE_NOT_FOUND)
{
+#if !defined ACPI_ASL_COMPILER /* Note: iASL reports this error by itself, not needed here */
+ if (Flags & ACPI_NS_PREFIX_MUST_EXIST)
+ {
+ AcpiOsPrintf (ACPI_MSG_BIOS_ERROR
+ "Object does not exist: %4.4s\n", &SimpleName);
+ }
+#endif
/* Name not found in ACPI namespace */
ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
diff --git a/sys/contrib/dev/acpica/components/parser/psloop.c b/sys/contrib/dev/acpica/components/parser/psloop.c
index f2e592ad8ddb..77a1e37bf8e9 100644
--- a/sys/contrib/dev/acpica/components/parser/psloop.c
+++ b/sys/contrib/dev/acpica/components/parser/psloop.c
@@ -298,7 +298,7 @@ AcpiPsGetArguments (
* future. Use of this option can cause problems with AML code that
* depends upon in-order immediate execution of module-level code.
*/
- if (AcpiGbl_GroupModuleLevelCode &&
+ if (!AcpiGbl_ExecuteTablesAsMethods &&
(WalkState->PassNumber <= ACPI_IMODE_LOAD_PASS2) &&
((WalkState->ParseFlags & ACPI_PARSE_DISASSEMBLE) == 0))
{
@@ -566,6 +566,7 @@ AcpiPsParseLoop (
ACPI_PARSE_OBJECT *Op = NULL; /* current op */
ACPI_PARSE_STATE *ParserState;
UINT8 *AmlOpStart = NULL;
+ UINT8 OpcodeLength;
ACPI_FUNCTION_TRACE_PTR (PsParseLoop, WalkState);
@@ -654,7 +655,7 @@ AcpiPsParseLoop (
* status to AE_OK to proceed with the table load.
*/
if ((WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL) &&
- Status == AE_ALREADY_EXISTS)
+ ((Status == AE_ALREADY_EXISTS) || (Status == AE_NOT_FOUND)))
{
Status = AE_OK;
}
@@ -686,9 +687,20 @@ AcpiPsParseLoop (
* the scope op because the parse failure indicates that
* the device may not exist.
*/
- ACPI_ERROR ((AE_INFO, "Skip parsing opcode %s",
- AcpiPsGetOpcodeName (WalkState->Opcode)));
- WalkState->ParserState.Aml = WalkState->Aml + 1;
+ ACPI_INFO (("Skipping parse of AML opcode: %s (0x%4.4X)",
+ AcpiPsGetOpcodeName (WalkState->Opcode), WalkState->Opcode));
+
+ /*
+ * Determine the opcode length before skipping the opcode.
+ * An opcode can be 1 byte or 2 bytes in length.
+ */
+ OpcodeLength = 1;
+ if ((WalkState->Opcode & 0xFF00) == AML_EXTENDED_OPCODE)
+ {
+ OpcodeLength = 2;
+ }
+ WalkState->ParserState.Aml = WalkState->Aml + OpcodeLength;
+
WalkState->ParserState.Aml =
AcpiPsGetNextPackageEnd(&WalkState->ParserState);
WalkState->Aml = WalkState->ParserState.Aml;
diff --git a/sys/contrib/dev/acpica/components/parser/psobject.c b/sys/contrib/dev/acpica/components/parser/psobject.c
index 463a233655e2..4f9ab13b6b91 100644
--- a/sys/contrib/dev/acpica/components/parser/psobject.c
+++ b/sys/contrib/dev/acpica/components/parser/psobject.c
@@ -773,7 +773,7 @@ AcpiPsCompleteOp (
* because there could be correct AML beyond the parts that caused
* the runtime error.
*/
- ACPI_ERROR ((AE_INFO, "Ignore error and continue table load"));
+ ACPI_INFO (("Ignoring error and continuing table load"));
return_ACPI_STATUS (AE_OK);
}
return_ACPI_STATUS (Status);
diff --git a/sys/contrib/dev/acpica/components/tables/tbxfload.c b/sys/contrib/dev/acpica/components/tables/tbxfload.c
index b72efd4f6357..65b0de6a3d33 100644
--- a/sys/contrib/dev/acpica/components/tables/tbxfload.c
+++ b/sys/contrib/dev/acpica/components/tables/tbxfload.c
@@ -219,7 +219,7 @@ AcpiLoadTables (
"While loading namespace from ACPI tables"));
}
- if (AcpiGbl_ExecuteTablesAsMethods || !AcpiGbl_GroupModuleLevelCode)
+ if (AcpiGbl_ExecuteTablesAsMethods)
{
/*
* If the module-level code support is enabled, initialize the objects
diff --git a/sys/contrib/dev/acpica/include/acdisasm.h b/sys/contrib/dev/acpica/include/acdisasm.h
index 31f5b3c84984..c814e05499b3 100644
--- a/sys/contrib/dev/acpica/include/acdisasm.h
+++ b/sys/contrib/dev/acpica/include/acdisasm.h
@@ -561,6 +561,8 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaServer[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoTpm2[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoTpm2a[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoTpm211[];
+extern ACPI_DMTABLE_INFO AcpiDmTableInfoTpm23[];
+extern ACPI_DMTABLE_INFO AcpiDmTableInfoTpm23a[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoUefi[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoVrtc[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoVrtc0[];
diff --git a/sys/contrib/dev/acpica/include/acnamesp.h b/sys/contrib/dev/acpica/include/acnamesp.h
index 1e3db8d1cadd..7c2083d32f06 100644
--- a/sys/contrib/dev/acpica/include/acnamesp.h
+++ b/sys/contrib/dev/acpica/include/acnamesp.h
@@ -177,6 +177,7 @@
#define ACPI_NS_TEMPORARY 0x0040
#define ACPI_NS_OVERRIDE_IF_FOUND 0x0080
#define ACPI_NS_EARLY_INIT 0x0100
+#define ACPI_NS_PREFIX_MUST_EXIST 0x0200
/* Flags for AcpiNsWalkNamespace */
diff --git a/sys/contrib/dev/acpica/include/acpixf.h b/sys/contrib/dev/acpica/include/acpixf.h
index cc5a2d50a919..3fc16a6d5c13 100644
--- a/sys/contrib/dev/acpica/include/acpixf.h
+++ b/sys/contrib/dev/acpica/include/acpixf.h
@@ -154,7 +154,7 @@
/* Current ACPICA subsystem version in YYYYMMDD format */
-#define ACPI_CA_VERSION 0x20181003
+#define ACPI_CA_VERSION 0x20181031
#include <contrib/dev/acpica/include/acconfig.h>
#include <contrib/dev/acpica/include/actypes.h>
@@ -301,13 +301,6 @@ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_CopyDsdtLocally, FALSE);
ACPI_INIT_GLOBAL (UINT8, AcpiGbl_DoNotUseXsdt, FALSE);
/*
- * Optionally support group module level code.
- * NOTE, this is essentially obsolete and will be removed soon
- * (01/2018).
- */
-ACPI_INIT_GLOBAL (UINT8, AcpiGbl_GroupModuleLevelCode, FALSE);
-
-/*
* Optionally support module level code by parsing an entire table as
* a method as it is loaded. Default is TRUE.
* NOTE, this is essentially obsolete and will be removed soon
diff --git a/sys/contrib/dev/acpica/include/actbinfo.h b/sys/contrib/dev/acpica/include/actbinfo.h
index 347a3940697e..19eeeccbd42d 100644
--- a/sys/contrib/dev/acpica/include/actbinfo.h
+++ b/sys/contrib/dev/acpica/include/actbinfo.h
@@ -194,6 +194,7 @@
#define ACPI_STAO_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_STAO,f)
#define ACPI_TCPA_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_HDR,f)
#define ACPI_TPM2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_TPM2,f)
+#define ACPI_TPM23_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_TPM23,f)
#define ACPI_UEFI_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_UEFI,f)
#define ACPI_WAET_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WAET,f)
#define ACPI_WDAT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WDAT,f)
@@ -337,6 +338,7 @@
#define ACPI_TCPA_SERVER_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_SERVER,f)
#define ACPI_TPM2A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TPM2_TRAILER,f)
#define ACPI_TPM211_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TPM2_ARM_SMC,f)
+#define ACPI_TPM23A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TPM23_TRAILER,f)
#define ACPI_VRTC0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_VRTC_ENTRY,f)
#define ACPI_WDAT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_WDAT_ENTRY,f)
diff --git a/sys/contrib/dev/acpica/include/actbl3.h b/sys/contrib/dev/acpica/include/actbl3.h
index d4c15838b1f3..99b466c16d72 100644
--- a/sys/contrib/dev/acpica/include/actbl3.h
+++ b/sys/contrib/dev/acpica/include/actbl3.h
@@ -552,6 +552,34 @@ typedef struct acpi_table_tcpa_server
*
******************************************************************************/
+/* Revision 3 */
+
+typedef struct acpi_table_tpm23
+{
+ ACPI_TABLE_HEADER Header; /* Common ACPI table header */
+ UINT32 Reserved;
+ UINT64 ControlAddress;
+ UINT32 StartMethod;
+
+} ACPI_TABLE_TPM23;
+
+/* Value for StartMethod above */
+
+#define ACPI_TPM23_ACPI_START_METHOD 2
+
+/*
+ * Optional trailer for revision 3. If start method is 2, there is a 4 byte
+ * reserved area of all zeros.
+ */
+typedef struct acpi_tmp23_trailer
+{
+ UINT32 Reserved;
+
+} ACPI_TPM23_TRAILER;
+
+
+/* Revision 4 */
+
typedef struct acpi_table_tpm2
{
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
diff --git a/sys/dev/acpica/acpi_battery.c b/sys/dev/acpica/acpi_battery.c
index 3d7d94ab1c2b..a9ed4796c767 100644
--- a/sys/dev/acpica/acpi_battery.c
+++ b/sys/dev/acpica/acpi_battery.c
@@ -487,6 +487,11 @@ acpi_battery_init(void)
"remaining time in minutes");
SYSCTL_ADD_PROC(&acpi_battery_sysctl_ctx,
SYSCTL_CHILDREN(acpi_battery_sysctl_tree),
+ OID_AUTO, "rate", CTLTYPE_INT | CTLFLAG_RD,
+ &acpi_battery_battinfo.rate, 0, acpi_battery_sysctl, "I",
+ "present rate in mW");
+ SYSCTL_ADD_PROC(&acpi_battery_sysctl_ctx,
+ SYSCTL_CHILDREN(acpi_battery_sysctl_tree),
OID_AUTO, "state", CTLTYPE_INT | CTLFLAG_RD,
&acpi_battery_battinfo.state, 0, acpi_battery_sysctl, "I",
"current status flags");
diff --git a/sys/dev/ahci/ahci.c b/sys/dev/ahci/ahci.c
index a12d3c1ab392..c6f0293863db 100644
--- a/sys/dev/ahci/ahci.c
+++ b/sys/dev/ahci/ahci.c
@@ -39,6 +39,7 @@ __FBSDID("$FreeBSD$");
#include <sys/malloc.h>
#include <sys/lock.h>
#include <sys/mutex.h>
+#include <sys/sysctl.h>
#include <machine/stdarg.h>
#include <machine/resource.h>
#include <machine/bus.h>
@@ -80,6 +81,8 @@ static void ahci_stop(struct ahci_channel *ch);
static void ahci_clo(struct ahci_channel *ch);
static void ahci_start_fr(struct ahci_channel *ch);
static void ahci_stop_fr(struct ahci_channel *ch);
+static int ahci_phy_check_events(struct ahci_channel *ch, u_int32_t serr);
+static uint32_t ahci_ch_detval(struct ahci_channel *ch, uint32_t val);
static int ahci_sata_connect(struct ahci_channel *ch);
static int ahci_sata_phy_reset(struct ahci_channel *ch);
@@ -100,6 +103,13 @@ static MALLOC_DEFINE(M_AHCI, "AHCI driver", "AHCI driver data buffers");
#define RECOVERY_REQUEST_SENSE 2
#define recovery_slot spriv_field1
+static uint32_t
+ahci_ch_detval(struct ahci_channel *ch, uint32_t val)
+{
+
+ return ch->disablephy ? ATA_SC_DET_DISABLE : val;
+}
+
int
ahci_ctlr_setup(device_t dev)
{
@@ -665,11 +675,38 @@ ahci_ch_probe(device_t dev)
}
static int
+ahci_ch_disablephy_proc(SYSCTL_HANDLER_ARGS)
+{
+ struct ahci_channel *ch;
+ int error, value;
+
+ ch = arg1;
+ value = ch->disablephy;
+ error = sysctl_handle_int(oidp, &value, 0, req);
+ if (error != 0 || req->newptr == NULL || (value != 0 && value != 1))
+ return (error);
+
+ mtx_lock(&ch->mtx);
+ ch->disablephy = value;
+ if (value) {
+ ahci_ch_deinit(ch->dev);
+ } else {
+ ahci_ch_init(ch->dev);
+ ahci_phy_check_events(ch, ATA_SE_PHY_CHANGED | ATA_SE_EXCHANGED);
+ }
+ mtx_unlock(&ch->mtx);
+
+ return (0);
+}
+
+static int
ahci_ch_attach(device_t dev)
{
struct ahci_controller *ctlr = device_get_softc(device_get_parent(dev));
struct ahci_channel *ch = device_get_softc(dev);
struct cam_devq *devq;
+ struct sysctl_ctx_list *ctx;
+ struct sysctl_oid *tree;
int rid, error, i, sata_rev = 0;
u_int32_t version;
@@ -787,6 +824,11 @@ ahci_ch_attach(device_t dev)
ahci_ch_pm, ch);
}
mtx_unlock(&ch->mtx);
+ ctx = device_get_sysctl_ctx(dev);
+ tree = device_get_sysctl_tree(dev);
+ SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, "disable_phy",
+ CTLFLAG_RW | CTLTYPE_UINT, ch, 0, ahci_ch_disablephy_proc, "IU",
+ "Disable PHY");
return (0);
err3:
@@ -2497,7 +2539,7 @@ static int
ahci_sata_phy_reset(struct ahci_channel *ch)
{
int sata_rev;
- uint32_t val;
+ uint32_t val, detval;
if (ch->listening) {
val = ATA_INL(ch->r_mem, AHCI_P_CMD);
@@ -2514,12 +2556,14 @@ ahci_sata_phy_reset(struct ahci_channel *ch)
val = ATA_SC_SPD_SPEED_GEN3;
else
val = 0;
+ detval = ahci_ch_detval(ch, ATA_SC_DET_RESET);
ATA_OUTL(ch->r_mem, AHCI_P_SCTL,
- ATA_SC_DET_RESET | val |
+ detval | val |
ATA_SC_IPM_DIS_PARTIAL | ATA_SC_IPM_DIS_SLUMBER);
DELAY(1000);
+ detval = ahci_ch_detval(ch, ATA_SC_DET_IDLE);
ATA_OUTL(ch->r_mem, AHCI_P_SCTL,
- ATA_SC_DET_IDLE | val | ((ch->pm_level > 0) ? 0 :
+ detval | val | ((ch->pm_level > 0) ? 0 :
(ATA_SC_IPM_DIS_PARTIAL | ATA_SC_IPM_DIS_SLUMBER)));
if (!ahci_sata_connect(ch)) {
if (ch->caps & AHCI_CAP_SSS) {
diff --git a/sys/dev/ahci/ahci.h b/sys/dev/ahci/ahci.h
index 7cd8da838a3f..fc53d346f17f 100644
--- a/sys/dev/ahci/ahci.h
+++ b/sys/dev/ahci/ahci.h
@@ -461,6 +461,8 @@ struct ahci_channel {
struct mtx_padalign mtx; /* state lock */
STAILQ_HEAD(, ccb_hdr) doneq; /* queue of completed CCBs */
int batch; /* doneq is in use */
+
+ int disablephy; /* keep PHY disabled */
};
struct ahci_enclosure {
diff --git a/sys/dev/ahci/ahci_pci.c b/sys/dev/ahci/ahci_pci.c
index 2bc2a243837b..135848baa7b6 100644
--- a/sys/dev/ahci/ahci_pci.c
+++ b/sys/dev/ahci/ahci_pci.c
@@ -350,6 +350,7 @@ static const struct {
{0x01861039, 0x00, "SiS 968", 0},
{0xa01c177d, 0x00, "ThunderX", AHCI_Q_ABAR0|AHCI_Q_1MSI},
{0x00311c36, 0x00, "Annapurna", AHCI_Q_FORCE_PI|AHCI_Q_RESTORE_CAP|AHCI_Q_NOMSIX},
+ {0x1600144d, 0x00, "Samsung", AHCI_Q_NOMSI},
{0x00000000, 0x00, NULL, 0}
};
diff --git a/sys/dev/atkbdc/atkbd.c b/sys/dev/atkbdc/atkbd.c
index 57772468a9b1..981828e3eb52 100644
--- a/sys/dev/atkbdc/atkbd.c
+++ b/sys/dev/atkbdc/atkbd.c
@@ -484,7 +484,7 @@ atkbd_init(int unit, keyboard_t **kbdp, void *arg, int flags)
evdev_support_led(evdev, LED_CAPSL);
evdev_support_led(evdev, LED_SCROLLL);
- if (evdev_register(evdev))
+ if (evdev_register_mtx(evdev, &Giant))
evdev_free(evdev);
else
state->ks_evdev = evdev;
diff --git a/sys/dev/cxgbe/crypto/t4_crypto.c b/sys/dev/cxgbe/crypto/t4_crypto.c
index 1b0c46a6ac1b..028430d0663e 100644
--- a/sys/dev/cxgbe/crypto/t4_crypto.c
+++ b/sys/dev/cxgbe/crypto/t4_crypto.c
@@ -61,6 +61,8 @@ __FBSDID("$FreeBSD$");
* | key context header |
* +-------------------------------+
* | AES key | ----- For requests with AES
+ * +-------------------------------+
+ * | Hash state | ----- For hash-only requests
* +-------------------------------+ -
* | IPAD (16-byte aligned) | \
* +-------------------------------+ +---- For requests with HMAC
@@ -72,7 +74,7 @@ __FBSDID("$FreeBSD$");
* +-------------------------------+ +---- Destination buffer for
* | PHYS_DSGL entries | / non-hash-only requests
* +-------------------------------+ -
- * | 16 dummy bytes | ----- Only for hash-only requests
+ * | 16 dummy bytes | ----- Only for HMAC/hash-only requests
* +-------------------------------+
* | IV | ----- If immediate IV
* +-------------------------------+
@@ -160,7 +162,7 @@ struct ccr_session_blkcipher {
struct ccr_session {
bool active;
int pending;
- enum { HMAC, BLKCIPHER, AUTHENC, GCM } mode;
+ enum { HASH, HMAC, BLKCIPHER, AUTHENC, GCM } mode;
union {
struct ccr_session_hmac hmac;
struct ccr_session_gmac gmac;
@@ -200,6 +202,7 @@ struct ccr_softc {
/* Statistics. */
uint64_t stats_blkcipher_encrypt;
uint64_t stats_blkcipher_decrypt;
+ uint64_t stats_hash;
uint64_t stats_hmac;
uint64_t stats_authenc_encrypt;
uint64_t stats_authenc_decrypt;
@@ -420,7 +423,7 @@ ccr_populate_wreq(struct ccr_softc *sc, struct chcr_wr *crwr, u_int kctx_len,
}
static int
-ccr_hmac(struct ccr_softc *sc, struct ccr_session *s, struct cryptop *crp)
+ccr_hash(struct ccr_softc *sc, struct ccr_session *s, struct cryptop *crp)
{
struct chcr_wr *crwr;
struct wrqe *wr;
@@ -428,8 +431,8 @@ ccr_hmac(struct ccr_softc *sc, struct ccr_session *s, struct cryptop *crp)
struct cryptodesc *crd;
char *dst;
u_int hash_size_in_response, kctx_flits, kctx_len, transhdr_len, wr_len;
- u_int imm_len, iopad_size;
- int error, sgl_nsegs, sgl_len;
+ u_int hmac_ctrl, imm_len, iopad_size;
+ int error, sgl_nsegs, sgl_len, use_opad;
crd = crp->crp_desc;
@@ -439,6 +442,14 @@ ccr_hmac(struct ccr_softc *sc, struct ccr_session *s, struct cryptop *crp)
axf = s->hmac.auth_hash;
+ if (s->mode == HMAC) {
+ use_opad = 1;
+ hmac_ctrl = CHCR_SCMD_HMAC_CTRL_NO_TRUNC;
+ } else {
+ use_opad = 0;
+ hmac_ctrl = CHCR_SCMD_HMAC_CTRL_NOP;
+ }
+
/* PADs must be 128-bit aligned. */
iopad_size = roundup2(s->hmac.partial_digest_len, 16);
@@ -446,7 +457,9 @@ ccr_hmac(struct ccr_softc *sc, struct ccr_session *s, struct cryptop *crp)
* The 'key' part of the context includes the aligned IPAD and
* OPAD.
*/
- kctx_len = iopad_size * 2;
+ kctx_len = iopad_size;
+ if (use_opad)
+ kctx_len += iopad_size;
hash_size_in_response = axf->hashsize;
transhdr_len = HASH_TRANSHDR_SIZE(kctx_len);
@@ -503,19 +516,21 @@ ccr_hmac(struct ccr_softc *sc, struct ccr_session *s, struct cryptop *crp)
V_SCMD_PROTO_VERSION(CHCR_SCMD_PROTO_VERSION_GENERIC) |
V_SCMD_CIPH_MODE(CHCR_SCMD_CIPHER_MODE_NOP) |
V_SCMD_AUTH_MODE(s->hmac.auth_mode) |
- V_SCMD_HMAC_CTRL(CHCR_SCMD_HMAC_CTRL_NO_TRUNC));
+ V_SCMD_HMAC_CTRL(hmac_ctrl));
crwr->sec_cpl.ivgen_hdrlen = htobe32(
V_SCMD_LAST_FRAG(0) |
V_SCMD_MORE_FRAGS(crd->crd_len == 0 ? 1 : 0) | V_SCMD_MAC_ONLY(1));
memcpy(crwr->key_ctx.key, s->hmac.ipad, s->hmac.partial_digest_len);
- memcpy(crwr->key_ctx.key + iopad_size, s->hmac.opad,
- s->hmac.partial_digest_len);
+ if (use_opad)
+ memcpy(crwr->key_ctx.key + iopad_size, s->hmac.opad,
+ s->hmac.partial_digest_len);
/* XXX: F_KEY_CONTEXT_SALT_PRESENT set, but 'salt' not set. */
kctx_flits = (sizeof(struct _key_ctx) + kctx_len) / 16;
crwr->key_ctx.ctx_hdr = htobe32(V_KEY_CONTEXT_CTX_LEN(kctx_flits) |
- V_KEY_CONTEXT_OPAD_PRESENT(1) | V_KEY_CONTEXT_SALT_PRESENT(1) |
+ V_KEY_CONTEXT_OPAD_PRESENT(use_opad) |
+ V_KEY_CONTEXT_SALT_PRESENT(1) |
V_KEY_CONTEXT_CK_SIZE(CHCR_KEYCTX_NO_KEY) |
V_KEY_CONTEXT_MK_SIZE(s->hmac.mk_size) | V_KEY_CONTEXT_VALID(1));
@@ -537,7 +552,7 @@ ccr_hmac(struct ccr_softc *sc, struct ccr_session *s, struct cryptop *crp)
}
static int
-ccr_hmac_done(struct ccr_softc *sc, struct ccr_session *s, struct cryptop *crp,
+ccr_hash_done(struct ccr_softc *sc, struct ccr_session *s, struct cryptop *crp,
const struct cpl_fw6_pld *cpl, int error)
{
struct cryptodesc *crd;
@@ -1591,6 +1606,8 @@ ccr_sysctls(struct ccr_softc *sc)
NULL, "statistics");
children = SYSCTL_CHILDREN(oid);
+ SYSCTL_ADD_U64(ctx, children, OID_AUTO, "hash", CTLFLAG_RD,
+ &sc->stats_hash, 0, "Hash requests submitted");
SYSCTL_ADD_U64(ctx, children, OID_AUTO, "hmac", CTLFLAG_RD,
&sc->stats_hmac, 0, "HMAC requests submitted");
SYSCTL_ADD_U64(ctx, children, OID_AUTO, "cipher_encrypt", CTLFLAG_RD,
@@ -1666,6 +1683,11 @@ ccr_attach(device_t dev)
sc->sg_iv_aad = sglist_build(sc->iv_aad_buf, MAX_AAD_LEN, M_WAITOK);
ccr_sysctls(sc);
+ crypto_register(cid, CRYPTO_SHA1, 0, 0);
+ crypto_register(cid, CRYPTO_SHA2_224, 0, 0);
+ crypto_register(cid, CRYPTO_SHA2_256, 0, 0);
+ crypto_register(cid, CRYPTO_SHA2_384, 0, 0);
+ crypto_register(cid, CRYPTO_SHA2_512, 0, 0);
crypto_register(cid, CRYPTO_SHA1_HMAC, 0, 0);
crypto_register(cid, CRYPTO_SHA2_224_HMAC, 0, 0);
crypto_register(cid, CRYPTO_SHA2_256_HMAC, 0, 0);
@@ -1714,22 +1736,27 @@ ccr_copy_partial_hash(void *dst, int cri_alg, union authctx *auth_ctx)
u32 = (uint32_t *)dst;
u64 = (uint64_t *)dst;
switch (cri_alg) {
+ case CRYPTO_SHA1:
case CRYPTO_SHA1_HMAC:
for (i = 0; i < SHA1_HASH_LEN / 4; i++)
u32[i] = htobe32(auth_ctx->sha1ctx.h.b32[i]);
break;
+ case CRYPTO_SHA2_224:
case CRYPTO_SHA2_224_HMAC:
for (i = 0; i < SHA2_256_HASH_LEN / 4; i++)
u32[i] = htobe32(auth_ctx->sha224ctx.state[i]);
break;
+ case CRYPTO_SHA2_256:
case CRYPTO_SHA2_256_HMAC:
for (i = 0; i < SHA2_256_HASH_LEN / 4; i++)
u32[i] = htobe32(auth_ctx->sha256ctx.state[i]);
break;
+ case CRYPTO_SHA2_384:
case CRYPTO_SHA2_384_HMAC:
for (i = 0; i < SHA2_512_HASH_LEN / 8; i++)
u64[i] = htobe64(auth_ctx->sha384ctx.state[i]);
break;
+ case CRYPTO_SHA2_512:
case CRYPTO_SHA2_512_HMAC:
for (i = 0; i < SHA2_512_HASH_LEN / 8; i++)
u64[i] = htobe64(auth_ctx->sha512ctx.state[i]);
@@ -1738,6 +1765,17 @@ ccr_copy_partial_hash(void *dst, int cri_alg, union authctx *auth_ctx)
}
static void
+ccr_init_hash_digest(struct ccr_session *s, int cri_alg)
+{
+ union authctx auth_ctx;
+ struct auth_hash *axf;
+
+ axf = s->hmac.auth_hash;
+ axf->Init(&auth_ctx);
+ ccr_copy_partial_hash(s->hmac.ipad, cri_alg, &auth_ctx);
+}
+
+static void
ccr_init_hmac_digest(struct ccr_session *s, int cri_alg, char *key,
int klen)
{
@@ -1885,12 +1923,13 @@ ccr_newsession(device_t dev, crypto_session_t cses, struct cryptoini *cri)
unsigned int auth_mode, cipher_mode, iv_len, mk_size;
unsigned int partial_digest_len;
int error;
- bool gcm_hash;
+ bool gcm_hash, hmac;
if (cri == NULL)
return (EINVAL);
gcm_hash = false;
+ hmac = false;
cipher = NULL;
hash = NULL;
auth_hash = NULL;
@@ -1901,6 +1940,11 @@ ccr_newsession(device_t dev, crypto_session_t cses, struct cryptoini *cri)
partial_digest_len = 0;
for (c = cri; c != NULL; c = c->cri_next) {
switch (c->cri_alg) {
+ case CRYPTO_SHA1:
+ case CRYPTO_SHA2_224:
+ case CRYPTO_SHA2_256:
+ case CRYPTO_SHA2_384:
+ case CRYPTO_SHA2_512:
case CRYPTO_SHA1_HMAC:
case CRYPTO_SHA2_224_HMAC:
case CRYPTO_SHA2_256_HMAC:
@@ -1913,30 +1957,35 @@ ccr_newsession(device_t dev, crypto_session_t cses, struct cryptoini *cri)
return (EINVAL);
hash = c;
switch (c->cri_alg) {
+ case CRYPTO_SHA1:
case CRYPTO_SHA1_HMAC:
auth_hash = &auth_hash_hmac_sha1;
auth_mode = CHCR_SCMD_AUTH_MODE_SHA1;
mk_size = CHCR_KEYCTX_MAC_KEY_SIZE_160;
partial_digest_len = SHA1_HASH_LEN;
break;
+ case CRYPTO_SHA2_224:
case CRYPTO_SHA2_224_HMAC:
auth_hash = &auth_hash_hmac_sha2_224;
auth_mode = CHCR_SCMD_AUTH_MODE_SHA224;
mk_size = CHCR_KEYCTX_MAC_KEY_SIZE_256;
partial_digest_len = SHA2_256_HASH_LEN;
break;
+ case CRYPTO_SHA2_256:
case CRYPTO_SHA2_256_HMAC:
auth_hash = &auth_hash_hmac_sha2_256;
auth_mode = CHCR_SCMD_AUTH_MODE_SHA256;
mk_size = CHCR_KEYCTX_MAC_KEY_SIZE_256;
partial_digest_len = SHA2_256_HASH_LEN;
break;
+ case CRYPTO_SHA2_384:
case CRYPTO_SHA2_384_HMAC:
auth_hash = &auth_hash_hmac_sha2_384;
auth_mode = CHCR_SCMD_AUTH_MODE_SHA512_384;
mk_size = CHCR_KEYCTX_MAC_KEY_SIZE_512;
partial_digest_len = SHA2_512_HASH_LEN;
break;
+ case CRYPTO_SHA2_512:
case CRYPTO_SHA2_512_HMAC:
auth_hash = &auth_hash_hmac_sha2_512;
auth_mode = CHCR_SCMD_AUTH_MODE_SHA512_512;
@@ -1951,6 +2000,15 @@ ccr_newsession(device_t dev, crypto_session_t cses, struct cryptoini *cri)
mk_size = CHCR_KEYCTX_MAC_KEY_SIZE_128;
break;
}
+ switch (c->cri_alg) {
+ case CRYPTO_SHA1_HMAC:
+ case CRYPTO_SHA2_224_HMAC:
+ case CRYPTO_SHA2_256_HMAC:
+ case CRYPTO_SHA2_384_HMAC:
+ case CRYPTO_SHA2_512_HMAC:
+ hmac = true;
+ break;
+ }
break;
case CRYPTO_AES_CBC:
case CRYPTO_AES_ICM:
@@ -1992,8 +2050,12 @@ ccr_newsession(device_t dev, crypto_session_t cses, struct cryptoini *cri)
return (EINVAL);
if (hash == NULL && cipher == NULL)
return (EINVAL);
- if (hash != NULL && hash->cri_key == NULL)
- return (EINVAL);
+ if (hash != NULL) {
+ if ((hmac || gcm_hash) && hash->cri_key == NULL)
+ return (EINVAL);
+ if (!(hmac || gcm_hash) && hash->cri_key != NULL)
+ return (EINVAL);
+ }
sc = device_get_softc(dev);
mtx_lock(&sc->lock);
@@ -2008,9 +2070,12 @@ ccr_newsession(device_t dev, crypto_session_t cses, struct cryptoini *cri)
s->mode = GCM;
else if (hash != NULL && cipher != NULL)
s->mode = AUTHENC;
- else if (hash != NULL)
- s->mode = HMAC;
- else {
+ else if (hash != NULL) {
+ if (hmac)
+ s->mode = HMAC;
+ else
+ s->mode = HASH;
+ } else {
MPASS(cipher != NULL);
s->mode = BLKCIPHER;
}
@@ -2029,8 +2094,11 @@ ccr_newsession(device_t dev, crypto_session_t cses, struct cryptoini *cri)
s->hmac.hash_len = auth_hash->hashsize;
else
s->hmac.hash_len = hash->cri_mlen;
- ccr_init_hmac_digest(s, hash->cri_alg, hash->cri_key,
- hash->cri_klen);
+ if (hmac)
+ ccr_init_hmac_digest(s, hash->cri_alg, hash->cri_key,
+ hash->cri_klen);
+ else
+ ccr_init_hash_digest(s, hash->cri_alg);
}
if (cipher != NULL) {
s->blkcipher.cipher_mode = cipher_mode;
@@ -2085,11 +2153,16 @@ ccr_process(device_t dev, struct cryptop *crp, int hint)
}
switch (s->mode) {
+ case HASH:
+ error = ccr_hash(sc, s, crp);
+ if (error == 0)
+ sc->stats_hash++;
+ break;
case HMAC:
if (crd->crd_flags & CRD_F_KEY_EXPLICIT)
ccr_init_hmac_digest(s, crd->crd_alg, crd->crd_key,
crd->crd_klen);
- error = ccr_hmac(sc, s, crp);
+ error = ccr_hash(sc, s, crp);
if (error == 0)
sc->stats_hmac++;
break;
@@ -2240,8 +2313,9 @@ do_cpl6_fw_pld(struct sge_iq *iq, const struct rss_header *rss,
sc->stats_inflight--;
switch (s->mode) {
+ case HASH:
case HMAC:
- error = ccr_hmac_done(sc, s, crp, cpl, error);
+ error = ccr_hash_done(sc, s, crp, cpl, error);
break;
case BLKCIPHER:
error = ccr_blkcipher_done(sc, s, crp, cpl, error);
diff --git a/sys/dev/cxgbe/iw_cxgbe/cm.c b/sys/dev/cxgbe/iw_cxgbe/cm.c
index bf9cf46608f6..515a61d2417d 100644
--- a/sys/dev/cxgbe/iw_cxgbe/cm.c
+++ b/sys/dev/cxgbe/iw_cxgbe/cm.c
@@ -174,7 +174,6 @@ static void process_newconn(struct c4iw_listen_ep *master_lep,
free(__a, M_SONAME); \
} while (0)
-#ifdef KTR
static char *states[] = {
"idle",
"listen",
@@ -190,7 +189,6 @@ static char *states[] = {
"dead",
NULL,
};
-#endif
static void deref_cm_id(struct c4iw_ep_common *epc)
{
@@ -883,7 +881,9 @@ uninit_iwarp_socket(struct socket *so)
static void
process_data(struct c4iw_ep *ep)
{
+ int ret = 0;
int disconnect = 0;
+ struct c4iw_qp_attributes attrs = {0};
CTR5(KTR_IW_CXGBE, "%s: so %p, ep %p, state %s, sbused %d", __func__,
ep->com.so, ep, states[ep->com.state], sbused(&ep->com.so->so_rcv));
@@ -898,9 +898,16 @@ process_data(struct c4iw_ep *ep)
/* Refered in process_newconn() */
c4iw_put_ep(&ep->parent_ep->com);
break;
+ case FPDU_MODE:
+ MPASS(ep->com.qp != NULL);
+ attrs.next_state = C4IW_QP_STATE_TERMINATE;
+ ret = c4iw_modify_qp(ep->com.dev, ep->com.qp,
+ C4IW_QP_ATTR_NEXT_STATE, &attrs, 1);
+ if (ret != -EINPROGRESS)
+ disconnect = 1;
+ break;
default:
- if (sbused(&ep->com.so->so_rcv))
- log(LOG_ERR, "%s: Unexpected streaming data. ep %p, "
+ log(LOG_ERR, "%s: Unexpected streaming data. ep %p, "
"state %d, so %p, so_state 0x%x, sbused %u\n",
__func__, ep, ep->com.state, ep->com.so,
ep->com.so->so_state, sbused(&ep->com.so->so_rcv));
@@ -1180,7 +1187,24 @@ process_socket_event(struct c4iw_ep *ep)
}
/* rx data */
- process_data(ep);
+ if (sbused(&ep->com.so->so_rcv)) {
+ process_data(ep);
+ return;
+ }
+
+ /* Socket events for 'MPA Request Received' and 'Close Complete'
+ * were already processed earlier in their previous events handlers.
+ * Hence, these socket events are skipped.
+ * And any other socket events must have handled above.
+ */
+ MPASS((ep->com.state == MPA_REQ_RCVD) || (ep->com.state == MORIBUND));
+
+ if ((ep->com.state != MPA_REQ_RCVD) && (ep->com.state != MORIBUND))
+ log(LOG_ERR, "%s: Unprocessed socket event so %p, "
+ "so_state 0x%x, so_err %d, sb_state 0x%x, ep %p, ep_state %s\n",
+ __func__, so, so->so_state, so->so_error, so->so_rcv.sb_state,
+ ep, states[state]);
+
}
SYSCTL_NODE(_hw, OID_AUTO, iw_cxgbe, CTLFLAG_RD, 0, "iw_cxgbe driver parameters");
@@ -1633,6 +1657,7 @@ send_abort(struct c4iw_ep *ep)
* handler(not yet implemented) of iw_cxgbe driver.
*/
release_ep_resources(ep);
+ ep->com.state = DEAD;
return (0);
}
@@ -2601,22 +2626,24 @@ int c4iw_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
goto fail;
setiwsockopt(ep->com.so);
+ init_iwarp_socket(ep->com.so, &ep->com);
err = -soconnect(ep->com.so, (struct sockaddr *)&ep->com.remote_addr,
ep->com.thread);
- if (!err) {
- init_iwarp_socket(ep->com.so, &ep->com);
- goto out;
- } else
+ if (err)
goto fail_free_so;
+ CTR2(KTR_IW_CXGBE, "%s:ccE, ep %p", __func__, ep);
+ return 0;
fail_free_so:
+ uninit_iwarp_socket(ep->com.so);
+ ep->com.state = DEAD;
sock_release(ep->com.so);
fail:
deref_cm_id(&ep->com);
c4iw_put_ep(&ep->com);
ep = NULL;
out:
- CTR2(KTR_IW_CXGBE, "%s:ccE ret:%d", __func__, err);
+ CTR2(KTR_IW_CXGBE, "%s:ccE Error %d", __func__, err);
return err;
}
diff --git a/sys/dev/cxgbe/iw_cxgbe/qp.c b/sys/dev/cxgbe/iw_cxgbe/qp.c
index f04a442879aa..eb00106da846 100644
--- a/sys/dev/cxgbe/iw_cxgbe/qp.c
+++ b/sys/dev/cxgbe/iw_cxgbe/qp.c
@@ -1475,6 +1475,22 @@ int c4iw_modify_qp(struct c4iw_dev *rhp, struct c4iw_qp *qhp,
if (qhp->attr.state == attrs->next_state)
goto out;
+ /* Return EINPROGRESS if QP is already in transition state.
+ * Eg: CLOSING->IDLE transition or *->ERROR transition.
+ * This can happen while connection is switching(due to rdma_fini)
+ * from iWARP/RDDP to TOE mode and any inflight RDMA RX data will
+ * reach TOE driver -> TCP stack -> iWARP driver. In this way
+ * iWARP driver keep receiving inflight RDMA RX data until socket
+ * is closed or aborted. And if iWARP CM is in FPDU sate, then
+ * it tries to put QP in TERM state and disconnects endpoint.
+ * But as QP is already in transition state, this event is ignored.
+ */
+ if ((qhp->attr.state >= C4IW_QP_STATE_ERROR) &&
+ (attrs->next_state == C4IW_QP_STATE_TERMINATE)) {
+ ret = -EINPROGRESS;
+ goto out;
+ }
+
switch (qhp->attr.state) {
case C4IW_QP_STATE_IDLE:
switch (attrs->next_state) {
diff --git a/sys/dev/cxgbe/t4_main.c b/sys/dev/cxgbe/t4_main.c
index d2746367251f..7593f9366f8f 100644
--- a/sys/dev/cxgbe/t4_main.c
+++ b/sys/dev/cxgbe/t4_main.c
@@ -92,6 +92,7 @@ __FBSDID("$FreeBSD$");
static int t4_probe(device_t);
static int t4_attach(device_t);
static int t4_detach(device_t);
+static int t4_child_location_str(device_t, device_t, char *, size_t);
static int t4_ready(device_t);
static int t4_read_port_device(device_t, int, device_t *);
static device_method_t t4_methods[] = {
@@ -99,6 +100,8 @@ static device_method_t t4_methods[] = {
DEVMETHOD(device_attach, t4_attach),
DEVMETHOD(device_detach, t4_detach),
+ DEVMETHOD(bus_child_location_str, t4_child_location_str),
+
DEVMETHOD(t4_is_main_ready, t4_ready),
DEVMETHOD(t4_read_port_device, t4_read_port_device),
@@ -158,6 +161,8 @@ static device_method_t t5_methods[] = {
DEVMETHOD(device_attach, t4_attach),
DEVMETHOD(device_detach, t4_detach),
+ DEVMETHOD(bus_child_location_str, t4_child_location_str),
+
DEVMETHOD(t4_is_main_ready, t4_ready),
DEVMETHOD(t4_read_port_device, t4_read_port_device),
@@ -191,6 +196,8 @@ static device_method_t t6_methods[] = {
DEVMETHOD(device_attach, t4_attach),
DEVMETHOD(device_detach, t4_detach),
+ DEVMETHOD(bus_child_location_str, t4_child_location_str),
+
DEVMETHOD(t4_is_main_ready, t4_ready),
DEVMETHOD(t4_read_port_device, t4_read_port_device),
@@ -837,6 +844,24 @@ t4_init_devnames(struct adapter *sc)
}
static int
+t4_ifnet_unit(struct adapter *sc, struct port_info *pi)
+{
+ const char *parent, *name;
+ long value;
+ int line, unit;
+
+ line = 0;
+ parent = device_get_nameunit(sc->dev);
+ name = sc->names->ifnet_name;
+ while (resource_find_dev(&line, name, &unit, "at", parent) == 0) {
+ if (resource_long_value(name, unit, "port", &value) == 0 &&
+ value == pi->port_id)
+ return (unit);
+ }
+ return (-1);
+}
+
+static int
t4_attach(device_t dev)
{
struct adapter *sc;
@@ -1037,7 +1062,8 @@ t4_attach(device_t dev)
pi->flags |= FIXED_IFMEDIA;
PORT_UNLOCK(pi);
- pi->dev = device_add_child(dev, sc->names->ifnet_name, -1);
+ pi->dev = device_add_child(dev, sc->names->ifnet_name,
+ t4_ifnet_unit(sc, pi));
if (pi->dev == NULL) {
device_printf(dev,
"failed to add device for port %d.\n", i);
@@ -1253,6 +1279,16 @@ done:
}
static int
+t4_child_location_str(device_t bus, device_t dev, char *buf, size_t buflen)
+{
+ struct port_info *pi;
+
+ pi = device_get_softc(dev);
+ snprintf(buf, buflen, "port=%d", pi->port_id);
+ return (0);
+}
+
+static int
t4_ready(device_t dev)
{
struct adapter *sc;
@@ -1543,7 +1579,7 @@ cxgbe_vi_attach(device_t dev, struct vi_info *vi)
if (is_ethoffload(vi->pi->adapter) && vi->nofldtxq != 0)
ifp->if_hw_tsomaxsegcount = TX_SGL_SEGS_EO_TSO;
#endif
- ifp->if_hw_tsomaxsegsize = 0;
+ ifp->if_hw_tsomaxsegsize = 65536;
ether_ifattach(ifp, vi->hw_addr);
#ifdef DEV_NETMAP
diff --git a/sys/dev/cxgbe/t4_sge.c b/sys/dev/cxgbe/t4_sge.c
index b0fe1da43d95..643eb29ffb9a 100644
--- a/sys/dev/cxgbe/t4_sge.c
+++ b/sys/dev/cxgbe/t4_sge.c
@@ -4725,8 +4725,11 @@ add_to_txpkts(struct mbuf *m, struct txpkts *txp, u_int available)
MPASS(txp->wr_type == 0 || txp->wr_type == 1);
+ if (cannot_use_txpkts(m))
+ return (1);
+
nsegs = mbuf_nsegs(m);
- if (needs_tso(m) || (txp->wr_type == 1 && nsegs != 1))
+ if (txp->wr_type == 1 && nsegs != 1)
return (1);
plen = txp->plen + m->m_pkthdr.len;
@@ -5079,6 +5082,9 @@ reclaim_tx_descs(struct sge_txq *txq, u_int n)
KASSERT(can_reclaim >= ndesc,
("%s: unexpected number of credits: %d, %d",
__func__, can_reclaim, ndesc));
+ KASSERT(ndesc != 0,
+ ("%s: descriptor with no credits: cidx %d",
+ __func__, eq->cidx));
for (m = txsd->m; m != NULL; m = nextpkt) {
nextpkt = m->m_nextpkt;
@@ -5610,10 +5616,6 @@ write_ethofld_wr(struct cxgbe_snd_tag *cst, struct fw_eth_tx_eo_wr *wr,
m0->m_pkthdr.l4hlen > 0,
("%s: ethofld mbuf %p is missing header lengths", __func__, m0));
- if (needs_udp_csum(m0)) {
- CXGBE_UNIMPLEMENTED("UDP ethofld");
- }
-
len16 = mbuf_eo_len16(m0);
nsegs = mbuf_eo_nsegs(m0);
pktlen = m0->m_pkthdr.len;
@@ -5628,37 +5630,52 @@ write_ethofld_wr(struct cxgbe_snd_tag *cst, struct fw_eth_tx_eo_wr *wr,
wr->equiq_to_len16 = htobe32(V_FW_WR_LEN16(len16) |
V_FW_WR_FLOWID(cst->etid));
wr->r3 = 0;
- wr->u.tcpseg.type = FW_ETH_TX_EO_TYPE_TCPSEG;
- wr->u.tcpseg.ethlen = m0->m_pkthdr.l2hlen;
- wr->u.tcpseg.iplen = htobe16(m0->m_pkthdr.l3hlen);
- wr->u.tcpseg.tcplen = m0->m_pkthdr.l4hlen;
- wr->u.tcpseg.tsclk_tsoff = mbuf_eo_tsclk_tsoff(m0);
- wr->u.tcpseg.r4 = 0;
- wr->u.tcpseg.r5 = 0;
- wr->u.tcpseg.plen = htobe32(pktlen - immhdrs);
+ if (needs_udp_csum(m0)) {
+ wr->u.udpseg.type = FW_ETH_TX_EO_TYPE_UDPSEG;
+ wr->u.udpseg.ethlen = m0->m_pkthdr.l2hlen;
+ wr->u.udpseg.iplen = htobe16(m0->m_pkthdr.l3hlen);
+ wr->u.udpseg.udplen = m0->m_pkthdr.l4hlen;
+ wr->u.udpseg.rtplen = 0;
+ wr->u.udpseg.r4 = 0;
+ wr->u.udpseg.mss = htobe16(pktlen - immhdrs);
+ wr->u.udpseg.schedpktsize = wr->u.udpseg.mss;
+ wr->u.udpseg.plen = htobe32(pktlen - immhdrs);
+ cpl = (void *)(wr + 1);
+ } else {
+ MPASS(needs_tcp_csum(m0));
+ wr->u.tcpseg.type = FW_ETH_TX_EO_TYPE_TCPSEG;
+ wr->u.tcpseg.ethlen = m0->m_pkthdr.l2hlen;
+ wr->u.tcpseg.iplen = htobe16(m0->m_pkthdr.l3hlen);
+ wr->u.tcpseg.tcplen = m0->m_pkthdr.l4hlen;
+ wr->u.tcpseg.tsclk_tsoff = mbuf_eo_tsclk_tsoff(m0);
+ wr->u.tcpseg.r4 = 0;
+ wr->u.tcpseg.r5 = 0;
+ wr->u.tcpseg.plen = htobe32(pktlen - immhdrs);
- if (needs_tso(m0)) {
- struct cpl_tx_pkt_lso_core *lso = (void *)(wr + 1);
+ if (needs_tso(m0)) {
+ struct cpl_tx_pkt_lso_core *lso = (void *)(wr + 1);
- wr->u.tcpseg.mss = htobe16(m0->m_pkthdr.tso_segsz);
+ wr->u.tcpseg.mss = htobe16(m0->m_pkthdr.tso_segsz);
- ctrl = V_LSO_OPCODE(CPL_TX_PKT_LSO) | F_LSO_FIRST_SLICE |
- F_LSO_LAST_SLICE | V_LSO_IPHDR_LEN(m0->m_pkthdr.l3hlen >> 2)
- | V_LSO_TCPHDR_LEN(m0->m_pkthdr.l4hlen >> 2);
- if (m0->m_pkthdr.l2hlen == sizeof(struct ether_vlan_header))
- ctrl |= V_LSO_ETHHDR_LEN(1);
- if (m0->m_pkthdr.l3hlen == sizeof(struct ip6_hdr))
- ctrl |= F_LSO_IPV6;
- lso->lso_ctrl = htobe32(ctrl);
- lso->ipid_ofst = htobe16(0);
- lso->mss = htobe16(m0->m_pkthdr.tso_segsz);
- lso->seqno_offset = htobe32(0);
- lso->len = htobe32(pktlen);
+ ctrl = V_LSO_OPCODE(CPL_TX_PKT_LSO) |
+ F_LSO_FIRST_SLICE | F_LSO_LAST_SLICE |
+ V_LSO_IPHDR_LEN(m0->m_pkthdr.l3hlen >> 2) |
+ V_LSO_TCPHDR_LEN(m0->m_pkthdr.l4hlen >> 2);
+ if (m0->m_pkthdr.l2hlen == sizeof(struct ether_vlan_header))
+ ctrl |= V_LSO_ETHHDR_LEN(1);
+ if (m0->m_pkthdr.l3hlen == sizeof(struct ip6_hdr))
+ ctrl |= F_LSO_IPV6;
+ lso->lso_ctrl = htobe32(ctrl);
+ lso->ipid_ofst = htobe16(0);
+ lso->mss = htobe16(m0->m_pkthdr.tso_segsz);
+ lso->seqno_offset = htobe32(0);
+ lso->len = htobe32(pktlen);
- cpl = (void *)(lso + 1);
- } else {
- wr->u.tcpseg.mss = htobe16(0xffff);
- cpl = (void *)(wr + 1);
+ cpl = (void *)(lso + 1);
+ } else {
+ wr->u.tcpseg.mss = htobe16(0xffff);
+ cpl = (void *)(wr + 1);
+ }
}
/* Checksum offload must be requested for ethofld. */
@@ -5677,7 +5694,7 @@ write_ethofld_wr(struct cxgbe_snd_tag *cst, struct fw_eth_tx_eo_wr *wr,
cpl->len = htobe16(pktlen);
cpl->ctrl1 = htobe64(ctrl1);
- /* Copy Ethernet, IP & TCP hdrs as immediate data */
+ /* Copy Ethernet, IP & TCP/UDP hdrs as immediate data */
p = (uintptr_t)(cpl + 1);
m_copydata(m0, 0, immhdrs, (void *)p);
diff --git a/sys/dev/evdev/cdev.c b/sys/dev/evdev/cdev.c
index 433444973779..615a70bafc79 100644
--- a/sys/dev/evdev/cdev.c
+++ b/sys/dev/evdev/cdev.c
@@ -349,6 +349,19 @@ evdev_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag,
if (client->ec_revoked || evdev == NULL)
return (ENODEV);
+ /*
+ * Fix evdev state corrupted with discarding of kdb events.
+ * EVIOCGKEY and EVIOCGLED ioctls can suffer from this.
+ */
+ if (evdev->ev_kdb_active) {
+ EVDEV_LOCK(evdev);
+ if (evdev->ev_kdb_active) {
+ evdev->ev_kdb_active = false;
+ evdev_restore_after_kdb(evdev);
+ }
+ EVDEV_UNLOCK(evdev);
+ }
+
/* file I/O ioctl handling */
switch (cmd) {
case FIOSETOWN:
diff --git a/sys/dev/evdev/evdev.c b/sys/dev/evdev/evdev.c
index a119cbbc3ea0..2f5eb11b96b2 100644
--- a/sys/dev/evdev/evdev.c
+++ b/sys/dev/evdev/evdev.c
@@ -32,9 +32,11 @@
#include <sys/param.h>
#include <sys/bitstring.h>
#include <sys/conf.h>
+#include <sys/kdb.h>
#include <sys/kernel.h>
#include <sys/malloc.h>
#include <sys/module.h>
+#include <sys/proc.h>
#include <sys/sysctl.h>
#include <sys/systm.h>
@@ -763,6 +765,30 @@ evdev_send_event(struct evdev_dev *evdev, uint16_t type, uint16_t code,
}
}
+void
+evdev_restore_after_kdb(struct evdev_dev *evdev)
+{
+ int code;
+
+ EVDEV_LOCK_ASSERT(evdev);
+
+ /* Report postponed leds */
+ for (code = 0; code < LED_CNT; code++)
+ if (bit_test(evdev->ev_kdb_led_states, code))
+ evdev_send_event(evdev, EV_LED, code,
+ !bit_test(evdev->ev_led_states, code));
+ bit_nclear(evdev->ev_kdb_led_states, 0, LED_MAX);
+
+ /* Release stuck keys (CTRL + ALT + ESC) */
+ evdev_stop_repeat(evdev);
+ for (code = 0; code < KEY_CNT; code++) {
+ if (bit_test(evdev->ev_key_states, code)) {
+ evdev_send_event(evdev, EV_KEY, code, KEY_EVENT_UP);
+ evdev_send_event(evdev, EV_SYN, SYN_REPORT, 1);
+ }
+ }
+}
+
int
evdev_push_event(struct evdev_dev *evdev, uint16_t type, uint16_t code,
int32_t value)
@@ -771,8 +797,26 @@ evdev_push_event(struct evdev_dev *evdev, uint16_t type, uint16_t code,
if (evdev_check_event(evdev, type, code, value) != 0)
return (EINVAL);
+ /*
+ * Discard all but LEDs kdb events as unrelated to userspace.
+ * Aggregate LED updates and postpone reporting until kdb deactivation.
+ */
+ if (kdb_active || SCHEDULER_STOPPED()) {
+ evdev->ev_kdb_active = true;
+ if (type == EV_LED)
+ bit_set(evdev->ev_kdb_led_states,
+ bit_test(evdev->ev_led_states, code) != value);
+ return (0);
+ }
+
EVDEV_ENTER(evdev);
+ /* Fix evdev state corrupted with discarding of kdb events */
+ if (evdev->ev_kdb_active) {
+ evdev->ev_kdb_active = false;
+ evdev_restore_after_kdb(evdev);
+ }
+
evdev_modify_event(evdev, type, code, &value);
if (type == EV_SYN && code == SYN_REPORT &&
bit_test(evdev->ev_flags, EVDEV_FLAG_MT_AUTOREL))
diff --git a/sys/dev/evdev/evdev_private.h b/sys/dev/evdev/evdev_private.h
index 05206a9d09bd..71bdecaa57be 100644
--- a/sys/dev/evdev/evdev_private.h
+++ b/sys/dev/evdev/evdev_private.h
@@ -117,6 +117,10 @@ struct evdev_dev
bitstr_t bit_decl(ev_sw_states, SW_CNT);
bool ev_report_opened;
+ /* KDB state: */
+ bool ev_kdb_active;
+ bitstr_t bit_decl(ev_kdb_led_states, LED_CNT);
+
/* Multitouch protocol type B state: */
struct evdev_mt * ev_mt;
@@ -132,9 +136,14 @@ struct evdev_dev
LIST_HEAD(, evdev_client) ev_clients;
};
+#define SYSTEM_CONSOLE_LOCK &Giant
+
#define EVDEV_LOCK(evdev) mtx_lock((evdev)->ev_lock)
#define EVDEV_UNLOCK(evdev) mtx_unlock((evdev)->ev_lock)
-#define EVDEV_LOCK_ASSERT(evdev) mtx_assert((evdev)->ev_lock, MA_OWNED)
+#define EVDEV_LOCK_ASSERT(evdev) do { \
+ if ((evdev)->ev_lock != SYSTEM_CONSOLE_LOCK) \
+ mtx_assert((evdev)->ev_lock, MA_OWNED); \
+} while (0)
#define EVDEV_ENTER(evdev) do { \
if ((evdev)->ev_lock_type == EV_LOCK_INTERNAL) \
EVDEV_LOCK(evdev); \
@@ -185,6 +194,7 @@ int evdev_cdev_destroy(struct evdev_dev *);
bool evdev_event_supported(struct evdev_dev *, uint16_t);
void evdev_set_abs_bit(struct evdev_dev *, uint16_t);
void evdev_set_absinfo(struct evdev_dev *, uint16_t, struct input_absinfo *);
+void evdev_restore_after_kdb(struct evdev_dev *);
/* Client interface: */
int evdev_register_client(struct evdev_dev *, struct evdev_client *);
diff --git a/sys/dev/filemon/filemon_wrapper.c b/sys/dev/filemon/filemon_wrapper.c
index 54150777ed9f..cd4f7b2932e7 100644
--- a/sys/dev/filemon/filemon_wrapper.c
+++ b/sys/dev/filemon/filemon_wrapper.c
@@ -149,7 +149,8 @@ filemon_event_process_exec(void *arg __unused, struct proc *p,
}
static void
-_filemon_wrapper_openat(struct thread *td, char *upath, int flags, int fd)
+_filemon_wrapper_openat(struct thread *td, const char *upath, int flags,
+ int fd)
{
int error;
struct file *fp;
@@ -262,7 +263,8 @@ copyfail:
}
static void
-_filemon_wrapper_link(struct thread *td, char *upath1, char *upath2)
+_filemon_wrapper_link(struct thread *td, const char *upath1,
+ const char *upath2)
{
struct filemon *filemon;
int error;
diff --git a/sys/dev/hwpmc/hwpmc_amd.c b/sys/dev/hwpmc/hwpmc_amd.c
index 1b0470606368..9610ff6b01f0 100644
--- a/sys/dev/hwpmc/hwpmc_amd.c
+++ b/sys/dev/hwpmc/hwpmc_amd.c
@@ -105,7 +105,139 @@ static struct amd_descr amd_pmcdesc[AMD_NPMCS] =
},
.pm_evsel = AMD_PMC_EVSEL_3,
.pm_perfctr = AMD_PMC_PERFCTR_3
- }
+ },
+ {
+ .pm_descr =
+ {
+ .pd_name = "",
+ .pd_class = -1,
+ .pd_caps = AMD_PMC_CAPS,
+ .pd_width = 48
+ },
+ .pm_evsel = AMD_PMC_EVSEL_4,
+ .pm_perfctr = AMD_PMC_PERFCTR_4
+ },
+ {
+ .pm_descr =
+ {
+ .pd_name = "",
+ .pd_class = -1,
+ .pd_caps = AMD_PMC_CAPS,
+ .pd_width = 48
+ },
+ .pm_evsel = AMD_PMC_EVSEL_5,
+ .pm_perfctr = AMD_PMC_PERFCTR_5
+ },
+ {
+ .pm_descr =
+ {
+ .pd_name = "",
+ .pd_class = -1,
+ .pd_caps = AMD_PMC_CAPS,
+ .pd_width = 48
+ },
+ .pm_evsel = AMD_PMC_EVSEL_EP_L3_0,
+ .pm_perfctr = AMD_PMC_PERFCTR_EP_L3_0
+ },
+ {
+ .pm_descr =
+ {
+ .pd_name = "",
+ .pd_class = -1,
+ .pd_caps = AMD_PMC_CAPS,
+ .pd_width = 48
+ },
+ .pm_evsel = AMD_PMC_EVSEL_EP_L3_1,
+ .pm_perfctr = AMD_PMC_PERFCTR_EP_L3_1
+ },
+ {
+ .pm_descr =
+ {
+ .pd_name = "",
+ .pd_class = -1,
+ .pd_caps = AMD_PMC_CAPS,
+ .pd_width = 48
+ },
+ .pm_evsel = AMD_PMC_EVSEL_EP_L3_2,
+ .pm_perfctr = AMD_PMC_PERFCTR_EP_L3_2
+ },
+ {
+ .pm_descr =
+ {
+ .pd_name = "",
+ .pd_class = -1,
+ .pd_caps = AMD_PMC_CAPS,
+ .pd_width = 48
+ },
+ .pm_evsel = AMD_PMC_EVSEL_EP_L3_3,
+ .pm_perfctr = AMD_PMC_PERFCTR_EP_L3_3
+ },
+ {
+ .pm_descr =
+ {
+ .pd_name = "",
+ .pd_class = -1,
+ .pd_caps = AMD_PMC_CAPS,
+ .pd_width = 48
+ },
+ .pm_evsel = AMD_PMC_EVSEL_EP_L3_4,
+ .pm_perfctr = AMD_PMC_PERFCTR_EP_L3_4
+ },
+ {
+ .pm_descr =
+ {
+ .pd_name = "",
+ .pd_class = -1,
+ .pd_caps = AMD_PMC_CAPS,
+ .pd_width = 48
+ },
+ .pm_evsel = AMD_PMC_EVSEL_EP_L3_5,
+ .pm_perfctr = AMD_PMC_PERFCTR_EP_L3_5
+ },
+ {
+ .pm_descr =
+ {
+ .pd_name = "",
+ .pd_class = -1,
+ .pd_caps = AMD_PMC_CAPS,
+ .pd_width = 48
+ },
+ .pm_evsel = AMD_PMC_EVSEL_EP_DF_0,
+ .pm_perfctr = AMD_PMC_PERFCTR_EP_DF_0
+ },
+ {
+ .pm_descr =
+ {
+ .pd_name = "",
+ .pd_class = -1,
+ .pd_caps = AMD_PMC_CAPS,
+ .pd_width = 48
+ },
+ .pm_evsel = AMD_PMC_EVSEL_EP_DF_1,
+ .pm_perfctr = AMD_PMC_PERFCTR_EP_DF_1
+ },
+ {
+ .pm_descr =
+ {
+ .pd_name = "",
+ .pd_class = -1,
+ .pd_caps = AMD_PMC_CAPS,
+ .pd_width = 48
+ },
+ .pm_evsel = AMD_PMC_EVSEL_EP_DF_2,
+ .pm_perfctr = AMD_PMC_PERFCTR_EP_DF_2
+ },
+ {
+ .pm_descr =
+ {
+ .pd_name = "",
+ .pd_class = -1,
+ .pd_caps = AMD_PMC_CAPS,
+ .pd_width = 48
+ },
+ .pm_evsel = AMD_PMC_EVSEL_EP_DF_3,
+ .pm_perfctr = AMD_PMC_PERFCTR_EP_DF_3
+ }
};
struct amd_event_code_map {
@@ -435,7 +567,7 @@ amd_allocate_pmc(int cpu, int ri, struct pmc *pm,
const struct pmc_op_pmcallocate *a)
{
int i;
- uint32_t allowed_unitmask, caps, config, unitmask;
+ uint64_t allowed_unitmask, caps, config, unitmask;
enum pmc_event pe;
const struct pmc_descr *pd;
@@ -456,6 +588,13 @@ amd_allocate_pmc(int cpu, int ri, struct pmc *pm,
PMCDBG2(MDP,ALL,1,"amd-allocate ri=%d caps=0x%x", ri, caps);
+ if((ri >= 0 && ri < 6) && !(a->pm_md.pm_amd.pm_amd_sub_class == PMC_AMD_SUB_CLASS_CORE))
+ return EINVAL;
+ if((ri >= 6 && ri < 12) && !(a->pm_md.pm_amd.pm_amd_sub_class == PMC_AMD_SUB_CLASS_L3_CACHE))
+ return EINVAL;
+ if((ri >= 12 && ri < 16) && !(a->pm_md.pm_amd.pm_amd_sub_class == PMC_AMD_SUB_CLASS_DATA_FABRIC))
+ return EINVAL;
+
if ((pd->pd_caps & caps) != caps)
return EPERM;
if (strlen(pmc_cpuid) != 0) {
@@ -556,7 +695,7 @@ amd_release_pmc(int cpu, int ri, struct pmc *pmc)
static int
amd_start_pmc(int cpu, int ri)
{
- uint32_t config;
+ uint64_t config;
struct pmc *pm;
struct pmc_hw *phw;
const struct amd_descr *pd;
@@ -636,7 +775,7 @@ static int
amd_intr(struct trapframe *tf)
{
int i, error, retval, cpu;
- uint32_t config, evsel, perfctr;
+ uint64_t config, evsel, perfctr;
struct pmc *pm;
struct amd_cpu *pac;
pmc_value_t v;
@@ -688,8 +827,8 @@ amd_intr(struct trapframe *tf)
KASSERT((config & ~AMD_PMC_ENABLE) ==
(pm->pm_md.pm_amd.pm_amd_evsel & ~AMD_PMC_ENABLE),
- ("[amd,%d] config mismatch reg=0x%x pm=0x%x", __LINE__,
- config, pm->pm_md.pm_amd.pm_amd_evsel));
+ ("[amd,%d] config mismatch reg=0x%jx pm=0x%jx", __LINE__,
+ (uintmax_t)config, (uintmax_t)pm->pm_md.pm_amd.pm_amd_evsel));
wrmsr(evsel, config & ~AMD_PMC_ENABLE);
wrmsr(perfctr, AMD_RELOAD_COUNT_TO_PERFCTR_VALUE(v));
diff --git a/sys/dev/hwpmc/hwpmc_amd.h b/sys/dev/hwpmc/hwpmc_amd.h
index 2eb5a2d3ce15..9cf5260bf8b9 100644
--- a/sys/dev/hwpmc/hwpmc_amd.h
+++ b/sys/dev/hwpmc/hwpmc_amd.h
@@ -44,9 +44,39 @@
#define AMD_PMC_PERFCTR_1 0xC0010005
#define AMD_PMC_PERFCTR_2 0xC0010006
#define AMD_PMC_PERFCTR_3 0xC0010007
+/* CORE */
+#define AMD_PMC_EVSEL_4 0xC0010208
+#define AMD_PMC_EVSEL_5 0xC001020A
+#define AMD_PMC_PERFCTR_4 0xC0010209
+#define AMD_PMC_PERFCTR_5 0xC001020B
+/* L3 */
+#define AMD_PMC_EVSEL_EP_L3_0 0xC0010230
+#define AMD_PMC_EVSEL_EP_L3_1 0xC0010232
+#define AMD_PMC_EVSEL_EP_L3_2 0xC0010234
+#define AMD_PMC_EVSEL_EP_L3_3 0xC0010236
+#define AMD_PMC_EVSEL_EP_L3_4 0xC0010238
+#define AMD_PMC_EVSEL_EP_L3_5 0xC001023A
+
+#define AMD_PMC_PERFCTR_EP_L3_0 0xC0010231
+#define AMD_PMC_PERFCTR_EP_L3_1 0xC0010233
+#define AMD_PMC_PERFCTR_EP_L3_2 0xC0010235
+#define AMD_PMC_PERFCTR_EP_L3_3 0xC0010237
+#define AMD_PMC_PERFCTR_EP_L3_4 0xC0010239
+#define AMD_PMC_PERFCTR_EP_L3_5 0xC001023B
+/* DF */
+#define AMD_PMC_EVSEL_EP_DF_0 0xC0010240
+#define AMD_PMC_EVSEL_EP_DF_1 0xC0010242
+#define AMD_PMC_EVSEL_EP_DF_2 0xC0010244
+#define AMD_PMC_EVSEL_EP_DF_3 0xC0010246
+
+#define AMD_PMC_PERFCTR_EP_DF_0 0xC0010241
+#define AMD_PMC_PERFCTR_EP_DF_1 0xC0010243
+#define AMD_PMC_PERFCTR_EP_DF_2 0xC0010245
+#define AMD_PMC_PERFCTR_EP_DF_3 0xC0010247
+
+#define AMD_NPMCS 16
-#define AMD_NPMCS 4
#define AMD_PMC_COUNTERMASK 0xFF000000
#define AMD_PMC_TO_COUNTER(x) (((x) << 24) & AMD_PMC_COUNTERMASK)
@@ -57,6 +87,10 @@
#define AMD_PMC_EDGE (1 << 18)
#define AMD_PMC_OS (1 << 17)
#define AMD_PMC_USR (1 << 16)
+#define AMD_PMC_L3SLICEMASK (0x000F000000000000)
+#define AMD_PMC_L3COREMASK (0xFF00000000000000)
+#define AMD_PMC_TO_L3SLICE(x) (((x) << 48) & AMD_PMC_L3SLICEMASK)
+#define AMD_PMC_TO_L3CORE(x) (((x) << 56) & AMD_PMC_L3COREMASK)
#define AMD_PMC_UNITMASK_M 0x10
#define AMD_PMC_UNITMASK_O 0x08
@@ -70,6 +104,7 @@
#define AMD_PMC_TO_UNITMASK(x) (((x) << 8) & AMD_PMC_UNITMASK)
#define AMD_PMC_TO_EVENTMASK(x) (((x) & 0xFF) | (((uint64_t)(x) & 0xF00) << 24))
+#define AMD_PMC_TO_EVENTMASK_DF(x) (((x) & 0xFF) | (((uint64_t)(x) & 0x0F00) << 24)) | (((uint64_t)(x) & 0x3000) << 47)
#define AMD_VALID_BITS (AMD_PMC_COUNTERMASK | AMD_PMC_INVERT | \
AMD_PMC_ENABLE | AMD_PMC_INT | AMD_PMC_PC | AMD_PMC_EDGE | \
AMD_PMC_OS | AMD_PMC_USR | AMD_PMC_UNITMASK | AMD_PMC_EVENTMASK)
@@ -84,15 +119,22 @@
#define AMD_RELOAD_COUNT_TO_PERFCTR_VALUE(V) (-(V))
#define AMD_PERFCTR_VALUE_TO_RELOAD_COUNT(P) (-(P))
+enum sub_class{
+ PMC_AMD_SUB_CLASS_CORE,
+ PMC_AMD_SUB_CLASS_L3_CACHE,
+ PMC_AMD_SUB_CLASS_DATA_FABRIC
+};
+
struct pmc_md_amd_op_pmcallocate {
- uint32_t pm_amd_config;
+ uint64_t pm_amd_config;
+ uint32_t pm_amd_sub_class;
};
#ifdef _KERNEL
/* MD extension for 'struct pmc' */
struct pmc_md_amd_pmc {
- uint32_t pm_amd_evsel;
+ uint64_t pm_amd_evsel;
};
#endif /* _KERNEL */
diff --git a/sys/dev/hwpmc/hwpmc_logging.c b/sys/dev/hwpmc/hwpmc_logging.c
index 8764ac9e922c..e76aa9b710eb 100644
--- a/sys/dev/hwpmc/hwpmc_logging.c
+++ b/sys/dev/hwpmc/hwpmc_logging.c
@@ -41,6 +41,7 @@ __FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/capsicum.h>
+#include <sys/domainset.h>
#include <sys/file.h>
#include <sys/kernel.h>
#include <sys/kthread.h>
@@ -1231,8 +1232,8 @@ pmclog_process_userlog(struct pmc_owner *po, struct pmc_op_writelog *wl)
void
pmclog_initialize()
{
- int domain;
struct pmclog_buffer *plb;
+ int domain, ncpus, total;
if (pmclog_buffer_size <= 0 || pmclog_buffer_size > 16*1024) {
(void) printf("hwpmc: tunable logbuffersize=%d must be "
@@ -1253,16 +1254,17 @@ pmclog_initialize()
pmclog_buffer_size = PMC_LOG_BUFFER_SIZE;
}
for (domain = 0; domain < vm_ndomains; domain++) {
- int ncpus = pmc_dom_hdrs[domain]->pdbh_ncpus;
- int total = ncpus*pmc_nlogbuffers_pcpu;
+ ncpus = pmc_dom_hdrs[domain]->pdbh_ncpus;
+ total = ncpus * pmc_nlogbuffers_pcpu;
- plb = malloc_domain(sizeof(struct pmclog_buffer)*total, M_PMC, domain, M_WAITOK|M_ZERO);
+ plb = malloc_domainset(sizeof(struct pmclog_buffer) * total,
+ M_PMC, DOMAINSET_PREF(domain), M_WAITOK | M_ZERO);
pmc_dom_hdrs[domain]->pdbh_plbs = plb;
- for (int i = 0; i < total; i++, plb++) {
+ for (; total > 0; total--, plb++) {
void *buf;
- buf = malloc_domain(1024 * pmclog_buffer_size, M_PMC, domain,
- M_WAITOK|M_ZERO);
+ buf = malloc_domainset(1024 * pmclog_buffer_size, M_PMC,
+ DOMAINSET_PREF(domain), M_WAITOK | M_ZERO);
PMCLOG_INIT_BUFFER_DESCRIPTOR(plb, buf, domain);
pmc_plb_rele_unlocked(plb);
}
diff --git a/sys/dev/hwpmc/hwpmc_mod.c b/sys/dev/hwpmc/hwpmc_mod.c
index 1fad25c55702..f94f645b2e39 100644
--- a/sys/dev/hwpmc/hwpmc_mod.c
+++ b/sys/dev/hwpmc/hwpmc_mod.c
@@ -36,6 +36,7 @@
__FBSDID("$FreeBSD$");
#include <sys/param.h>
+#include <sys/domainset.h>
#include <sys/eventhandler.h>
#include <sys/gtaskqueue.h>
#include <sys/jail.h>
@@ -78,14 +79,6 @@ __FBSDID("$FreeBSD$");
#include "hwpmc_soft.h"
-#ifdef NUMA
-#define NDOMAINS vm_ndomains
-#else
-#define NDOMAINS 1
-#define malloc_domain(size, type, domain, flags) malloc((size), (type), (flags))
-#define free_domain(addr, type) free(addr, type)
-#endif
-
#define PMC_EPOCH_ENTER() struct epoch_tracker pmc_et; epoch_enter_preempt(global_epoch_preempt, &pmc_et)
#define PMC_EPOCH_EXIT() epoch_exit_preempt(global_epoch_preempt, &pmc_et)
@@ -5643,15 +5636,16 @@ pmc_initialize(void)
continue;
pc = pcpu_find(cpu);
domain = pc->pc_domain;
- sb = malloc_domain(sizeof(struct pmc_samplebuffer) +
- pmc_nsamples * sizeof(struct pmc_sample), M_PMC, domain,
- M_WAITOK|M_ZERO);
+ sb = malloc_domainset(sizeof(struct pmc_samplebuffer) +
+ pmc_nsamples * sizeof(struct pmc_sample), M_PMC,
+ DOMAINSET_PREF(domain), M_WAITOK | M_ZERO);
KASSERT(pmc_pcpu[cpu] != NULL,
("[pmc,%d] cpu=%d Null per-cpu data", __LINE__, cpu));
- sb->ps_callchains = malloc_domain(pmc_callchaindepth * pmc_nsamples *
- sizeof(uintptr_t), M_PMC, domain, M_WAITOK|M_ZERO);
+ sb->ps_callchains = malloc_domainset(pmc_callchaindepth *
+ pmc_nsamples * sizeof(uintptr_t), M_PMC,
+ DOMAINSET_PREF(domain), M_WAITOK | M_ZERO);
for (n = 0, ps = sb->ps_samples; n < pmc_nsamples; n++, ps++)
ps->ps_pc = sb->ps_callchains +
@@ -5659,35 +5653,27 @@ pmc_initialize(void)
pmc_pcpu[cpu]->pc_sb[PMC_HR] = sb;
- sb = malloc_domain(sizeof(struct pmc_samplebuffer) +
- pmc_nsamples * sizeof(struct pmc_sample), M_PMC, domain,
- M_WAITOK|M_ZERO);
-
- KASSERT(pmc_pcpu[cpu] != NULL,
- ("[pmc,%d] cpu=%d Null per-cpu data", __LINE__, cpu));
-
- sb->ps_callchains = malloc_domain(pmc_callchaindepth * pmc_nsamples *
- sizeof(uintptr_t), M_PMC, domain, M_WAITOK|M_ZERO);
+ sb = malloc_domainset(sizeof(struct pmc_samplebuffer) +
+ pmc_nsamples * sizeof(struct pmc_sample), M_PMC,
+ DOMAINSET_PREF(domain), M_WAITOK | M_ZERO);
+ sb->ps_callchains = malloc_domainset(pmc_callchaindepth *
+ pmc_nsamples * sizeof(uintptr_t), M_PMC,
+ DOMAINSET_PREF(domain), M_WAITOK | M_ZERO);
for (n = 0, ps = sb->ps_samples; n < pmc_nsamples; n++, ps++)
ps->ps_pc = sb->ps_callchains +
(n * pmc_callchaindepth);
pmc_pcpu[cpu]->pc_sb[PMC_SR] = sb;
- sb = malloc_domain(sizeof(struct pmc_samplebuffer) +
- pmc_nsamples * sizeof(struct pmc_sample), M_PMC, domain,
- M_WAITOK|M_ZERO);
-
- KASSERT(pmc_pcpu[cpu] != NULL,
- ("[pmc,%d] cpu=%d Null per-cpu data", __LINE__, cpu));
-
- sb->ps_callchains = malloc_domain(pmc_callchaindepth * pmc_nsamples *
- sizeof(uintptr_t), M_PMC, domain, M_WAITOK|M_ZERO);
-
+ sb = malloc_domainset(sizeof(struct pmc_samplebuffer) +
+ pmc_nsamples * sizeof(struct pmc_sample), M_PMC,
+ DOMAINSET_PREF(domain), M_WAITOK | M_ZERO);
+ sb->ps_callchains = malloc_domainset(pmc_callchaindepth *
+ pmc_nsamples * sizeof(uintptr_t), M_PMC,
+ DOMAINSET_PREF(domain), M_WAITOK | M_ZERO);
for (n = 0, ps = sb->ps_samples; n < pmc_nsamples; n++, ps++)
- ps->ps_pc = sb->ps_callchains +
- (n * pmc_callchaindepth);
+ ps->ps_pc = sb->ps_callchains + n * pmc_callchaindepth;
pmc_pcpu[cpu]->pc_sb[PMC_UR] = sb;
}
diff --git a/sys/dev/ixl/iavf_vc.c b/sys/dev/ixl/iavf_vc.c
index 933c4214debe..2a77f390faaa 100644
--- a/sys/dev/ixl/iavf_vc.c
+++ b/sys/dev/ixl/iavf_vc.c
@@ -720,10 +720,6 @@ iavf_update_stats_counters(struct iavf_sc *sc, struct i40e_eth_stats *es)
uint64_t tx_discards;
tx_discards = es->tx_discards;
-#if 0
- for (int i = 0; i < vsi->num_queues; i++)
- tx_discards += sc->vsi.queues[i].txr.br->br_drops;
-#endif
/* Update ifnet stats */
IXL_SET_IPACKETS(vsi, es->rx_unicast +
@@ -826,7 +822,7 @@ iavf_config_rss_lut(struct iavf_sc *sc)
/*
* Fetch the RSS bucket id for the given indirection entry.
* Cap it at the number of configured buckets (which is
- * num_queues.)
+ * num_rx_queues.)
*/
que_id = rss_get_indirection_to_bucket(i);
que_id = que_id % sc->vsi.num_rx_queues;
diff --git a/sys/dev/ixl/if_iavf.c b/sys/dev/ixl/if_iavf.c
index 3120433a7d87..0d14c88a5bf4 100644
--- a/sys/dev/ixl/if_iavf.c
+++ b/sys/dev/ixl/if_iavf.c
@@ -1946,10 +1946,10 @@ iavf_config_rss_reg(struct iavf_sc *sc)
/*
* Fetch the RSS bucket id for the given indirection entry.
* Cap it at the number of configured buckets (which is
- * num_queues.)
+ * num_rx_queues.)
*/
que_id = rss_get_indirection_to_bucket(i);
- que_id = que_id % vsi->num_queues;
+ que_id = que_id % vsi->num_rx_queues;
#else
que_id = j;
#endif
diff --git a/sys/dev/kbdmux/kbdmux.c b/sys/dev/kbdmux/kbdmux.c
index f17634c8879b..79f3216675e5 100644
--- a/sys/dev/kbdmux/kbdmux.c
+++ b/sys/dev/kbdmux/kbdmux.c
@@ -505,7 +505,7 @@ kbdmux_init(int unit, keyboard_t **kbdp, void *arg, int flags)
evdev_support_led(evdev, LED_CAPSL);
evdev_support_led(evdev, LED_SCROLLL);
- if (evdev_register(evdev))
+ if (evdev_register_mtx(evdev, &Giant))
evdev_free(evdev);
else
state->ks_evdev = evdev;
diff --git a/sys/dev/random/random_harvestq.c b/sys/dev/random/random_harvestq.c
index 6699d06156ea..6c6adb0120e8 100644
--- a/sys/dev/random/random_harvestq.c
+++ b/sys/dev/random/random_harvestq.c
@@ -64,6 +64,17 @@ __FBSDID("$FreeBSD$");
#include <dev/random/randomdev.h>
#include <dev/random/random_harvestq.h>
+#if defined(RANDOM_ENABLE_ETHER)
+#define _RANDOM_HARVEST_ETHER_OFF 0
+#else
+#define _RANDOM_HARVEST_ETHER_OFF (1u << RANDOM_NET_ETHER)
+#endif
+#if defined(RANDOM_ENABLE_UMA)
+#define _RANDOM_HARVEST_UMA_OFF 0
+#else
+#define _RANDOM_HARVEST_UMA_OFF (1u << RANDOM_UMA)
+#endif
+
static void random_kthread(void);
static void random_sources_feed(void);
@@ -254,6 +265,10 @@ read_rate_increment(u_int chunk)
static int
random_check_uint_harvestmask(SYSCTL_HANDLER_ARGS)
{
+ static const u_int user_immutable_mask =
+ (((1 << ENTROPYSOURCE) - 1) & (-1UL << RANDOM_PURE_START)) |
+ _RANDOM_HARVEST_ETHER_OFF | _RANDOM_HARVEST_UMA_OFF;
+
int error;
u_int value, orig_value;
@@ -268,8 +283,8 @@ random_check_uint_harvestmask(SYSCTL_HANDLER_ARGS)
/*
* Disallow userspace modification of pure entropy sources.
*/
- hc_source_mask = (value & ~RANDOM_HARVEST_PURE_MASK) |
- (orig_value & RANDOM_HARVEST_PURE_MASK);
+ hc_source_mask = (value & ~user_immutable_mask) |
+ (orig_value & user_immutable_mask);
return (0);
}
@@ -351,13 +366,17 @@ random_print_harvestmask_symbolic(SYSCTL_HANDLER_ARGS)
static void
random_harvestq_init(void *unused __unused)
{
+ static const u_int almost_everything_mask =
+ (((1 << (RANDOM_ENVIRONMENTAL_END + 1)) - 1) &
+ ~_RANDOM_HARVEST_ETHER_OFF & ~_RANDOM_HARVEST_UMA_OFF);
+
struct sysctl_oid *random_sys_o;
random_sys_o = SYSCTL_ADD_NODE(&random_clist,
SYSCTL_STATIC_CHILDREN(_kern_random),
OID_AUTO, "harvest", CTLFLAG_RW, 0,
"Entropy Device Parameters");
- hc_source_mask = RANDOM_HARVEST_EVERYTHING_MASK;
+ hc_source_mask = almost_everything_mask;
SYSCTL_ADD_PROC(&random_clist,
SYSCTL_CHILDREN(random_sys_o),
OID_AUTO, "mask", CTLTYPE_UINT | CTLFLAG_RW,
diff --git a/sys/dev/sound/pci/hda/hdac.c b/sys/dev/sound/pci/hda/hdac.c
index a850fc08eced..7e471ae84397 100644
--- a/sys/dev/sound/pci/hda/hdac.c
+++ b/sys/dev/sound/pci/hda/hdac.c
@@ -171,7 +171,7 @@ static const struct {
{ HDA_AMD_HUDSON2, "AMD Hudson-2", 0, 0 },
{ HDA_RDC_M3010, "RDC M3010", 0, 0 },
{ HDA_VIA_VT82XX, "VIA VT8251/8237A",0, 0 },
- { HDA_SIS_966, "SiS 966", 0, 0 },
+ { HDA_SIS_966, "SiS 966/968", 0, 0 },
{ HDA_ULI_M5461, "ULI M5461", 0, 0 },
/* Unknown */
{ HDA_INTEL_ALL, "Intel", 0, 0 },
diff --git a/sys/dev/usb/controller/ehci_pci.c b/sys/dev/usb/controller/ehci_pci.c
index 61efbee453c4..16db4e21ce66 100644
--- a/sys/dev/usb/controller/ehci_pci.c
+++ b/sys/dev/usb/controller/ehci_pci.c
@@ -210,6 +210,9 @@ ehci_pci_match(device_t self)
case 0x15621131:
return "Philips ISP156x USB 2.0 controller";
+ case 0x70021039:
+ return "SiS 968 USB 2.0 controller";
+
case 0x31041106:
return ("VIA VT6202 USB 2.0 controller");
diff --git a/sys/dev/usb/input/ukbd.c b/sys/dev/usb/input/ukbd.c
index f35652c663dc..ea586990f082 100644
--- a/sys/dev/usb/input/ukbd.c
+++ b/sys/dev/usb/input/ukbd.c
@@ -1361,7 +1361,7 @@ ukbd_attach(device_t dev)
if (sc->sc_flags & UKBD_FLAG_SCROLLLOCK)
evdev_support_led(evdev, LED_SCROLLL);
- if (evdev_register(evdev))
+ if (evdev_register_mtx(evdev, &Giant))
evdev_free(evdev);
else
sc->sc_evdev = evdev;
diff --git a/sys/fs/ext2fs/ext2_vnops.c b/sys/fs/ext2fs/ext2_vnops.c
index e55910aa0d7d..0286d90a9341 100644
--- a/sys/fs/ext2fs/ext2_vnops.c
+++ b/sys/fs/ext2fs/ext2_vnops.c
@@ -1521,8 +1521,8 @@ ext2_symlink(struct vop_symlink_args *ap)
ip->i_size = len;
ip->i_flag |= IN_CHANGE | IN_UPDATE;
} else
- error = vn_rdwr(UIO_WRITE, vp, ap->a_target, len, (off_t)0,
- UIO_SYSSPACE, IO_NODELOCKED | IO_NOMACCHECK,
+ error = vn_rdwr(UIO_WRITE, vp, __DECONST(void *, ap->a_target),
+ len, (off_t)0, UIO_SYSSPACE, IO_NODELOCKED | IO_NOMACCHECK,
ap->a_cnp->cn_cred, NOCRED, NULL, NULL);
if (error)
vput(vp);
diff --git a/sys/fs/fuse/fuse_vnops.c b/sys/fs/fuse/fuse_vnops.c
index 88bb39dd8fc9..7d26166e5970 100644
--- a/sys/fs/fuse/fuse_vnops.c
+++ b/sys/fs/fuse/fuse_vnops.c
@@ -1708,7 +1708,7 @@ fuse_vnop_symlink(struct vop_symlink_args *ap)
struct vnode *dvp = ap->a_dvp;
struct vnode **vpp = ap->a_vpp;
struct componentname *cnp = ap->a_cnp;
- char *target = ap->a_target;
+ const char *target = ap->a_target;
struct fuse_dispatcher fdi;
diff --git a/sys/fs/nandfs/nandfs_vnops.c b/sys/fs/nandfs/nandfs_vnops.c
index b7dbdcaa6f3b..80e98c368cd7 100644
--- a/sys/fs/nandfs/nandfs_vnops.c
+++ b/sys/fs/nandfs/nandfs_vnops.c
@@ -1939,8 +1939,8 @@ nandfs_symlink(struct vop_symlink_args *ap)
len = strlen(ap->a_target);
- error = vn_rdwr(UIO_WRITE, *vpp, ap->a_target, len, (off_t)0,
- UIO_SYSSPACE, IO_NODELOCKED | IO_NOMACCHECK,
+ error = vn_rdwr(UIO_WRITE, *vpp, __DECONST(void *, ap->a_target),
+ len, (off_t)0, UIO_SYSSPACE, IO_NODELOCKED | IO_NOMACCHECK,
cnp->cn_cred, NOCRED, NULL, NULL);
if (error)
vput(*vpp);
diff --git a/sys/fs/nfs/nfs_var.h b/sys/fs/nfs/nfs_var.h
index b9f5789ce016..9dad6591f234 100644
--- a/sys/fs/nfs/nfs_var.h
+++ b/sys/fs/nfs/nfs_var.h
@@ -474,7 +474,7 @@ int nfsrpc_rename(vnode_t, vnode_t, char *, int, vnode_t, vnode_t, char *, int,
int nfsrpc_link(vnode_t, vnode_t, char *, int,
struct ucred *, NFSPROC_T *, struct nfsvattr *, struct nfsvattr *,
int *, int *, void *);
-int nfsrpc_symlink(vnode_t, char *, int, char *, struct vattr *,
+int nfsrpc_symlink(vnode_t, char *, int, const char *, struct vattr *,
struct ucred *, NFSPROC_T *, struct nfsvattr *, struct nfsvattr *,
struct nfsfh **, int *, int *, void *);
int nfsrpc_mkdir(vnode_t, char *, int, struct vattr *,
diff --git a/sys/fs/nfsclient/nfs_clrpcops.c b/sys/fs/nfsclient/nfs_clrpcops.c
index efd26b5b88fc..0bc34e302ea2 100644
--- a/sys/fs/nfsclient/nfs_clrpcops.c
+++ b/sys/fs/nfsclient/nfs_clrpcops.c
@@ -2627,7 +2627,7 @@ nfsmout:
* nfs symbolic link create rpc
*/
APPLESTATIC int
-nfsrpc_symlink(vnode_t dvp, char *name, int namelen, char *target,
+nfsrpc_symlink(vnode_t dvp, char *name, int namelen, const char *target,
struct vattr *vap, struct ucred *cred, NFSPROC_T *p, struct nfsvattr *dnap,
struct nfsvattr *nnap, struct nfsfh **nfhpp, int *attrflagp,
int *dattrflagp, void *dstuff)
diff --git a/sys/fs/nfsclient/nfs_clvnops.c b/sys/fs/nfsclient/nfs_clvnops.c
index 056eb271eea6..47fd735d3b9e 100644
--- a/sys/fs/nfsclient/nfs_clvnops.c
+++ b/sys/fs/nfsclient/nfs_clvnops.c
@@ -3033,14 +3033,19 @@ nfs_advlock(struct vop_advlock_args *ap)
int ret, error = EOPNOTSUPP;
u_quad_t size;
+ ret = NFSVOPLOCK(vp, LK_SHARED);
+ if (ret != 0)
+ return (EBADF);
if (NFS_ISV4(vp) && (ap->a_flags & (F_POSIX | F_FLOCK)) != 0) {
- if (vp->v_type != VREG)
+ if (vp->v_type != VREG) {
+ NFSVOPUNLOCK(vp, 0);
return (EINVAL);
+ }
if ((ap->a_flags & F_POSIX) != 0)
cred = p->p_ucred;
else
cred = td->td_ucred;
- NFSVOPLOCK(vp, LK_EXCLUSIVE | LK_RETRY);
+ NFSVOPLOCK(vp, LK_UPGRADE | LK_RETRY);
if (vp->v_iflag & VI_DOOMED) {
NFSVOPUNLOCK(vp, 0);
return (EBADF);
@@ -3119,9 +3124,6 @@ nfs_advlock(struct vop_advlock_args *ap)
NFSVOPUNLOCK(vp, 0);
return (0);
} else if (!NFS_ISV4(vp)) {
- error = NFSVOPLOCK(vp, LK_SHARED);
- if (error)
- return (error);
if ((VFSTONFS(vp->v_mount)->nm_flag & NFSMNT_NOLOCKD) != 0) {
size = VTONFS(vp)->n_size;
NFSVOPUNLOCK(vp, 0);
@@ -3144,7 +3146,8 @@ nfs_advlock(struct vop_advlock_args *ap)
NFSVOPUNLOCK(vp, 0);
}
}
- }
+ } else
+ NFSVOPUNLOCK(vp, 0);
return (error);
}
diff --git a/sys/fs/tmpfs/tmpfs.h b/sys/fs/tmpfs/tmpfs.h
index 1df8842d9734..2cedc3a32efc 100644
--- a/sys/fs/tmpfs/tmpfs.h
+++ b/sys/fs/tmpfs/tmpfs.h
@@ -411,7 +411,7 @@ void tmpfs_ref_node(struct tmpfs_node *node);
void tmpfs_ref_node_locked(struct tmpfs_node *node);
int tmpfs_alloc_node(struct mount *mp, struct tmpfs_mount *, enum vtype,
uid_t uid, gid_t gid, mode_t mode, struct tmpfs_node *,
- char *, dev_t, struct tmpfs_node **);
+ const char *, dev_t, struct tmpfs_node **);
void tmpfs_free_node(struct tmpfs_mount *, struct tmpfs_node *);
bool tmpfs_free_node_locked(struct tmpfs_mount *, struct tmpfs_node *, bool);
void tmpfs_free_tmp(struct tmpfs_mount *);
@@ -424,7 +424,7 @@ int tmpfs_alloc_vp(struct mount *, struct tmpfs_node *, int,
struct vnode **);
void tmpfs_free_vp(struct vnode *);
int tmpfs_alloc_file(struct vnode *, struct vnode **, struct vattr *,
- struct componentname *, char *);
+ struct componentname *, const char *);
void tmpfs_check_mtime(struct vnode *);
void tmpfs_dir_attach(struct vnode *, struct tmpfs_dirent *);
void tmpfs_dir_detach(struct vnode *, struct tmpfs_dirent *);
diff --git a/sys/fs/tmpfs/tmpfs_subr.c b/sys/fs/tmpfs/tmpfs_subr.c
index 80711da58774..4f30f947e223 100644
--- a/sys/fs/tmpfs/tmpfs_subr.c
+++ b/sys/fs/tmpfs/tmpfs_subr.c
@@ -182,7 +182,7 @@ tmpfs_ref_node_locked(struct tmpfs_node *node)
int
tmpfs_alloc_node(struct mount *mp, struct tmpfs_mount *tmp, enum vtype type,
uid_t uid, gid_t gid, mode_t mode, struct tmpfs_node *parent,
- char *target, dev_t rdev, struct tmpfs_node **node)
+ const char *target, dev_t rdev, struct tmpfs_node **node)
{
struct tmpfs_node *nnode;
vm_object_t obj;
@@ -717,7 +717,7 @@ tmpfs_free_vp(struct vnode *vp)
*/
int
tmpfs_alloc_file(struct vnode *dvp, struct vnode **vpp, struct vattr *vap,
- struct componentname *cnp, char *target)
+ struct componentname *cnp, const char *target)
{
int error;
struct tmpfs_dirent *de;
diff --git a/sys/fs/tmpfs/tmpfs_vnops.c b/sys/fs/tmpfs/tmpfs_vnops.c
index dbacfd7858ce..41f5a19efe2a 100644
--- a/sys/fs/tmpfs/tmpfs_vnops.c
+++ b/sys/fs/tmpfs/tmpfs_vnops.c
@@ -1176,7 +1176,7 @@ tmpfs_symlink(struct vop_symlink_args *v)
struct vnode **vpp = v->a_vpp;
struct componentname *cnp = v->a_cnp;
struct vattr *vap = v->a_vap;
- char *target = v->a_target;
+ const char *target = v->a_target;
#ifdef notyet /* XXX FreeBSD BUG: kern_symlink is not setting VLNK */
MPASS(vap->va_type == VLNK);
diff --git a/sys/geom/concat/g_concat.c b/sys/geom/concat/g_concat.c
index 8e1a5dd60698..f9be59101592 100644
--- a/sys/geom/concat/g_concat.c
+++ b/sys/geom/concat/g_concat.c
@@ -206,6 +206,27 @@ fail:
}
static void
+g_concat_candelete(struct bio *bp)
+{
+ struct g_concat_softc *sc;
+ struct g_concat_disk *disk;
+ int i, *val;
+
+ val = (int *)bp->bio_data;
+ *val = 0;
+
+ sc = bp->bio_to->geom->softc;
+ for (i = 0; i < sc->sc_ndisks; i++) {
+ disk = &sc->sc_disks[i];
+ if (!disk->d_removed && disk->d_candelete) {
+ *val = 1;
+ break;
+ }
+ }
+ g_io_deliver(bp, 0);
+}
+
+static void
g_concat_kernel_dump(struct bio *bp)
{
struct g_concat_softc *sc;
@@ -327,6 +348,9 @@ g_concat_start(struct bio *bp)
if (strcmp("GEOM::kerneldump", bp->bio_attribute) == 0) {
g_concat_kernel_dump(bp);
return;
+ } else if (strcmp("GEOM::candelete", bp->bio_attribute) == 0) {
+ g_concat_candelete(bp);
+ return;
}
/* To which provider it should be delivered? */
/* FALLTHROUGH */
@@ -408,6 +432,7 @@ g_concat_check_and_run(struct g_concat_softc *sc)
struct g_provider *dp, *pp;
u_int no, sectorsize = 0;
off_t start;
+ int error;
g_topology_assert();
if (g_concat_nvalid(sc) != sc->sc_ndisks)
@@ -425,6 +450,16 @@ g_concat_check_and_run(struct g_concat_softc *sc)
if (sc->sc_type == G_CONCAT_TYPE_AUTOMATIC)
disk->d_end -= dp->sectorsize;
start = disk->d_end;
+ error = g_access(disk->d_consumer, 1, 0, 0);
+ if (error == 0) {
+ error = g_getattr("GEOM::candelete", disk->d_consumer,
+ &disk->d_candelete);
+ if (error != 0)
+ disk->d_candelete = 0;
+ (void)g_access(disk->d_consumer, -1, 0, 0);
+ } else
+ G_CONCAT_DEBUG(1, "Failed to access disk %s, error %d.",
+ dp->name, error);
if (no == 0)
sectorsize = dp->sectorsize;
else
diff --git a/sys/geom/concat/g_concat.h b/sys/geom/concat/g_concat.h
index 09cc554b1968..da7b6ff72202 100644
--- a/sys/geom/concat/g_concat.h
+++ b/sys/geom/concat/g_concat.h
@@ -74,6 +74,7 @@ struct g_concat_disk {
struct g_concat_softc *d_softc;
off_t d_start;
off_t d_end;
+ int d_candelete;
int d_removed;
};
diff --git a/sys/geom/geom.h b/sys/geom/geom.h
index 25282805e292..d7744b01daf4 100644
--- a/sys/geom/geom.h
+++ b/sys/geom/geom.h
@@ -215,8 +215,8 @@ struct g_provider {
TAILQ_ENTRY(g_provider) orphan;
off_t mediasize;
u_int sectorsize;
- u_int stripesize;
- u_int stripeoffset;
+ off_t stripesize;
+ off_t stripeoffset;
struct devstat *stat;
u_int nstart, nend;
u_int flags;
diff --git a/sys/geom/geom_disk.h b/sys/geom/geom_disk.h
index fc7cc9818b44..fe5831a061c7 100644
--- a/sys/geom/geom_disk.h
+++ b/sys/geom/geom_disk.h
@@ -109,8 +109,8 @@ struct disk {
u_int d_fwheads;
u_int d_maxsize;
off_t d_delmaxsize;
- u_int d_stripeoffset;
- u_int d_stripesize;
+ off_t d_stripeoffset;
+ off_t d_stripesize;
char d_ident[DISK_IDENT_SIZE];
char d_descr[DISK_IDENT_SIZE];
uint16_t d_hba_vendor;
@@ -151,7 +151,8 @@ void disk_add_alias(struct disk *disk, const char *);
#define DISK_VERSION_03 0x5856105c
#define DISK_VERSION_04 0x5856105d
#define DISK_VERSION_05 0x5856105e
-#define DISK_VERSION DISK_VERSION_05
+#define DISK_VERSION_06 0x5856105f
+#define DISK_VERSION DISK_VERSION_06
#endif /* _KERNEL */
#endif /* _GEOM_GEOM_DISK_H_ */
diff --git a/sys/geom/geom_dump.c b/sys/geom/geom_dump.c
index 7ecfadc6c010..0a4551c9fbfc 100644
--- a/sys/geom/geom_dump.c
+++ b/sys/geom/geom_dump.c
@@ -64,8 +64,8 @@ g_confdot_provider(struct sbuf *sb, struct g_provider *pp)
{
sbuf_printf(sb, "z%p [shape=hexagon,label=\"%s\\nr%dw%de%d\\nerr#%d\\n"
- "sector=%u\\nstripe=%u\"];\n", pp, pp->name, pp->acr, pp->acw,
- pp->ace, pp->error, pp->sectorsize, pp->stripesize);
+ "sector=%u\\nstripe=%ju\"];\n", pp, pp->name, pp->acr, pp->acw,
+ pp->ace, pp->error, pp->sectorsize, (uintmax_t)pp->stripesize);
}
static void
@@ -216,8 +216,8 @@ g_conf_provider(struct sbuf *sb, struct g_provider *pp)
sbuf_printf(sb, "\t <mediasize>%jd</mediasize>\n",
(intmax_t)pp->mediasize);
sbuf_printf(sb, "\t <sectorsize>%u</sectorsize>\n", pp->sectorsize);
- sbuf_printf(sb, "\t <stripesize>%u</stripesize>\n", pp->stripesize);
- sbuf_printf(sb, "\t <stripeoffset>%u</stripeoffset>\n", pp->stripeoffset);
+ sbuf_printf(sb, "\t <stripesize>%ju</stripesize>\n", (uintmax_t)pp->stripesize);
+ sbuf_printf(sb, "\t <stripeoffset>%ju</stripeoffset>\n", (uintmax_t)pp->stripeoffset);
if (pp->flags & G_PF_WITHER)
sbuf_printf(sb, "\t <wither/>\n");
else if (pp->geom->flags & G_GEOM_WITHER)
diff --git a/sys/geom/geom_redboot.c b/sys/geom/geom_redboot.c
index 029d105414f0..febee5bd8377 100644
--- a/sys/geom/geom_redboot.c
+++ b/sys/geom/geom_redboot.c
@@ -246,7 +246,7 @@ g_redboot_taste(struct g_class *mp, struct g_provider *pp, int insist)
int error, sectorsize, i;
struct fis_image_desc *fd, *head;
uint32_t offmask;
- u_int blksize; /* NB: flash block size stored as stripesize */
+ off_t blksize; /* NB: flash block size stored as stripesize */
u_char *buf;
off_t offset;
const char *value;
@@ -283,9 +283,9 @@ g_redboot_taste(struct g_class *mp, struct g_provider *pp, int insist)
else
offmask = 0xffffffff; /* XXX */
if (bootverbose)
- printf("%s: mediasize %ld secsize %d blksize %d offmask 0x%x\n",
+ printf("%s: mediasize %ld secsize %d blksize %ju offmask 0x%x\n",
__func__, (long) cp->provider->mediasize, sectorsize,
- blksize, offmask);
+ (uintmax_t)blksize, offmask);
if (sectorsize < sizeof(struct fis_image_desc) ||
(sectorsize % sizeof(struct fis_image_desc)))
return (NULL);
diff --git a/sys/geom/geom_subr.c b/sys/geom/geom_subr.c
index 91369cc93177..f703e3473ab3 100644
--- a/sys/geom/geom_subr.c
+++ b/sys/geom/geom_subr.c
@@ -1409,8 +1409,8 @@ db_show_geom_provider(int indent, struct g_provider *pp)
gprintln(" geom: %s (%p)", pp->geom->name, pp->geom);
gprintln(" mediasize: %jd", (intmax_t)pp->mediasize);
gprintln(" sectorsize: %u", pp->sectorsize);
- gprintln(" stripesize: %u", pp->stripesize);
- gprintln(" stripeoffset: %u", pp->stripeoffset);
+ gprintln(" stripesize: %ju", (uintmax_t)pp->stripesize);
+ gprintln(" stripeoffset: %ju", (uintmax_t)pp->stripeoffset);
gprintln(" access: r%dw%de%d", pp->acr, pp->acw,
pp->ace);
gprintln(" flags: %s (0x%04x)",
diff --git a/sys/geom/nop/g_nop.c b/sys/geom/nop/g_nop.c
index 23a06cda34fd..4e8ab8f771fd 100644
--- a/sys/geom/nop/g_nop.c
+++ b/sys/geom/nop/g_nop.c
@@ -187,7 +187,7 @@ g_nop_access(struct g_provider *pp, int dr, int dw, int de)
static int
g_nop_create(struct gctl_req *req, struct g_class *mp, struct g_provider *pp,
int ioerror, u_int rfailprob, u_int wfailprob, off_t offset, off_t size,
- u_int secsize, u_int stripesize, u_int stripeoffset, const char *physpath)
+ u_int secsize, off_t stripesize, off_t stripeoffset, const char *physpath)
{
struct g_nop_softc *sc;
struct g_geom *gp;
@@ -464,7 +464,7 @@ g_nop_ctl_create(struct gctl_req *req, struct g_class *mp)
*rfailprob == -1 ? 0 : (u_int)*rfailprob,
*wfailprob == -1 ? 0 : (u_int)*wfailprob,
(off_t)*offset, (off_t)*size, (u_int)*secsize,
- (u_int)*stripesize, (u_int)*stripeoffset,
+ (off_t)*stripesize, (off_t)*stripeoffset,
physpath) != 0) {
return;
}
diff --git a/sys/geom/part/g_part.c b/sys/geom/part/g_part.c
index 41523c6830e8..0148f4ebb740 100644
--- a/sys/geom/part/g_part.c
+++ b/sys/geom/part/g_part.c
@@ -367,9 +367,9 @@ g_part_check_integrity(struct g_part_table *table, struct g_consumer *cp)
offset = e1->gpe_offset;
if ((offset + pp->stripeoffset) % pp->stripesize) {
DPRINTF("partition %d on (%s, %s) is not "
- "aligned on %u bytes\n", e1->gpe_index,
+ "aligned on %ju bytes\n", e1->gpe_index,
pp->name, table->gpt_scheme->name,
- pp->stripesize);
+ (uintmax_t)pp->stripesize);
/* Don't treat this as a critical failure */
}
}
@@ -820,7 +820,7 @@ g_part_ctl_add(struct gctl_req *req, struct g_part_parms *gpp)
G_PART_FULLNAME(table, entry, sb, gp->name);
if (pp->stripesize > 0 && entry->gpe_pp->stripeoffset != 0)
sbuf_printf(sb, " added, but partition is not "
- "aligned on %u bytes\n", pp->stripesize);
+ "aligned on %ju bytes\n", (uintmax_t)pp->stripesize);
else
sbuf_cat(sb, " added\n");
sbuf_finish(sb);
diff --git a/sys/geom/raid/g_raid.c b/sys/geom/raid/g_raid.c
index 46748bba15cf..77b6bbf3ef17 100644
--- a/sys/geom/raid/g_raid.c
+++ b/sys/geom/raid/g_raid.c
@@ -2423,7 +2423,7 @@ g_raid_dumpconf(struct sbuf *sb, const char *indent, struct g_geom *gp,
sbuf_printf(sb, "r%d(%s):%d@%ju",
sd->sd_volume->v_global_id,
sd->sd_volume->v_name,
- sd->sd_pos, sd->sd_offset);
+ sd->sd_pos, (uintmax_t)sd->sd_offset);
if (TAILQ_NEXT(sd, sd_next))
sbuf_printf(sb, ", ");
}
diff --git a/sys/geom/stripe/g_stripe.c b/sys/geom/stripe/g_stripe.c
index 0ac90dd61529..8dc32ee2c9f1 100644
--- a/sys/geom/stripe/g_stripe.c
+++ b/sys/geom/stripe/g_stripe.c
@@ -249,7 +249,7 @@ static void
g_stripe_copy(struct g_stripe_softc *sc, char *src, char *dst, off_t offset,
off_t length, int mode)
{
- u_int stripesize;
+ off_t stripesize;
size_t len;
stripesize = sc->sc_stripesize;
@@ -265,8 +265,8 @@ g_stripe_copy(struct g_stripe_softc *sc, char *src, char *dst, off_t offset,
}
length -= len;
KASSERT(length >= 0,
- ("Length < 0 (stripesize=%zu, offset=%jd, length=%jd).",
- (size_t)stripesize, (intmax_t)offset, (intmax_t)length));
+ ("Length < 0 (stripesize=%ju, offset=%ju, length=%jd).",
+ (uintmax_t)stripesize, (uintmax_t)offset, (intmax_t)length));
if (length > stripesize)
len = stripesize;
else
@@ -307,10 +307,11 @@ static int
g_stripe_start_fast(struct bio *bp, u_int no, off_t offset, off_t length)
{
TAILQ_HEAD(, bio) queue = TAILQ_HEAD_INITIALIZER(queue);
- u_int nparts = 0, stripesize;
struct g_stripe_softc *sc;
char *addr, *data = NULL;
struct bio *cbp;
+ off_t stripesize;
+ u_int nparts = 0;
int error;
sc = bp->bio_to->geom->softc;
@@ -436,7 +437,7 @@ g_stripe_start_economic(struct bio *bp, u_int no, off_t offset, off_t length)
{
TAILQ_HEAD(, bio) queue = TAILQ_HEAD_INITIALIZER(queue);
struct g_stripe_softc *sc;
- uint32_t stripesize;
+ off_t stripesize;
struct bio *cbp;
char *addr;
int error;
@@ -571,9 +572,9 @@ g_stripe_flush(struct g_stripe_softc *sc, struct bio *bp)
static void
g_stripe_start(struct bio *bp)
{
- off_t offset, start, length, nstripe;
+ off_t offset, start, length, nstripe, stripesize;
struct g_stripe_softc *sc;
- u_int no, stripesize;
+ u_int no;
int error, fast = 0;
sc = bp->bio_to->geom->softc;
@@ -1044,7 +1045,7 @@ g_stripe_ctl_create(struct gctl_req *req, struct g_class *mp)
struct g_stripe_softc *sc;
struct g_geom *gp;
struct sbuf *sb;
- intmax_t *stripesize;
+ off_t *stripesize;
const char *name;
char param[16];
int *nargs;
@@ -1076,7 +1077,7 @@ g_stripe_ctl_create(struct gctl_req *req, struct g_class *mp)
gctl_error(req, "No '%s' argument.", "stripesize");
return;
}
- md.md_stripesize = *stripesize;
+ md.md_stripesize = (uint32_t)*stripesize;
bzero(md.md_provider, sizeof(md.md_provider));
/* This field is not important here. */
md.md_provsize = 0;
@@ -1243,8 +1244,8 @@ g_stripe_dumpconf(struct sbuf *sb, const char *indent, struct g_geom *gp,
(u_int)cp->index);
} else {
sbuf_printf(sb, "%s<ID>%u</ID>\n", indent, (u_int)sc->sc_id);
- sbuf_printf(sb, "%s<Stripesize>%u</Stripesize>\n", indent,
- (u_int)sc->sc_stripesize);
+ sbuf_printf(sb, "%s<Stripesize>%ju</Stripesize>\n", indent,
+ (uintmax_t)sc->sc_stripesize);
sbuf_printf(sb, "%s<Type>", indent);
switch (sc->sc_type) {
case G_STRIPE_TYPE_AUTOMATIC:
diff --git a/sys/geom/stripe/g_stripe.h b/sys/geom/stripe/g_stripe.h
index 21b6ea666a42..beef7fe24116 100644
--- a/sys/geom/stripe/g_stripe.h
+++ b/sys/geom/stripe/g_stripe.h
@@ -76,7 +76,7 @@ struct g_stripe_softc {
uint32_t sc_id; /* stripe unique ID */
struct g_consumer **sc_disks;
uint16_t sc_ndisks;
- uint32_t sc_stripesize;
+ off_t sc_stripesize;
uint32_t sc_stripebits;
struct mtx sc_lock;
};
diff --git a/sys/geom/uzip/g_uzip.c b/sys/geom/uzip/g_uzip.c
index ab38d18bd3f2..6c29e946d0a8 100644
--- a/sys/geom/uzip/g_uzip.c
+++ b/sys/geom/uzip/g_uzip.c
@@ -849,9 +849,9 @@ g_uzip_taste(struct g_class *mp, struct g_provider *pp, int flags)
g_error_provider(pp2, 0);
g_access(cp, -1, 0, 0);
- DPRINTF(GUZ_DBG_INFO, ("%s: taste ok (%d, %jd), (%d, %d), %x\n",
- gp->name, pp2->sectorsize, (intmax_t)pp2->mediasize,
- pp2->stripeoffset, pp2->stripesize, pp2->flags));
+ DPRINTF(GUZ_DBG_INFO, ("%s: taste ok (%d, %ju), (%ju, %ju), %x\n",
+ gp->name, pp2->sectorsize, (uintmax_t)pp2->mediasize,
+ (uintmax_t)pp2->stripeoffset, (uintmax_t)pp2->stripesize, pp2->flags));
DPRINTF(GUZ_DBG_INFO, ("%s: %u x %u blocks\n", gp->name, sc->nblocks,
sc->blksz));
return (gp);
diff --git a/sys/i386/conf/GENERIC b/sys/i386/conf/GENERIC
index dd0abcf9adaf..e3f0a62d7e00 100644
--- a/sys/i386/conf/GENERIC
+++ b/sys/i386/conf/GENERIC
@@ -93,6 +93,7 @@ options INVARIANT_SUPPORT # Extra sanity checks of internal structures, require
options WITNESS # Enable checks to detect deadlocks and cycles
options WITNESS_SKIPSPIN # Don't run witness on spinlocks for speed
options MALLOC_DEBUG_MAXZONES=8 # Separate malloc(9) zones
+options VERBOSE_SYSINIT=0 # Support debug.verbose_sysinit, off by default
# Kernel dump features.
options EKCD # Support for encrypted kernel dumps
diff --git a/sys/i386/conf/MINIMAL b/sys/i386/conf/MINIMAL
index 1f5647798d9c..60869f93e804 100644
--- a/sys/i386/conf/MINIMAL
+++ b/sys/i386/conf/MINIMAL
@@ -91,6 +91,7 @@ options INVARIANT_SUPPORT # Extra sanity checks of internal structures, require
options WITNESS # Enable checks to detect deadlocks and cycles
options WITNESS_SKIPSPIN # Don't run witness on spinlocks for speed
options MALLOC_DEBUG_MAXZONES=8 # Separate malloc(9) zones
+options VERBOSE_SYSINIT=0 # Support debug.verbose_sysinit, off by default
# Make an SMP-capable kernel by default
options SMP # Symmetric MultiProcessor Kernel
diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c
index 80f10f92a2ce..ff9b8022193a 100644
--- a/sys/i386/i386/pmap.c
+++ b/sys/i386/i386/pmap.c
@@ -864,8 +864,8 @@ pmap_pdpt_allocf(uma_zone_t zone, vm_size_t bytes, int domain, uint8_t *flags,
/* Inform UMA that this allocator uses kernel_map/object. */
*flags = UMA_SLAB_KERNEL;
- return ((void *)kmem_alloc_contig_domain(domain, bytes, wait, 0x0ULL,
- 0xffffffffULL, 1, 0, VM_MEMATTR_DEFAULT));
+ return ((void *)kmem_alloc_contig_domainset(DOMAINSET_FIXED(domain),
+ bytes, wait, 0x0ULL, 0xffffffffULL, 1, 0, VM_MEMATTR_DEFAULT));
}
#endif
diff --git a/sys/i386/i386/trap.c b/sys/i386/i386/trap.c
index 4b62484533c4..a81ec6ee89d1 100644
--- a/sys/i386/i386/trap.c
+++ b/sys/i386/i386/trap.c
@@ -977,7 +977,7 @@ trap_fatal(frame, eva)
curproc->p_pid, curthread->td_name);
#ifdef KDB
- if (debugger_on_panic) {
+ if (debugger_on_trap) {
kdb_why = KDB_WHY_TRAP;
frame->tf_err = eva; /* smuggle fault address to ddb */
handled = kdb_trap(type, 0, frame);
diff --git a/sys/kern/kern_cpuset.c b/sys/kern/kern_cpuset.c
index 8bd9d79f7cf6..87f9333bf43b 100644
--- a/sys/kern/kern_cpuset.c
+++ b/sys/kern/kern_cpuset.c
@@ -119,6 +119,7 @@ __FBSDID("$FreeBSD$");
*/
LIST_HEAD(domainlist, domainset);
+struct domainset __read_mostly domainset_fixed[MAXMEMDOM];
struct domainset __read_mostly domainset_prefer[MAXMEMDOM];
struct domainset __read_mostly domainset_roundrobin;
@@ -492,20 +493,29 @@ _domainset_create(struct domainset *domain, struct domainlist *freelist)
}
/*
- * Are any of the domains in the mask empty? If so, silently
- * remove them. If only empty domains are present, we must
- * return failure.
+ * Are any of the domains in the mask empty? If so, silently
+ * remove them and update the domainset accordingly. If only empty
+ * domains are present, we must return failure.
*/
static bool
domainset_empty_vm(struct domainset *domain)
{
- int i, max;
+ int i, j, max;
max = DOMAINSET_FLS(&domain->ds_mask) + 1;
- for (i = 0; i < max; i++) {
- if (DOMAINSET_ISSET(i, &domain->ds_mask) &&
- VM_DOMAIN_EMPTY(i))
+ for (i = 0; i < max; i++)
+ if (DOMAINSET_ISSET(i, &domain->ds_mask) && VM_DOMAIN_EMPTY(i))
DOMAINSET_CLR(i, &domain->ds_mask);
+ domain->ds_cnt = DOMAINSET_COUNT(&domain->ds_mask);
+ max = DOMAINSET_FLS(&domain->ds_mask) + 1;
+ for (i = j = 0; i < max; i++) {
+ if (DOMAINSET_ISSET(i, &domain->ds_mask))
+ domain->ds_order[j++] = i;
+ else if (domain->ds_policy == DOMAINSET_POLICY_PREFER &&
+ domain->ds_prefer == i && domain->ds_cnt > 1) {
+ domain->ds_policy = DOMAINSET_POLICY_ROUNDROBIN;
+ domain->ds_prefer = -1;
+ }
}
return (DOMAINSET_EMPTY(&domain->ds_mask));
@@ -1378,7 +1388,7 @@ cpuset_setithread(lwpid_t id, int cpu)
/*
* Initialize static domainsets after NUMA information is available. This is
- * called very early during boot.
+ * called before memory allocators are initialized.
*/
void
domainset_init(void)
@@ -1393,6 +1403,12 @@ domainset_init(void)
_domainset_create(dset, NULL);
for (i = 0; i < vm_ndomains; i++) {
+ dset = &domainset_fixed[i];
+ DOMAINSET_ZERO(&dset->ds_mask);
+ DOMAINSET_SET(i, &dset->ds_mask);
+ dset->ds_policy = DOMAINSET_POLICY_ROUNDROBIN;
+ _domainset_create(dset, NULL);
+
dset = &domainset_prefer[i];
DOMAINSET_COPY(&all_domains, &dset->ds_mask);
dset->ds_policy = DOMAINSET_POLICY_PREFER;
@@ -1407,7 +1423,7 @@ domainset_init(void)
void
domainset_zero(void)
{
- struct domainset *dset;
+ struct domainset *dset, *tmp;
mtx_init(&cpuset_lock, "cpuset", NULL, MTX_SPIN | MTX_RECURSE);
@@ -1422,8 +1438,9 @@ domainset_zero(void)
kernel_object->domain.dr_policy = _domainset_create(&domainset2, NULL);
/* Remove empty domains from the global policies. */
- LIST_FOREACH(dset, &cpuset_domains, ds_link)
- (void)domainset_empty_vm(dset);
+ LIST_FOREACH_SAFE(dset, &cpuset_domains, ds_link, tmp)
+ if (domainset_empty_vm(dset))
+ LIST_REMOVE(dset, ds_link);
}
/*
diff --git a/sys/kern/kern_exec.c b/sys/kern/kern_exec.c
index 23c398fc43b3..ee57ac82e694 100644
--- a/sys/kern/kern_exec.c
+++ b/sys/kern/kern_exec.c
@@ -1167,7 +1167,7 @@ exec_new_vmspace(struct image_params *imgp, struct sysentvec *sv)
* space into the temporary string buffer.
*/
int
-exec_copyin_args(struct image_args *args, char *fname,
+exec_copyin_args(struct image_args *args, const char *fname,
enum uio_seg segflg, char **argv, char **envv)
{
u_long argp, envp;
diff --git a/sys/kern/kern_malloc.c b/sys/kern/kern_malloc.c
index a8d42a85d949..d4ac906714b9 100644
--- a/sys/kern/kern_malloc.c
+++ b/sys/kern/kern_malloc.c
@@ -68,6 +68,7 @@ __FBSDID("$FreeBSD$");
#include <vm/vm.h>
#include <vm/pmap.h>
+#include <vm/vm_domainset.h>
#include <vm/vm_pageout.h>
#include <vm/vm_param.h>
#include <vm/vm_kern.h>
@@ -453,13 +454,13 @@ contigmalloc(unsigned long size, struct malloc_type *type, int flags,
}
void *
-contigmalloc_domain(unsigned long size, struct malloc_type *type,
- int domain, int flags, vm_paddr_t low, vm_paddr_t high,
+contigmalloc_domainset(unsigned long size, struct malloc_type *type,
+ struct domainset *ds, int flags, vm_paddr_t low, vm_paddr_t high,
unsigned long alignment, vm_paddr_t boundary)
{
void *ret;
- ret = (void *)kmem_alloc_contig_domain(domain, size, flags, low, high,
+ ret = (void *)kmem_alloc_contig_domainset(ds, size, flags, low, high,
alignment, boundary, VM_MEMATTR_DEFAULT);
if (ret != NULL)
malloc_type_allocated(type, round_page(size));
@@ -595,9 +596,8 @@ void *
return ((void *) va);
}
-void *
-malloc_domain(size_t size, struct malloc_type *mtp, int domain,
- int flags)
+static void *
+malloc_domain(size_t size, struct malloc_type *mtp, int domain, int flags)
{
int indx;
caddr_t va;
@@ -641,6 +641,24 @@ malloc_domain(size_t size, struct malloc_type *mtp, int domain,
}
void *
+malloc_domainset(size_t size, struct malloc_type *mtp, struct domainset *ds,
+ int flags)
+{
+ struct vm_domainset_iter di;
+ void *ret;
+ int domain;
+
+ vm_domainset_iter_policy_init(&di, ds, &domain, &flags);
+ do {
+ ret = malloc_domain(size, mtp, domain, flags);
+ if (ret != NULL)
+ break;
+ } while (vm_domainset_iter_policy(&di, &domain) == 0);
+
+ return (ret);
+}
+
+void *
mallocarray(size_t nmemb, size_t size, struct malloc_type *type, int flags)
{
diff --git a/sys/kern/kern_mbuf.c b/sys/kern/kern_mbuf.c
index 289cfddd1852..100e01a4a069 100644
--- a/sys/kern/kern_mbuf.c
+++ b/sys/kern/kern_mbuf.c
@@ -34,6 +34,7 @@ __FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/conf.h>
+#include <sys/domainset.h>
#include <sys/malloc.h>
#include <sys/systm.h>
#include <sys/mbuf.h>
@@ -590,8 +591,9 @@ mbuf_jumbo_alloc(uma_zone_t zone, vm_size_t bytes, int domain, uint8_t *flags,
/* Inform UMA that this allocator uses kernel_map/object. */
*flags = UMA_SLAB_KERNEL;
- return ((void *)kmem_alloc_contig_domain(domain, bytes, wait,
- (vm_paddr_t)0, ~(vm_paddr_t)0, 1, 0, VM_MEMATTR_DEFAULT));
+ return ((void *)kmem_alloc_contig_domainset(DOMAINSET_FIXED(domain),
+ bytes, wait, (vm_paddr_t)0, ~(vm_paddr_t)0, 1, 0,
+ VM_MEMATTR_DEFAULT));
}
/*
diff --git a/sys/kern/kern_pmc.c b/sys/kern/kern_pmc.c
index 3ec091716776..4b73f134b2d4 100644
--- a/sys/kern/kern_pmc.c
+++ b/sys/kern/kern_pmc.c
@@ -35,8 +35,9 @@ __FBSDID("$FreeBSD$");
#include "opt_hwpmc_hooks.h"
-#include <sys/types.h>
+#include <sys/param.h>
#include <sys/ctype.h>
+#include <sys/domainset.h>
#include <sys/param.h>
#include <sys/malloc.h>
#include <sys/kernel.h>
@@ -330,22 +331,6 @@ pmc_soft_ev_release(struct pmc_soft *ps)
mtx_unlock_spin(&pmc_softs_mtx);
}
-#ifdef NUMA
-#define NDOMAINS vm_ndomains
-
-static int
-getdomain(int cpu)
-{
- struct pcpu *pc;
-
- pc = pcpu_find(cpu);
- return (pc->pc_domain);
-}
-#else
-#define NDOMAINS 1
-#define malloc_domain(size, type, domain, flags) malloc((size), (type), (flags))
-#define getdomain(cpu) 0
-#endif
/*
* Initialise hwpmc.
*/
@@ -360,17 +345,18 @@ init_hwpmc(void *dummy __unused)
"range.\n", pmc_softevents);
pmc_softevents = PMC_EV_DYN_COUNT;
}
- pmc_softs = malloc(pmc_softevents * sizeof(struct pmc_soft *), M_PMCHOOKS, M_NOWAIT|M_ZERO);
- KASSERT(pmc_softs != NULL, ("cannot allocate soft events table"));
+ pmc_softs = malloc(pmc_softevents * sizeof(*pmc_softs), M_PMCHOOKS,
+ M_WAITOK | M_ZERO);
- for (domain = 0; domain < NDOMAINS; domain++) {
- pmc_dom_hdrs[domain] = malloc_domain(sizeof(struct pmc_domain_buffer_header), M_PMC, domain,
- M_WAITOK|M_ZERO);
+ for (domain = 0; domain < vm_ndomains; domain++) {
+ pmc_dom_hdrs[domain] = malloc_domainset(
+ sizeof(struct pmc_domain_buffer_header), M_PMC,
+ DOMAINSET_PREF(domain), M_WAITOK | M_ZERO);
mtx_init(&pmc_dom_hdrs[domain]->pdbh_mtx, "pmc_bufferlist_mtx", "pmc-leaf", MTX_SPIN);
TAILQ_INIT(&pmc_dom_hdrs[domain]->pdbh_head);
}
CPU_FOREACH(cpu) {
- domain = getdomain(cpu);
+ domain = pcpu_find(cpu)->pc_domain;
KASSERT(pmc_dom_hdrs[domain] != NULL, ("no mem allocated for domain: %d", domain));
pmc_dom_hdrs[domain]->pdbh_ncpus++;
}
diff --git a/sys/kern/kern_shutdown.c b/sys/kern/kern_shutdown.c
index c5a1780cb550..2ac99440e783 100644
--- a/sys/kern/kern_shutdown.c
+++ b/sys/kern/kern_shutdown.c
@@ -115,14 +115,19 @@ SYSCTL_INT(_kern, OID_AUTO, panic_reboot_wait_time, CTLFLAG_RWTUN,
#ifdef KDB
#ifdef KDB_UNATTENDED
-int debugger_on_panic = 0;
+static int debugger_on_panic = 0;
#else
-int debugger_on_panic = 1;
+static int debugger_on_panic = 1;
#endif
SYSCTL_INT(_debug, OID_AUTO, debugger_on_panic,
CTLFLAG_RWTUN | CTLFLAG_SECURE,
&debugger_on_panic, 0, "Run debugger on kernel panic");
+int debugger_on_trap = 0;
+SYSCTL_INT(_debug, OID_AUTO, debugger_on_trap,
+ CTLFLAG_RWTUN | CTLFLAG_SECURE,
+ &debugger_on_trap, 0, "Run debugger on kernel trap before panic");
+
#ifdef KDB_TRACE
static int trace_on_panic = 1;
static bool trace_all_panics = true;
diff --git a/sys/kern/kern_sysctl.c b/sys/kern/kern_sysctl.c
index 13d05189d52d..879e4d652a5e 100644
--- a/sys/kern/kern_sysctl.c
+++ b/sys/kern/kern_sysctl.c
@@ -1692,6 +1692,53 @@ retry:
}
/*
+ * Based on on sysctl_handle_int() convert microseconds to a sbintime.
+ */
+int
+sysctl_usec_to_sbintime(SYSCTL_HANDLER_ARGS)
+{
+ int error;
+ int64_t tt;
+ sbintime_t sb;
+
+ tt = *(int64_t *)arg1;
+ sb = ustosbt(tt);
+
+ error = sysctl_handle_64(oidp, &sb, 0, req);
+ if (error || !req->newptr)
+ return (error);
+
+ tt = sbttous(sb);
+ *(int64_t *)arg1 = tt;
+
+ return (0);
+}
+
+/*
+ * Based on on sysctl_handle_int() convert milliseconds to a sbintime.
+ */
+int
+sysctl_msec_to_sbintime(SYSCTL_HANDLER_ARGS)
+{
+ int error;
+ int64_t tt;
+ sbintime_t sb;
+
+ tt = *(int64_t *)arg1;
+ sb = mstosbt(tt);
+
+ error = sysctl_handle_64(oidp, &sb, 0, req);
+ if (error || !req->newptr)
+ return (error);
+
+ tt = sbttoms(sb);
+ *(int64_t *)arg1 = tt;
+
+ return (0);
+}
+
+
+/*
* Transfer functions to/from kernel space.
* XXX: rather untested at this point
*/
diff --git a/sys/kern/link_elf.c b/sys/kern/link_elf.c
index c2014d0400d2..6ceb34d66b74 100644
--- a/sys/kern/link_elf.c
+++ b/sys/kern/link_elf.c
@@ -637,8 +637,12 @@ parse_dpcpu(elf_file_t ef)
* all per-cpu storage from that.
*/
ef->pcpu_base = (Elf_Addr)(uintptr_t)dpcpu_alloc(size);
- if (ef->pcpu_base == 0)
+ if (ef->pcpu_base == 0) {
+ printf("%s: pcpu module space is out of space; "
+ "cannot allocate %d for %s\n",
+ __func__, size, ef->lf.pathname);
return (ENOSPC);
+ }
memcpy((void *)ef->pcpu_base, (void *)ef->pcpu_start, size);
dpcpu_copy((void *)ef->pcpu_base, size);
elf_set_add(&set_pcpu_list, ef->pcpu_start, ef->pcpu_stop,
@@ -670,8 +674,12 @@ parse_vnet(elf_file_t ef)
* all per-vnet storage from that.
*/
ef->vnet_base = (Elf_Addr)(uintptr_t)vnet_data_alloc(size);
- if (ef->vnet_base == 0)
+ if (ef->vnet_base == 0) {
+ printf("%s: vnet module space is out of space; "
+ "cannot allocate %d for %s\n",
+ __func__, size, ef->lf.pathname);
return (ENOSPC);
+ }
memcpy((void *)ef->vnet_base, (void *)ef->vnet_start, size);
vnet_data_copy((void *)ef->vnet_base, size);
elf_set_add(&set_vnet_list, ef->vnet_start, ef->vnet_stop,
diff --git a/sys/kern/link_elf_obj.c b/sys/kern/link_elf_obj.c
index 7df3dbc8decb..ac4cc8c085cb 100644
--- a/sys/kern/link_elf_obj.c
+++ b/sys/kern/link_elf_obj.c
@@ -368,6 +368,11 @@ link_elf_link_preload(linker_class_t cls, const char *filename,
dpcpu = dpcpu_alloc(shdr[i].sh_size);
if (dpcpu == NULL) {
+ printf("%s: pcpu module space is out "
+ "of space; cannot allocate %#jx "
+ "for %s\n", __func__,
+ (uintmax_t)shdr[i].sh_size,
+ filename);
error = ENOSPC;
goto out;
}
@@ -382,6 +387,11 @@ link_elf_link_preload(linker_class_t cls, const char *filename,
vnet_data = vnet_data_alloc(shdr[i].sh_size);
if (vnet_data == NULL) {
+ printf("%s: vnet module space is out "
+ "of space; cannot allocate %#jx "
+ "for %s\n", __func__,
+ (uintmax_t)shdr[i].sh_size,
+ filename);
error = ENOSPC;
goto out;
}
@@ -847,14 +857,30 @@ link_elf_load_file(linker_class_t cls, const char *filename,
else
ef->progtab[pb].name = "<<NOBITS>>";
if (ef->progtab[pb].name != NULL &&
- !strcmp(ef->progtab[pb].name, DPCPU_SETNAME))
+ !strcmp(ef->progtab[pb].name, DPCPU_SETNAME)) {
ef->progtab[pb].addr =
dpcpu_alloc(shdr[i].sh_size);
+ if (ef->progtab[pb].addr == NULL) {
+ printf("%s: pcpu module space is out "
+ "of space; cannot allocate %#jx "
+ "for %s\n", __func__,
+ (uintmax_t)shdr[i].sh_size,
+ filename);
+ }
+ }
#ifdef VIMAGE
else if (ef->progtab[pb].name != NULL &&
- !strcmp(ef->progtab[pb].name, VNET_SETNAME))
+ !strcmp(ef->progtab[pb].name, VNET_SETNAME)) {
ef->progtab[pb].addr =
vnet_data_alloc(shdr[i].sh_size);
+ if (ef->progtab[pb].addr == NULL) {
+ printf("%s: vnet module space is out "
+ "of space; cannot allocate %#jx "
+ "for %s\n", __func__,
+ (uintmax_t)shdr[i].sh_size,
+ filename);
+ }
+ }
#endif
else
ef->progtab[pb].addr =
diff --git a/sys/kern/subr_busdma_bufalloc.c b/sys/kern/subr_busdma_bufalloc.c
index 52d1388ba7fc..91445aa79950 100644
--- a/sys/kern/subr_busdma_bufalloc.c
+++ b/sys/kern/subr_busdma_bufalloc.c
@@ -37,6 +37,7 @@ __FBSDID("$FreeBSD$");
#include <sys/systm.h>
#include <sys/bus.h>
#include <sys/busdma_bufalloc.h>
+#include <sys/domainset.h>
#include <sys/malloc.h>
#include <vm/vm.h>
@@ -152,18 +153,15 @@ void *
busdma_bufalloc_alloc_uncacheable(uma_zone_t zone, vm_size_t size, int domain,
uint8_t *pflag, int wait)
{
-#ifdef VM_MEMATTR_UNCACHEABLE
+#ifdef VM_MEMATTR_UNCACHEABLE
/* Inform UMA that this allocator uses kernel_arena/object. */
*pflag = UMA_SLAB_KERNEL;
- return ((void *)kmem_alloc_attr_domain(domain, size, wait, 0,
- BUS_SPACE_MAXADDR, VM_MEMATTR_UNCACHEABLE));
-
+ return ((void *)kmem_alloc_attr_domainset(DOMAINSET_FIXED(domain), size,
+ wait, 0, BUS_SPACE_MAXADDR, VM_MEMATTR_UNCACHEABLE));
#else
-
panic("VM_MEMATTR_UNCACHEABLE unavailable");
-
#endif /* VM_MEMATTR_UNCACHEABLE */
}
diff --git a/sys/kern/subr_epoch.c b/sys/kern/subr_epoch.c
index 3dcc3c197efc..a63f669fea75 100644
--- a/sys/kern/subr_epoch.c
+++ b/sys/kern/subr_epoch.c
@@ -150,7 +150,8 @@ epoch_ctor(epoch_t epoch)
CPU_FOREACH(cpu) {
er = zpcpu_get_cpu(epoch->e_pcpu_record, cpu);
bzero(er, sizeof(*er));
- ck_epoch_register(&epoch->e_epoch, &er->er_record, NULL);
+ ck_epoch_register(&epoch->e_epoch, &er->er_read_record, NULL);
+ ck_epoch_register(&epoch->e_epoch, &er->er_write_record, NULL);
TAILQ_INIT((struct threadlist *)(uintptr_t)&er->er_tdlist);
er->er_cpuid = cpu;
}
@@ -235,7 +236,7 @@ epoch_block_handler_preempt(struct ck_epoch *global __unused, ck_epoch_record_t
int spincount, gen;
int locksheld __unused;
- record = __containerof(cr, struct epoch_record, er_record);
+ record = __containerof(cr, struct epoch_record, er_read_record);
td = curthread;
locksheld = td->td_locks;
spincount = 0;
@@ -461,7 +462,7 @@ epoch_call(epoch_t epoch, epoch_context_t ctx, void (*callback) (epoch_context_t
critical_enter();
*DPCPU_PTR(epoch_cb_count) += 1;
er = epoch_currecord(epoch);
- ck_epoch_call(&er->er_record, cb, (ck_epoch_cb_t *)callback);
+ ck_epoch_call(&er->er_write_record, cb, (ck_epoch_cb_t *)callback);
critical_exit();
return;
boottime:
@@ -485,7 +486,7 @@ epoch_call_task(void *arg __unused)
if (__predict_false((epoch = allepochs[i]) == NULL))
continue;
er = epoch_currecord(epoch);
- record = &er->er_record;
+ record = &er->er_write_record;
if ((npending = record->n_pending) == 0)
continue;
ck_epoch_poll_deferred(record, &cb_stack);
diff --git a/sys/kern/subr_gtaskqueue.c b/sys/kern/subr_gtaskqueue.c
index 96dc530373a3..fb68c1082147 100644
--- a/sys/kern/subr_gtaskqueue.c
+++ b/sys/kern/subr_gtaskqueue.c
@@ -51,6 +51,8 @@ __FBSDID("$FreeBSD$");
static MALLOC_DEFINE(M_GTASKQUEUE, "gtaskqueue", "Group Task Queues");
static void gtaskqueue_thread_enqueue(void *);
static void gtaskqueue_thread_loop(void *arg);
+static int task_is_running(struct gtaskqueue *queue, struct gtask *gtask);
+static void gtaskqueue_drain_locked(struct gtaskqueue *queue, struct gtask *gtask);
TASKQGROUP_DEFINE(softirq, mp_ncpus, 1);
TASKQGROUP_DEFINE(config, 1, 1);
@@ -183,6 +185,44 @@ gtaskqueue_free(struct gtaskqueue *queue)
free(queue, M_GTASKQUEUE);
}
+/*
+ * Wait for all to complete, then prevent it from being enqueued
+ */
+void
+grouptask_block(struct grouptask *grouptask)
+{
+ struct gtaskqueue *queue = grouptask->gt_taskqueue;
+ struct gtask *gtask = &grouptask->gt_task;
+
+#ifdef INVARIANTS
+ if (queue == NULL) {
+ gtask_dump(gtask);
+ panic("queue == NULL");
+ }
+#endif
+ TQ_LOCK(queue);
+ gtask->ta_flags |= TASK_NOENQUEUE;
+ gtaskqueue_drain_locked(queue, gtask);
+ TQ_UNLOCK(queue);
+}
+
+void
+grouptask_unblock(struct grouptask *grouptask)
+{
+ struct gtaskqueue *queue = grouptask->gt_taskqueue;
+ struct gtask *gtask = &grouptask->gt_task;
+
+#ifdef INVARIANTS
+ if (queue == NULL) {
+ gtask_dump(gtask);
+ panic("queue == NULL");
+ }
+#endif
+ TQ_LOCK(queue);
+ gtask->ta_flags &= ~TASK_NOENQUEUE;
+ TQ_UNLOCK(queue);
+}
+
int
grouptaskqueue_enqueue(struct gtaskqueue *queue, struct gtask *gtask)
{
@@ -197,6 +237,10 @@ grouptaskqueue_enqueue(struct gtaskqueue *queue, struct gtask *gtask)
TQ_UNLOCK(queue);
return (0);
}
+ if (gtask->ta_flags & TASK_NOENQUEUE) {
+ TQ_UNLOCK(queue);
+ return (EAGAIN);
+ }
STAILQ_INSERT_TAIL(&queue->tq_queue, gtask, ta_link);
gtask->ta_flags |= TASK_ENQUEUED;
TQ_UNLOCK(queue);
@@ -378,6 +422,13 @@ gtaskqueue_cancel(struct gtaskqueue *queue, struct gtask *gtask)
return (error);
}
+static void
+gtaskqueue_drain_locked(struct gtaskqueue *queue, struct gtask *gtask)
+{
+ while ((gtask->ta_flags & TASK_ENQUEUED) || task_is_running(queue, gtask))
+ TQ_SLEEP(queue, gtask, &queue->tq_mutex, PWAIT, "-", 0);
+}
+
void
gtaskqueue_drain(struct gtaskqueue *queue, struct gtask *gtask)
{
@@ -386,8 +437,7 @@ gtaskqueue_drain(struct gtaskqueue *queue, struct gtask *gtask)
WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL, __func__);
TQ_LOCK(queue);
- while ((gtask->ta_flags & TASK_ENQUEUED) || task_is_running(queue, gtask))
- TQ_SLEEP(queue, gtask, &queue->tq_mutex, PWAIT, "-", 0);
+ gtaskqueue_drain_locked(queue, gtask);
TQ_UNLOCK(queue);
}
@@ -803,6 +853,7 @@ taskqgroup_detach(struct taskqgroup *qgroup, struct grouptask *gtask)
{
int i;
+ grouptask_block(gtask);
mtx_lock(&qgroup->tqg_lock);
for (i = 0; i < qgroup->tqg_cnt; i++)
if (qgroup->tqg_queue[i].tgc_taskq == gtask->gt_taskqueue)
@@ -813,6 +864,7 @@ taskqgroup_detach(struct taskqgroup *qgroup, struct grouptask *gtask)
LIST_REMOVE(gtask, gt_list);
mtx_unlock(&qgroup->tqg_lock);
gtask->gt_taskqueue = NULL;
+ gtask->gt_task.ta_flags &= ~TASK_NOENQUEUE;
}
static void
diff --git a/sys/kern/subr_kdb.c b/sys/kern/subr_kdb.c
index 61616088871f..f6f105743245 100644
--- a/sys/kern/subr_kdb.c
+++ b/sys/kern/subr_kdb.c
@@ -652,9 +652,7 @@ kdb_trap(int type, int code, struct trapframe *tf)
struct kdb_dbbe *be;
register_t intr;
int handled;
-#ifdef SMP
int did_stop_cpus;
-#endif
be = kdb_dbbe;
if (be == NULL || be->dbbe_trap == NULL)
@@ -666,16 +664,17 @@ kdb_trap(int type, int code, struct trapframe *tf)
intr = intr_disable();
-#ifdef SMP
if (!SCHEDULER_STOPPED()) {
+#ifdef SMP
other_cpus = all_cpus;
CPU_NAND(&other_cpus, &stopped_cpus);
CPU_CLR(PCPU_GET(cpuid), &other_cpus);
stop_cpus_hard(other_cpus);
+#endif
+ curthread->td_stopsched = 1;
did_stop_cpus = 1;
} else
did_stop_cpus = 0;
-#endif
kdb_active++;
@@ -703,12 +702,13 @@ kdb_trap(int type, int code, struct trapframe *tf)
kdb_active--;
-#ifdef SMP
if (did_stop_cpus) {
+ curthread->td_stopsched = 0;
+#ifdef SMP
CPU_AND(&other_cpus, &stopped_cpus);
restart_cpus(other_cpus);
- }
#endif
+ }
intr_restore(intr);
diff --git a/sys/kern/sys_generic.c b/sys/kern/sys_generic.c
index 0e8e173654c5..300c80930ca5 100644
--- a/sys/kern/sys_generic.c
+++ b/sys/kern/sys_generic.c
@@ -1339,6 +1339,13 @@ kern_poll(struct thread *td, struct pollfd *ufds, u_int nfds,
} else
sbt = -1;
+ /*
+ * This is kinda bogus. We have fd limits, but that is not
+ * really related to the size of the pollfd array. Make sure
+ * we let the process use at least FD_SETSIZE entries and at
+ * least enough for the system-wide limits. We want to be reasonably
+ * safe, but not overly restrictive.
+ */
if (nfds > maxfilesperproc && nfds > FD_SETSIZE)
return (EINVAL);
if (nfds > nitems(stackfds))
diff --git a/sys/kern/sys_process.c b/sys/kern/sys_process.c
index 886df3113737..2922b9f916fa 100644
--- a/sys/kern/sys_process.c
+++ b/sys/kern/sys_process.c
@@ -387,8 +387,9 @@ ptrace_vm_entry(struct thread *td, struct proc *p, struct ptrace_vm_entry *pve)
error = EINVAL;
break;
}
- while (entry != &map->header &&
- (entry->eflags & MAP_ENTRY_IS_SUB_MAP) != 0) {
+ KASSERT((map->header.eflags & MAP_ENTRY_IS_SUB_MAP) == 0,
+ ("Submap in map header"));
+ while ((entry->eflags & MAP_ENTRY_IS_SUB_MAP) != 0) {
entry = entry->next;
index++;
}
diff --git a/sys/kern/syscalls.master b/sys/kern/syscalls.master
index 296ddc678a8f..dfe6677de120 100644
--- a/sys/kern/syscalls.master
+++ b/sys/kern/syscalls.master
@@ -84,314 +84,867 @@
; redistributions should be placed in the reserved range at the end
; of the current calls.
-0 AUE_NULL STD { int nosys(void); } syscall nosys_args int
-1 AUE_EXIT STD { void sys_exit(int rval); } exit \
- sys_exit_args void
-2 AUE_FORK STD { int fork(void); }
-3 AUE_READ STD { ssize_t read(int fd, \
- _Out_writes_bytes_(nbyte) void *buf, \
- size_t nbyte); }
-4 AUE_WRITE STD { ssize_t write(int fd, \
- _In_reads_bytes_(nbyte) const void *buf, \
- size_t nbyte); }
-5 AUE_OPEN_RWTC STD { int open( \
- _In_z_ char *path, \
- int flags, \
- int mode); }
+0 AUE_NULL STD {
+ int nosys(void);
+ } syscall nosys_args int
+1 AUE_EXIT STD {
+ void sys_exit(
+ int rval
+ );
+ } exit sys_exit_args void
+2 AUE_FORK STD {
+ int fork(void);
+ }
+3 AUE_READ STD {
+ ssize_t read(
+ int fd,
+ _Out_writes_bytes_(nbyte) void *buf,
+ size_t nbyte
+ );
+ }
+4 AUE_WRITE STD {
+ ssize_t write(
+ int fd,
+ _In_reads_bytes_(nbyte) const void *buf,
+ size_t nbyte
+ );
+ }
+5 AUE_OPEN_RWTC STD {
+ int open(
+ _In_z_ const char *path,
+ int flags,
+ mode_t mode
+ );
+ }
; XXX should be { int open(const char *path, int flags, ...); }
; but we're not ready for `const' or varargs.
; XXX man page says `mode_t mode'.
-6 AUE_CLOSE STD { int close(int fd); }
-7 AUE_WAIT4 STD { int wait4(int pid, \
- _Out_opt_ int *status, \
- int options, \
- _Out_opt_ struct rusage *rusage); }
-8 AUE_CREAT COMPAT { int creat(_In_z_ char *path, int mode); }
-9 AUE_LINK STD { int link(_In_z_ char *path, \
- _In_z_ char *link); }
-10 AUE_UNLINK STD { int unlink(_In_z_ char *path); }
+6 AUE_CLOSE STD {
+ int close(
+ int fd
+ );
+ }
+7 AUE_WAIT4 STD {
+ int wait4(
+ int pid,
+ _Out_opt_ int *status,
+ int options,
+ _Out_opt_ struct rusage *rusage
+ );
+ }
+8 AUE_CREAT COMPAT {
+ int creat(
+ _In_z_ const char *path,
+ int mode
+ );
+ }
+9 AUE_LINK STD {
+ int link(
+ _In_z_ const char *path,
+ _In_z_ const char *link
+ );
+ }
+10 AUE_UNLINK STD {
+ int unlink(
+ _In_z_ const char *path
+ );
+ }
11 AUE_NULL OBSOL execv
-12 AUE_CHDIR STD { int chdir(_In_z_ char *path); }
-13 AUE_FCHDIR STD { int fchdir(int fd); }
-14 AUE_MKNOD COMPAT11 { int mknod(_In_z_ char *path, int mode, \
- int dev); }
-15 AUE_CHMOD STD { int chmod(_In_z_ char *path, int mode); }
-16 AUE_CHOWN STD { int chown(_In_z_ char *path, \
- int uid, int gid); }
-17 AUE_NULL STD { caddr_t break(_In_ char *nsize); }
-18 AUE_GETFSSTAT COMPAT4 { int getfsstat( \
- _Out_writes_bytes_opt_(bufsize) \
- struct ostatfs *buf, \
- long bufsize, int mode); }
-19 AUE_LSEEK COMPAT { long lseek(int fd, long offset, \
- int whence); }
-20 AUE_GETPID STD { pid_t getpid(void); }
-21 AUE_MOUNT STD { int mount(_In_z_ char *type, \
- _In_z_ char *path, int flags, \
- _In_opt_ caddr_t data); }
+12 AUE_CHDIR STD {
+ int chdir(
+ _In_z_ const char *path
+ );
+ }
+13 AUE_FCHDIR STD {
+ int fchdir(
+ int fd
+ );
+ }
+14 AUE_MKNOD COMPAT11 {
+ int mknod(
+ _In_z_ const char *path,
+ int mode,
+ int dev
+ );
+ }
+15 AUE_CHMOD STD {
+ int chmod(
+ _In_z_ const char *path,
+ mode_t mode
+ );
+ }
+16 AUE_CHOWN STD {
+ int chown(
+ _In_z_ const char *path,
+ int uid,
+ int gid
+ );
+ }
+17 AUE_NULL STD {
+ caddr_t break(
+ _In_ char *nsize
+ );
+ }
+18 AUE_GETFSSTAT COMPAT4 {
+ int getfsstat(
+ _Out_writes_bytes_opt_(bufsize) struct ostatfs *buf,
+ long bufsize,
+ int mode
+ );
+ }
+19 AUE_LSEEK COMPAT {
+ long lseek(
+ int fd,
+ long offset,
+ int whence
+ );
+ }
+20 AUE_GETPID STD {
+ pid_t getpid(void);
+ }
+21 AUE_MOUNT STD {
+ int mount(
+ _In_z_ const char *type,
+ _In_z_ const char *path,
+ int flags,
+ _In_opt_ caddr_t data
+ );
+ }
; XXX `path' should have type `const char *' but we're not ready for that.
-22 AUE_UMOUNT STD { int unmount(_In_z_ char *path, int flags); }
-23 AUE_SETUID STD { int setuid(uid_t uid); }
-24 AUE_GETUID STD { uid_t getuid(void); }
-25 AUE_GETEUID STD { uid_t geteuid(void); }
-26 AUE_PTRACE STD { int ptrace(int req, pid_t pid, \
- _Inout_opt_ caddr_t addr, int data); }
-27 AUE_RECVMSG STD { int recvmsg(int s, \
- _Inout_ struct msghdr *msg, int flags); }
-28 AUE_SENDMSG STD { int sendmsg(int s, _In_ struct msghdr *msg, \
- int flags); }
-29 AUE_RECVFROM STD { int recvfrom(int s, \
- _Out_writes_bytes_(len) caddr_t buf, \
- size_t len, int flags, \
- _Out_writes_bytes_opt_(*fromlenaddr) \
- struct sockaddr *from, \
- _Inout_opt_ \
- __socklen_t *fromlenaddr); }
-30 AUE_ACCEPT STD { int accept(int s, \
- _Out_writes_bytes_opt_(*anamelen) \
- struct sockaddr *name, \
- _Inout_opt_ \
- __socklen_t *anamelen); }
-31 AUE_GETPEERNAME STD { int getpeername(int fdes, \
- _Out_writes_bytes_(*alen) \
- struct sockaddr *asa, \
- _Inout_opt_ \
- __socklen_t *alen); }
-32 AUE_GETSOCKNAME STD { int getsockname(int fdes, \
- _Out_writes_bytes_(*alen) \
- struct sockaddr *asa, \
- _Inout_ __socklen_t *alen); }
-33 AUE_ACCESS STD { int access(_In_z_ char *path, int amode); }
-34 AUE_CHFLAGS STD { int chflags(_In_z_ const char *path, \
- u_long flags); }
-35 AUE_FCHFLAGS STD { int fchflags(int fd, u_long flags); }
-36 AUE_SYNC STD { int sync(void); }
-37 AUE_KILL STD { int kill(int pid, int signum); }
-38 AUE_STAT COMPAT { int stat(_In_z_ char *path, \
- _Out_ struct ostat *ub); }
-39 AUE_GETPPID STD { pid_t getppid(void); }
-40 AUE_LSTAT COMPAT { int lstat(_In_z_ char *path, \
- _Out_ struct ostat *ub); }
-41 AUE_DUP STD { int dup(u_int fd); }
-42 AUE_PIPE COMPAT10 { int pipe(void); }
-43 AUE_GETEGID STD { gid_t getegid(void); }
-44 AUE_PROFILE STD { int profil( \
- _Out_writes_bytes_(size) caddr_t samples, \
- size_t size, size_t offset, u_int scale); }
-45 AUE_KTRACE STD { int ktrace(_In_z_ const char *fname, \
- int ops, int facs, int pid); }
-46 AUE_SIGACTION COMPAT { int sigaction(int signum, \
- _In_opt_ struct osigaction *nsa, \
- _Out_opt_ struct osigaction *osa); }
-47 AUE_GETGID STD { gid_t getgid(void); }
-48 AUE_SIGPROCMASK COMPAT { int sigprocmask(int how, osigset_t mask); }
+22 AUE_UMOUNT STD {
+ int unmount(
+ _In_z_ const char *path,
+ int flags
+ );
+ }
+23 AUE_SETUID STD {
+ int setuid(
+ uid_t uid
+ );
+ }
+24 AUE_GETUID STD {
+ uid_t getuid(void);
+ }
+25 AUE_GETEUID STD {
+ uid_t geteuid(void);
+ }
+26 AUE_PTRACE STD {
+ int ptrace(
+ int req,
+ pid_t pid,
+ _Inout_opt_ caddr_t addr,
+ int data
+ );
+ }
+27 AUE_RECVMSG STD {
+ int recvmsg(
+ int s,
+ _Inout_ struct msghdr *msg,
+ int flags
+ );
+ }
+28 AUE_SENDMSG STD {
+ int sendmsg(
+ int s,
+ _In_ struct msghdr *msg,
+ int flags
+ );
+ }
+29 AUE_RECVFROM STD {
+ int recvfrom(
+ int s,
+ _Out_writes_bytes_(len) caddr_t buf,
+ size_t len,
+ int flags,
+ _Out_writes_bytes_opt_(*fromlenaddr) struct sockaddr *from,
+ _Inout_opt_ __socklen_t *fromlenaddr
+ );
+ }
+30 AUE_ACCEPT STD {
+ int accept(
+ int s,
+ _Out_writes_bytes_opt_(*anamelen) struct sockaddr *name,
+ _Inout_opt_ __socklen_t *anamelen
+ );
+ }
+31 AUE_GETPEERNAME STD {
+ int getpeername(
+ int fdes,
+ _Out_writes_bytes_(*alen) struct sockaddr *asa,
+ _Inout_opt_ __socklen_t *alen
+ );
+ }
+32 AUE_GETSOCKNAME STD {
+ int getsockname(
+ int fdes,
+ _Out_writes_bytes_(*alen) struct sockaddr *asa,
+ _Inout_ __socklen_t *alen
+ );
+ }
+33 AUE_ACCESS STD {
+ int access(
+ _In_z_ const char *path,
+ int amode
+ );
+ }
+34 AUE_CHFLAGS STD {
+ int chflags(
+ _In_z_ const char *path,
+ u_long flags
+ );
+ }
+35 AUE_FCHFLAGS STD {
+ int fchflags(
+ int fd,
+ u_long flags
+ );
+ }
+36 AUE_SYNC STD {
+ int sync(void);
+ }
+37 AUE_KILL STD {
+ int kill(
+ int pid,
+ int signum
+ );
+ }
+38 AUE_STAT COMPAT {
+ int stat(
+ _In_z_ const char *path,
+ _Out_ struct ostat *ub
+ );
+ }
+39 AUE_GETPPID STD {
+ pid_t getppid(void);
+ }
+40 AUE_LSTAT COMPAT {
+ int lstat(
+ _In_z_ const char *path,
+ _Out_ struct ostat *ub
+ );
+ }
+41 AUE_DUP STD {
+ int dup(
+ u_int fd
+ );
+ }
+42 AUE_PIPE COMPAT10 {
+ int pipe(void);
+ }
+43 AUE_GETEGID STD {
+ gid_t getegid(void);
+ }
+44 AUE_PROFILE STD {
+ int profil(
+ _Out_writes_bytes_(size) caddr_t samples,
+ size_t size,
+ size_t offset,
+ u_int scale
+ );
+ }
+45 AUE_KTRACE STD {
+ int ktrace(
+ _In_z_ const char *fname,
+ int ops,
+ int facs,
+ int pid
+ );
+ }
+46 AUE_SIGACTION COMPAT {
+ int sigaction(
+ int signum,
+ _In_opt_ struct osigaction *nsa,
+ _Out_opt_ struct osigaction *osa
+ );
+ }
+47 AUE_GETGID STD {
+ gid_t getgid(void);
+ }
+48 AUE_SIGPROCMASK COMPAT {
+ int sigprocmask(
+ int how,
+ osigset_t mask
+ );
+ }
; XXX note nonstandard (bogus) calling convention - the libc stub passes
; us the mask, not a pointer to it, and we return the old mask as the
; (int) return value.
-49 AUE_GETLOGIN STD { int getlogin( \
- _Out_writes_z_(namelen) char *namebuf, \
- u_int namelen); }
-50 AUE_SETLOGIN STD { int setlogin(_In_z_ char *namebuf); }
-51 AUE_ACCT STD { int acct(_In_z_ char *path); }
-52 AUE_SIGPENDING COMPAT { int sigpending(void); }
-53 AUE_SIGALTSTACK STD { int sigaltstack(_In_opt_ stack_t *ss, \
- _Out_opt_ stack_t *oss); }
-54 AUE_IOCTL STD { int ioctl(int fd, u_long com, \
- _Inout_opt_ caddr_t data); }
-55 AUE_REBOOT STD { int reboot(int opt); }
-56 AUE_REVOKE STD { int revoke(_In_z_ char *path); }
-57 AUE_SYMLINK STD { int symlink(_In_z_ char *path, \
- _In_z_ char *link); }
-58 AUE_READLINK STD { ssize_t readlink(_In_z_ char *path, \
- _Out_writes_z_(count) char *buf, \
- size_t count); }
-59 AUE_EXECVE STD { int execve( \
- _In_z_ char *fname, \
- _In_z_ char **argv, \
- _In_z_ char **envv); }
-60 AUE_UMASK STD { int umask(int newmask); }
-61 AUE_CHROOT STD { int chroot(_In_z_ char *path); }
-62 AUE_FSTAT COMPAT { int fstat(int fd, _Out_ struct ostat *sb); }
-63 AUE_NULL COMPAT { int getkerninfo(int op, \
- _Out_writes_bytes_opt(*size) char *where, \
- _Inout_opt_ size_t *size, \
- int arg); } getkerninfo getkerninfo_args int
-64 AUE_NULL COMPAT { int getpagesize(void); } getpagesize \
- getpagesize_args int
-65 AUE_MSYNC STD { int msync(_In_ void *addr, size_t len, \
- int flags); }
-66 AUE_VFORK STD { int vfork(void); }
+49 AUE_GETLOGIN STD {
+ int getlogin(
+ _Out_writes_z_(namelen) char *namebuf,
+ u_int namelen
+ );
+ }
+50 AUE_SETLOGIN STD {
+ int setlogin(
+ _In_z_ const char *namebuf
+ );
+ }
+51 AUE_ACCT STD {
+ int acct(
+ _In_z_ const char *path
+ );
+ }
+52 AUE_SIGPENDING COMPAT {
+ int sigpending(void);
+ }
+53 AUE_SIGALTSTACK STD {
+ int sigaltstack(
+ _In_opt_ stack_t *ss,
+ _Out_opt_ stack_t *oss
+ );
+ }
+54 AUE_IOCTL STD {
+ int ioctl(
+ int fd,
+ u_long com,
+ _Inout_opt_ caddr_t data
+ );
+ }
+55 AUE_REBOOT STD {
+ int reboot(
+ int opt
+ );
+ }
+56 AUE_REVOKE STD {
+ int revoke(
+ _In_z_ const char *path
+ );
+ }
+57 AUE_SYMLINK STD {
+ int symlink(
+ _In_z_ const char *path,
+ _In_z_ const char *link
+ );
+ }
+58 AUE_READLINK STD {
+ ssize_t readlink(
+ _In_z_ const char *path,
+ _Out_writes_z_(count) char *buf,
+ size_t count
+ );
+ }
+59 AUE_EXECVE STD {
+ int execve(
+ _In_z_ const char *fname,
+ _In_z_ char **argv,
+ _In_z_ char **envv
+ );
+ }
+60 AUE_UMASK STD {
+ int umask(
+ mode_t newmask
+ );
+ }
+61 AUE_CHROOT STD {
+ int chroot(
+ _In_z_ const char *path
+ );
+ }
+62 AUE_FSTAT COMPAT {
+ int fstat(
+ int fd,
+ _Out_ struct ostat *sb
+ );
+ }
+63 AUE_NULL COMPAT {
+ int getkerninfo(
+ int op,
+ _Out_writes_bytes_opt(
+ *size) char *where,
+ _Inout_opt_ size_t *size,
+ int arg
+ );
+ } getkerninfo getkerninfo_args int
+64 AUE_NULL COMPAT {
+ int getpagesize(void);
+ } getpagesize getpagesize_args int
+65 AUE_MSYNC STD {
+ int msync(
+ _In_ void *addr,
+ size_t len,
+ int flags
+ );
+ }
+66 AUE_VFORK STD {
+ int vfork(void);
+ }
67 AUE_NULL OBSOL vread
68 AUE_NULL OBSOL vwrite
-69 AUE_SBRK STD { int sbrk(int incr); }
-70 AUE_SSTK STD { int sstk(int incr); }
-71 AUE_MMAP COMPAT { int mmap(_In_ void *addr, int len, int prot, \
- int flags, int fd, long pos); }
-72 AUE_O_VADVISE COMPAT11 { int vadvise(int anom); }
-73 AUE_MUNMAP STD { int munmap(_In_ void *addr, size_t len); }
-74 AUE_MPROTECT STD { int mprotect(_In_ void *addr, \
- size_t len, int prot); }
-75 AUE_MADVISE STD { int madvise(_In_ void *addr, \
- size_t len, int behav); }
+69 AUE_SBRK STD {
+ int sbrk(
+ int incr
+ );
+ }
+70 AUE_SSTK STD {
+ int sstk(
+ int incr
+ );
+ }
+71 AUE_MMAP COMPAT {
+ int mmap(
+ _In_ void *addr,
+ int len,
+ int prot,
+ int flags,
+ int fd,
+ long pos
+ );
+ }
+72 AUE_O_VADVISE COMPAT11 {
+ int vadvise(
+ int anom
+ );
+ }
+73 AUE_MUNMAP STD {
+ int munmap(
+ _In_ void *addr,
+ size_t len
+ );
+ }
+74 AUE_MPROTECT STD {
+ int mprotect(
+ _In_ void *addr,
+ size_t len,
+ int prot
+ );
+ }
+75 AUE_MADVISE STD {
+ int madvise(
+ _In_ void *addr,
+ size_t len,
+ int behav
+ );
+ }
76 AUE_NULL OBSOL vhangup
77 AUE_NULL OBSOL vlimit
-78 AUE_MINCORE STD { int mincore( \
- _In_ const void *addr, \
- size_t len, \
- _Out_writes_bytes_(len/PAGE_SIZE) \
- char *vec); }
-79 AUE_GETGROUPS STD { int getgroups(u_int gidsetsize, \
- _Out_writes_opt_(gidsetsize) \
- gid_t *gidset); }
-80 AUE_SETGROUPS STD { int setgroups(u_int gidsetsize, \
- _In_reads_(gidsetsize) gid_t *gidset); }
-81 AUE_GETPGRP STD { int getpgrp(void); }
-82 AUE_SETPGRP STD { int setpgid(int pid, int pgid); }
-83 AUE_SETITIMER STD { int setitimer(u_int which, \
- _In_ struct itimerval *itv, \
- _Out_opt_ struct itimerval *oitv); }
-84 AUE_WAIT4 COMPAT { int wait(void); }
-85 AUE_SWAPON STD { int swapon(_In_z_ char *name); }
-86 AUE_GETITIMER STD { int getitimer(u_int which, \
- _Out_ struct itimerval *itv); }
-87 AUE_SYSCTL COMPAT { int gethostname( \
- _Out_writes_z_(len) char *hostname, \
- u_int len); } gethostname \
- gethostname_args int
-88 AUE_SYSCTL COMPAT { int sethostname( \
- _In_reads_z_(len) char *hostname, \
- u_int len); } sethostname \
- sethostname_args int
-89 AUE_GETDTABLESIZE STD { int getdtablesize(void); }
-90 AUE_DUP2 STD { int dup2(u_int from, u_int to); }
+78 AUE_MINCORE STD {
+ int mincore(
+ _In_ const void *addr,
+ size_t len,
+ _Out_writes_bytes_(len/PAGE_SIZE) char *vec
+ );
+ }
+79 AUE_GETGROUPS STD {
+ int getgroups(
+ u_int gidsetsize,
+ _Out_writes_opt_(gidsetsize) gid_t *gidset
+ );
+ }
+80 AUE_SETGROUPS STD {
+ int setgroups(
+ u_int gidsetsize,
+ _In_reads_(gidsetsize) gid_t *gidset
+ );
+ }
+81 AUE_GETPGRP STD {
+ int getpgrp(void);
+ }
+82 AUE_SETPGRP STD {
+ int setpgid(
+ int pid,
+ int pgid
+ );
+ }
+83 AUE_SETITIMER STD {
+ int setitimer(
+ u_int which,
+ _In_ struct itimerval *itv,
+ _Out_opt_ struct itimerval *oitv
+ );
+ }
+84 AUE_WAIT4 COMPAT {
+ int wait(void);
+ }
+85 AUE_SWAPON STD {
+ int swapon(
+ _In_z_ const char *name
+ );
+ }
+86 AUE_GETITIMER STD {
+ int getitimer(
+ u_int which,
+ _Out_ struct itimerval *itv
+ );
+ }
+87 AUE_SYSCTL COMPAT {
+ int gethostname(
+ _Out_writes_z_(len) char *hostname,
+ u_int len
+ );
+ } gethostname gethostname_args int
+88 AUE_SYSCTL COMPAT {
+ int sethostname(
+ _In_reads_z_(len) char *hostname,
+ u_int len
+ );
+ } sethostname sethostname_args int
+89 AUE_GETDTABLESIZE STD {
+ int getdtablesize(void);
+ }
+90 AUE_DUP2 STD {
+ int dup2(
+ u_int from,
+ u_int to
+ );
+ }
91 AUE_NULL UNIMPL getdopt
-92 AUE_FCNTL STD { int fcntl(int fd, int cmd, long arg); }
-; XXX should be { int fcntl(int fd, int cmd, ...); }
+92 AUE_FCNTL STD {
+ int fcntl(
+ int fd,
+ int cmd,
+ long arg
+ );
+ }
+; XXX should be { int fcntl(int fd, int cmd, ...); }
; but we're not ready for varargs.
-93 AUE_SELECT STD { int select(int nd, \
- _Inout_opt_ fd_set *in, \
- _Inout_opt_ fd_set *ou, \
- _Inout_opt_ fd_set *ex, \
- _In_opt_ struct timeval *tv); }
+93 AUE_SELECT STD {
+ int select(
+ int nd,
+ _Inout_opt_ fd_set *in,
+ _Inout_opt_ fd_set *ou,
+ _Inout_opt_ fd_set *ex,
+ _In_opt_ struct timeval *tv
+ );
+ }
94 AUE_NULL UNIMPL setdopt
-95 AUE_FSYNC STD { int fsync(int fd); }
-96 AUE_SETPRIORITY STD { int setpriority(int which, int who, \
- int prio); }
-97 AUE_SOCKET STD { int socket(int domain, int type, \
- int protocol); }
-98 AUE_CONNECT STD { int connect(int s, \
- _In_reads_bytes_(namelen) caddr_t name, \
- int namelen); }
-99 AUE_ACCEPT COMPAT|NOARGS { int accept(int s, \
- _Out_writes_bytes_opt_(*anamelen) \
- caddr_t name, int *anamelen); } \
- accept accept_args int
-100 AUE_GETPRIORITY STD { int getpriority(int which, int who); }
-101 AUE_SEND COMPAT { int send(int s, \
- _In_reads_bytes_(len) caddr_t buf, \
- int len, \
- int flags); }
-102 AUE_RECV COMPAT { int recv(int s, \
- _Out_writes_bytes_(len) caddr_t buf, \
- int len, int flags); }
-103 AUE_SIGRETURN COMPAT { int sigreturn( \
- _In_ struct osigcontext *sigcntxp); }
-104 AUE_BIND STD { int bind(int s, \
- _In_reads_bytes_(namelen) caddr_t name, \
- int namelen); }
-105 AUE_SETSOCKOPT STD { int setsockopt(int s, int level, int name, \
- _In_reads_bytes_opt_(valsize) caddr_t val, \
- int valsize); }
-106 AUE_LISTEN STD { int listen(int s, int backlog); }
+95 AUE_FSYNC STD {
+ int fsync(
+ int fd
+ );
+ }
+96 AUE_SETPRIORITY STD {
+ int setpriority(
+ int which,
+ int who,
+ int prio
+ );
+ }
+97 AUE_SOCKET STD {
+ int socket(
+ int domain,
+ int type,
+ int protocol
+ );
+ }
+98 AUE_CONNECT STD {
+ int connect(
+ int s,
+ _In_reads_bytes_(namelen) caddr_t name,
+ int namelen
+ );
+ }
+99 AUE_ACCEPT COMPAT|NOARGS {
+ int accept(
+ int s,
+ _Out_writes_bytes_opt_(*anamelen) caddr_t name,
+ int *anamelen
+ );
+ } accept accept_args int
+100 AUE_GETPRIORITY STD {
+ int getpriority(
+ int which,
+ int who
+ );
+ }
+101 AUE_SEND COMPAT {
+ int send(
+ int s,
+ _In_reads_bytes_(len) caddr_t buf,
+ int len,
+ int flags
+ );
+ }
+102 AUE_RECV COMPAT {
+ int recv(
+ int s,
+ _Out_writes_bytes_(len) caddr_t buf,
+ int len,
+ int flags
+ );
+ }
+103 AUE_SIGRETURN COMPAT {
+ int sigreturn(
+ _In_ struct osigcontext *sigcntxp
+ );
+ }
+104 AUE_BIND STD {
+ int bind(
+ int s,
+ _In_reads_bytes_(namelen) caddr_t name,
+ int namelen
+ );
+ }
+105 AUE_SETSOCKOPT STD {
+ int setsockopt(
+ int s,
+ int level,
+ int name,
+ _In_reads_bytes_opt_(valsize) caddr_t val,
+ int valsize
+ );
+ }
+106 AUE_LISTEN STD {
+ int listen(
+ int s,
+ int backlog
+ );
+ }
107 AUE_NULL OBSOL vtimes
-108 AUE_NULL COMPAT { int sigvec(int signum, \
- _In_opt_ struct sigvec *nsv, \
- _Out_opt_ struct sigvec *osv); }
-109 AUE_NULL COMPAT { int sigblock(int mask); }
-110 AUE_NULL COMPAT { int sigsetmask(int mask); }
-111 AUE_NULL COMPAT { int sigsuspend(osigset_t mask); }
+108 AUE_NULL COMPAT {
+ int sigvec(
+ int signum,
+ _In_opt_ struct sigvec *nsv,
+ _Out_opt_ struct sigvec *osv
+ );
+ }
+109 AUE_NULL COMPAT {
+ int sigblock(
+ int mask
+ );
+ }
+110 AUE_NULL COMPAT {
+ int sigsetmask(
+ int mask
+ );
+ }
+111 AUE_NULL COMPAT {
+ int sigsuspend(
+ osigset_t mask
+ );
+ }
; XXX note nonstandard (bogus) calling convention - the libc stub passes
; us the mask, not a pointer to it.
-112 AUE_NULL COMPAT { int sigstack(_In_opt_ struct sigstack *nss, \
- _Out_opt_ struct sigstack *oss); }
-113 AUE_RECVMSG COMPAT { int recvmsg(int s, \
- _Inout_ struct omsghdr *msg, \
- int flags); }
-114 AUE_SENDMSG COMPAT { int sendmsg(int s, _In_ caddr_t msg, \
- int flags); }
+112 AUE_NULL COMPAT {
+ int sigstack(
+ _In_opt_ struct sigstack *nss,
+ _Out_opt_ struct sigstack *oss
+ );
+ }
+113 AUE_RECVMSG COMPAT {
+ int recvmsg(
+ int s,
+ _Inout_ struct omsghdr *msg,
+ int flags
+ );
+ }
+114 AUE_SENDMSG COMPAT {
+ int sendmsg(
+ int s,
+ _In_ caddr_t msg,
+ int flags
+ );
+ }
115 AUE_NULL OBSOL vtrace
-116 AUE_GETTIMEOFDAY STD { int gettimeofday( \
- _Out_ struct timeval *tp, \
- _Out_opt_ struct timezone *tzp); }
-117 AUE_GETRUSAGE STD { int getrusage(int who, \
- _Out_ struct rusage *rusage); }
-118 AUE_GETSOCKOPT STD { int getsockopt(int s, int level, int name, \
- _Out_writes_bytes_opt_(*avalsize) \
- caddr_t val, _Inout_ int *avalsize); }
+116 AUE_GETTIMEOFDAY STD {
+ int gettimeofday(
+ _Out_ struct timeval *tp,
+ _Out_opt_ struct timezone *tzp
+ );
+ }
+117 AUE_GETRUSAGE STD {
+ int getrusage(
+ int who,
+ _Out_ struct rusage *rusage
+ );
+ }
+118 AUE_GETSOCKOPT STD {
+ int getsockopt(
+ int s,
+ int level,
+ int name,
+ _Out_writes_bytes_opt_(*avalsize) caddr_t val,
+ _Inout_ int *avalsize
+ );
+ }
119 AUE_NULL UNIMPL resuba (BSD/OS 2.x)
-120 AUE_READV STD { int readv(int fd, \
- _Inout_updates_(iovcnt) struct iovec *iovp, \
- u_int iovcnt); }
-121 AUE_WRITEV STD { int writev(int fd, \
- _In_reads_opt_(iovcnt) struct iovec *iovp, \
- u_int iovcnt); }
-122 AUE_SETTIMEOFDAY STD { int settimeofday( \
- _In_ struct timeval *tv, \
- _In_opt_ struct timezone *tzp); }
-123 AUE_FCHOWN STD { int fchown(int fd, int uid, int gid); }
-124 AUE_FCHMOD STD { int fchmod(int fd, int mode); }
-125 AUE_RECVFROM COMPAT|NOARGS { int recvfrom(int s, \
- _Out_writes_(len) caddr_t buf, \
- size_t len, int flags, \
- _Out_writes_bytes_(*fromlenaddr) \
- caddr_t from, \
- _Inout_ int *fromlenaddr); } \
- recvfrom recvfrom_args int
-126 AUE_SETREUID STD { int setreuid(int ruid, int euid); }
-127 AUE_SETREGID STD { int setregid(int rgid, int egid); }
-128 AUE_RENAME STD { int rename(_In_z_ char *from, \
- _In_z_ char *to); }
-129 AUE_TRUNCATE COMPAT { int truncate(_In_z_ char *path, \
- long length); }
-130 AUE_FTRUNCATE COMPAT { int ftruncate(int fd, long length); }
-131 AUE_FLOCK STD { int flock(int fd, int how); }
-132 AUE_MKFIFO STD { int mkfifo(_In_z_ char *path, int mode); }
-133 AUE_SENDTO STD { int sendto(int s, \
- _In_reads_bytes_(len) caddr_t buf, \
- size_t len, int flags, \
- _In_reads_bytes_opt_(tolen) caddr_t to, \
- int tolen); }
-134 AUE_SHUTDOWN STD { int shutdown(int s, int how); }
-135 AUE_SOCKETPAIR STD { int socketpair(int domain, int type, \
- int protocol, _Out_writes_(2) int *rsv); }
-136 AUE_MKDIR STD { int mkdir(_In_z_ char *path, int mode); }
-137 AUE_RMDIR STD { int rmdir(_In_z_ char *path); }
-138 AUE_UTIMES STD { int utimes(_In_z_ char *path, \
- _In_ struct timeval *tptr); }
+120 AUE_READV STD {
+ int readv(
+ int fd,
+ _Inout_updates_(iovcnt) struct iovec *iovp,
+ u_int iovcnt
+ );
+ }
+121 AUE_WRITEV STD {
+ int writev(
+ int fd,
+ _In_reads_opt_(iovcnt) struct iovec *iovp,
+ u_int iovcnt
+ );
+ }
+122 AUE_SETTIMEOFDAY STD {
+ int settimeofday(
+ _In_ struct timeval *tv,
+ _In_opt_ struct timezone *tzp
+ );
+ }
+123 AUE_FCHOWN STD {
+ int fchown(
+ int fd,
+ int uid,
+ int gid
+ );
+ }
+124 AUE_FCHMOD STD {
+ int fchmod(
+ int fd,
+ mode_t mode
+ );
+ }
+125 AUE_RECVFROM COMPAT|NOARGS {
+ int recvfrom(
+ int s,
+ _Out_writes_(len) caddr_t buf,
+ size_t len,
+ int flags,
+ _Out_writes_bytes_(*fromlenaddr) caddr_t from,
+ _Inout_ int *fromlenaddr
+ );
+ } recvfrom recvfrom_args int
+126 AUE_SETREUID STD {
+ int setreuid(
+ int ruid,
+ int euid
+ );
+ }
+127 AUE_SETREGID STD {
+ int setregid(
+ int rgid,
+ int egid
+ );
+ }
+128 AUE_RENAME STD {
+ int rename(
+ _In_z_ const char *from,
+ _In_z_ const char *to
+ );
+ }
+129 AUE_TRUNCATE COMPAT {
+ int truncate(
+ _In_z_ const char *path,
+ long length
+ );
+ }
+130 AUE_FTRUNCATE COMPAT {
+ int ftruncate(
+ int fd,
+ long length
+ );
+ }
+131 AUE_FLOCK STD {
+ int flock(
+ int fd,
+ int how
+ );
+ }
+132 AUE_MKFIFO STD {
+ int mkfifo(
+ _In_z_ const char *path,
+ mode_t mode
+ );
+ }
+133 AUE_SENDTO STD {
+ int sendto(
+ int s,
+ _In_reads_bytes_(len) caddr_t buf,
+ size_t len,
+ int flags,
+ _In_reads_bytes_opt_(tolen) caddr_t to,
+ int tolen
+ );
+ }
+134 AUE_SHUTDOWN STD {
+ int shutdown(
+ int s,
+ int how
+ );
+ }
+135 AUE_SOCKETPAIR STD {
+ int socketpair(
+ int domain,
+ int type,
+ int protocol,
+ _Out_writes_(2) int *rsv
+ );
+ }
+136 AUE_MKDIR STD {
+ int mkdir(
+ _In_z_ const char *path,
+ mode_t mode
+ );
+ }
+137 AUE_RMDIR STD {
+ int rmdir(
+ _In_z_ const char *path
+ );
+ }
+138 AUE_UTIMES STD {
+ int utimes(
+ _In_z_ const char *path,
+ _In_ struct timeval *tptr
+ );
+ }
139 AUE_NULL OBSOL 4.2 sigreturn
-140 AUE_ADJTIME STD { int adjtime(_In_ struct timeval *delta, \
- _Out_opt_ struct timeval *olddelta); }
-141 AUE_GETPEERNAME COMPAT { int getpeername(int fdes, \
- _Out_writes_bytes_(*alen) \
- caddr_t asa, \
- _Inout_opt_ int *alen); }
-142 AUE_SYSCTL COMPAT { long gethostid(void); }
-143 AUE_SYSCTL COMPAT { int sethostid(long hostid); }
-144 AUE_GETRLIMIT COMPAT { int getrlimit(u_int which, _Out_ struct \
- orlimit *rlp); }
-145 AUE_SETRLIMIT COMPAT { int setrlimit(u_int which, \
- _Out_ struct orlimit *rlp); }
-146 AUE_KILLPG COMPAT { int killpg(int pgid, int signum); }
-147 AUE_SETSID STD { int setsid(void); }
-148 AUE_QUOTACTL STD { int quotactl( \
- _In_z_ char *path, int cmd, int uid, \
- _In_ caddr_t arg); }
-149 AUE_O_QUOTA COMPAT { int quota(void); }
-150 AUE_GETSOCKNAME COMPAT|NOARGS { int getsockname(int fdec, \
- _Out_writes_bytes_(*alen) \
- caddr_t asa, \
- _Inout_ int *alen); } getsockname \
- getsockname_args int
+140 AUE_ADJTIME STD {
+ int adjtime(
+ _In_ struct timeval *delta,
+ _Out_opt_ struct timeval *olddelta
+ );
+ }
+141 AUE_GETPEERNAME COMPAT {
+ int getpeername(
+ int fdes,
+ _Out_writes_bytes_(*alen) caddr_t asa,
+ _Inout_opt_ int *alen
+ );
+ }
+142 AUE_SYSCTL COMPAT {
+ long gethostid(void);
+ }
+143 AUE_SYSCTL COMPAT {
+ int sethostid(
+ long hostid
+ );
+ }
+144 AUE_GETRLIMIT COMPAT {
+ int getrlimit(
+ u_int which,
+ _Out_ struct orlimit *rlp
+ );
+ }
+145 AUE_SETRLIMIT COMPAT {
+ int setrlimit(
+ u_int which,
+ _Out_ struct orlimit *rlp
+ );
+ }
+146 AUE_KILLPG COMPAT {
+ int killpg(
+ int pgid,
+ int signum
+ );
+ }
+147 AUE_SETSID STD {
+ int setsid(void);
+ }
+148 AUE_QUOTACTL STD {
+ int quotactl(
+ _In_z_ const char *path,
+ int cmd,
+ int uid,
+ _In_ caddr_t arg
+ );
+ }
+149 AUE_O_QUOTA COMPAT {
+ int quota(void);
+ }
+150 AUE_GETSOCKNAME COMPAT|NOARGS {
+ int getsockname(
+ int fdec,
+ _Out_writes_bytes_(*alen) caddr_t asa,
+ _Inout_ int *alen
+ );
+ } getsockname getsockname_args int
; Syscalls 151-180 inclusive are reserved for vendor-specific
; system calls. (This includes various calls added for compatibity
@@ -401,120 +954,303 @@
152 AUE_NULL UNIMPL sem_wakeup (BSD/OS 2.x)
153 AUE_NULL UNIMPL asyncdaemon (BSD/OS 2.x)
; 154 is initialised by the NLM code, if present.
-154 AUE_NULL NOSTD { int nlm_syscall(int debug_level, \
- int grace_period, int addr_count, \
- _In_reads_(addr_count) \
- char **addrs); }
+154 AUE_NULL NOSTD {
+ int nlm_syscall(
+ int debug_level,
+ int grace_period,
+ int addr_count,
+ _In_reads_(addr_count) char **addrs
+ );
+ }
; 155 is initialized by the NFS code, if present.
-155 AUE_NFS_SVC NOSTD { int nfssvc(int flag, _In_ caddr_t argp); }
-156 AUE_GETDIRENTRIES COMPAT { int getdirentries(int fd, \
- _Out_writes_bytes_(count) char *buf, \
- u_int count, _Out_ long *basep); }
-157 AUE_STATFS COMPAT4 { int statfs(_In_z_ char *path, \
- _Out_ struct ostatfs *buf); }
-158 AUE_FSTATFS COMPAT4 { int fstatfs(int fd, \
- _Out_ struct ostatfs *buf); }
+155 AUE_NFS_SVC NOSTD {
+ int nfssvc(
+ int flag,
+ _In_ caddr_t argp
+ );
+ }
+156 AUE_GETDIRENTRIES COMPAT {
+ int getdirentries(
+ int fd,
+ _Out_writes_bytes_(count) char *buf,
+ u_int count,
+ _Out_ long *basep
+ );
+ }
+157 AUE_STATFS COMPAT4 {
+ int statfs(
+ _In_z_ const char *path,
+ _Out_ struct ostatfs *buf
+ );
+ }
+158 AUE_FSTATFS COMPAT4 {
+ int fstatfs(
+ int fd,
+ _Out_ struct ostatfs *buf
+ );
+ }
159 AUE_NULL UNIMPL nosys
-160 AUE_LGETFH STD { int lgetfh(_In_z_ char *fname, \
- _Out_ struct fhandle *fhp); }
-161 AUE_NFS_GETFH STD { int getfh(_In_z_ char *fname, \
- _Out_ struct fhandle *fhp); }
-162 AUE_SYSCTL COMPAT4 { int getdomainname( \
- _Out_writes_z_(len) char *domainname, \
- int len); }
-163 AUE_SYSCTL COMPAT4 { int setdomainname( \
- _In_reads_z_(len) char *domainname, \
- int len); }
-164 AUE_NULL COMPAT4 { int uname(_Out_ struct utsname *name); }
-165 AUE_SYSARCH STD { int sysarch(int op, _In_z_ char *parms); }
-166 AUE_RTPRIO STD { int rtprio(int function, pid_t pid, \
- _Inout_ struct rtprio *rtp); }
+160 AUE_LGETFH STD {
+ int lgetfh(
+ _In_z_ const char *fname,
+ _Out_ struct fhandle *fhp
+ );
+ }
+161 AUE_NFS_GETFH STD {
+ int getfh(
+ _In_z_ const char *fname,
+ _Out_ struct fhandle *fhp
+ );
+ }
+162 AUE_SYSCTL COMPAT4 {
+ int getdomainname(
+ _Out_writes_z_(len) char *domainname,
+ int len
+ );
+ }
+163 AUE_SYSCTL COMPAT4 {
+ int setdomainname(
+ _In_reads_z_(len) char *domainname,
+ int len
+ );
+ }
+164 AUE_NULL COMPAT4 {
+ int uname(
+ _Out_ struct utsname *name
+ );
+ }
+165 AUE_SYSARCH STD {
+ int sysarch(
+ int op,
+ _In_z_ char *parms
+ );
+ }
+166 AUE_RTPRIO STD {
+ int rtprio(
+ int function,
+ pid_t pid,
+ _Inout_ struct rtprio *rtp
+ );
+ }
167 AUE_NULL UNIMPL nosys
168 AUE_NULL UNIMPL nosys
-169 AUE_SEMSYS NOSTD { int semsys(int which, int a2, int a3, \
- int a4, int a5); }
-; XXX should be { int semsys(int which, ...); }
-170 AUE_MSGSYS NOSTD { int msgsys(int which, int a2, int a3, \
- int a4, int a5, int a6); }
-; XXX should be { int msgsys(int which, ...); }
-171 AUE_SHMSYS NOSTD { int shmsys(int which, int a2, int a3, \
- int a4); }
-; XXX should be { int shmsys(int which, ...); }
+169 AUE_SEMSYS NOSTD {
+ int semsys(
+ int which,
+ int a2,
+ int a3,
+ int a4,
+ int a5
+ );
+ }
+; XXX should be { int semsys(int which, ...); }
+170 AUE_MSGSYS NOSTD {
+ int msgsys(
+ int which,
+ int a2,
+ int a3,
+ int a4,
+ int a5,
+ int a6
+ );
+ }
+; XXX should be { int msgsys(int which, ...); }
+171 AUE_SHMSYS NOSTD {
+ int shmsys(
+ int which,
+ int a2,
+ int a3,
+ int a4
+ );
+ }
+; XXX should be { int shmsys(int which, ...); }
172 AUE_NULL UNIMPL nosys
-173 AUE_PREAD COMPAT6 { ssize_t pread(int fd, \
- _Out_writes_bytes_(nbyte) void *buf, \
- size_t nbyte, int pad, off_t offset); }
-174 AUE_PWRITE COMPAT6 { ssize_t pwrite(int fd, \
- _In_reads_bytes_(nbyte) \
- const void *buf, \
- size_t nbyte, int pad, off_t offset); }
-175 AUE_SETFIB STD { int setfib(int fibnum); }
-176 AUE_NTP_ADJTIME STD { int ntp_adjtime(_Inout_ struct timex *tp); }
+173 AUE_PREAD COMPAT6 {
+ ssize_t pread(
+ int fd,
+ _Out_writes_bytes_(nbyte) void *buf,
+ size_t nbyte,
+ int pad,
+ off_t offset
+ );
+ }
+174 AUE_PWRITE COMPAT6 {
+ ssize_t pwrite(
+ int fd,
+ _In_reads_bytes_(nbyte) const void *buf,
+ size_t nbyte,
+ int pad,
+ off_t offset
+ );
+ }
+175 AUE_SETFIB STD {
+ int setfib(
+ int fibnum
+ );
+ }
+176 AUE_NTP_ADJTIME STD {
+ int ntp_adjtime(
+ _Inout_ struct timex *tp
+ );
+ }
177 AUE_NULL UNIMPL sfork (BSD/OS 2.x)
178 AUE_NULL UNIMPL getdescriptor (BSD/OS 2.x)
179 AUE_NULL UNIMPL setdescriptor (BSD/OS 2.x)
180 AUE_NULL UNIMPL nosys
; Syscalls 181-199 are used by/reserved for BSD
-181 AUE_SETGID STD { int setgid(gid_t gid); }
-182 AUE_SETEGID STD { int setegid(gid_t egid); }
-183 AUE_SETEUID STD { int seteuid(uid_t euid); }
+181 AUE_SETGID STD {
+ int setgid(
+ gid_t gid
+ );
+ }
+182 AUE_SETEGID STD {
+ int setegid(
+ gid_t egid
+ );
+ }
+183 AUE_SETEUID STD {
+ int seteuid(
+ uid_t euid
+ );
+ }
184 AUE_NULL OBSOL lfs_bmapv
185 AUE_NULL OBSOL lfs_markv
186 AUE_NULL OBSOL lfs_segclean
187 AUE_NULL OBSOL lfs_segwait
-188 AUE_STAT COMPAT11 { int stat(_In_z_ char *path, \
- _Out_ struct freebsd11_stat *ub); }
-189 AUE_FSTAT COMPAT11 { int fstat(int fd, \
- _Out_ struct freebsd11_stat *sb); }
-190 AUE_LSTAT COMPAT11 { int lstat(_In_z_ char *path, \
- _Out_ struct freebsd11_stat *ub); }
-191 AUE_PATHCONF STD { int pathconf(_In_z_ char *path, int name); }
-192 AUE_FPATHCONF STD { int fpathconf(int fd, int name); }
+188 AUE_STAT COMPAT11 {
+ int stat(
+ _In_z_ const char *path,
+ _Out_ struct freebsd11_stat *ub
+ );
+ }
+189 AUE_FSTAT COMPAT11 {
+ int fstat(
+ int fd,
+ _Out_ struct freebsd11_stat *sb
+ );
+ }
+190 AUE_LSTAT COMPAT11 {
+ int lstat(
+ _In_z_ const char *path,
+ _Out_ struct freebsd11_stat *ub
+ );
+ }
+191 AUE_PATHCONF STD {
+ int pathconf(
+ _In_z_ const char *path,
+ int name
+ );
+ }
+192 AUE_FPATHCONF STD {
+ int fpathconf(
+ int fd,
+ int name
+ );
+ }
193 AUE_NULL UNIMPL nosys
-194 AUE_GETRLIMIT STD { int getrlimit(u_int which, \
- _Out_ struct rlimit *rlp); } getrlimit \
- __getrlimit_args int
-195 AUE_SETRLIMIT STD { int setrlimit(u_int which, \
- _In_ struct rlimit *rlp); } setrlimit \
- __setrlimit_args int
-196 AUE_GETDIRENTRIES COMPAT11 { int getdirentries(int fd, \
- _Out_writes_bytes_(count) char *buf, \
- u_int count, _Out_ long *basep); }
-197 AUE_MMAP COMPAT6 { caddr_t mmap(_In_ caddr_t addr, size_t len, \
- int prot, int flags, int fd, int pad, \
- off_t pos); }
-198 AUE_NULL NOPROTO { int nosys(void); } __syscall \
- __syscall_args int
-199 AUE_LSEEK COMPAT6 { off_t lseek(int fd, int pad, \
- off_t offset, int whence); }
-200 AUE_TRUNCATE COMPAT6 { int truncate(_In_z_ char *path, int pad, \
- off_t length); }
-201 AUE_FTRUNCATE COMPAT6 { int ftruncate(int fd, int pad, \
- off_t length); }
-202 AUE_SYSCTL STD { int __sysctl( \
- _In_reads_(namelen) int *name, \
- u_int namelen, \
- _Out_writes_bytes_opt_(*oldlenp) \
- void *old, \
- _Inout_opt_ size_t *oldlenp, \
- _In_reads_bytes_opt_(newlen) \
- void *new, \
- size_t newlen); } \
- __sysctl sysctl_args int
-203 AUE_MLOCK STD { int mlock(_In_ const void *addr, \
- size_t len); }
-204 AUE_MUNLOCK STD { int munlock(_In_ const void *addr, \
- size_t len); }
-205 AUE_UNDELETE STD { int undelete(_In_z_ char *path); }
-206 AUE_FUTIMES STD { int futimes(int fd, \
- _In_reads_(2) struct timeval *tptr); }
-207 AUE_GETPGID STD { int getpgid(pid_t pid); }
+194 AUE_GETRLIMIT STD {
+ int getrlimit(
+ u_int which,
+ _Out_ struct rlimit *rlp
+ );
+ } getrlimit __getrlimit_args int
+195 AUE_SETRLIMIT STD {
+ int setrlimit(
+ u_int which,
+ _In_ struct rlimit *rlp
+ );
+ } setrlimit __setrlimit_args int
+196 AUE_GETDIRENTRIES COMPAT11 {
+ int getdirentries(
+ int fd,
+ _Out_writes_bytes_(count) char *buf,
+ u_int count,
+ _Out_ long *basep
+ );
+ }
+197 AUE_MMAP COMPAT6 {
+ caddr_t mmap(
+ _In_ caddr_t addr,
+ size_t len,
+ int prot,
+ int flags,
+ int fd,
+ int pad,
+ off_t pos
+ );
+ }
+198 AUE_NULL NOPROTO {
+ int nosys(void);
+ } __syscall __syscall_args int
+199 AUE_LSEEK COMPAT6 {
+ off_t lseek(
+ int fd,
+ int pad,
+ off_t offset,
+ int whence
+ );
+ }
+200 AUE_TRUNCATE COMPAT6 {
+ int truncate(
+ _In_z_ const char *path,
+ int pad,
+ off_t length
+ );
+ }
+201 AUE_FTRUNCATE COMPAT6 {
+ int ftruncate(
+ int fd,
+ int pad,
+ off_t length
+ );
+ }
+202 AUE_SYSCTL STD {
+ int __sysctl(
+ _In_reads_(namelen) int *name,
+ u_int namelen,
+ _Out_writes_bytes_opt_(*oldlenp) void *old,
+ _Inout_opt_ size_t *oldlenp,
+ _In_reads_bytes_opt_(newlen) void *new,
+ size_t newlen
+ );
+ } __sysctl sysctl_args int
+203 AUE_MLOCK STD {
+ int mlock(
+ _In_ const void *addr,
+ size_t len
+ );
+ }
+204 AUE_MUNLOCK STD {
+ int munlock(
+ _In_ const void *addr,
+ size_t len
+ );
+ }
+205 AUE_UNDELETE STD {
+ int undelete(
+ _In_z_ const char *path
+ );
+ }
+206 AUE_FUTIMES STD {
+ int futimes(
+ int fd,
+ _In_reads_(2) struct timeval *tptr
+ );
+ }
+207 AUE_GETPGID STD {
+ int getpgid(
+ pid_t pid
+ );
+ }
208 AUE_NULL UNIMPL nosys
-209 AUE_POLL STD { int poll( \
- _Inout_updates_(nfds) \
- struct pollfd *fds, \
- u_int nfds, int timeout); }
+209 AUE_POLL STD {
+ int poll(
+ _Inout_updates_(nfds) struct pollfd *fds,
+ u_int nfds,
+ int timeout
+ );
+ }
;
; The following are reserved for loadable syscalls
;
@@ -529,298 +1265,671 @@
218 AUE_NULL NODEF|NOTSTATIC lkmnosys lkmnosys nosys_args int
219 AUE_NULL NODEF|NOTSTATIC lkmnosys lkmnosys nosys_args int
-220 AUE_SEMCTL COMPAT7|NOSTD { int __semctl(int semid, int semnum, \
- int cmd, union semun_old *arg); }
-221 AUE_SEMGET NOSTD { int semget(key_t key, int nsems, \
- int semflg); }
-222 AUE_SEMOP NOSTD { int semop(int semid, \
- _In_reads_(nsops) struct sembuf *sops, \
- size_t nsops); }
+220 AUE_SEMCTL COMPAT7|NOSTD {
+ int __semctl(
+ int semid,
+ int semnum,
+ int cmd,
+ union semun_old *arg
+ );
+ }
+221 AUE_SEMGET NOSTD {
+ int semget(
+ key_t key,
+ int nsems,
+ int semflg
+ );
+ }
+222 AUE_SEMOP NOSTD {
+ int semop(
+ int semid,
+ _In_reads_(nsops) struct sembuf *sops,
+ size_t nsops
+ );
+ }
223 AUE_NULL OBSOL semconfig
-224 AUE_MSGCTL COMPAT7|NOSTD { int msgctl(int msqid, int cmd, \
- struct msqid_ds_old *buf); }
-225 AUE_MSGGET NOSTD { int msgget(key_t key, int msgflg); }
-226 AUE_MSGSND NOSTD { int msgsnd(int msqid, \
- _In_reads_bytes_(msgsz) const void *msgp, \
- size_t msgsz, int msgflg); }
-227 AUE_MSGRCV NOSTD { ssize_t msgrcv(int msqid, \
- _Out_writes_bytes_(msgsz) void *msgp, \
- size_t msgsz, long msgtyp, int msgflg); }
-228 AUE_SHMAT NOSTD { int shmat(int shmid, \
- _In_ const void *shmaddr, \
- int shmflg); }
-229 AUE_SHMCTL COMPAT7|NOSTD { int shmctl(int shmid, int cmd, \
- struct shmid_ds_old *buf); }
-230 AUE_SHMDT NOSTD { int shmdt(_In_ const void *shmaddr); }
-231 AUE_SHMGET NOSTD { int shmget(key_t key, size_t size, \
- int shmflg); }
-;
-232 AUE_NULL STD { int clock_gettime(clockid_t clock_id, \
- _Out_ struct timespec *tp); }
-233 AUE_CLOCK_SETTIME STD { int clock_settime(clockid_t clock_id, \
- _In_ const struct timespec *tp); }
-234 AUE_NULL STD { int clock_getres(clockid_t clock_id, \
- _Out_ struct timespec *tp); }
-235 AUE_NULL STD { int ktimer_create( \
- clockid_t clock_id, \
- _In_ struct sigevent *evp, \
- _Out_ int *timerid); }
-236 AUE_NULL STD { int ktimer_delete(int timerid); }
-237 AUE_NULL STD { int ktimer_settime(int timerid, \
- int flags, \
- _In_ const struct itimerspec *value, \
- _Out_opt_ struct itimerspec *ovalue); }
-238 AUE_NULL STD { int ktimer_gettime(int timerid, \
- _Out_ struct itimerspec *value); }
-239 AUE_NULL STD { int ktimer_getoverrun(int timerid); }
-240 AUE_NULL STD { int nanosleep( \
- _In_ const struct timespec *rqtp, \
- _Out_opt_ struct timespec *rmtp); }
-241 AUE_NULL STD { int ffclock_getcounter( \
- _Out_ ffcounter *ffcount); }
-242 AUE_NULL STD { int ffclock_setestimate( \
- _In_ struct ffclock_estimate *cest); }
-243 AUE_NULL STD { int ffclock_getestimate( \
- _Out_ struct ffclock_estimate *cest); }
-244 AUE_NULL STD { int clock_nanosleep(clockid_t clock_id, \
- int flags, \
- _In_ const struct timespec *rqtp, \
- _Out_opt_ struct timespec *rmtp); }
-245 AUE_NULL UNIMPL nosys
-246 AUE_NULL UNIMPL nosys
-247 AUE_NULL STD { int clock_getcpuclockid2(id_t id, \
- int which, _Out_ clockid_t *clock_id); }
-248 AUE_NULL STD { int ntp_gettime( \
- _Out_ struct ntptimeval *ntvp); }
+224 AUE_MSGCTL COMPAT7|NOSTD {
+ int msgctl(
+ int msqid,
+ int cmd,
+ struct msqid_ds_old *buf
+ );
+ }
+225 AUE_MSGGET NOSTD {
+ int msgget(
+ key_t key,
+ int msgflg
+ );
+ }
+226 AUE_MSGSND NOSTD {
+ int msgsnd(
+ int msqid,
+ _In_reads_bytes_(msgsz) const void *msgp,
+ size_t msgsz,
+ int msgflg
+ );
+ }
+227 AUE_MSGRCV NOSTD {
+ ssize_t msgrcv(
+ int msqid,
+ _Out_writes_bytes_(msgsz) void *msgp,
+ size_t msgsz,
+ long msgtyp,
+ int msgflg
+ );
+ }
+228 AUE_SHMAT NOSTD {
+ int shmat(
+ int shmid,
+ _In_ const void *shmaddr,
+ int shmflg
+ );
+ }
+229 AUE_SHMCTL COMPAT7|NOSTD {
+ int shmctl(
+ int shmid,
+ int cmd,
+ struct shmid_ds_old *buf
+ );
+ }
+230 AUE_SHMDT NOSTD {
+ int shmdt(
+ _In_ const void *shmaddr
+ );
+ }
+231 AUE_SHMGET NOSTD {
+ int shmget(
+ key_t key,
+ size_t size,
+ int shmflg
+ );
+ }
+232 AUE_NULL STD {
+ int clock_gettime(
+ clockid_t clock_id,
+ _Out_ struct timespec *tp
+ );
+ }
+233 AUE_CLOCK_SETTIME STD {
+ int clock_settime(
+ clockid_t clock_id,
+ _In_ const struct timespec *tp
+ );
+ }
+234 AUE_NULL STD {
+ int clock_getres(
+ clockid_t clock_id,
+ _Out_ struct timespec *tp
+ );
+ }
+235 AUE_NULL STD {
+ int ktimer_create(
+ clockid_t clock_id,
+ _In_ struct sigevent *evp,
+ _Out_ int *timerid
+ );
+ }
+236 AUE_NULL STD {
+ int ktimer_delete(
+ int timerid
+ );
+ }
+237 AUE_NULL STD {
+ int ktimer_settime(
+ int timerid,
+ int flags,
+ _In_ const struct itimerspec *value,
+ _Out_opt_ struct itimerspec *ovalue
+ );
+ }
+238 AUE_NULL STD {
+ int ktimer_gettime(
+ int timerid,
+ _Out_ struct itimerspec *value
+ );
+ }
+239 AUE_NULL STD {
+ int ktimer_getoverrun(
+ int timerid
+ );
+ }
+240 AUE_NULL STD {
+ int nanosleep(
+ _In_ const struct timespec *rqtp,
+ _Out_opt_ struct timespec *rmtp
+ );
+ }
+241 AUE_NULL STD {
+ int ffclock_getcounter(
+ _Out_ ffcounter *ffcount
+ );
+ }
+242 AUE_NULL STD {
+ int ffclock_setestimate(
+ _In_ struct ffclock_estimate *cest
+ );
+ }
+243 AUE_NULL STD {
+ int ffclock_getestimate(
+ _Out_ struct ffclock_estimate *cest
+ );
+ }
+244 AUE_NULL STD {
+ int clock_nanosleep(
+ clockid_t clock_id,
+ int flags,
+ _In_ const struct timespec *rqtp,
+ _Out_opt_ struct timespec *rmtp
+ );
+ }
+245-246 AUE_NULL UNIMPL nosys
+247 AUE_NULL STD {
+ int clock_getcpuclockid2(
+ id_t id,
+ int which,
+ _Out_ clockid_t *clock_id
+ );
+ }
+248 AUE_NULL STD {
+ int ntp_gettime(
+ _Out_ struct ntptimeval *ntvp
+ );
+ }
249 AUE_NULL UNIMPL nosys
; syscall numbers initially used in OpenBSD
-250 AUE_MINHERIT STD { int minherit( \
- _In_ void *addr, \
- size_t len, int inherit); }
-251 AUE_RFORK STD { int rfork(int flags); }
+250 AUE_MINHERIT STD {
+ int minherit(
+ _In_ void *addr,
+ size_t len,
+ int inherit
+ );
+ }
+251 AUE_RFORK STD {
+ int rfork(
+ int flags
+ );
+ }
252 AUE_POLL OBSOL openbsd_poll
-253 AUE_ISSETUGID STD { int issetugid(void); }
-254 AUE_LCHOWN STD { int lchown(_In_z_ char *path, int uid, \
- int gid); }
-255 AUE_AIO_READ STD { int aio_read( \
- _Inout_ struct aiocb *aiocbp); }
-256 AUE_AIO_WRITE STD { int aio_write( \
- _Inout_ struct aiocb *aiocbp); }
-257 AUE_LIO_LISTIO STD { int lio_listio(int mode, \
- _Inout_updates_(nent) \
- struct aiocb* const *acb_list, \
- int nent, \
- _In_opt_ struct sigevent *sig); }
-258 AUE_NULL UNIMPL nosys
-259 AUE_NULL UNIMPL nosys
-260 AUE_NULL UNIMPL nosys
-261 AUE_NULL UNIMPL nosys
-262 AUE_NULL UNIMPL nosys
-263 AUE_NULL UNIMPL nosys
-264 AUE_NULL UNIMPL nosys
-265 AUE_NULL UNIMPL nosys
-266 AUE_NULL UNIMPL nosys
-267 AUE_NULL UNIMPL nosys
-268 AUE_NULL UNIMPL nosys
-269 AUE_NULL UNIMPL nosys
-270 AUE_NULL UNIMPL nosys
-271 AUE_NULL UNIMPL nosys
-272 AUE_O_GETDENTS COMPAT11 { int getdents(int fd, \
- _Out_writes_bytes_(count) char *buf, \
- size_t count); }
+253 AUE_ISSETUGID STD {
+ int issetugid(void);
+ }
+254 AUE_LCHOWN STD {
+ int lchown(
+ _In_z_ const char *path,
+ int uid,
+ int gid
+ );
+ }
+255 AUE_AIO_READ STD {
+ int aio_read(
+ _Inout_ struct aiocb *aiocbp
+ );
+ }
+256 AUE_AIO_WRITE STD {
+ int aio_write(
+ _Inout_ struct aiocb *aiocbp
+ );
+ }
+257 AUE_LIO_LISTIO STD {
+ int lio_listio(
+ int mode,
+ _Inout_updates_(nent) struct aiocb* const *acb_list,
+ int nent,
+ _In_opt_ struct sigevent *sig
+ );
+ }
+258-271 AUE_NULL UNIMPL nosys
+272 AUE_O_GETDENTS COMPAT11 {
+ int getdents(
+ int fd,
+ _Out_writes_bytes_(count) char *buf,
+ size_t count
+ );
+ }
273 AUE_NULL UNIMPL nosys
-274 AUE_LCHMOD STD { int lchmod(_In_z_ char *path, mode_t mode); }
+274 AUE_LCHMOD STD {
+ int lchmod(
+ _In_z_ const char *path,
+ mode_t mode
+ );
+ }
275 AUE_NULL OBSOL netbsd_lchown
-276 AUE_LUTIMES STD { int lutimes(_In_z_ char *path, \
- _In_ struct timeval *tptr); }
+276 AUE_LUTIMES STD {
+ int lutimes(
+ _In_z_ const char *path,
+ _In_ struct timeval *tptr
+ );
+ }
277 AUE_NULL OBSOL netbsd_msync
-278 AUE_STAT COMPAT11 { int nstat(_In_z_ char *path, \
- _Out_ struct nstat *ub); }
-279 AUE_FSTAT COMPAT11 { int nfstat(int fd, _Out_ struct nstat *sb); }
-280 AUE_LSTAT COMPAT11 { int nlstat(_In_z_ char *path, \
- _Out_ struct nstat *ub); }
-281 AUE_NULL UNIMPL nosys
-282 AUE_NULL UNIMPL nosys
-283 AUE_NULL UNIMPL nosys
-284 AUE_NULL UNIMPL nosys
-285 AUE_NULL UNIMPL nosys
-286 AUE_NULL UNIMPL nosys
-287 AUE_NULL UNIMPL nosys
-288 AUE_NULL UNIMPL nosys
-289 AUE_PREADV STD { ssize_t preadv(int fd, \
- _In_reads_(iovcnt) \
- struct iovec *iovp, \
- u_int iovcnt, off_t offset); }
-290 AUE_PWRITEV STD { ssize_t pwritev(int fd, \
- _In_reads_(iovcnt) struct iovec *iovp, \
- u_int iovcnt, off_t offset); }
-291 AUE_NULL UNIMPL nosys
-292 AUE_NULL UNIMPL nosys
-293 AUE_NULL UNIMPL nosys
-294 AUE_NULL UNIMPL nosys
-295 AUE_NULL UNIMPL nosys
-296 AUE_NULL UNIMPL nosys
-297 AUE_FHSTATFS COMPAT4 { int fhstatfs( \
- _In_ const struct fhandle *u_fhp, \
- _Out_ struct ostatfs *buf); }
-298 AUE_FHOPEN STD { int fhopen( \
- _In_ const struct fhandle *u_fhp, \
- int flags); }
-299 AUE_FHSTAT COMPAT11 { int fhstat( \
- _In_ const struct fhandle *u_fhp, \
- _Out_ struct freebsd11_stat *sb); }
-300 AUE_NULL STD { int modnext(int modid); }
-301 AUE_NULL STD { int modstat(int modid, \
- _Out_ struct module_stat* stat); }
-302 AUE_NULL STD { int modfnext(int modid); }
-303 AUE_NULL STD { int modfind(_In_z_ const char *name); }
-304 AUE_MODLOAD STD { int kldload(_In_z_ const char *file); }
-305 AUE_MODUNLOAD STD { int kldunload(int fileid); }
-306 AUE_NULL STD { int kldfind(_In_z_ const char *file); }
-307 AUE_NULL STD { int kldnext(int fileid); }
-308 AUE_NULL STD { int kldstat(int fileid, \
- _Out_ struct kld_file_stat *stat); }
-309 AUE_NULL STD { int kldfirstmod(int fileid); }
-310 AUE_GETSID STD { int getsid(pid_t pid); }
-311 AUE_SETRESUID STD { int setresuid(uid_t ruid, uid_t euid, \
- uid_t suid); }
-312 AUE_SETRESGID STD { int setresgid(gid_t rgid, gid_t egid, \
- gid_t sgid); }
+278 AUE_STAT COMPAT11 {
+ int nstat(
+ _In_z_ const char *path,
+ _Out_ struct nstat *ub
+ );
+ }
+279 AUE_FSTAT COMPAT11 {
+ int nfstat(
+ int fd,
+ _Out_ struct nstat *sb
+ );
+ }
+280 AUE_LSTAT COMPAT11 {
+ int nlstat(
+ _In_z_ const char *path,
+ _Out_ struct nstat *ub
+ );
+ }
+281-288 AUE_NULL UNIMPL nosys
+289 AUE_PREADV STD {
+ ssize_t preadv(
+ int fd,
+ _In_reads_(iovcnt) struct iovec *iovp,
+ u_int iovcnt,
+ off_t offset
+ );
+ }
+290 AUE_PWRITEV STD {
+ ssize_t pwritev(
+ int fd,
+ _In_reads_(iovcnt) struct iovec *iovp,
+ u_int iovcnt,
+ off_t offset
+ );
+ }
+291-296 AUE_NULL UNIMPL nosys
+297 AUE_FHSTATFS COMPAT4 {
+ int fhstatfs(
+ _In_ const struct fhandle *u_fhp,
+ _Out_ struct ostatfs *buf
+ );
+ }
+298 AUE_FHOPEN STD {
+ int fhopen(
+ _In_ const struct fhandle *u_fhp,
+ int flags
+ );
+ }
+299 AUE_FHSTAT COMPAT11 {
+ int fhstat(
+ _In_ const struct fhandle *u_fhp,
+ _Out_ struct freebsd11_stat *sb
+ );
+ }
+300 AUE_NULL STD {
+ int modnext(
+ int modid
+ );
+ }
+301 AUE_NULL STD {
+ int modstat(
+ int modid,
+ _Out_ struct module_stat* stat
+ );
+ }
+302 AUE_NULL STD {
+ int modfnext(
+ int modid
+ );
+ }
+303 AUE_NULL STD {
+ int modfind(
+ _In_z_ const char *name
+ );
+ }
+304 AUE_MODLOAD STD {
+ int kldload(
+ _In_z_ const char *file
+ );
+ }
+305 AUE_MODUNLOAD STD {
+ int kldunload(
+ int fileid
+ );
+ }
+306 AUE_NULL STD {
+ int kldfind(
+ _In_z_ const char *file
+ );
+ }
+307 AUE_NULL STD {
+ int kldnext(
+ int fileid
+ );
+ }
+308 AUE_NULL STD {
+ int kldstat(
+ int fileid,
+ _Out_ struct kld_file_stat *stat
+ );
+ }
+309 AUE_NULL STD {
+ int kldfirstmod(
+ int fileid
+ );
+ }
+310 AUE_GETSID STD {
+ int getsid(
+ pid_t pid
+ );
+ }
+311 AUE_SETRESUID STD {
+ int setresuid(
+ uid_t ruid,
+ uid_t euid,
+ uid_t suid
+ );
+ }
+312 AUE_SETRESGID STD {
+ int setresgid(
+ gid_t rgid,
+ gid_t egid,
+ gid_t sgid
+ );
+ }
313 AUE_NULL OBSOL signanosleep
-314 AUE_AIO_RETURN STD { ssize_t aio_return( \
- _Inout_ struct aiocb *aiocbp); }
-315 AUE_AIO_SUSPEND STD { int aio_suspend( \
- _Inout_updates_(nent) \
- struct aiocb * const * aiocbp, \
- int nent, \
- _In_opt_ \
- const struct timespec *timeout); }
-316 AUE_AIO_CANCEL STD { int aio_cancel(int fd, \
- _In_opt_ struct aiocb *aiocbp); }
-317 AUE_AIO_ERROR STD { int aio_error( \
- _In_ struct aiocb *aiocbp); }
-318 AUE_AIO_READ COMPAT6 { int aio_read( \
- _Inout_ struct oaiocb *aiocbp); }
-319 AUE_AIO_WRITE COMPAT6 { int aio_write( \
- _Inout_ struct oaiocb *aiocbp); }
-320 AUE_LIO_LISTIO COMPAT6 { int lio_listio(int mode, \
- _Inout_updates_(nent) \
- struct oaiocb * const *acb_list, \
- int nent, \
- _In_opt_ struct osigevent *sig); }
-321 AUE_NULL STD { int yield(void); }
+314 AUE_AIO_RETURN STD {
+ ssize_t aio_return(
+ _Inout_ struct aiocb *aiocbp
+ );
+ }
+315 AUE_AIO_SUSPEND STD {
+ int aio_suspend(
+ _Inout_updates_(nent) struct aiocb * const * aiocbp,
+ int nent,
+ _In_opt_ const struct timespec *timeout
+ );
+ }
+316 AUE_AIO_CANCEL STD {
+ int aio_cancel(
+ int fd,
+ _In_opt_ struct aiocb *aiocbp
+ );
+ }
+317 AUE_AIO_ERROR STD {
+ int aio_error(
+ _In_ struct aiocb *aiocbp
+ );
+ }
+318 AUE_AIO_READ COMPAT6 {
+ int aio_read(
+ _Inout_ struct oaiocb *aiocbp
+ );
+ }
+319 AUE_AIO_WRITE COMPAT6 {
+ int aio_write(
+ _Inout_ struct oaiocb *aiocbp
+ );
+ }
+320 AUE_LIO_LISTIO COMPAT6 {
+ int lio_listio(
+ int mode,
+ _Inout_updates_(nent) struct oaiocb * const *acb_list,
+ int nent,
+ _In_opt_ struct osigevent *sig
+ );
+ }
+321 AUE_NULL STD {
+ int yield(void);
+ }
322 AUE_NULL OBSOL thr_sleep
323 AUE_NULL OBSOL thr_wakeup
-324 AUE_MLOCKALL STD { int mlockall(int how); }
-325 AUE_MUNLOCKALL STD { int munlockall(void); }
-326 AUE_GETCWD STD { int __getcwd( \
- _Out_writes_z_(buflen) char *buf, \
- size_t buflen); }
-327 AUE_NULL STD { int sched_setparam (pid_t pid, \
- _In_ const struct sched_param *param); }
-328 AUE_NULL STD { int sched_getparam (pid_t pid, \
- _Out_ struct sched_param *param); }
-329 AUE_NULL STD { int sched_setscheduler (pid_t pid, int \
- policy, _In_ const struct sched_param \
- *param); }
-330 AUE_NULL STD { int sched_getscheduler (pid_t pid); }
-331 AUE_NULL STD { int sched_yield (void); }
-332 AUE_NULL STD { int sched_get_priority_max (int policy); }
-333 AUE_NULL STD { int sched_get_priority_min (int policy); }
-334 AUE_NULL STD { int sched_rr_get_interval (pid_t pid, \
- _Out_ struct timespec *interval); }
-335 AUE_NULL STD { int utrace( \
- _In_reads_bytes_(len) const void *addr, \
- size_t len); }
-336 AUE_SENDFILE COMPAT4 { int sendfile(int fd, int s, \
- off_t offset, size_t nbytes, \
- _In_opt_ struct sf_hdtr *hdtr, \
- _Out_opt_ off_t *sbytes, int flags); }
-337 AUE_NULL STD { int kldsym(int fileid, int cmd, \
- _In_ void *data); }
-338 AUE_JAIL STD { int jail( \
- _In_ struct jail *jail); }
-
-339 AUE_NULL NOSTD|NOTSTATIC { int nnpfs_syscall(int operation, \
- char *a_pathP, int a_opcode, \
- void *a_paramsP, \
- int a_followSymlinks); }
-340 AUE_SIGPROCMASK STD { int sigprocmask(int how, \
- _In_opt_ const sigset_t *set, \
- _Out_opt_ sigset_t *oset); }
-341 AUE_SIGSUSPEND STD { int sigsuspend( \
- _In_ const sigset_t *sigmask); }
-342 AUE_SIGACTION COMPAT4 { int sigaction(int sig, \
- _In_opt_ const struct sigaction *act, \
- _Out_opt_ struct sigaction *oact); }
-343 AUE_SIGPENDING STD { int sigpending(_In_ sigset_t *set); }
-344 AUE_SIGRETURN COMPAT4 { int sigreturn( \
- _In_ const struct ucontext4 *sigcntxp); }
-345 AUE_SIGWAIT STD { int sigtimedwait(_In_ const sigset_t *set, \
- _Out_opt_ siginfo_t *info, \
- _In_opt_ const struct timespec *timeout); }
-346 AUE_NULL STD { int sigwaitinfo(_In_ const sigset_t *set, \
- _Out_opt_ siginfo_t *info); }
-347 AUE_ACL_GET_FILE STD { int __acl_get_file( \
- _In_z_ const char *path, \
- acl_type_t type, \
- _Out_ struct acl *aclp); }
-348 AUE_ACL_SET_FILE STD { int __acl_set_file( \
- _In_z_ const char *path, \
- acl_type_t type, _In_ struct acl *aclp); }
-349 AUE_ACL_GET_FD STD { int __acl_get_fd(int filedes, \
- acl_type_t type, _Out_ struct acl *aclp); }
-350 AUE_ACL_SET_FD STD { int __acl_set_fd(int filedes, \
- acl_type_t type, _In_ struct acl *aclp); }
-351 AUE_ACL_DELETE_FILE STD { int __acl_delete_file( \
- _In_z_ const char *path, \
- acl_type_t type); }
-352 AUE_ACL_DELETE_FD STD { int __acl_delete_fd(int filedes, \
- acl_type_t type); }
-353 AUE_ACL_CHECK_FILE STD { int __acl_aclcheck_file( \
- _In_z_ const char *path, \
- acl_type_t type, _In_ struct acl *aclp); }
-354 AUE_ACL_CHECK_FD STD { int __acl_aclcheck_fd(int filedes, \
- acl_type_t type, _In_ struct acl *aclp); }
-355 AUE_EXTATTRCTL STD { int extattrctl(_In_z_ const char *path, \
- int cmd, _In_z_opt_ const char *filename, \
- int attrnamespace, \
- _In_z_ const char *attrname); }
-356 AUE_EXTATTR_SET_FILE STD { ssize_t extattr_set_file( \
- _In_z_ const char *path, \
- int attrnamespace, \
- _In_z_ const char *attrname, \
- _In_reads_bytes_(nbytes) void *data, \
- size_t nbytes); }
-357 AUE_EXTATTR_GET_FILE STD { ssize_t extattr_get_file( \
- _In_z_ const char *path, \
- int attrnamespace, \
- _In_z_ const char *attrname, \
- _Out_writes_bytes_(nbytes) void *data, \
- size_t nbytes); }
-358 AUE_EXTATTR_DELETE_FILE STD { int extattr_delete_file( \
- _In_z_ const char *path, \
- int attrnamespace, \
- _In_z_ const char *attrname); }
-359 AUE_AIO_WAITCOMPLETE STD { ssize_t aio_waitcomplete( \
- _Outptr_result_maybenull_ \
- struct aiocb **aiocbp, \
- _In_opt_ struct timespec *timeout); }
-360 AUE_GETRESUID STD { int getresuid(_Out_opt_ uid_t *ruid, \
- _Out_opt_ uid_t *euid, \
- _Out_opt_ uid_t *suid); }
-361 AUE_GETRESGID STD { int getresgid(_Out_opt_ gid_t *rgid, \
- _Out_opt_ gid_t *egid, \
- _Out_opt_ gid_t *sgid); }
-362 AUE_KQUEUE STD { int kqueue(void); }
-363 AUE_KEVENT COMPAT11 { int kevent(int fd, \
- _In_reads_opt_(nchanges) \
- struct kevent_freebsd11 *changelist, \
- int nchanges, \
- _Out_writes_opt_(nevents) \
- struct kevent_freebsd11 *eventlist, \
- int nevents, \
- _In_opt_ const struct timespec *timeout); }
+324 AUE_MLOCKALL STD {
+ int mlockall(
+ int how
+ );
+ }
+325 AUE_MUNLOCKALL STD {
+ int munlockall(void); }
+326 AUE_GETCWD STD {
+ int __getcwd(
+ _Out_writes_z_(buflen) char *buf,
+ size_t buflen
+ );
+ }
+327 AUE_NULL STD {
+ int sched_setparam(
+ pid_t pid,
+ _In_ const struct sched_param *param
+ );
+ }
+328 AUE_NULL STD {
+ int sched_getparam(
+ pid_t pid,
+ _Out_ struct sched_param *param
+ );
+ }
+329 AUE_NULL STD {
+ int sched_setscheduler(
+ pid_t pid,
+ int policy,
+ _In_ const struct sched_param *param
+ );
+ }
+330 AUE_NULL STD {
+ int sched_getscheduler(
+ pid_t pid
+ );
+ }
+331 AUE_NULL STD {
+ int sched_yield(void);
+ }
+332 AUE_NULL STD {
+ int sched_get_priority_max(
+ int policy
+ );
+ }
+333 AUE_NULL STD {
+ int sched_get_priority_min(
+ int policy
+ );
+ }
+334 AUE_NULL STD {
+ int sched_rr_get_interval(
+ pid_t pid,
+ _Out_ struct timespec *interval
+ );
+ }
+335 AUE_NULL STD {
+ int utrace(
+ _In_reads_bytes_(len) const void *addr,
+ size_t len
+ );
+ }
+336 AUE_SENDFILE COMPAT4 {
+ int sendfile(
+ int fd,
+ int s,
+ off_t offset,
+ size_t nbytes,
+ _In_opt_ struct sf_hdtr *hdtr,
+ _Out_opt_ off_t *sbytes,
+ int flags
+ );
+ }
+337 AUE_NULL STD {
+ int kldsym(
+ int fileid,
+ int cmd,
+ _In_ void *data
+ );
+ }
+338 AUE_JAIL STD {
+ int jail(
+ _In_ struct jail *jail
+ );
+ }
+339 AUE_NULL NOSTD|NOTSTATIC {
+ int nnpfs_syscall(
+ int operation,
+ char *a_pathP,
+ int a_opcode,
+ void *a_paramsP,
+ int a_followSymlinks
+ );
+ }
+340 AUE_SIGPROCMASK STD {
+ int sigprocmask(
+ int how,
+ _In_opt_ const sigset_t *set,
+ _Out_opt_ sigset_t *oset
+ );
+ }
+341 AUE_SIGSUSPEND STD {
+ int sigsuspend(
+ _In_ const sigset_t *sigmask
+ );
+ }
+342 AUE_SIGACTION COMPAT4 {
+ int sigaction(
+ int sig,
+ _In_opt_ const struct sigaction *act,
+ _Out_opt_ struct sigaction *oact
+ );
+ }
+343 AUE_SIGPENDING STD {
+ int sigpending(
+ _In_ sigset_t *set
+ );
+ }
+344 AUE_SIGRETURN COMPAT4 {
+ int sigreturn(
+ _In_ const struct ucontext4 *sigcntxp
+ );
+ }
+345 AUE_SIGWAIT STD {
+ int sigtimedwait(
+ _In_ const sigset_t *set,
+ _Out_opt_ siginfo_t *info,
+ _In_opt_ const struct timespec *timeout
+ );
+ }
+346 AUE_NULL STD {
+ int sigwaitinfo(
+ _In_ const sigset_t *set,
+ _Out_opt_ siginfo_t *info
+ );
+ }
+347 AUE_ACL_GET_FILE STD {
+ int __acl_get_file(
+ _In_z_ const char *path,
+ acl_type_t type,
+ _Out_ struct acl *aclp
+ );
+ }
+348 AUE_ACL_SET_FILE STD {
+ int __acl_set_file(
+ _In_z_ const char *path,
+ acl_type_t type,
+ _In_ struct acl *aclp
+ );
+ }
+349 AUE_ACL_GET_FD STD {
+ int __acl_get_fd(
+ int filedes,
+ acl_type_t type,
+ _Out_ struct acl *aclp
+ );
+ }
+350 AUE_ACL_SET_FD STD {
+ int __acl_set_fd(
+ int filedes,
+ acl_type_t type,
+ _In_ struct acl *aclp
+ );
+ }
+351 AUE_ACL_DELETE_FILE STD {
+ int __acl_delete_file(
+ _In_z_ const char *path,
+ acl_type_t type
+ );
+ }
+352 AUE_ACL_DELETE_FD STD {
+ int __acl_delete_fd(
+ int filedes,
+ acl_type_t type
+ );
+ }
+353 AUE_ACL_CHECK_FILE STD {
+ int __acl_aclcheck_file(
+ _In_z_ const char *path,
+ acl_type_t type,
+ _In_ struct acl *aclp
+ );
+ }
+354 AUE_ACL_CHECK_FD STD {
+ int __acl_aclcheck_fd(
+ int filedes,
+ acl_type_t type,
+ _In_ struct acl *aclp
+ );
+ }
+355 AUE_EXTATTRCTL STD {
+ int extattrctl(
+ _In_z_ const char *path,
+ int cmd,
+ _In_z_opt_ const char *filename,
+ int attrnamespace,
+ _In_z_ const char *attrname
+ );
+ }
+356 AUE_EXTATTR_SET_FILE STD {
+ ssize_t extattr_set_file(
+ _In_z_ const char *path,
+ int attrnamespace,
+ _In_z_ const char *attrname,
+ _In_reads_bytes_(nbytes) void *data,
+ size_t nbytes
+ );
+ }
+357 AUE_EXTATTR_GET_FILE STD {
+ ssize_t extattr_get_file(
+ _In_z_ const char *path,
+ int attrnamespace,
+ _In_z_ const char *attrname,
+ _Out_writes_bytes_(nbytes) void *data,
+ size_t nbytes
+ );
+ }
+358 AUE_EXTATTR_DELETE_FILE STD {
+ int extattr_delete_file(
+ _In_z_ const char *path,
+ int attrnamespace,
+ _In_z_ const char *attrname
+ );
+ }
+359 AUE_AIO_WAITCOMPLETE STD {
+ ssize_t aio_waitcomplete(
+ _Outptr_result_maybenull_ struct aiocb **aiocbp,
+ _In_opt_ struct timespec *timeout
+ );
+ }
+360 AUE_GETRESUID STD {
+ int getresuid(
+ _Out_opt_ uid_t *ruid,
+ _Out_opt_ uid_t *euid,
+ _Out_opt_ uid_t *suid
+ );
+ }
+361 AUE_GETRESGID STD {
+ int getresgid(
+ _Out_opt_ gid_t *rgid,
+ _Out_opt_ gid_t *egid,
+ _Out_opt_ gid_t *sgid
+ );
+ }
+362 AUE_KQUEUE STD {
+ int kqueue(void);
+ }
+363 AUE_KEVENT COMPAT11 {
+ int kevent(
+ int fd,
+ _In_reads_opt_(nchanges) struct kevent_freebsd11 *changelist,
+ int nchanges,
+ _Out_writes_opt_(nevents) struct kevent_freebsd11 *eventlist,
+ int nevents,
+ _In_opt_ const struct timespec *timeout
+ );
+ }
364 AUE_NULL OBSOL __cap_get_proc
365 AUE_NULL OBSOL __cap_set_proc
366 AUE_NULL OBSOL __cap_get_fd
@@ -828,518 +1937,1210 @@
368 AUE_NULL OBSOL __cap_set_fd
369 AUE_NULL OBSOL __cap_set_file
370 AUE_NULL UNIMPL nosys
-371 AUE_EXTATTR_SET_FD STD { ssize_t extattr_set_fd(int fd, \
- int attrnamespace, \
- _In_z_ const char *attrname, \
- _In_reads_bytes_(nbytes) void *data, \
- size_t nbytes); }
-372 AUE_EXTATTR_GET_FD STD { ssize_t extattr_get_fd(int fd, \
- int attrnamespace, \
- _In_z_ const char *attrname, \
- _Out_writes_bytes_(nbytes) void *data, \
- size_t nbytes); }
-373 AUE_EXTATTR_DELETE_FD STD { int extattr_delete_fd(int fd, \
- int attrnamespace, \
- _In_z_ const char *attrname); }
-374 AUE_SETUGID STD { int __setugid(int flag); }
+371 AUE_EXTATTR_SET_FD STD {
+ ssize_t extattr_set_fd(
+ int fd,
+ int attrnamespace,
+ _In_z_ const char *attrname,
+ _In_reads_bytes_(nbytes) void *data,
+ size_t nbytes
+ );
+ }
+372 AUE_EXTATTR_GET_FD STD {
+ ssize_t extattr_get_fd(
+ int fd,
+ int attrnamespace,
+ _In_z_ const char *attrname,
+ _Out_writes_bytes_(nbytes) void *data,
+ size_t nbytes
+ );
+ }
+373 AUE_EXTATTR_DELETE_FD STD {
+ int extattr_delete_fd(
+ int fd,
+ int attrnamespace,
+ _In_z_ const char *attrname
+ );
+ }
+374 AUE_SETUGID STD {
+ int __setugid(
+ int flag
+ );
+ }
375 AUE_NULL OBSOL nfsclnt
-376 AUE_EACCESS STD { int eaccess(_In_z_ char *path, int amode); }
-377 AUE_NULL NOSTD|NOTSTATIC { int afs3_syscall(long syscall, \
- long parm1, long parm2, long parm3, \
- long parm4, long parm5, long parm6); }
-378 AUE_NMOUNT STD { int nmount( \
- _In_reads_(iovcnt) struct iovec *iovp, \
- unsigned int iovcnt, int flags); }
+376 AUE_EACCESS STD {
+ int eaccess(
+ _In_z_ const char *path,
+ int amode
+ );
+ }
+377 AUE_NULL NOSTD|NOTSTATIC {
+ int afs3_syscall(
+ long syscall,
+ long parm1,
+ long parm2,
+ long parm3,
+ long parm4,
+ long parm5,
+ long parm6
+ );
+ }
+378 AUE_NMOUNT STD {
+ int nmount(
+ _In_reads_(iovcnt) struct iovec *iovp,
+ unsigned int iovcnt,
+ int flags
+ );
+ }
379 AUE_NULL OBSOL kse_exit
380 AUE_NULL OBSOL kse_wakeup
381 AUE_NULL OBSOL kse_create
382 AUE_NULL OBSOL kse_thr_interrupt
383 AUE_NULL OBSOL kse_release
-384 AUE_NULL STD { int __mac_get_proc( \
- _In_ struct mac *mac_p); }
-385 AUE_NULL STD { int __mac_set_proc( \
- _In_ struct mac *mac_p); }
-386 AUE_NULL STD { int __mac_get_fd(int fd, \
- _In_ struct mac *mac_p); }
-387 AUE_NULL STD { int __mac_get_file( \
- _In_z_ const char *path_p, \
- _In_ struct mac *mac_p); }
-388 AUE_NULL STD { int __mac_set_fd(int fd, \
- _In_ struct mac *mac_p); }
-389 AUE_NULL STD { int __mac_set_file( \
- _In_z_ const char *path_p, \
- _In_ struct mac *mac_p); }
-390 AUE_NULL STD { int kenv(int what, \
- _In_z_opt_ const char *name, \
- _Inout_updates_opt_(len) \
- char *value, int len); }
-391 AUE_LCHFLAGS STD { int lchflags(_In_z_ const char *path, \
- u_long flags); }
-392 AUE_NULL STD { int uuidgen( \
- _Out_writes_(count) struct uuid *store, \
- int count); }
-393 AUE_SENDFILE STD { int sendfile(int fd, int s, \
- off_t offset, \
- size_t nbytes, \
- _In_opt_ struct sf_hdtr *hdtr, \
- _Out_opt_ off_t *sbytes, int flags); }
-394 AUE_NULL STD { int mac_syscall( \
- _In_z_ const char *policy, \
- int call, \
- _In_opt_ void *arg); }
-395 AUE_GETFSSTAT COMPAT11 { int getfsstat( \
- _Out_writes_bytes_opt_(bufsize) \
- struct freebsd11_statfs *buf, \
- long bufsize, int mode); }
-396 AUE_STATFS COMPAT11 { int statfs(_In_z_ char *path, \
- _Out_ struct freebsd11_statfs *buf); }
-397 AUE_FSTATFS COMPAT11 { int fstatfs(int fd, \
- _Out_ struct freebsd11_statfs *buf); }
-398 AUE_FHSTATFS COMPAT11 { int fhstatfs( \
- _In_ const struct fhandle *u_fhp, \
- _Out_ struct freebsd11_statfs *buf); }
+384 AUE_NULL STD {
+ int __mac_get_proc(
+ _In_ struct mac *mac_p
+ );
+ }
+385 AUE_NULL STD {
+ int __mac_set_proc(
+ _In_ struct mac *mac_p
+ );
+ }
+386 AUE_NULL STD {
+ int __mac_get_fd(
+ int fd,
+ _In_ struct mac *mac_p
+ );
+ }
+387 AUE_NULL STD {
+ int __mac_get_file(
+ _In_z_ const char *path_p,
+ _In_ struct mac *mac_p
+ );
+ }
+388 AUE_NULL STD {
+ int __mac_set_fd(
+ int fd,
+ _In_ struct mac *mac_p
+ );
+ }
+389 AUE_NULL STD {
+ int __mac_set_file(
+ _In_z_ const char *path_p,
+ _In_ struct mac *mac_p
+ );
+ }
+390 AUE_NULL STD {
+ int kenv(
+ int what,
+ _In_z_opt_ const char *name,
+ _Inout_updates_opt_(len) char *value,
+ int len
+ );
+ }
+391 AUE_LCHFLAGS STD {
+ int lchflags(
+ _In_z_ const char *path,
+ u_long flags
+ );
+ }
+392 AUE_NULL STD {
+ int uuidgen(
+ _Out_writes_(count) struct uuid *store,
+ int count
+ );
+ }
+393 AUE_SENDFILE STD {
+ int sendfile(
+ int fd,
+ int s,
+ off_t offset,
+ size_t nbytes,
+ _In_opt_ struct sf_hdtr *hdtr,
+ _Out_opt_ off_t *sbytes,
+ int flags
+ );
+ }
+394 AUE_NULL STD {
+ int mac_syscall(
+ _In_z_ const char *policy,
+ int call,
+ _In_opt_ void *arg
+ );
+ }
+395 AUE_GETFSSTAT COMPAT11 {
+ int getfsstat(
+ _Out_writes_bytes_opt_(bufsize) struct freebsd11_statfs *buf,
+ long bufsize,
+ int mode
+ );
+ }
+396 AUE_STATFS COMPAT11 {
+ int statfs(
+ _In_z_ const char *path,
+ _Out_ struct freebsd11_statfs *buf
+ );
+ }
+397 AUE_FSTATFS COMPAT11 {
+ int fstatfs(
+ int fd,
+ _Out_ struct freebsd11_statfs *buf
+ );
+ }
+398 AUE_FHSTATFS COMPAT11 {
+ int fhstatfs(
+ _In_ const struct fhandle *u_fhp,
+ _Out_ struct freebsd11_statfs *buf
+ );
+ }
399 AUE_NULL UNIMPL nosys
-400 AUE_SEMCLOSE NOSTD { int ksem_close(semid_t id); }
-401 AUE_SEMPOST NOSTD { int ksem_post(semid_t id); }
-402 AUE_SEMWAIT NOSTD { int ksem_wait(semid_t id); }
-403 AUE_SEMTRYWAIT NOSTD { int ksem_trywait(semid_t id); }
-404 AUE_SEMINIT NOSTD { int ksem_init(_Out_ semid_t *idp, \
- unsigned int value); }
-405 AUE_SEMOPEN NOSTD { int ksem_open(_Out_ semid_t *idp, \
- _In_z_ const char *name, int oflag, \
- mode_t mode, unsigned int value); }
-406 AUE_SEMUNLINK NOSTD { int ksem_unlink( \
- _In_z_ const char *name); }
-407 AUE_SEMGETVALUE NOSTD { int ksem_getvalue(semid_t id, \
- _Out_ int *val); }
-408 AUE_SEMDESTROY NOSTD { int ksem_destroy(semid_t id); }
-409 AUE_NULL STD { int __mac_get_pid(pid_t pid, \
- _In_ struct mac *mac_p); }
-410 AUE_NULL STD { int __mac_get_link( \
- _In_z_ const char *path_p, \
- _In_ struct mac *mac_p); }
-411 AUE_NULL STD { int __mac_set_link( \
- _In_z_ const char *path_p, \
- _In_ struct mac *mac_p); }
-412 AUE_EXTATTR_SET_LINK STD { ssize_t extattr_set_link( \
- _In_z_ const char *path, \
- int attrnamespace, \
- _In_z_ const char *attrname, \
- _In_reads_bytes_(nbytes) void *data, \
- size_t nbytes); }
-413 AUE_EXTATTR_GET_LINK STD { ssize_t extattr_get_link( \
- _In_z_ const char *path, \
- int attrnamespace, \
- _In_z_ const char *attrname, \
- _Out_writes_bytes_(nbytes) void *data, \
- size_t nbytes); }
-414 AUE_EXTATTR_DELETE_LINK STD { int extattr_delete_link( \
- _In_z_ const char *path, \
- int attrnamespace, \
- _In_z_ const char *attrname); }
-415 AUE_NULL STD { int __mac_execve(_In_z_ char *fname, \
- _In_ char **argv, \
- _In_ char **envv, \
- _In_ struct mac *mac_p); }
-416 AUE_SIGACTION STD { int sigaction(int sig, \
- _In_opt_ const struct sigaction *act, \
- _Out_opt_ struct sigaction *oact); }
-417 AUE_SIGRETURN STD { int sigreturn( \
- _In_ const struct __ucontext *sigcntxp); }
+400 AUE_SEMCLOSE NOSTD {
+ int ksem_close(
+ semid_t id
+ );
+ }
+401 AUE_SEMPOST NOSTD {
+ int ksem_post(
+ semid_t id
+ );
+ }
+402 AUE_SEMWAIT NOSTD {
+ int ksem_wait(
+ semid_t id
+ );
+ }
+403 AUE_SEMTRYWAIT NOSTD {
+ int ksem_trywait(
+ semid_t id
+ );
+ }
+404 AUE_SEMINIT NOSTD {
+ int ksem_init(
+ _Out_ semid_t *idp,
+ unsigned int value
+ );
+ }
+405 AUE_SEMOPEN NOSTD {
+ int ksem_open(
+ _Out_ semid_t *idp,
+ _In_z_ const char *name,
+ int oflag,
+ mode_t mode,
+ unsigned int value
+ );
+ }
+406 AUE_SEMUNLINK NOSTD {
+ int ksem_unlink(
+ _In_z_ const char *name
+ );
+ }
+407 AUE_SEMGETVALUE NOSTD {
+ int ksem_getvalue(
+ semid_t id,
+ _Out_ int *val
+ );
+ }
+408 AUE_SEMDESTROY NOSTD {
+ int ksem_destroy(
+ semid_t id
+ );
+ }
+409 AUE_NULL STD {
+ int __mac_get_pid(
+ pid_t pid,
+ _In_ struct mac *mac_p
+ );
+ }
+410 AUE_NULL STD {
+ int __mac_get_link(
+ _In_z_ const char *path_p,
+ _In_ struct mac *mac_p
+ );
+ }
+411 AUE_NULL STD {
+ int __mac_set_link(
+ _In_z_ const char *path_p,
+ _In_ struct mac *mac_p
+ );
+ }
+412 AUE_EXTATTR_SET_LINK STD {
+ ssize_t extattr_set_link(
+ _In_z_ const char *path,
+ int attrnamespace,
+ _In_z_ const char *attrname,
+ _In_reads_bytes_(nbytes) void *data,
+ size_t nbytes
+ );
+ }
+413 AUE_EXTATTR_GET_LINK STD {
+ ssize_t extattr_get_link(
+ _In_z_ const char *path,
+ int attrnamespace,
+ _In_z_ const char *attrname,
+ _Out_writes_bytes_(nbytes) void *data,
+ size_t nbytes
+ );
+ }
+414 AUE_EXTATTR_DELETE_LINK STD {
+ int extattr_delete_link(
+ _In_z_ const char *path,
+ int attrnamespace,
+ _In_z_ const char *attrname
+ );
+ }
+415 AUE_NULL STD {
+ int __mac_execve(
+ _In_z_ const char *fname,
+ _In_ char **argv,
+ _In_ char **envv,
+ _In_ struct mac *mac_p
+ );
+ }
+416 AUE_SIGACTION STD {
+ int sigaction(
+ int sig,
+ _In_opt_ const struct sigaction *act,
+ _Out_opt_ struct sigaction *oact
+ );
+ }
+417 AUE_SIGRETURN STD {
+ int sigreturn(
+ _In_ const struct __ucontext *sigcntxp
+ );
+ }
418 AUE_NULL UNIMPL __xstat
419 AUE_NULL UNIMPL __xfstat
420 AUE_NULL UNIMPL __xlstat
-421 AUE_NULL STD { int getcontext( \
- _Out_ struct __ucontext *ucp); }
-422 AUE_NULL STD { int setcontext( \
- _In_ const struct __ucontext *ucp); }
-423 AUE_NULL STD { int swapcontext( \
- _Out_ struct __ucontext *oucp, \
- _In_ const struct __ucontext *ucp); }
-424 AUE_SWAPOFF STD { int swapoff(_In_z_ const char *name); }
-425 AUE_ACL_GET_LINK STD { int __acl_get_link( \
- _In_z_ const char *path, acl_type_t type, \
- _Out_ struct acl *aclp); }
-426 AUE_ACL_SET_LINK STD { int __acl_set_link( \
- _In_z_ const char *path, acl_type_t type, \
- _In_ struct acl *aclp); }
-427 AUE_ACL_DELETE_LINK STD { int __acl_delete_link( \
- _In_z_ const char *path, \
- acl_type_t type); }
-428 AUE_ACL_CHECK_LINK STD { int __acl_aclcheck_link( \
- _In_z_ const char *path, acl_type_t type, \
- _In_ struct acl *aclp); }
-429 AUE_SIGWAIT STD { int sigwait(_In_ const sigset_t *set, \
- _Out_ int *sig); }
-430 AUE_THR_CREATE STD { int thr_create(_In_ ucontext_t *ctx, \
- _Out_ long *id, int flags); }
-431 AUE_THR_EXIT STD { void thr_exit(_Out_opt_ long *state); }
-432 AUE_NULL STD { int thr_self(_Out_ long *id); }
-433 AUE_THR_KILL STD { int thr_kill(long id, int sig); }
-434 AUE_NULL UNIMPL nosys
-435 AUE_NULL UNIMPL nosys
-436 AUE_JAIL_ATTACH STD { int jail_attach(int jid); }
-437 AUE_EXTATTR_LIST_FD STD { ssize_t extattr_list_fd(int fd, \
- int attrnamespace, \
- _Out_writes_bytes_opt_(nbytes) \
- void *data, \
- size_t nbytes); }
-438 AUE_EXTATTR_LIST_FILE STD { ssize_t extattr_list_file( \
- _In_z_ const char *path, \
- int attrnamespace, \
- _Out_writes_bytes_opt_(nbytes) \
- void *data, size_t nbytes); }
-439 AUE_EXTATTR_LIST_LINK STD { ssize_t extattr_list_link( \
- _In_z_ const char *path, \
- int attrnamespace, \
- _Out_writes_bytes_opt_(nbytes) \
- void *data, size_t nbytes); }
+421 AUE_NULL STD {
+ int getcontext(
+ _Out_ struct __ucontext *ucp
+ );
+ }
+422 AUE_NULL STD {
+ int setcontext(
+ _In_ const struct __ucontext *ucp
+ );
+ }
+423 AUE_NULL STD {
+ int swapcontext(
+ _Out_ struct __ucontext *oucp,
+ _In_ const struct __ucontext *ucp
+ );
+ }
+424 AUE_SWAPOFF STD {
+ int swapoff(
+ _In_z_ const char *name
+ );
+ }
+425 AUE_ACL_GET_LINK STD {
+ int __acl_get_link(
+ _In_z_ const char *path,
+ acl_type_t type,
+ _Out_ struct acl *aclp
+ );
+ }
+426 AUE_ACL_SET_LINK STD {
+ int __acl_set_link(
+ _In_z_ const char *path,
+ acl_type_t type,
+ _In_ struct acl *aclp
+ );
+ }
+427 AUE_ACL_DELETE_LINK STD {
+ int __acl_delete_link(
+ _In_z_ const char *path,
+ acl_type_t type
+ );
+ }
+428 AUE_ACL_CHECK_LINK STD {
+ int __acl_aclcheck_link(
+ _In_z_ const char *path,
+ acl_type_t type,
+ _In_ struct acl *aclp
+ );
+ }
+429 AUE_SIGWAIT STD {
+ int sigwait(
+ _In_ const sigset_t *set,
+ _Out_ int *sig
+ );
+ }
+430 AUE_THR_CREATE STD {
+ int thr_create(
+ _In_ ucontext_t *ctx,
+ _Out_ long *id,
+ int flags
+ );
+ }
+431 AUE_THR_EXIT STD {
+ void thr_exit(
+ _Out_opt_ long *state
+ );
+ }
+432 AUE_NULL STD {
+ int thr_self(
+ _Out_ long *id
+ );
+ }
+433 AUE_THR_KILL STD {
+ int thr_kill(
+ long id,
+ int sig
+ );
+ }
+434-435 AUE_NULL UNIMPL nosys
+436 AUE_JAIL_ATTACH STD {
+ int jail_attach(
+ int jid
+ );
+ }
+437 AUE_EXTATTR_LIST_FD STD {
+ ssize_t extattr_list_fd(
+ int fd,
+ int attrnamespace,
+ _Out_writes_bytes_opt_(nbytes) void *data,
+ size_t nbytes
+ );
+ }
+438 AUE_EXTATTR_LIST_FILE STD {
+ ssize_t extattr_list_file(
+ _In_z_ const char *path,
+ int attrnamespace,
+ _Out_writes_bytes_opt_(nbytes) void *data,
+ size_t nbytes
+ );
+ }
+439 AUE_EXTATTR_LIST_LINK STD {
+ ssize_t extattr_list_link(
+ _In_z_ const char *path,
+ int attrnamespace,
+ _Out_writes_bytes_opt_(nbytes)
+ void *data,
+ size_t nbytes
+ );
+ }
440 AUE_NULL OBSOL kse_switchin
-441 AUE_SEMWAIT NOSTD { int ksem_timedwait(semid_t id, \
- _In_opt_ const struct timespec *abstime); }
-442 AUE_NULL STD { int thr_suspend( \
- _In_opt_ const struct timespec *timeout); }
-443 AUE_NULL STD { int thr_wake(long id); }
-444 AUE_MODUNLOAD STD { int kldunloadf(int fileid, int flags); }
-445 AUE_AUDIT STD { int audit( \
- _In_reads_bytes_(length) \
- const void *record, \
- u_int length); }
-446 AUE_AUDITON STD { int auditon(int cmd, \
- _In_opt_ void *data, \
- u_int length); }
-447 AUE_GETAUID STD { int getauid(_Out_ uid_t *auid); }
-448 AUE_SETAUID STD { int setauid(_In_ uid_t *auid); }
-449 AUE_GETAUDIT STD { int getaudit( \
- _Out_ struct auditinfo *auditinfo); }
-450 AUE_SETAUDIT STD { int setaudit( \
- _In_ struct auditinfo *auditinfo); }
-451 AUE_GETAUDIT_ADDR STD { int getaudit_addr( \
- _Out_writes_bytes_(length) \
- struct auditinfo_addr *auditinfo_addr, \
- u_int length); }
-452 AUE_SETAUDIT_ADDR STD { int setaudit_addr( \
- _In_reads_bytes_(length) \
- struct auditinfo_addr *auditinfo_addr, \
- u_int length); }
-453 AUE_AUDITCTL STD { int auditctl(_In_z_ char *path); }
-454 AUE_NULL STD { int _umtx_op(_Inout_ void *obj, int op, \
- u_long val, _In_ void *uaddr1, \
- _In_ void *uaddr2); }
-455 AUE_THR_NEW STD { int thr_new(_In_ struct thr_param *param, \
- int param_size); }
-456 AUE_NULL STD { int sigqueue(pid_t pid, int signum, \
- _In_ void *value); }
+441 AUE_SEMWAIT NOSTD {
+ int ksem_timedwait(
+ semid_t id,
+ _In_opt_ const struct timespec *abstime
+ );
+ }
+442 AUE_NULL STD {
+ int thr_suspend(
+ _In_opt_ const struct timespec *timeout
+ );
+ }
+443 AUE_NULL STD {
+ int thr_wake(
+ long id
+ );
+ }
+444 AUE_MODUNLOAD STD {
+ int kldunloadf(
+ int fileid,
+ int flags
+ );
+ }
+445 AUE_AUDIT STD {
+ int audit(
+ _In_reads_bytes_(length) const void *record,
+ u_int length
+ );
+ }
+446 AUE_AUDITON STD {
+ int auditon(
+ int cmd,
+ _In_opt_ void *data,
+ u_int length
+ );
+ }
+447 AUE_GETAUID STD {
+ int getauid(
+ _Out_ uid_t *auid
+ );
+ }
+448 AUE_SETAUID STD {
+ int setauid(
+ _In_ uid_t *auid
+ );
+ }
+449 AUE_GETAUDIT STD {
+ int getaudit(
+ _Out_ struct auditinfo *auditinfo
+ );
+ }
+450 AUE_SETAUDIT STD {
+ int setaudit(
+ _In_ struct auditinfo *auditinfo
+ );
+ }
+451 AUE_GETAUDIT_ADDR STD {
+ int getaudit_addr(
+ _Out_writes_bytes_(length) struct auditinfo_addr *auditinfo_addr,
+ u_int length
+ );
+ }
+452 AUE_SETAUDIT_ADDR STD {
+ int setaudit_addr(
+ _In_reads_bytes_(length) struct auditinfo_addr *auditinfo_addr,
+ u_int length
+ );
+ }
+453 AUE_AUDITCTL STD {
+ int auditctl(
+ _In_z_ const char *path
+ );
+ }
+454 AUE_NULL STD {
+ int _umtx_op(
+ _Inout_ void *obj,
+ int op,
+ u_long val,
+ _In_ void *uaddr1,
+ _In_ void *uaddr2
+ );
+ }
+455 AUE_THR_NEW STD {
+ int thr_new(
+ _In_ struct thr_param *param,
+ int param_size
+ );
+ }
+456 AUE_NULL STD {
+ int sigqueue(
+ pid_t pid,
+ int signum,
+ _In_ void *value
+ );
+ }
-457 AUE_MQ_OPEN NOSTD { int kmq_open( \
- _In_z_ const char *path, \
- int flags, \
- mode_t mode, \
- _In_opt_ const struct mq_attr *attr); }
-458 AUE_MQ_SETATTR NOSTD { int kmq_setattr(int mqd, \
- _In_opt_ const struct mq_attr *attr, \
- _Out_opt_ struct mq_attr *oattr); }
-459 AUE_MQ_TIMEDRECEIVE NOSTD { int kmq_timedreceive( \
- int mqd, \
- _Out_writes_bytes_(msg_len) char *msg_ptr, \
- size_t msg_len, \
- _Out_opt_ unsigned *msg_prio, \
- _In_opt_ \
- const struct timespec *abs_timeout); }
-460 AUE_MQ_TIMEDSEND NOSTD { int kmq_timedsend(int mqd, \
- _In_reads_bytes_(msg_len) \
- const char *msg_ptr, size_t msg_len, \
- unsigned msg_prio, \
- _In_opt_ \
- const struct timespec *abs_timeout); }
-461 AUE_MQ_NOTIFY NOSTD { int kmq_notify(int mqd, \
- _In_opt_ const struct sigevent *sigev); }
-462 AUE_MQ_UNLINK NOSTD { int kmq_unlink(_In_z_ const char *path); }
-463 AUE_NULL STD { int abort2(_In_z_ const char *why, \
- int nargs, \
- _In_reads_(nargs) void **args); }
-464 AUE_NULL STD { int thr_set_name(long id, \
- _In_z_ const char *name); }
-465 AUE_AIO_FSYNC STD { int aio_fsync(int op, \
- _In_ struct aiocb *aiocbp); }
-466 AUE_RTPRIO STD { int rtprio_thread(int function, \
- lwpid_t lwpid, \
- _Inout_ struct rtprio *rtp); }
-467 AUE_NULL UNIMPL nosys
-468 AUE_NULL UNIMPL nosys
+457 AUE_MQ_OPEN NOSTD {
+ int kmq_open(
+ _In_z_ const char *path,
+ int flags,
+ mode_t mode,
+ _In_opt_ const struct mq_attr *attr
+ );
+ }
+458 AUE_MQ_SETATTR NOSTD {
+ int kmq_setattr(
+ int mqd,
+ _In_opt_ const struct mq_attr *attr,
+ _Out_opt_ struct mq_attr *oattr
+ );
+ }
+459 AUE_MQ_TIMEDRECEIVE NOSTD {
+ int kmq_timedreceive(
+ int mqd,
+ _Out_writes_bytes_(msg_len) char *msg_ptr,
+ size_t msg_len,
+ _Out_opt_ unsigned *msg_prio,
+ _In_opt_ const struct timespec *abs_timeout
+ );
+ }
+460 AUE_MQ_TIMEDSEND NOSTD {
+ int kmq_timedsend(
+ int mqd,
+ _In_reads_bytes_(msg_len) const char *msg_ptr,
+ size_t msg_len,
+ unsigned msg_prio,
+ _In_opt_ const struct timespec *abs_timeout
+ );
+ }
+461 AUE_MQ_NOTIFY NOSTD {
+ int kmq_notify(
+ int mqd,
+ _In_opt_ const struct sigevent *sigev
+ );
+ }
+462 AUE_MQ_UNLINK NOSTD {
+ int kmq_unlink(
+ _In_z_ const char *path
+ );
+ }
+463 AUE_NULL STD {
+ int abort2(
+ _In_z_ const char *why,
+ int nargs,
+ _In_reads_(nargs) void **args
+ );
+ }
+464 AUE_NULL STD {
+ int thr_set_name(
+ long id,
+ _In_z_ const char *name
+ );
+ }
+465 AUE_AIO_FSYNC STD {
+ int aio_fsync(
+ int op,
+ _In_ struct aiocb *aiocbp
+ );
+ }
+466 AUE_RTPRIO STD {
+ int rtprio_thread(
+ int function,
+ lwpid_t lwpid,
+ _Inout_ struct rtprio *rtp
+ );
+ }
+467-468 AUE_NULL UNIMPL nosys
469 AUE_NULL UNIMPL __getpath_fromfd
470 AUE_NULL UNIMPL __getpath_fromaddr
-471 AUE_SCTP_PEELOFF NOSTD { int sctp_peeloff(int sd, \
- uint32_t name); }
-472 AUE_SCTP_GENERIC_SENDMSG NOSTD { int sctp_generic_sendmsg( \
- int sd, \
- _In_reads_bytes_(mlen) caddr_t msg, \
- int mlen, \
- _In_reads_bytes_(tolen) \
- caddr_t to, \
- __socklen_t tolen, \
- _In_opt_ struct sctp_sndrcvinfo *sinfo, \
- int flags); }
-473 AUE_SCTP_GENERIC_SENDMSG_IOV NOSTD { \
- int sctp_generic_sendmsg_iov( \
- int sd, \
- _In_reads_(iovlen) struct iovec *iov, \
- int iovlen, \
- _In_reads_bytes_(tolen) \
- caddr_t to, \
- __socklen_t tolen, \
- _In_opt_ struct sctp_sndrcvinfo *sinfo, \
- int flags); }
-474 AUE_SCTP_GENERIC_RECVMSG NOSTD { int sctp_generic_recvmsg( \
- int sd, \
- _In_reads_(iovlen) struct iovec *iov, \
- int iovlen, \
- _Out_writes_bytes_(*fromlenaddr) \
- struct sockaddr *from, \
- _Out_ __socklen_t *fromlenaddr, \
- _In_opt_ struct sctp_sndrcvinfo *sinfo, \
- _Out_opt_ int *msg_flags); }
-475 AUE_PREAD STD { ssize_t pread(int fd, \
- _Out_writes_bytes_(nbyte) void *buf, \
- size_t nbyte, off_t offset); }
-476 AUE_PWRITE STD { ssize_t pwrite(int fd, \
- _In_reads_bytes_(nbyte) \
- const void *buf, \
- size_t nbyte, off_t offset); }
-477 AUE_MMAP STD { caddr_t mmap(_In_ caddr_t addr, size_t len, \
- int prot, int flags, int fd, off_t pos); }
-478 AUE_LSEEK STD { off_t lseek(int fd, off_t offset, \
- int whence); }
-479 AUE_TRUNCATE STD { int truncate(_In_z_ char *path, \
- off_t length); }
-480 AUE_FTRUNCATE STD { int ftruncate(int fd, off_t length); }
-481 AUE_THR_KILL2 STD { int thr_kill2(pid_t pid, long id, int sig); }
-482 AUE_SHMOPEN STD { int shm_open( \
- _In_z_ const char *path, \
- int flags, \
- mode_t mode); }
-483 AUE_SHMUNLINK STD { int shm_unlink(_In_z_ const char *path); }
-484 AUE_NULL STD { int cpuset(_Out_ cpusetid_t *setid); }
-485 AUE_NULL STD { int cpuset_setid(cpuwhich_t which, id_t id, \
- cpusetid_t setid); }
-486 AUE_NULL STD { int cpuset_getid(cpulevel_t level, \
- cpuwhich_t which, id_t id, \
- _Out_ cpusetid_t *setid); }
-487 AUE_NULL STD { int cpuset_getaffinity(cpulevel_t level, \
- cpuwhich_t which, id_t id, \
- size_t cpusetsize, \
- _Out_ cpuset_t *mask); }
-488 AUE_NULL STD { int cpuset_setaffinity(cpulevel_t level, \
- cpuwhich_t which, id_t id, \
- size_t cpusetsize, \
- _Out_ const cpuset_t *mask); }
-489 AUE_FACCESSAT STD { int faccessat(int fd, _In_z_ char *path, \
- int amode, int flag); }
-490 AUE_FCHMODAT STD { int fchmodat(int fd, \
- _In_z_ char *path, mode_t mode, \
- int flag); }
-491 AUE_FCHOWNAT STD { int fchownat(int fd, _In_z_ char *path, \
- uid_t uid, gid_t gid, int flag); }
-492 AUE_FEXECVE STD { int fexecve(int fd, \
- _In_ char **argv, \
- _In_ char **envv); }
-493 AUE_FSTATAT COMPAT11 { int fstatat(int fd, _In_z_ char *path, \
- _Out_ struct freebsd11_stat *buf, \
- int flag); }
-494 AUE_FUTIMESAT STD { int futimesat(int fd, \
- _In_z_ char *path, \
- _In_reads_(2) struct timeval *times); }
-495 AUE_LINKAT STD { int linkat(int fd1, \
- _In_z_ char *path1, \
- int fd2, \
- _In_z_ char *path2, \
- int flag); }
-496 AUE_MKDIRAT STD { int mkdirat(int fd, _In_z_ char *path, \
- mode_t mode); }
-497 AUE_MKFIFOAT STD { int mkfifoat(int fd, \
- _In_z_ char *path, mode_t mode); }
-498 AUE_MKNODAT COMPAT11 { int mknodat(int fd, _In_z_ char *path, \
- mode_t mode, \
- uint32_t dev); }
+471 AUE_SCTP_PEELOFF NOSTD {
+ int sctp_peeloff(
+ int sd,
+ uint32_t name
+ );
+ }
+472 AUE_SCTP_GENERIC_SENDMSG NOSTD {
+ int sctp_generic_sendmsg(
+ int sd,
+ _In_reads_bytes_(mlen) caddr_t msg,
+ int mlen,
+ _In_reads_bytes_(tolen) caddr_t to,
+ __socklen_t tolen,
+ _In_opt_ struct sctp_sndrcvinfo *sinfo,
+ int flags
+ );
+ }
+473 AUE_SCTP_GENERIC_SENDMSG_IOV NOSTD {
+ int sctp_generic_sendmsg_iov(
+ int sd,
+ _In_reads_(iovlen) struct iovec *iov,
+ int iovlen,
+ _In_reads_bytes_(tolen) caddr_t to,
+ __socklen_t tolen,
+ _In_opt_ struct sctp_sndrcvinfo *sinfo,
+ int flags
+ );
+ }
+474 AUE_SCTP_GENERIC_RECVMSG NOSTD {
+ int sctp_generic_recvmsg(
+ int sd,
+ _In_reads_(iovlen) struct iovec *iov,
+ int iovlen,
+ _Out_writes_bytes_(*fromlenaddr) struct sockaddr *from,
+ _Out_ __socklen_t *fromlenaddr,
+ _In_opt_ struct sctp_sndrcvinfo *sinfo,
+ _Out_opt_ int *msg_flags
+ );
+ }
+475 AUE_PREAD STD {
+ ssize_t pread(
+ int fd,
+ _Out_writes_bytes_(nbyte) void *buf,
+ size_t nbyte,
+ off_t offset
+ );
+ }
+476 AUE_PWRITE STD {
+ ssize_t pwrite(
+ int fd,
+ _In_reads_bytes_(nbyte) const void *buf,
+ size_t nbyte,
+ off_t offset
+ );
+ }
+477 AUE_MMAP STD {
+ caddr_t mmap(
+ _In_ caddr_t addr,
+ size_t len,
+ int prot,
+ int flags,
+ int fd,
+ off_t pos
+ );
+ }
+478 AUE_LSEEK STD {
+ off_t lseek(
+ int fd,
+ off_t offset,
+ int whence
+ );
+ }
+479 AUE_TRUNCATE STD {
+ int truncate(
+ _In_z_ const char *path,
+ off_t length
+ );
+ }
+480 AUE_FTRUNCATE STD {
+ int ftruncate(
+ int fd,
+ off_t length
+ );
+ }
+481 AUE_THR_KILL2 STD {
+ int thr_kill2(
+ pid_t pid,
+ long id,
+ int sig
+ );
+ }
+482 AUE_SHMOPEN STD {
+ int shm_open(
+ _In_z_ const char *path,
+ int flags,
+ mode_t mode
+ );
+ }
+483 AUE_SHMUNLINK STD {
+ int shm_unlink(
+ _In_z_ const char *path
+ );
+ }
+484 AUE_NULL STD {
+ int cpuset(
+ _Out_ cpusetid_t *setid
+ );
+ }
+485 AUE_NULL STD {
+ int cpuset_setid(
+ cpuwhich_t which,
+ id_t id,
+ cpusetid_t setid
+ );
+ }
+486 AUE_NULL STD {
+ int cpuset_getid(
+ cpulevel_t level,
+ cpuwhich_t which,
+ id_t id,
+ _Out_ cpusetid_t *setid
+ );
+ }
+487 AUE_NULL STD {
+ int cpuset_getaffinity(
+ cpulevel_t level,
+ cpuwhich_t which,
+ id_t id,
+ size_t cpusetsize,
+ _Out_ cpuset_t *mask
+ );
+ }
+488 AUE_NULL STD {
+ int cpuset_setaffinity(
+ cpulevel_t level,
+ cpuwhich_t which,
+ id_t id,
+ size_t cpusetsize,
+ _Out_ const cpuset_t *mask
+ );
+ }
+489 AUE_FACCESSAT STD {
+ int faccessat(
+ int fd,
+ _In_z_ const char *path,
+ int amode,
+ int flag
+ );
+ }
+490 AUE_FCHMODAT STD {
+ int fchmodat(
+ int fd,
+ _In_z_ const char *path,
+ mode_t mode,
+ int flag
+ );
+ }
+491 AUE_FCHOWNAT STD {
+ int fchownat(
+ int fd,
+ _In_z_ const char *path,
+ uid_t uid,
+ gid_t gid,
+ int flag
+ );
+ }
+492 AUE_FEXECVE STD {
+ int fexecve(
+ int fd,
+ _In_ char **argv,
+ _In_ char **envv
+ );
+ }
+493 AUE_FSTATAT COMPAT11 {
+ int fstatat(
+ int fd,
+ _In_z_ const char *path,
+ _Out_ struct freebsd11_stat *buf,
+ int flag
+ );
+ }
+494 AUE_FUTIMESAT STD {
+ int futimesat(
+ int fd,
+ _In_z_ const char *path,
+ _In_reads_(2) struct timeval *times
+ );
+ }
+495 AUE_LINKAT STD {
+ int linkat(
+ int fd1,
+ _In_z_ const char *path1,
+ int fd2,
+ _In_z_ const char *path2,
+ int flag
+ );
+ }
+496 AUE_MKDIRAT STD {
+ int mkdirat(
+ int fd,
+ _In_z_ const char *path,
+ mode_t mode
+ );
+ }
+497 AUE_MKFIFOAT STD {
+ int mkfifoat(
+ int fd,
+ _In_z_ const char *path,
+ mode_t mode
+ );
+ }
+498 AUE_MKNODAT COMPAT11 {
+ int mknodat(
+ int fd,
+ _In_z_ const char *path,
+ mode_t mode,
+ uint32_t dev
+ );
+ }
; XXX: see the comment for open
-499 AUE_OPENAT_RWTC STD { int openat(int fd, _In_z_ char *path, \
- int flag, mode_t mode); }
-500 AUE_READLINKAT STD { int readlinkat(int fd, \
- _In_z_ char *path, \
- _Out_writes_bytes_(bufsize) char *buf, \
- size_t bufsize); }
-501 AUE_RENAMEAT STD { int renameat(int oldfd, \
- _In_z_ char *old, \
- int newfd, _In_z_ char *new); }
-502 AUE_SYMLINKAT STD { int symlinkat(_In_z_ char *path1, int fd, \
- _In_z_ char *path2); }
-503 AUE_UNLINKAT STD { int unlinkat(int fd, _In_z_ char *path, \
- int flag); }
-504 AUE_POSIX_OPENPT STD { int posix_openpt(int flags); }
+499 AUE_OPENAT_RWTC STD {
+ int openat(
+ int fd,
+ _In_z_ const char *path,
+ int flag,
+ mode_t mode
+ );
+ }
+500 AUE_READLINKAT STD {
+ int readlinkat(
+ int fd,
+ _In_z_ const char *path,
+ _Out_writes_bytes_(bufsize) char *buf,
+ size_t bufsize
+ );
+ }
+501 AUE_RENAMEAT STD {
+ int renameat(
+ int oldfd,
+ _In_z_ const char *old,
+ int newfd,
+ _In_z_ const char *new
+ );
+ }
+502 AUE_SYMLINKAT STD {
+ int symlinkat(
+ _In_z_ const char *path1,
+ int fd,
+ _In_z_ const char *path2
+ );
+ }
+503 AUE_UNLINKAT STD {
+ int unlinkat(
+ int fd,
+ _In_z_ const char *path,
+ int flag
+ );
+ }
+504 AUE_POSIX_OPENPT STD {
+ int posix_openpt(
+ int flags
+ );
+ }
; 505 is initialised by the kgssapi code, if present.
-505 AUE_NULL NOSTD { int gssd_syscall(_In_z_ char *path); }
-506 AUE_JAIL_GET STD { int jail_get( \
- _In_reads_(iovcnt) struct iovec *iovp, \
- unsigned int iovcnt, int flags); }
-507 AUE_JAIL_SET STD { int jail_set( \
- _In_reads_(iovcnt) struct iovec *iovp, \
- unsigned int iovcnt, int flags); }
-508 AUE_JAIL_REMOVE STD { int jail_remove(int jid); }
-509 AUE_CLOSEFROM STD { int closefrom(int lowfd); }
-510 AUE_SEMCTL NOSTD { int __semctl(int semid, int semnum, \
- int cmd, _Inout_ union semun *arg); }
-511 AUE_MSGCTL NOSTD { int msgctl(int msqid, int cmd, \
- _Inout_opt_ struct msqid_ds *buf); }
-512 AUE_SHMCTL NOSTD { int shmctl(int shmid, int cmd, \
- _Inout_opt_ struct shmid_ds *buf); }
-513 AUE_LPATHCONF STD { int lpathconf(_In_z_ char *path, \
- int name); }
+505 AUE_NULL NOSTD {
+ int gssd_syscall(
+ _In_z_ const char *path
+ );
+ }
+506 AUE_JAIL_GET STD {
+ int jail_get(
+ _In_reads_(iovcnt) struct iovec *iovp,
+ unsigned int iovcnt,
+ int flags
+ );
+ }
+507 AUE_JAIL_SET STD {
+ int jail_set(
+ _In_reads_(iovcnt) struct iovec *iovp,
+ unsigned int iovcnt,
+ int flags
+ );
+ }
+508 AUE_JAIL_REMOVE STD {
+ int jail_remove(
+ int jid
+ );
+ }
+509 AUE_CLOSEFROM STD {
+ int closefrom(
+ int lowfd
+ );
+ }
+510 AUE_SEMCTL NOSTD {
+ int __semctl(
+ int semid,
+ int semnum,
+ int cmd,
+ _Inout_ union semun *arg
+ );
+ }
+511 AUE_MSGCTL NOSTD {
+ int msgctl(
+ int msqid,
+ int cmd,
+ _Inout_opt_ struct msqid_ds *buf
+ );
+ }
+512 AUE_SHMCTL NOSTD {
+ int shmctl(
+ int shmid,
+ int cmd,
+ _Inout_opt_ struct shmid_ds *buf
+ );
+ }
+513 AUE_LPATHCONF STD {
+ int lpathconf(
+ _In_z_ const char *path,
+ int name
+ );
+ }
514 AUE_NULL OBSOL cap_new
-515 AUE_CAP_RIGHTS_GET STD { int __cap_rights_get(int version, \
- int fd, _Out_ cap_rights_t *rightsp); }
-516 AUE_CAP_ENTER STD { int cap_enter(void); }
-517 AUE_CAP_GETMODE STD { int cap_getmode(_Out_ u_int *modep); }
-518 AUE_PDFORK STD { int pdfork(_Out_ int *fdp, int flags); }
-519 AUE_PDKILL STD { int pdkill(int fd, int signum); }
-520 AUE_PDGETPID STD { int pdgetpid(int fd, _Out_ pid_t *pidp); }
+515 AUE_CAP_RIGHTS_GET STD {
+ int __cap_rights_get(
+ int version,
+ int fd,
+ _Out_ cap_rights_t *rightsp
+ );
+ }
+516 AUE_CAP_ENTER STD {
+ int cap_enter(void);
+ }
+517 AUE_CAP_GETMODE STD {
+ int cap_getmode(
+ _Out_ u_int *modep
+ );
+ }
+518 AUE_PDFORK STD {
+ int pdfork(
+ _Out_ int *fdp,
+ int flags
+ );
+ }
+519 AUE_PDKILL STD {
+ int pdkill(
+ int fd,
+ int signum
+ );
+ }
+520 AUE_PDGETPID STD {
+ int pdgetpid(
+ int fd,
+ _Out_ pid_t *pidp
+ );
+ }
521 AUE_PDWAIT UNIMPL pdwait4
-522 AUE_SELECT STD { int pselect(int nd, \
- _Inout_opt_ fd_set *in, \
- _Inout_opt_ fd_set *ou, \
- _Inout_opt_ fd_set *ex, \
- _In_opt_ const struct timespec *ts, \
- _In_opt_ const sigset_t *sm); }
-523 AUE_GETLOGINCLASS STD { int getloginclass( \
- _Out_writes_z_(namelen) char *namebuf, \
- size_t namelen); }
-524 AUE_SETLOGINCLASS STD { int setloginclass( \
- _In_z_ const char *namebuf); }
-525 AUE_NULL STD { int rctl_get_racct( \
- _In_reads_bytes_(inbuflen) \
- const void *inbufp, size_t inbuflen, \
- _Out_writes_bytes_(outbuflen) \
- void *outbufp, size_t outbuflen); }
-526 AUE_NULL STD { int rctl_get_rules( \
- _In_reads_bytes_(inbuflen) \
- const void *inbufp, size_t inbuflen, \
- _Out_writes_bytes_(outbuflen) \
- void *outbufp, size_t outbuflen); }
-527 AUE_NULL STD { int rctl_get_limits( \
- _In_reads_bytes_(inbuflen) \
- const void *inbufp, size_t inbuflen, \
- _Out_writes_bytes_(outbuflen) \
- void *outbufp, size_t outbuflen); }
-528 AUE_NULL STD { int rctl_add_rule( \
- _In_reads_bytes_(inbuflen) \
- const void *inbufp, size_t inbuflen, \
- _Out_writes_bytes_(outbuflen) \
- void *outbufp, size_t outbuflen); }
-529 AUE_NULL STD { int rctl_remove_rule( \
- _In_reads_bytes_(inbuflen) \
- const void *inbufp, size_t inbuflen, \
- _Out_writes_bytes_(outbuflen) \
- void *outbufp, size_t outbuflen); }
-530 AUE_POSIX_FALLOCATE STD { int posix_fallocate(int fd, \
- off_t offset, off_t len); }
-531 AUE_POSIX_FADVISE STD { int posix_fadvise(int fd, \
- off_t offset, \
- off_t len, int advice); }
-532 AUE_WAIT6 STD { int wait6(idtype_t idtype, id_t id, \
- _Out_opt_ int *status, int options, \
- _Out_opt_ struct __wrusage *wrusage, \
- _Out_opt_ siginfo_t *info); }
-533 AUE_CAP_RIGHTS_LIMIT STD { int cap_rights_limit(int fd, \
- _In_ cap_rights_t *rightsp); }
-534 AUE_CAP_IOCTLS_LIMIT STD { int cap_ioctls_limit(int fd, \
- _In_reads_(ncmds) const u_long *cmds, \
- size_t ncmds); }
-535 AUE_CAP_IOCTLS_GET STD { ssize_t cap_ioctls_get(int fd, \
- _Out_writes_(maxcmds) u_long *cmds, \
- size_t maxcmds); }
-536 AUE_CAP_FCNTLS_LIMIT STD { int cap_fcntls_limit(int fd, \
- uint32_t fcntlrights); }
-537 AUE_CAP_FCNTLS_GET STD { int cap_fcntls_get(int fd, \
- _Out_ uint32_t *fcntlrightsp); }
-538 AUE_BINDAT STD { int bindat(int fd, int s, \
- _In_reads_bytes_(namelen) \
- caddr_t name, \
- int namelen); }
-539 AUE_CONNECTAT STD { int connectat(int fd, int s, \
- _In_reads_bytes_(namelen) \
- caddr_t name, \
- int namelen); }
-540 AUE_CHFLAGSAT STD { int chflagsat(int fd, \
- _In_z_ const char *path, \
- u_long flags, int atflag); }
-541 AUE_ACCEPT STD { int accept4(int s, \
- _Out_writes_bytes_opt_(*anamelen) \
- struct sockaddr *name, \
- _Inout_opt_ \
- __socklen_t *anamelen, \
- int flags); }
-542 AUE_PIPE STD { int pipe2(_Out_writes_(2) int *fildes, \
- int flags); }
-543 AUE_AIO_MLOCK STD { int aio_mlock(_In_ struct aiocb *aiocbp); }
-544 AUE_PROCCTL STD { int procctl(idtype_t idtype, id_t id, \
- int com, _In_opt_ void *data); }
-545 AUE_POLL STD { int ppoll( \
- _Inout_updates_(nfds) struct pollfd *fds, \
- u_int nfds, \
- _In_opt_ const struct timespec *ts, \
- _In_opt_ const sigset_t *set); }
-546 AUE_FUTIMES STD { int futimens(int fd, \
- _In_reads_(2) \
- struct timespec *times); }
-547 AUE_FUTIMESAT STD { int utimensat(int fd, \
- _In_z_ char *path, \
- _In_reads_(2) \
- struct timespec *times, \
- int flag); }
+522 AUE_SELECT STD {
+ int pselect(
+ int nd,
+ _Inout_opt_ fd_set *in,
+ _Inout_opt_ fd_set *ou,
+ _Inout_opt_ fd_set *ex,
+ _In_opt_ const struct timespec *ts,
+ _In_opt_ const sigset_t *sm
+ );
+ }
+523 AUE_GETLOGINCLASS STD {
+ int getloginclass(
+ _Out_writes_z_(namelen) char *namebuf,
+ size_t namelen
+ );
+ }
+524 AUE_SETLOGINCLASS STD {
+ int setloginclass(
+ _In_z_ const char *namebuf
+ );
+ }
+525 AUE_NULL STD {
+ int rctl_get_racct(
+ _In_reads_bytes_(inbuflen) const void *inbufp,
+ size_t inbuflen,
+ _Out_writes_bytes_(outbuflen) void *outbufp,
+ size_t outbuflen
+ );
+ }
+526 AUE_NULL STD {
+ int rctl_get_rules(
+ _In_reads_bytes_(inbuflen) const void *inbufp,
+ size_t inbuflen,
+ _Out_writes_bytes_(outbuflen) void *outbufp,
+ size_t outbuflen
+ );
+ }
+527 AUE_NULL STD {
+ int rctl_get_limits(
+ _In_reads_bytes_(inbuflen) const void *inbufp,
+ size_t inbuflen,
+ _Out_writes_bytes_(outbuflen) void *outbufp,
+ size_t outbuflen
+ );
+ }
+528 AUE_NULL STD {
+ int rctl_add_rule(
+ _In_reads_bytes_(inbuflen) const void *inbufp,
+ size_t inbuflen,
+ _Out_writes_bytes_(outbuflen) void *outbufp,
+ size_t outbuflen
+ );
+ }
+529 AUE_NULL STD {
+ int rctl_remove_rule(
+ _In_reads_bytes_(inbuflen) const void *inbufp,
+ size_t inbuflen,
+ _Out_writes_bytes_(outbuflen) void *outbufp,
+ size_t outbuflen
+ );
+ }
+530 AUE_POSIX_FALLOCATE STD {
+ int posix_fallocate(
+ int fd,
+ off_t offset,
+ off_t len
+ );
+ }
+531 AUE_POSIX_FADVISE STD {
+ int posix_fadvise(
+ int fd,
+ off_t offset,
+ off_t len,
+ int advice
+ );
+ }
+532 AUE_WAIT6 STD {
+ int wait6(
+ idtype_t idtype,
+ id_t id,
+ _Out_opt_ int *status,
+ int options,
+ _Out_opt_ struct __wrusage *wrusage,
+ _Out_opt_ siginfo_t *info
+ );
+ }
+533 AUE_CAP_RIGHTS_LIMIT STD {
+ int cap_rights_limit(
+ int fd,
+ _In_ cap_rights_t *rightsp
+ );
+ }
+534 AUE_CAP_IOCTLS_LIMIT STD {
+ int cap_ioctls_limit(
+ int fd,
+ _In_reads_(ncmds) const u_long *cmds,
+ size_t ncmds
+ );
+ }
+535 AUE_CAP_IOCTLS_GET STD {
+ ssize_t cap_ioctls_get(
+ int fd,
+ _Out_writes_(maxcmds) u_long *cmds,
+ size_t maxcmds
+ );
+ }
+536 AUE_CAP_FCNTLS_LIMIT STD {
+ int cap_fcntls_limit(
+ int fd,
+ uint32_t fcntlrights
+ );
+ }
+537 AUE_CAP_FCNTLS_GET STD {
+ int cap_fcntls_get(
+ int fd,
+ _Out_ uint32_t *fcntlrightsp
+ );
+ }
+538 AUE_BINDAT STD {
+ int bindat(
+ int fd,
+ int s,
+ _In_reads_bytes_(namelen) caddr_t name,
+ int namelen
+ );
+ }
+539 AUE_CONNECTAT STD {
+ int connectat(
+ int fd,
+ int s,
+ _In_reads_bytes_(namelen) caddr_t name,
+ int namelen
+ );
+ }
+540 AUE_CHFLAGSAT STD {
+ int chflagsat(
+ int fd,
+ _In_z_ const char *path,
+ u_long flags,
+ int atflag
+ );
+ }
+541 AUE_ACCEPT STD {
+ int accept4(
+ int s,
+ _Out_writes_bytes_opt_(*anamelen) struct sockaddr *name,
+ _Inout_opt_ __socklen_t *anamelen,
+ int flags
+ );
+ }
+542 AUE_PIPE STD {
+ int pipe2(
+ _Out_writes_(2) int *fildes,
+ int flags
+ );
+ }
+543 AUE_AIO_MLOCK STD {
+ int aio_mlock(
+ _In_ struct aiocb *aiocbp
+ );
+ }
+544 AUE_PROCCTL STD {
+ int procctl(
+ idtype_t idtype,
+ id_t id,
+ int com,
+ _In_opt_ void *data
+ );
+ }
+545 AUE_POLL STD {
+ int ppoll(
+ _Inout_updates_(nfds) struct pollfd *fds,
+ u_int nfds,
+ _In_opt_ const struct timespec *ts,
+ _In_opt_ const sigset_t *set
+ );
+ }
+546 AUE_FUTIMES STD {
+ int futimens(
+ int fd,
+ _In_reads_(2) struct timespec *times
+ );
+ }
+547 AUE_FUTIMESAT STD {
+ int utimensat(
+ int fd,
+ _In_z_ const char *path,
+ _In_reads_(2) struct timespec *times,
+ int flag
+ );
+ }
548 AUE_NULL OBSOL numa_getaffinity
549 AUE_NULL OBSOL numa_setaffinity
-550 AUE_FSYNC STD { int fdatasync(int fd); }
-551 AUE_FSTAT STD { int fstat(int fd, _Out_ struct stat *sb); }
-552 AUE_FSTATAT STD { int fstatat(int fd, _In_z_ char *path, \
- _Out_ struct stat *buf, int flag); }
-553 AUE_FHSTAT STD { int fhstat(_In_ const struct fhandle *u_fhp, \
- _Out_ struct stat *sb); }
-554 AUE_GETDIRENTRIES STD { ssize_t getdirentries(int fd, \
- _Out_writes_bytes_(count) char *buf, \
- size_t count, _Out_ off_t *basep); }
-555 AUE_STATFS STD { int statfs(_In_z_ char *path, \
- _Out_ struct statfs *buf); }
-556 AUE_FSTATFS STD { int fstatfs(int fd, \
- _Out_ struct statfs *buf); }
-557 AUE_GETFSSTAT STD { int getfsstat( \
- _Out_writes_bytes_opt_(bufsize) \
- struct statfs *buf, \
- long bufsize, int mode); }
-558 AUE_FHSTATFS STD { int fhstatfs( \
- _In_ const struct fhandle *u_fhp, \
- _Out_ struct statfs *buf); }
-559 AUE_MKNODAT STD { int mknodat(int fd, _In_z_ char *path, \
- mode_t mode, dev_t dev); }
-560 AUE_KEVENT STD { int kevent(int fd, \
- _In_reads_opt_(nchanges) \
- struct kevent *changelist, \
- int nchanges, \
- _Out_writes_opt_(nevents) \
- struct kevent *eventlist, int nevents, \
- _In_opt_ const struct timespec *timeout); }
-561 AUE_NULL STD { int cpuset_getdomain(cpulevel_t level, \
- cpuwhich_t which, id_t id, \
- size_t domainsetsize, \
- _Out_writes_bytes_(domainsetsize) \
- domainset_t *mask, \
- _Out_ int *policy); }
-562 AUE_NULL STD { int cpuset_setdomain(cpulevel_t level, \
- cpuwhich_t which, id_t id, \
- size_t domainsetsize, \
- _In_ domainset_t *mask, \
- int policy); }
-563 AUE_NULL STD { int getrandom( \
- _Out_writes_bytes_(buflen) void *buf, \
- size_t buflen, unsigned int flags); }
+550 AUE_FSYNC STD {
+ int fdatasync(
+ int fd
+ );
+ }
+551 AUE_FSTAT STD {
+ int fstat(
+ int fd,
+ _Out_ struct stat *sb
+ );
+ }
+552 AUE_FSTATAT STD {
+ int fstatat(
+ int fd,
+ _In_z_ const char *path,
+ _Out_ struct stat *buf,
+ int flag
+ );
+ }
+553 AUE_FHSTAT STD {
+ int fhstat(
+ _In_ const struct fhandle *u_fhp,
+ _Out_ struct stat *sb
+ );
+ }
+554 AUE_GETDIRENTRIES STD {
+ ssize_t getdirentries(
+ int fd,
+ _Out_writes_bytes_(count) char *buf,
+ size_t count,
+ _Out_ off_t *basep
+ );
+ }
+555 AUE_STATFS STD {
+ int statfs(
+ _In_z_ const char *path,
+ _Out_ struct statfs *buf
+ );
+ }
+556 AUE_FSTATFS STD {
+ int fstatfs(
+ int fd,
+ _Out_ struct statfs *buf
+ );
+ }
+557 AUE_GETFSSTAT STD {
+ int getfsstat(
+ _Out_writes_bytes_opt_(bufsize) struct statfs *buf,
+ long bufsize,
+ int mode
+ );
+ }
+558 AUE_FHSTATFS STD {
+ int fhstatfs(
+ _In_ const struct fhandle *u_fhp,
+ _Out_ struct statfs *buf
+ );
+ }
+559 AUE_MKNODAT STD {
+ int mknodat(
+ int fd,
+ _In_z_ const char *path,
+ mode_t mode,
+ dev_t dev
+ );
+ }
+560 AUE_KEVENT STD {
+ int kevent(
+ int fd,
+ _In_reads_opt_(nchanges) struct kevent *changelist,
+ int nchanges,
+ _Out_writes_opt_(nevents) struct kevent *eventlist,
+ int nevents,
+ _In_opt_ const struct timespec *timeout
+ );
+ }
+561 AUE_NULL STD {
+ int cpuset_getdomain(
+ cpulevel_t level,
+ cpuwhich_t which,
+ id_t id,
+ size_t domainsetsize,
+ _Out_writes_bytes_(domainsetsize) domainset_t *mask,
+ _Out_ int *policy
+ );
+ }
+562 AUE_NULL STD {
+ int cpuset_setdomain(
+ cpulevel_t level,
+ cpuwhich_t which,
+ id_t id,
+ size_t domainsetsize,
+ _In_ domainset_t *mask,
+ int policy
+ );
+ }
+563 AUE_NULL STD {
+ int getrandom(
+ _Out_writes_bytes_(buflen) void *buf,
+ size_t buflen,
+ unsigned int flags
+ );
+ }
; Please copy any additions and changes to the following compatability tables:
; sys/compat/freebsd32/syscalls.master
diff --git a/sys/kern/systrace_args.c b/sys/kern/systrace_args.c
index b1286261f56d..31283b9df1f0 100644
--- a/sys/kern/systrace_args.c
+++ b/sys/kern/systrace_args.c
@@ -49,9 +49,9 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* open */
case 5: {
struct open_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
iarg[1] = p->flags; /* int */
- iarg[2] = p->mode; /* int */
+ iarg[2] = p->mode; /* mode_t */
*n_args = 3;
break;
}
@@ -75,22 +75,22 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* link */
case 9: {
struct link_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
- uarg[1] = (intptr_t) p->link; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
+ uarg[1] = (intptr_t) p->link; /* const char * */
*n_args = 2;
break;
}
/* unlink */
case 10: {
struct unlink_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
*n_args = 1;
break;
}
/* chdir */
case 12: {
struct chdir_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
*n_args = 1;
break;
}
@@ -104,15 +104,15 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* chmod */
case 15: {
struct chmod_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
- iarg[1] = p->mode; /* int */
+ uarg[0] = (intptr_t) p->path; /* const char * */
+ iarg[1] = p->mode; /* mode_t */
*n_args = 2;
break;
}
/* chown */
case 16: {
struct chown_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
iarg[1] = p->uid; /* int */
iarg[2] = p->gid; /* int */
*n_args = 3;
@@ -133,8 +133,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* mount */
case 21: {
struct mount_args *p = params;
- uarg[0] = (intptr_t) p->type; /* char * */
- uarg[1] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->type; /* const char * */
+ uarg[1] = (intptr_t) p->path; /* const char * */
iarg[2] = p->flags; /* int */
uarg[3] = (intptr_t) p->data; /* caddr_t */
*n_args = 4;
@@ -143,7 +143,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* unmount */
case 22: {
struct unmount_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
iarg[1] = p->flags; /* int */
*n_args = 2;
break;
@@ -235,7 +235,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* access */
case 33: {
struct access_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
iarg[1] = p->amode; /* int */
*n_args = 2;
break;
@@ -322,14 +322,14 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* setlogin */
case 50: {
struct setlogin_args *p = params;
- uarg[0] = (intptr_t) p->namebuf; /* char * */
+ uarg[0] = (intptr_t) p->namebuf; /* const char * */
*n_args = 1;
break;
}
/* acct */
case 51: {
struct acct_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
*n_args = 1;
break;
}
@@ -360,22 +360,22 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* revoke */
case 56: {
struct revoke_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
*n_args = 1;
break;
}
/* symlink */
case 57: {
struct symlink_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
- uarg[1] = (intptr_t) p->link; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
+ uarg[1] = (intptr_t) p->link; /* const char * */
*n_args = 2;
break;
}
/* readlink */
case 58: {
struct readlink_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
uarg[1] = (intptr_t) p->buf; /* char * */
uarg[2] = p->count; /* size_t */
*n_args = 3;
@@ -384,7 +384,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* execve */
case 59: {
struct execve_args *p = params;
- uarg[0] = (intptr_t) p->fname; /* char * */
+ uarg[0] = (intptr_t) p->fname; /* const char * */
uarg[1] = (intptr_t) p->argv; /* char ** */
uarg[2] = (intptr_t) p->envv; /* char ** */
*n_args = 3;
@@ -393,14 +393,14 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* umask */
case 60: {
struct umask_args *p = params;
- iarg[0] = p->newmask; /* int */
+ iarg[0] = p->newmask; /* mode_t */
*n_args = 1;
break;
}
/* chroot */
case 61: {
struct chroot_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
*n_args = 1;
break;
}
@@ -508,7 +508,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* swapon */
case 85: {
struct swapon_args *p = params;
- uarg[0] = (intptr_t) p->name; /* char * */
+ uarg[0] = (intptr_t) p->name; /* const char * */
*n_args = 1;
break;
}
@@ -689,7 +689,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 124: {
struct fchmod_args *p = params;
iarg[0] = p->fd; /* int */
- iarg[1] = p->mode; /* int */
+ iarg[1] = p->mode; /* mode_t */
*n_args = 2;
break;
}
@@ -712,8 +712,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* rename */
case 128: {
struct rename_args *p = params;
- uarg[0] = (intptr_t) p->from; /* char * */
- uarg[1] = (intptr_t) p->to; /* char * */
+ uarg[0] = (intptr_t) p->from; /* const char * */
+ uarg[1] = (intptr_t) p->to; /* const char * */
*n_args = 2;
break;
}
@@ -728,8 +728,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* mkfifo */
case 132: {
struct mkfifo_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
- iarg[1] = p->mode; /* int */
+ uarg[0] = (intptr_t) p->path; /* const char * */
+ iarg[1] = p->mode; /* mode_t */
*n_args = 2;
break;
}
@@ -766,22 +766,22 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* mkdir */
case 136: {
struct mkdir_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
- iarg[1] = p->mode; /* int */
+ uarg[0] = (intptr_t) p->path; /* const char * */
+ iarg[1] = p->mode; /* mode_t */
*n_args = 2;
break;
}
/* rmdir */
case 137: {
struct rmdir_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
*n_args = 1;
break;
}
/* utimes */
case 138: {
struct utimes_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
uarg[1] = (intptr_t) p->tptr; /* struct timeval * */
*n_args = 2;
break;
@@ -802,7 +802,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* quotactl */
case 148: {
struct quotactl_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
iarg[1] = p->cmd; /* int */
iarg[2] = p->uid; /* int */
uarg[3] = (intptr_t) p->arg; /* caddr_t */
@@ -830,7 +830,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* lgetfh */
case 160: {
struct lgetfh_args *p = params;
- uarg[0] = (intptr_t) p->fname; /* char * */
+ uarg[0] = (intptr_t) p->fname; /* const char * */
uarg[1] = (intptr_t) p->fhp; /* struct fhandle * */
*n_args = 2;
break;
@@ -838,7 +838,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* getfh */
case 161: {
struct getfh_args *p = params;
- uarg[0] = (intptr_t) p->fname; /* char * */
+ uarg[0] = (intptr_t) p->fname; /* const char * */
uarg[1] = (intptr_t) p->fhp; /* struct fhandle * */
*n_args = 2;
break;
@@ -931,7 +931,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* pathconf */
case 191: {
struct pathconf_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
iarg[1] = p->name; /* int */
*n_args = 2;
break;
@@ -996,7 +996,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* undelete */
case 205: {
struct undelete_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
*n_args = 1;
break;
}
@@ -1290,7 +1290,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* lchown */
case 254: {
struct lchown_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
iarg[1] = p->uid; /* int */
iarg[2] = p->gid; /* int */
*n_args = 3;
@@ -1323,7 +1323,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* lchmod */
case 274: {
struct lchmod_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
iarg[1] = p->mode; /* mode_t */
*n_args = 2;
break;
@@ -1331,7 +1331,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* lutimes */
case 276: {
struct lutimes_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
uarg[1] = (intptr_t) p->tptr; /* struct timeval * */
*n_args = 2;
break;
@@ -1835,7 +1835,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* eaccess */
case 376: {
struct eaccess_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
iarg[1] = p->amode; /* int */
*n_args = 2;
break;
@@ -2083,7 +2083,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* __mac_execve */
case 415: {
struct __mac_execve_args *p = params;
- uarg[0] = (intptr_t) p->fname; /* char * */
+ uarg[0] = (intptr_t) p->fname; /* const char * */
uarg[1] = (intptr_t) p->argv; /* char ** */
uarg[2] = (intptr_t) p->envv; /* char ** */
uarg[3] = (intptr_t) p->mac_p; /* struct mac * */
@@ -2340,7 +2340,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* auditctl */
case 453: {
struct auditctl_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
*n_args = 1;
break;
}
@@ -2553,7 +2553,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* truncate */
case 479: {
struct truncate_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
iarg[1] = p->length; /* off_t */
*n_args = 2;
break;
@@ -2643,7 +2643,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 489: {
struct faccessat_args *p = params;
iarg[0] = p->fd; /* int */
- uarg[1] = (intptr_t) p->path; /* char * */
+ uarg[1] = (intptr_t) p->path; /* const char * */
iarg[2] = p->amode; /* int */
iarg[3] = p->flag; /* int */
*n_args = 4;
@@ -2653,7 +2653,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 490: {
struct fchmodat_args *p = params;
iarg[0] = p->fd; /* int */
- uarg[1] = (intptr_t) p->path; /* char * */
+ uarg[1] = (intptr_t) p->path; /* const char * */
iarg[2] = p->mode; /* mode_t */
iarg[3] = p->flag; /* int */
*n_args = 4;
@@ -2663,7 +2663,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 491: {
struct fchownat_args *p = params;
iarg[0] = p->fd; /* int */
- uarg[1] = (intptr_t) p->path; /* char * */
+ uarg[1] = (intptr_t) p->path; /* const char * */
uarg[2] = p->uid; /* uid_t */
iarg[3] = p->gid; /* gid_t */
iarg[4] = p->flag; /* int */
@@ -2683,7 +2683,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 494: {
struct futimesat_args *p = params;
iarg[0] = p->fd; /* int */
- uarg[1] = (intptr_t) p->path; /* char * */
+ uarg[1] = (intptr_t) p->path; /* const char * */
uarg[2] = (intptr_t) p->times; /* struct timeval * */
*n_args = 3;
break;
@@ -2692,9 +2692,9 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 495: {
struct linkat_args *p = params;
iarg[0] = p->fd1; /* int */
- uarg[1] = (intptr_t) p->path1; /* char * */
+ uarg[1] = (intptr_t) p->path1; /* const char * */
iarg[2] = p->fd2; /* int */
- uarg[3] = (intptr_t) p->path2; /* char * */
+ uarg[3] = (intptr_t) p->path2; /* const char * */
iarg[4] = p->flag; /* int */
*n_args = 5;
break;
@@ -2703,7 +2703,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 496: {
struct mkdirat_args *p = params;
iarg[0] = p->fd; /* int */
- uarg[1] = (intptr_t) p->path; /* char * */
+ uarg[1] = (intptr_t) p->path; /* const char * */
iarg[2] = p->mode; /* mode_t */
*n_args = 3;
break;
@@ -2712,7 +2712,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 497: {
struct mkfifoat_args *p = params;
iarg[0] = p->fd; /* int */
- uarg[1] = (intptr_t) p->path; /* char * */
+ uarg[1] = (intptr_t) p->path; /* const char * */
iarg[2] = p->mode; /* mode_t */
*n_args = 3;
break;
@@ -2721,7 +2721,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 499: {
struct openat_args *p = params;
iarg[0] = p->fd; /* int */
- uarg[1] = (intptr_t) p->path; /* char * */
+ uarg[1] = (intptr_t) p->path; /* const char * */
iarg[2] = p->flag; /* int */
iarg[3] = p->mode; /* mode_t */
*n_args = 4;
@@ -2731,7 +2731,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 500: {
struct readlinkat_args *p = params;
iarg[0] = p->fd; /* int */
- uarg[1] = (intptr_t) p->path; /* char * */
+ uarg[1] = (intptr_t) p->path; /* const char * */
uarg[2] = (intptr_t) p->buf; /* char * */
uarg[3] = p->bufsize; /* size_t */
*n_args = 4;
@@ -2741,18 +2741,18 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 501: {
struct renameat_args *p = params;
iarg[0] = p->oldfd; /* int */
- uarg[1] = (intptr_t) p->old; /* char * */
+ uarg[1] = (intptr_t) p->old; /* const char * */
iarg[2] = p->newfd; /* int */
- uarg[3] = (intptr_t) p->new; /* char * */
+ uarg[3] = (intptr_t) p->new; /* const char * */
*n_args = 4;
break;
}
/* symlinkat */
case 502: {
struct symlinkat_args *p = params;
- uarg[0] = (intptr_t) p->path1; /* char * */
+ uarg[0] = (intptr_t) p->path1; /* const char * */
iarg[1] = p->fd; /* int */
- uarg[2] = (intptr_t) p->path2; /* char * */
+ uarg[2] = (intptr_t) p->path2; /* const char * */
*n_args = 3;
break;
}
@@ -2760,7 +2760,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 503: {
struct unlinkat_args *p = params;
iarg[0] = p->fd; /* int */
- uarg[1] = (intptr_t) p->path; /* char * */
+ uarg[1] = (intptr_t) p->path; /* const char * */
iarg[2] = p->flag; /* int */
*n_args = 3;
break;
@@ -2775,7 +2775,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* gssd_syscall */
case 505: {
struct gssd_syscall_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
*n_args = 1;
break;
}
@@ -2842,7 +2842,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* lpathconf */
case 513: {
struct lpathconf_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
iarg[1] = p->name; /* int */
*n_args = 2;
break;
@@ -3129,7 +3129,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 547: {
struct utimensat_args *p = params;
iarg[0] = p->fd; /* int */
- uarg[1] = (intptr_t) p->path; /* char * */
+ uarg[1] = (intptr_t) p->path; /* const char * */
uarg[2] = (intptr_t) p->times; /* struct timespec * */
iarg[3] = p->flag; /* int */
*n_args = 4;
@@ -3154,7 +3154,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 552: {
struct fstatat_args *p = params;
iarg[0] = p->fd; /* int */
- uarg[1] = (intptr_t) p->path; /* char * */
+ uarg[1] = (intptr_t) p->path; /* const char * */
uarg[2] = (intptr_t) p->buf; /* struct stat * */
iarg[3] = p->flag; /* int */
*n_args = 4;
@@ -3181,7 +3181,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* statfs */
case 555: {
struct statfs_args *p = params;
- uarg[0] = (intptr_t) p->path; /* char * */
+ uarg[0] = (intptr_t) p->path; /* const char * */
uarg[1] = (intptr_t) p->buf; /* struct statfs * */
*n_args = 2;
break;
@@ -3215,7 +3215,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 559: {
struct mknodat_args *p = params;
iarg[0] = p->fd; /* int */
- uarg[1] = (intptr_t) p->path; /* char * */
+ uarg[1] = (intptr_t) p->path; /* const char * */
iarg[2] = p->mode; /* mode_t */
iarg[3] = p->dev; /* dev_t */
*n_args = 4;
@@ -3328,13 +3328,13 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 5:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "int";
break;
case 2:
- p = "int";
+ p = "mode_t";
break;
default:
break;
@@ -3373,10 +3373,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 9:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
default:
break;
@@ -3386,7 +3386,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 10:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
default:
break;
@@ -3396,7 +3396,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 12:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
default:
break;
@@ -3416,10 +3416,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 15:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
- p = "int";
+ p = "mode_t";
break;
default:
break;
@@ -3429,7 +3429,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 16:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "int";
@@ -3458,10 +3458,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 21:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
case 2:
p = "int";
@@ -3477,7 +3477,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 22:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "int";
@@ -3630,7 +3630,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 33:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "int";
@@ -3755,7 +3755,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 50:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
default:
break;
@@ -3765,7 +3765,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 51:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
default:
break;
@@ -3814,7 +3814,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 56:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
default:
break;
@@ -3824,10 +3824,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 57:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
default:
break;
@@ -3837,7 +3837,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 58:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "userland char *";
@@ -3853,7 +3853,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 59:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "userland char **";
@@ -3869,7 +3869,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 60:
switch(ndx) {
case 0:
- p = "int";
+ p = "mode_t";
break;
default:
break;
@@ -3879,7 +3879,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 61:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
default:
break;
@@ -4047,7 +4047,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 85:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
default:
break;
@@ -4358,7 +4358,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "int";
+ p = "mode_t";
break;
default:
break;
@@ -4394,10 +4394,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 128:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
default:
break;
@@ -4420,10 +4420,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 132:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
- p = "int";
+ p = "mode_t";
break;
default:
break;
@@ -4490,10 +4490,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 136:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
- p = "int";
+ p = "mode_t";
break;
default:
break;
@@ -4503,7 +4503,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 137:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
default:
break;
@@ -4513,7 +4513,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 138:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "userland struct timeval *";
@@ -4542,7 +4542,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 148:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "int";
@@ -4593,7 +4593,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 160:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "userland struct fhandle *";
@@ -4606,7 +4606,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 161:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "userland struct fhandle *";
@@ -4764,7 +4764,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 191:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "int";
@@ -4870,7 +4870,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 205:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
default:
break;
@@ -5301,7 +5301,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 254:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "int";
@@ -5356,7 +5356,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 274:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "mode_t";
@@ -5369,7 +5369,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 276:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "userland struct timeval *";
@@ -6195,7 +6195,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 376:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "int";
@@ -6620,7 +6620,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 415:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "userland char **";
@@ -7039,7 +7039,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 453:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
default:
break;
@@ -7436,7 +7436,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 479:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "off_t";
@@ -7596,7 +7596,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
case 2:
p = "int";
@@ -7615,7 +7615,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
case 2:
p = "mode_t";
@@ -7634,7 +7634,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
case 2:
p = "uid_t";
@@ -7672,7 +7672,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
case 2:
p = "userland struct timeval *";
@@ -7688,13 +7688,13 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
case 2:
p = "int";
break;
case 3:
- p = "userland char *";
+ p = "userland const char *";
break;
case 4:
p = "int";
@@ -7710,7 +7710,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
case 2:
p = "mode_t";
@@ -7726,7 +7726,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
case 2:
p = "mode_t";
@@ -7742,7 +7742,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
case 2:
p = "int";
@@ -7761,7 +7761,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
case 2:
p = "userland char *";
@@ -7780,13 +7780,13 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
case 2:
p = "int";
break;
case 3:
- p = "userland char *";
+ p = "userland const char *";
break;
default:
break;
@@ -7796,13 +7796,13 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 502:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "int";
break;
case 2:
- p = "userland char *";
+ p = "userland const char *";
break;
default:
break;
@@ -7815,7 +7815,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
case 2:
p = "int";
@@ -7838,7 +7838,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 505:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
default:
break;
@@ -7951,7 +7951,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 513:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "int";
@@ -8459,7 +8459,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
case 2:
p = "userland struct timespec *";
@@ -8501,7 +8501,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
case 2:
p = "userland struct stat *";
@@ -8549,7 +8549,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 555:
switch(ndx) {
case 0:
- p = "userland char *";
+ p = "userland const char *";
break;
case 1:
p = "userland struct statfs *";
@@ -8607,7 +8607,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "userland char *";
+ p = "userland const char *";
break;
case 2:
p = "mode_t";
diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c
index a54e8bc1b2cc..9ef0eb554461 100644
--- a/sys/kern/vfs_syscalls.c
+++ b/sys/kern/vfs_syscalls.c
@@ -298,7 +298,7 @@ sys_statfs(struct thread *td, struct statfs_args *uap)
}
int
-kern_statfs(struct thread *td, char *path, enum uio_seg pathseg,
+kern_statfs(struct thread *td, const char *path, enum uio_seg pathseg,
struct statfs *buf)
{
struct mount *mp;
@@ -876,7 +876,7 @@ sys_chdir(struct thread *td, struct chdir_args *uap)
}
int
-kern_chdir(struct thread *td, char *path, enum uio_seg pathseg)
+kern_chdir(struct thread *td, const char *path, enum uio_seg pathseg)
{
struct nameidata nd;
int error;
@@ -1032,7 +1032,7 @@ sys_openat(struct thread *td, struct openat_args *uap)
}
int
-kern_openat(struct thread *td, int fd, char *path, enum uio_seg pathseg,
+kern_openat(struct thread *td, int fd, const char *path, enum uio_seg pathseg,
int flags, int mode)
{
struct proc *p = td->td_proc;
@@ -1229,7 +1229,7 @@ freebsd11_mknodat(struct thread *td,
#endif /* COMPAT_FREEBSD11 */
int
-kern_mknodat(struct thread *td, int fd, char *path, enum uio_seg pathseg,
+kern_mknodat(struct thread *td, int fd, const char *path, enum uio_seg pathseg,
int mode, dev_t dev)
{
struct vnode *vp;
@@ -1358,8 +1358,8 @@ sys_mkfifoat(struct thread *td, struct mkfifoat_args *uap)
}
int
-kern_mkfifoat(struct thread *td, int fd, char *path, enum uio_seg pathseg,
- int mode)
+kern_mkfifoat(struct thread *td, int fd, const char *path,
+ enum uio_seg pathseg, int mode)
{
struct mount *mp;
struct vattr vattr;
@@ -1491,8 +1491,8 @@ can_hardlink(struct vnode *vp, struct ucred *cred)
}
int
-kern_linkat(struct thread *td, int fd1, int fd2, char *path1, char *path2,
- enum uio_seg segflg, int follow)
+kern_linkat(struct thread *td, int fd1, int fd2, const char *path1,
+ const char *path2, enum uio_seg segflg, int follow)
{
struct vnode *vp;
struct mount *mp;
@@ -1608,21 +1608,23 @@ sys_symlinkat(struct thread *td, struct symlinkat_args *uap)
}
int
-kern_symlinkat(struct thread *td, char *path1, int fd, char *path2,
+kern_symlinkat(struct thread *td, const char *path1, int fd, const char *path2,
enum uio_seg segflg)
{
struct mount *mp;
struct vattr vattr;
- char *syspath;
+ const char *syspath;
+ char *tmppath;
struct nameidata nd;
int error;
if (segflg == UIO_SYSSPACE) {
syspath = path1;
} else {
- syspath = uma_zalloc(namei_zone, M_WAITOK);
- if ((error = copyinstr(path1, syspath, MAXPATHLEN, NULL)) != 0)
+ tmppath = uma_zalloc(namei_zone, M_WAITOK);
+ if ((error = copyinstr(path1, tmppath, MAXPATHLEN, NULL)) != 0)
goto out;
+ syspath = tmppath;
}
AUDIT_ARG_TEXT(syspath);
restart:
@@ -1669,7 +1671,7 @@ out2:
vn_finished_write(mp);
out:
if (segflg != UIO_SYSSPACE)
- uma_zfree(namei_zone, syspath);
+ uma_zfree(namei_zone, tmppath);
return (error);
}
@@ -1746,7 +1748,7 @@ int
sys_unlinkat(struct thread *td, struct unlinkat_args *uap)
{
int fd, flag;
- char *path;
+ const char *path;
flag = uap->flag;
fd = uap->fd;
@@ -1762,8 +1764,8 @@ sys_unlinkat(struct thread *td, struct unlinkat_args *uap)
}
int
-kern_unlinkat(struct thread *td, int fd, char *path, enum uio_seg pathseg,
- int flag, ino_t oldinum)
+kern_unlinkat(struct thread *td, int fd, const char *path,
+ enum uio_seg pathseg, int flag, ino_t oldinum)
{
struct mount *mp;
struct vnode *vp;
@@ -1957,8 +1959,8 @@ sys_faccessat(struct thread *td, struct faccessat_args *uap)
}
int
-kern_accessat(struct thread *td, int fd, char *path, enum uio_seg pathseg,
- int flag, int amode)
+kern_accessat(struct thread *td, int fd, const char *path,
+ enum uio_seg pathseg, int flag, int amode)
{
struct ucred *cred, *usecred;
struct vnode *vp;
@@ -2270,7 +2272,7 @@ sys_fstatat(struct thread *td, struct fstatat_args *uap)
}
int
-kern_statat(struct thread *td, int flag, int fd, char *path,
+kern_statat(struct thread *td, int flag, int fd, const char *path,
enum uio_seg pathseg, struct stat *sbp,
void (*hook)(struct vnode *vp, struct stat *sbp))
{
@@ -2429,8 +2431,8 @@ sys_lpathconf(struct thread *td, struct lpathconf_args *uap)
}
int
-kern_pathconf(struct thread *td, char *path, enum uio_seg pathseg, int name,
- u_long flags, long *valuep)
+kern_pathconf(struct thread *td, const char *path, enum uio_seg pathseg,
+ int name, u_long flags, long *valuep)
{
struct nameidata nd;
int error;
@@ -2480,8 +2482,8 @@ sys_readlinkat(struct thread *td, struct readlinkat_args *uap)
}
int
-kern_readlinkat(struct thread *td, int fd, char *path, enum uio_seg pathseg,
- char *buf, enum uio_seg bufseg, size_t count)
+kern_readlinkat(struct thread *td, int fd, const char *path,
+ enum uio_seg pathseg, char *buf, enum uio_seg bufseg, size_t count)
{
struct vnode *vp;
struct iovec aiov;
@@ -2749,8 +2751,8 @@ sys_lchmod(struct thread *td, struct lchmod_args *uap)
}
int
-kern_fchmodat(struct thread *td, int fd, char *path, enum uio_seg pathseg,
- mode_t mode, int flag)
+kern_fchmodat(struct thread *td, int fd, const char *path,
+ enum uio_seg pathseg, mode_t mode, int flag)
{
struct nameidata nd;
int error, follow;
@@ -2861,8 +2863,8 @@ sys_fchownat(struct thread *td, struct fchownat_args *uap)
}
int
-kern_fchownat(struct thread *td, int fd, char *path, enum uio_seg pathseg,
- int uid, int gid, int flag)
+kern_fchownat(struct thread *td, int fd, const char *path,
+ enum uio_seg pathseg, int uid, int gid, int flag)
{
struct nameidata nd;
int error, follow;
@@ -3074,8 +3076,8 @@ sys_futimesat(struct thread *td, struct futimesat_args *uap)
}
int
-kern_utimesat(struct thread *td, int fd, char *path, enum uio_seg pathseg,
- struct timeval *tptr, enum uio_seg tptrseg)
+kern_utimesat(struct thread *td, int fd, const char *path,
+ enum uio_seg pathseg, struct timeval *tptr, enum uio_seg tptrseg)
{
struct nameidata nd;
struct timespec ts[2];
@@ -3112,7 +3114,7 @@ sys_lutimes(struct thread *td, struct lutimes_args *uap)
}
int
-kern_lutimes(struct thread *td, char *path, enum uio_seg pathseg,
+kern_lutimes(struct thread *td, const char *path, enum uio_seg pathseg,
struct timeval *tptr, enum uio_seg tptrseg)
{
struct timespec ts[2];
@@ -3214,8 +3216,9 @@ sys_utimensat(struct thread *td, struct utimensat_args *uap)
}
int
-kern_utimensat(struct thread *td, int fd, char *path, enum uio_seg pathseg,
- struct timespec *tptr, enum uio_seg tptrseg, int flag)
+kern_utimensat(struct thread *td, int fd, const char *path,
+ enum uio_seg pathseg, struct timespec *tptr, enum uio_seg tptrseg,
+ int flag)
{
struct nameidata nd;
struct timespec ts[2];
@@ -3262,7 +3265,8 @@ sys_truncate(struct thread *td, struct truncate_args *uap)
}
int
-kern_truncate(struct thread *td, char *path, enum uio_seg pathseg, off_t length)
+kern_truncate(struct thread *td, const char *path, enum uio_seg pathseg,
+ off_t length)
{
struct mount *mp;
struct vnode *vp;
@@ -3437,8 +3441,8 @@ sys_renameat(struct thread *td, struct renameat_args *uap)
}
int
-kern_renameat(struct thread *td, int oldfd, char *old, int newfd, char *new,
- enum uio_seg pathseg)
+kern_renameat(struct thread *td, int oldfd, const char *old, int newfd,
+ const char *new, enum uio_seg pathseg)
{
struct mount *mp = NULL;
struct vnode *tvp, *fvp, *tdvp;
@@ -3599,7 +3603,7 @@ sys_mkdirat(struct thread *td, struct mkdirat_args *uap)
}
int
-kern_mkdirat(struct thread *td, int fd, char *path, enum uio_seg segflg,
+kern_mkdirat(struct thread *td, int fd, const char *path, enum uio_seg segflg,
int mode)
{
struct mount *mp;
@@ -3676,7 +3680,7 @@ sys_rmdir(struct thread *td, struct rmdir_args *uap)
}
int
-kern_rmdirat(struct thread *td, int fd, char *path, enum uio_seg pathseg,
+kern_rmdirat(struct thread *td, int fd, const char *path, enum uio_seg pathseg,
int flag)
{
struct mount *mp;
diff --git a/sys/kern/vnode_if.src b/sys/kern/vnode_if.src
index 90cef879c4ed..5b21026b517b 100644
--- a/sys/kern/vnode_if.src
+++ b/sys/kern/vnode_if.src
@@ -325,7 +325,7 @@ vop_symlink {
OUT struct vnode **vpp;
IN struct componentname *cnp;
IN struct vattr *vap;
- IN char *target;
+ IN const char *target;
};
diff --git a/sys/mips/mips/trap.c b/sys/mips/mips/trap.c
index 746208e521fd..042b6450b2e1 100644
--- a/sys/mips/mips/trap.c
+++ b/sys/mips/mips/trap.c
@@ -1100,7 +1100,7 @@ err:
#endif
#ifdef KDB
- if (debugger_on_panic) {
+ if (debugger_on_trap) {
kdb_why = KDB_WHY_TRAP;
kdb_trap(type, 0, trapframe);
kdb_why = KDB_WHY_UNSET;
diff --git a/sys/modules/bios/smapi/Makefile b/sys/modules/bios/smapi/Makefile
index c488491bd525..90506d962dc6 100644
--- a/sys/modules/bios/smapi/Makefile
+++ b/sys/modules/bios/smapi/Makefile
@@ -8,5 +8,3 @@ SRCS= smapi.c smapi_bios.S \
bus_if.h device_if.h
.include <bsd.kmod.mk>
-
-CFLAGS.smapi_bios.S= ${CLANG_NO_IAS34}
diff --git a/sys/modules/linuxkpi/Makefile b/sys/modules/linuxkpi/Makefile
index bc9716b50ade..4a7e7544ae51 100644
--- a/sys/modules/linuxkpi/Makefile
+++ b/sys/modules/linuxkpi/Makefile
@@ -24,7 +24,8 @@ SRCS+= bus_if.h \
pci_if.h \
vnode_if.h \
usb_if.h \
- opt_usb.h
+ opt_usb.h \
+ opt_stack.h
CFLAGS+= -I${SRCTOP}/sys/compat/linuxkpi/common/include
CFLAGS+= -I${SRCTOP}/sys/contrib/ck/include
diff --git a/sys/net/if.c b/sys/net/if.c
index 9884cc6d9f43..4a89e37e5f53 100644
--- a/sys/net/if.c
+++ b/sys/net/if.c
@@ -1122,6 +1122,9 @@ if_detach_internal(struct ifnet *ifp, int vmove, struct if_clone **ifcp)
* the work top-down for us.
*/
if (shutdown) {
+ /* Give interface users the chance to clean up. */
+ EVENTHANDLER_INVOKE(ifnet_departure_event, ifp);
+
/*
* In case of a vmove we are done here without error.
* If we would signal an error it would lead to the same
diff --git a/sys/net/if_ethersubr.c b/sys/net/if_ethersubr.c
index 28dac295e077..628e32b17642 100644
--- a/sys/net/if_ethersubr.c
+++ b/sys/net/if_ethersubr.c
@@ -475,6 +475,26 @@ ether_output_frame(struct ifnet *ifp, struct mbuf *m)
return (0);
}
+#ifdef EXPERIMENTAL
+#if defined(INET6) && defined(INET)
+ /* draft-ietf-6man-ipv6only-flag */
+ /* Catch ETHERTYPE_IP, and ETHERTYPE_ARP if we are v6-only. */
+ if ((ND_IFINFO(ifp)->flags & ND6_IFF_IPV6_ONLY) != 0) {
+ struct ether_header *eh;
+
+ eh = mtod(m, struct ether_header *);
+ switch (ntohs(eh->ether_type)) {
+ case ETHERTYPE_IP:
+ case ETHERTYPE_ARP:
+ m_freem(m);
+ return (EAFNOSUPPORT);
+ /* NOTREACHED */
+ break;
+ };
+ }
+#endif
+#endif
+
/*
* Queue message on interface, update output statistics if
* successful, and start output if interface not yet active.
diff --git a/sys/net/if_lagg.c b/sys/net/if_lagg.c
index b70916be8148..a1e7908f55ed 100644
--- a/sys/net/if_lagg.c
+++ b/sys/net/if_lagg.c
@@ -633,11 +633,18 @@ lagg_port_create(struct lagg_softc *sc, struct ifnet *ifp)
{
struct lagg_softc *sc_ptr;
struct lagg_port *lp, *tlp;
- int error, i;
+ struct ifreq ifr;
+ int error, i, oldmtu;
uint64_t *pval;
LAGG_XLOCK_ASSERT(sc);
+ if (sc->sc_ifp == ifp) {
+ if_printf(sc->sc_ifp,
+ "cannot add a lagg to itself as a port\n");
+ return (EINVAL);
+ }
+
/* Limit the maximal number of lagg ports */
if (sc->sc_count >= LAGG_MAX_PORTS)
return (ENOSPC);
@@ -656,12 +663,25 @@ lagg_port_create(struct lagg_softc *sc, struct ifnet *ifp)
return (EPROTONOSUPPORT);
/* Allow the first Ethernet member to define the MTU */
- if (CK_SLIST_EMPTY(&sc->sc_ports))
+ oldmtu = -1;
+ if (CK_SLIST_EMPTY(&sc->sc_ports)) {
sc->sc_ifp->if_mtu = ifp->if_mtu;
- else if (sc->sc_ifp->if_mtu != ifp->if_mtu) {
- if_printf(sc->sc_ifp, "invalid MTU for %s\n",
- ifp->if_xname);
- return (EINVAL);
+ } else if (sc->sc_ifp->if_mtu != ifp->if_mtu) {
+ if (ifp->if_ioctl == NULL) {
+ if_printf(sc->sc_ifp, "cannot change MTU for %s\n",
+ ifp->if_xname);
+ return (EINVAL);
+ }
+ oldmtu = ifp->if_mtu;
+ strlcpy(ifr.ifr_name, ifp->if_xname, sizeof(ifr.ifr_name));
+ ifr.ifr_mtu = sc->sc_ifp->if_mtu;
+ error = (*ifp->if_ioctl)(ifp, SIOCSIFMTU, (caddr_t)&ifr);
+ if (error != 0) {
+ if_printf(sc->sc_ifp, "invalid MTU for %s\n",
+ ifp->if_xname);
+ return (error);
+ }
+ ifr.ifr_mtu = oldmtu;
}
lp = malloc(sizeof(struct lagg_port), M_DEVBUF, M_WAITOK|M_ZERO);
@@ -673,6 +693,9 @@ lagg_port_create(struct lagg_softc *sc, struct ifnet *ifp)
if (ifp == sc_ptr->sc_ifp) {
LAGG_LIST_UNLOCK();
free(lp, M_DEVBUF);
+ if (oldmtu != -1)
+ (*ifp->if_ioctl)(ifp, SIOCSIFMTU,
+ (caddr_t)&ifr);
return (EINVAL);
/* XXX disable stacking for the moment, its untested */
#ifdef LAGG_PORT_STACKING
@@ -681,6 +704,9 @@ lagg_port_create(struct lagg_softc *sc, struct ifnet *ifp)
LAGG_MAX_STACKING) {
LAGG_LIST_UNLOCK();
free(lp, M_DEVBUF);
+ if (oldmtu != -1)
+ (*ifp->if_ioctl)(ifp, SIOCSIFMTU,
+ (caddr_t)&ifr);
return (E2BIG);
}
#endif
@@ -746,6 +772,8 @@ lagg_port_create(struct lagg_softc *sc, struct ifnet *ifp)
if ((error = lagg_proto_addport(sc, lp)) != 0) {
/* Remove the port, without calling pr_delport. */
lagg_port_destroy(lp, 0);
+ if (oldmtu != -1)
+ (*ifp->if_ioctl)(ifp, SIOCSIFMTU, (caddr_t)&ifr);
return (error);
}
@@ -1464,8 +1492,31 @@ lagg_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
break;
case SIOCSIFMTU:
- /* Do not allow the MTU to be directly changed */
- error = EINVAL;
+ LAGG_XLOCK(sc);
+ CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
+ if (lp->lp_ioctl != NULL)
+ error = (*lp->lp_ioctl)(lp->lp_ifp, cmd, data);
+ else
+ error = EINVAL;
+ if (error != 0) {
+ if_printf(ifp,
+ "failed to change MTU to %d on port %s, "
+ "reverting all ports to original MTU (%d)\n",
+ ifr->ifr_mtu, lp->lp_ifp->if_xname, ifp->if_mtu);
+ break;
+ }
+ }
+ if (error == 0) {
+ ifp->if_mtu = ifr->ifr_mtu;
+ } else {
+ /* set every port back to the original MTU */
+ ifr->ifr_mtu = ifp->if_mtu;
+ CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
+ if (lp->lp_ioctl != NULL)
+ (*lp->lp_ioctl)(lp->lp_ifp, cmd, data);
+ }
+ }
+ LAGG_XUNLOCK(sc);
break;
default:
diff --git a/sys/net/pfvar.h b/sys/net/pfvar.h
index 5e80b66550de..2924c06dbc43 100644
--- a/sys/net/pfvar.h
+++ b/sys/net/pfvar.h
@@ -824,13 +824,21 @@ typedef void pfsync_update_state_t(struct pf_state *);
typedef void pfsync_delete_state_t(struct pf_state *);
typedef void pfsync_clear_states_t(u_int32_t, const char *);
typedef int pfsync_defer_t(struct pf_state *, struct mbuf *);
+typedef void pfsync_detach_ifnet_t(struct ifnet *);
-extern pfsync_state_import_t *pfsync_state_import_ptr;
-extern pfsync_insert_state_t *pfsync_insert_state_ptr;
-extern pfsync_update_state_t *pfsync_update_state_ptr;
-extern pfsync_delete_state_t *pfsync_delete_state_ptr;
-extern pfsync_clear_states_t *pfsync_clear_states_ptr;
-extern pfsync_defer_t *pfsync_defer_ptr;
+VNET_DECLARE(pfsync_state_import_t *, pfsync_state_import_ptr);
+#define V_pfsync_state_import_ptr VNET(pfsync_state_import_ptr)
+VNET_DECLARE(pfsync_insert_state_t *, pfsync_insert_state_ptr);
+#define V_pfsync_insert_state_ptr VNET(pfsync_insert_state_ptr)
+VNET_DECLARE(pfsync_update_state_t *, pfsync_update_state_ptr);
+#define V_pfsync_update_state_ptr VNET(pfsync_update_state_ptr)
+VNET_DECLARE(pfsync_delete_state_t *, pfsync_delete_state_ptr);
+#define V_pfsync_delete_state_ptr VNET(pfsync_delete_state_ptr)
+VNET_DECLARE(pfsync_clear_states_t *, pfsync_clear_states_ptr);
+#define V_pfsync_clear_states_ptr VNET(pfsync_clear_states_ptr)
+VNET_DECLARE(pfsync_defer_t *, pfsync_defer_ptr);
+#define V_pfsync_defer_ptr VNET(pfsync_defer_ptr)
+extern pfsync_detach_ifnet_t *pfsync_detach_ifnet_ptr;
void pfsync_state_export(struct pfsync_state *,
struct pf_state *);
@@ -1205,6 +1213,19 @@ struct pf_divert {
#define PFR_KENTRY_HIWAT 200000 /* Number of table entries */
/*
+ * Limit the length of the fragment queue traversal. Remember
+ * search entry points based on the fragment offset.
+ */
+#define PF_FRAG_ENTRY_POINTS 16
+
+/*
+ * The number of entries in the fragment queue must be limited
+ * to avoid DoS by linear seaching. Instead of a global limit,
+ * use a limit per entry point. For large packets these sum up.
+ */
+#define PF_FRAG_ENTRY_LIMIT 64
+
+/*
* ioctl parameter structures
*/
diff --git a/sys/net/vnet.c b/sys/net/vnet.c
index a124387f6f74..9a4321a8409b 100644
--- a/sys/net/vnet.c
+++ b/sys/net/vnet.c
@@ -171,7 +171,7 @@ static MALLOC_DEFINE(M_VNET_DATA, "vnet_data", "VNET data");
* we want the virtualized global variable space to be page-sized, we may
* have more space than that in practice.
*/
-#define VNET_MODMIN 8192
+#define VNET_MODMIN (8 * PAGE_SIZE)
#define VNET_SIZE roundup2(VNET_BYTES, PAGE_SIZE)
/*
diff --git a/sys/netinet/icmp6.h b/sys/netinet/icmp6.h
index 310684b8b47d..d4da06d0ff5e 100644
--- a/sys/netinet/icmp6.h
+++ b/sys/netinet/icmp6.h
@@ -244,6 +244,10 @@ struct nd_router_advert { /* router advertisement */
#define ND_RA_FLAG_RTPREF_LOW 0x18 /* 00011000 */
#define ND_RA_FLAG_RTPREF_RSV 0x10 /* 00010000 */
+#ifdef EXPERIMENTAL
+#define ND_RA_FLAG_IPV6_ONLY 0x02 /* draft-ietf-6man-ipv6only-flag */
+#endif
+
#define nd_ra_router_lifetime nd_ra_hdr.icmp6_data16[1]
struct nd_neighbor_solicit { /* neighbor solicitation */
diff --git a/sys/netinet/in_pcb.c b/sys/netinet/in_pcb.c
index 671a9c7c7faf..cd9ebec7a848 100644
--- a/sys/netinet/in_pcb.c
+++ b/sys/netinet/in_pcb.c
@@ -266,7 +266,7 @@ in_pcblbgroup_resize(struct inpcblbgrouphead *hdr,
grp = in_pcblbgroup_alloc(hdr, old_grp->il_vflag,
old_grp->il_lport, &old_grp->il_dependladdr, size);
- if (!grp)
+ if (grp == NULL)
return (NULL);
KASSERT(old_grp->il_inpcnt < grp->il_inpsiz,
@@ -288,21 +288,20 @@ static void
in_pcblbgroup_reorder(struct inpcblbgrouphead *hdr, struct inpcblbgroup **grpp,
int i)
{
- struct inpcblbgroup *grp = *grpp;
+ struct inpcblbgroup *grp, *new_grp;
+ grp = *grpp;
for (; i + 1 < grp->il_inpcnt; ++i)
grp->il_inp[i] = grp->il_inp[i + 1];
grp->il_inpcnt--;
if (grp->il_inpsiz > INPCBLBGROUP_SIZMIN &&
- grp->il_inpcnt <= (grp->il_inpsiz / 4)) {
+ grp->il_inpcnt <= grp->il_inpsiz / 4) {
/* Shrink this group. */
- struct inpcblbgroup *new_grp =
- in_pcblbgroup_resize(hdr, grp, grp->il_inpsiz / 2);
- if (new_grp)
+ new_grp = in_pcblbgroup_resize(hdr, grp, grp->il_inpsiz / 2);
+ if (new_grp != NULL)
*grpp = new_grp;
}
- return;
}
/*
@@ -316,31 +315,17 @@ in_pcbinslbgrouphash(struct inpcb *inp)
struct inpcbinfo *pcbinfo;
struct inpcblbgrouphead *hdr;
struct inpcblbgroup *grp;
- uint16_t hashmask, lport;
- uint32_t group_index;
- struct ucred *cred;
+ uint32_t idx;
pcbinfo = inp->inp_pcbinfo;
INP_WLOCK_ASSERT(inp);
INP_HASH_WLOCK_ASSERT(pcbinfo);
- if (pcbinfo->ipi_lbgrouphashbase == NULL)
- return (0);
-
- hashmask = pcbinfo->ipi_lbgrouphashmask;
- lport = inp->inp_lport;
- group_index = INP_PCBLBGROUP_PORTHASH(lport, hashmask);
- hdr = &pcbinfo->ipi_lbgrouphashbase[group_index];
-
/*
* Don't allow jailed socket to join local group.
*/
- if (inp->inp_socket != NULL)
- cred = inp->inp_socket->so_cred;
- else
- cred = NULL;
- if (cred != NULL && jailed(cred))
+ if (inp->inp_socket != NULL && jailed(inp->inp_socket->so_cred))
return (0);
#ifdef INET6
@@ -354,24 +339,23 @@ in_pcbinslbgrouphash(struct inpcb *inp)
}
#endif
- hdr = &pcbinfo->ipi_lbgrouphashbase[
- INP_PCBLBGROUP_PORTHASH(inp->inp_lport,
- pcbinfo->ipi_lbgrouphashmask)];
+ idx = INP_PCBLBGROUP_PORTHASH(inp->inp_lport,
+ pcbinfo->ipi_lbgrouphashmask);
+ hdr = &pcbinfo->ipi_lbgrouphashbase[idx];
CK_LIST_FOREACH(grp, hdr, il_list) {
if (grp->il_vflag == inp->inp_vflag &&
grp->il_lport == inp->inp_lport &&
memcmp(&grp->il_dependladdr,
- &inp->inp_inc.inc_ie.ie_dependladdr,
- sizeof(grp->il_dependladdr)) == 0) {
+ &inp->inp_inc.inc_ie.ie_dependladdr,
+ sizeof(grp->il_dependladdr)) == 0)
break;
- }
}
if (grp == NULL) {
/* Create new load balance group. */
grp = in_pcblbgroup_alloc(hdr, inp->inp_vflag,
inp->inp_lport, &inp->inp_inc.inc_ie.ie_dependladdr,
INPCBLBGROUP_SIZMIN);
- if (!grp)
+ if (grp == NULL)
return (ENOBUFS);
} else if (grp->il_inpcnt == grp->il_inpsiz) {
if (grp->il_inpsiz >= INPCBLBGROUP_SIZMAX) {
@@ -383,13 +367,13 @@ in_pcbinslbgrouphash(struct inpcb *inp)
/* Expand this local group. */
grp = in_pcblbgroup_resize(hdr, grp, grp->il_inpsiz * 2);
- if (!grp)
+ if (grp == NULL)
return (ENOBUFS);
}
KASSERT(grp->il_inpcnt < grp->il_inpsiz,
- ("invalid local group size %d and count %d",
- grp->il_inpsiz, grp->il_inpcnt));
+ ("invalid local group size %d and count %d", grp->il_inpsiz,
+ grp->il_inpcnt));
grp->il_inp[grp->il_inpcnt] = inp;
grp->il_inpcnt++;
@@ -412,9 +396,6 @@ in_pcbremlbgrouphash(struct inpcb *inp)
INP_WLOCK_ASSERT(inp);
INP_HASH_WLOCK_ASSERT(pcbinfo);
- if (pcbinfo->ipi_lbgrouphashbase == NULL)
- return;
-
hdr = &pcbinfo->ipi_lbgrouphashbase[
INP_PCBLBGROUP_PORTHASH(inp->inp_lport,
pcbinfo->ipi_lbgrouphashmask)];
@@ -2289,13 +2270,11 @@ in_pcblookup_hash_locked(struct inpcbinfo *pcbinfo, struct in_addr faddr,
/*
* Then look in lb group (for wildcard match).
*/
- if (pcbinfo->ipi_lbgrouphashbase != NULL &&
- (lookupflags & INPLOOKUP_WILDCARD)) {
+ if ((lookupflags & INPLOOKUP_WILDCARD) != 0) {
inp = in_pcblookup_lbgroup(pcbinfo, &laddr, lport, &faddr,
fport, lookupflags);
- if (inp != NULL) {
+ if (inp != NULL)
return (inp);
- }
}
/*
diff --git a/sys/netinet/ip_carp.c b/sys/netinet/ip_carp.c
index 6c15629389f6..8d11f379cbdf 100644
--- a/sys/netinet/ip_carp.c
+++ b/sys/netinet/ip_carp.c
@@ -2176,6 +2176,21 @@ static struct protosw in6_carp_protosw = {
};
#endif
+#ifdef VIMAGE
+#if defined(__i386__)
+/*
+ * XXX This is a hack to work around an absolute relocation outside
+ * set_vnet by one (on the stop symbol) for carpstats. Add a dummy variable
+ * to the end of the file in the hope that the linker will just keep the
+ * order (as it seems to do at the moment). It is understood to be fragile.
+ * See PR 230857 for a longer discussion of the problem and the referenced
+ * review for possible alternate solutions. Each is a hack; we just need
+ * the least intrusive one for the next release.
+ */
+VNET_DEFINE(char, carp_zzz) = 0xde;
+#endif
+#endif
+
static void
carp_mod_cleanup(void)
{
diff --git a/sys/netinet/ip_icmp.c b/sys/netinet/ip_icmp.c
index 123cf7e44fdb..5dd66dab24da 100644
--- a/sys/netinet/ip_icmp.c
+++ b/sys/netinet/ip_icmp.c
@@ -264,6 +264,7 @@ icmp_error(struct mbuf *n, int type, int code, uint32_t dest, int mtu)
if (n->m_len < oiphlen + tcphlen &&
(n = m_pullup(n, oiphlen + tcphlen)) == NULL)
goto freeit;
+ oip = mtod(n, struct ip *);
icmpelen = max(tcphlen, min(V_icmp_quotelen,
ntohs(oip->ip_len) - oiphlen));
} else if (oip->ip_p == IPPROTO_SCTP) {
diff --git a/sys/netinet/netdump/netdump_client.c b/sys/netinet/netdump/netdump_client.c
index a662fa86e9c7..9df2e731fa6e 100644
--- a/sys/netinet/netdump/netdump_client.c
+++ b/sys/netinet/netdump/netdump_client.c
@@ -117,18 +117,6 @@ static int restore_gw_addr;
static uint64_t rcvd_acks;
CTASSERT(sizeof(rcvd_acks) * NBBY == NETDUMP_MAX_IN_FLIGHT);
-/*
- * Times to poll the NIC (0.5ms each poll) before assuming packetloss
- * occurred (default to 1s).
- */
-static int nd_polls = 2000;
-
-/* Times to retransmit lost packets. */
-static int nd_retries = 10;
-
-/* Number of ARP retries. */
-static int nd_arp_retries = 3;
-
/* Configuration parameters. */
static struct netdump_conf nd_conf;
#define nd_server nd_conf.ndc_server
@@ -157,6 +145,18 @@ static char nd_path[MAXPATHLEN];
SYSCTL_STRING(_net_netdump, OID_AUTO, path, CTLFLAG_RW,
nd_path, sizeof(nd_path),
"Server path for output files");
+static int nd_polls = 2000;
+SYSCTL_INT(_net_netdump, OID_AUTO, polls, CTLFLAG_RWTUN,
+ &nd_polls, 0,
+ "Number of times to poll before assuming packet loss (0.5ms per poll)");
+static int nd_retries = 10;
+SYSCTL_INT(_net_netdump, OID_AUTO, retries, CTLFLAG_RWTUN,
+ &nd_retries, 0,
+ "Number of retransmit attempts before giving up");
+static int nd_arp_retries = 3;
+SYSCTL_INT(_net_netdump, OID_AUTO, arp_retries, CTLFLAG_RWTUN,
+ &nd_arp_retries, 0,
+ "Number of ARP attempts before giving up");
/*
* Checks for netdump support on a network interface
diff --git a/sys/netinet/tcp_syncache.c b/sys/netinet/tcp_syncache.c
index 4480ed43c238..100229a254e8 100644
--- a/sys/netinet/tcp_syncache.c
+++ b/sys/netinet/tcp_syncache.c
@@ -581,15 +581,28 @@ syncache_chkrst(struct in_conninfo *inc, struct tcphdr *th, struct mbuf *m)
/*
* If the RST bit is set, check the sequence number to see
* if this is a valid reset segment.
+ *
* RFC 793 page 37:
* In all states except SYN-SENT, all reset (RST) segments
* are validated by checking their SEQ-fields. A reset is
* valid if its sequence number is in the window.
*
- * The sequence number in the reset segment is normally an
- * echo of our outgoing acknowlegement numbers, but some hosts
- * send a reset with the sequence number at the rightmost edge
- * of our receive window, and we have to handle this case.
+ * RFC 793 page 69:
+ * There are four cases for the acceptability test for an incoming
+ * segment:
+ *
+ * Segment Receive Test
+ * Length Window
+ * ------- ------- -------------------------------------------
+ * 0 0 SEG.SEQ = RCV.NXT
+ * 0 >0 RCV.NXT =< SEG.SEQ < RCV.NXT+RCV.WND
+ * >0 0 not acceptable
+ * >0 >0 RCV.NXT =< SEG.SEQ < RCV.NXT+RCV.WND
+ * or RCV.NXT =< SEG.SEQ+SEG.LEN-1 < RCV.NXT+RCV.WND
+ *
+ * Note that when receiving a SYN segment in the LISTEN state,
+ * IRS is set to SEG.SEQ and RCV.NXT is set to SEG.SEQ+1, as
+ * described in RFC 793, page 66.
*/
if ((SEQ_GEQ(th->th_seq, sc->sc_irs + 1) &&
SEQ_LT(th->th_seq, sc->sc_irs + 1 + sc->sc_wnd)) ||
diff --git a/sys/netinet6/in6_pcb.c b/sys/netinet6/in6_pcb.c
index 7880fbd26336..e4f9d947511b 100644
--- a/sys/netinet6/in6_pcb.c
+++ b/sys/netinet6/in6_pcb.c
@@ -1161,13 +1161,11 @@ in6_pcblookup_hash_locked(struct inpcbinfo *pcbinfo, struct in6_addr *faddr,
/*
* Then look in lb group (for wildcard match).
*/
- if (pcbinfo->ipi_lbgrouphashbase != NULL &&
- (lookupflags & INPLOOKUP_WILDCARD)) {
+ if ((lookupflags & INPLOOKUP_WILDCARD) != 0) {
inp = in6_pcblookup_lbgroup(pcbinfo, laddr, lport, faddr,
fport, lookupflags);
- if (inp != NULL) {
+ if (inp != NULL)
return (inp);
- }
}
/*
diff --git a/sys/netinet6/nd6.h b/sys/netinet6/nd6.h
index cabfeec0dbac..7544d23c6660 100644
--- a/sys/netinet6/nd6.h
+++ b/sys/netinet6/nd6.h
@@ -90,6 +90,9 @@ struct nd_ifinfo {
#define ND6_IFF_NO_RADR 0x40
#define ND6_IFF_NO_PREFER_IFACE 0x80 /* XXX: not related to ND. */
#define ND6_IFF_NO_DAD 0x100
+#ifdef EXPERIMENTAL
+#define ND6_IFF_IPV6_ONLY 0x200 /* draft-ietf-6man-ipv6only-flag */
+#endif
#ifdef _KERNEL
#define ND_IFINFO(ifp) \
diff --git a/sys/netinet6/nd6_rtr.c b/sys/netinet6/nd6_rtr.c
index ec1aa13730ca..e00a0d857b5c 100644
--- a/sys/netinet6/nd6_rtr.c
+++ b/sys/netinet6/nd6_rtr.c
@@ -204,6 +204,37 @@ nd6_rs_input(struct mbuf *m, int off, int icmp6len)
m_freem(m);
}
+#ifdef EXPERIMENTAL
+/*
+ * An initial update routine for draft-ietf-6man-ipv6only-flag.
+ * We need to iterate over all default routers for the given
+ * interface to see whether they are all advertising the "6"
+ * (IPv6-Only) flag. If they do set, otherwise unset, the
+ * interface flag we later use to filter on.
+ */
+static void
+defrtr_ipv6_only_ifp(struct ifnet *ifp)
+{
+ struct nd_defrouter *dr;
+ bool ipv6_only;
+
+ ipv6_only = true;
+ ND6_RLOCK();
+ TAILQ_FOREACH(dr, &V_nd_defrouter, dr_entry)
+ if (dr->ifp == ifp &&
+ (dr->raflags & ND_RA_FLAG_IPV6_ONLY) == 0)
+ ipv6_only = false;
+ ND6_RUNLOCK();
+
+ IF_AFDATA_WLOCK(ifp);
+ if (ipv6_only)
+ ND_IFINFO(ifp)->flags |= ND6_IFF_IPV6_ONLY;
+ else
+ ND_IFINFO(ifp)->flags &= ~ND6_IFF_IPV6_ONLY;
+ IF_AFDATA_WUNLOCK(ifp);
+}
+#endif
+
/*
* Receive Router Advertisement Message.
*
@@ -319,6 +350,9 @@ nd6_ra_input(struct mbuf *m, int off, int icmp6len)
}
}
dr = defrtrlist_update(&dr0);
+#ifdef EXPERIMENTAL
+ defrtr_ipv6_only_ifp(ifp);
+#endif
}
/*
@@ -692,6 +726,10 @@ defrouter_del(struct nd_defrouter *dr)
if (ND_IFINFO(dr->ifp)->flags & ND6_IFF_ACCEPT_RTADV)
rt6_flush(&dr->rtaddr, dr->ifp);
+#ifdef EXPERIMENTAL
+ defrtr_ipv6_only_ifp(dr->ifp);
+#endif
+
if (dr->installed) {
deldr = dr;
defrouter_delreq(dr);
diff --git a/sys/netpfil/pf/if_pfsync.c b/sys/netpfil/pf/if_pfsync.c
index 71d6696d4eff..5d36793b032e 100644
--- a/sys/netpfil/pf/if_pfsync.c
+++ b/sys/netpfil/pf/if_pfsync.c
@@ -281,6 +281,7 @@ static void pfsync_bulk_status(u_int8_t);
static void pfsync_bulk_update(void *);
static void pfsync_bulk_fail(void *);
+static void pfsync_detach_ifnet(struct ifnet *);
#ifdef IPSEC
static void pfsync_update_net_tdb(struct pfsync_tdb *);
#endif
@@ -1362,10 +1363,10 @@ pfsyncioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
sc->sc_maxupdates = pfsyncr.pfsyncr_maxupdates;
if (pfsyncr.pfsyncr_defer) {
sc->sc_flags |= PFSYNCF_DEFER;
- pfsync_defer_ptr = pfsync_defer;
+ V_pfsync_defer_ptr = pfsync_defer;
} else {
sc->sc_flags &= ~PFSYNCF_DEFER;
- pfsync_defer_ptr = NULL;
+ V_pfsync_defer_ptr = NULL;
}
if (sifp == NULL) {
@@ -1393,6 +1394,7 @@ pfsyncioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
if (error) {
if_rele(sifp);
free(mship, M_PFSYNC);
+ PFSYNC_UNLOCK(sc);
return (error);
}
}
@@ -2292,6 +2294,29 @@ pfsync_multicast_cleanup(struct pfsync_softc *sc)
imo->imo_multicast_ifp = NULL;
}
+void
+pfsync_detach_ifnet(struct ifnet *ifp)
+{
+ struct pfsync_softc *sc = V_pfsyncif;
+
+ if (sc == NULL)
+ return;
+
+ PFSYNC_LOCK(sc);
+
+ if (sc->sc_sync_if == ifp) {
+ /* We don't need mutlicast cleanup here, because the interface
+ * is going away. We do need to ensure we don't try to do
+ * cleanup later.
+ */
+ sc->sc_imo.imo_membership = NULL;
+ sc->sc_imo.imo_multicast_ifp = NULL;
+ sc->sc_sync_if = NULL;
+ }
+
+ PFSYNC_UNLOCK(sc);
+}
+
#ifdef INET
extern struct domain inetdomain;
static struct protosw in_pfsync_protosw = {
@@ -2311,12 +2336,12 @@ pfsync_pointers_init()
{
PF_RULES_WLOCK();
- pfsync_state_import_ptr = pfsync_state_import;
- pfsync_insert_state_ptr = pfsync_insert_state;
- pfsync_update_state_ptr = pfsync_update_state;
- pfsync_delete_state_ptr = pfsync_delete_state;
- pfsync_clear_states_ptr = pfsync_clear_states;
- pfsync_defer_ptr = pfsync_defer;
+ V_pfsync_state_import_ptr = pfsync_state_import;
+ V_pfsync_insert_state_ptr = pfsync_insert_state;
+ V_pfsync_update_state_ptr = pfsync_update_state;
+ V_pfsync_delete_state_ptr = pfsync_delete_state;
+ V_pfsync_clear_states_ptr = pfsync_clear_states;
+ V_pfsync_defer_ptr = pfsync_defer;
PF_RULES_WUNLOCK();
}
@@ -2325,12 +2350,12 @@ pfsync_pointers_uninit()
{
PF_RULES_WLOCK();
- pfsync_state_import_ptr = NULL;
- pfsync_insert_state_ptr = NULL;
- pfsync_update_state_ptr = NULL;
- pfsync_delete_state_ptr = NULL;
- pfsync_clear_states_ptr = NULL;
- pfsync_defer_ptr = NULL;
+ V_pfsync_state_import_ptr = NULL;
+ V_pfsync_insert_state_ptr = NULL;
+ V_pfsync_update_state_ptr = NULL;
+ V_pfsync_delete_state_ptr = NULL;
+ V_pfsync_clear_states_ptr = NULL;
+ V_pfsync_defer_ptr = NULL;
PF_RULES_WUNLOCK();
}
@@ -2347,6 +2372,8 @@ vnet_pfsync_init(const void *unused __unused)
if_clone_detach(V_pfsync_cloner);
log(LOG_INFO, "swi_add() failed in %s\n", __func__);
}
+
+ pfsync_pointers_init();
}
VNET_SYSINIT(vnet_pfsync_init, SI_SUB_PROTO_FIREWALL, SI_ORDER_ANY,
vnet_pfsync_init, NULL);
@@ -2355,14 +2382,13 @@ static void
vnet_pfsync_uninit(const void *unused __unused)
{
+ pfsync_pointers_uninit();
+
if_clone_detach(V_pfsync_cloner);
swi_remove(V_pfsync_swi_cookie);
}
-/*
- * Detach after pf is gone; otherwise we might touch pfsync memory
- * from within pf after freeing pfsync.
- */
-VNET_SYSUNINIT(vnet_pfsync_uninit, SI_SUB_INIT_IF, SI_ORDER_SECOND,
+
+VNET_SYSUNINIT(vnet_pfsync_uninit, SI_SUB_PROTO_FIREWALL, SI_ORDER_FOURTH,
vnet_pfsync_uninit, NULL);
static int
@@ -2371,6 +2397,8 @@ pfsync_init()
#ifdef INET
int error;
+ pfsync_detach_ifnet_ptr = pfsync_detach_ifnet;
+
error = pf_proto_register(PF_INET, &in_pfsync_protosw);
if (error)
return (error);
@@ -2380,7 +2408,6 @@ pfsync_init()
return (error);
}
#endif
- pfsync_pointers_init();
return (0);
}
@@ -2388,8 +2415,7 @@ pfsync_init()
static void
pfsync_uninit()
{
-
- pfsync_pointers_uninit();
+ pfsync_detach_ifnet_ptr = NULL;
#ifdef INET
ipproto_unregister(IPPROTO_PFSYNC);
@@ -2406,12 +2432,6 @@ pfsync_modevent(module_t mod, int type, void *data)
case MOD_LOAD:
error = pfsync_init();
break;
- case MOD_QUIESCE:
- /*
- * Module should not be unloaded due to race conditions.
- */
- error = EBUSY;
- break;
case MOD_UNLOAD:
pfsync_uninit();
break;
diff --git a/sys/netpfil/pf/pf.c b/sys/netpfil/pf/pf.c
index 1ec7df96b43f..4c8afca756e9 100644
--- a/sys/netpfil/pf/pf.c
+++ b/sys/netpfil/pf/pf.c
@@ -1268,8 +1268,8 @@ pf_state_insert(struct pfi_kif *kif, struct pf_state_key *skw,
refcount_init(&s->refs, 2);
counter_u64_add(V_pf_status.fcounters[FCNT_STATE_INSERT], 1);
- if (pfsync_insert_state_ptr != NULL)
- pfsync_insert_state_ptr(s);
+ if (V_pfsync_insert_state_ptr != NULL)
+ V_pfsync_insert_state_ptr(s);
/* Returns locked. */
return (0);
@@ -1672,8 +1672,8 @@ pf_unlink_state(struct pf_state *s, u_int flags)
LIST_REMOVE(s, entry);
pf_src_tree_remove_state(s);
- if (pfsync_delete_state_ptr != NULL)
- pfsync_delete_state_ptr(s);
+ if (V_pfsync_delete_state_ptr != NULL)
+ V_pfsync_delete_state_ptr(s);
STATE_DEC_COUNTERS(s);
@@ -3582,7 +3582,7 @@ pf_test_rule(struct pf_rule **rm, struct pf_state **sm, int direction,
if (*sm != NULL && !((*sm)->state_flags & PFSTATE_NOSYNC) &&
direction == PF_OUT &&
- pfsync_defer_ptr != NULL && pfsync_defer_ptr(*sm, m))
+ V_pfsync_defer_ptr != NULL && V_pfsync_defer_ptr(*sm, m))
/*
* We want the state created, but we dont
* want to send this in case a partner
@@ -5996,8 +5996,8 @@ pf_test(int dir, int pflags, struct ifnet *ifp, struct mbuf **m0, struct inpcb *
action = pf_test_state_tcp(&s, dir, kif, m, off, h, &pd,
&reason);
if (action == PF_PASS) {
- if (pfsync_update_state_ptr != NULL)
- pfsync_update_state_ptr(s);
+ if (V_pfsync_update_state_ptr != NULL)
+ V_pfsync_update_state_ptr(s);
r = s->rule.ptr;
a = s->anchor.ptr;
log = s->log;
@@ -6025,8 +6025,8 @@ pf_test(int dir, int pflags, struct ifnet *ifp, struct mbuf **m0, struct inpcb *
}
action = pf_test_state_udp(&s, dir, kif, m, off, h, &pd);
if (action == PF_PASS) {
- if (pfsync_update_state_ptr != NULL)
- pfsync_update_state_ptr(s);
+ if (V_pfsync_update_state_ptr != NULL)
+ V_pfsync_update_state_ptr(s);
r = s->rule.ptr;
a = s->anchor.ptr;
log = s->log;
@@ -6048,8 +6048,8 @@ pf_test(int dir, int pflags, struct ifnet *ifp, struct mbuf **m0, struct inpcb *
action = pf_test_state_icmp(&s, dir, kif, m, off, h, &pd,
&reason);
if (action == PF_PASS) {
- if (pfsync_update_state_ptr != NULL)
- pfsync_update_state_ptr(s);
+ if (V_pfsync_update_state_ptr != NULL)
+ V_pfsync_update_state_ptr(s);
r = s->rule.ptr;
a = s->anchor.ptr;
log = s->log;
@@ -6071,8 +6071,8 @@ pf_test(int dir, int pflags, struct ifnet *ifp, struct mbuf **m0, struct inpcb *
default:
action = pf_test_state_other(&s, dir, kif, m, &pd);
if (action == PF_PASS) {
- if (pfsync_update_state_ptr != NULL)
- pfsync_update_state_ptr(s);
+ if (V_pfsync_update_state_ptr != NULL)
+ V_pfsync_update_state_ptr(s);
r = s->rule.ptr;
a = s->anchor.ptr;
log = s->log;
@@ -6435,8 +6435,8 @@ pf_test6(int dir, int pflags, struct ifnet *ifp, struct mbuf **m0, struct inpcb
action = pf_test_state_tcp(&s, dir, kif, m, off, h, &pd,
&reason);
if (action == PF_PASS) {
- if (pfsync_update_state_ptr != NULL)
- pfsync_update_state_ptr(s);
+ if (V_pfsync_update_state_ptr != NULL)
+ V_pfsync_update_state_ptr(s);
r = s->rule.ptr;
a = s->anchor.ptr;
log = s->log;
@@ -6464,8 +6464,8 @@ pf_test6(int dir, int pflags, struct ifnet *ifp, struct mbuf **m0, struct inpcb
}
action = pf_test_state_udp(&s, dir, kif, m, off, h, &pd);
if (action == PF_PASS) {
- if (pfsync_update_state_ptr != NULL)
- pfsync_update_state_ptr(s);
+ if (V_pfsync_update_state_ptr != NULL)
+ V_pfsync_update_state_ptr(s);
r = s->rule.ptr;
a = s->anchor.ptr;
log = s->log;
@@ -6494,8 +6494,8 @@ pf_test6(int dir, int pflags, struct ifnet *ifp, struct mbuf **m0, struct inpcb
action = pf_test_state_icmp(&s, dir, kif,
m, off, h, &pd, &reason);
if (action == PF_PASS) {
- if (pfsync_update_state_ptr != NULL)
- pfsync_update_state_ptr(s);
+ if (V_pfsync_update_state_ptr != NULL)
+ V_pfsync_update_state_ptr(s);
r = s->rule.ptr;
a = s->anchor.ptr;
log = s->log;
@@ -6508,8 +6508,8 @@ pf_test6(int dir, int pflags, struct ifnet *ifp, struct mbuf **m0, struct inpcb
default:
action = pf_test_state_other(&s, dir, kif, m, &pd);
if (action == PF_PASS) {
- if (pfsync_update_state_ptr != NULL)
- pfsync_update_state_ptr(s);
+ if (V_pfsync_update_state_ptr != NULL)
+ V_pfsync_update_state_ptr(s);
r = s->rule.ptr;
a = s->anchor.ptr;
log = s->log;
diff --git a/sys/netpfil/pf/pf_if.c b/sys/netpfil/pf/pf_if.c
index 4e3689c9d855..76b8d4abd5af 100644
--- a/sys/netpfil/pf/pf_if.c
+++ b/sys/netpfil/pf/pf_if.c
@@ -165,8 +165,10 @@ pfi_cleanup_vnet(void)
RB_REMOVE(pfi_ifhead, &V_pfi_ifs, kif);
if (kif->pfik_group)
kif->pfik_group->ifg_pf_kif = NULL;
- if (kif->pfik_ifp)
+ if (kif->pfik_ifp) {
+ if_rele(kif->pfik_ifp);
kif->pfik_ifp->if_pf_kif = NULL;
+ }
free(kif, PFI_MTYPE);
}
@@ -322,6 +324,8 @@ pfi_attach_ifnet(struct ifnet *ifp)
V_pfi_update++;
kif = pfi_kif_attach(kif, ifp->if_xname);
+ if_ref(ifp);
+
kif->pfik_ifp = ifp;
ifp->if_pf_kif = kif;
@@ -553,7 +557,8 @@ pfi_instance_add(struct ifnet *ifp, int net, int flags)
if ((flags & PFI_AFLAG_PEER) &&
!(ifp->if_flags & IFF_POINTOPOINT))
continue;
- if ((flags & PFI_AFLAG_NETWORK) && af == AF_INET6 &&
+ if ((flags & (PFI_AFLAG_NETWORK | PFI_AFLAG_NOALIAS)) &&
+ af == AF_INET6 &&
IN6_IS_ADDR_LINKLOCAL(
&((struct sockaddr_in6 *)ia->ifa_addr)->sin6_addr))
continue;
@@ -833,6 +838,9 @@ pfi_detach_ifnet_event(void *arg __unused, struct ifnet *ifp)
{
struct pfi_kif *kif = (struct pfi_kif *)ifp->if_pf_kif;
+ if (pfsync_detach_ifnet_ptr)
+ pfsync_detach_ifnet_ptr(ifp);
+
if (kif == NULL)
return;
@@ -840,10 +848,13 @@ pfi_detach_ifnet_event(void *arg __unused, struct ifnet *ifp)
/* Avoid teardown race in the least expensive way. */
return;
}
+
PF_RULES_WLOCK();
V_pfi_update++;
pfi_kif_update(kif);
+ if_rele(kif->pfik_ifp);
+
kif->pfik_ifp = NULL;
ifp->if_pf_kif = NULL;
#ifdef ALTQ
diff --git a/sys/netpfil/pf/pf_ioctl.c b/sys/netpfil/pf/pf_ioctl.c
index ecc3b59edf49..3bb65ddbb2de 100644
--- a/sys/netpfil/pf/pf_ioctl.c
+++ b/sys/netpfil/pf/pf_ioctl.c
@@ -212,12 +212,14 @@ struct sx pf_ioctl_lock;
struct sx pf_end_lock;
/* pfsync */
-pfsync_state_import_t *pfsync_state_import_ptr = NULL;
-pfsync_insert_state_t *pfsync_insert_state_ptr = NULL;
-pfsync_update_state_t *pfsync_update_state_ptr = NULL;
-pfsync_delete_state_t *pfsync_delete_state_ptr = NULL;
-pfsync_clear_states_t *pfsync_clear_states_ptr = NULL;
-pfsync_defer_t *pfsync_defer_ptr = NULL;
+VNET_DEFINE(pfsync_state_import_t *, pfsync_state_import_ptr);
+VNET_DEFINE(pfsync_insert_state_t *, pfsync_insert_state_ptr);
+VNET_DEFINE(pfsync_update_state_t *, pfsync_update_state_ptr);
+VNET_DEFINE(pfsync_delete_state_t *, pfsync_delete_state_ptr);
+VNET_DEFINE(pfsync_clear_states_t *, pfsync_clear_states_ptr);
+VNET_DEFINE(pfsync_defer_t *, pfsync_defer_ptr);
+pfsync_detach_ifnet_t *pfsync_detach_ifnet_ptr;
+
/* pflog */
pflog_packet_t *pflog_packet_ptr = NULL;
@@ -1873,8 +1875,8 @@ relock_DIOCCLRSTATES:
PF_HASHROW_UNLOCK(ih);
}
psk->psk_killed = killed;
- if (pfsync_clear_states_ptr != NULL)
- pfsync_clear_states_ptr(V_pf_status.hostid, psk->psk_ifname);
+ if (V_pfsync_clear_states_ptr != NULL)
+ V_pfsync_clear_states_ptr(V_pf_status.hostid, psk->psk_ifname);
break;
}
@@ -1961,9 +1963,9 @@ relock_DIOCKILLSTATES:
error = EINVAL;
break;
}
- if (pfsync_state_import_ptr != NULL) {
+ if (V_pfsync_state_import_ptr != NULL) {
PF_RULES_RLOCK();
- error = pfsync_state_import_ptr(sp, PFSYNC_SI_IOCTL);
+ error = V_pfsync_state_import_ptr(sp, PFSYNC_SI_IOCTL);
PF_RULES_RUNLOCK();
} else
error = EOPNOTSUPP;
diff --git a/sys/netpfil/pf/pf_norm.c b/sys/netpfil/pf/pf_norm.c
index f5ef31de06a2..f10a87a895d6 100644
--- a/sys/netpfil/pf/pf_norm.c
+++ b/sys/netpfil/pf/pf_norm.c
@@ -2,7 +2,7 @@
* SPDX-License-Identifier: BSD-2-Clause
*
* Copyright 2001 Niels Provos <provos@citi.umich.edu>
- * Copyright 2011 Alexander Bluhm <bluhm@openbsd.org>
+ * Copyright 2011-2018 Alexander Bluhm <bluhm@openbsd.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -87,14 +87,17 @@ struct pf_fragment {
#define fr_af fr_key.frc_af
#define fr_proto fr_key.frc_proto
+ /* pointers to queue element */
+ struct pf_frent *fr_firstoff[PF_FRAG_ENTRY_POINTS];
+ /* count entries between pointers */
+ uint8_t fr_entries[PF_FRAG_ENTRY_POINTS];
RB_ENTRY(pf_fragment) fr_entry;
TAILQ_ENTRY(pf_fragment) frag_next;
uint32_t fr_timeout;
uint16_t fr_maxlen; /* maximum length of single fragment */
- uint16_t fr_entries; /* Total number of pf_fragment entries */
+ u_int16_t fr_holes; /* number of holes in the queue */
TAILQ_HEAD(pf_fragq, pf_frent) fr_queue;
};
-#define PF_MAX_FRENT_PER_FRAGMENT 64
struct pf_fragment_tag {
uint16_t ft_hdrlen; /* header length of reassembled pkt */
@@ -134,11 +137,18 @@ static void pf_remove_fragment(struct pf_fragment *);
static int pf_normalize_tcpopt(struct pf_rule *, struct mbuf *,
struct tcphdr *, int, sa_family_t);
static struct pf_frent *pf_create_fragment(u_short *);
+static int pf_frent_holes(struct pf_frent *frent);
static struct pf_fragment *pf_find_fragment(struct pf_fragment_cmp *key,
struct pf_frag_tree *tree);
+static inline int pf_frent_index(struct pf_frent *);
+static int pf_frent_insert(struct pf_fragment *,
+ struct pf_frent *, struct pf_frent *);
+void pf_frent_remove(struct pf_fragment *,
+ struct pf_frent *);
+struct pf_frent *pf_frent_previous(struct pf_fragment *,
+ struct pf_frent *);
static struct pf_fragment *pf_fillup_fragment(struct pf_fragment_cmp *,
struct pf_frent *, u_short *);
-static int pf_isfull_fragment(struct pf_fragment *);
static struct mbuf *pf_join_fragment(struct pf_fragment *);
#ifdef INET
static void pf_scrub_ip(struct mbuf **, uint32_t, uint8_t, uint8_t);
@@ -309,6 +319,7 @@ pf_remove_fragment(struct pf_fragment *frag)
{
PF_FRAG_ASSERT();
+ KASSERT(frag, ("frag != NULL"));
RB_REMOVE(pf_frag_tree, &V_pf_frag_tree, frag);
TAILQ_REMOVE(&V_pf_fragqueue, frag, frag_next);
@@ -335,9 +346,201 @@ pf_create_fragment(u_short *reason)
return (frent);
}
+/*
+ * Calculate the additional holes that were created in the fragment
+ * queue by inserting this fragment. A fragment in the middle
+ * creates one more hole by splitting. For each connected side,
+ * it loses one hole.
+ * Fragment entry must be in the queue when calling this function.
+ */
+static int
+pf_frent_holes(struct pf_frent *frent)
+{
+ struct pf_frent *prev = TAILQ_PREV(frent, pf_fragq, fr_next);
+ struct pf_frent *next = TAILQ_NEXT(frent, fr_next);
+ int holes = 1;
+
+ if (prev == NULL) {
+ if (frent->fe_off == 0)
+ holes--;
+ } else {
+ KASSERT(frent->fe_off != 0, ("frent->fe_off != 0"));
+ if (frent->fe_off == prev->fe_off + prev->fe_len)
+ holes--;
+ }
+ if (next == NULL) {
+ if (!frent->fe_mff)
+ holes--;
+ } else {
+ KASSERT(frent->fe_mff, ("frent->fe_mff"));
+ if (next->fe_off == frent->fe_off + frent->fe_len)
+ holes--;
+ }
+ return holes;
+}
+
+static inline int
+pf_frent_index(struct pf_frent *frent)
+{
+ /*
+ * We have an array of 16 entry points to the queue. A full size
+ * 65535 octet IP packet can have 8192 fragments. So the queue
+ * traversal length is at most 512 and at most 16 entry points are
+ * checked. We need 128 additional bytes on a 64 bit architecture.
+ */
+ CTASSERT(((u_int16_t)0xffff &~ 7) / (0x10000 / PF_FRAG_ENTRY_POINTS) ==
+ 16 - 1);
+ CTASSERT(((u_int16_t)0xffff >> 3) / PF_FRAG_ENTRY_POINTS == 512 - 1);
+
+ return frent->fe_off / (0x10000 / PF_FRAG_ENTRY_POINTS);
+}
+
+static int
+pf_frent_insert(struct pf_fragment *frag, struct pf_frent *frent,
+ struct pf_frent *prev)
+{
+ int index;
+
+ CTASSERT(PF_FRAG_ENTRY_LIMIT <= 0xff);
+
+ /*
+ * A packet has at most 65536 octets. With 16 entry points, each one
+ * spawns 4096 octets. We limit these to 64 fragments each, which
+ * means on average every fragment must have at least 64 octets.
+ */
+ index = pf_frent_index(frent);
+ if (frag->fr_entries[index] >= PF_FRAG_ENTRY_LIMIT)
+ return ENOBUFS;
+ frag->fr_entries[index]++;
+
+ if (prev == NULL) {
+ TAILQ_INSERT_HEAD(&frag->fr_queue, frent, fr_next);
+ } else {
+ KASSERT(prev->fe_off + prev->fe_len <= frent->fe_off,
+ ("overlapping fragment"));
+ TAILQ_INSERT_AFTER(&frag->fr_queue, prev, frent, fr_next);
+ }
+
+ if (frag->fr_firstoff[index] == NULL) {
+ KASSERT(prev == NULL || pf_frent_index(prev) < index,
+ ("prev == NULL || pf_frent_index(pref) < index"));
+ frag->fr_firstoff[index] = frent;
+ } else {
+ if (frent->fe_off < frag->fr_firstoff[index]->fe_off) {
+ KASSERT(prev == NULL || pf_frent_index(prev) < index,
+ ("prev == NULL || pf_frent_index(pref) < index"));
+ frag->fr_firstoff[index] = frent;
+ } else {
+ KASSERT(prev != NULL, ("prev != NULL"));
+ KASSERT(pf_frent_index(prev) == index,
+ ("pf_frent_index(prev) == index"));
+ }
+ }
+
+ frag->fr_holes += pf_frent_holes(frent);
+
+ return 0;
+}
+
+void
+pf_frent_remove(struct pf_fragment *frag, struct pf_frent *frent)
+{
+#ifdef INVARIANTS
+ struct pf_frent *prev = TAILQ_PREV(frent, pf_fragq, fr_next);
+#endif
+ struct pf_frent *next = TAILQ_NEXT(frent, fr_next);
+ int index;
+
+ frag->fr_holes -= pf_frent_holes(frent);
+
+ index = pf_frent_index(frent);
+ KASSERT(frag->fr_firstoff[index] != NULL, ("frent not found"));
+ if (frag->fr_firstoff[index]->fe_off == frent->fe_off) {
+ if (next == NULL) {
+ frag->fr_firstoff[index] = NULL;
+ } else {
+ KASSERT(frent->fe_off + frent->fe_len <= next->fe_off,
+ ("overlapping fragment"));
+ if (pf_frent_index(next) == index) {
+ frag->fr_firstoff[index] = next;
+ } else {
+ frag->fr_firstoff[index] = NULL;
+ }
+ }
+ } else {
+ KASSERT(frag->fr_firstoff[index]->fe_off < frent->fe_off,
+ ("frag->fr_firstoff[index]->fe_off < frent->fe_off"));
+ KASSERT(prev != NULL, ("prev != NULL"));
+ KASSERT(prev->fe_off + prev->fe_len <= frent->fe_off,
+ ("overlapping fragment"));
+ KASSERT(pf_frent_index(prev) == index,
+ ("pf_frent_index(prev) == index"));
+ }
+
+ TAILQ_REMOVE(&frag->fr_queue, frent, fr_next);
+
+ KASSERT(frag->fr_entries[index] > 0, ("No fragments remaining"));
+ frag->fr_entries[index]--;
+}
+
+struct pf_frent *
+pf_frent_previous(struct pf_fragment *frag, struct pf_frent *frent)
+{
+ struct pf_frent *prev, *next;
+ int index;
+
+ /*
+ * If there are no fragments after frag, take the final one. Assume
+ * that the global queue is not empty.
+ */
+ prev = TAILQ_LAST(&frag->fr_queue, pf_fragq);
+ KASSERT(prev != NULL, ("prev != NULL"));
+ if (prev->fe_off <= frent->fe_off)
+ return prev;
+ /*
+ * We want to find a fragment entry that is before frag, but still
+ * close to it. Find the first fragment entry that is in the same
+ * entry point or in the first entry point after that. As we have
+ * already checked that there are entries behind frag, this will
+ * succeed.
+ */
+ for (index = pf_frent_index(frent); index < PF_FRAG_ENTRY_POINTS;
+ index++) {
+ prev = frag->fr_firstoff[index];
+ if (prev != NULL)
+ break;
+ }
+ KASSERT(prev != NULL, ("prev != NULL"));
+ /*
+ * In prev we may have a fragment from the same entry point that is
+ * before frent, or one that is just one position behind frent.
+ * In the latter case, we go back one step and have the predecessor.
+ * There may be none if the new fragment will be the first one.
+ */
+ if (prev->fe_off > frent->fe_off) {
+ prev = TAILQ_PREV(prev, pf_fragq, fr_next);
+ if (prev == NULL)
+ return NULL;
+ KASSERT(prev->fe_off <= frent->fe_off,
+ ("prev->fe_off <= frent->fe_off"));
+ return prev;
+ }
+ /*
+ * In prev is the first fragment of the entry point. The offset
+ * of frag is behind it. Find the closest previous fragment.
+ */
+ for (next = TAILQ_NEXT(prev, fr_next); next != NULL;
+ next = TAILQ_NEXT(next, fr_next)) {
+ if (next->fe_off > frent->fe_off)
+ break;
+ prev = next;
+ }
+ return prev;
+}
+
static struct pf_fragment *
pf_fillup_fragment(struct pf_fragment_cmp *key, struct pf_frent *frent,
- u_short *reason)
+ u_short *reason)
{
struct pf_frent *after, *next, *prev;
struct pf_fragment *frag;
@@ -384,23 +587,22 @@ pf_fillup_fragment(struct pf_fragment_cmp *key, struct pf_frent *frent,
}
*(struct pf_fragment_cmp *)frag = *key;
+ memset(frag->fr_firstoff, 0, sizeof(frag->fr_firstoff));
+ memset(frag->fr_entries, 0, sizeof(frag->fr_entries));
frag->fr_timeout = time_uptime;
frag->fr_maxlen = frent->fe_len;
- frag->fr_entries = 0;
+ frag->fr_holes = 1;
TAILQ_INIT(&frag->fr_queue);
RB_INSERT(pf_frag_tree, &V_pf_frag_tree, frag);
TAILQ_INSERT_HEAD(&V_pf_fragqueue, frag, frag_next);
- /* We do not have a previous fragment. */
- TAILQ_INSERT_HEAD(&frag->fr_queue, frent, fr_next);
+ /* We do not have a previous fragment, cannot fail. */
+ pf_frent_insert(frag, frent, NULL);
return (frag);
}
- if (frag->fr_entries >= PF_MAX_FRENT_PER_FRAGMENT)
- goto bad_fragment;
-
KASSERT(!TAILQ_EMPTY(&frag->fr_queue), ("!TAILQ_EMPTY()->fr_queue"));
/* Remember maximum fragment len for refragmentation. */
@@ -425,17 +627,15 @@ pf_fillup_fragment(struct pf_fragment_cmp *key, struct pf_frent *frent,
goto bad_fragment;
}
- /* Find a fragment after the current one. */
- prev = NULL;
- TAILQ_FOREACH(after, &frag->fr_queue, fr_next) {
- if (after->fe_off > frent->fe_off)
- break;
- prev = after;
+ /* Find neighbors for newly inserted fragment */
+ prev = pf_frent_previous(frag, frent);
+ if (prev == NULL) {
+ after = TAILQ_FIRST(&frag->fr_queue);
+ KASSERT(after != NULL, ("after != NULL"));
+ } else {
+ after = TAILQ_NEXT(prev, fr_next);
}
- KASSERT(prev != NULL || after != NULL,
- ("prev != NULL || after != NULL"));
-
if (prev != NULL && prev->fe_off + prev->fe_len > frent->fe_off) {
uint16_t precut;
@@ -463,17 +663,16 @@ pf_fillup_fragment(struct pf_fragment_cmp *key, struct pf_frent *frent,
/* This fragment is completely overlapped, lose it. */
next = TAILQ_NEXT(after, fr_next);
+ pf_frent_remove(frag, after);
m_freem(after->fe_m);
- TAILQ_REMOVE(&frag->fr_queue, after, fr_next);
uma_zfree(V_pf_frent_z, after);
}
- if (prev == NULL)
- TAILQ_INSERT_HEAD(&frag->fr_queue, frent, fr_next);
- else
- TAILQ_INSERT_AFTER(&frag->fr_queue, prev, frent, fr_next);
-
- frag->fr_entries++;
+ /* If part of the queue gets too long, there is not way to recover. */
+ if (pf_frent_insert(frag, frent, prev)) {
+ DPFPRINTF(("fragment queue limit exceeded"));
+ goto bad_fragment;
+ }
return (frag);
@@ -484,40 +683,6 @@ drop_fragment:
return (NULL);
}
-static int
-pf_isfull_fragment(struct pf_fragment *frag)
-{
- struct pf_frent *frent, *next;
- uint16_t off, total;
-
- /* Check if we are completely reassembled */
- if (TAILQ_LAST(&frag->fr_queue, pf_fragq)->fe_mff)
- return (0);
-
- /* Maximum data we have seen already */
- total = TAILQ_LAST(&frag->fr_queue, pf_fragq)->fe_off +
- TAILQ_LAST(&frag->fr_queue, pf_fragq)->fe_len;
-
- /* Check if we have all the data */
- off = 0;
- for (frent = TAILQ_FIRST(&frag->fr_queue); frent; frent = next) {
- next = TAILQ_NEXT(frent, fr_next);
-
- off += frent->fe_len;
- if (off < total && (next == NULL || next->fe_off != off)) {
- DPFPRINTF(("missing fragment at %d, next %d, total %d",
- off, next == NULL ? -1 : next->fe_off, total));
- return (0);
- }
- }
- DPFPRINTF(("%d < %d?", off, total));
- if (off < total)
- return (0);
- KASSERT(off == total, ("off == total"));
-
- return (1);
-}
-
static struct mbuf *
pf_join_fragment(struct pf_fragment *frag)
{
@@ -578,8 +743,10 @@ pf_reassemble(struct mbuf **m0, struct ip *ip, int dir, u_short *reason)
/* The mbuf is part of the fragment entry, no direct free or access */
m = *m0 = NULL;
- if (!pf_isfull_fragment(frag))
+ if (frag->fr_holes) {
+ DPFPRINTF(("frag %d, holes %d", frag->fr_id, frag->fr_holes));
return (PF_PASS); /* drop because *m0 is NULL, no error */
+ }
/* We have all the data */
frent = TAILQ_FIRST(&frag->fr_queue);
@@ -662,7 +829,8 @@ pf_reassemble6(struct mbuf **m0, struct ip6_hdr *ip6, struct ip6_frag *fraghdr,
/* The mbuf is part of the fragment entry, no direct free or access. */
m = *m0 = NULL;
- if (!pf_isfull_fragment(frag)) {
+ if (frag->fr_holes) {
+ DPFPRINTF(("frag %d, holes %d", frag->fr_id, frag->fr_holes));
PF_FRAG_UNLOCK();
return (PF_PASS); /* Drop because *m0 is NULL, no error. */
}
diff --git a/sys/powerpc/conf/GENERIC b/sys/powerpc/conf/GENERIC
index 820bee6c32ee..7750e9ec910c 100644
--- a/sys/powerpc/conf/GENERIC
+++ b/sys/powerpc/conf/GENERIC
@@ -98,6 +98,7 @@ options INVARIANT_SUPPORT #Extra sanity checks of internal structures, required
options WITNESS #Enable checks to detect deadlocks and cycles
options WITNESS_SKIPSPIN #Don't run witness on spinlocks for speed
options MALLOC_DEBUG_MAXZONES=8 # Separate malloc(9) zones
+options VERBOSE_SYSINIT=0 # Support debug.verbose_sysinit, off by default
# Kernel dump features.
options EKCD # Support for encrypted kernel dumps
diff --git a/sys/powerpc/conf/GENERIC64 b/sys/powerpc/conf/GENERIC64
index 5411ac9acc1e..fd24daff91e4 100644
--- a/sys/powerpc/conf/GENERIC64
+++ b/sys/powerpc/conf/GENERIC64
@@ -95,6 +95,7 @@ options INVARIANT_SUPPORT #Extra sanity checks of internal structures, required
options WITNESS #Enable checks to detect deadlocks and cycles
options WITNESS_SKIPSPIN #Don't run witness on spinlocks for speed
options MALLOC_DEBUG_MAXZONES=8 # Separate malloc(9) zones
+options VERBOSE_SYSINIT=0 # Support debug.verbose_sysinit, off by default
# Kernel dump features.
options EKCD # Support for encrypted kernel dumps
diff --git a/sys/powerpc/mpc85xx/pci_mpc85xx.c b/sys/powerpc/mpc85xx/pci_mpc85xx.c
index 7a339cc1e301..f1278d4d7646 100644
--- a/sys/powerpc/mpc85xx/pci_mpc85xx.c
+++ b/sys/powerpc/mpc85xx/pci_mpc85xx.c
@@ -562,7 +562,7 @@ fsl_pcib_init(struct fsl_pcib_softc *sc, int bus, int maxslot)
int new_pribus, new_secbus, new_subbus;
int slot, func, maxfunc;
uint16_t vendor, device;
- uint8_t command, hdrtype, subclass;
+ uint8_t brctl, command, hdrtype, subclass;
secbus = bus;
for (slot = 0; slot <= maxslot; slot++) {
@@ -606,6 +606,17 @@ fsl_pcib_init(struct fsl_pcib_softc *sc, int bus, int maxslot)
if (hdrtype != PCIM_HDRTYPE_BRIDGE)
continue;
+ brctl = fsl_pcib_read_config(sc->sc_dev, bus, slot, func,
+ PCIR_BRIDGECTL_1, 1);
+ brctl |= PCIB_BCR_SECBUS_RESET;
+ fsl_pcib_write_config(sc->sc_dev, bus, slot, func,
+ PCIR_BRIDGECTL_1, brctl, 1);
+ DELAY(100000);
+ brctl &= ~PCIB_BCR_SECBUS_RESET;
+ fsl_pcib_write_config(sc->sc_dev, bus, slot, func,
+ PCIR_BRIDGECTL_1, brctl, 1);
+ DELAY(100000);
+
secbus++;
/* Read currect bus register configuration */
diff --git a/sys/powerpc/powermac/fcu.c b/sys/powerpc/powermac/fcu.c
index a1841a57ffe1..7b45aebab7c0 100644
--- a/sys/powerpc/powermac/fcu.c
+++ b/sys/powerpc/powermac/fcu.c
@@ -451,9 +451,9 @@ fcu_fill_fan_prop(device_t dev)
{
phandle_t child;
struct fcu_softc *sc;
- u_int id[8];
- char location[96];
- char type[64];
+ u_int id[12];
+ char location[144];
+ char type[96];
int i = 0, j, len = 0, prop_len, prev_len = 0;
sc = device_get_softc(dev);
diff --git a/sys/powerpc/powerpc/trap.c b/sys/powerpc/powerpc/trap.c
index bf5b492ea29c..815ea21d4213 100644
--- a/sys/powerpc/powerpc/trap.c
+++ b/sys/powerpc/powerpc/trap.c
@@ -455,7 +455,7 @@ trap_fatal(struct trapframe *frame)
printtrap(frame->exc, frame, 1, (frame->srr1 & PSL_PR));
#ifdef KDB
- if (debugger_on_panic) {
+ if (debugger_on_trap) {
kdb_why = KDB_WHY_TRAP;
handled = kdb_trap(frame->exc, 0, frame);
kdb_why = KDB_WHY_UNSET;
diff --git a/sys/riscv/conf/GENERIC b/sys/riscv/conf/GENERIC
index 389a0a13cb5e..20e12dacc42f 100644
--- a/sys/riscv/conf/GENERIC
+++ b/sys/riscv/conf/GENERIC
@@ -124,7 +124,7 @@ options INVARIANT_SUPPORT # Extra sanity checks of internal structures, require
# options WITNESS_SKIPSPIN # Don't run witness on spinlocks for speed
options MALLOC_DEBUG_MAXZONES=8 # Separate malloc(9) zones
# options EARLY_PRINTF
-# options VERBOSE_SYSINIT
+options VERBOSE_SYSINIT=0 # Support debug.verbose_sysinit, off by default
# Kernel dump features.
options ZSTDIO # zstd-compressed kernel and user dumps
diff --git a/sys/riscv/include/pte.h b/sys/riscv/include/pte.h
index 87a7be2829fe..723c9cf26ffb 100644
--- a/sys/riscv/include/pte.h
+++ b/sys/riscv/include/pte.h
@@ -78,7 +78,7 @@ typedef uint64_t pn_t; /* page number */
#define PTE_V (1 << 0) /* Valid */
#define PTE_RWX (PTE_R | PTE_W | PTE_X)
#define PTE_RX (PTE_R | PTE_X)
-#define PTE_KERN (PTE_V | PTE_RWX | PTE_A | PTE_D)
+#define PTE_KERN (PTE_V | PTE_R | PTE_W | PTE_A | PTE_D)
#define PTE_PPN0_S 10
#define PTE_PPN1_S 19
diff --git a/sys/riscv/riscv/intr_machdep.c b/sys/riscv/riscv/intr_machdep.c
index b57e122c0f81..030f073098fc 100644
--- a/sys/riscv/riscv/intr_machdep.c
+++ b/sys/riscv/riscv/intr_machdep.c
@@ -202,7 +202,7 @@ riscv_unmask_ipi(void)
static void
ipi_send(struct pcpu *pc, int ipi)
{
- uintptr_t mask;
+ u_long mask;
CTR3(KTR_SMP, "%s: cpu=%d, ipi=%x", __func__, pc->pc_cpuid, ipi);
@@ -242,7 +242,7 @@ void
ipi_selected(cpuset_t cpus, u_int ipi)
{
struct pcpu *pc;
- uintptr_t mask;
+ u_long mask;
CTR1(KTR_SMP, "ipi_selected: ipi: %x", ipi);
diff --git a/sys/riscv/riscv/locore.S b/sys/riscv/riscv/locore.S
index 7b2b1d5a2fd6..2a8710b11353 100644
--- a/sys/riscv/riscv/locore.S
+++ b/sys/riscv/riscv/locore.S
@@ -94,7 +94,7 @@ _start:
add t3, t4, t2
li t5, 0
2:
- li t0, (PTE_KERN)
+ li t0, (PTE_KERN | PTE_X)
slli t2, t4, PTE_PPN1_S /* << PTE_PPN1_S */
or t5, t0, t2
sd t5, (s1) /* Store PTE entry to position */
diff --git a/sys/riscv/riscv/machdep.c b/sys/riscv/riscv/machdep.c
index 430336408368..0735ec034603 100644
--- a/sys/riscv/riscv/machdep.c
+++ b/sys/riscv/riscv/machdep.c
@@ -178,7 +178,6 @@ set_regs(struct thread *td, struct reg *regs)
frame = td->td_frame;
frame->tf_sepc = regs->sepc;
- frame->tf_sstatus = regs->sstatus;
frame->tf_ra = regs->ra;
frame->tf_sp = regs->sp;
frame->tf_gp = regs->gp;
@@ -254,7 +253,7 @@ int
ptrace_set_pc(struct thread *td, u_long addr)
{
- panic("ptrace_set_pc");
+ td->td_frame->tf_sepc = addr;
return (0);
}
@@ -263,7 +262,7 @@ ptrace_single_step(struct thread *td)
{
/* TODO; */
- return (0);
+ return (EOPNOTSUPP);
}
int
@@ -271,7 +270,7 @@ ptrace_clear_single_step(struct thread *td)
{
/* TODO; */
- return (0);
+ return (EOPNOTSUPP);
}
void
diff --git a/sys/riscv/riscv/mp_machdep.c b/sys/riscv/riscv/mp_machdep.c
index 01d67e843918..e38aa64598a3 100644
--- a/sys/riscv/riscv/mp_machdep.c
+++ b/sys/riscv/riscv/mp_machdep.c
@@ -181,7 +181,7 @@ riscv64_cpu_attach(device_t dev)
static void
release_aps(void *dummy __unused)
{
- uintptr_t mask;
+ u_long mask;
int cpu, i;
if (mp_ncpus == 1)
diff --git a/sys/riscv/riscv/pmap.c b/sys/riscv/riscv/pmap.c
index b951e411c34a..22bec6355684 100644
--- a/sys/riscv/riscv/pmap.c
+++ b/sys/riscv/riscv/pmap.c
@@ -2010,7 +2010,7 @@ pmap_protect(pmap_t pmap, vm_offset_t sva, vm_offset_t eva, vm_prot_t prot)
}
int
-pmap_fault_fixup(pmap_t pmap, vm_offset_t va, vm_prot_t prot)
+pmap_fault_fixup(pmap_t pmap, vm_offset_t va, vm_prot_t ftype)
{
pt_entry_t orig_l3;
pt_entry_t new_l3;
@@ -2027,12 +2027,13 @@ pmap_fault_fixup(pmap_t pmap, vm_offset_t va, vm_prot_t prot)
orig_l3 = pmap_load(l3);
if ((orig_l3 & PTE_V) == 0 ||
- ((prot & VM_PROT_WRITE) != 0 && (orig_l3 & PTE_W) == 0) ||
- ((prot & VM_PROT_READ) != 0 && (orig_l3 & PTE_R) == 0))
+ (ftype == VM_PROT_WRITE && (orig_l3 & PTE_W) == 0) ||
+ (ftype == VM_PROT_EXECUTE && (orig_l3 & PTE_X) == 0) ||
+ (ftype == VM_PROT_READ && (orig_l3 & PTE_R) == 0))
goto done;
new_l3 = orig_l3 | PTE_A;
- if ((prot & VM_PROT_WRITE) != 0)
+ if (ftype == VM_PROT_WRITE)
new_l3 |= PTE_D;
if (orig_l3 != new_l3) {
@@ -2088,13 +2089,17 @@ pmap_enter(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot,
pa = VM_PAGE_TO_PHYS(m);
pn = (pa / PAGE_SIZE);
- new_l3 = PTE_V | PTE_R | PTE_X;
+ new_l3 = PTE_V | PTE_R | PTE_A;
+ if (prot & VM_PROT_EXECUTE)
+ new_l3 |= PTE_X;
+ if (flags & VM_PROT_WRITE)
+ new_l3 |= PTE_D;
if (prot & VM_PROT_WRITE)
new_l3 |= PTE_W;
if ((va >> 63) == 0)
new_l3 |= PTE_U;
- else
- new_l3 |= PTE_A | PTE_D;
+ else if (prot & VM_PROT_WRITE)
+ new_l3 |= PTE_D;
new_l3 |= (pn << PTE_PPN0_S);
if ((flags & PMAP_ENTER_WIRED) != 0)
@@ -2462,7 +2467,9 @@ pmap_enter_quick_locked(pmap_t pmap, vm_offset_t va, vm_page_t m,
pa = VM_PAGE_TO_PHYS(m);
pn = (pa / PAGE_SIZE);
- entry = (PTE_V | PTE_R | PTE_X);
+ entry = PTE_V | PTE_R;
+ if (prot & VM_PROT_EXECUTE)
+ entry |= PTE_X;
entry |= (pn << PTE_PPN0_S);
/*
diff --git a/sys/riscv/riscv/trap.c b/sys/riscv/riscv/trap.c
index d24fcd69671c..343f9f36dc0d 100644
--- a/sys/riscv/riscv/trap.c
+++ b/sys/riscv/riscv/trap.c
@@ -207,9 +207,11 @@ data_abort(struct trapframe *frame, int lower)
if ((frame->tf_scause == EXCP_FAULT_STORE) ||
(frame->tf_scause == EXCP_STORE_PAGE_FAULT)) {
- ftype = (VM_PROT_READ | VM_PROT_WRITE);
+ ftype = VM_PROT_WRITE;
+ } else if (frame->tf_scause == EXCP_INST_PAGE_FAULT) {
+ ftype = VM_PROT_EXECUTE;
} else {
- ftype = (VM_PROT_READ);
+ ftype = VM_PROT_READ;
}
if (pmap_fault_fixup(map->pmap, va, ftype))
diff --git a/sys/security/audit/audit.h b/sys/security/audit/audit.h
index f24bc1e503b2..2e47b8c4bf48 100644
--- a/sys/security/audit/audit.h
+++ b/sys/security/audit/audit.h
@@ -122,7 +122,7 @@ void audit_arg_upath2(struct thread *td, int dirfd, char *upath);
void audit_arg_upath2_canon(char *upath);
void audit_arg_vnode1(struct vnode *vp);
void audit_arg_vnode2(struct vnode *vp);
-void audit_arg_text(char *text);
+void audit_arg_text(const char *text);
void audit_arg_cmd(int cmd);
void audit_arg_svipc_cmd(int cmd);
void audit_arg_svipc_perm(struct ipc_perm *perm);
diff --git a/sys/security/audit/audit_arg.c b/sys/security/audit/audit_arg.c
index de3ca87ac3a2..13fd16f2ea38 100644
--- a/sys/security/audit/audit_arg.c
+++ b/sys/security/audit/audit_arg.c
@@ -536,7 +536,7 @@ audit_arg_auditinfo_addr(struct auditinfo_addr *au_info)
}
void
-audit_arg_text(char *text)
+audit_arg_text(const char *text)
{
struct kaudit_record *ar;
diff --git a/sys/sparc64/conf/GENERIC b/sys/sparc64/conf/GENERIC
index d3693acec65a..c1adc072c5a7 100644
--- a/sys/sparc64/conf/GENERIC
+++ b/sys/sparc64/conf/GENERIC
@@ -88,6 +88,7 @@ options INVARIANT_SUPPORT # Extra sanity checks of internal structures, require
options WITNESS # Enable checks to detect deadlocks and cycles
options WITNESS_SKIPSPIN # Don't run witness on spinlocks for speed
options MALLOC_DEBUG_MAXZONES=8 # Separate malloc(9) zones
+options VERBOSE_SYSINIT=0 # Support debug.verbose_sysinit, off by default
# Kernel dump features.
options EKCD # Support for encrypted kernel dumps
diff --git a/sys/sys/domainset.h b/sys/sys/domainset.h
index 32b35ac5c1e9..5a00347f29d3 100644
--- a/sys/sys/domainset.h
+++ b/sys/sys/domainset.h
@@ -96,7 +96,8 @@ struct domainset {
domainid_t ds_order[MAXMEMDOM]; /* nth domain table. */
};
-extern struct domainset domainset_prefer[MAXMEMDOM];
+extern struct domainset domainset_fixed[MAXMEMDOM], domainset_prefer[MAXMEMDOM];
+#define DOMAINSET_FIXED(domain) (&domainset_fixed[(domain)])
#define DOMAINSET_PREF(domain) (&domainset_prefer[(domain)])
extern struct domainset domainset_roundrobin;
#define DOMAINSET_RR() (&domainset_roundrobin)
diff --git a/sys/sys/elf_common.h b/sys/sys/elf_common.h
index 5aa10ad1c802..3a1607815a74 100644
--- a/sys/sys/elf_common.h
+++ b/sys/sys/elf_common.h
@@ -759,6 +759,7 @@ typedef struct {
#define NT_FREEBSD_ABI_TAG 1
#define NT_FREEBSD_NOINIT_TAG 2
#define NT_FREEBSD_ARCH_TAG 3
+#define NT_FREEBSD_FEATURE_CTL 4
/* Values for n_type. Used in core files. */
#define NT_PRSTATUS 1 /* Process status. */
diff --git a/sys/sys/epoch_private.h b/sys/sys/epoch_private.h
index ff16fe7a4983..f475ca3aa200 100644
--- a/sys/sys/epoch_private.h
+++ b/sys/sys/epoch_private.h
@@ -89,7 +89,8 @@ typedef struct epoch_thread {
TAILQ_HEAD (epoch_tdlist, epoch_thread);
typedef struct epoch_record {
- ck_epoch_record_t er_record;
+ ck_epoch_record_t er_read_record;
+ ck_epoch_record_t er_write_record;
volatile struct epoch_tdlist er_tdlist;
volatile uint32_t er_gen;
uint32_t er_cpuid;
@@ -138,7 +139,7 @@ epoch_enter_preempt(epoch_t epoch, epoch_tracker_t et)
td->td_pre_epoch_prio = td->td_priority;
er = epoch_currecord(epoch);
TAILQ_INSERT_TAIL(&er->er_tdlist, etd, et_link);
- ck_epoch_begin(&er->er_record, (ck_epoch_section_t *)&etd->et_section);
+ ck_epoch_begin(&er->er_read_record, (ck_epoch_section_t *)&etd->et_section);
critical_exit_sa(td);
}
@@ -155,7 +156,7 @@ epoch_enter(epoch_t epoch)
td->td_epochnest++;
critical_enter_sa(td);
er = epoch_currecord(epoch);
- ck_epoch_begin(&er->er_record, NULL);
+ ck_epoch_begin(&er->er_read_record, NULL);
}
static __inline void
@@ -183,7 +184,7 @@ epoch_exit_preempt(epoch_t epoch, epoch_tracker_t et)
etd->et_magic_post = 0;
#endif
etd->et_td = (void*)0xDEADBEEF;
- ck_epoch_end(&er->er_record,
+ ck_epoch_end(&er->er_read_record,
(ck_epoch_section_t *)&etd->et_section);
TAILQ_REMOVE(&er->er_tdlist, etd, et_link);
er->er_gen++;
@@ -203,7 +204,7 @@ epoch_exit(epoch_t epoch)
MPASS(td->td_epochnest);
td->td_epochnest--;
er = epoch_currecord(epoch);
- ck_epoch_end(&er->er_record, NULL);
+ ck_epoch_end(&er->er_read_record, NULL);
critical_exit_sa(td);
}
#endif /* _KERNEL */
diff --git a/sys/sys/gtaskqueue.h b/sys/sys/gtaskqueue.h
index c06ef503c11e..a36c770adb97 100644
--- a/sys/sys/gtaskqueue.h
+++ b/sys/sys/gtaskqueue.h
@@ -52,7 +52,9 @@ int gtaskqueue_cancel(struct gtaskqueue *queue, struct gtask *gtask);
void gtaskqueue_drain(struct gtaskqueue *queue, struct gtask *task);
void gtaskqueue_drain_all(struct gtaskqueue *queue);
-int grouptaskqueue_enqueue(struct gtaskqueue *queue, struct gtask *task);
+void grouptask_block(struct grouptask *grouptask);
+void grouptask_unblock(struct grouptask *grouptask);
+int grouptaskqueue_enqueue(struct gtaskqueue *queue, struct gtask *task);
void taskqgroup_attach(struct taskqgroup *qgroup, struct grouptask *grptask,
void *uniq, int irq, const char *name);
int taskqgroup_attach_cpu(struct taskqgroup *qgroup, struct grouptask *grptask,
@@ -67,6 +69,7 @@ void taskqgroup_config_gtask_deinit(struct grouptask *gtask);
#define TASK_ENQUEUED 0x1
#define TASK_SKIP_WAKEUP 0x2
+#define TASK_NOENQUEUE 0x4
#define GTASK_INIT(task, flags, priority, func, context) do { \
diff --git a/sys/sys/imgact.h b/sys/sys/imgact.h
index d3355ce42169..4aebcee8c283 100644
--- a/sys/sys/imgact.h
+++ b/sys/sys/imgact.h
@@ -102,7 +102,7 @@ void exec_free_args(struct image_args *);
int exec_new_vmspace(struct image_params *, struct sysentvec *);
void exec_setregs(struct thread *, struct image_params *, u_long);
int exec_shell_imgact(struct image_params *);
-int exec_copyin_args(struct image_args *, char *, enum uio_seg,
+int exec_copyin_args(struct image_args *, const char *, enum uio_seg,
char **, char **);
int exec_copyin_data_fds(struct thread *, struct image_args *, const void *,
size_t, const int *, size_t);
diff --git a/sys/sys/kdb.h b/sys/sys/kdb.h
index 8834b0fa8172..75f8343b8428 100644
--- a/sys/sys/kdb.h
+++ b/sys/sys/kdb.h
@@ -62,7 +62,7 @@ struct kdb_dbbe {
DATA_SET(kdb_dbbe_set, name##_dbbe)
extern u_char kdb_active; /* Non-zero while in debugger. */
-extern int debugger_on_panic; /* enter the debugger on panic. */
+extern int debugger_on_trap; /* enter the debugger on trap. */
extern struct kdb_dbbe *kdb_dbbe; /* Default debugger backend or NULL. */
extern struct trapframe *kdb_frame; /* Frame to kdb_trap(). */
extern struct pcb *kdb_thrctx; /* Current context. */
diff --git a/sys/sys/malloc.h b/sys/sys/malloc.h
index 520f18c5a969..be24f854b661 100644
--- a/sys/sys/malloc.h
+++ b/sys/sys/malloc.h
@@ -160,6 +160,7 @@ MALLOC_DECLARE(M_TEMP);
*/
MALLOC_DECLARE(M_IOV);
+struct domainset;
extern struct mtx malloc_mtx;
/*
@@ -172,8 +173,8 @@ void *contigmalloc(unsigned long size, struct malloc_type *type, int flags,
vm_paddr_t low, vm_paddr_t high, unsigned long alignment,
vm_paddr_t boundary) __malloc_like __result_use_check
__alloc_size(1) __alloc_align(6);
-void *contigmalloc_domain(unsigned long size, struct malloc_type *type,
- int domain, int flags, vm_paddr_t low, vm_paddr_t high,
+void *contigmalloc_domainset(unsigned long size, struct malloc_type *type,
+ struct domainset *ds, int flags, vm_paddr_t low, vm_paddr_t high,
unsigned long alignment, vm_paddr_t boundary)
__malloc_like __result_use_check __alloc_size(1) __alloc_align(6);
void free(void *addr, struct malloc_type *type);
@@ -230,8 +231,9 @@ void *malloc(size_t size, struct malloc_type *type, int flags) __malloc_like
_malloc_item; \
})
-void *malloc_domain(size_t size, struct malloc_type *type, int domain,
- int flags) __malloc_like __result_use_check __alloc_size(1);
+void *malloc_domainset(size_t size, struct malloc_type *type,
+ struct domainset *ds, int flags) __malloc_like __result_use_check
+ __alloc_size(1);
void *mallocarray(size_t nmemb, size_t size, struct malloc_type *type,
int flags) __malloc_like __result_use_check
__alloc_size2(1, 2);
diff --git a/sys/sys/mount.h b/sys/sys/mount.h
index 51d709052850..ac1c215b9a83 100644
--- a/sys/sys/mount.h
+++ b/sys/sys/mount.h
@@ -554,7 +554,8 @@ struct ovfsconf {
#define VFCF_UNICODE 0x00200000 /* stores file names as Unicode */
#define VFCF_JAIL 0x00400000 /* can be mounted from within a jail */
#define VFCF_DELEGADMIN 0x00800000 /* supports delegated administration */
-#define VFCF_SBDRY 0x01000000 /* defer stop requests */
+#define VFCF_SBDRY 0x01000000 /* Stop at Boundary: defer stop requests
+ to kernel->user (AST) transition */
typedef uint32_t fsctlop_t;
diff --git a/sys/sys/param.h b/sys/sys/param.h
index 769a3146e21d..f7a26d5e0d44 100644
--- a/sys/sys/param.h
+++ b/sys/sys/param.h
@@ -60,7 +60,7 @@
* in the range 5 to 9.
*/
#undef __FreeBSD_version
-#define __FreeBSD_version 1300002 /* Master, propagated to newvers */
+#define __FreeBSD_version 1300003 /* Master, propagated to newvers */
/*
* __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,
diff --git a/sys/sys/queue.h b/sys/sys/queue.h
index 2e961ddc7e08..94fd1ce7b66b 100644
--- a/sys/sys/queue.h
+++ b/sys/sys/queue.h
@@ -155,19 +155,15 @@ struct qm_trace {
#endif /* QUEUE_MACRO_DEBUG_TRACE */
#ifdef QUEUE_MACRO_DEBUG_TRASH
+#define QMD_SAVELINK(name, link) void **name = (void *)&(link)
#define TRASHIT(x) do {(x) = (void *)-1;} while (0)
#define QMD_IS_TRASHED(x) ((x) == (void *)(intptr_t)-1)
#else /* !QUEUE_MACRO_DEBUG_TRASH */
+#define QMD_SAVELINK(name, link)
#define TRASHIT(x)
#define QMD_IS_TRASHED(x) 0
#endif /* QUEUE_MACRO_DEBUG_TRASH */
-#if defined(QUEUE_MACRO_DEBUG_TRACE) || defined(QUEUE_MACRO_DEBUG_TRASH)
-#define QMD_SAVELINK(name, link) void **name = (void *)&(link)
-#else /* !QUEUE_MACRO_DEBUG_TRACE && !QUEUE_MACRO_DEBUG_TRASH */
-#define QMD_SAVELINK(name, link)
-#endif /* QUEUE_MACRO_DEBUG_TRACE || QUEUE_MACRO_DEBUG_TRASH */
-
#ifdef __cplusplus
/*
* In C++ there can be structure lists and class lists:
diff --git a/sys/sys/random.h b/sys/sys/random.h
index 073f97ad23c0..ad5f3e94df99 100644
--- a/sys/sys/random.h
+++ b/sys/sys/random.h
@@ -92,9 +92,6 @@ enum random_entropy_source {
_Static_assert(ENTROPYSOURCE <= 32,
"hardcoded assumption that values fit in a typical word-sized bitset");
-#define RANDOM_HARVEST_EVERYTHING_MASK ((1 << (RANDOM_ENVIRONMENTAL_END + 1)) - 1)
-#define RANDOM_HARVEST_PURE_MASK (((1 << ENTROPYSOURCE) - 1) & (-1UL << RANDOM_PURE_START))
-
#define RANDOM_LEGACY_BOOT_ENTROPY_MODULE "/boot/entropy"
#define RANDOM_CACHED_BOOT_ENTROPY_MODULE "boot_entropy_cache"
#define RANDOM_CACHED_SKIP_START 256
diff --git a/sys/sys/syscallsubr.h b/sys/sys/syscallsubr.h
index 20e4cb39770e..2c5652c7b552 100644
--- a/sys/sys/syscallsubr.h
+++ b/sys/sys/syscallsubr.h
@@ -69,7 +69,7 @@ int kern_accept(struct thread *td, int s, struct sockaddr **name,
socklen_t *namelen, struct file **fp);
int kern_accept4(struct thread *td, int s, struct sockaddr **name,
socklen_t *namelen, int flags, struct file **fp);
-int kern_accessat(struct thread *td, int fd, char *path,
+int kern_accessat(struct thread *td, int fd, const char *path,
enum uio_seg pathseg, int flags, int mode);
int kern_adjtime(struct thread *td, struct timeval *delta,
struct timeval *olddelta);
@@ -80,7 +80,7 @@ int kern_break(struct thread *td, uintptr_t *addr);
int kern_cap_ioctls_limit(struct thread *td, int fd, u_long *cmds,
size_t ncmds);
int kern_cap_rights_limit(struct thread *td, int fd, cap_rights_t *rights);
-int kern_chdir(struct thread *td, char *path, enum uio_seg pathseg);
+int kern_chdir(struct thread *td, const char *path, enum uio_seg pathseg);
int kern_clock_getcpuclockid2(struct thread *td, id_t id, int which,
clockid_t *clk_id);
int kern_clock_getres(struct thread *td, clockid_t clock_id,
@@ -112,9 +112,9 @@ int kern_cpuset_setid(struct thread *td, cpuwhich_t which,
int kern_dup(struct thread *td, u_int mode, int flags, int old, int new);
int kern_execve(struct thread *td, struct image_args *args,
struct mac *mac_p);
-int kern_fchmodat(struct thread *td, int fd, char *path,
+int kern_fchmodat(struct thread *td, int fd, const char *path,
enum uio_seg pathseg, mode_t mode, int flag);
-int kern_fchownat(struct thread *td, int fd, char *path,
+int kern_fchownat(struct thread *td, int fd, const char *path,
enum uio_seg pathseg, int uid, int gid, int flag);
int kern_fcntl(struct thread *td, int fd, int cmd, intptr_t arg);
int kern_fcntl_freebsd(struct thread *td, int fd, int cmd, long arg);
@@ -157,19 +157,19 @@ int kern_kqueue(struct thread *td, int flags, struct filecaps *fcaps);
int kern_kldload(struct thread *td, const char *file, int *fileid);
int kern_kldstat(struct thread *td, int fileid, struct kld_file_stat *stat);
int kern_kldunload(struct thread *td, int fileid, int flags);
-int kern_linkat(struct thread *td, int fd1, int fd2, char *path1,
- char *path2, enum uio_seg segflg, int follow);
+int kern_linkat(struct thread *td, int fd1, int fd2, const char *path1,
+ const char *path2, enum uio_seg segflg, int follow);
int kern_listen(struct thread *td, int s, int backlog);
int kern_lseek(struct thread *td, int fd, off_t offset, int whence);
-int kern_lutimes(struct thread *td, char *path, enum uio_seg pathseg,
+int kern_lutimes(struct thread *td, const char *path, enum uio_seg pathseg,
struct timeval *tptr, enum uio_seg tptrseg);
int kern_madvise(struct thread *td, uintptr_t addr, size_t len, int behav);
int kern_mincore(struct thread *td, uintptr_t addr, size_t len, char *vec);
-int kern_mkdirat(struct thread *td, int fd, char *path,
+int kern_mkdirat(struct thread *td, int fd, const char *path,
enum uio_seg segflg, int mode);
-int kern_mkfifoat(struct thread *td, int fd, char *path,
+int kern_mkfifoat(struct thread *td, int fd, const char *path,
enum uio_seg pathseg, int mode);
-int kern_mknodat(struct thread *td, int fd, char *path,
+int kern_mknodat(struct thread *td, int fd, const char *path,
enum uio_seg pathseg, int mode, dev_t dev);
int kern_mlock(struct proc *proc, struct ucred *cred, uintptr_t addr,
size_t len);
@@ -186,10 +186,10 @@ int kern_nanosleep(struct thread *td, struct timespec *rqt,
struct timespec *rmt);
int kern_ogetdirentries(struct thread *td, struct ogetdirentries_args *uap,
long *ploff);
-int kern_openat(struct thread *td, int fd, char *path,
+int kern_openat(struct thread *td, int fd, const char *path,
enum uio_seg pathseg, int flags, int mode);
-int kern_pathconf(struct thread *td, char *path, enum uio_seg pathseg,
- int name, u_long flags, long *valuep);
+int kern_pathconf(struct thread *td, const char *path,
+ enum uio_seg pathseg, int name, u_long flags, long *valuep);
int kern_pipe(struct thread *td, int fildes[2], int flags,
struct filecaps *fcaps1, struct filecaps *fcaps2);
int kern_poll(struct thread *td, struct pollfd *fds, u_int nfds,
@@ -211,14 +211,14 @@ int kern_ptrace(struct thread *td, int req, pid_t pid, void *addr,
int kern_pwrite(struct thread *td, int fd, const void *buf, size_t nbyte,
off_t offset);
int kern_pwritev(struct thread *td, int fd, struct uio *auio, off_t offset);
-int kern_readlinkat(struct thread *td, int fd, char *path,
+int kern_readlinkat(struct thread *td, int fd, const char *path,
enum uio_seg pathseg, char *buf, enum uio_seg bufseg, size_t count);
int kern_readv(struct thread *td, int fd, struct uio *auio);
int kern_recvit(struct thread *td, int s, struct msghdr *mp,
enum uio_seg fromseg, struct mbuf **controlp);
-int kern_renameat(struct thread *td, int oldfd, char *old, int newfd,
- char *new, enum uio_seg pathseg);
-int kern_rmdirat(struct thread *td, int fd, char *path,
+int kern_renameat(struct thread *td, int oldfd, const char *old, int newfd,
+ const char *new, enum uio_seg pathseg);
+int kern_rmdirat(struct thread *td, int fd, const char *path,
enum uio_seg pathseg, int flag);
int kern_sched_getparam(struct thread *td, struct thread *targettd,
struct sched_param *param);
@@ -264,13 +264,13 @@ int kern_sigtimedwait(struct thread *td, sigset_t waitset,
int kern_sigqueue(struct thread *td, pid_t pid, int signum,
union sigval *value);
int kern_socket(struct thread *td, int domain, int type, int protocol);
-int kern_statat(struct thread *td, int flag, int fd, char *path,
+int kern_statat(struct thread *td, int flag, int fd, const char *path,
enum uio_seg pathseg, struct stat *sbp,
void (*hook)(struct vnode *vp, struct stat *sbp));
-int kern_statfs(struct thread *td, char *path, enum uio_seg pathseg,
+int kern_statfs(struct thread *td, const char *path, enum uio_seg pathseg,
struct statfs *buf);
-int kern_symlinkat(struct thread *td, char *path1, int fd, char *path2,
- enum uio_seg segflg);
+int kern_symlinkat(struct thread *td, const char *path1, int fd,
+ const char *path2, enum uio_seg segflg);
int kern_ktimer_create(struct thread *td, clockid_t clock_id,
struct sigevent *evp, int *timerid, int preset_id);
int kern_ktimer_delete(struct thread *, int);
@@ -283,13 +283,13 @@ int kern_thr_alloc(struct proc *, int pages, struct thread **);
int kern_thr_exit(struct thread *td);
int kern_thr_new(struct thread *td, struct thr_param *param);
int kern_thr_suspend(struct thread *td, struct timespec *tsp);
-int kern_truncate(struct thread *td, char *path, enum uio_seg pathseg,
- off_t length);
-int kern_unlinkat(struct thread *td, int fd, char *path,
+int kern_truncate(struct thread *td, const char *path,
+ enum uio_seg pathseg, off_t length);
+int kern_unlinkat(struct thread *td, int fd, const char *path,
enum uio_seg pathseg, int flag, ino_t oldinum);
-int kern_utimesat(struct thread *td, int fd, char *path,
+int kern_utimesat(struct thread *td, int fd, const char *path,
enum uio_seg pathseg, struct timeval *tptr, enum uio_seg tptrseg);
-int kern_utimensat(struct thread *td, int fd, char *path,
+int kern_utimensat(struct thread *td, int fd, const char *path,
enum uio_seg pathseg, struct timespec *tptr, enum uio_seg tptrseg,
int follow);
int kern_wait(struct thread *td, pid_t pid, int *status, int options,
diff --git a/sys/sys/sysctl.h b/sys/sys/sysctl.h
index 8264f681bcc0..843b6e623cc6 100644
--- a/sys/sys/sysctl.h
+++ b/sys/sys/sysctl.h
@@ -216,6 +216,9 @@ int sysctl_handle_counter_u64_array(SYSCTL_HANDLER_ARGS);
int sysctl_handle_uma_zone_max(SYSCTL_HANDLER_ARGS);
int sysctl_handle_uma_zone_cur(SYSCTL_HANDLER_ARGS);
+int sysctl_msec_to_sbintime(SYSCTL_HANDLER_ARGS);
+int sysctl_usec_to_sbintime(SYSCTL_HANDLER_ARGS);
+
int sysctl_dpcpu_int(SYSCTL_HANDLER_ARGS);
int sysctl_dpcpu_long(SYSCTL_HANDLER_ARGS);
int sysctl_dpcpu_quad(SYSCTL_HANDLER_ARGS);
@@ -799,6 +802,42 @@ TAILQ_HEAD(sysctl_ctx_list, sysctl_ctx_entry);
NULL); \
})
+/* OID expressing a sbintime_t as microseconds */
+#define SYSCTL_SBINTIME_USEC(parent, nbr, name, access, ptr, descr) \
+ SYSCTL_OID(parent, nbr, name, \
+ CTLTYPE_INT | CTLFLAG_MPSAFE | CTLFLAG_RD | (access), \
+ (ptr), 0, sysctl_usec_to_sbintime, "Q", descr); \
+ CTASSERT(((access) & CTLTYPE) == 0 || \
+ ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_S64)
+#define SYSCTL_ADD_SBINTIME_USEC(ctx, parent, nbr, name, access, ptr, descr) \
+({ \
+ sbintime_t *__ptr = (ptr); \
+ CTASSERT(((access) & CTLTYPE) == 0 || \
+ ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_S64); \
+ sysctl_add_oid(ctx, parent, nbr, name, \
+ CTLTYPE_INT | CTLFLAG_MPSAFE | CTLFLAG_RD | (access), \
+ __ptr, 0, sysctl_usec_to_sbintime, "Q", __DESCR(descr), \
+ NULL); \
+})
+
+/* OID expressing a sbintime_t as milliseconds */
+#define SYSCTL_SBINTIME_MSEC(parent, nbr, name, access, ptr, descr) \
+ SYSCTL_OID(parent, nbr, name, \
+ CTLTYPE_INT | CTLFLAG_MPSAFE | CTLFLAG_RD | (access), \
+ (ptr), 0, sysctl_msec_to_sbintime, "Q", descr); \
+ CTASSERT(((access) & CTLTYPE) == 0 || \
+ ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_S64)
+#define SYSCTL_ADD_SBINTIME_MSEC(ctx, parent, nbr, name, access, ptr, descr) \
+({ \
+ sbintime_t *__ptr = (ptr); \
+ CTASSERT(((access) & CTLTYPE) == 0 || \
+ ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_S64); \
+ sysctl_add_oid(ctx, parent, nbr, name, \
+ CTLTYPE_INT | CTLFLAG_MPSAFE | CTLFLAG_RD | (access), \
+ __ptr, 0, sysctl_msec_to_sbintime, "Q", __DESCR(descr), \
+ NULL); \
+})
+
/*
* A macro to generate a read-only sysctl to indicate the presence of optional
* kernel features.
diff --git a/sys/sys/sysproto.h b/sys/sys/sysproto.h
index 936e5fd40332..fa54d1234201 100644
--- a/sys/sys/sysproto.h
+++ b/sys/sys/sysproto.h
@@ -54,9 +54,9 @@ struct write_args {
char nbyte_l_[PADL_(size_t)]; size_t nbyte; char nbyte_r_[PADR_(size_t)];
};
struct open_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char flags_l_[PADL_(int)]; int flags; char flags_r_[PADR_(int)];
- char mode_l_[PADL_(int)]; int mode; char mode_r_[PADR_(int)];
+ char mode_l_[PADL_(mode_t)]; mode_t mode; char mode_r_[PADR_(mode_t)];
};
struct close_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
@@ -68,24 +68,24 @@ struct wait4_args {
char rusage_l_[PADL_(struct rusage *)]; struct rusage * rusage; char rusage_r_[PADR_(struct rusage *)];
};
struct link_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
- char link_l_[PADL_(char *)]; char * link; char link_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
+ char link_l_[PADL_(const char *)]; const char * link; char link_r_[PADR_(const char *)];
};
struct unlink_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
};
struct chdir_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
};
struct fchdir_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
};
struct chmod_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
- char mode_l_[PADL_(int)]; int mode; char mode_r_[PADR_(int)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
+ char mode_l_[PADL_(mode_t)]; mode_t mode; char mode_r_[PADR_(mode_t)];
};
struct chown_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char uid_l_[PADL_(int)]; int uid; char uid_r_[PADR_(int)];
char gid_l_[PADL_(int)]; int gid; char gid_r_[PADR_(int)];
};
@@ -96,13 +96,13 @@ struct getpid_args {
register_t dummy;
};
struct mount_args {
- char type_l_[PADL_(char *)]; char * type; char type_r_[PADR_(char *)];
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char type_l_[PADL_(const char *)]; const char * type; char type_r_[PADR_(const char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char flags_l_[PADL_(int)]; int flags; char flags_r_[PADR_(int)];
char data_l_[PADL_(caddr_t)]; caddr_t data; char data_r_[PADR_(caddr_t)];
};
struct unmount_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char flags_l_[PADL_(int)]; int flags; char flags_r_[PADR_(int)];
};
struct setuid_args {
@@ -154,7 +154,7 @@ struct getsockname_args {
char alen_l_[PADL_(__socklen_t *)]; __socklen_t * alen; char alen_r_[PADR_(__socklen_t *)];
};
struct access_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char amode_l_[PADL_(int)]; int amode; char amode_r_[PADR_(int)];
};
struct chflags_args {
@@ -204,10 +204,10 @@ struct getlogin_args {
char namelen_l_[PADL_(u_int)]; u_int namelen; char namelen_r_[PADR_(u_int)];
};
struct setlogin_args {
- char namebuf_l_[PADL_(char *)]; char * namebuf; char namebuf_r_[PADR_(char *)];
+ char namebuf_l_[PADL_(const char *)]; const char * namebuf; char namebuf_r_[PADR_(const char *)];
};
struct acct_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
};
struct osigpending_args {
register_t dummy;
@@ -225,27 +225,27 @@ struct reboot_args {
char opt_l_[PADL_(int)]; int opt; char opt_r_[PADR_(int)];
};
struct revoke_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
};
struct symlink_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
- char link_l_[PADL_(char *)]; char * link; char link_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
+ char link_l_[PADL_(const char *)]; const char * link; char link_r_[PADR_(const char *)];
};
struct readlink_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char buf_l_[PADL_(char *)]; char * buf; char buf_r_[PADR_(char *)];
char count_l_[PADL_(size_t)]; size_t count; char count_r_[PADR_(size_t)];
};
struct execve_args {
- char fname_l_[PADL_(char *)]; char * fname; char fname_r_[PADR_(char *)];
+ char fname_l_[PADL_(const char *)]; const char * fname; char fname_r_[PADR_(const char *)];
char argv_l_[PADL_(char **)]; char ** argv; char argv_r_[PADR_(char **)];
char envv_l_[PADL_(char **)]; char ** envv; char envv_r_[PADR_(char **)];
};
struct umask_args {
- char newmask_l_[PADL_(int)]; int newmask; char newmask_r_[PADR_(int)];
+ char newmask_l_[PADL_(mode_t)]; mode_t newmask; char newmask_r_[PADR_(mode_t)];
};
struct chroot_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
};
struct getpagesize_args {
register_t dummy;
@@ -307,7 +307,7 @@ struct owait_args {
register_t dummy;
};
struct swapon_args {
- char name_l_[PADL_(char *)]; char * name; char name_r_[PADR_(char *)];
+ char name_l_[PADL_(const char *)]; const char * name; char name_r_[PADR_(const char *)];
};
struct getitimer_args {
char which_l_[PADL_(u_int)]; u_int which; char which_r_[PADR_(u_int)];
@@ -406,7 +406,7 @@ struct fchown_args {
};
struct fchmod_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
- char mode_l_[PADL_(int)]; int mode; char mode_r_[PADR_(int)];
+ char mode_l_[PADL_(mode_t)]; mode_t mode; char mode_r_[PADR_(mode_t)];
};
struct setreuid_args {
char ruid_l_[PADL_(int)]; int ruid; char ruid_r_[PADR_(int)];
@@ -417,16 +417,16 @@ struct setregid_args {
char egid_l_[PADL_(int)]; int egid; char egid_r_[PADR_(int)];
};
struct rename_args {
- char from_l_[PADL_(char *)]; char * from; char from_r_[PADR_(char *)];
- char to_l_[PADL_(char *)]; char * to; char to_r_[PADR_(char *)];
+ char from_l_[PADL_(const char *)]; const char * from; char from_r_[PADR_(const char *)];
+ char to_l_[PADL_(const char *)]; const char * to; char to_r_[PADR_(const char *)];
};
struct flock_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
char how_l_[PADL_(int)]; int how; char how_r_[PADR_(int)];
};
struct mkfifo_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
- char mode_l_[PADL_(int)]; int mode; char mode_r_[PADR_(int)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
+ char mode_l_[PADL_(mode_t)]; mode_t mode; char mode_r_[PADR_(mode_t)];
};
struct sendto_args {
char s_l_[PADL_(int)]; int s; char s_r_[PADR_(int)];
@@ -447,14 +447,14 @@ struct socketpair_args {
char rsv_l_[PADL_(int *)]; int * rsv; char rsv_r_[PADR_(int *)];
};
struct mkdir_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
- char mode_l_[PADL_(int)]; int mode; char mode_r_[PADR_(int)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
+ char mode_l_[PADL_(mode_t)]; mode_t mode; char mode_r_[PADR_(mode_t)];
};
struct rmdir_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
};
struct utimes_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char tptr_l_[PADL_(struct timeval *)]; struct timeval * tptr; char tptr_r_[PADR_(struct timeval *)];
};
struct adjtime_args {
@@ -468,7 +468,7 @@ struct setsid_args {
register_t dummy;
};
struct quotactl_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char cmd_l_[PADL_(int)]; int cmd; char cmd_r_[PADR_(int)];
char uid_l_[PADL_(int)]; int uid; char uid_r_[PADR_(int)];
char arg_l_[PADL_(caddr_t)]; caddr_t arg; char arg_r_[PADR_(caddr_t)];
@@ -487,11 +487,11 @@ struct nfssvc_args {
char argp_l_[PADL_(caddr_t)]; caddr_t argp; char argp_r_[PADR_(caddr_t)];
};
struct lgetfh_args {
- char fname_l_[PADL_(char *)]; char * fname; char fname_r_[PADR_(char *)];
+ char fname_l_[PADL_(const char *)]; const char * fname; char fname_r_[PADR_(const char *)];
char fhp_l_[PADL_(struct fhandle *)]; struct fhandle * fhp; char fhp_r_[PADR_(struct fhandle *)];
};
struct getfh_args {
- char fname_l_[PADL_(char *)]; char * fname; char fname_r_[PADR_(char *)];
+ char fname_l_[PADL_(const char *)]; const char * fname; char fname_r_[PADR_(const char *)];
char fhp_l_[PADL_(struct fhandle *)]; struct fhandle * fhp; char fhp_r_[PADR_(struct fhandle *)];
};
struct sysarch_args {
@@ -540,7 +540,7 @@ struct seteuid_args {
char euid_l_[PADL_(uid_t)]; uid_t euid; char euid_r_[PADR_(uid_t)];
};
struct pathconf_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char name_l_[PADL_(int)]; int name; char name_r_[PADR_(int)];
};
struct fpathconf_args {
@@ -572,7 +572,7 @@ struct munlock_args {
char len_l_[PADL_(size_t)]; size_t len; char len_r_[PADR_(size_t)];
};
struct undelete_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
};
struct futimes_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
@@ -698,7 +698,7 @@ struct issetugid_args {
register_t dummy;
};
struct lchown_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char uid_l_[PADL_(int)]; int uid; char uid_r_[PADR_(int)];
char gid_l_[PADL_(int)]; int gid; char gid_r_[PADR_(int)];
};
@@ -715,11 +715,11 @@ struct lio_listio_args {
char sig_l_[PADL_(struct sigevent *)]; struct sigevent * sig; char sig_r_[PADR_(struct sigevent *)];
};
struct lchmod_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char mode_l_[PADL_(mode_t)]; mode_t mode; char mode_r_[PADR_(mode_t)];
};
struct lutimes_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char tptr_l_[PADL_(struct timeval *)]; struct timeval * tptr; char tptr_r_[PADR_(struct timeval *)];
};
struct preadv_args {
@@ -983,7 +983,7 @@ struct __setugid_args {
char flag_l_[PADL_(int)]; int flag; char flag_r_[PADR_(int)];
};
struct eaccess_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char amode_l_[PADL_(int)]; int amode; char amode_r_[PADR_(int)];
};
struct afs3_syscall_args {
@@ -1115,7 +1115,7 @@ struct extattr_delete_link_args {
char attrname_l_[PADL_(const char *)]; const char * attrname; char attrname_r_[PADR_(const char *)];
};
struct __mac_execve_args {
- char fname_l_[PADL_(char *)]; char * fname; char fname_r_[PADR_(char *)];
+ char fname_l_[PADL_(const char *)]; const char * fname; char fname_r_[PADR_(const char *)];
char argv_l_[PADL_(char **)]; char ** argv; char argv_r_[PADR_(char **)];
char envv_l_[PADL_(char **)]; char ** envv; char envv_r_[PADR_(char **)];
char mac_p_l_[PADL_(struct mac *)]; struct mac * mac_p; char mac_p_r_[PADR_(struct mac *)];
@@ -1244,7 +1244,7 @@ struct setaudit_addr_args {
char length_l_[PADL_(u_int)]; u_int length; char length_r_[PADR_(u_int)];
};
struct auditctl_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
};
struct _umtx_op_args {
char obj_l_[PADL_(void *)]; void * obj; char obj_r_[PADR_(void *)];
@@ -1369,7 +1369,7 @@ struct lseek_args {
char whence_l_[PADL_(int)]; int whence; char whence_r_[PADR_(int)];
};
struct truncate_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char length_l_[PADL_(off_t)]; off_t length; char length_r_[PADR_(off_t)];
};
struct ftruncate_args {
@@ -1419,19 +1419,19 @@ struct cpuset_setaffinity_args {
};
struct faccessat_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char amode_l_[PADL_(int)]; int amode; char amode_r_[PADR_(int)];
char flag_l_[PADL_(int)]; int flag; char flag_r_[PADR_(int)];
};
struct fchmodat_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char mode_l_[PADL_(mode_t)]; mode_t mode; char mode_r_[PADR_(mode_t)];
char flag_l_[PADL_(int)]; int flag; char flag_r_[PADR_(int)];
};
struct fchownat_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char uid_l_[PADL_(uid_t)]; uid_t uid; char uid_r_[PADR_(uid_t)];
char gid_l_[PADL_(gid_t)]; gid_t gid; char gid_r_[PADR_(gid_t)];
char flag_l_[PADL_(int)]; int flag; char flag_r_[PADR_(int)];
@@ -1443,59 +1443,59 @@ struct fexecve_args {
};
struct futimesat_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char times_l_[PADL_(struct timeval *)]; struct timeval * times; char times_r_[PADR_(struct timeval *)];
};
struct linkat_args {
char fd1_l_[PADL_(int)]; int fd1; char fd1_r_[PADR_(int)];
- char path1_l_[PADL_(char *)]; char * path1; char path1_r_[PADR_(char *)];
+ char path1_l_[PADL_(const char *)]; const char * path1; char path1_r_[PADR_(const char *)];
char fd2_l_[PADL_(int)]; int fd2; char fd2_r_[PADR_(int)];
- char path2_l_[PADL_(char *)]; char * path2; char path2_r_[PADR_(char *)];
+ char path2_l_[PADL_(const char *)]; const char * path2; char path2_r_[PADR_(const char *)];
char flag_l_[PADL_(int)]; int flag; char flag_r_[PADR_(int)];
};
struct mkdirat_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char mode_l_[PADL_(mode_t)]; mode_t mode; char mode_r_[PADR_(mode_t)];
};
struct mkfifoat_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char mode_l_[PADL_(mode_t)]; mode_t mode; char mode_r_[PADR_(mode_t)];
};
struct openat_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char flag_l_[PADL_(int)]; int flag; char flag_r_[PADR_(int)];
char mode_l_[PADL_(mode_t)]; mode_t mode; char mode_r_[PADR_(mode_t)];
};
struct readlinkat_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char buf_l_[PADL_(char *)]; char * buf; char buf_r_[PADR_(char *)];
char bufsize_l_[PADL_(size_t)]; size_t bufsize; char bufsize_r_[PADR_(size_t)];
};
struct renameat_args {
char oldfd_l_[PADL_(int)]; int oldfd; char oldfd_r_[PADR_(int)];
- char old_l_[PADL_(char *)]; char * old; char old_r_[PADR_(char *)];
+ char old_l_[PADL_(const char *)]; const char * old; char old_r_[PADR_(const char *)];
char newfd_l_[PADL_(int)]; int newfd; char newfd_r_[PADR_(int)];
- char new_l_[PADL_(char *)]; char * new; char new_r_[PADR_(char *)];
+ char new_l_[PADL_(const char *)]; const char * new; char new_r_[PADR_(const char *)];
};
struct symlinkat_args {
- char path1_l_[PADL_(char *)]; char * path1; char path1_r_[PADR_(char *)];
+ char path1_l_[PADL_(const char *)]; const char * path1; char path1_r_[PADR_(const char *)];
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
- char path2_l_[PADL_(char *)]; char * path2; char path2_r_[PADR_(char *)];
+ char path2_l_[PADL_(const char *)]; const char * path2; char path2_r_[PADR_(const char *)];
};
struct unlinkat_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char flag_l_[PADL_(int)]; int flag; char flag_r_[PADR_(int)];
};
struct posix_openpt_args {
char flags_l_[PADL_(int)]; int flags; char flags_r_[PADR_(int)];
};
struct gssd_syscall_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
};
struct jail_get_args {
char iovp_l_[PADL_(struct iovec *)]; struct iovec * iovp; char iovp_r_[PADR_(struct iovec *)];
@@ -1530,7 +1530,7 @@ struct shmctl_args {
char buf_l_[PADL_(struct shmid_ds *)]; struct shmid_ds * buf; char buf_r_[PADR_(struct shmid_ds *)];
};
struct lpathconf_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char name_l_[PADL_(int)]; int name; char name_r_[PADR_(int)];
};
struct __cap_rights_get_args {
@@ -1691,7 +1691,7 @@ struct futimens_args {
};
struct utimensat_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char times_l_[PADL_(struct timespec *)]; struct timespec * times; char times_r_[PADR_(struct timespec *)];
char flag_l_[PADL_(int)]; int flag; char flag_r_[PADR_(int)];
};
@@ -1704,7 +1704,7 @@ struct fstat_args {
};
struct fstatat_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char buf_l_[PADL_(struct stat *)]; struct stat * buf; char buf_r_[PADR_(struct stat *)];
char flag_l_[PADL_(int)]; int flag; char flag_r_[PADR_(int)];
};
@@ -1719,7 +1719,7 @@ struct getdirentries_args {
char basep_l_[PADL_(off_t *)]; off_t * basep; char basep_r_[PADR_(off_t *)];
};
struct statfs_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char buf_l_[PADL_(struct statfs *)]; struct statfs * buf; char buf_r_[PADR_(struct statfs *)];
};
struct fstatfs_args {
@@ -1737,7 +1737,7 @@ struct fhstatfs_args {
};
struct mknodat_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char mode_l_[PADL_(mode_t)]; mode_t mode; char mode_r_[PADR_(mode_t)];
char dev_l_[PADL_(dev_t)]; dev_t dev; char dev_r_[PADR_(dev_t)];
};
@@ -2154,7 +2154,7 @@ int sys_getrandom(struct thread *, struct getrandom_args *);
#ifdef COMPAT_43
struct ocreat_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char mode_l_[PADL_(int)]; int mode; char mode_r_[PADR_(int)];
};
struct olseek_args {
@@ -2163,11 +2163,11 @@ struct olseek_args {
char whence_l_[PADL_(int)]; int whence; char whence_r_[PADR_(int)];
};
struct ostat_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char ub_l_[PADL_(struct ostat *)]; struct ostat * ub; char ub_r_[PADR_(struct ostat *)];
};
struct olstat_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char ub_l_[PADL_(struct ostat *)]; struct ostat * ub; char ub_r_[PADR_(struct ostat *)];
};
struct osigaction_args {
@@ -2249,7 +2249,7 @@ struct osendmsg_args {
char flags_l_[PADL_(int)]; int flags; char flags_r_[PADR_(int)];
};
struct otruncate_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char length_l_[PADL_(long)]; long length; char length_r_[PADR_(long)];
};
struct oftruncate_args {
@@ -2331,7 +2331,7 @@ struct freebsd4_getfsstat_args {
char mode_l_[PADL_(int)]; int mode; char mode_r_[PADR_(int)];
};
struct freebsd4_statfs_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char buf_l_[PADL_(struct ostatfs *)]; struct ostatfs * buf; char buf_r_[PADR_(struct ostatfs *)];
};
struct freebsd4_fstatfs_args {
@@ -2416,7 +2416,7 @@ struct freebsd6_lseek_args {
char whence_l_[PADL_(int)]; int whence; char whence_r_[PADR_(int)];
};
struct freebsd6_truncate_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char pad_l_[PADL_(int)]; int pad; char pad_r_[PADR_(int)];
char length_l_[PADL_(off_t)]; off_t length; char length_r_[PADR_(off_t)];
};
@@ -2485,7 +2485,7 @@ int freebsd10_pipe(struct thread *, struct freebsd10_pipe_args *);
#ifdef COMPAT_FREEBSD11
struct freebsd11_mknod_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char mode_l_[PADL_(int)]; int mode; char mode_r_[PADR_(int)];
char dev_l_[PADL_(int)]; int dev; char dev_r_[PADR_(int)];
};
@@ -2493,7 +2493,7 @@ struct freebsd11_vadvise_args {
char anom_l_[PADL_(int)]; int anom; char anom_r_[PADR_(int)];
};
struct freebsd11_stat_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char ub_l_[PADL_(struct freebsd11_stat *)]; struct freebsd11_stat * ub; char ub_r_[PADR_(struct freebsd11_stat *)];
};
struct freebsd11_fstat_args {
@@ -2501,7 +2501,7 @@ struct freebsd11_fstat_args {
char sb_l_[PADL_(struct freebsd11_stat *)]; struct freebsd11_stat * sb; char sb_r_[PADR_(struct freebsd11_stat *)];
};
struct freebsd11_lstat_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char ub_l_[PADL_(struct freebsd11_stat *)]; struct freebsd11_stat * ub; char ub_r_[PADR_(struct freebsd11_stat *)];
};
struct freebsd11_getdirentries_args {
@@ -2516,7 +2516,7 @@ struct freebsd11_getdents_args {
char count_l_[PADL_(size_t)]; size_t count; char count_r_[PADR_(size_t)];
};
struct freebsd11_nstat_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char ub_l_[PADL_(struct nstat *)]; struct nstat * ub; char ub_r_[PADR_(struct nstat *)];
};
struct freebsd11_nfstat_args {
@@ -2524,7 +2524,7 @@ struct freebsd11_nfstat_args {
char sb_l_[PADL_(struct nstat *)]; struct nstat * sb; char sb_r_[PADR_(struct nstat *)];
};
struct freebsd11_nlstat_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char ub_l_[PADL_(struct nstat *)]; struct nstat * ub; char ub_r_[PADR_(struct nstat *)];
};
struct freebsd11_fhstat_args {
@@ -2545,7 +2545,7 @@ struct freebsd11_getfsstat_args {
char mode_l_[PADL_(int)]; int mode; char mode_r_[PADR_(int)];
};
struct freebsd11_statfs_args {
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char buf_l_[PADL_(struct freebsd11_statfs *)]; struct freebsd11_statfs * buf; char buf_r_[PADR_(struct freebsd11_statfs *)];
};
struct freebsd11_fstatfs_args {
@@ -2558,13 +2558,13 @@ struct freebsd11_fhstatfs_args {
};
struct freebsd11_fstatat_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char buf_l_[PADL_(struct freebsd11_stat *)]; struct freebsd11_stat * buf; char buf_r_[PADR_(struct freebsd11_stat *)];
char flag_l_[PADL_(int)]; int flag; char flag_r_[PADR_(int)];
};
struct freebsd11_mknodat_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
- char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char path_l_[PADL_(const char *)]; const char * path; char path_r_[PADR_(const char *)];
char mode_l_[PADL_(mode_t)]; mode_t mode; char mode_r_[PADR_(mode_t)];
char dev_l_[PADL_(uint32_t)]; uint32_t dev; char dev_r_[PADR_(uint32_t)];
};
diff --git a/sys/sys/types.h b/sys/sys/types.h
index 021a3cbe24f4..8d702db4a523 100644
--- a/sys/sys/types.h
+++ b/sys/sys/types.h
@@ -400,10 +400,10 @@ __minor(dev_t _d)
}
#define makedev(M, m) __makedev((M), (m))
static __inline dev_t
-__makedev(int _M, int _m)
+__makedev(int _Major, int _Minor)
{
- return (((dev_t)(_M & 0xffffff00) << 32) | ((_M & 0xff) << 8) |
- ((dev_t)(_m & 0xff00) << 24) | (_m & 0xffff00ff));
+ return (((dev_t)(_Major & 0xffffff00) << 32) | ((_Major & 0xff) << 8) |
+ ((dev_t)(_Minor & 0xff00) << 24) | (_Minor & 0xffff00ff));
}
/*
diff --git a/sys/tools/embed_mfs.sh b/sys/tools/embed_mfs.sh
index 012466230884..072f7818906e 100644
--- a/sys/tools/embed_mfs.sh
+++ b/sys/tools/embed_mfs.sh
@@ -45,7 +45,10 @@ fi
mfs_size=`stat -f '%z' $2 2> /dev/null`
# If we can't determine MFS image size - bail.
-[ -z ${mfs_size} ] && echo "Can't determine MFS image size" && exit 1
+if [ -z ${mfs_size} ]; then
+ echo "Can't determine MFS image size"
+ exit 1
+fi
err_no_mfs="Can't locate mfs section within "
@@ -53,7 +56,10 @@ if file -b $1 | grep -q '^ELF ..-bit .SB executable'; then
sec_info=`elfdump -c $1 2> /dev/null | grep -A 5 -E "sh_name: oldmfs$"`
# If we can't find the mfs section within the given kernel - bail.
- [ -z "${sec_info}" ] && echo "${err_no_mfs} $1" && exit 1
+ if [ -z "${sec_info}" ]; then
+ echo "${err_no_mfs} $1"
+ exit 1
+ fi
sec_size=`echo "${sec_info}" | awk '/sh_size/ {print $2}' 2>/dev/null`
sec_start=`echo "${sec_info}" | \
@@ -78,7 +84,10 @@ else
fi
# If the mfs section size is smaller than the mfs image - bail.
-[ ${sec_size} -lt ${mfs_size} ] && echo "MFS image too large" && exit 1
+if [ ${sec_size} -lt ${mfs_size} ]; then
+ echo "MFS image too large"
+ exit 1
+fi
# Dump the mfs image into the mfs section
dd if=$2 ibs=8192 of=$1 obs=${sec_start} oseek=1 conv=notrunc 2> /dev/null && \
diff --git a/sys/ufs/ufs/ufs_vnops.c b/sys/ufs/ufs/ufs_vnops.c
index 9e8896866660..f0e3f2d23df5 100644
--- a/sys/ufs/ufs/ufs_vnops.c
+++ b/sys/ufs/ufs/ufs_vnops.c
@@ -2095,7 +2095,7 @@ ufs_symlink(ap)
struct vnode **a_vpp;
struct componentname *a_cnp;
struct vattr *a_vap;
- char *a_target;
+ const char *a_target;
} */ *ap;
{
struct vnode *vp, **vpp = ap->a_vpp;
@@ -2116,8 +2116,8 @@ ufs_symlink(ap)
ip->i_flag |= IN_CHANGE | IN_UPDATE;
error = UFS_UPDATE(vp, 0);
} else
- error = vn_rdwr(UIO_WRITE, vp, ap->a_target, len, (off_t)0,
- UIO_SYSSPACE, IO_NODELOCKED | IO_NOMACCHECK,
+ error = vn_rdwr(UIO_WRITE, vp, __DECONST(void *, ap->a_target),
+ len, (off_t)0, UIO_SYSSPACE, IO_NODELOCKED | IO_NOMACCHECK,
ap->a_cnp->cn_cred, NOCRED, NULL, NULL);
if (error)
vput(vp);
diff --git a/sys/vm/uma_core.c b/sys/vm/uma_core.c
index 18eb4b57f9a0..9db39ea2ac80 100644
--- a/sys/vm/uma_core.c
+++ b/sys/vm/uma_core.c
@@ -1172,7 +1172,7 @@ page_alloc(uma_zone_t zone, vm_size_t bytes, int domain, uint8_t *pflag,
void *p; /* Returned page */
*pflag = UMA_SLAB_KERNEL;
- p = (void *) kmem_malloc_domain(domain, bytes, wait);
+ p = (void *)kmem_malloc_domainset(DOMAINSET_FIXED(domain), bytes, wait);
return (p);
}
@@ -3608,29 +3608,30 @@ uma_zone_reserve_kva(uma_zone_t zone, int count)
void
uma_prealloc(uma_zone_t zone, int items)
{
+ struct vm_domainset_iter di;
uma_domain_t dom;
uma_slab_t slab;
uma_keg_t keg;
- int domain, slabs;
+ int domain, flags, slabs;
keg = zone_first_keg(zone);
if (keg == NULL)
return;
KEG_LOCK(keg);
slabs = items / keg->uk_ipers;
- domain = 0;
if (slabs * keg->uk_ipers < items)
slabs++;
+ flags = M_WAITOK;
+ vm_domainset_iter_policy_ref_init(&di, &keg->uk_dr, &domain, &flags);
while (slabs-- > 0) {
- slab = keg_alloc_slab(keg, zone, domain, M_WAITOK);
+ slab = keg_alloc_slab(keg, zone, domain, flags);
if (slab == NULL)
return;
MPASS(slab->us_keg == keg);
dom = &keg->uk_domain[slab->us_domain];
LIST_INSERT_HEAD(&dom->ud_free_slab, slab, us_link);
- do {
- domain = (domain + 1) % vm_ndomains;
- } while (VM_DOMAIN_EMPTY(domain));
+ if (vm_domainset_iter_policy(&di, &domain) != 0)
+ break;
}
KEG_UNLOCK(keg);
}
@@ -3717,6 +3718,7 @@ uma_zone_exhausted_nolock(uma_zone_t zone)
void *
uma_large_malloc_domain(vm_size_t size, int domain, int wait)
{
+ struct domainset *policy;
vm_offset_t addr;
uma_slab_t slab;
@@ -3728,10 +3730,9 @@ uma_large_malloc_domain(vm_size_t size, int domain, int wait)
slab = zone_alloc_item(slabzone, NULL, domain, wait);
if (slab == NULL)
return (NULL);
- if (domain == UMA_ANYDOMAIN)
- addr = kmem_malloc(size, wait);
- else
- addr = kmem_malloc_domain(domain, size, wait);
+ policy = (domain == UMA_ANYDOMAIN) ? DOMAINSET_RR() :
+ DOMAINSET_FIXED(domain);
+ addr = kmem_malloc_domainset(policy, size, wait);
if (addr != 0) {
vsetslab(addr, slab);
slab->us_data = (void *)addr;
diff --git a/sys/vm/vm_extern.h b/sys/vm/vm_extern.h
index 3174e645c8be..fb06076e6c43 100644
--- a/sys/vm/vm_extern.h
+++ b/sys/vm/vm_extern.h
@@ -44,6 +44,7 @@ struct vmem;
#ifdef _KERNEL
struct cdev;
struct cdevsw;
+struct domainset;
/* These operate on kernel virtual addresses only. */
vm_offset_t kva_alloc(vm_size_t);
@@ -56,16 +57,17 @@ void kmap_free_wakeup(vm_map_t, vm_offset_t, vm_size_t);
/* These operate on virtual addresses backed by memory. */
vm_offset_t kmem_alloc_attr(vm_size_t size, int flags,
vm_paddr_t low, vm_paddr_t high, vm_memattr_t memattr);
-vm_offset_t kmem_alloc_attr_domain(int domain, vm_size_t size, int flags,
- vm_paddr_t low, vm_paddr_t high, vm_memattr_t memattr);
+vm_offset_t kmem_alloc_attr_domainset(struct domainset *ds, vm_size_t size,
+ int flags, vm_paddr_t low, vm_paddr_t high, vm_memattr_t memattr);
vm_offset_t kmem_alloc_contig(vm_size_t size, int flags,
vm_paddr_t low, vm_paddr_t high, u_long alignment, vm_paddr_t boundary,
vm_memattr_t memattr);
-vm_offset_t kmem_alloc_contig_domain(int domain, vm_size_t size, int flags,
- vm_paddr_t low, vm_paddr_t high, u_long alignment, vm_paddr_t boundary,
- vm_memattr_t memattr);
+vm_offset_t kmem_alloc_contig_domainset(struct domainset *ds, vm_size_t size,
+ int flags, vm_paddr_t low, vm_paddr_t high, u_long alignment,
+ vm_paddr_t boundary, vm_memattr_t memattr);
vm_offset_t kmem_malloc(vm_size_t size, int flags);
-vm_offset_t kmem_malloc_domain(int domain, vm_size_t size, int flags);
+vm_offset_t kmem_malloc_domainset(struct domainset *ds, vm_size_t size,
+ int flags);
void kmem_free(vm_offset_t addr, vm_size_t size);
/* This provides memory for previously allocated address space. */
diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c
index c56e51f3dbfe..e095ccc69edf 100644
--- a/sys/vm/vm_fault.c
+++ b/sys/vm/vm_fault.c
@@ -1181,6 +1181,16 @@ readrest:
*/
vm_object_pip_wakeup(fs.object);
VM_OBJECT_WUNLOCK(fs.object);
+
+ /*
+ * We only try to prefault read-only mappings to the
+ * neighboring pages when this copy-on-write fault is
+ * a hard fault. In other cases, trying to prefault
+ * is typically wasted effort.
+ */
+ if (faultcount == 0)
+ faultcount = 1;
+
/*
* Only use the new page below...
*/
diff --git a/sys/vm/vm_init.c b/sys/vm/vm_init.c
index c62aae488247..2b15e53709c2 100644
--- a/sys/vm/vm_init.c
+++ b/sys/vm/vm_init.c
@@ -123,12 +123,18 @@ vm_mem_init(void *dummy)
domainset_init();
/*
- * Initializes resident memory structures. From here on, all physical
+ * Initialize resident memory structures. From here on, all physical
* memory is accounted for, and we use only virtual addresses.
*/
vm_set_page_size();
virtual_avail = vm_page_startup(virtual_avail);
+ /*
+ * Set an initial domain policy for thread0 so that allocations
+ * can work.
+ */
+ domainset_zero();
+
#ifdef UMA_MD_SMALL_ALLOC
/* Announce page availability to UMA. */
uma_startup1();
diff --git a/sys/vm/vm_kern.c b/sys/vm/vm_kern.c
index e92faff0f371..79108ce1ef64 100644
--- a/sys/vm/vm_kern.c
+++ b/sys/vm/vm_kern.c
@@ -175,7 +175,7 @@ kva_free(vm_offset_t addr, vm_size_t size)
* necessarily physically contiguous. If M_ZERO is specified through the
* given flags, then the pages are zeroed before they are mapped.
*/
-vm_offset_t
+static vm_offset_t
kmem_alloc_attr_domain(int domain, vm_size_t size, int flags, vm_paddr_t low,
vm_paddr_t high, vm_memattr_t memattr)
{
@@ -231,11 +231,20 @@ vm_offset_t
kmem_alloc_attr(vm_size_t size, int flags, vm_paddr_t low, vm_paddr_t high,
vm_memattr_t memattr)
{
+
+ return (kmem_alloc_attr_domainset(DOMAINSET_RR(), size, flags, low,
+ high, memattr));
+}
+
+vm_offset_t
+kmem_alloc_attr_domainset(struct domainset *ds, vm_size_t size, int flags,
+ vm_paddr_t low, vm_paddr_t high, vm_memattr_t memattr)
+{
struct vm_domainset_iter di;
vm_offset_t addr;
int domain;
- vm_domainset_iter_policy_init(&di, DOMAINSET_RR(), &domain, &flags);
+ vm_domainset_iter_policy_init(&di, ds, &domain, &flags);
do {
addr = kmem_alloc_attr_domain(domain, size, flags, low, high,
memattr);
@@ -254,7 +263,7 @@ kmem_alloc_attr(vm_size_t size, int flags, vm_paddr_t low, vm_paddr_t high,
* through the given flags, then the pages are zeroed before they are
* mapped.
*/
-vm_offset_t
+static vm_offset_t
kmem_alloc_contig_domain(int domain, vm_size_t size, int flags, vm_paddr_t low,
vm_paddr_t high, u_long alignment, vm_paddr_t boundary,
vm_memattr_t memattr)
@@ -315,11 +324,21 @@ vm_offset_t
kmem_alloc_contig(vm_size_t size, int flags, vm_paddr_t low, vm_paddr_t high,
u_long alignment, vm_paddr_t boundary, vm_memattr_t memattr)
{
+
+ return (kmem_alloc_contig_domainset(DOMAINSET_RR(), size, flags, low,
+ high, alignment, boundary, memattr));
+}
+
+vm_offset_t
+kmem_alloc_contig_domainset(struct domainset *ds, vm_size_t size, int flags,
+ vm_paddr_t low, vm_paddr_t high, u_long alignment, vm_paddr_t boundary,
+ vm_memattr_t memattr)
+{
struct vm_domainset_iter di;
vm_offset_t addr;
int domain;
- vm_domainset_iter_policy_init(&di, DOMAINSET_RR(), &domain, &flags);
+ vm_domainset_iter_policy_init(&di, ds, &domain, &flags);
do {
addr = kmem_alloc_contig_domain(domain, size, flags, low, high,
alignment, boundary, memattr);
@@ -368,11 +387,11 @@ kmem_suballoc(vm_map_t parent, vm_offset_t *min, vm_offset_t *max,
}
/*
- * kmem_malloc:
+ * kmem_malloc_domain:
*
* Allocate wired-down pages in the kernel's address space.
*/
-vm_offset_t
+static vm_offset_t
kmem_malloc_domain(int domain, vm_size_t size, int flags)
{
vmem_t *arena;
@@ -402,11 +421,18 @@ kmem_malloc_domain(int domain, vm_size_t size, int flags)
vm_offset_t
kmem_malloc(vm_size_t size, int flags)
{
+
+ return (kmem_malloc_domainset(DOMAINSET_RR(), size, flags));
+}
+
+vm_offset_t
+kmem_malloc_domainset(struct domainset *ds, vm_size_t size, int flags)
+{
struct vm_domainset_iter di;
vm_offset_t addr;
int domain;
- vm_domainset_iter_policy_init(&di, DOMAINSET_RR(), &domain, &flags);
+ vm_domainset_iter_policy_init(&di, ds, &domain, &flags);
do {
addr = kmem_malloc_domain(domain, size, flags);
if (addr != 0)
@@ -800,7 +826,6 @@ kmem_bootstrap_free(vm_offset_t start, vm_size_t size)
vmd = vm_pagequeue_domain(m);
vm_domain_free_lock(vmd);
vm_phys_free_pages(m, 0);
- vmd->vmd_page_count++;
vm_domain_free_unlock(vmd);
vm_domain_freecnt_inc(vmd, 1);
diff --git a/sys/vm/vm_map.c b/sys/vm/vm_map.c
index e961dd9e4a25..c44c9ff7bce9 100644
--- a/sys/vm/vm_map.c
+++ b/sys/vm/vm_map.c
@@ -796,6 +796,7 @@ _vm_map_init(vm_map_t map, pmap_t pmap, vm_offset_t min, vm_offset_t max)
{
map->header.next = map->header.prev = &map->header;
+ map->header.eflags = MAP_ENTRY_HEADER;
map->needs_wakeup = FALSE;
map->system_map = 0;
map->pmap = pmap;
@@ -1277,8 +1278,8 @@ charged:
if (object->ref_count > 1 || object->shadow_count != 0)
vm_object_clear_flag(object, OBJ_ONEMAPPING);
VM_OBJECT_WUNLOCK(object);
- } else if (prev_entry != &map->header &&
- (prev_entry->eflags & ~MAP_ENTRY_USER_WIRED) == protoeflags &&
+ } else if ((prev_entry->eflags & ~MAP_ENTRY_USER_WIRED) ==
+ protoeflags &&
(cow & (MAP_STACK_GROWS_DOWN | MAP_STACK_GROWS_UP)) == 0 &&
prev_entry->end == start && (prev_entry->cred == cred ||
(prev_entry->object.vm_object != NULL &&
@@ -1708,8 +1709,7 @@ vm_map_simplify_entry(vm_map_t map, vm_map_entry_t entry)
return;
prev = entry->prev;
- if (prev != &map->header &&
- vm_map_mergeable_neighbors(prev, entry)) {
+ if (vm_map_mergeable_neighbors(prev, entry)) {
vm_map_entry_unlink(map, prev);
entry->start = prev->start;
entry->offset = prev->offset;
@@ -1719,8 +1719,7 @@ vm_map_simplify_entry(vm_map_t map, vm_map_entry_t entry)
}
next = entry->next;
- if (next != &map->header &&
- vm_map_mergeable_neighbors(entry, next)) {
+ if (vm_map_mergeable_neighbors(entry, next)) {
vm_map_entry_unlink(map, next);
entry->end = next->end;
vm_map_entry_resize_free(map, entry);
diff --git a/sys/vm/vm_map.h b/sys/vm/vm_map.h
index 23548bf7d9b5..b1cf8dbc44fc 100644
--- a/sys/vm/vm_map.h
+++ b/sys/vm/vm_map.h
@@ -146,6 +146,7 @@ struct vm_map_entry {
#define MAP_ENTRY_GUARD 0x10000
#define MAP_ENTRY_STACK_GAP_DN 0x20000
#define MAP_ENTRY_STACK_GAP_UP 0x40000
+#define MAP_ENTRY_HEADER 0x80000
#ifdef _KERNEL
static __inline u_char
@@ -175,24 +176,22 @@ vm_map_entry_system_wired_count(vm_map_entry_t entry)
* list. Both structures are ordered based upon the start and
* end addresses contained within each map entry.
*
- * Counterintuitively, the map's min offset value is stored in
- * map->header.end, and its max offset value is stored in
- * map->header.start.
- *
- * The list header has max start value and min end value to act
- * as sentinels for sequential search of the doubly-linked list.
* Sleator and Tarjan's top-down splay algorithm is employed to
* control height imbalance in the binary search tree.
*
+ * The map's min offset value is stored in map->header.end, and
+ * its max offset value is stored in map->header.start. These
+ * values act as sentinels for any forward or backward address
+ * scan of the list. The map header has a special value for the
+ * eflags field, MAP_ENTRY_HEADER, that is set initially, is
+ * never changed, and prevents an eflags match of the header
+ * with any other map entry.
+ *
* List of locks
* (c) const until freed
*/
struct vm_map {
struct vm_map_entry header; /* List of entries */
-/*
- map min_offset header.end (c)
- map max_offset header.start (c)
-*/
struct sx lock; /* Lock for map data */
struct mtx system_mtx;
int nentries; /* Number of entries */
diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c
index 578bcd760071..7a92301d3183 100644
--- a/sys/vm/vm_object.c
+++ b/sys/vm/vm_object.c
@@ -2143,9 +2143,8 @@ vm_object_coalesce(vm_object_t prev_object, vm_ooffset_t prev_offset,
next_size >>= PAGE_SHIFT;
next_pindex = OFF_TO_IDX(prev_offset) + prev_size;
- if (prev_object->ref_count > 1 &&
- prev_object->size != next_pindex &&
- (prev_object->flags & OBJ_ONEMAPPING) == 0) {
+ if ((prev_object->ref_count > 1) &&
+ (prev_object->size != next_pindex)) {
VM_OBJECT_WUNLOCK(prev_object);
return (FALSE);
}
diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c
index e7af2a363957..10b6f7b4a916 100644
--- a/sys/vm/vm_page.c
+++ b/sys/vm/vm_page.c
@@ -855,11 +855,6 @@ vm_page_startup(vm_offset_t vaddr)
*/
vm_reserv_init();
#endif
- /*
- * Set an initial domain policy for thread0 so that allocations
- * can work.
- */
- domainset_zero();
return (vaddr);
}
diff --git a/sys/vm/vm_pageout.c b/sys/vm/vm_pageout.c
index 5c309a04a402..9f592c38410a 100644
--- a/sys/vm/vm_pageout.c
+++ b/sys/vm/vm_pageout.c
@@ -2072,41 +2072,41 @@ vm_pageout_init(void)
static void
vm_pageout(void)
{
- int error;
- int i;
+ struct proc *p;
+ struct thread *td;
+ int error, first, i;
+
+ p = curproc;
+ td = curthread;
swap_pager_swap_init();
- snprintf(curthread->td_name, sizeof(curthread->td_name), "dom0");
- error = kthread_add(vm_pageout_laundry_worker, NULL, curproc, NULL,
- 0, 0, "laundry: dom0");
- if (error != 0)
- panic("starting laundry for domain 0, error %d", error);
- for (i = 1; i < vm_ndomains; i++) {
+ for (first = -1, i = 0; i < vm_ndomains; i++) {
if (VM_DOMAIN_EMPTY(i)) {
if (bootverbose)
printf("domain %d empty; skipping pageout\n",
i);
continue;
}
-
- error = kthread_add(vm_pageout_worker, (void *)(uintptr_t)i,
- curproc, NULL, 0, 0, "dom%d", i);
- if (error != 0) {
- panic("starting pageout for domain %d, error %d\n",
- i, error);
+ if (first == -1)
+ first = i;
+ else {
+ error = kthread_add(vm_pageout_worker,
+ (void *)(uintptr_t)i, p, NULL, 0, 0, "dom%d", i);
+ if (error != 0)
+ panic("starting pageout for domain %d: %d\n",
+ i, error);
}
error = kthread_add(vm_pageout_laundry_worker,
- (void *)(uintptr_t)i, curproc, NULL, 0, 0,
- "laundry: dom%d", i);
+ (void *)(uintptr_t)i, p, NULL, 0, 0, "laundry: dom%d", i);
if (error != 0)
- panic("starting laundry for domain %d, error %d",
- i, error);
+ panic("starting laundry for domain %d: %d", i, error);
}
- error = kthread_add(uma_reclaim_worker, NULL, curproc, NULL,
- 0, 0, "uma");
+ error = kthread_add(uma_reclaim_worker, NULL, p, NULL, 0, 0, "uma");
if (error != 0)
panic("starting uma_reclaim helper, error %d\n", error);
- vm_pageout_worker((void *)(uintptr_t)0);
+
+ snprintf(td->td_name, sizeof(td->td_name), "dom%d", first);
+ vm_pageout_worker((void *)(uintptr_t)first);
}
/*
diff --git a/sys/x86/iommu/busdma_dmar.c b/sys/x86/iommu/busdma_dmar.c
index 40786d46621c..c4bcef01b461 100644
--- a/sys/x86/iommu/busdma_dmar.c
+++ b/sys/x86/iommu/busdma_dmar.c
@@ -34,6 +34,7 @@ __FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/systm.h>
+#include <sys/domainset.h>
#include <sys/malloc.h>
#include <sys/bus.h>
#include <sys/conf.h>
@@ -373,16 +374,16 @@ dmar_bus_dmamap_create(bus_dma_tag_t dmat, int flags, bus_dmamap_t *mapp)
WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL, "%s", __func__);
tag = (struct bus_dma_tag_dmar *)dmat;
- map = malloc_domain(sizeof(*map), M_DMAR_DMAMAP,
- tag->common.domain, M_NOWAIT | M_ZERO);
+ map = malloc_domainset(sizeof(*map), M_DMAR_DMAMAP,
+ DOMAINSET_PREF(tag->common.domain), M_NOWAIT | M_ZERO);
if (map == NULL) {
*mapp = NULL;
return (ENOMEM);
}
if (tag->segments == NULL) {
- tag->segments = malloc_domain(sizeof(bus_dma_segment_t) *
+ tag->segments = malloc_domainset(sizeof(bus_dma_segment_t) *
tag->common.nsegments, M_DMAR_DMAMAP,
- tag->common.domain, M_NOWAIT);
+ DOMAINSET_PREF(tag->common.domain), M_NOWAIT);
if (tag->segments == NULL) {
free_domain(map, M_DMAR_DMAMAP);
*mapp = NULL;
@@ -447,13 +448,13 @@ dmar_bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
if (tag->common.maxsize < PAGE_SIZE &&
tag->common.alignment <= tag->common.maxsize &&
attr == VM_MEMATTR_DEFAULT) {
- *vaddr = malloc_domain(tag->common.maxsize, M_DEVBUF,
- tag->common.domain, mflags);
+ *vaddr = malloc_domainset(tag->common.maxsize, M_DEVBUF,
+ DOMAINSET_PREF(tag->common.domain), mflags);
map->flags |= BUS_DMAMAP_DMAR_MALLOC;
} else {
- *vaddr = (void *)kmem_alloc_attr_domain(tag->common.domain,
- tag->common.maxsize, mflags, 0ul, BUS_SPACE_MAXADDR,
- attr);
+ *vaddr = (void *)kmem_alloc_attr_domainset(
+ DOMAINSET_PREF(tag->common.domain), tag->common.maxsize,
+ mflags, 0ul, BUS_SPACE_MAXADDR, attr);
map->flags |= BUS_DMAMAP_DMAR_KMEM_ALLOC;
}
if (*vaddr == NULL) {
diff --git a/sys/x86/pci/pci_early_quirks.c b/sys/x86/pci/pci_early_quirks.c
new file mode 100644
index 000000000000..29788cdd19d4
--- /dev/null
+++ b/sys/x86/pci/pci_early_quirks.c
@@ -0,0 +1,287 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ *
+ * Copyright (c) 2018 Johannes Lundberg
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/bus.h>
+#include <sys/kernel.h>
+#include <vm/vm.h>
+/* XXX: enable this once the KPI is available */
+/* #include <x86/physmem.h> */
+#include <machine/pci_cfgreg.h>
+#include <machine/md_var.h>
+#include <dev/pci/pcivar.h>
+#include <dev/pci/pcireg.h>
+
+#include <x86/pci/pci_early_quirks.h>
+
+#define MiB(v) ((unsigned long)(v) << 20)
+
+struct pci_device_id {
+ uint32_t vendor;
+ uint32_t device;
+ const struct intel_stolen_ops *data;
+};
+
+/*
+ * These global variables are read by LinuxKPI.
+ * LinuxKPI provide this information to the i915 driver.
+ */
+vm_paddr_t intel_graphics_stolen_base = 0;
+vm_paddr_t intel_graphics_stolen_size = 0;
+
+/*
+ * Intel early quirks functions
+ */
+static vm_paddr_t
+intel_stolen_base_gen3(int bus, int slot, int func)
+{
+ uint32_t ctrl;
+ vm_paddr_t val;
+
+ ctrl = pci_cfgregread(bus, slot, func, INTEL_BSM, 4);
+ val = ctrl & INTEL_BSM_MASK;
+ return (val);
+}
+
+static vm_paddr_t
+intel_stolen_size_gen3(int bus, int slot, int func)
+{
+ uint32_t ctrl;
+ vm_paddr_t val;
+
+ ctrl = pci_cfgregread(0, 0, 0, I830_GMCH_CTRL, 2);
+ val = ctrl & I855_GMCH_GMS_MASK;
+
+ switch (val) {
+ case I855_GMCH_GMS_STOLEN_1M:
+ return (MiB(1));
+ case I855_GMCH_GMS_STOLEN_4M:
+ return (MiB(4));
+ case I855_GMCH_GMS_STOLEN_8M:
+ return (MiB(8));
+ case I855_GMCH_GMS_STOLEN_16M:
+ return (MiB(16));
+ case I855_GMCH_GMS_STOLEN_32M:
+ return (MiB(32));
+ case I915_GMCH_GMS_STOLEN_48M:
+ return (MiB(48));
+ case I915_GMCH_GMS_STOLEN_64M:
+ return (MiB(64));
+ case G33_GMCH_GMS_STOLEN_128M:
+ return (MiB(128));
+ case G33_GMCH_GMS_STOLEN_256M:
+ return (MiB(256));
+ case INTEL_GMCH_GMS_STOLEN_96M:
+ return (MiB(96));
+ case INTEL_GMCH_GMS_STOLEN_160M:
+ return (MiB(160));
+ case INTEL_GMCH_GMS_STOLEN_224M:
+ return (MiB(224));
+ case INTEL_GMCH_GMS_STOLEN_352M:
+ return (MiB(352));
+ }
+ return (0);
+}
+
+static vm_paddr_t
+intel_stolen_size_gen6(int bus, int slot, int func)
+{
+ uint32_t ctrl;
+ vm_paddr_t val;
+
+ ctrl = pci_cfgregread(bus, slot, func, SNB_GMCH_CTRL, 2);
+ val = (ctrl >> SNB_GMCH_GMS_SHIFT) & SNB_GMCH_GMS_MASK;
+ return (val * MiB(32));
+}
+
+static vm_paddr_t
+intel_stolen_size_gen8(int bus, int slot, int func)
+{
+ uint32_t ctrl;
+ vm_paddr_t val;
+
+ ctrl = pci_cfgregread(bus, slot, func, SNB_GMCH_CTRL, 2);
+ val = (ctrl >> BDW_GMCH_GMS_SHIFT) & BDW_GMCH_GMS_MASK;
+ return (val * MiB(32));
+}
+
+static vm_paddr_t
+intel_stolen_size_chv(int bus, int slot, int func)
+{
+ uint32_t ctrl;
+ vm_paddr_t val;
+
+ ctrl = pci_cfgregread(bus, slot, func, SNB_GMCH_CTRL, 2);
+ val = (ctrl >> SNB_GMCH_GMS_SHIFT) & SNB_GMCH_GMS_MASK;
+
+ /*
+ * 0x0 to 0x10: 32MB increments starting at 0MB
+ * 0x11 to 0x16: 4MB increments starting at 8MB
+ * 0x17 to 0x1d: 4MB increments start at 36MB
+ */
+ if (val < 0x11)
+ return (val * MiB(32));
+ else if (val < 0x17)
+ return ((val - 0x11) * MiB(4) + MiB(8));
+ else
+ return ((val - 0x17) * MiB(4) + MiB(36));
+}
+
+static vm_paddr_t
+intel_stolen_size_gen9(int bus, int slot, int func)
+{
+ uint32_t ctrl;
+ vm_paddr_t val;
+
+ ctrl = pci_cfgregread(bus, slot, func, SNB_GMCH_CTRL, 2);
+ val = (ctrl >> BDW_GMCH_GMS_SHIFT) & BDW_GMCH_GMS_MASK;
+
+ /* 0x0 to 0xEF: 32MB increments starting at 0MB */
+ /* 0xF0 to 0xFE: 4MB increments starting at 4MB */
+ if (val < 0xF0)
+ return (val * MiB(32));
+ return ((val - 0xF0) * MiB(4) + MiB(4));
+}
+
+struct intel_stolen_ops {
+ vm_paddr_t (*base)(int bus, int slot, int func);
+ vm_paddr_t (*size)(int bus, int slot, int func);
+};
+
+static const struct intel_stolen_ops intel_stolen_ops_gen3 = {
+ .base = intel_stolen_base_gen3,
+ .size = intel_stolen_size_gen3,
+};
+
+static const struct intel_stolen_ops intel_stolen_ops_gen6 = {
+ .base = intel_stolen_base_gen3,
+ .size = intel_stolen_size_gen6,
+};
+
+static const struct intel_stolen_ops intel_stolen_ops_gen8 = {
+ .base = intel_stolen_base_gen3,
+ .size = intel_stolen_size_gen8,
+};
+
+static const struct intel_stolen_ops intel_stolen_ops_gen9 = {
+ .base = intel_stolen_base_gen3,
+ .size = intel_stolen_size_gen9,
+};
+
+static const struct intel_stolen_ops intel_stolen_ops_chv = {
+ .base = intel_stolen_base_gen3,
+ .size = intel_stolen_size_chv,
+};
+
+static const struct pci_device_id intel_ids[] = {
+ INTEL_I915G_IDS(&intel_stolen_ops_gen3),
+ INTEL_I915GM_IDS(&intel_stolen_ops_gen3),
+ INTEL_I945G_IDS(&intel_stolen_ops_gen3),
+ INTEL_I945GM_IDS(&intel_stolen_ops_gen3),
+ INTEL_VLV_IDS(&intel_stolen_ops_gen6),
+ INTEL_PINEVIEW_IDS(&intel_stolen_ops_gen3),
+ INTEL_I965G_IDS(&intel_stolen_ops_gen3),
+ INTEL_G33_IDS(&intel_stolen_ops_gen3),
+ INTEL_I965GM_IDS(&intel_stolen_ops_gen3),
+ INTEL_GM45_IDS(&intel_stolen_ops_gen3),
+ INTEL_G45_IDS(&intel_stolen_ops_gen3),
+ INTEL_IRONLAKE_D_IDS(&intel_stolen_ops_gen3),
+ INTEL_IRONLAKE_M_IDS(&intel_stolen_ops_gen3),
+ INTEL_SNB_D_IDS(&intel_stolen_ops_gen6),
+ INTEL_SNB_M_IDS(&intel_stolen_ops_gen6),
+ INTEL_IVB_M_IDS(&intel_stolen_ops_gen6),
+ INTEL_IVB_D_IDS(&intel_stolen_ops_gen6),
+ INTEL_HSW_IDS(&intel_stolen_ops_gen6),
+ INTEL_BDW_IDS(&intel_stolen_ops_gen8),
+ INTEL_CHV_IDS(&intel_stolen_ops_chv),
+ INTEL_SKL_IDS(&intel_stolen_ops_gen9),
+ INTEL_BXT_IDS(&intel_stolen_ops_gen9),
+ INTEL_KBL_IDS(&intel_stolen_ops_gen9),
+ INTEL_CFL_IDS(&intel_stolen_ops_gen9),
+ INTEL_GLK_IDS(&intel_stolen_ops_gen9),
+ INTEL_CNL_IDS(&intel_stolen_ops_gen9),
+};
+
+/*
+ * Buggy BIOS don't reserve memory for the GPU properly and the OS
+ * can claim it before the GPU driver is loaded. This function will
+ * check the registers for base and size of this memory and reserve
+ * it for the GPU driver.
+ * gen3 (2004) and newer devices are supported. Support for older hw
+ * can be ported from Linux if needed.
+ */
+static void
+intel_graphics_stolen(void)
+{
+ const struct intel_stolen_ops *ops;
+ uint32_t vendor, device, class;
+ int i;
+
+ /* XXX: Scan bus instead of assuming 0:2:0? */
+ const int bus = 0;
+ const int slot = 2;
+ const int func = 0;
+
+ if (pci_cfgregopen() == 0)
+ return;
+
+ vendor = pci_cfgregread(bus, slot, func, PCIR_VENDOR, 2);
+ if (vendor != PCI_VENDOR_INTEL)
+ return;
+
+ class = pci_cfgregread(bus, slot, func, PCIR_SUBCLASS, 2);
+ if (class != PCI_CLASS_VGA)
+ return;
+
+ device = pci_cfgregread(bus, slot, func, PCIR_DEVICE, 2);
+ if (device == 0xFFFF)
+ return;
+
+ for (i = 0; i < nitems(intel_ids); i++) {
+ if (intel_ids[i].device != device)
+ continue;
+ ops = intel_ids[i].data;
+ intel_graphics_stolen_base = ops->base(bus, slot, func);
+ intel_graphics_stolen_size = ops->size(bus, slot, func);
+ break;
+ }
+
+ /* XXX: enable this once the KPI is available */
+ /* phys_avail_reserve(intel_graphics_stolen_base, */
+ /* intel_graphics_stolen_base + intel_graphics_stolen_size); */
+}
+
+void
+pci_early_quirks(void)
+{
+
+ intel_graphics_stolen();
+}
diff --git a/sys/x86/pci/pci_early_quirks.h b/sys/x86/pci/pci_early_quirks.h
new file mode 100644
index 000000000000..ed5ae0767a48
--- /dev/null
+++ b/sys/x86/pci/pci_early_quirks.h
@@ -0,0 +1,479 @@
+/*-
+ * Copyright (c) 2018 Johannes Lundberg
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _PCI_EARLY_QUIRKS_H_
+#define _PCI_EARLY_QUIRKS_H_
+
+/*
+ * TODO:
+ * Make a common drm/gpu header that both base and out of tree
+ * drm modules can use.
+ */
+
+#define PCI_ANY_ID (-1)
+#define PCI_VENDOR_INTEL 0x8086
+#define PCI_CLASS_VGA 0x0300
+
+#define INTEL_BSM 0x5c
+#define INTEL_BSM_MASK (-(1u << 20))
+
+#define INTEL_GMCH_CTRL 0x52
+#define INTEL_GMCH_VGA_DISABLE (1 << 1)
+#define SNB_GMCH_CTRL 0x50
+#define SNB_GMCH_GGMS_SHIFT 8 /* GTT Graphics Memory Size */
+#define SNB_GMCH_GGMS_MASK 0x3
+#define SNB_GMCH_GMS_SHIFT 3 /* Graphics Mode Select */
+#define SNB_GMCH_GMS_MASK 0x1f
+#define BDW_GMCH_GGMS_SHIFT 6
+#define BDW_GMCH_GGMS_MASK 0x3
+#define BDW_GMCH_GMS_SHIFT 8
+#define BDW_GMCH_GMS_MASK 0xff
+
+#define I830_GMCH_CTRL 0x52
+#define I830_GMCH_GMS_MASK 0x70
+#define I830_GMCH_GMS_LOCAL 0x10
+#define I830_GMCH_GMS_STOLEN_512 0x20
+#define I830_GMCH_GMS_STOLEN_1024 0x30
+#define I830_GMCH_GMS_STOLEN_8192 0x40
+
+#define I855_GMCH_GMS_MASK 0xF0
+#define I855_GMCH_GMS_STOLEN_0M 0x0
+#define I855_GMCH_GMS_STOLEN_1M (0x1 << 4)
+#define I855_GMCH_GMS_STOLEN_4M (0x2 << 4)
+#define I855_GMCH_GMS_STOLEN_8M (0x3 << 4)
+#define I855_GMCH_GMS_STOLEN_16M (0x4 << 4)
+#define I855_GMCH_GMS_STOLEN_32M (0x5 << 4)
+#define I915_GMCH_GMS_STOLEN_48M (0x6 << 4)
+#define I915_GMCH_GMS_STOLEN_64M (0x7 << 4)
+#define G33_GMCH_GMS_STOLEN_128M (0x8 << 4)
+#define G33_GMCH_GMS_STOLEN_256M (0x9 << 4)
+#define INTEL_GMCH_GMS_STOLEN_96M (0xa << 4)
+#define INTEL_GMCH_GMS_STOLEN_160M (0xb << 4)
+#define INTEL_GMCH_GMS_STOLEN_224M (0xc << 4)
+#define INTEL_GMCH_GMS_STOLEN_352M (0xd << 4)
+
+#define INTEL_VGA_DEVICE(id, info) { \
+ 0x8086, id, \
+ info }
+
+#define INTEL_I810_IDS(info) \
+ INTEL_VGA_DEVICE(0x7121, info), /* I810 */ \
+ INTEL_VGA_DEVICE(0x7123, info), /* I810_DC100 */ \
+ INTEL_VGA_DEVICE(0x7125, info) /* I810_E */
+
+#define INTEL_I815_IDS(info) \
+ INTEL_VGA_DEVICE(0x1132, info) /* I815*/
+
+#define INTEL_I830_IDS(info) \
+ INTEL_VGA_DEVICE(0x3577, info)
+
+#define INTEL_I845G_IDS(info) \
+ INTEL_VGA_DEVICE(0x2562, info)
+
+#define INTEL_I85X_IDS(info) \
+ INTEL_VGA_DEVICE(0x3582, info), /* I855_GM */ \
+ INTEL_VGA_DEVICE(0x358e, info)
+
+#define INTEL_I865G_IDS(info) \
+ INTEL_VGA_DEVICE(0x2572, info) /* I865_G */
+
+#define INTEL_I915G_IDS(info) \
+ INTEL_VGA_DEVICE(0x2582, info), /* I915_G */ \
+ INTEL_VGA_DEVICE(0x258a, info) /* E7221_G */
+
+#define INTEL_I915GM_IDS(info) \
+ INTEL_VGA_DEVICE(0x2592, info) /* I915_GM */
+
+#define INTEL_I945G_IDS(info) \
+ INTEL_VGA_DEVICE(0x2772, info) /* I945_G */
+
+#define INTEL_I945GM_IDS(info) \
+ INTEL_VGA_DEVICE(0x27a2, info), /* I945_GM */ \
+ INTEL_VGA_DEVICE(0x27ae, info) /* I945_GME */
+
+#define INTEL_I965G_IDS(info) \
+ INTEL_VGA_DEVICE(0x2972, info), /* I946_GZ */ \
+ INTEL_VGA_DEVICE(0x2982, info), /* G35_G */ \
+ INTEL_VGA_DEVICE(0x2992, info), /* I965_Q */ \
+ INTEL_VGA_DEVICE(0x29a2, info) /* I965_G */
+
+#define INTEL_G33_IDS(info) \
+ INTEL_VGA_DEVICE(0x29b2, info), /* Q35_G */ \
+ INTEL_VGA_DEVICE(0x29c2, info), /* G33_G */ \
+ INTEL_VGA_DEVICE(0x29d2, info) /* Q33_G */
+
+#define INTEL_I965GM_IDS(info) \
+ INTEL_VGA_DEVICE(0x2a02, info), /* I965_GM */ \
+ INTEL_VGA_DEVICE(0x2a12, info) /* I965_GME */
+
+#define INTEL_GM45_IDS(info) \
+ INTEL_VGA_DEVICE(0x2a42, info) /* GM45_G */
+
+#define INTEL_G45_IDS(info) \
+ INTEL_VGA_DEVICE(0x2e02, info), /* IGD_E_G */ \
+ INTEL_VGA_DEVICE(0x2e12, info), /* Q45_G */ \
+ INTEL_VGA_DEVICE(0x2e22, info), /* G45_G */ \
+ INTEL_VGA_DEVICE(0x2e32, info), /* G41_G */ \
+ INTEL_VGA_DEVICE(0x2e42, info), /* B43_G */ \
+ INTEL_VGA_DEVICE(0x2e92, info) /* B43_G.1 */
+
+#define INTEL_PINEVIEW_IDS(info) \
+ INTEL_VGA_DEVICE(0xa001, info), \
+ INTEL_VGA_DEVICE(0xa011, info)
+
+#define INTEL_IRONLAKE_D_IDS(info) \
+ INTEL_VGA_DEVICE(0x0042, info)
+
+#define INTEL_IRONLAKE_M_IDS(info) \
+ INTEL_VGA_DEVICE(0x0046, info)
+
+#define INTEL_SNB_D_GT1_IDS(info) \
+ INTEL_VGA_DEVICE(0x0102, info), \
+ INTEL_VGA_DEVICE(0x010A, info)
+
+#define INTEL_SNB_D_GT2_IDS(info) \
+ INTEL_VGA_DEVICE(0x0112, info), \
+ INTEL_VGA_DEVICE(0x0122, info)
+
+#define INTEL_SNB_D_IDS(info) \
+ INTEL_SNB_D_GT1_IDS(info), \
+ INTEL_SNB_D_GT2_IDS(info)
+
+#define INTEL_SNB_M_GT1_IDS(info) \
+ INTEL_VGA_DEVICE(0x0106, info)
+
+#define INTEL_SNB_M_GT2_IDS(info) \
+ INTEL_VGA_DEVICE(0x0116, info), \
+ INTEL_VGA_DEVICE(0x0126, info)
+
+#define INTEL_SNB_M_IDS(info) \
+ INTEL_SNB_M_GT1_IDS(info), \
+ INTEL_SNB_M_GT2_IDS(info)
+
+#define INTEL_IVB_M_GT1_IDS(info) \
+ INTEL_VGA_DEVICE(0x0156, info) /* GT1 mobile */
+
+#define INTEL_IVB_M_GT2_IDS(info) \
+ INTEL_VGA_DEVICE(0x0166, info) /* GT2 mobile */
+
+#define INTEL_IVB_M_IDS(info) \
+ INTEL_IVB_M_GT1_IDS(info), \
+ INTEL_IVB_M_GT2_IDS(info)
+
+#define INTEL_IVB_D_GT1_IDS(info) \
+ INTEL_VGA_DEVICE(0x0152, info), /* GT1 desktop */ \
+ INTEL_VGA_DEVICE(0x015a, info) /* GT1 server */
+
+#define INTEL_IVB_D_GT2_IDS(info) \
+ INTEL_VGA_DEVICE(0x0162, info), /* GT2 desktop */ \
+ INTEL_VGA_DEVICE(0x016a, info) /* GT2 server */
+
+#define INTEL_IVB_D_IDS(info) \
+ INTEL_IVB_D_GT1_IDS(info), \
+ INTEL_IVB_D_GT2_IDS(info)
+
+#define INTEL_IVB_Q_IDS(info) \
+ INTEL_QUANTA_VGA_DEVICE(info) /* Quanta transcode */
+
+#define INTEL_HSW_GT1_IDS(info) \
+ INTEL_VGA_DEVICE(0x0402, info), /* GT1 desktop */ \
+ INTEL_VGA_DEVICE(0x040a, info), /* GT1 server */ \
+ INTEL_VGA_DEVICE(0x040B, info), /* GT1 reserved */ \
+ INTEL_VGA_DEVICE(0x040E, info), /* GT1 reserved */ \
+ INTEL_VGA_DEVICE(0x0C02, info), /* SDV GT1 desktop */ \
+ INTEL_VGA_DEVICE(0x0C0A, info), /* SDV GT1 server */ \
+ INTEL_VGA_DEVICE(0x0C0B, info), /* SDV GT1 reserved */ \
+ INTEL_VGA_DEVICE(0x0C0E, info), /* SDV GT1 reserved */ \
+ INTEL_VGA_DEVICE(0x0A02, info), /* ULT GT1 desktop */ \
+ INTEL_VGA_DEVICE(0x0A0A, info), /* ULT GT1 server */ \
+ INTEL_VGA_DEVICE(0x0A0B, info), /* ULT GT1 reserved */ \
+ INTEL_VGA_DEVICE(0x0D02, info), /* CRW GT1 desktop */ \
+ INTEL_VGA_DEVICE(0x0D0A, info), /* CRW GT1 server */ \
+ INTEL_VGA_DEVICE(0x0D0B, info), /* CRW GT1 reserved */ \
+ INTEL_VGA_DEVICE(0x0D0E, info), /* CRW GT1 reserved */ \
+ INTEL_VGA_DEVICE(0x0406, info), /* GT1 mobile */ \
+ INTEL_VGA_DEVICE(0x0C06, info), /* SDV GT1 mobile */ \
+ INTEL_VGA_DEVICE(0x0A06, info), /* ULT GT1 mobile */ \
+ INTEL_VGA_DEVICE(0x0A0E, info), /* ULX GT1 mobile */ \
+ INTEL_VGA_DEVICE(0x0D06, info) /* CRW GT1 mobile */
+
+#define INTEL_HSW_GT2_IDS(info) \
+ INTEL_VGA_DEVICE(0x0412, info), /* GT2 desktop */ \
+ INTEL_VGA_DEVICE(0x041a, info), /* GT2 server */ \
+ INTEL_VGA_DEVICE(0x041B, info), /* GT2 reserved */ \
+ INTEL_VGA_DEVICE(0x041E, info), /* GT2 reserved */ \
+ INTEL_VGA_DEVICE(0x0C12, info), /* SDV GT2 desktop */ \
+ INTEL_VGA_DEVICE(0x0C1A, info), /* SDV GT2 server */ \
+ INTEL_VGA_DEVICE(0x0C1B, info), /* SDV GT2 reserved */ \
+ INTEL_VGA_DEVICE(0x0C1E, info), /* SDV GT2 reserved */ \
+ INTEL_VGA_DEVICE(0x0A12, info), /* ULT GT2 desktop */ \
+ INTEL_VGA_DEVICE(0x0A1A, info), /* ULT GT2 server */ \
+ INTEL_VGA_DEVICE(0x0A1B, info), /* ULT GT2 reserved */ \
+ INTEL_VGA_DEVICE(0x0D12, info), /* CRW GT2 desktop */ \
+ INTEL_VGA_DEVICE(0x0D1A, info), /* CRW GT2 server */ \
+ INTEL_VGA_DEVICE(0x0D1B, info), /* CRW GT2 reserved */ \
+ INTEL_VGA_DEVICE(0x0D1E, info), /* CRW GT2 reserved */ \
+ INTEL_VGA_DEVICE(0x0416, info), /* GT2 mobile */ \
+ INTEL_VGA_DEVICE(0x0426, info), /* GT2 mobile */ \
+ INTEL_VGA_DEVICE(0x0C16, info), /* SDV GT2 mobile */ \
+ INTEL_VGA_DEVICE(0x0A16, info), /* ULT GT2 mobile */ \
+ INTEL_VGA_DEVICE(0x0A1E, info), /* ULX GT2 mobile */ \
+ INTEL_VGA_DEVICE(0x0D16, info) /* CRW GT2 mobile */
+
+#define INTEL_HSW_GT3_IDS(info) \
+ INTEL_VGA_DEVICE(0x0422, info), /* GT3 desktop */ \
+ INTEL_VGA_DEVICE(0x042a, info), /* GT3 server */ \
+ INTEL_VGA_DEVICE(0x042B, info), /* GT3 reserved */ \
+ INTEL_VGA_DEVICE(0x042E, info), /* GT3 reserved */ \
+ INTEL_VGA_DEVICE(0x0C22, info), /* SDV GT3 desktop */ \
+ INTEL_VGA_DEVICE(0x0C2A, info), /* SDV GT3 server */ \
+ INTEL_VGA_DEVICE(0x0C2B, info), /* SDV GT3 reserved */ \
+ INTEL_VGA_DEVICE(0x0C2E, info), /* SDV GT3 reserved */ \
+ INTEL_VGA_DEVICE(0x0A22, info), /* ULT GT3 desktop */ \
+ INTEL_VGA_DEVICE(0x0A2A, info), /* ULT GT3 server */ \
+ INTEL_VGA_DEVICE(0x0A2B, info), /* ULT GT3 reserved */ \
+ INTEL_VGA_DEVICE(0x0D22, info), /* CRW GT3 desktop */ \
+ INTEL_VGA_DEVICE(0x0D2A, info), /* CRW GT3 server */ \
+ INTEL_VGA_DEVICE(0x0D2B, info), /* CRW GT3 reserved */ \
+ INTEL_VGA_DEVICE(0x0D2E, info), /* CRW GT3 reserved */ \
+ INTEL_VGA_DEVICE(0x0C26, info), /* SDV GT3 mobile */ \
+ INTEL_VGA_DEVICE(0x0A26, info), /* ULT GT3 mobile */ \
+ INTEL_VGA_DEVICE(0x0A2E, info), /* ULT GT3 reserved */ \
+ INTEL_VGA_DEVICE(0x0D26, info) /* CRW GT3 mobile */
+
+#define INTEL_HSW_IDS(info) \
+ INTEL_HSW_GT1_IDS(info), \
+ INTEL_HSW_GT2_IDS(info), \
+ INTEL_HSW_GT3_IDS(info)
+
+#define INTEL_VLV_IDS(info) \
+ INTEL_VGA_DEVICE(0x0f30, info), \
+ INTEL_VGA_DEVICE(0x0f31, info), \
+ INTEL_VGA_DEVICE(0x0f32, info), \
+ INTEL_VGA_DEVICE(0x0f33, info), \
+ INTEL_VGA_DEVICE(0x0157, info), \
+ INTEL_VGA_DEVICE(0x0155, info)
+
+#define INTEL_BDW_GT1_IDS(info) \
+ INTEL_VGA_DEVICE(0x1602, info), /* GT1 ULT */ \
+ INTEL_VGA_DEVICE(0x1606, info), /* GT1 ULT */ \
+ INTEL_VGA_DEVICE(0x160B, info), /* GT1 Iris */ \
+ INTEL_VGA_DEVICE(0x160E, info), /* GT1 ULX */ \
+ INTEL_VGA_DEVICE(0x160A, info), /* GT1 Server */ \
+ INTEL_VGA_DEVICE(0x160D, info) /* GT1 Workstation */
+
+#define INTEL_BDW_GT2_IDS(info) \
+ INTEL_VGA_DEVICE(0x1612, info), /* GT2 Halo */ \
+ INTEL_VGA_DEVICE(0x1616, info), /* GT2 ULT */ \
+ INTEL_VGA_DEVICE(0x161B, info), /* GT2 ULT */ \
+ INTEL_VGA_DEVICE(0x161E, info), /* GT2 ULX */ \
+ INTEL_VGA_DEVICE(0x161A, info), /* GT2 Server */ \
+ INTEL_VGA_DEVICE(0x161D, info) /* GT2 Workstation */
+
+#define INTEL_BDW_GT3_IDS(info) \
+ INTEL_VGA_DEVICE(0x1622, info), /* ULT */ \
+ INTEL_VGA_DEVICE(0x1626, info), /* ULT */ \
+ INTEL_VGA_DEVICE(0x162B, info), /* Iris */ \
+ INTEL_VGA_DEVICE(0x162E, info), /* ULX */\
+ INTEL_VGA_DEVICE(0x162A, info), /* Server */ \
+ INTEL_VGA_DEVICE(0x162D, info) /* Workstation */
+
+#define INTEL_BDW_RSVD_IDS(info) \
+ INTEL_VGA_DEVICE(0x1632, info), /* ULT */ \
+ INTEL_VGA_DEVICE(0x1636, info), /* ULT */ \
+ INTEL_VGA_DEVICE(0x163B, info), /* Iris */ \
+ INTEL_VGA_DEVICE(0x163E, info), /* ULX */ \
+ INTEL_VGA_DEVICE(0x163A, info), /* Server */ \
+ INTEL_VGA_DEVICE(0x163D, info) /* Workstation */
+
+#define INTEL_BDW_IDS(info) \
+ INTEL_BDW_GT1_IDS(info), \
+ INTEL_BDW_GT2_IDS(info), \
+ INTEL_BDW_GT3_IDS(info), \
+ INTEL_BDW_RSVD_IDS(info)
+
+#define INTEL_CHV_IDS(info) \
+ INTEL_VGA_DEVICE(0x22b0, info), \
+ INTEL_VGA_DEVICE(0x22b1, info), \
+ INTEL_VGA_DEVICE(0x22b2, info), \
+ INTEL_VGA_DEVICE(0x22b3, info)
+
+#define INTEL_SKL_GT1_IDS(info) \
+ INTEL_VGA_DEVICE(0x1906, info), /* ULT GT1 */ \
+ INTEL_VGA_DEVICE(0x190E, info), /* ULX GT1 */ \
+ INTEL_VGA_DEVICE(0x1902, info), /* DT GT1 */ \
+ INTEL_VGA_DEVICE(0x190B, info), /* Halo GT1 */ \
+ INTEL_VGA_DEVICE(0x190A, info) /* SRV GT1 */
+
+#define INTEL_SKL_GT2_IDS(info) \
+ INTEL_VGA_DEVICE(0x1916, info), /* ULT GT2 */ \
+ INTEL_VGA_DEVICE(0x1921, info), /* ULT GT2F */ \
+ INTEL_VGA_DEVICE(0x191E, info), /* ULX GT2 */ \
+ INTEL_VGA_DEVICE(0x1912, info), /* DT GT2 */ \
+ INTEL_VGA_DEVICE(0x191B, info), /* Halo GT2 */ \
+ INTEL_VGA_DEVICE(0x191A, info), /* SRV GT2 */ \
+ INTEL_VGA_DEVICE(0x191D, info) /* WKS GT2 */
+
+#define INTEL_SKL_GT3_IDS(info) \
+ INTEL_VGA_DEVICE(0x1923, info), /* ULT GT3 */ \
+ INTEL_VGA_DEVICE(0x1926, info), /* ULT GT3 */ \
+ INTEL_VGA_DEVICE(0x1927, info), /* ULT GT3 */ \
+ INTEL_VGA_DEVICE(0x192B, info), /* Halo GT3 */ \
+ INTEL_VGA_DEVICE(0x192D, info) /* SRV GT3 */
+
+#define INTEL_SKL_GT4_IDS(info) \
+ INTEL_VGA_DEVICE(0x1932, info), /* DT GT4 */ \
+ INTEL_VGA_DEVICE(0x193B, info), /* Halo GT4 */ \
+ INTEL_VGA_DEVICE(0x193D, info), /* WKS GT4 */ \
+ INTEL_VGA_DEVICE(0x192A, info), /* SRV GT4 */ \
+ INTEL_VGA_DEVICE(0x193A, info) /* SRV GT4e */
+
+#define INTEL_SKL_IDS(info) \
+ INTEL_SKL_GT1_IDS(info), \
+ INTEL_SKL_GT2_IDS(info), \
+ INTEL_SKL_GT3_IDS(info), \
+ INTEL_SKL_GT4_IDS(info)
+
+#define INTEL_BXT_IDS(info) \
+ INTEL_VGA_DEVICE(0x0A84, info), \
+ INTEL_VGA_DEVICE(0x1A84, info), \
+ INTEL_VGA_DEVICE(0x1A85, info), \
+ INTEL_VGA_DEVICE(0x5A84, info), /* APL HD Graphics 505 */ \
+ INTEL_VGA_DEVICE(0x5A85, info) /* APL HD Graphics 500 */
+
+#define INTEL_GLK_IDS(info) \
+ INTEL_VGA_DEVICE(0x3184, info), \
+ INTEL_VGA_DEVICE(0x3185, info)
+
+#define INTEL_KBL_GT1_IDS(info) \
+ INTEL_VGA_DEVICE(0x5913, info), /* ULT GT1.5 */ \
+ INTEL_VGA_DEVICE(0x5915, info), /* ULX GT1.5 */ \
+ INTEL_VGA_DEVICE(0x5906, info), /* ULT GT1 */ \
+ INTEL_VGA_DEVICE(0x590E, info), /* ULX GT1 */ \
+ INTEL_VGA_DEVICE(0x5902, info), /* DT GT1 */ \
+ INTEL_VGA_DEVICE(0x5908, info), /* Halo GT1 */ \
+ INTEL_VGA_DEVICE(0x590B, info), /* Halo GT1 */ \
+ INTEL_VGA_DEVICE(0x590A, info) /* SRV GT1 */
+
+#define INTEL_KBL_GT2_IDS(info) \
+ INTEL_VGA_DEVICE(0x5916, info), /* ULT GT2 */ \
+ INTEL_VGA_DEVICE(0x5917, info), /* Mobile GT2 */ \
+ INTEL_VGA_DEVICE(0x5921, info), /* ULT GT2F */ \
+ INTEL_VGA_DEVICE(0x591E, info), /* ULX GT2 */ \
+ INTEL_VGA_DEVICE(0x5912, info), /* DT GT2 */ \
+ INTEL_VGA_DEVICE(0x591B, info), /* Halo GT2 */ \
+ INTEL_VGA_DEVICE(0x591A, info), /* SRV GT2 */ \
+ INTEL_VGA_DEVICE(0x591D, info) /* WKS GT2 */
+
+#define INTEL_KBL_GT3_IDS(info) \
+ INTEL_VGA_DEVICE(0x5923, info), /* ULT GT3 */ \
+ INTEL_VGA_DEVICE(0x5926, info), /* ULT GT3 */ \
+ INTEL_VGA_DEVICE(0x5927, info) /* ULT GT3 */
+
+#define INTEL_KBL_GT4_IDS(info) \
+ INTEL_VGA_DEVICE(0x593B, info) /* Halo GT4 */
+
+#define INTEL_KBL_IDS(info) \
+ INTEL_KBL_GT1_IDS(info), \
+ INTEL_KBL_GT2_IDS(info), \
+ INTEL_KBL_GT3_IDS(info), \
+ INTEL_KBL_GT4_IDS(info)
+
+/* CFL S */
+#define INTEL_CFL_S_GT1_IDS(info) \
+ INTEL_VGA_DEVICE(0x3E90, info), /* SRV GT1 */ \
+ INTEL_VGA_DEVICE(0x3E93, info), /* SRV GT1 */ \
+ INTEL_VGA_DEVICE(0x3E99, info) /* SRV GT1 */
+
+#define INTEL_CFL_S_GT2_IDS(info) \
+ INTEL_VGA_DEVICE(0x3E91, info), /* SRV GT2 */ \
+ INTEL_VGA_DEVICE(0x3E92, info), /* SRV GT2 */ \
+ INTEL_VGA_DEVICE(0x3E96, info), /* SRV GT2 */ \
+ INTEL_VGA_DEVICE(0x3E9A, info) /* SRV GT2 */
+
+/* CFL H */
+#define INTEL_CFL_H_GT2_IDS(info) \
+ INTEL_VGA_DEVICE(0x3E9B, info), /* Halo GT2 */ \
+ INTEL_VGA_DEVICE(0x3E94, info) /* Halo GT2 */
+
+/* CFL U GT1 */
+#define INTEL_CFL_U_GT1_IDS(info) \
+ INTEL_VGA_DEVICE(0x3EA1, info), \
+ INTEL_VGA_DEVICE(0x3EA4, info)
+
+/* CFL U GT2 */
+#define INTEL_CFL_U_GT2_IDS(info) \
+ INTEL_VGA_DEVICE(0x3EA0, info), \
+ INTEL_VGA_DEVICE(0x3EA3, info), \
+ INTEL_VGA_DEVICE(0x3EA9, info)
+
+/* CFL U GT3 */
+#define INTEL_CFL_U_GT3_IDS(info) \
+ INTEL_VGA_DEVICE(0x3EA2, info), /* ULT GT3 */ \
+ INTEL_VGA_DEVICE(0x3EA5, info), /* ULT GT3 */ \
+ INTEL_VGA_DEVICE(0x3EA6, info), /* ULT GT3 */ \
+ INTEL_VGA_DEVICE(0x3EA7, info), /* ULT GT3 */ \
+ INTEL_VGA_DEVICE(0x3EA8, info) /* ULT GT3 */
+
+#define INTEL_CFL_IDS(info) \
+ INTEL_CFL_S_GT1_IDS(info), \
+ INTEL_CFL_S_GT2_IDS(info), \
+ INTEL_CFL_H_GT2_IDS(info), \
+ INTEL_CFL_U_GT1_IDS(info), \
+ INTEL_CFL_U_GT2_IDS(info), \
+ INTEL_CFL_U_GT3_IDS(info)
+
+/* CNL */
+#define INTEL_CNL_IDS(info) \
+ INTEL_VGA_DEVICE(0x5A51, info), \
+ INTEL_VGA_DEVICE(0x5A59, info), \
+ INTEL_VGA_DEVICE(0x5A41, info), \
+ INTEL_VGA_DEVICE(0x5A49, info), \
+ INTEL_VGA_DEVICE(0x5A52, info), \
+ INTEL_VGA_DEVICE(0x5A5A, info), \
+ INTEL_VGA_DEVICE(0x5A42, info), \
+ INTEL_VGA_DEVICE(0x5A4A, info), \
+ INTEL_VGA_DEVICE(0x5A50, info), \
+ INTEL_VGA_DEVICE(0x5A40, info), \
+ INTEL_VGA_DEVICE(0x5A54, info), \
+ INTEL_VGA_DEVICE(0x5A5C, info), \
+ INTEL_VGA_DEVICE(0x5A44, info), \
+ INTEL_VGA_DEVICE(0x5A4C, info)
+
+/* ICL */
+#define INTEL_ICL_11_IDS(info) \
+ INTEL_VGA_DEVICE(0x8A50, info), \
+ INTEL_VGA_DEVICE(0x8A51, info), \
+ INTEL_VGA_DEVICE(0x8A5C, info), \
+ INTEL_VGA_DEVICE(0x8A5D, info), \
+ INTEL_VGA_DEVICE(0x8A52, info), \
+ INTEL_VGA_DEVICE(0x8A5A, info), \
+ INTEL_VGA_DEVICE(0x8A5B, info), \
+ INTEL_VGA_DEVICE(0x8A71, info), \
+ INTEL_VGA_DEVICE(0x8A70, info)
+
+#endif /* _PCI_EARLY_QUIRKS_H_ */
diff --git a/sys/x86/x86/busdma_bounce.c b/sys/x86/x86/busdma_bounce.c
index 1c76804a61d5..a40af04f436d 100644
--- a/sys/x86/x86/busdma_bounce.c
+++ b/sys/x86/x86/busdma_bounce.c
@@ -31,6 +31,7 @@ __FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/systm.h>
+#include <sys/domainset.h>
#include <sys/malloc.h>
#include <sys/bus.h>
#include <sys/interrupt.h>
@@ -294,9 +295,9 @@ bounce_bus_dmamap_create(bus_dma_tag_t dmat, int flags, bus_dmamap_t *mapp)
error = 0;
if (dmat->segments == NULL) {
- dmat->segments = (bus_dma_segment_t *)malloc_domain(
+ dmat->segments = (bus_dma_segment_t *)malloc_domainset(
sizeof(bus_dma_segment_t) * dmat->common.nsegments,
- M_DEVBUF, dmat->common.domain, M_NOWAIT);
+ M_DEVBUF, DOMAINSET_PREF(dmat->common.domain), M_NOWAIT);
if (dmat->segments == NULL) {
CTR3(KTR_BUSDMA, "%s: tag %p error %d",
__func__, dmat, ENOMEM);
@@ -317,8 +318,8 @@ bounce_bus_dmamap_create(bus_dma_tag_t dmat, int flags, bus_dmamap_t *mapp)
}
bz = dmat->bounce_zone;
- *mapp = (bus_dmamap_t)malloc_domain(sizeof(**mapp), M_DEVBUF,
- dmat->common.domain, M_NOWAIT | M_ZERO);
+ *mapp = (bus_dmamap_t)malloc_domainset(sizeof(**mapp), M_DEVBUF,
+ DOMAINSET_PREF(dmat->common.domain), M_NOWAIT | M_ZERO);
if (*mapp == NULL) {
CTR3(KTR_BUSDMA, "%s: tag %p error %d",
__func__, dmat, ENOMEM);
@@ -411,9 +412,9 @@ bounce_bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
*mapp = NULL;
if (dmat->segments == NULL) {
- dmat->segments = (bus_dma_segment_t *)malloc_domain(
+ dmat->segments = (bus_dma_segment_t *)malloc_domainset(
sizeof(bus_dma_segment_t) * dmat->common.nsegments,
- M_DEVBUF, dmat->common.domain, mflags);
+ M_DEVBUF, DOMAINSET_PREF(dmat->common.domain), mflags);
if (dmat->segments == NULL) {
CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d",
__func__, dmat, dmat->common.flags, ENOMEM);
@@ -452,20 +453,21 @@ bounce_bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
(dmat->common.alignment <= dmat->common.maxsize) &&
dmat->common.lowaddr >= ptoa((vm_paddr_t)Maxmem) &&
attr == VM_MEMATTR_DEFAULT) {
- *vaddr = malloc_domain(dmat->common.maxsize, M_DEVBUF,
- dmat->common.domain, mflags);
+ *vaddr = malloc_domainset(dmat->common.maxsize, M_DEVBUF,
+ DOMAINSET_PREF(dmat->common.domain), mflags);
} else if (dmat->common.nsegments >=
howmany(dmat->common.maxsize, MIN(dmat->common.maxsegsz, PAGE_SIZE)) &&
dmat->common.alignment <= PAGE_SIZE &&
(dmat->common.boundary % PAGE_SIZE) == 0) {
/* Page-based multi-segment allocations allowed */
- *vaddr = (void *)kmem_alloc_attr_domain(dmat->common.domain,
- dmat->common.maxsize, mflags, 0ul, dmat->common.lowaddr,
- attr);
+ *vaddr = (void *)kmem_alloc_attr_domainset(
+ DOMAINSET_PREF(dmat->common.domain), dmat->common.maxsize,
+ mflags, 0ul, dmat->common.lowaddr, attr);
dmat->bounce_flags |= BUS_DMA_KMEM_ALLOC;
} else {
- *vaddr = (void *)kmem_alloc_contig_domain(dmat->common.domain,
- dmat->common.maxsize, mflags, 0ul, dmat->common.lowaddr,
+ *vaddr = (void *)kmem_alloc_contig_domainset(
+ DOMAINSET_PREF(dmat->common.domain), dmat->common.maxsize,
+ mflags, 0ul, dmat->common.lowaddr,
dmat->common.alignment != 0 ? dmat->common.alignment : 1ul,
dmat->common.boundary, attr);
dmat->bounce_flags |= BUS_DMA_KMEM_ALLOC;
@@ -1149,14 +1151,14 @@ alloc_bounce_pages(bus_dma_tag_t dmat, u_int numpages)
while (numpages > 0) {
struct bounce_page *bpage;
- bpage = (struct bounce_page *)malloc_domain(sizeof(*bpage),
- M_DEVBUF, dmat->common.domain, M_NOWAIT | M_ZERO);
+ bpage = malloc_domainset(sizeof(*bpage), M_DEVBUF,
+ DOMAINSET_PREF(dmat->common.domain), M_NOWAIT | M_ZERO);
if (bpage == NULL)
break;
- bpage->vaddr = (vm_offset_t)contigmalloc_domain(PAGE_SIZE,
- M_DEVBUF, dmat->common.domain, M_NOWAIT, 0ul,
- bz->lowaddr, PAGE_SIZE, 0);
+ bpage->vaddr = (vm_offset_t)contigmalloc_domainset(PAGE_SIZE,
+ M_DEVBUF, DOMAINSET_PREF(dmat->common.domain), M_NOWAIT,
+ 0ul, bz->lowaddr, PAGE_SIZE, 0);
if (bpage->vaddr == 0) {
free_domain(bpage, M_DEVBUF);
break;