svn commit: r295926 - in projects/release-pkg: contrib/binutils/bfd contrib/libarchive/libarchive lib/libc/db/hash sys/arm/arm sys/arm/freescale/imx sys/arm/include sys/arm64/conf sys/boot/fdt/dts/...
Glen Barber
gjb at FreeBSD.org
Tue Feb 23 16:01:39 UTC 2016
Author: gjb
Date: Tue Feb 23 16:01:34 2016
New Revision: 295926
URL: https://svnweb.freebsd.org/changeset/base/295926
Log:
MFH
Sponsored by: The FreeBSD Foundation
Added:
projects/release-pkg/sys/riscv/riscv/stack_machdep.c
- copied unchanged from r295925, head/sys/riscv/riscv/stack_machdep.c
Modified:
projects/release-pkg/contrib/binutils/bfd/elf.c
projects/release-pkg/contrib/libarchive/libarchive/archive_read.c
projects/release-pkg/lib/libc/db/hash/hash.c
projects/release-pkg/sys/arm/arm/cpu_asm-v6.S
projects/release-pkg/sys/arm/arm/trap-v4.c
projects/release-pkg/sys/arm/freescale/imx/imx6_machdep.c
projects/release-pkg/sys/arm/include/cpu-v6.h
projects/release-pkg/sys/arm64/conf/GENERIC
projects/release-pkg/sys/boot/fdt/dts/riscv/qemu.dts
projects/release-pkg/sys/boot/fdt/dts/riscv/spike.dts
projects/release-pkg/sys/boot/uboot/lib/net.c
projects/release-pkg/sys/compat/cloudabi/cloudabi_mem.c
projects/release-pkg/sys/conf/files.riscv
projects/release-pkg/sys/conf/kern.post.mk
projects/release-pkg/sys/dev/e1000/if_em.c
projects/release-pkg/sys/dev/e1000/if_em.h
projects/release-pkg/sys/dev/e1000/if_igb.c
projects/release-pkg/sys/dev/e1000/if_igb.h
projects/release-pkg/sys/dev/e1000/if_lem.h
projects/release-pkg/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
projects/release-pkg/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c
projects/release-pkg/sys/dev/uart/uart_cpu_fdt.c
projects/release-pkg/sys/dev/uart/uart_dev_lpc.c
projects/release-pkg/sys/dev/usb/usb_hid.c
projects/release-pkg/sys/dev/usb/usbdevs
projects/release-pkg/sys/dev/usb/wlan/if_urtwn.c
projects/release-pkg/sys/powerpc/mpc85xx/mpc85xx.c
projects/release-pkg/sys/riscv/include/atomic.h
projects/release-pkg/sys/riscv/riscv/machdep.c
projects/release-pkg/sys/riscv/riscv/timer.c
projects/release-pkg/sys/riscv/riscv/trap.c
projects/release-pkg/usr.sbin/iostat/iostat.c
projects/release-pkg/usr.sbin/pwd_mkdb/pwd_mkdb.c
Directory Properties:
projects/release-pkg/ (props changed)
projects/release-pkg/contrib/binutils/ (props changed)
projects/release-pkg/contrib/libarchive/ (props changed)
projects/release-pkg/contrib/libarchive/libarchive/ (props changed)
projects/release-pkg/lib/libc/ (props changed)
projects/release-pkg/sys/ (props changed)
projects/release-pkg/sys/boot/ (props changed)
projects/release-pkg/sys/conf/ (props changed)
projects/release-pkg/sys/dev/hyperv/ (props changed)
Modified: projects/release-pkg/contrib/binutils/bfd/elf.c
==============================================================================
--- projects/release-pkg/contrib/binutils/bfd/elf.c Tue Feb 23 15:28:13 2016 (r295925)
+++ projects/release-pkg/contrib/binutils/bfd/elf.c Tue Feb 23 16:01:34 2016 (r295926)
@@ -8934,14 +8934,14 @@ elf_create_symbuf (bfd_size_type symcoun
shndx_count++;
ssymbuf = bfd_malloc ((shndx_count + 1) * sizeof (*ssymbuf)
- + (indbufend - indbuf) * sizeof (*ssymbuf));
+ + (indbufend - indbuf) * sizeof (*ssym));
if (ssymbuf == NULL)
{
free (indbuf);
return NULL;
}
- ssym = (struct elf_symbuf_symbol *) (ssymbuf + shndx_count);
+ ssym = (struct elf_symbuf_symbol *) (ssymbuf + shndx_count + 1);
ssymbuf->ssym = NULL;
ssymbuf->count = shndx_count;
ssymbuf->st_shndx = 0;
Modified: projects/release-pkg/contrib/libarchive/libarchive/archive_read.c
==============================================================================
--- projects/release-pkg/contrib/libarchive/libarchive/archive_read.c Tue Feb 23 15:28:13 2016 (r295925)
+++ projects/release-pkg/contrib/libarchive/libarchive/archive_read.c Tue Feb 23 16:01:34 2016 (r295926)
@@ -545,13 +545,13 @@ archive_read_open1(struct archive *_a)
static int
choose_filters(struct archive_read *a)
{
- int number_bidders, i, bid, best_bid;
+ int number_bidders, i, bid, best_bid, n;
struct archive_read_filter_bidder *bidder, *best_bidder;
struct archive_read_filter *filter;
ssize_t avail;
int r;
- for (;;) {
+ for (n = 0; n < 25; ++n) {
number_bidders = sizeof(a->bidders) / sizeof(a->bidders[0]);
best_bid = 0;
@@ -597,6 +597,9 @@ choose_filters(struct archive_read *a)
return (ARCHIVE_FATAL);
}
}
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Input requires too many filters for decoding");
+ return (ARCHIVE_FATAL);
}
/*
Modified: projects/release-pkg/lib/libc/db/hash/hash.c
==============================================================================
--- projects/release-pkg/lib/libc/db/hash/hash.c Tue Feb 23 15:28:13 2016 (r295925)
+++ projects/release-pkg/lib/libc/db/hash/hash.c Tue Feb 23 16:01:34 2016 (r295926)
@@ -422,8 +422,10 @@ hdestroy(HTAB *hashp)
if (hashp->tmp_buf)
free(hashp->tmp_buf);
- if (hashp->fp != -1)
+ if (hashp->fp != -1) {
+ (void)_fsync(hashp->fp);
(void)_close(hashp->fp);
+ }
free(hashp);
@@ -458,6 +460,8 @@ hash_sync(const DB *dbp, u_int32_t flags
return (0);
if (__buf_free(hashp, 0, 1) || flush_meta(hashp))
return (ERROR);
+ if (hashp->fp != -1 && _fsync(hashp->fp) != 0)
+ return (ERROR);
hashp->new_file = 0;
return (0);
}
Modified: projects/release-pkg/sys/arm/arm/cpu_asm-v6.S
==============================================================================
--- projects/release-pkg/sys/arm/arm/cpu_asm-v6.S Tue Feb 23 15:28:13 2016 (r295925)
+++ projects/release-pkg/sys/arm/arm/cpu_asm-v6.S Tue Feb 23 16:01:34 2016 (r295926)
@@ -34,16 +34,9 @@
#include <machine/armreg.h>
#include <machine/sysreg.h>
-#if __ARM_ARCH >= 6
#define GET_PCB(tmp) \
- mrc CP15_TPIDRPRW(tmp); \
- add tmp, tmp, #(TD_PCB)
-#else
-.Lcurpcb:
- .word _C_LABEL(__pcpu) + PC_CURPCB
-#define GET_PCB(tmp) \
- ldr tmp, .Lcurpcb
-#endif
+ mrc CP15_TPIDRPRW(tmp); \
+ add tmp, tmp, #(TD_PCB)
/*
* Define cache functions used by startup code, which counts on the fact that
Modified: projects/release-pkg/sys/arm/arm/trap-v4.c
==============================================================================
--- projects/release-pkg/sys/arm/arm/trap-v4.c Tue Feb 23 15:28:13 2016 (r295925)
+++ projects/release-pkg/sys/arm/arm/trap-v4.c Tue Feb 23 16:01:34 2016 (r295926)
@@ -94,7 +94,6 @@ __FBSDID("$FreeBSD$");
#include <vm/vm_map.h>
#include <vm/vm_extern.h>
-#include <machine/acle-compat.h>
#include <machine/cpu.h>
#include <machine/frame.h>
#include <machine/machdep.h>
@@ -312,16 +311,13 @@ abort_handler(struct trapframe *tf, int
}
/*
- * We need to know whether the page should be mapped as R or R/W. On
- * armv6 and later the fault status register indicates whether the
- * access was a read or write. Prior to armv6, we know that a
- * permission fault can only be the result of a write to a read-only
- * location, so we can deal with those quickly. Otherwise we need to
- * disassemble the faulting instruction to determine if it was a write.
+ * We need to know whether the page should be mapped as R or R/W.
+ * On armv4, the fault status register does not indicate whether
+ * the access was a read or write. We know that a permission fault
+ * can only be the result of a write to a read-only location, so we
+ * can deal with those quickly. Otherwise we need to disassemble
+ * the faulting instruction to determine if it was a write.
*/
-#if __ARM_ARCH >= 6
- ftype = (fsr & FAULT_WNR) ? VM_PROT_READ | VM_PROT_WRITE : VM_PROT_READ;
-#else
if (IS_PERMISSION_FAULT(fsr))
ftype = VM_PROT_WRITE;
else {
@@ -338,7 +334,6 @@ abort_handler(struct trapframe *tf, int
ftype = VM_PROT_READ;
}
}
-#endif
/*
* See if the fault is as a result of ref/mod emulation,
Modified: projects/release-pkg/sys/arm/freescale/imx/imx6_machdep.c
==============================================================================
--- projects/release-pkg/sys/arm/freescale/imx/imx6_machdep.c Tue Feb 23 15:28:13 2016 (r295925)
+++ projects/release-pkg/sys/arm/freescale/imx/imx6_machdep.c Tue Feb 23 16:01:34 2016 (r295926)
@@ -94,6 +94,74 @@ fdt_pic_decode_t fdt_pic_table[] = {
};
#endif
+/*
+ * Fix FDT data related to interrupts.
+ *
+ * Driven by the needs of linux and its drivers (as always), the published FDT
+ * data for imx6 now sets the interrupt parent for most devices to the GPC
+ * interrupt controller, which is for use when the chip is in deep-sleep mode.
+ * We don't support deep sleep or have a GPC-PIC driver; we need all interrupts
+ * to be handled by the GIC.
+ *
+ * Luckily, the change to the FDT data was to assign the GPC as the interrupt
+ * parent for the soc node and letting that get inherited by all other devices
+ * (except a few that directly name GIC as their interrupt parent). So we can
+ * set the world right by just changing the interrupt-parent property of the soc
+ * node to refer to GIC instead of GPC. This will get us by until we write our
+ * own GPC driver (or until linux changes its mind and the FDT data again).
+ *
+ * We validate that we have data that looks like we expect before changing it:
+ * - SOC node exists and has GPC as its interrupt parent.
+ * - GPC node exists and has GIC as its interrupt parent.
+ * - GIC node exists and is its own interrupt parent.
+ *
+ * This applies to all models of imx6. Luckily all of them have the devices
+ * involved at the same addresses on the same busses, so we don't need any
+ * per-soc logic. We handle this at platform attach time rather than via the
+ * fdt_fixup_table, because the latter requires matching on the FDT "model"
+ * property, and this applies to all boards including those not yet invented.
+ */
+static void
+fix_fdt_interrupt_data(void)
+{
+ phandle_t gicipar, gicnode, gicxref;
+ phandle_t gpcipar, gpcnode, gpcxref;
+ phandle_t socipar, socnode;
+ int result;
+
+ socnode = OF_finddevice("/soc");
+ if (socnode == -1)
+ return;
+ result = OF_getencprop(socnode, "interrupt-parent", &socipar,
+ sizeof(socipar));
+ if (result <= 0)
+ return;
+
+ gicnode = OF_finddevice("/soc/interrupt-controller at 00a01000");
+ if (gicnode == -1)
+ return;
+ result = OF_getencprop(gicnode, "interrupt-parent", &gicipar,
+ sizeof(gicipar));
+ if (result <= 0)
+ return;
+ gicxref = OF_xref_from_node(gicnode);
+
+ gpcnode = OF_finddevice("/soc/aips-bus at 02000000/gpc at 020dc000");
+ if (gpcnode == -1)
+ return;
+ result = OF_getencprop(gpcnode, "interrupt-parent", &gpcipar,
+ sizeof(gpcipar));
+ if (result <= 0)
+ return;
+ gpcxref = OF_xref_from_node(gpcnode);
+
+ if (socipar != gpcxref || gpcipar != gicxref || gicipar != gicxref)
+ return;
+
+ gicxref = cpu_to_fdt32(gicxref);
+ OF_setprop(socnode, "interrupt-parent", &gicxref, sizeof(gicxref));
+}
+
static vm_offset_t
imx6_lastaddr(platform_t plat)
{
@@ -104,6 +172,10 @@ imx6_lastaddr(platform_t plat)
static int
imx6_attach(platform_t plat)
{
+
+ /* Fix soc interrupt-parent property. */
+ fix_fdt_interrupt_data();
+
/* Inform the MPCore timer driver that its clock is variable. */
arm_tmr_change_frequency(ARM_TMR_FREQUENCY_VARIES);
Modified: projects/release-pkg/sys/arm/include/cpu-v6.h
==============================================================================
--- projects/release-pkg/sys/arm/include/cpu-v6.h Tue Feb 23 15:28:13 2016 (r295925)
+++ projects/release-pkg/sys/arm/include/cpu-v6.h Tue Feb 23 16:01:34 2016 (r295926)
@@ -177,15 +177,12 @@ _RF0(cp15_dfar_get, CP15_DFAR(%0))
_RF0(cp15_ifar_get, CP15_IFAR(%0))
_RF0(cp15_l2ctlr_get, CP15_L2CTLR(%0))
#endif
-/* ARMv6+ and XScale */
_RF0(cp15_actlr_get, CP15_ACTLR(%0))
_WF1(cp15_actlr_set, CP15_ACTLR(%0))
-#if __ARM_ARCH >= 6
_WF1(cp15_ats1cpr_set, CP15_ATS1CPR(%0))
_WF1(cp15_ats1cpw_set, CP15_ATS1CPW(%0))
_RF0(cp15_par_get, CP15_PAR(%0))
_RF0(cp15_sctlr_get, CP15_SCTLR(%0))
-#endif
/*CPU id registers */
_RF0(cp15_midr_get, CP15_MIDR(%0))
Modified: projects/release-pkg/sys/arm64/conf/GENERIC
==============================================================================
--- projects/release-pkg/sys/arm64/conf/GENERIC Tue Feb 23 15:28:13 2016 (r295925)
+++ projects/release-pkg/sys/arm64/conf/GENERIC Tue Feb 23 16:01:34 2016 (r295926)
@@ -103,6 +103,7 @@ device mii
device miibus # MII bus support
device em # Intel PRO/1000 Gigabit Ethernet Family
device igb # Intel PRO/1000 PCIE Server Gigabit Family
+device ix # Intel 10Gb Ethernet Family
device msk # Marvell/SysKonnect Yukon II Gigabit Ethernet
device vnic # Cavium ThunderX NIC
Modified: projects/release-pkg/sys/boot/fdt/dts/riscv/qemu.dts
==============================================================================
--- projects/release-pkg/sys/boot/fdt/dts/riscv/qemu.dts Tue Feb 23 15:28:13 2016 (r295925)
+++ projects/release-pkg/sys/boot/fdt/dts/riscv/qemu.dts Tue Feb 23 16:01:34 2016 (r295926)
@@ -49,7 +49,7 @@
memory {
device_type = "memory";
- reg = <0x0 0x8000000>; /* 128MB at 0x0 */
+ reg = <0x0 0x40000000>; /* 1GB at 0x0 */
};
soc {
Modified: projects/release-pkg/sys/boot/fdt/dts/riscv/spike.dts
==============================================================================
--- projects/release-pkg/sys/boot/fdt/dts/riscv/spike.dts Tue Feb 23 15:28:13 2016 (r295925)
+++ projects/release-pkg/sys/boot/fdt/dts/riscv/spike.dts Tue Feb 23 16:01:34 2016 (r295926)
@@ -49,7 +49,7 @@
memory {
device_type = "memory";
- reg = <0x0 0x8000000>; /* 128MB at 0x0 */
+ reg = <0x0 0x40000000>; /* 1GB at 0x0 */
};
soc {
Modified: projects/release-pkg/sys/boot/uboot/lib/net.c
==============================================================================
--- projects/release-pkg/sys/boot/uboot/lib/net.c Tue Feb 23 15:28:13 2016 (r295925)
+++ projects/release-pkg/sys/boot/uboot/lib/net.c Tue Feb 23 16:01:34 2016 (r295926)
@@ -108,9 +108,19 @@ get_env_net_params()
char *envstr;
in_addr_t rootaddr, serveraddr;
- /* Silently get out right away if we don't have rootpath. */
- if (ub_env_get("rootpath") == NULL)
+ /*
+ * Silently get out right away if we don't have rootpath, because none
+ * of the other info we obtain below is sufficient to boot without it.
+ *
+ * If we do have rootpath, copy it into the global var and also set
+ * dhcp.root-path in the env. If we don't get all the other info from
+ * the u-boot env below, we will still try dhcp/bootp, but the server-
+ * provided path will not replace the user-provided value we set here.
+ */
+ if ((envstr = ub_env_get("rootpath")) == NULL)
return;
+ strlcpy(rootpath, envstr, sizeof(rootpath));
+ setenv("dhcp.root-path", rootpath, 0);
/*
* Our own IP address must be valid. Silently get out if it's not set,
@@ -154,9 +164,6 @@ get_env_net_params()
* There must be a rootpath. It may be ip:/path or it may be just the
* path in which case the ip needs to be in serverip.
*/
- if ((envstr = ub_env_get("rootpath")) == NULL)
- return;
- strncpy(rootpath, envstr, sizeof(rootpath) - 1);
rootaddr = net_parse_rootpath();
if (rootaddr == INADDR_NONE)
rootaddr = serveraddr;
Modified: projects/release-pkg/sys/compat/cloudabi/cloudabi_mem.c
==============================================================================
--- projects/release-pkg/sys/compat/cloudabi/cloudabi_mem.c Tue Feb 23 15:28:13 2016 (r295925)
+++ projects/release-pkg/sys/compat/cloudabi/cloudabi_mem.c Tue Feb 23 16:01:34 2016 (r295926)
@@ -35,18 +35,26 @@ __FBSDID("$FreeBSD$");
/* Converts CloudABI's memory protection flags to FreeBSD's. */
static int
-convert_mprot(cloudabi_mprot_t in)
+convert_mprot(cloudabi_mprot_t in, int *out)
{
- int out;
- out = 0;
+ /* Unknown protection flags. */
+ if ((in & ~(CLOUDABI_PROT_EXEC | CLOUDABI_PROT_WRITE |
+ CLOUDABI_PROT_READ)) != 0)
+ return (ENOTSUP);
+ /* W^X: Write and exec cannot be enabled at the same time. */
+ if ((in & (CLOUDABI_PROT_EXEC | CLOUDABI_PROT_WRITE)) ==
+ (CLOUDABI_PROT_EXEC | CLOUDABI_PROT_WRITE))
+ return (ENOTSUP);
+
+ *out = 0;
if (in & CLOUDABI_PROT_EXEC)
- out |= PROT_EXEC;
+ *out |= PROT_EXEC;
if (in & CLOUDABI_PROT_WRITE)
- out |= PROT_WRITE;
+ *out |= PROT_WRITE;
if (in & CLOUDABI_PROT_READ)
- out |= PROT_READ;
- return (out);
+ *out |= PROT_READ;
+ return (0);
}
int
@@ -98,10 +106,10 @@ cloudabi_sys_mem_map(struct thread *td,
struct mmap_args mmap_args = {
.addr = uap->addr,
.len = uap->len,
- .prot = convert_mprot(uap->prot),
.fd = uap->fd,
.pos = uap->off
};
+ int error;
/* Translate flags. */
if (uap->flags & CLOUDABI_MAP_ANON)
@@ -113,6 +121,11 @@ cloudabi_sys_mem_map(struct thread *td,
if (uap->flags & CLOUDABI_MAP_SHARED)
mmap_args.flags |= MAP_SHARED;
+ /* Translate protection. */
+ error = convert_mprot(uap->prot, &mmap_args.prot);
+ if (error != 0)
+ return (error);
+
return (sys_mmap(td, &mmap_args));
}
@@ -123,8 +136,13 @@ cloudabi_sys_mem_protect(struct thread *
struct mprotect_args mprotect_args = {
.addr = uap->addr,
.len = uap->len,
- .prot = convert_mprot(uap->prot),
};
+ int error;
+
+ /* Translate protection. */
+ error = convert_mprot(uap->prot, &mprotect_args.prot);
+ if (error != 0)
+ return (error);
return (sys_mprotect(td, &mprotect_args));
}
Modified: projects/release-pkg/sys/conf/files.riscv
==============================================================================
--- projects/release-pkg/sys/conf/files.riscv Tue Feb 23 15:28:13 2016 (r295925)
+++ projects/release-pkg/sys/conf/files.riscv Tue Feb 23 16:01:34 2016 (r295926)
@@ -34,9 +34,10 @@ riscv/riscv/machdep.c standard
riscv/riscv/mem.c standard
riscv/riscv/nexus.c standard
riscv/riscv/pmap.c standard
-riscv/riscv/sys_machdep.c standard
+riscv/riscv/stack_machdep.c optional ddb | stack
riscv/riscv/support.S standard
riscv/riscv/swtch.S standard
+riscv/riscv/sys_machdep.c standard
riscv/riscv/trap.c standard
riscv/riscv/timer.c standard
riscv/riscv/uio_machdep.c standard
Modified: projects/release-pkg/sys/conf/kern.post.mk
==============================================================================
--- projects/release-pkg/sys/conf/kern.post.mk Tue Feb 23 15:28:13 2016 (r295925)
+++ projects/release-pkg/sys/conf/kern.post.mk Tue Feb 23 16:01:34 2016 (r295926)
@@ -222,10 +222,9 @@ _MKDEPCC:= ${CC:N${CCACHE_BIN}}
SRCS= assym.s vnode_if.h ${BEFORE_DEPEND} ${CFILES} \
${SYSTEM_CFILES} ${GEN_CFILES} ${SFILES} \
${MFILES:T:S/.m$/.h/}
-DEPENDFILES= .depend
+DEPENDFILES= .depend .depend.*
.if ${MK_FAST_DEPEND} == "yes" && \
(${.MAKE.MODE:Unormal:Mmeta} == "" || ${.MAKE.MODE:Unormal:Mnofilemon} != "")
-DEPENDFILES+= .depend.*
DEPEND_CFLAGS+= -MD -MP -MF.depend.${.TARGET}
DEPEND_CFLAGS+= -MT${.TARGET}
.if defined(.PARSEDIR)
Modified: projects/release-pkg/sys/dev/e1000/if_em.c
==============================================================================
--- projects/release-pkg/sys/dev/e1000/if_em.c Tue Feb 23 15:28:13 2016 (r295925)
+++ projects/release-pkg/sys/dev/e1000/if_em.c Tue Feb 23 16:01:34 2016 (r295926)
@@ -3193,9 +3193,11 @@ em_setup_interface(device_t dev, struct
if_setflags(ifp, IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST);
if_setioctlfn(ifp, em_ioctl);
if_setgetcounterfn(ifp, em_get_counter);
+
/* TSO parameters */
ifp->if_hw_tsomax = IP_MAXPACKET;
- ifp->if_hw_tsomaxsegcount = EM_MAX_SCATTER;
+ /* Take m_pullup(9)'s in em_xmit() w/ TSO into acount. */
+ ifp->if_hw_tsomaxsegcount = EM_MAX_SCATTER - 5;
ifp->if_hw_tsomaxsegsize = EM_TSO_SEG_SIZE;
#ifdef EM_MULTIQUEUE
Modified: projects/release-pkg/sys/dev/e1000/if_em.h
==============================================================================
--- projects/release-pkg/sys/dev/e1000/if_em.h Tue Feb 23 15:28:13 2016 (r295925)
+++ projects/release-pkg/sys/dev/e1000/if_em.h Tue Feb 23 16:01:34 2016 (r295926)
@@ -269,7 +269,7 @@
#define HW_DEBUGOUT1(S, A) if (DEBUG_HW) printf(S "\n", A)
#define HW_DEBUGOUT2(S, A, B) if (DEBUG_HW) printf(S "\n", A, B)
-#define EM_MAX_SCATTER 64
+#define EM_MAX_SCATTER 40
#define EM_VFTA_SIZE 128
#define EM_TSO_SIZE (65535 + sizeof(struct ether_vlan_header))
#define EM_TSO_SEG_SIZE 4096 /* Max dma segment size */
Modified: projects/release-pkg/sys/dev/e1000/if_igb.c
==============================================================================
--- projects/release-pkg/sys/dev/e1000/if_igb.c Tue Feb 23 15:28:13 2016 (r295925)
+++ projects/release-pkg/sys/dev/e1000/if_igb.c Tue Feb 23 16:01:34 2016 (r295926)
@@ -3139,6 +3139,12 @@ igb_setup_interface(device_t dev, struct
ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
ifp->if_ioctl = igb_ioctl;
ifp->if_get_counter = igb_get_counter;
+
+ /* TSO parameters */
+ ifp->if_hw_tsomax = IP_MAXPACKET;
+ ifp->if_hw_tsomaxsegcount = IGB_MAX_SCATTER;
+ ifp->if_hw_tsomaxsegsize = IGB_TSO_SEG_SIZE;
+
#ifndef IGB_LEGACY_TX
ifp->if_transmit = igb_mq_start;
ifp->if_qflush = igb_qflush;
Modified: projects/release-pkg/sys/dev/e1000/if_igb.h
==============================================================================
--- projects/release-pkg/sys/dev/e1000/if_igb.h Tue Feb 23 15:28:13 2016 (r295925)
+++ projects/release-pkg/sys/dev/e1000/if_igb.h Tue Feb 23 16:01:34 2016 (r295926)
@@ -278,7 +278,7 @@
#define HW_DEBUGOUT1(S, A) if (DEBUG_HW) printf(S "\n", A)
#define HW_DEBUGOUT2(S, A, B) if (DEBUG_HW) printf(S "\n", A, B)
-#define IGB_MAX_SCATTER 64
+#define IGB_MAX_SCATTER 40
#define IGB_VFTA_SIZE 128
#define IGB_BR_SIZE 4096 /* ring buf size */
#define IGB_TSO_SIZE (65535 + sizeof(struct ether_vlan_header))
Modified: projects/release-pkg/sys/dev/e1000/if_lem.h
==============================================================================
--- projects/release-pkg/sys/dev/e1000/if_lem.h Tue Feb 23 15:28:13 2016 (r295925)
+++ projects/release-pkg/sys/dev/e1000/if_lem.h Tue Feb 23 16:01:34 2016 (r295926)
@@ -236,10 +236,8 @@
#define HW_DEBUGOUT1(S, A) if (DEBUG_HW) printf(S "\n", A)
#define HW_DEBUGOUT2(S, A, B) if (DEBUG_HW) printf(S "\n", A, B)
-#define EM_MAX_SCATTER 64
+#define EM_MAX_SCATTER 40
#define EM_VFTA_SIZE 128
-#define EM_TSO_SIZE (65535 + sizeof(struct ether_vlan_header))
-#define EM_TSO_SEG_SIZE 4096 /* Max dma segment size */
#define EM_MSIX_MASK 0x01F00000 /* For 82574 use */
#define ETH_ZLEN 60
#define ETH_ADDR_LEN 6
Modified: projects/release-pkg/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
==============================================================================
--- projects/release-pkg/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c Tue Feb 23 15:28:13 2016 (r295925)
+++ projects/release-pkg/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c Tue Feb 23 16:01:34 2016 (r295926)
@@ -905,6 +905,68 @@ done:
}
/*
+ * NOTE:
+ * If this function fails, then txd will be freed, but the mbuf
+ * associated w/ the txd will _not_ be freed.
+ */
+static int
+hn_send_pkt(struct ifnet *ifp, struct hv_device *device_ctx,
+ struct hn_tx_ring *txr, struct hn_txdesc *txd)
+{
+ int error, send_failed = 0;
+
+again:
+ /*
+ * Make sure that txd is not freed before ETHER_BPF_MTAP.
+ */
+ hn_txdesc_hold(txd);
+ error = hv_nv_on_send(device_ctx, &txd->netvsc_pkt);
+ if (!error) {
+ ETHER_BPF_MTAP(ifp, txd->m);
+ if_inc_counter(ifp, IFCOUNTER_OPACKETS, 1);
+ }
+ hn_txdesc_put(txr, txd);
+
+ if (__predict_false(error)) {
+ int freed;
+
+ /*
+ * This should "really rarely" happen.
+ *
+ * XXX Too many RX to be acked or too many sideband
+ * commands to run? Ask netvsc_channel_rollup()
+ * to kick start later.
+ */
+ txr->hn_has_txeof = 1;
+ if (!send_failed) {
+ txr->hn_send_failed++;
+ send_failed = 1;
+ /*
+ * Try sending again after set hn_has_txeof;
+ * in case that we missed the last
+ * netvsc_channel_rollup().
+ */
+ goto again;
+ }
+ if_printf(ifp, "send failed\n");
+
+ /*
+ * Caller will perform further processing on the
+ * associated mbuf, so don't free it in hn_txdesc_put();
+ * only unload it from the DMA map in hn_txdesc_put(),
+ * if it was loaded.
+ */
+ txd->m = NULL;
+ freed = hn_txdesc_put(txr, txd);
+ KASSERT(freed != 0,
+ ("fail to free txd upon send error"));
+
+ txr->hn_send_failed++;
+ }
+ return error;
+}
+
+/*
* Start a transmit of one or more packets
*/
static int
@@ -922,9 +984,9 @@ hn_start_locked(struct hn_tx_ring *txr,
return 0;
while (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) {
- int error, send_failed = 0;
struct hn_txdesc *txd;
struct mbuf *m_head;
+ int error;
IFQ_DRV_DEQUEUE(&ifp->if_snd, m_head);
if (m_head == NULL)
@@ -936,14 +998,14 @@ hn_start_locked(struct hn_tx_ring *txr,
* dispatch this packet sending (and sending of any
* following up packets) to tx taskqueue.
*/
- IF_PREPEND(&ifp->if_snd, m_head);
+ IFQ_DRV_PREPEND(&ifp->if_snd, m_head);
return 1;
}
txd = hn_txdesc_get(txr);
if (txd == NULL) {
txr->hn_no_txdescs++;
- IF_PREPEND(&ifp->if_snd, m_head);
+ IFQ_DRV_PREPEND(&ifp->if_snd, m_head);
atomic_set_int(&ifp->if_drv_flags, IFF_DRV_OACTIVE);
break;
}
@@ -953,53 +1015,11 @@ hn_start_locked(struct hn_tx_ring *txr,
/* Both txd and m_head are freed */
continue;
}
-again:
- /*
- * Make sure that txd is not freed before ETHER_BPF_MTAP.
- */
- hn_txdesc_hold(txd);
- error = hv_nv_on_send(device_ctx, &txd->netvsc_pkt);
- if (!error) {
- ETHER_BPF_MTAP(ifp, m_head);
- if_inc_counter(ifp, IFCOUNTER_OPACKETS, 1);
- }
- hn_txdesc_put(txr, txd);
+ error = hn_send_pkt(ifp, device_ctx, txr, txd);
if (__predict_false(error)) {
- int freed;
-
- /*
- * This should "really rarely" happen.
- *
- * XXX Too many RX to be acked or too many sideband
- * commands to run? Ask netvsc_channel_rollup()
- * to kick start later.
- */
- txr->hn_has_txeof = 1;
- if (!send_failed) {
- txr->hn_send_failed++;
- send_failed = 1;
- /*
- * Try sending again after set hn_has_txeof;
- * in case that we missed the last
- * netvsc_channel_rollup().
- */
- goto again;
- }
- if_printf(ifp, "send failed\n");
-
- /*
- * This mbuf will be prepended, don't free it
- * in hn_txdesc_put(); only unload it from the
- * DMA map in hn_txdesc_put(), if it was loaded.
- */
- txd->m = NULL;
- freed = hn_txdesc_put(txr, txd);
- KASSERT(freed != 0,
- ("fail to free txd upon send error"));
-
- txr->hn_send_failed++;
- IF_PREPEND(&ifp->if_snd, m_head);
+ /* txd is freed, but m_head is not */
+ IFQ_DRV_PREPEND(&ifp->if_snd, m_head);
atomic_set_int(&ifp->if_drv_flags, IFF_DRV_OACTIVE);
break;
}
Modified: projects/release-pkg/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c
==============================================================================
--- projects/release-pkg/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c Tue Feb 23 15:28:13 2016 (r295925)
+++ projects/release-pkg/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c Tue Feb 23 16:01:34 2016 (r295926)
@@ -810,8 +810,8 @@ hv_storvsc_rescan_target(struct storvsc_
if (xpt_create_path(&ccb->ccb_h.path, NULL, pathid, targetid,
CAM_LUN_WILDCARD) != CAM_REQ_CMP) {
- printf("unable to create path for rescan, pathid: %d,"
- "targetid: %d\n", pathid, targetid);
+ printf("unable to create path for rescan, pathid: %u,"
+ "targetid: %u\n", pathid, targetid);
xpt_free_ccb(ccb);
return;
}
Modified: projects/release-pkg/sys/dev/uart/uart_cpu_fdt.c
==============================================================================
--- projects/release-pkg/sys/dev/uart/uart_cpu_fdt.c Tue Feb 23 15:28:13 2016 (r295925)
+++ projects/release-pkg/sys/dev/uart/uart_cpu_fdt.c Tue Feb 23 16:01:34 2016 (r295926)
@@ -54,10 +54,6 @@ __FBSDID("$FreeBSD$");
#include <dev/uart/uart_cpu.h>
#include <dev/uart/uart_cpu_fdt.h>
-#ifdef __aarch64__
-extern bus_space_tag_t fdtbus_bs_tag;
-#endif
-
/*
* UART console routines.
*/
@@ -136,9 +132,6 @@ uart_cpu_getdev(int devtype, struct uart
char *cp;
int err;
- uart_bus_space_mem = fdtbus_bs_tag;
- uart_bus_space_io = NULL;
-
/* Allow overriding the FDT using the environment. */
class = &uart_ns8250_class;
err = uart_getenv(devtype, di, class);
@@ -195,10 +188,8 @@ uart_cpu_getdev(int devtype, struct uart
if (uart_fdt_get_shift(node, &shift) != 0)
shift = uart_getregshift(class);
- if (OF_getprop(node, "current-speed", &br, sizeof(br)) <= 0)
+ if (OF_getencprop(node, "current-speed", &br, sizeof(br)) <= 0)
br = 0;
- else
- br = fdt32_to_cpu(br);
/*
* Finalize configuration.
@@ -212,5 +203,9 @@ uart_cpu_getdev(int devtype, struct uart
di->stopbits = 1;
di->parity = UART_PARITY_NONE;
- return (OF_decode_addr(node, 0, &di->bas.bst, &di->bas.bsh, NULL));
+ err = OF_decode_addr(node, 0, &di->bas.bst, &di->bas.bsh, NULL);
+ uart_bus_space_mem = di->bas.bst;
+ uart_bus_space_io = NULL;
+
+ return (err);
}
Modified: projects/release-pkg/sys/dev/uart/uart_dev_lpc.c
==============================================================================
--- projects/release-pkg/sys/dev/uart/uart_dev_lpc.c Tue Feb 23 15:28:13 2016 (r295925)
+++ projects/release-pkg/sys/dev/uart/uart_dev_lpc.c Tue Feb 23 16:01:34 2016 (r295926)
@@ -32,7 +32,6 @@ __FBSDID("$FreeBSD$");
#include <sys/bus.h>
#include <sys/conf.h>
#include <machine/bus.h>
-#include <machine/fdt.h>
#include <dev/uart/uart.h>
#include <dev/uart/uart_cpu.h>
@@ -49,9 +48,9 @@ __FBSDID("$FreeBSD$");
static bus_space_handle_t bsh_clkpwr;
#define lpc_ns8250_get_clkreg(_bas, _reg) \
- bus_space_read_4(fdtbus_bs_tag, bsh_clkpwr, (_reg))
+ bus_space_read_4((_bas)->bst, bsh_clkpwr, (_reg))
#define lpc_ns8250_set_clkreg(_bas, _reg, _val) \
- bus_space_write_4(fdtbus_bs_tag, bsh_clkpwr, (_reg), (_val))
+ bus_space_write_4((_bas)->bst, bsh_clkpwr, (_reg), (_val))
/*
* Clear pending interrupts. THRE is cleared by reading IIR. Data
@@ -292,7 +291,7 @@ lpc_ns8250_init(struct uart_bas *bas, in
u_long clkmode;
/* Enable UART clock */
- bus_space_map(fdtbus_bs_tag, LPC_CLKPWR_PHYS_BASE, LPC_CLKPWR_SIZE, 0,
+ bus_space_map(bas->bst, LPC_CLKPWR_PHYS_BASE, LPC_CLKPWR_SIZE, 0,
&bsh_clkpwr);
clkmode = lpc_ns8250_get_clkreg(bas, LPC_UART_CLKMODE);
lpc_ns8250_set_clkreg(bas, LPC_UART_CLKMODE, clkmode |
Modified: projects/release-pkg/sys/dev/usb/usb_hid.c
==============================================================================
--- projects/release-pkg/sys/dev/usb/usb_hid.c Tue Feb 23 15:28:13 2016 (r295925)
+++ projects/release-pkg/sys/dev/usb/usb_hid.c Tue Feb 23 16:01:34 2016 (r295926)
@@ -354,7 +354,8 @@ hid_get_item(struct hid_data *s, struct
/* range check usage count */
if (c->loc.count > 255) {
DPRINTFN(0, "Number of "
- "items truncated to 255\n");
+ "items(%u) truncated to 255\n",
+ (unsigned)(c->loc.count));
s->ncount = 255;
} else
s->ncount = c->loc.count;
Modified: projects/release-pkg/sys/dev/usb/usbdevs
==============================================================================
--- projects/release-pkg/sys/dev/usb/usbdevs Tue Feb 23 15:28:13 2016 (r295925)
+++ projects/release-pkg/sys/dev/usb/usbdevs Tue Feb 23 16:01:34 2016 (r295926)
@@ -835,6 +835,7 @@ product ABOCOM RT2573_4 0xb21e RT2573
product ABOCOM RTL8188CU_1 0x8188 RTL8188CU
product ABOCOM RTL8188CU_2 0x8189 RTL8188CU
product ABOCOM RTL8192CU 0x8178 RTL8192CU
+product ABOCOM RTL8188EU 0x8179 RTL8188EU
product ABOCOM WUG2700 0xb21f WUG2700
/* Acton Research Corp. */
Modified: projects/release-pkg/sys/dev/usb/wlan/if_urtwn.c
==============================================================================
--- projects/release-pkg/sys/dev/usb/wlan/if_urtwn.c Tue Feb 23 15:28:13 2016 (r295925)
+++ projects/release-pkg/sys/dev/usb/wlan/if_urtwn.c Tue Feb 23 16:01:34 2016 (r295926)
@@ -176,6 +176,7 @@ static const STRUCT_USB_HOST_ID urtwn_de
URTWN_DEV(TRENDNET, RTL8192CU),
URTWN_DEV(ZYXEL, RTL8192CU),
/* URTWN_RTL8188E */
+ URTWN_RTL8188E_DEV(ABOCOM, RTL8188EU),
URTWN_RTL8188E_DEV(DLINK, DWA123D1),
URTWN_RTL8188E_DEV(DLINK, DWA125D1),
URTWN_RTL8188E_DEV(ELECOM, WDC150SU2M),
Modified: projects/release-pkg/sys/powerpc/mpc85xx/mpc85xx.c
==============================================================================
--- projects/release-pkg/sys/powerpc/mpc85xx/mpc85xx.c Tue Feb 23 15:28:13 2016 (r295925)
+++ projects/release-pkg/sys/powerpc/mpc85xx/mpc85xx.c Tue Feb 23 16:01:34 2016 (r295926)
@@ -157,7 +157,8 @@ law_find_free(void)
return (i);
}
-#define _LAW_SR(trgt,size) (0x80000000 | (trgt << 20) | (ffsl(size) - 2))
+#define _LAW_SR(trgt,size) (0x80000000 | (trgt << 20) | \
+ (flsl(size + (size - 1)) - 2))
int
law_enable(int trgt, uint64_t bar, uint32_t size)
Modified: projects/release-pkg/sys/riscv/include/atomic.h
==============================================================================
--- projects/release-pkg/sys/riscv/include/atomic.h Tue Feb 23 15:28:13 2016 (r295925)
+++ projects/release-pkg/sys/riscv/include/atomic.h Tue Feb 23 16:01:34 2016 (r295926)
@@ -399,10 +399,6 @@ atomic_store_rel_64(volatile uint64_t *p
*p = val;
}
-#define atomic_add_acq_int atomic_add_acq_32
-#define atomic_clear_acq_int atomic_clear_acq_32
-#define atomic_cmpset_acq_int atomic_cmpset_acq_32
-
#define atomic_add_acq_long atomic_add_acq_64
#define atomic_clear_acq_long atomic_add_acq_64
#define atomic_cmpset_acq_long atomic_cmpset_acq_64
Modified: projects/release-pkg/sys/riscv/riscv/machdep.c
==============================================================================
--- projects/release-pkg/sys/riscv/riscv/machdep.c Tue Feb 23 15:28:13 2016 (r295925)
+++ projects/release-pkg/sys/riscv/riscv/machdep.c Tue Feb 23 16:01:34 2016 (r295926)
@@ -555,7 +555,7 @@ sendsig(sig_t catcher, ksiginfo_t *ksi,
tf->tf_ra = (register_t)(sysent->sv_psstrings -
*(sysent->sv_szsigcode));
- CTR3(KTR_SIG, "sendsig: return td=%p pc=%#x sp=%#x", td, tf->tf_elr,
+ CTR3(KTR_SIG, "sendsig: return td=%p pc=%#x sp=%#x", td, tf->tf_sepc,
tf->tf_sp);
PROC_LOCK(p);
@@ -729,9 +729,13 @@ fake_preload_metadata(struct riscv_bootp
void
initriscv(struct riscv_bootparams *rvbp)
{
+ struct mem_region mem_regions[FDT_MEM_REGIONS];
vm_offset_t lastaddr;
+ int mem_regions_sz;
vm_size_t kernlen;
+ uint32_t memsize;
caddr_t kmdp;
+ int i;
/* Set the module data location */
lastaddr = fake_preload_metadata(rvbp);
@@ -752,11 +756,12 @@ initriscv(struct riscv_bootparams *rvbp)
/* Load the physical memory ranges */
physmap_idx = 0;
- /*
- * RISCVTODO: figure out whether platform provides ranges,
- * or grab from FDT.
- */
- add_physmap_entry(0, 0x8000000, physmap, &physmap_idx);
+ /* Grab physical memory regions information from device tree. */
+ if (fdt_get_mem_regions(mem_regions, &mem_regions_sz, &memsize) != 0)
+ panic("Cannot get physical memory regions");
+ for (i = 0; i < mem_regions_sz; i++)
+ add_physmap_entry(mem_regions[i].mr_start,
+ mem_regions[i].mr_size, physmap, &physmap_idx);
/* Set the pcpu data, this is needed by pmap_bootstrap */
pcpup = &__pcpu[0];
Copied: projects/release-pkg/sys/riscv/riscv/stack_machdep.c (from r295925, head/sys/riscv/riscv/stack_machdep.c)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ projects/release-pkg/sys/riscv/riscv/stack_machdep.c Tue Feb 23 16:01:34 2016 (r295926, copy of r295925, head/sys/riscv/riscv/stack_machdep.c)
@@ -0,0 +1,63 @@
+/*-
+ * Copyright (c) 2016 Ruslan Bukin <br at bsdpad.com>
+ * All rights reserved.
+ *
+ * Portions of this software were developed by SRI International and the
+ * University of Cambridge Computer Laboratory under DARPA/AFRL contract
+ * FA8750-10-C-0237 ("CTSRD"), as part of the DARPA CRASH research programme.
+ *
+ * Portions of this software were developed by the University of Cambridge
+ * Computer Laboratory as part of the CTSRD Project, with support from the
+ * UK Higher Education Innovation Fund (HEIF).
+ *
+ * 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/proc.h>
+#include <sys/stack.h>
+
+#include <machine/vmparam.h>
+#include <machine/pcb.h>
+
+void
+stack_save_td(struct stack *st, struct thread *td)
+{
+
+}
+
+int
+stack_save_td_running(struct stack *st, struct thread *td)
+{
+
+ return (EOPNOTSUPP);
+}
+
+void
+stack_save(struct stack *st)
+{
+
+}
Modified: projects/release-pkg/sys/riscv/riscv/timer.c
==============================================================================
--- projects/release-pkg/sys/riscv/riscv/timer.c Tue Feb 23 15:28:13 2016 (r295925)
+++ projects/release-pkg/sys/riscv/riscv/timer.c Tue Feb 23 16:01:34 2016 (r295926)
@@ -145,8 +145,9 @@ riscv_tmr_intr(void *arg)
/*
* Clear interrupt pending bit.
- * Note sip register is unimplemented in Spike simulator,
- * so use machine command to clear in mip.
+ * Note: SIP_STIP bit is not implemented in sip register
+ * in Spike simulator, so use machine command to clear
+ * interrupt pending bit in mip.
*/
machine_command(ECALL_CLEAR_PENDING, 0);
Modified: projects/release-pkg/sys/riscv/riscv/trap.c
==============================================================================
--- projects/release-pkg/sys/riscv/riscv/trap.c Tue Feb 23 15:28:13 2016 (r295925)
+++ projects/release-pkg/sys/riscv/riscv/trap.c Tue Feb 23 16:01:34 2016 (r295926)
@@ -270,6 +270,17 @@ do_trap_supervisor(struct trapframe *fra
case EXCP_INSTR_ACCESS_FAULT:
data_abort(frame, 0);
break;
+ case EXCP_INSTR_BREAKPOINT:
+#ifdef KDB
+ kdb_trap(exception, 0, frame);
+#else
+ dump_regs(frame);
+ panic("No debugger in kernel.\n");
+#endif
+ case EXCP_INSTR_ILLEGAL:
+ dump_regs(frame);
+ panic("Illegal instruction at %x\n", frame->tf_sepc);
+ break;
default:
dump_regs(frame);
panic("Unknown kernel exception %x badaddr %lx\n",
@@ -281,6 +292,10 @@ void
do_trap_user(struct trapframe *frame)
{
uint64_t exception;
+ struct thread *td;
+
+ td = curthread;
+ td->td_frame = frame;
exception = (frame->tf_scause & EXCP_MASK);
if (frame->tf_scause & EXCP_INTR) {
@@ -302,6 +317,14 @@ do_trap_user(struct trapframe *frame)
frame->tf_sepc += 4; /* Next instruction */
svc_handler(frame);
break;
+ case EXCP_INSTR_ILLEGAL:
+ call_trapsignal(td, SIGILL, ILL_ILLTRP, (void *)frame->tf_sepc);
+ userret(td, frame);
+ break;
+ case EXCP_INSTR_BREAKPOINT:
+ call_trapsignal(td, SIGTRAP, TRAP_BRKPT, (void *)frame->tf_sepc);
+ userret(td, frame);
+ break;
default:
dump_regs(frame);
panic("Unknown userland exception %x badaddr %lx\n",
Modified: projects/release-pkg/usr.sbin/iostat/iostat.c
==============================================================================
--- projects/release-pkg/usr.sbin/iostat/iostat.c Tue Feb 23 15:28:13 2016 (r295925)
+++ projects/release-pkg/usr.sbin/iostat/iostat.c Tue Feb 23 16:01:34 2016 (r295926)
@@ -797,7 +797,7 @@ devstats(int perf_select, long double et
long double total_mb, blocks_per_second, total_duration;
long double ms_per_other, ms_per_read, ms_per_write, ms_per_transaction;
int firstline = 1;
- char *devname;
+ char *devicename;
if (xflag > 0) {
printf(" extended device statistics ");
@@ -871,7 +871,7 @@ devstats(int perf_select, long double et
}
if (xflag > 0) {
- if (asprintf(&devname, "%s%d",
+ if (asprintf(&devicename, "%s%d",
cur.dinfo->devices[di].device_name,
cur.dinfo->devices[di].unit_number) == -1)
err(1, "asprintf");
@@ -887,7 +887,7 @@ devstats(int perf_select, long double et
printf("%-8.8s %5d %5d %8.1Lf "
"%8.1Lf %5d %5d %5d %5d "
"%4" PRIu64 " %3.0Lf ",
- devname,
+ devicename,
(int)transfers_per_second_read,
(int)transfers_per_second_write,
mb_per_second_read * 1024,
@@ -900,7 +900,7 @@ devstats(int perf_select, long double et
printf("%-8.8s %11.1Lf %11.1Lf "
"%12.1Lf %12.1Lf %4" PRIu64
" %10.1Lf %9.1Lf ",
- devname,
+ devicename,
(long double)total_transfers_read,
(long double)total_transfers_write,
(long double)
@@ -925,7 +925,7 @@ devstats(int perf_select, long double et
}
printf("\n");
}
- free(devname);
+ free(devicename);
} else if (oflag > 0) {
int msdig = (ms_per_transaction < 100.0) ? 1 : 0;
@@ -979,15 +979,15 @@ static void
cpustats(void)
{
int state;
- double time;
+ double cptime;
- time = 0.0;
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-projects
mailing list