svn commit: r326162 - in projects/bsd_rdma_4_9: cddl/contrib/opensolaris/cmd/zdb contrib/binutils/bfd share/examples/bhyve stand/common stand/userboot/test sys/amd64/amd64 sys/amd64/ia32 sys/amd64/...
Hans Petter Selasky
hselasky at FreeBSD.org
Fri Nov 24 12:13:31 UTC 2017
Author: hselasky
Date: Fri Nov 24 12:13:27 2017
New Revision: 326162
URL: https://svnweb.freebsd.org/changeset/base/326162
Log:
Merge ^/head r326132 through r326161.
Modified:
projects/bsd_rdma_4_9/cddl/contrib/opensolaris/cmd/zdb/zdb.c
projects/bsd_rdma_4_9/contrib/binutils/bfd/ihex.c
projects/bsd_rdma_4_9/contrib/binutils/bfd/peXXigen.c
projects/bsd_rdma_4_9/share/examples/bhyve/vmrun.sh
projects/bsd_rdma_4_9/stand/common/load_elf.c
projects/bsd_rdma_4_9/stand/userboot/test/test.c
projects/bsd_rdma_4_9/sys/amd64/amd64/machdep.c
projects/bsd_rdma_4_9/sys/amd64/ia32/ia32_signal.c
projects/bsd_rdma_4_9/sys/amd64/linux32/linux32_sysvec.c
projects/bsd_rdma_4_9/sys/amd64/vmm/amd/amdvi_hw.c
projects/bsd_rdma_4_9/sys/amd64/vmm/amd/amdvi_priv.h
projects/bsd_rdma_4_9/sys/amd64/vmm/amd/ivrs_drv.c
projects/bsd_rdma_4_9/sys/arm/allwinner/clkng/aw_ccung.c
projects/bsd_rdma_4_9/sys/arm/arm/machdep.c
projects/bsd_rdma_4_9/sys/arm/cloudabi32/cloudabi32_sysvec.c
projects/bsd_rdma_4_9/sys/arm64/arm64/machdep.c
projects/bsd_rdma_4_9/sys/arm64/cloudabi64/cloudabi64_sysvec.c
projects/bsd_rdma_4_9/sys/arm64/include/armreg.h
projects/bsd_rdma_4_9/sys/cddl/contrib/opensolaris/uts/common/dtrace/fasttrap.c
projects/bsd_rdma_4_9/sys/compat/linux/linux_emul.c
projects/bsd_rdma_4_9/sys/geom/mirror/g_mirror.c
projects/bsd_rdma_4_9/sys/geom/mirror/g_mirror.h
projects/bsd_rdma_4_9/sys/i386/i386/machdep.c
projects/bsd_rdma_4_9/sys/i386/include/atomic.h
projects/bsd_rdma_4_9/sys/kern/init_main.c
projects/bsd_rdma_4_9/sys/kern/kern_exec.c
projects/bsd_rdma_4_9/sys/netinet/sctp_ss_functions.c
projects/bsd_rdma_4_9/sys/powerpc/powerpc/exec_machdep.c
projects/bsd_rdma_4_9/sys/riscv/riscv/machdep.c
projects/bsd_rdma_4_9/sys/sparc64/sparc64/machdep.c
projects/bsd_rdma_4_9/usr.bin/vmstat/vmstat.c
Directory Properties:
projects/bsd_rdma_4_9/ (props changed)
projects/bsd_rdma_4_9/cddl/ (props changed)
projects/bsd_rdma_4_9/cddl/contrib/opensolaris/ (props changed)
projects/bsd_rdma_4_9/cddl/contrib/opensolaris/cmd/zdb/ (props changed)
projects/bsd_rdma_4_9/contrib/binutils/ (props changed)
projects/bsd_rdma_4_9/sys/cddl/contrib/opensolaris/ (props changed)
Modified: projects/bsd_rdma_4_9/cddl/contrib/opensolaris/cmd/zdb/zdb.c
==============================================================================
--- projects/bsd_rdma_4_9/cddl/contrib/opensolaris/cmd/zdb/zdb.c Fri Nov 24 12:10:42 2017 (r326161)
+++ projects/bsd_rdma_4_9/cddl/contrib/opensolaris/cmd/zdb/zdb.c Fri Nov 24 12:13:27 2017 (r326162)
@@ -3724,7 +3724,7 @@ zdb_embedded_block(char *thing)
{
blkptr_t bp = { 0 };
unsigned long long *words = (void *)&bp;
- char buf[SPA_MAXBLOCKSIZE];
+ char *buf;
int err;
err = sscanf(thing, "%llx:%llx:%llx:%llx:%llx:%llx:%llx:%llx:"
@@ -3738,12 +3738,15 @@ zdb_embedded_block(char *thing)
exit(1);
}
ASSERT3U(BPE_GET_LSIZE(&bp), <=, SPA_MAXBLOCKSIZE);
+ buf = malloc(SPA_MAXBLOCKSIZE);
err = decode_embedded_bp(&bp, buf, BPE_GET_LSIZE(&bp));
if (err != 0) {
(void) printf("decode failed: %u\n", err);
+ free(buf);
exit(1);
}
zdb_dump_block_raw(buf, BPE_GET_LSIZE(&bp), 0);
+ free(buf);
}
static boolean_t
Modified: projects/bsd_rdma_4_9/contrib/binutils/bfd/ihex.c
==============================================================================
--- projects/bsd_rdma_4_9/contrib/binutils/bfd/ihex.c Fri Nov 24 12:10:42 2017 (r326161)
+++ projects/bsd_rdma_4_9/contrib/binutils/bfd/ihex.c Fri Nov 24 12:13:27 2017 (r326162)
@@ -320,7 +320,7 @@ ihex_scan (bfd *abfd)
{
if (! ISHEX (buf[i]))
{
- ihex_bad_byte (abfd, lineno, hdr[i], error);
+ ihex_bad_byte (abfd, lineno, buf[i], error);
goto error_return;
}
}
Modified: projects/bsd_rdma_4_9/contrib/binutils/bfd/peXXigen.c
==============================================================================
--- projects/bsd_rdma_4_9/contrib/binutils/bfd/peXXigen.c Fri Nov 24 12:10:42 2017 (r326161)
+++ projects/bsd_rdma_4_9/contrib/binutils/bfd/peXXigen.c Fri Nov 24 12:13:27 2017 (r326162)
@@ -448,6 +448,17 @@ _bfd_XXi_swap_aouthdr_in (bfd * abfd,
{
int idx;
+ /* PR 17512: Corrupt PE binaries can cause seg-faults. */
+ if (a->NumberOfRvaAndSizes > 16)
+ {
+ (*_bfd_error_handler)
+ (_("%B: aout header specifies an invalid number of data-directory entries: %d"),
+ abfd, a->NumberOfRvaAndSizes);
+ /* Paranoia: If the number is corrupt, then assume that the
+ actual entries themselves might be corrupt as well. */
+ a->NumberOfRvaAndSizes = 0;
+ }
+
for (idx = 0; idx < 16; idx++)
{
/* If data directory is empty, rva also should be 0. */
@@ -1426,6 +1437,15 @@ pe_print_edata (bfd * abfd, void * vfile)
section->name);
return TRUE;
}
+ }
+
+ /* PR 17512: Handle corrupt PE binaries. */
+ if (datasize < 36)
+ {
+ fprintf (file,
+ _("\nThere is an export table in %s, but it is too small (%d)\n"),
+ section->name, (int) datasize);
+ return TRUE;
}
fprintf (file, _("\nThere is an export table in %s at 0x%lx\n"),
Modified: projects/bsd_rdma_4_9/share/examples/bhyve/vmrun.sh
==============================================================================
--- projects/bsd_rdma_4_9/share/examples/bhyve/vmrun.sh Fri Nov 24 12:10:42 2017 (r326161)
+++ projects/bsd_rdma_4_9/share/examples/bhyve/vmrun.sh Fri Nov 24 12:13:27 2017 (r326162)
@@ -46,7 +46,7 @@ errmsg() {
usage() {
local msg=$1
- echo "Usage: vmrun.sh [-aEhiTv] [-c <CPUs>] [-C <console>] [-d <disk file>]"
+ echo "Usage: vmrun.sh [-aAEhiTv] [-c <CPUs>] [-C <console>] [-d <disk file>]"
echo " [-e <name=value>] [-f <path of firmware>] [-F <size>]"
echo " [-g <gdbport> ] [-H <directory>]"
echo " [-I <location of installation iso>] [-l <loader>]"
@@ -55,6 +55,7 @@ usage() {
echo ""
echo " -h: display this help message"
echo " -a: force memory mapped local APIC access"
+ echo " -A: use AHCI disk emulation instead of virtio"
echo " -c: number of virtual cpus (default is ${DEFAULT_CPUS})"
echo " -C: console device (default is ${DEFAULT_CONSOLE})"
echo " -d: virtio diskdev file (default is ${DEFAULT_VIRTIO_DISK})"
@@ -99,6 +100,7 @@ console=${DEFAULT_CONSOLE}
cpus=${DEFAULT_CPUS}
tap_total=0
disk_total=0
+disk_emulation="virtio-blk"
gdbport=0
loader_opt=""
bhyverun_opt="-H -A -P"
@@ -113,11 +115,14 @@ vncport=5900
fbsize="w=1024,h=768"
tablet=""
-while getopts ac:C:d:e:Ef:F:g:hH:iI:l:m:p:P:t:Tuvw c ; do
+while getopts aAc:C:d:e:Ef:F:g:hH:iI:l:m:p:P:t:Tuvw c ; do
case $c in
a)
bhyverun_opt="${bhyverun_opt} -a"
;;
+ A)
+ disk_emulation="ahci-hd"
+ ;;
c)
cpus=${OPTARG}
;;
@@ -316,7 +321,7 @@ while [ 1 ]; do
eval "disk=\$disk_dev${i}"
eval "opts=\$disk_opts${i}"
make_and_check_diskdev "${disk}"
- devargs="$devargs -s $nextslot:0,virtio-blk,${disk}${opts} "
+ devargs="$devargs -s $nextslot:0,$disk_emulation,${disk}${opts} "
nextslot=$(($nextslot + 1))
i=$(($i + 1))
done
Modified: projects/bsd_rdma_4_9/stand/common/load_elf.c
==============================================================================
--- projects/bsd_rdma_4_9/stand/common/load_elf.c Fri Nov 24 12:10:42 2017 (r326161)
+++ projects/bsd_rdma_4_9/stand/common/load_elf.c Fri Nov 24 12:13:27 2017 (r326162)
@@ -456,7 +456,7 @@ __elfN(loadimage)(struct preloaded_file *fp, elf_file_
* think the rule is going to have to be that you must strip a
* file to remove symbols before gzipping it.
*/
- chunk = ehdr->e_shnum * ehdr->e_shentsize;
+ chunk = (size_t)ehdr->e_shnum * (size_t)ehdr->e_shentsize;
if (chunk == 0 || ehdr->e_shoff == 0)
goto nosyms;
shdr = alloc_pread(ef->fd, ehdr->e_shoff, chunk);
@@ -747,7 +747,7 @@ __elfN(load_modmetadata)(struct preloaded_file *fp, u_
goto out;
}
- size = ef.ehdr->e_shnum * ef.ehdr->e_shentsize;
+ size = (size_t)ef.ehdr->e_shnum * (size_t)ef.ehdr->e_shentsize;
shdr = alloc_pread(ef.fd, ef.ehdr->e_shoff, size);
if (shdr == NULL) {
err = ENOMEM;
Modified: projects/bsd_rdma_4_9/stand/userboot/test/test.c
==============================================================================
--- projects/bsd_rdma_4_9/stand/userboot/test/test.c Fri Nov 24 12:10:42 2017 (r326161)
+++ projects/bsd_rdma_4_9/stand/userboot/test/test.c Fri Nov 24 12:13:27 2017 (r326162)
@@ -422,7 +422,7 @@ int
main(int argc, char** argv)
{
void *h;
- void (*func)(struct loader_callbacks *, void *, int, int);
+ void (*func)(struct loader_callbacks *, void *, int, int) __dead2;
int opt;
char *disk_image = NULL;
const char *userboot_obj = "/boot/userboot.so";
Modified: projects/bsd_rdma_4_9/sys/amd64/amd64/machdep.c
==============================================================================
--- projects/bsd_rdma_4_9/sys/amd64/amd64/machdep.c Fri Nov 24 12:10:42 2017 (r326161)
+++ projects/bsd_rdma_4_9/sys/amd64/amd64/machdep.c Fri Nov 24 12:13:27 2017 (r326162)
@@ -604,7 +604,6 @@ exec_setregs(struct thread *td, struct image_params *i
regs->tf_fs = _ufssel;
regs->tf_gs = _ugssel;
regs->tf_flags = TF_HASSEGS;
- td->td_retval[1] = 0;
/*
* Reset the hardware debug registers if they were in use.
Modified: projects/bsd_rdma_4_9/sys/amd64/ia32/ia32_signal.c
==============================================================================
--- projects/bsd_rdma_4_9/sys/amd64/ia32/ia32_signal.c Fri Nov 24 12:10:42 2017 (r326161)
+++ projects/bsd_rdma_4_9/sys/amd64/ia32/ia32_signal.c Fri Nov 24 12:13:27 2017 (r326162)
@@ -967,5 +967,4 @@ ia32_setregs(struct thread *td, struct image_params *i
/* Return via doreti so that we can change to a different %cs */
set_pcb_flags(pcb, PCB_32BIT | PCB_FULL_IRET);
- td->td_retval[1] = 0;
}
Modified: projects/bsd_rdma_4_9/sys/amd64/linux32/linux32_sysvec.c
==============================================================================
--- projects/bsd_rdma_4_9/sys/amd64/linux32/linux32_sysvec.c Fri Nov 24 12:10:42 2017 (r326161)
+++ projects/bsd_rdma_4_9/sys/amd64/linux32/linux32_sysvec.c Fri Nov 24 12:13:27 2017 (r326162)
@@ -832,7 +832,6 @@ exec_linux_setregs(struct thread *td, struct image_par
/* Do full restore on return so that we can change to a different %cs */
set_pcb_flags(pcb, PCB_32BIT | PCB_FULL_IRET);
- td->td_retval[1] = 0;
}
/*
Modified: projects/bsd_rdma_4_9/sys/amd64/vmm/amd/amdvi_hw.c
==============================================================================
--- projects/bsd_rdma_4_9/sys/amd64/vmm/amd/amdvi_hw.c Fri Nov 24 12:10:42 2017 (r326161)
+++ projects/bsd_rdma_4_9/sys/amd64/vmm/amd/amdvi_hw.c Fri Nov 24 12:13:27 2017 (r326162)
@@ -582,7 +582,7 @@ amdvi_decode_evt_flag(uint16_t flag)
{
flag &= AMDVI_EVENT_FLAG_MASK;
- printf("0x%b]\n", flag,
+ printf(" 0x%b]\n", flag,
"\020"
"\001GN"
"\002NX"
@@ -692,7 +692,7 @@ amdvi_decode_evt(struct amdvi_event *evt)
case AMDVI_EVENT_ILLEGAL_CMD:
/* FALL THROUGH */
case AMDVI_EVENT_CMD_HW_ERROR:
- printf("\t[%s EVT]", (evt->opcode == AMDVI_EVENT_ILLEGAL_CMD) ?
+ printf("\t[%s EVT]\n", (evt->opcode == AMDVI_EVENT_ILLEGAL_CMD) ?
"ILLEGAL CMD" : "CMD HW ERR");
cmd = (struct amdvi_cmd *)PHYS_TO_DMAP(evt->addr);
printf("\tCMD opcode= 0x%x 0x%x 0x%x 0x%lx\n",
@@ -700,13 +700,14 @@ amdvi_decode_evt(struct amdvi_event *evt)
break;
case AMDVI_EVENT_IOTLB_TIMEOUT:
- printf("\t[IOTLB_INV_TIMEOUT devid:0x%x addr:0x%lx",
+ printf("\t[IOTLB_INV_TIMEOUT devid:0x%x addr:0x%lx]\n",
evt->devid, evt->addr);
break;
case AMDVI_EVENT_INVALID_DTE_REQ:
- printf("\t[INV_DTE devid:0x%x addr:0x%lx",
- evt->devid, evt->addr);
+ printf("\t[INV_DTE devid:0x%x addr:0x%lx type:0x%x tr:%d]\n",
+ evt->devid, evt->addr, evt->flag >> 9,
+ (evt->flag >> 8) & 1);
break;
case AMDVI_EVENT_INVALID_PPR_REQ:
@@ -715,7 +716,7 @@ amdvi_decode_evt(struct amdvi_event *evt)
break;
default:
- printf("Unsupported AMD-Vi event:%d", evt->opcode);
+ printf("Unsupported AMD-Vi event:%d\n", evt->opcode);
}
}
@@ -988,15 +989,12 @@ amdvi_add_sysctl(struct amdvi_softc *softc)
&softc->event_intr_cnt, "Event interrupt count");
SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "command_count", CTLFLAG_RD,
&softc->total_cmd, "Command submitted count");
- SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "pci_rid", CTLFLAG_RD,
- (int *)&softc->pci_rid, 0,
- "IOMMU RID");
- SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "start_dev_rid", CTLFLAG_RD,
- (int *)&softc->start_dev_rid, 0,
- "Start of device under this IOMMU");
- SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "end_dev_rid", CTLFLAG_RD,
- (int *)&softc->end_dev_rid, 0,
- "End of device under this IOMMU");
+ SYSCTL_ADD_U16(ctx, child, OID_AUTO, "pci_rid", CTLFLAG_RD,
+ &softc->pci_rid, 0, "IOMMU RID");
+ SYSCTL_ADD_U16(ctx, child, OID_AUTO, "start_dev_rid", CTLFLAG_RD,
+ &softc->start_dev_rid, 0, "Start of device under this IOMMU");
+ SYSCTL_ADD_U16(ctx, child, OID_AUTO, "end_dev_rid", CTLFLAG_RD,
+ &softc->end_dev_rid, 0, "End of device under this IOMMU");
SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "command_head",
CTLTYPE_UINT | CTLFLAG_RD, softc, 0,
amdvi_handle_sysctl, "IU", "Command head");
Modified: projects/bsd_rdma_4_9/sys/amd64/vmm/amd/amdvi_priv.h
==============================================================================
--- projects/bsd_rdma_4_9/sys/amd64/vmm/amd/amdvi_priv.h Fri Nov 24 12:10:42 2017 (r326161)
+++ projects/bsd_rdma_4_9/sys/amd64/vmm/amd/amdvi_priv.h Fri Nov 24 12:13:27 2017 (r326162)
@@ -230,8 +230,8 @@ struct amdvi_ctrl {
uint64_t :45;
uint32_t evt_tail:19;
uint64_t :45;
- uint64_t :56;
- uint8_t status:8;
+ uint32_t status:19;
+ uint64_t :45;
uint64_t pad2;
uint8_t :4;
uint16_t ppr_head:15;
Modified: projects/bsd_rdma_4_9/sys/amd64/vmm/amd/ivrs_drv.c
==============================================================================
--- projects/bsd_rdma_4_9/sys/amd64/vmm/amd/ivrs_drv.c Fri Nov 24 12:10:42 2017 (r326161)
+++ projects/bsd_rdma_4_9/sys/amd64/vmm/amd/ivrs_drv.c Fri Nov 24 12:13:27 2017 (r326162)
@@ -88,7 +88,7 @@ ivrs_hdr_iterate_tbl(ivhd_iter_t iter, void *arg)
if (!iter(ivrs_hdr, arg))
return;
break;
-
+
case ACPI_IVRS_TYPE_MEMORY1:
case ACPI_IVRS_TYPE_MEMORY2:
case ACPI_IVRS_TYPE_MEMORY3:
@@ -96,7 +96,7 @@ ivrs_hdr_iterate_tbl(ivhd_iter_t iter, void *arg)
return;
break;
-
+
default:
printf("AMD-Vi:Not IVHD/IVMD type(%d)", ivrs_hdr->Type);
@@ -186,7 +186,8 @@ ivhd_dev_add_entry(struct amdvi_softc *softc, uint32_t
static int
ivhd_dev_parse(ACPI_IVRS_HARDWARE * ivhd, struct amdvi_softc *softc)
{
- ACPI_IVRS_DE_HEADER *de, *end;
+ ACPI_IVRS_DE_HEADER *de;
+ uint8_t *p, *end;
int range_start_id = 0, range_end_id = 0;
uint32_t *extended;
uint8_t all_data = 0, range_data = 0;
@@ -195,12 +196,15 @@ ivhd_dev_parse(ACPI_IVRS_HARDWARE * ivhd, struct amdvi
softc->start_dev_rid = ~0;
softc->end_dev_rid = 0;
- de = (ACPI_IVRS_DE_HEADER *) ((uint8_t *)ivhd +
- sizeof(ACPI_IVRS_HARDWARE));
- end = (ACPI_IVRS_DE_HEADER *) ((uint8_t *)ivhd +
- ivhd->Header.Length);
+ /*
+ * XXX The following actually depends on Header.Type and
+ * is only true for 0x10.
+ */
+ p = (uint8_t *)ivhd + sizeof(ACPI_IVRS_HARDWARE);
+ end = (uint8_t *)ivhd + ivhd->Header.Length;
- while (de < (ACPI_IVRS_DE_HEADER *) end) {
+ while (p < end) {
+ de = (ACPI_IVRS_DE_HEADER *)p;
softc->start_dev_rid = MIN(softc->start_dev_rid, de->Id);
softc->end_dev_rid = MAX(softc->end_dev_rid, de->Id);
switch (de->Type) {
@@ -263,7 +267,15 @@ ivhd_dev_parse(ACPI_IVRS_HARDWARE * ivhd, struct amdvi
"WARN Too many device entries.\n");
return (EINVAL);
}
- de++;
+ if (de->Type < 0x40)
+ p += sizeof(ACPI_IVRS_DEVICE4);
+ else if (de->Type < 0x80)
+ p += sizeof(ACPI_IVRS_DEVICE8A);
+ else {
+ printf("Variable size IVHD type 0x%x not supported\n",
+ de->Type);
+ break;
+ }
}
KASSERT((softc->end_dev_rid >= softc->start_dev_rid),
Modified: projects/bsd_rdma_4_9/sys/arm/allwinner/clkng/aw_ccung.c
==============================================================================
--- projects/bsd_rdma_4_9/sys/arm/allwinner/clkng/aw_ccung.c Fri Nov 24 12:10:42 2017 (r326161)
+++ projects/bsd_rdma_4_9/sys/arm/allwinner/clkng/aw_ccung.c Fri Nov 24 12:13:27 2017 (r326162)
@@ -76,6 +76,10 @@ __FBSDID("$FreeBSD$");
#include <arm/allwinner/clkng/ccu_sun8i_r.h>
#endif
+#if defined(SOC_ALLWINNER_A83T)
+#include <arm/allwinner/clkng/ccu_a83t.h>
+#endif
+
#include "clkdev_if.h"
#include "hwreset_if.h"
@@ -102,6 +106,10 @@ static struct resource_spec aw_ccung_spec[] = {
#define A13_CCU 6
#endif
+#if defined(SOC_ALLWINNER_A83T)
+#define A83T_CCU 7
+#endif
+
static struct ofw_compat_data compat_data[] = {
#if defined(SOC_ALLWINNER_A31)
{ "allwinner,sun5i-a13-ccu", A13_CCU},
@@ -117,6 +125,9 @@ static struct ofw_compat_data compat_data[] = {
{ "allwinner,sun50i-a64-ccu", A64_CCU },
{ "allwinner,sun50i-a64-r-ccu", A64_R_CCU },
#endif
+#if defined(SOC_ALLWINNER_A83T)
+ { "allwinner,sun8i-a83t-ccu", A83T_CCU },
+#endif
{NULL, 0 }
};
@@ -357,6 +368,11 @@ aw_ccung_attach(device_t dev)
break;
case A64_R_CCU:
ccu_sun8i_r_register_clocks(sc);
+ break;
+#endif
+#if defined(SOC_ALLWINNER_A83T)
+ case A83T_CCU:
+ ccu_a83t_register_clocks(sc);
break;
#endif
}
Modified: projects/bsd_rdma_4_9/sys/arm/arm/machdep.c
==============================================================================
--- projects/bsd_rdma_4_9/sys/arm/arm/machdep.c Fri Nov 24 12:10:42 2017 (r326161)
+++ projects/bsd_rdma_4_9/sys/arm/arm/machdep.c Fri Nov 24 12:13:27 2017 (r326162)
@@ -518,7 +518,17 @@ set_mcontext(struct thread *td, mcontext_t *mcp)
mcontext_vfp_t mc_vfp, *vfp;
struct trapframe *tf = td->td_frame;
const __greg_t *gr = mcp->__gregs;
+ int spsr;
+ /*
+ * Make sure the processor mode has not been tampered with and
+ * interrupts have not been disabled.
+ */
+ spsr = gr[_REG_CPSR];
+ if ((spsr & PSR_MODE) != PSR_USR32_MODE ||
+ (spsr & (PSR_I | PSR_F)) != 0)
+ return (EINVAL);
+
#ifdef WITNESS
if (mcp->mc_vfp_size != 0 && mcp->mc_vfp_size != sizeof(mc_vfp)) {
printf("%s: %s: Malformed mc_vfp_size: %d (0x%08X)\n",
@@ -677,22 +687,16 @@ sys_sigreturn(td, uap)
} */ *uap;
{
ucontext_t uc;
- int spsr;
+ int error;
if (uap == NULL)
return (EFAULT);
if (copyin(uap->sigcntxp, &uc, sizeof(uc)))
return (EFAULT);
- /*
- * Make sure the processor mode has not been tampered with and
- * interrupts have not been disabled.
- */
- spsr = uc.uc_mcontext.__gregs[_REG_CPSR];
- if ((spsr & PSR_MODE) != PSR_USR32_MODE ||
- (spsr & (PSR_I | PSR_F)) != 0)
- return (EINVAL);
/* Restore register context. */
- set_mcontext(td, &uc.uc_mcontext);
+ error = set_mcontext(td, &uc.uc_mcontext);
+ if (error != 0)
+ return (error);
/* Restore signal mask. */
kern_sigprocmask(td, SIG_SETMASK, &uc.uc_sigmask, NULL, 0);
Modified: projects/bsd_rdma_4_9/sys/arm/cloudabi32/cloudabi32_sysvec.c
==============================================================================
--- projects/bsd_rdma_4_9/sys/arm/cloudabi32/cloudabi32_sysvec.c Fri Nov 24 12:10:42 2017 (r326161)
+++ projects/bsd_rdma_4_9/sys/arm/cloudabi32/cloudabi32_sysvec.c Fri Nov 24 12:13:27 2017 (r326162)
@@ -61,7 +61,7 @@ cloudabi32_proc_setregs(struct thread *td, struct imag
* tpidrurw to the TCB.
*/
regs = td->td_frame;
- regs->tf_r0 = td->td_retval[0] =
+ regs->tf_r0 =
stack + roundup(sizeof(cloudabi32_tcb_t), sizeof(register_t));
(void)cpu_set_user_tls(td, (void *)stack);
}
Modified: projects/bsd_rdma_4_9/sys/arm64/arm64/machdep.c
==============================================================================
--- projects/bsd_rdma_4_9/sys/arm64/arm64/machdep.c Fri Nov 24 12:10:42 2017 (r326161)
+++ projects/bsd_rdma_4_9/sys/arm64/arm64/machdep.c Fri Nov 24 12:13:27 2017 (r326162)
@@ -211,7 +211,8 @@ set_regs(struct thread *td, struct reg *regs)
frame->tf_sp = regs->sp;
frame->tf_lr = regs->lr;
frame->tf_elr = regs->elr;
- frame->tf_spsr = regs->spsr;
+ frame->tf_spsr &= ~PSR_FLAGS;
+ frame->tf_spsr |= regs->spsr & PSR_FLAGS;
memcpy(frame->tf_x, regs->x, sizeof(frame->tf_x));
@@ -310,12 +311,7 @@ exec_setregs(struct thread *td, struct image_params *i
memset(tf, 0, sizeof(struct trapframe));
- /*
- * We need to set x0 for init as it doesn't call
- * cpu_set_syscall_retval to copy the value. We also
- * need to set td_retval for the cases where we do.
- */
- tf->tf_x[0] = td->td_retval[0] = stack;
+ tf->tf_x[0] = stack;
tf->tf_sp = STACKALIGN(stack);
tf->tf_lr = imgp->entry_addr;
tf->tf_elr = imgp->entry_addr;
@@ -354,7 +350,13 @@ int
set_mcontext(struct thread *td, mcontext_t *mcp)
{
struct trapframe *tf = td->td_frame;
+ uint32_t spsr;
+ spsr = mcp->mc_gpregs.gp_spsr;
+ if ((spsr & PSR_M_MASK) != PSR_M_EL0t ||
+ (spsr & (PSR_F | PSR_I | PSR_A | PSR_D)) != 0)
+ return (EINVAL);
+
memcpy(tf->tf_x, mcp->mc_gpregs.gp_x, sizeof(tf->tf_x));
tf->tf_sp = mcp->mc_gpregs.gp_sp;
@@ -530,19 +532,16 @@ int
sys_sigreturn(struct thread *td, struct sigreturn_args *uap)
{
ucontext_t uc;
- uint32_t spsr;
+ int error;
if (uap == NULL)
return (EFAULT);
if (copyin(uap->sigcntxp, &uc, sizeof(uc)))
return (EFAULT);
- spsr = uc.uc_mcontext.mc_gpregs.gp_spsr;
- if ((spsr & PSR_M_MASK) != PSR_M_EL0t ||
- (spsr & (PSR_F | PSR_I | PSR_A | PSR_D)) != 0)
- return (EINVAL);
-
- set_mcontext(td, &uc.uc_mcontext);
+ error = set_mcontext(td, &uc.uc_mcontext);
+ if (error != 0)
+ return (error);
set_fpcontext(td, &uc.uc_mcontext);
/* Restore signal mask. */
Modified: projects/bsd_rdma_4_9/sys/arm64/cloudabi64/cloudabi64_sysvec.c
==============================================================================
--- projects/bsd_rdma_4_9/sys/arm64/cloudabi64/cloudabi64_sysvec.c Fri Nov 24 12:10:42 2017 (r326161)
+++ projects/bsd_rdma_4_9/sys/arm64/cloudabi64/cloudabi64_sysvec.c Fri Nov 24 12:13:27 2017 (r326162)
@@ -61,7 +61,7 @@ cloudabi64_proc_setregs(struct thread *td, struct imag
* tpidr_el0 to the TCB.
*/
regs = td->td_frame;
- regs->tf_x[0] = td->td_retval[0] =
+ regs->tf_x[0] =
stack + roundup(sizeof(cloudabi64_tcb_t), sizeof(register_t));
(void)cpu_set_user_tls(td, (void *)stack);
}
Modified: projects/bsd_rdma_4_9/sys/arm64/include/armreg.h
==============================================================================
--- projects/bsd_rdma_4_9/sys/arm64/include/armreg.h Fri Nov 24 12:10:42 2017 (r326161)
+++ projects/bsd_rdma_4_9/sys/arm64/include/armreg.h Fri Nov 24 12:13:27 2017 (r326162)
@@ -572,6 +572,7 @@
#define PSR_C 0x20000000
#define PSR_Z 0x40000000
#define PSR_N 0x80000000
+#define PSR_FLAGS 0xf0000000
/* TCR_EL1 - Translation Control Register */
#define TCR_ASID_16 (1 << 36)
Modified: projects/bsd_rdma_4_9/sys/cddl/contrib/opensolaris/uts/common/dtrace/fasttrap.c
==============================================================================
--- projects/bsd_rdma_4_9/sys/cddl/contrib/opensolaris/uts/common/dtrace/fasttrap.c Fri Nov 24 12:10:42 2017 (r326161)
+++ projects/bsd_rdma_4_9/sys/cddl/contrib/opensolaris/uts/common/dtrace/fasttrap.c Fri Nov 24 12:13:27 2017 (r326162)
@@ -601,8 +601,8 @@ fasttrap_fork(proc_t *p, proc_t *cp)
pid_t ppid = p->p_pid;
int i;
-#ifdef illumos
ASSERT(curproc == p);
+#ifdef illumos
ASSERT(p->p_proc_flag & P_PR_LOCK);
#else
PROC_LOCK_ASSERT(p, MA_OWNED);
@@ -610,26 +610,15 @@ fasttrap_fork(proc_t *p, proc_t *cp)
#ifdef illumos
ASSERT(p->p_dtrace_count > 0);
#else
- if (p->p_dtrace_helpers) {
- /*
- * dtrace_helpers_duplicate() allocates memory.
- */
- _PHOLD(cp);
- PROC_UNLOCK(p);
- PROC_UNLOCK(cp);
- dtrace_helpers_duplicate(p, cp);
- PROC_LOCK(cp);
- PROC_LOCK(p);
- _PRELE(cp);
- }
/*
* This check is purposely here instead of in kern_fork.c because,
* for legal resons, we cannot include the dtrace_cddl.h header
* inside kern_fork.c and insert if-clause there.
*/
- if (p->p_dtrace_count == 0)
+ if (p->p_dtrace_count == 0 && p->p_dtrace_helpers == NULL)
return;
#endif
+
ASSERT(cp->p_dtrace_count == 0);
/*
@@ -658,6 +647,8 @@ fasttrap_fork(proc_t *p, proc_t *cp)
_PHOLD(cp);
PROC_UNLOCK(cp);
PROC_UNLOCK(p);
+ if (p->p_dtrace_count == 0)
+ goto dup_helpers;
#endif
/*
@@ -711,6 +702,9 @@ fasttrap_fork(proc_t *p, proc_t *cp)
mutex_enter(&cp->p_lock);
sprunlock(cp);
#else
+dup_helpers:
+ if (p->p_dtrace_helpers != NULL)
+ dtrace_helpers_duplicate(p, cp);
PROC_LOCK(p);
PROC_LOCK(cp);
_PRELE(cp);
Modified: projects/bsd_rdma_4_9/sys/compat/linux/linux_emul.c
==============================================================================
--- projects/bsd_rdma_4_9/sys/compat/linux/linux_emul.c Fri Nov 24 12:10:42 2017 (r326161)
+++ projects/bsd_rdma_4_9/sys/compat/linux/linux_emul.c Fri Nov 24 12:13:27 2017 (r326162)
@@ -186,7 +186,7 @@ linux_common_execve(struct thread *td, struct image_ar
error = kern_execve(td, eargs, NULL);
post_execve(td, error, oldvmspace);
- if (error != 0)
+ if (error != EJUSTRETURN)
return (error);
/*
@@ -213,7 +213,7 @@ linux_common_execve(struct thread *td, struct image_ar
free(em, M_TEMP);
free(pem, M_LINUX);
}
- return (0);
+ return (EJUSTRETURN);
}
void
Modified: projects/bsd_rdma_4_9/sys/geom/mirror/g_mirror.c
==============================================================================
--- projects/bsd_rdma_4_9/sys/geom/mirror/g_mirror.c Fri Nov 24 12:10:42 2017 (r326161)
+++ projects/bsd_rdma_4_9/sys/geom/mirror/g_mirror.c Fri Nov 24 12:13:27 2017 (r326162)
@@ -54,8 +54,8 @@ static MALLOC_DEFINE(M_MIRROR, "mirror_data", "GEOM_MI
SYSCTL_DECL(_kern_geom);
static SYSCTL_NODE(_kern_geom, OID_AUTO, mirror, CTLFLAG_RW, 0,
"GEOM_MIRROR stuff");
-u_int g_mirror_debug = 0;
-SYSCTL_UINT(_kern_geom_mirror, OID_AUTO, debug, CTLFLAG_RWTUN, &g_mirror_debug, 0,
+int g_mirror_debug = 0;
+SYSCTL_INT(_kern_geom_mirror, OID_AUTO, debug, CTLFLAG_RWTUN, &g_mirror_debug, 0,
"Debug level");
static u_int g_mirror_timeout = 4;
SYSCTL_UINT(_kern_geom_mirror, OID_AUTO, timeout, CTLFLAG_RWTUN, &g_mirror_timeout,
Modified: projects/bsd_rdma_4_9/sys/geom/mirror/g_mirror.h
==============================================================================
--- projects/bsd_rdma_4_9/sys/geom/mirror/g_mirror.h Fri Nov 24 12:10:42 2017 (r326161)
+++ projects/bsd_rdma_4_9/sys/geom/mirror/g_mirror.h Fri Nov 24 12:13:27 2017 (r326162)
@@ -72,7 +72,7 @@
G_MIRROR_DEVICE_FLAG_NOFAILSYNC)
#ifdef _KERNEL
-extern u_int g_mirror_debug;
+extern int g_mirror_debug;
#define G_MIRROR_DEBUG(lvl, ...) do { \
if (g_mirror_debug >= (lvl)) { \
Modified: projects/bsd_rdma_4_9/sys/i386/i386/machdep.c
==============================================================================
--- projects/bsd_rdma_4_9/sys/i386/i386/machdep.c Fri Nov 24 12:10:42 2017 (r326161)
+++ projects/bsd_rdma_4_9/sys/i386/i386/machdep.c Fri Nov 24 12:13:27 2017 (r326162)
@@ -1126,6 +1126,7 @@ exec_setregs(struct thread *td, struct image_params *i
set_fsbase(td, 0);
set_gsbase(td, 0);
+ /* Make sure edx is 0x0 on entry. Linux binaries depend on it. */
bzero((char *)regs, sizeof(struct trapframe));
regs->tf_eip = imgp->entry_addr;
regs->tf_esp = stack;
@@ -1168,13 +1169,6 @@ exec_setregs(struct thread *td, struct image_params *i
* clean FP state if it uses the FPU again.
*/
fpstate_drop(td);
-
- /*
- * XXX - Linux emulator
- * Make sure sure edx is 0x0 on entry. Linux binaries depend
- * on it.
- */
- td->td_retval[1] = 0;
}
void
Modified: projects/bsd_rdma_4_9/sys/i386/include/atomic.h
==============================================================================
--- projects/bsd_rdma_4_9/sys/i386/include/atomic.h Fri Nov 24 12:10:42 2017 (r326161)
+++ projects/bsd_rdma_4_9/sys/i386/include/atomic.h Fri Nov 24 12:13:27 2017 (r326162)
@@ -129,6 +129,7 @@ int atomic_cmpset_64(volatile uint64_t *, uint64_t, u
uint64_t atomic_load_acq_64(volatile uint64_t *);
void atomic_store_rel_64(volatile uint64_t *, uint64_t);
uint64_t atomic_swap_64(volatile uint64_t *, uint64_t);
+uint64_t atomic_fetchadd_64(volatile uint64_t *, uint64_t);
#else /* !KLD_MODULE && __GNUCLIKE_ASM */
@@ -563,6 +564,17 @@ atomic_swap_64(volatile uint64_t *p, uint64_t v)
return (atomic_swap_64_i386(p, v));
else
return (atomic_swap_64_i586(p, v));
+}
+
+static __inline uint64_t
+atomic_fetchadd_64(volatile uint64_t *p, uint64_t v)
+{
+
+ for (;;) {
+ uint64_t t = *p;
+ if (atomic_cmpset_64(p, t, t + v))
+ return (t);
+ }
}
#endif /* _KERNEL */
Modified: projects/bsd_rdma_4_9/sys/kern/init_main.c
==============================================================================
--- projects/bsd_rdma_4_9/sys/kern/init_main.c Fri Nov 24 12:10:42 2017 (r326161)
+++ projects/bsd_rdma_4_9/sys/kern/init_main.c Fri Nov 24 12:13:27 2017 (r326162)
@@ -797,7 +797,7 @@ start_init(void *dummy)
* Otherwise, return via fork_trampoline() all the way
* to user mode as init!
*/
- if ((error = sys_execve(td, &args)) == 0) {
+ if ((error = sys_execve(td, &args)) == EJUSTRETURN) {
mtx_unlock(&Giant);
return;
}
Modified: projects/bsd_rdma_4_9/sys/kern/kern_exec.c
==============================================================================
--- projects/bsd_rdma_4_9/sys/kern/kern_exec.c Fri Nov 24 12:10:42 2017 (r326161)
+++ projects/bsd_rdma_4_9/sys/kern/kern_exec.c Fri Nov 24 12:13:27 2017 (r326162)
@@ -318,7 +318,7 @@ post_execve(struct thread *td, int error, struct vmspa
* If success, we upgrade to SINGLE_EXIT state to
* force other threads to suicide.
*/
- if (error == 0)
+ if (error == EJUSTRETURN)
thread_single(p, SINGLE_EXIT);
else
thread_single_end(p, SINGLE_BOUNDARY);
@@ -962,7 +962,13 @@ exec_fail:
ktrprocctor(p);
#endif
- return (error);
+ /*
+ * We don't want cpu_set_syscall_retval() to overwrite any of
+ * the register values put in place by exec_setregs().
+ * Implementations of cpu_set_syscall_retval() will leave
+ * registers unmodified when returning EJUSTRETURN.
+ */
+ return (error == 0 ? EJUSTRETURN : error);
}
int
Modified: projects/bsd_rdma_4_9/sys/netinet/sctp_ss_functions.c
==============================================================================
--- projects/bsd_rdma_4_9/sys/netinet/sctp_ss_functions.c Fri Nov 24 12:10:42 2017 (r326161)
+++ projects/bsd_rdma_4_9/sys/netinet/sctp_ss_functions.c Fri Nov 24 12:13:27 2017 (r326162)
@@ -1,4 +1,6 @@
/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
* Copyright (c) 2010-2012, by Michael Tuexen. All rights reserved.
* Copyright (c) 2010-2012, by Randall Stewart. All rights reserved.
* Copyright (c) 2010-2012, by Robin Seggelmann. All rights reserved.
Modified: projects/bsd_rdma_4_9/sys/powerpc/powerpc/exec_machdep.c
==============================================================================
--- projects/bsd_rdma_4_9/sys/powerpc/powerpc/exec_machdep.c Fri Nov 24 12:10:42 2017 (r326161)
+++ projects/bsd_rdma_4_9/sys/powerpc/powerpc/exec_machdep.c Fri Nov 24 12:13:27 2017 (r326162)
@@ -520,22 +520,11 @@ exec_setregs(struct thread *td, struct image_params *i
* - ps_strings is a NetBSD extention, and will be
* ignored by executables which are strictly
* compliant with the SVR4 ABI.
- *
- * XXX We have to set both regs and retval here due to different
- * XXX calling convention in trap.c and init_main.c.
*/
/* Collect argc from the user stack */
argc = fuword((void *)stack);
- /*
- * XXX PG: these get overwritten in the syscall return code.
- * execve() should return EJUSTRETURN, like it does on NetBSD.
- * Emulate by setting the syscall return value cells. The
- * registers still have to be set for init's fork trampoline.
- */
- td->td_retval[0] = argc;
- td->td_retval[1] = stack + sizeof(register_t);
tf->fixreg[3] = argc;
tf->fixreg[4] = stack + sizeof(register_t);
tf->fixreg[5] = stack + (2 + argc)*sizeof(register_t);
@@ -572,8 +561,6 @@ ppc32_setregs(struct thread *td, struct image_params *
argc = fuword32((void *)stack);
- td->td_retval[0] = argc;
- td->td_retval[1] = stack + sizeof(uint32_t);
tf->fixreg[3] = argc;
tf->fixreg[4] = stack + sizeof(uint32_t);
tf->fixreg[5] = stack + (2 + argc)*sizeof(uint32_t);
Modified: projects/bsd_rdma_4_9/sys/riscv/riscv/machdep.c
==============================================================================
--- projects/bsd_rdma_4_9/sys/riscv/riscv/machdep.c Fri Nov 24 12:10:42 2017 (r326161)
+++ projects/bsd_rdma_4_9/sys/riscv/riscv/machdep.c Fri Nov 24 12:13:27 2017 (r326162)
@@ -279,12 +279,7 @@ exec_setregs(struct thread *td, struct image_params *i
memset(tf, 0, sizeof(struct trapframe));
- /*
- * We need to set a0 for init as it doesn't call
- * cpu_set_syscall_retval to copy the value. We also
- * need to set td_retval for the cases where we do.
- */
- tf->tf_a[0] = td->td_retval[0] = stack;
+ tf->tf_a[0] = stack;
tf->tf_sp = STACKALIGN(stack);
tf->tf_ra = imgp->entry_addr;
tf->tf_sepc = imgp->entry_addr;
Modified: projects/bsd_rdma_4_9/sys/sparc64/sparc64/machdep.c
==============================================================================
--- projects/bsd_rdma_4_9/sys/sparc64/sparc64/machdep.c Fri Nov 24 12:10:42 2017 (r326161)
+++ projects/bsd_rdma_4_9/sys/sparc64/sparc64/machdep.c Fri Nov 24 12:13:27 2017 (r326162)
@@ -1009,9 +1009,6 @@ exec_setregs(struct thread *td, struct image_params *i
* header, it turns out that just always using TSO performs best.
*/
tf->tf_tstate = TSTATE_IE | TSTATE_PEF | TSTATE_MM_TSO;
-
- td->td_retval[0] = tf->tf_out[0];
- td->td_retval[1] = tf->tf_out[1];
}
int
Modified: projects/bsd_rdma_4_9/usr.bin/vmstat/vmstat.c
==============================================================================
--- projects/bsd_rdma_4_9/usr.bin/vmstat/vmstat.c Fri Nov 24 12:10:42 2017 (r326161)
+++ projects/bsd_rdma_4_9/usr.bin/vmstat/vmstat.c Fri Nov 24 12:13:27 2017 (r326162)
@@ -665,7 +665,7 @@ getcpuinfo(u_long *maskp, int *maxidp)
static void
-prthuman(const char *name, u_int64_t val, int size)
+prthuman(const char *name, uint64_t val, int size)
{
char buf[10];
int flags;
@@ -817,22 +817,22 @@ dovmstat(unsigned int interval, int reps)
total.t_rq - 1, total.t_dw + total.t_pw, total.t_sw);
xo_close_container("processes");
xo_open_container("memory");
-#define vmstat_pgtok(a) ((a) * (sum.v_page_size >> 10))
+#define vmstat_pgtok(a) ((uintmax_t)(a) * (sum.v_page_size >> 10))
#define rate(x) (((x) * rate_adj + halfuptime) / uptime) /* round */
if (hflag) {
xo_emit("");
prthuman("available-memory",
- total.t_avm * (u_int64_t)sum.v_page_size, 5);
+ total.t_avm * (uint64_t)sum.v_page_size, 5);
xo_emit(" ");
prthuman("free-memory",
- total.t_free * (u_int64_t)sum.v_page_size, 5);
+ total.t_free * (uint64_t)sum.v_page_size, 5);
xo_emit(" ");
} else {
xo_emit(" ");
- xo_emit("{:available-memory/%7d}",
+ xo_emit("{:available-memory/%7ju}",
vmstat_pgtok(total.t_avm));
xo_emit(" ");
- xo_emit("{:free-memory/%7d}",
+ xo_emit("{:free-memory/%7ju}",
vmstat_pgtok(total.t_free));
xo_emit(" ");
}
@@ -1555,9 +1555,9 @@ display_object(struct kinfo_vmobject *kvo)
const char *str;
xo_open_instance("object");
- xo_emit("{:resident/%5jd} ", (uintmax_t)kvo->kvo_resident);
- xo_emit("{:active/%5jd} ", (uintmax_t)kvo->kvo_active);
- xo_emit("{:inactive/%5jd} ", (uintmax_t)kvo->kvo_inactive);
+ xo_emit("{:resident/%5ju} ", (uintmax_t)kvo->kvo_resident);
+ xo_emit("{:active/%5ju} ", (uintmax_t)kvo->kvo_active);
+ xo_emit("{:inactive/%5ju} ", (uintmax_t)kvo->kvo_inactive);
xo_emit("{:refcount/%3d} ", kvo->kvo_ref_count);
xo_emit("{:shadowcount/%3d} ", kvo->kvo_shadow_count);
switch (kvo->kvo_memattr) {
More information about the svn-src-projects
mailing list