Date: Wed, 10 Dec 2014 19:24:42 +0000 (UTC) From: Dimitry Andric <dim@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r275685 - in projects/clang350-import: bin/freebsd-version contrib/file/doc contrib/file/src etc etc/autofs gnu/usr.bin/gdb/kgdb lib/libc/net lib/libc/stdio sbin/mount sys/arm/altera/so... Message-ID: <201412101924.sBAJOgX3063977@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: dim Date: Wed Dec 10 19:24:42 2014 New Revision: 275685 URL: https://svnweb.freebsd.org/changeset/base/275685 Log: Merge ^/head r274961 through r275684. Added: projects/clang350-import/etc/autofs/special_media - copied unchanged from r275684, head/etc/autofs/special_media projects/clang350-import/sys/dev/beri/virtio/network/ - copied from r275684, head/sys/dev/beri/virtio/network/ projects/clang350-import/sys/dev/xen/grant_table/ - copied from r275684, head/sys/dev/xen/grant_table/ projects/clang350-import/sys/dev/xen/pci/ - copied from r275684, head/sys/dev/xen/pci/ projects/clang350-import/sys/x86/xen/xen_pci_bus.c - copied unchanged from r275684, head/sys/x86/xen/xen_pci_bus.c projects/clang350-import/sys/xen/xen_pci.h - copied unchanged from r275684, head/sys/xen/xen_pci.h projects/clang350-import/usr.sbin/fstyp/ - copied from r275684, head/usr.sbin/fstyp/ projects/clang350-import/usr.sbin/pw/tests/pw_groupdel.sh - copied unchanged from r275684, head/usr.sbin/pw/tests/pw_groupdel.sh projects/clang350-import/usr.sbin/pw/tests/pw_groupmod.sh - copied unchanged from r275684, head/usr.sbin/pw/tests/pw_groupmod.sh projects/clang350-import/usr.sbin/pw/tests/pw_useradd.sh - copied unchanged from r275684, head/usr.sbin/pw/tests/pw_useradd.sh projects/clang350-import/usr.sbin/pw/tests/pw_userdel.sh - copied unchanged from r275684, head/usr.sbin/pw/tests/pw_userdel.sh projects/clang350-import/usr.sbin/pw/tests/pw_usermod.sh - copied unchanged from r275684, head/usr.sbin/pw/tests/pw_usermod.sh Deleted: projects/clang350-import/sys/x86/xen/xen_pci.c projects/clang350-import/sys/xen/gnttab.c projects/clang350-import/usr.sbin/pw/tests/pw_delete.sh projects/clang350-import/usr.sbin/pw/tests/pw_modify.sh Modified: projects/clang350-import/bin/freebsd-version/Makefile projects/clang350-import/contrib/file/doc/file.man projects/clang350-import/contrib/file/src/elfclass.h projects/clang350-import/contrib/file/src/file.h projects/clang350-import/contrib/file/src/funcs.c projects/clang350-import/contrib/file/src/readelf.c projects/clang350-import/contrib/file/src/softmagic.c projects/clang350-import/etc/auto_master projects/clang350-import/etc/autofs/Makefile projects/clang350-import/etc/devd.conf projects/clang350-import/gnu/usr.bin/gdb/kgdb/kthr.c projects/clang350-import/lib/libc/net/sctp_sys_calls.c projects/clang350-import/lib/libc/stdio/fflush.c projects/clang350-import/sbin/mount/mount.8 projects/clang350-import/sys/arm/altera/socfpga/files.socfpga projects/clang350-import/sys/arm/arm/syscall.c projects/clang350-import/sys/arm/broadcom/bcm2835/bcm2835_wdog.c projects/clang350-import/sys/arm/conf/SOCKIT-BERI projects/clang350-import/sys/boot/fdt/dts/arm/socfpga-sockit-beri.dts projects/clang350-import/sys/conf/files projects/clang350-import/sys/conf/files.amd64 projects/clang350-import/sys/dev/beri/virtio/virtio.c projects/clang350-import/sys/dev/beri/virtio/virtio.h projects/clang350-import/sys/dev/beri/virtio/virtio_block.c projects/clang350-import/sys/dev/beri/virtio/virtio_mmio_platform.c projects/clang350-import/sys/dev/beri/virtio/virtio_mmio_platform.h projects/clang350-import/sys/dev/mii/micphy.c projects/clang350-import/sys/dev/usb/usbdevs projects/clang350-import/sys/dev/usb/wlan/if_upgt.c projects/clang350-import/sys/dev/virtio/mmio/virtio_mmio.c projects/clang350-import/sys/dev/virtio/mmio/virtio_mmio_if.m projects/clang350-import/sys/fs/ext2fs/ext2_inode.c projects/clang350-import/sys/fs/msdosfs/msdosfs_vfsops.c projects/clang350-import/sys/kern/vfs_mount.c projects/clang350-import/sys/kern/vfs_subr.c projects/clang350-import/sys/ofed/include/linux/module.h projects/clang350-import/sys/powerpc/aim/trap.c projects/clang350-import/sys/x86/xen/pvcpu_enum.c projects/clang350-import/sys/x86/xen/xen_intr.c projects/clang350-import/sys/x86/xen/xenpv.c projects/clang350-import/sys/xen/gnttab.h projects/clang350-import/usr.sbin/Makefile projects/clang350-import/usr.sbin/autofs/auto_master.5 projects/clang350-import/usr.sbin/mtree/verify.c projects/clang350-import/usr.sbin/pw/tests/Makefile Directory Properties: projects/clang350-import/ (props changed) projects/clang350-import/contrib/file/ (props changed) projects/clang350-import/contrib/llvm/ (props changed) projects/clang350-import/etc/ (props changed) projects/clang350-import/gnu/usr.bin/gdb/ (props changed) projects/clang350-import/lib/libc/ (props changed) projects/clang350-import/sbin/ (props changed) projects/clang350-import/sys/ (props changed) projects/clang350-import/sys/boot/ (props changed) projects/clang350-import/sys/conf/ (props changed) Modified: projects/clang350-import/bin/freebsd-version/Makefile ============================================================================== --- projects/clang350-import/bin/freebsd-version/Makefile Wed Dec 10 18:41:25 2014 (r275684) +++ projects/clang350-import/bin/freebsd-version/Makefile Wed Dec 10 19:24:42 2014 (r275685) @@ -5,8 +5,7 @@ MAN = freebsd-version.1 CLEANFILES = freebsd-version.sh NEWVERS = ${.CURDIR}/../../sys/conf/newvers.sh -freebsd-version.sh.in: ${NEWVERS} -freebsd-version.sh: ${.CURDIR}/freebsd-version.sh.in +freebsd-version.sh: ${.CURDIR}/freebsd-version.sh.in ${NEWVERS} eval $$(egrep '^(TYPE|REVISION|BRANCH)=' ${NEWVERS}) ; \ if ! sed -e "\ s/@@TYPE@@/$${TYPE}/g; \ Modified: projects/clang350-import/contrib/file/doc/file.man ============================================================================== --- projects/clang350-import/contrib/file/doc/file.man Wed Dec 10 18:41:25 2014 (r275684) +++ projects/clang350-import/contrib/file/doc/file.man Wed Dec 10 19:24:42 2014 (r275685) @@ -1,5 +1,5 @@ .\" $File: file.man,v 1.106 2014/03/07 23:11:51 christos Exp $ -.Dd January 30, 2014 +.Dd December 3, 2014 .Dt FILE __CSECTION__ .Os .Sh NAME @@ -385,6 +385,7 @@ options. .Xr hexdump 1 , .Xr od 1 , .Xr strings 1 , +.Xr fstyp 8 .Sh STANDARDS CONFORMANCE This program is believed to exceed the System V Interface Definition of FILE(CMD), as near as one can determine from the vague language Modified: projects/clang350-import/contrib/file/src/elfclass.h ============================================================================== --- projects/clang350-import/contrib/file/src/elfclass.h Wed Dec 10 18:41:25 2014 (r275684) +++ projects/clang350-import/contrib/file/src/elfclass.h Wed Dec 10 19:24:42 2014 (r275685) @@ -35,10 +35,12 @@ switch (type) { #ifdef ELFCORE case ET_CORE: + phnum = elf_getu16(swap, elfhdr.e_phnum); + if (phnum > MAX_PHNUM) + return toomany(ms, "program", phnum); flags |= FLAGS_IS_CORE; if (dophn_core(ms, clazz, swap, fd, - (off_t)elf_getu(swap, elfhdr.e_phoff), - elf_getu16(swap, elfhdr.e_phnum), + (off_t)elf_getu(swap, elfhdr.e_phoff), phnum, (size_t)elf_getu16(swap, elfhdr.e_phentsize), fsize, &flags) == -1) return -1; @@ -46,18 +48,24 @@ #endif case ET_EXEC: case ET_DYN: + phnum = elf_getu16(swap, elfhdr.e_phnum); + if (phnum > MAX_PHNUM) + return toomany(ms, "program", phnum); + shnum = elf_getu16(swap, elfhdr.e_shnum); + if (shnum > MAX_SHNUM) + return toomany(ms, "section", shnum); if (dophn_exec(ms, clazz, swap, fd, - (off_t)elf_getu(swap, elfhdr.e_phoff), - elf_getu16(swap, elfhdr.e_phnum), + (off_t)elf_getu(swap, elfhdr.e_phoff), phnum, (size_t)elf_getu16(swap, elfhdr.e_phentsize), - fsize, &flags, elf_getu16(swap, elfhdr.e_shnum)) - == -1) + fsize, &flags, shnum) == -1) return -1; /*FALLTHROUGH*/ case ET_REL: + shnum = elf_getu16(swap, elfhdr.e_shnum); + if (shnum > MAX_SHNUM) + return toomany(ms, "section", shnum); if (doshn(ms, clazz, swap, fd, - (off_t)elf_getu(swap, elfhdr.e_shoff), - elf_getu16(swap, elfhdr.e_shnum), + (off_t)elf_getu(swap, elfhdr.e_shoff), shnum, (size_t)elf_getu16(swap, elfhdr.e_shentsize), fsize, &flags, elf_getu16(swap, elfhdr.e_machine), (int)elf_getu16(swap, elfhdr.e_shstrndx)) == -1) Modified: projects/clang350-import/contrib/file/src/file.h ============================================================================== --- projects/clang350-import/contrib/file/src/file.h Wed Dec 10 18:41:25 2014 (r275684) +++ projects/clang350-import/contrib/file/src/file.h Wed Dec 10 19:24:42 2014 (r275685) @@ -482,6 +482,14 @@ protected int file_regexec(file_regex_t protected void file_regfree(file_regex_t *); protected void file_regerror(file_regex_t *, int, struct magic_set *); +typedef struct { + char *buf; + uint32_t offset; +} file_pushbuf_t; + +protected file_pushbuf_t *file_push_buffer(struct magic_set *); +protected char *file_pop_buffer(struct magic_set *, file_pushbuf_t *); + #ifndef COMPILE_ONLY extern const char *file_names[]; extern const size_t file_nnames; Modified: projects/clang350-import/contrib/file/src/funcs.c ============================================================================== --- projects/clang350-import/contrib/file/src/funcs.c Wed Dec 10 18:41:25 2014 (r275684) +++ projects/clang350-import/contrib/file/src/funcs.c Wed Dec 10 19:24:42 2014 (r275685) @@ -491,3 +491,43 @@ file_regerror(file_regex_t *rx, int rc, file_magerror(ms, "regex error %d for `%s', (%s)", rc, rx->pat, errmsg); } + +protected file_pushbuf_t * +file_push_buffer(struct magic_set *ms) +{ + file_pushbuf_t *pb; + + if (ms->event_flags & EVENT_HAD_ERR) + return NULL; + + if ((pb = (CAST(file_pushbuf_t *, malloc(sizeof(*pb))))) == NULL) + return NULL; + + pb->buf = ms->o.buf; + pb->offset = ms->offset; + + ms->o.buf = NULL; + ms->offset = 0; + + return pb; +} + +protected char * +file_pop_buffer(struct magic_set *ms, file_pushbuf_t *pb) +{ + char *rbuf; + + if (ms->event_flags & EVENT_HAD_ERR) { + free(pb->buf); + free(pb); + return NULL; + } + + rbuf = ms->o.buf; + + ms->o.buf = pb->buf; + ms->offset = pb->offset; + + free(pb); + return rbuf; +} Modified: projects/clang350-import/contrib/file/src/readelf.c ============================================================================== --- projects/clang350-import/contrib/file/src/readelf.c Wed Dec 10 18:41:25 2014 (r275684) +++ projects/clang350-import/contrib/file/src/readelf.c Wed Dec 10 19:24:42 2014 (r275685) @@ -60,6 +60,18 @@ private uint16_t getu16(int, uint16_t); private uint32_t getu32(int, uint32_t); private uint64_t getu64(int, uint64_t); +#define MAX_PHNUM 256 +#define MAX_SHNUM 1024 + +private int +toomany(struct magic_set *ms, const char *name, uint16_t num) +{ + if (file_printf(ms, ", too many %s header sections (%u)", name, num + ) == -1) + return -1; + return 0; +} + private uint16_t getu16(int swap, uint16_t value) { @@ -477,6 +489,13 @@ donote(struct magic_set *ms, void *vbuf, uint32_t namesz, descsz; unsigned char *nbuf = CAST(unsigned char *, vbuf); + if (xnh_sizeof + offset > size) { + /* + * We're out of note headers. + */ + return xnh_sizeof + offset; + } + (void)memcpy(xnh_addr, &nbuf[offset], xnh_sizeof); offset += xnh_sizeof; @@ -492,13 +511,13 @@ donote(struct magic_set *ms, void *vbuf, if (namesz & 0x80000000) { (void)file_printf(ms, ", bad note name size 0x%lx", (unsigned long)namesz); - return offset; + return 0; } if (descsz & 0x80000000) { (void)file_printf(ms, ", bad note description size 0x%lx", (unsigned long)descsz); - return offset; + return 0; } @@ -900,6 +919,7 @@ doshn(struct magic_set *ms, int clazz, i Elf32_Shdr sh32; Elf64_Shdr sh64; int stripped = 1; + size_t nbadcap = 0; void *nbuf; off_t noff, coff, name_off; uint64_t cap_hw1 = 0; /* SunOS 5.x hardware capabilites */ @@ -988,6 +1008,8 @@ doshn(struct magic_set *ms, int clazz, i goto skip; } + if (nbadcap > 5) + break; if (lseek(fd, xsh_offset, SEEK_SET) == (off_t)-1) { file_badseek(ms); return -1; @@ -1053,6 +1075,8 @@ doshn(struct magic_set *ms, int clazz, i (unsigned long long)xcap_tag, (unsigned long long)xcap_val) == -1) return -1; + if (nbadcap++ > 2) + coff = xsh_size; break; } } @@ -1233,7 +1257,7 @@ file_tryelf(struct magic_set *ms, int fd int flags = 0; Elf32_Ehdr elf32hdr; Elf64_Ehdr elf64hdr; - uint16_t type; + uint16_t type, phnum, shnum; if (ms->flags & (MAGIC_MIME|MAGIC_APPLE)) return 0; Modified: projects/clang350-import/contrib/file/src/softmagic.c ============================================================================== --- projects/clang350-import/contrib/file/src/softmagic.c Wed Dec 10 18:41:25 2014 (r275684) +++ projects/clang350-import/contrib/file/src/softmagic.c Wed Dec 10 19:24:42 2014 (r275685) @@ -67,6 +67,9 @@ private void cvt_32(union VALUETYPE *, c private void cvt_64(union VALUETYPE *, const struct magic *); #define OFFSET_OOB(n, o, i) ((n) < (o) || (i) > ((n) - (o))) + +#define MAX_RECURSION_LEVEL 10 + /* * softmagic - lookup one file in parsed, in-memory copy of database * Passed the name and FILE * of one file to be typed. @@ -1193,14 +1196,15 @@ mget(struct magic_set *ms, const unsigne int flip, int recursion_level, int *printed_something, int *need_separator, int *returnval) { - uint32_t soffset, offset = ms->offset; + uint32_t offset = ms->offset; uint32_t lhs; + file_pushbuf_t *pb; int rv, oneed_separator, in_type; - char *sbuf, *rbuf; + char *rbuf; union VALUETYPE *p = &ms->ms_value; struct mlist ml; - if (recursion_level >= 20) { + if (recursion_level >= MAX_RECURSION_LEVEL) { file_error(ms, 0, "recursion nesting exceeded"); return -1; } @@ -1644,19 +1648,23 @@ mget(struct magic_set *ms, const unsigne case FILE_INDIRECT: if (offset == 0) return 0; + if (nbytes < offset) return 0; - sbuf = ms->o.buf; - soffset = ms->offset; - ms->o.buf = NULL; - ms->offset = 0; + + if ((pb = file_push_buffer(ms)) == NULL) + return -1; + rv = file_softmagic(ms, s + offset, nbytes - offset, recursion_level, BINTEST, text); + if ((ms->flags & MAGIC_DEBUG) != 0) fprintf(stderr, "indirect @offs=%u[%d]\n", offset, rv); - rbuf = ms->o.buf; - ms->o.buf = sbuf; - ms->offset = soffset; + + rbuf = file_pop_buffer(ms, pb); + if (rbuf == NULL && ms->event_flags & EVENT_HAD_ERR) + return -1; + if (rv == 1) { if ((ms->flags & (MAGIC_MIME|MAGIC_APPLE)) == 0 && file_printf(ms, F(ms, m, "%u"), offset) == -1) { @@ -1674,13 +1682,13 @@ mget(struct magic_set *ms, const unsigne case FILE_USE: if (nbytes < offset) return 0; - sbuf = m->value.s; - if (*sbuf == '^') { - sbuf++; + rbuf = m->value.s; + if (*rbuf == '^') { + rbuf++; flip = !flip; } - if (file_magicfind(ms, sbuf, &ml) == -1) { - file_error(ms, 0, "cannot find entry `%s'", sbuf); + if (file_magicfind(ms, rbuf, &ml) == -1) { + file_error(ms, 0, "cannot find entry `%s'", rbuf); return -1; } Modified: projects/clang350-import/etc/auto_master ============================================================================== --- projects/clang350-import/etc/auto_master Wed Dec 10 18:41:25 2014 (r275684) +++ projects/clang350-import/etc/auto_master Wed Dec 10 19:24:42 2014 (r275685) @@ -3,3 +3,6 @@ # Automounter master map, see auto_master(5) for details. # /net -hosts -nobrowse,nosuid +# When using the -media special map, make sure to edit devd.conf(5) +# to move the call to "automount -c" out of the comments section. +#/media -media -nosuid Modified: projects/clang350-import/etc/autofs/Makefile ============================================================================== --- projects/clang350-import/etc/autofs/Makefile Wed Dec 10 18:41:25 2014 (r275684) +++ projects/clang350-import/etc/autofs/Makefile Wed Dec 10 19:24:42 2014 (r275685) @@ -1,6 +1,6 @@ # $FreeBSD$ -FILES= include_ldap special_hosts special_null +FILES= include_ldap special_hosts special_media special_null NO_OBJ= FILESDIR= /etc/autofs Copied: projects/clang350-import/etc/autofs/special_media (from r275684, head/etc/autofs/special_media) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/clang350-import/etc/autofs/special_media Wed Dec 10 19:24:42 2014 (r275685, copy of r275684, head/etc/autofs/special_media) @@ -0,0 +1,93 @@ +#!/bin/sh +# +# $FreeBSD$ +# + +# Print newline-separated list of devices available for mounting. +# If there is a filesystem label - use it, otherwise use device name. +print_available() { + local _fstype _fstype_and_label _label _p + + for _p in ${providers}; do + _fstype_and_label="$(fstyp -l "/dev/${_p}" 2> /dev/null)" + if [ $? -ne 0 ]; then + # Ignore devices for which we were unable + # to determine filesystem type. + continue + fi + + _fstype="${_fstype_and_label%% *}" + if [ "${_fstype}" != "${_fstype_and_label}" ]; then + _label="${_fstype_and_label#* }" + echo "${_label}" + continue + fi + + echo "${_p}" + done +} + +# Print a single map entry. +print_one() { + local _fstype _fstype_and_label _label _key _p + + _key="$1" + + _fstype="$(fstyp "/dev/${_key}" 2> /dev/null)" + if [ $? -eq 0 ]; then + echo "-fstype=${_fstype},nosuid :/dev/${_key}" + return + fi + + for _p in ${providers}; do + _fstype_and_label="$(fstyp -l "/dev/${_p}" 2> /dev/null)" + if [ $? -ne 0 ]; then + # Ignore devices for which we were unable + # to determine filesystem type. + continue + fi + + _fstype="${_fstype_and_label%% *}" + if [ "${_fstype}" = "${_fstype_and_label}" ]; then + # No label, try another device. + continue + fi + + _label="${_fstype_and_label#* }" + if [ "${_label}" != "${_key}" ]; then + # Labels don't match, try another device. + continue + fi + + echo "-fstype=${_fstype},nosuid :/dev/${_p}" + done + + # No matching device - don't print anything, autofs will handle it. +} + +# Obtain a list of (geom-provider-name, access-count) pairs, turning this: +# +# z0xfffff80005085d00 [shape=hexagon,label="ada0\nr2w2e3\nerr#0\nsector=512\nstripe=0"]; +# +# Into this: +# +# ada0 r2w2e3 +# +# XXX: It would be easier to use kern.geom.conftxt instead, but it lacks +# access counts. +pairs=$(sysctl kern.geom.confdot | sed -n 's/^.*hexagon,label="\([^\]*\)\\n\([^\]*\).*/\1 \2/p') + +# Obtain a list of GEOM providers that are not already open - not mounted, +# and without other GEOM class, such as gpart, attached. In other words, +# grep for "r0w0e0". Skip providers with names containing slashes; we're +# not interested in geom_label(4) creations. +providers=$(echo "$pairs" | awk '$2 == "r0w0e0" && $1 !~ /\// { print $1 }') + +if [ $# -eq 0 ]; then + print_available + exit 0 +fi + +print_one "$1" +exit 0 + Modified: projects/clang350-import/etc/devd.conf ============================================================================== --- projects/clang350-import/etc/devd.conf Wed Dec 10 18:41:25 2014 (r275684) +++ projects/clang350-import/etc/devd.conf Wed Dec 10 19:24:42 2014 (r275685) @@ -318,4 +318,16 @@ notify 0 { action "/usr/local/etc/rc.d/postgresql restart"; }; +# Discard autofs caches, useful for the -media special map. The one +# second delay is for GEOM to finish tasting. +# +# XXX: We should probably have a devctl(4) event that fires after GEOM +# tasting. +# +notify 100 { + match "system" "DEVFS"; + match "cdev" "(da|mmcsd)[0-9]+"; + action "sleep 1 && /usr/sbin/automount -c"; +}; + */ Modified: projects/clang350-import/gnu/usr.bin/gdb/kgdb/kthr.c ============================================================================== --- projects/clang350-import/gnu/usr.bin/gdb/kgdb/kthr.c Wed Dec 10 18:41:25 2014 (r275684) +++ projects/clang350-import/gnu/usr.bin/gdb/kgdb/kthr.c Wed Dec 10 19:24:42 2014 (r275685) @@ -96,7 +96,7 @@ kgdb_thr_add_procs(uintptr_t paddr) kt->kaddr = addr; if (td.td_tid == dumptid) kt->pcb = dumppcb; - else if (td.td_state == TDS_RUNNING && + else if (td.td_oncpu != NOCPU && CPU_ISSET(td.td_oncpu, &stopped_cpus)) kt->pcb = kgdb_trgt_core_pcb(td.td_oncpu); else Modified: projects/clang350-import/lib/libc/net/sctp_sys_calls.c ============================================================================== --- projects/clang350-import/lib/libc/net/sctp_sys_calls.c Wed Dec 10 18:41:25 2014 (r275684) +++ projects/clang350-import/lib/libc/net/sctp_sys_calls.c Wed Dec 10 19:24:42 2014 (r275685) @@ -886,7 +886,7 @@ sctp_recvv(int sd, struct sctp_rcvinfo *rcvinfo; struct sctp_nxtinfo *nxtinfo; - if (((info != NULL) && (infolen == NULL)) | + if (((info != NULL) && (infolen == NULL)) || ((info == NULL) && (infolen != NULL) && (*infolen != 0)) || ((info != NULL) && (infotype == NULL))) { errno = EINVAL; Modified: projects/clang350-import/lib/libc/stdio/fflush.c ============================================================================== --- projects/clang350-import/lib/libc/stdio/fflush.c Wed Dec 10 18:41:25 2014 (r275684) +++ projects/clang350-import/lib/libc/stdio/fflush.c Wed Dec 10 19:24:42 2014 (r275685) @@ -124,11 +124,13 @@ __sflush(FILE *fp) t = _swrite(fp, (char *)p, n); if (t <= 0) { /* Reset _p and _w. */ - if (p > fp->_p) /* Some was written. */ + if (p > fp->_p) { + /* Some was written. */ memmove(fp->_p, p, n); - fp->_p += n; - if ((fp->_flags & (__SLBF | __SNBF)) == 0) - fp->_w -= n; + fp->_p += n; + if ((fp->_flags & (__SLBF | __SNBF)) == 0) + fp->_w -= n; + } fp->_flags |= __SERR; return (EOF); } Modified: projects/clang350-import/sbin/mount/mount.8 ============================================================================== --- projects/clang350-import/sbin/mount/mount.8 Wed Dec 10 18:41:25 2014 (r275684) +++ projects/clang350-import/sbin/mount/mount.8 Wed Dec 10 19:24:42 2014 (r275685) @@ -28,7 +28,7 @@ .\" @(#)mount.8 8.8 (Berkeley) 6/16/94 .\" $FreeBSD$ .\" -.Dd November 22, 2014 +.Dd December 3, 2014 .Dt MOUNT 8 .Os .Sh NAME @@ -549,6 +549,7 @@ support for a particular file system mig .Xr fstab 5 , .Xr procfs 5 , .Xr automount 8 , +.Xr fstyp 8 , .Xr kldload 8 , .Xr mount_cd9660 8 , .Xr mount_msdosfs 8 , Modified: projects/clang350-import/sys/arm/altera/socfpga/files.socfpga ============================================================================== --- projects/clang350-import/sys/arm/altera/socfpga/files.socfpga Wed Dec 10 18:41:25 2014 (r275684) +++ projects/clang350-import/sys/arm/altera/socfpga/files.socfpga Wed Dec 10 19:24:42 2014 (r275685) @@ -26,5 +26,6 @@ dev/mmc/host/dwmmc.c optional dwmmc # BERI specific dev/beri/beri_ring.c optional beri_ring dev/beri/beri_mem.c optional beri_mem -dev/beri/virtio/virtio.c optional beri_vtblk +dev/beri/virtio/virtio.c optional beri_vtblk | vtbe dev/beri/virtio/virtio_block.c optional beri_vtblk +dev/beri/virtio/network/if_vtbe.c optional vtbe Modified: projects/clang350-import/sys/arm/arm/syscall.c ============================================================================== --- projects/clang350-import/sys/arm/arm/syscall.c Wed Dec 10 18:41:25 2014 (r275684) +++ projects/clang350-import/sys/arm/arm/syscall.c Wed Dec 10 19:24:42 2014 (r275685) @@ -84,6 +84,7 @@ __FBSDID("$FreeBSD$"); #include <sys/param.h> #include <sys/systm.h> +#include <sys/kernel.h> #include <sys/proc.h> #include <sys/lock.h> #include <sys/mutex.h> Modified: projects/clang350-import/sys/arm/broadcom/bcm2835/bcm2835_wdog.c ============================================================================== --- projects/clang350-import/sys/arm/broadcom/bcm2835/bcm2835_wdog.c Wed Dec 10 18:41:25 2014 (r275684) +++ projects/clang350-import/sys/arm/broadcom/bcm2835/bcm2835_wdog.c Wed Dec 10 19:24:42 2014 (r275685) @@ -142,14 +142,13 @@ bcmwd_watchdog_fn(void *private, u_int c if (cmd > 0) { sec = ((uint64_t)1 << (cmd & WD_INTERVAL)) / 1000000000; - ticks = (sec << 16) & BCM2835_WDOG_TIME_MASK; - if (ticks == 0) { + if (sec == 0 || sec > 15) { /* * Can't arm * disable watchdog as watchdog(9) requires */ device_printf(sc->dev, - "Can't arm, timeout is less than 1 second\n"); + "Can't arm, timeout must be between 1-15 seconds\n"); WRITE(sc, BCM2835_RSTC_REG, (BCM2835_PASWORD << BCM2835_PASSWORD_SHIFT) | BCM2835_RSTC_RESET); @@ -157,6 +156,7 @@ bcmwd_watchdog_fn(void *private, u_int c return; } + ticks = (sec << 16) & BCM2835_WDOG_TIME_MASK; reg = (BCM2835_PASWORD << BCM2835_PASSWORD_SHIFT) | ticks; WRITE(sc, BCM2835_WDOG_REG, reg); Modified: projects/clang350-import/sys/arm/conf/SOCKIT-BERI ============================================================================== --- projects/clang350-import/sys/arm/conf/SOCKIT-BERI Wed Dec 10 18:41:25 2014 (r275684) +++ projects/clang350-import/sys/arm/conf/SOCKIT-BERI Wed Dec 10 19:24:42 2014 (r275685) @@ -123,6 +123,7 @@ device spibus device beri_ring device beri_mem device beri_vtblk +device vtbe device altera_pio # Ethernet Modified: projects/clang350-import/sys/boot/fdt/dts/arm/socfpga-sockit-beri.dts ============================================================================== --- projects/clang350-import/sys/boot/fdt/dts/arm/socfpga-sockit-beri.dts Wed Dec 10 18:41:25 2014 (r275684) +++ projects/clang350-import/sys/boot/fdt/dts/arm/socfpga-sockit-beri.dts Wed Dec 10 19:24:42 2014 (r275685) @@ -39,7 +39,8 @@ compatible = "altr,socfpga-cyclone5", "altr,socfpga"; memreserve = < 0x00000000 0x1000 >, /* SMP trampoline */ - < 0x00001000 0x1000 >; /* virtio block */ + < 0x00001000 0x1000 >, /* virtio block */ + < 0x00002000 0x1000 >; /* virtio net */ memory { device_type = "memory"; @@ -111,6 +112,15 @@ pio-recv = <&pio0>; pio-send = <&pio1>; beri-mem = <&beri_mem0>; + status = "disabled"; + }; + + beri_vtnet: vtnet@00002000 { + compatible = "sri-cambridge,beri-vtnet"; + reg = <0x00002000 0x1000>; + pio-recv = <&pio0>; + pio-send = <&pio1>; + beri-mem = <&beri_mem0>; status = "okay"; }; Modified: projects/clang350-import/sys/conf/files ============================================================================== --- projects/clang350-import/sys/conf/files Wed Dec 10 18:41:25 2014 (r275684) +++ projects/clang350-import/sys/conf/files Wed Dec 10 19:24:42 2014 (r275685) @@ -2651,6 +2651,7 @@ dev/xen/blkback/blkback.c optional xen | dev/xen/console/console.c optional xen | xenhvm dev/xen/console/xencons_ring.c optional xen | xenhvm dev/xen/control/control.c optional xen | xenhvm +dev/xen/grant_table/grant_table.c optional xen | xenhvm dev/xen/netback/netback.c optional xen | xenhvm dev/xen/netfront/netfront.c optional xen | xenhvm dev/xen/xenpci/xenpci.c optional xenpci @@ -4000,7 +4001,6 @@ vm/vm_reserv.c standard vm/vm_unix.c standard vm/vm_zeroidle.c standard vm/vnode_pager.c standard -xen/gnttab.c optional xen | xenhvm xen/features.c optional xen | xenhvm xen/xenbus/xenbus_if.m optional xen | xenhvm xen/xenbus/xenbus.c optional xen | xenhvm Modified: projects/clang350-import/sys/conf/files.amd64 ============================================================================== --- projects/clang350-import/sys/conf/files.amd64 Wed Dec 10 18:41:25 2014 (r275684) +++ projects/clang350-import/sys/conf/files.amd64 Wed Dec 10 19:24:42 2014 (r275685) @@ -336,6 +336,8 @@ dev/viawd/viawd.c optional viawd dev/vmware/vmxnet3/if_vmx.c optional vmx dev/wbwd/wbwd.c optional wbwd dev/wpi/if_wpi.c optional wpi +dev/xen/pci/xen_acpi_pci.c optional xenhvm +dev/xen/pci/xen_pci.c optional xenhvm dev/isci/isci.c optional isci dev/isci/isci_controller.c optional isci dev/isci/isci_domain.c optional isci @@ -572,4 +574,4 @@ x86/xen/xen_apic.c optional xenhvm x86/xen/xenpv.c optional xenhvm x86/xen/xen_nexus.c optional xenhvm x86/xen/xen_msi.c optional xenhvm -x86/xen/xen_pci.c optional xenhvm +x86/xen/xen_pci_bus.c optional xenhvm Modified: projects/clang350-import/sys/dev/beri/virtio/virtio.c ============================================================================== --- projects/clang350-import/sys/dev/beri/virtio/virtio.c Wed Dec 10 18:41:25 2014 (r275684) +++ projects/clang350-import/sys/dev/beri/virtio/virtio.c Wed Dec 10 19:24:42 2014 (r275685) @@ -58,10 +58,18 @@ __FBSDID("$FreeBSD$"); #include <machine/cpu.h> #include <machine/intr.h> +#include <dev/fdt/fdt_common.h> +#include <dev/ofw/openfirm.h> +#include <dev/ofw/ofw_bus.h> +#include <dev/ofw/ofw_bus_subr.h> + #include <dev/beri/virtio/virtio.h> #include <dev/virtio/virtio.h> #include <dev/virtio/virtqueue.h> #include <dev/virtio/virtio_ring.h> +#include <dev/altera/pio/pio.h> + +#include "pio_if.h" int vq_ring_ready(struct vqueue_info *vq) @@ -167,12 +175,13 @@ vq_relchain(struct vqueue_info *vq, stru int i; mask = vq->vq_qsize - 1; + vu = vq->vq_used; head = be16toh(vq->vq_avail->ring[vq->vq_last_avail++ & mask]); - vu = vq->vq_used; uidx = be16toh(vu->idx); vue = &vu->ring[uidx++ & mask]; - vue->id = htobe16(head); + vue->id = htobe32(head); + vue->len = htobe32(iolen); vu->idx = htobe16(uidx); @@ -181,3 +190,59 @@ vq_relchain(struct vqueue_info *vq, stru paddr_unmap((void *)iov[i].iov_base, iov[i].iov_len); } } + +int +setup_pio(device_t dev, char *name, device_t *pio_dev) +{ + phandle_t pio_node; + struct fdt_ic *ic; + phandle_t xref; + phandle_t node; + + if ((node = ofw_bus_get_node(dev)) == -1) + return (ENXIO); + + if (OF_searchencprop(node, name, &xref, + sizeof(xref)) == -1) { + return (ENXIO); + } + + pio_node = OF_node_from_xref(xref); + SLIST_FOREACH(ic, &fdt_ic_list_head, fdt_ics) { + if (ic->iph == pio_node) { + *pio_dev = ic->dev; + PIO_CONFIGURE(*pio_dev, PIO_OUT_ALL, + PIO_UNMASK_ALL); + return (0); + } + } + + return (ENXIO); +} + +int +setup_offset(device_t dev, uint32_t *offset) +{ + pcell_t dts_value[2]; + phandle_t mem_node; + phandle_t xref; + phandle_t node; + int len; + + if ((node = ofw_bus_get_node(dev)) == -1) + return (ENXIO); + + if (OF_searchencprop(node, "beri-mem", &xref, + sizeof(xref)) == -1) { + return (ENXIO); + } + + mem_node = OF_node_from_xref(xref); + if ((len = OF_getproplen(mem_node, "reg")) <= 0) + return (ENXIO); + OF_getencprop(mem_node, "reg", dts_value, len); + *offset = dts_value[0]; + + return (0); +} + Modified: projects/clang350-import/sys/dev/beri/virtio/virtio.h ============================================================================== --- projects/clang350-import/sys/dev/beri/virtio/virtio.h Wed Dec 10 18:41:25 2014 (r275684) +++ projects/clang350-import/sys/dev/beri/virtio/virtio.h Wed Dec 10 19:24:42 2014 (r275685) @@ -41,14 +41,10 @@ #define PAGE_SHIFT 12 #define VRING_ALIGN 4096 -#define NUM_QUEUES 1 #define VQ_ALLOC 0x01 /* set once we have a pfn */ #define VQ_MAX_DESCRIPTORS 512 -#define VTBLK_BLK_ID_BYTES 20 -#define VTBLK_MAXSEGS 256 - struct vqueue_info { uint16_t vq_qsize; /* size of this queue (a power of 2) */ uint16_t vq_num; @@ -70,3 +66,5 @@ int vq_getchain(uint32_t beri_mem_offset struct iovec *iov, int n_iov, uint16_t *flags); void vq_relchain(struct vqueue_info *vq, struct iovec *iov, int n, uint32_t iolen); +int setup_pio(device_t dev, char *name, device_t *pio_dev); +int setup_offset(device_t dev, uint32_t *offset); Modified: projects/clang350-import/sys/dev/beri/virtio/virtio_block.c ============================================================================== --- projects/clang350-import/sys/dev/beri/virtio/virtio_block.c Wed Dec 10 18:41:25 2014 (r275684) +++ projects/clang350-import/sys/dev/beri/virtio/virtio_block.c Wed Dec 10 19:24:42 2014 (r275685) @@ -74,6 +74,13 @@ __FBSDID("$FreeBSD$"); #define DPRINTF(fmt, ...) +/* We use indirect descriptors */ +#define NUM_DESCS 1 +#define NUM_QUEUES 1 + +#define VTBLK_BLK_ID_BYTES 20 +#define VTBLK_MAXSEGS 256 + struct beri_vtblk_softc { struct resource *res[1]; bus_space_tag_t bst; @@ -286,8 +293,12 @@ vtblk_notify(struct beri_vtblk_softc *sc while (vq_has_descs(vq)) vtblk_proc(sc, vq); - /* Interrupt other side */ - PIO_SET(sc->pio_send, Q_INTR, 1); + /* Interrupt the other side */ + if ((be16toh(vq->vq_avail->flags) & VRING_AVAIL_F_NO_INTERRUPT) == 0) { + reg = htobe32(VIRTIO_MMIO_INT_VRING); + WRITE4(sc, VIRTIO_MMIO_INTERRUPT_STATUS, reg); + PIO_SET(sc->pio_send, Q_INTR, 1); + } return (0); } @@ -302,7 +313,7 @@ vq_init(struct beri_vtblk_softc *sc) int pfn; vq = &sc->vs_queues[0]; - vq->vq_qsize = NUM_QUEUES; + vq->vq_qsize = NUM_DESCS; reg = READ4(sc, VIRTIO_MMIO_QUEUE_PFN); pfn = be32toh(reg); @@ -353,61 +364,6 @@ vtblk_thread(void *arg) } static int -setup_pio(struct beri_vtblk_softc *sc, char *name, device_t *dev) -{ - phandle_t pio_node; - struct fdt_ic *ic; - phandle_t xref; - phandle_t node; - - if ((node = ofw_bus_get_node(sc->dev)) == -1) - return (ENXIO); - - if (OF_searchencprop(node, name, &xref, - sizeof(xref)) == -1) { - return (ENXIO); - } - - pio_node = OF_node_from_xref(xref); - SLIST_FOREACH(ic, &fdt_ic_list_head, fdt_ics) { - if (ic->iph == pio_node) { - *dev = ic->dev; - PIO_CONFIGURE(*dev, PIO_OUT_ALL, - PIO_UNMASK_ALL); - return (0); - } - } - - return (ENXIO); -} - -static int -setup_offset(struct beri_vtblk_softc *sc) -{ - pcell_t dts_value[2]; - phandle_t mem_node; - phandle_t xref; - phandle_t node; - int len; - - if ((node = ofw_bus_get_node(sc->dev)) == -1) - return (ENXIO); - - if (OF_searchencprop(node, "beri-mem", &xref, - sizeof(xref)) == -1) { - return (ENXIO); - } - - mem_node = OF_node_from_xref(xref); - if ((len = OF_getproplen(mem_node, "reg")) <= 0) - return (ENXIO); - OF_getencprop(mem_node, "reg", dts_value, len); - sc->beri_mem_offset = dts_value[0]; - - return (0); -} - -static int backend_info(struct beri_vtblk_softc *sc) { struct virtio_blk_config *cfg; @@ -419,9 +375,9 @@ backend_info(struct beri_vtblk_softc *sc reg = htobe32(VIRTIO_ID_BLOCK); WRITE4(sc, VIRTIO_MMIO_DEVICE_ID, reg); - /* The number of queues we support */ - reg = htobe16(NUM_QUEUES); - WRITE2(sc, VIRTIO_MMIO_QUEUE_NUM, reg); + /* Queue size */ + reg = htobe32(NUM_DESCS); + WRITE4(sc, VIRTIO_MMIO_QUEUE_NUM_MAX, reg); /* Our features */ reg = htobe32(VIRTIO_RING_F_INDIRECT_DESC @@ -566,11 +522,11 @@ beri_vtblk_attach(device_t dev) return (ENXIO); } - if (setup_offset(sc) != 0) + if (setup_offset(dev, &sc->beri_mem_offset) != 0) return (ENXIO); - if (setup_pio(sc, "pio-send", &sc->pio_send) != 0) + if (setup_pio(dev, "pio-send", &sc->pio_send) != 0) return (ENXIO); - if (setup_pio(sc, "pio-recv", &sc->pio_recv) != 0) + if (setup_pio(dev, "pio-recv", &sc->pio_recv) != 0) return (ENXIO); sc->cdev = make_dev(&beri_cdevsw, 0, UID_ROOT, GID_WHEEL, Modified: projects/clang350-import/sys/dev/beri/virtio/virtio_mmio_platform.c ============================================================================== --- projects/clang350-import/sys/dev/beri/virtio/virtio_mmio_platform.c Wed Dec 10 18:41:25 2014 (r275684) +++ projects/clang350-import/sys/dev/beri/virtio/virtio_mmio_platform.c Wed Dec 10 19:24:42 2014 (r275685) @@ -149,20 +149,49 @@ virtio_mmio_platform_attach(device_t dev } static int -platform_note(device_t dev, size_t offset) +platform_note(device_t dev, size_t offset, int val) { struct virtio_mmio_platform_softc *sc; + int note; + int i; sc = device_get_softc(dev); - if (offset == VIRTIO_MMIO_QUEUE_NOTIFY) { - mips_dcache_wbinv_all(); - PIO_SET(sc->pio_send, Q_NOTIFY, 1); + switch (offset) { + case (VIRTIO_MMIO_QUEUE_NOTIFY): + if (val == 0) + note = Q_NOTIFY; + else if (val == 1) + note = Q_NOTIFY1; + break; + case (VIRTIO_MMIO_QUEUE_PFN): + note = Q_PFN; + break; + case (VIRTIO_MMIO_QUEUE_SEL): + note = Q_SEL; + break; + default: + note = 0; } - if (offset == VIRTIO_MMIO_QUEUE_PFN) { + if (note) { mips_dcache_wbinv_all(); - PIO_SET(sc->pio_send, Q_PFN, 1); + + PIO_SET(sc->pio_send, note, 1); + + /* + * Wait until host ack the request. + * Usually done within few cycles. + * TODO: bad + */ + + for (i = 100; i > 0; i--) { + if (PIO_READ(sc->pio_send) == 0) + break; + } + + if (i == 0) + device_printf(sc->dev, "Warning: host busy\n"); } return (0); Modified: projects/clang350-import/sys/dev/beri/virtio/virtio_mmio_platform.h ============================================================================== --- projects/clang350-import/sys/dev/beri/virtio/virtio_mmio_platform.h Wed Dec 10 18:41:25 2014 (r275684) +++ projects/clang350-import/sys/dev/beri/virtio/virtio_mmio_platform.h Wed Dec 10 19:24:42 2014 (r275685) @@ -30,6 +30,8 @@ * $FreeBSD$ */ -#define Q_NOTIFY 0x1 -#define Q_PFN 0x2 -#define Q_INTR 0x4 +#define Q_NOTIFY 0x01 +#define Q_PFN 0x02 +#define Q_INTR 0x04 +#define Q_SEL 0x08 +#define Q_NOTIFY1 0x10 Modified: projects/clang350-import/sys/dev/mii/micphy.c ============================================================================== --- projects/clang350-import/sys/dev/mii/micphy.c Wed Dec 10 18:41:25 2014 (r275684) +++ projects/clang350-import/sys/dev/mii/micphy.c Wed Dec 10 19:24:42 2014 (r275685) @@ -68,7 +68,7 @@ __FBSDID("$FreeBSD$"); #define MII_KSZPHY_RX_DATA_PAD_SKEW 0x105 #define MII_KSZPHY_TX_DATA_PAD_SKEW 0x106 -#define PS_TO_REG(p) (p / 200) +#define PS_TO_REG(p) ((p) / 200) static int micphy_probe(device_t); static int micphy_attach(device_t); @@ -104,7 +104,8 @@ static const struct mii_phy_funcs micphy mii_phy_reset }; -static void micphy_write(struct mii_softc *sc, uint32_t reg, uint32_t val) +static void +micphy_write(struct mii_softc *sc, uint32_t reg, uint32_t val) { PHY_WRITE(sc, MII_KSZPHY_EXTREG, KSZPHY_EXTREG_WRITE | reg); Modified: projects/clang350-import/sys/dev/usb/usbdevs ============================================================================== --- projects/clang350-import/sys/dev/usb/usbdevs Wed Dec 10 18:41:25 2014 (r275684) +++ projects/clang350-import/sys/dev/usb/usbdevs Wed Dec 10 19:24:42 2014 (r275685) @@ -3195,7 +3195,7 @@ product NETGEAR EA101X 0x1002 Ethernet product NETGEAR FA101 0x1020 Ethernet 10/100, USB1.1 product NETGEAR FA120 0x1040 USB 2.0 Ethernet product NETGEAR M4100 0x1100 M4100/M5300/M7100 series switch -product NETGEAR WG111V2_2 0x4240 PrismGT USB 2.0 WLAN +product NETGEAR WG111V1_2 0x4240 PrismGT USB 2.0 WLAN product NETGEAR WG111V3 0x4260 WG111v3 product NETGEAR WG111U 0x4300 WG111U product NETGEAR WG111U_NF 0x4301 WG111U (no firmware) Modified: projects/clang350-import/sys/dev/usb/wlan/if_upgt.c ============================================================================== --- projects/clang350-import/sys/dev/usb/wlan/if_upgt.c Wed Dec 10 18:41:25 2014 (r275684) +++ projects/clang350-import/sys/dev/usb/wlan/if_upgt.c Wed Dec 10 19:24:42 2014 (r275685) @@ -182,7 +182,7 @@ static const STRUCT_USB_HOST_ID upgt_dev UPGT_DEV(FSC, E5400), UPGT_DEV(GLOBESPAN, PRISM_GT_1), UPGT_DEV(GLOBESPAN, PRISM_GT_2), - UPGT_DEV(NETGEAR, WG111V2_2), + UPGT_DEV(NETGEAR, WG111V1_2), UPGT_DEV(INTERSIL, PRISM_GT), UPGT_DEV(SMC, 2862WG), UPGT_DEV(USR, USR5422), Modified: projects/clang350-import/sys/dev/virtio/mmio/virtio_mmio.c ============================================================================== --- projects/clang350-import/sys/dev/virtio/mmio/virtio_mmio.c Wed Dec 10 18:41:25 2014 (r275684) +++ projects/clang350-import/sys/dev/virtio/mmio/virtio_mmio.c Wed Dec 10 19:24:42 2014 (r275685) @@ -1,11 +1,15 @@ /*- * Copyright (c) 2014 Ruslan Bukin <br@bsdpad.com> + * Copyright (c) 2014 The FreeBSD Foundation * All rights reserved. * * This software was 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 Andrew Turner *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201412101924.sBAJOgX3063977>