Date: Sun, 6 Dec 2015 21:31:09 +0000 (UTC) From: Garrett Cooper <ngie@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r291910 - in user/ngie/make_check: bin/sh/tests/parameters sbin/newfs_msdos sys/amd64/amd64 sys/dev/usb/wlan sys/i386/i386 sys/netinet sys/netinet6 sys/sys sys/vm Message-ID: <201512062131.tB6LV9qa062716@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: ngie Date: Sun Dec 6 21:31:09 2015 New Revision: 291910 URL: https://svnweb.freebsd.org/changeset/base/291910 Log: MFhead @ r291909 Added: user/ngie/make_check/bin/sh/tests/parameters/positional9.0 - copied unchanged from r291909, head/bin/sh/tests/parameters/positional9.0 Modified: user/ngie/make_check/bin/sh/tests/parameters/Makefile user/ngie/make_check/sbin/newfs_msdos/mkfs_msdos.c user/ngie/make_check/sys/amd64/amd64/pmap.c user/ngie/make_check/sys/dev/usb/wlan/if_urtwn.c user/ngie/make_check/sys/dev/usb/wlan/if_urtwnvar.h user/ngie/make_check/sys/i386/i386/pmap.c user/ngie/make_check/sys/netinet/sctp_input.c user/ngie/make_check/sys/netinet/sctp_output.c user/ngie/make_check/sys/netinet/sctp_pcb.c user/ngie/make_check/sys/netinet/sctp_pcb.h user/ngie/make_check/sys/netinet/sctp_usrreq.c user/ngie/make_check/sys/netinet/sctputil.c user/ngie/make_check/sys/netinet/sctputil.h user/ngie/make_check/sys/netinet6/sctp6_usrreq.c user/ngie/make_check/sys/sys/elf_common.h user/ngie/make_check/sys/vm/vm_fault.c Directory Properties: user/ngie/make_check/ (props changed) user/ngie/make_check/sbin/ (props changed) user/ngie/make_check/sys/ (props changed) Modified: user/ngie/make_check/bin/sh/tests/parameters/Makefile ============================================================================== --- user/ngie/make_check/bin/sh/tests/parameters/Makefile Sun Dec 6 21:16:01 2015 (r291909) +++ user/ngie/make_check/bin/sh/tests/parameters/Makefile Sun Dec 6 21:31:09 2015 (r291910) @@ -21,6 +21,7 @@ FILES+= positional5.0 FILES+= positional6.0 FILES+= positional7.0 FILES+= positional8.0 +FILES+= positional9.0 FILES+= pwd1.0 FILES+= pwd2.0 Copied: user/ngie/make_check/bin/sh/tests/parameters/positional9.0 (from r291909, head/bin/sh/tests/parameters/positional9.0) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/ngie/make_check/bin/sh/tests/parameters/positional9.0 Sun Dec 6 21:31:09 2015 (r291910, copy of r291909, head/bin/sh/tests/parameters/positional9.0) @@ -0,0 +1,18 @@ +# $FreeBSD$ +# Although POSIX leaves the result of expanding ${#@} and ${#*} unspecified, +# make sure it is at least numeric. + +set -- bb cc ddd +set -f +lengths=${#*}${#@}"${#*}${#@}"$(echo ${#*}${#@}"${#*}${#@}") +IFS= +lengths=$lengths${#*}${#@}"${#*}${#@}"$(echo ${#*}${#@}"${#*}${#@}") +case $lengths in +*[!0-9]*) + printf 'bad: %s\n' "$lengths" + exit 3 ;; +????????????????*) ;; +*) + printf 'too short: %s\n' "$lengths" + exit 3 ;; +esac Modified: user/ngie/make_check/sbin/newfs_msdos/mkfs_msdos.c ============================================================================== --- user/ngie/make_check/sbin/newfs_msdos/mkfs_msdos.c Sun Dec 6 21:16:01 2015 (r291909) +++ user/ngie/make_check/sbin/newfs_msdos/mkfs_msdos.c Sun Dec 6 21:31:09 2015 (r291910) @@ -242,38 +242,41 @@ mkfs_msdos(const char *fname, const char ssize_t n; time_t now; u_int fat, bss, rds, cls, dir, lsn, x, x1, x2; - int fd, fd1; + int fd, fd1, rv; struct msdos_options o = *op; + img = NULL; + rv = -1; + if (o.block_size && o.sectors_per_cluster) { warnx("Cannot specify both block size and sectors per cluster"); - return -1; + goto done; } if (o.OEM_string && strlen(o.OEM_string) > 8) { warnx("%s: bad OEM string", o.OEM_string); - return -1; + goto done; } if (o.create_size) { if (o.no_create) { warnx("create (-C) is incompatible with -N"); - return -1; + goto done; } fd = open(fname, O_RDWR | O_CREAT | O_TRUNC, 0644); if (fd == -1) { warnx("failed to create %s", fname); - return -1; + goto done; } if (ftruncate(fd, o.create_size)) { warnx("failed to initialize %jd bytes", (intmax_t)o.create_size); - return -1; + goto done; } } else if ((fd = open(fname, o.no_create ? O_RDONLY : O_RDWR)) == -1) { warn("%s", fname); - return -1; + goto done; } if (fstat(fd, &sb)) { warn("%s", fname); - return -1; + goto done; } if (o.create_size) { if (!S_ISREG(sb.st_mode)) @@ -284,15 +287,15 @@ mkfs_msdos(const char *fname, const char } if (!o.no_create) if (check_mounted(fname, sb.st_mode) == -1) - return -1; + goto done; if (o.offset && o.offset != lseek(fd, o.offset, SEEK_SET)) { warnx("cannot seek to %jd", (intmax_t)o.offset); - return -1; + goto done; } memset(&bpb, 0, sizeof(bpb)); if (o.floppy) { if (getstdfmt(o.floppy, &bpb) == -1) - return -1; + goto done; bpb.bpbHugeSectors = bpb.bpbSectors; bpb.bpbSectors = 0; bpb.bpbBigFATsecs = bpb.bpbFATsecs; @@ -334,17 +337,17 @@ mkfs_msdos(const char *fname, const char } if (!powerof2(bpb.bpbBytesPerSec)) { warnx("bytes/sector (%u) is not a power of 2", bpb.bpbBytesPerSec); - return -1; + goto done; } if (bpb.bpbBytesPerSec < MINBPS) { warnx("bytes/sector (%u) is too small; minimum is %u", bpb.bpbBytesPerSec, MINBPS); - return -1; + goto done; } if (o.volume_label && !oklabel(o.volume_label)) { warnx("%s: bad volume label", o.volume_label); - return -1; + goto done; } if (!(fat = o.fat_type)) { if (o.floppy) @@ -356,29 +359,29 @@ mkfs_msdos(const char *fname, const char warnx("-%c is not a legal FAT%s option", fat == 32 ? 'e' : o.info_sector ? 'i' : 'k', fat == 32 ? "32" : "12/16"); - return -1; + goto done; } if (o.floppy && fat == 32) bpb.bpbRootDirEnts = 0; if (fat != 0 && fat != 12 && fat != 16 && fat != 32) { warnx("%d: bad FAT type", fat); - return -1; + goto done; } if (o.block_size) { if (!powerof2(o.block_size)) { warnx("block size (%u) is not a power of 2", o.block_size); - return -1; + goto done; } if (o.block_size < bpb.bpbBytesPerSec) { warnx("block size (%u) is too small; minimum is %u", o.block_size, bpb.bpbBytesPerSec); - return -1; + goto done; } if (o.block_size > bpb.bpbBytesPerSec * MAXSPC) { warnx("block size (%u) is too large; maximum is %u", o.block_size, bpb.bpbBytesPerSec * MAXSPC); - return -1; + goto done; } bpb.bpbSecPerClust = o.block_size / bpb.bpbBytesPerSec; } @@ -386,7 +389,7 @@ mkfs_msdos(const char *fname, const char if (!powerof2(o.sectors_per_cluster)) { warnx("sectors/cluster (%u) is not a power of 2", o.sectors_per_cluster); - return -1; + goto done; } bpb.bpbSecPerClust = o.sectors_per_cluster; } @@ -396,7 +399,7 @@ mkfs_msdos(const char *fname, const char if (o.num_FAT > MAXNFT) { warnx("number of FATs (%u) is too large; maximum is %u", o.num_FAT, MAXNFT); - return -1; + goto done; } bpb.bpbFATs = o.num_FAT; } @@ -405,7 +408,7 @@ mkfs_msdos(const char *fname, const char if (o.media_descriptor_set) { if (o.media_descriptor < 0xf0) { warnx("illegal media descriptor (%#x)", o.media_descriptor); - return -1; + goto done; } bpb.bpbMedia = o.media_descriptor; } @@ -424,18 +427,18 @@ mkfs_msdos(const char *fname, const char snprintf(buf, sizeof(buf), "/boot/%s", bname); if (!(bname = strdup(buf))) { warn(NULL); - return -1; + goto done; } } if ((fd1 = open(bname, O_RDONLY)) == -1 || fstat(fd1, &sb)) { warn("%s", bname); - return -1; + goto done; } if (!S_ISREG(sb.st_mode) || sb.st_size % bpb.bpbBytesPerSec || sb.st_size < bpb.bpbBytesPerSec || sb.st_size > bpb.bpbBytesPerSec * MAXU16) { warnx("%s: inappropriate file type or format", bname); - return -1; + goto done; } bss = sb.st_size / bpb.bpbBytesPerSec; } @@ -470,7 +473,7 @@ mkfs_msdos(const char *fname, const char if (!bpb.bpbFSInfo) { if (x == MAXU16 || x == bpb.bpbBackup) { warnx("no room for info sector"); - return -1; + goto done; } bpb.bpbFSInfo = x; } @@ -479,12 +482,12 @@ mkfs_msdos(const char *fname, const char if (!bpb.bpbBackup) { if (x == MAXU16) { warnx("no room for backup sector"); - return -1; + goto done; } bpb.bpbBackup = x; } else if (bpb.bpbBackup != MAXU16 && bpb.bpbBackup == bpb.bpbFSInfo) { warnx("backup sector would overwrite info sector"); - return -1; + goto done; } if (bpb.bpbBackup != MAXU16 && x <= bpb.bpbBackup) x = bpb.bpbBackup + 1; @@ -495,7 +498,7 @@ mkfs_msdos(const char *fname, const char else if (bpb.bpbResSectors < x) { warnx("too few reserved sectors (need %d have %d)", x, bpb.bpbResSectors); - return -1; + goto done; } if (fat != 32 && !bpb.bpbRootDirEnts) bpb.bpbRootDirEnts = DEFRDE; @@ -515,13 +518,13 @@ mkfs_msdos(const char *fname, const char continue; if (fat != 32 && bpb.bpbBigFATsecs > MAXU16) { warnx("too many sectors/FAT for FAT12/16"); - return -1; + goto done; } x1 = bpb.bpbResSectors + rds; x = bpb.bpbBigFATsecs ? bpb.bpbBigFATsecs : 1; if (x1 + (u_int64_t)x * bpb.bpbFATs > bpb.bpbHugeSectors) { warnx("meta data exceeds file system size"); - return -1; + goto done; } x1 += x * bpb.bpbFATs; x = (u_int64_t)(bpb.bpbHugeSectors - x1) * bpb.bpbBytesPerSec * NPB / @@ -544,7 +547,7 @@ mkfs_msdos(const char *fname, const char if (cls < mincls(fat)) { warnx("%u clusters too few clusters for FAT%u, need %u", cls, fat, mincls(fat)); - return -1; + goto done; } if (cls > maxcls(fat)) { cls = maxcls(fat); @@ -575,7 +578,7 @@ mkfs_msdos(const char *fname, const char tm = localtime(&now); if (!(img = malloc(bpb.bpbBytesPerSec))) { warn(NULL); - return -1; + goto done; } dir = bpb.bpbResSectors + (bpb.bpbFATsecs ? bpb.bpbFATsecs : bpb.bpbBigFATsecs) * bpb.bpbFATs; @@ -583,7 +586,7 @@ mkfs_msdos(const char *fname, const char si_sa.sa_handler = infohandler; if (sigaction(SIGINFO, &si_sa, NULL) == -1) { warn("sigaction SIGINFO"); - return -1; + goto done; } for (lsn = 0; lsn < dir + (fat == 32 ? bpb.bpbSecPerClust : rds); lsn++) { if (got_siginfo) { @@ -601,17 +604,17 @@ mkfs_msdos(const char *fname, const char x -= bpb.bpbBackup; if (!x && lseek(fd1, o.offset, SEEK_SET)) { warn("%s", bname); - return -1; + goto done; } } if (o.bootstrap && x < bss) { if ((n = read(fd1, img, bpb.bpbBytesPerSec)) == -1) { warn("%s", bname); - return -1; + goto done; } if ((unsigned)n != bpb.bpbBytesPerSec) { warnx("%s: can't read sector %u", bname, x); - return -1; + goto done; } } else memset(img, 0, bpb.bpbBytesPerSec); @@ -701,15 +704,19 @@ mkfs_msdos(const char *fname, const char } if ((n = write(fd, img, bpb.bpbBytesPerSec)) == -1) { warn("%s", fname); - return -1; + goto done; } if ((unsigned)n != bpb.bpbBytesPerSec) { warnx("%s: can't write sector %u", fname, lsn); - return -1; + goto done; } } } - return 0; + rv = 0; +done: + free(img); + + return rv; } /* Modified: user/ngie/make_check/sys/amd64/amd64/pmap.c ============================================================================== --- user/ngie/make_check/sys/amd64/amd64/pmap.c Sun Dec 6 21:16:01 2015 (r291909) +++ user/ngie/make_check/sys/amd64/amd64/pmap.c Sun Dec 6 21:31:09 2015 (r291910) @@ -1421,6 +1421,9 @@ pmap_invalidate_page(pmap_t pmap, vm_off sched_unpin(); } +/* 4k PTEs -- Chosen to exceed the total size of Broadwell L2 TLB */ +#define PMAP_INVLPG_THRESHOLD (4 * 1024 * PAGE_SIZE) + void pmap_invalidate_range(pmap_t pmap, vm_offset_t sva, vm_offset_t eva) { @@ -1428,6 +1431,11 @@ pmap_invalidate_range(pmap_t pmap, vm_of vm_offset_t addr; u_int cpuid, i; + if (eva - sva >= PMAP_INVLPG_THRESHOLD) { + pmap_invalidate_all(pmap); + return; + } + if (pmap_type_guest(pmap)) { pmap_invalidate_ept(pmap); return; Modified: user/ngie/make_check/sys/dev/usb/wlan/if_urtwn.c ============================================================================== --- user/ngie/make_check/sys/dev/usb/wlan/if_urtwn.c Sun Dec 6 21:16:01 2015 (r291909) +++ user/ngie/make_check/sys/dev/usb/wlan/if_urtwn.c Sun Dec 6 21:31:09 2015 (r291910) @@ -31,6 +31,7 @@ __FBSDID("$FreeBSD$"); #include <sys/sysctl.h> #include <sys/lock.h> #include <sys/mutex.h> +#include <sys/condvar.h> #include <sys/mbuf.h> #include <sys/kernel.h> #include <sys/socket.h> @@ -70,6 +71,7 @@ __FBSDID("$FreeBSD$"); #include <dev/usb/usb.h> #include <dev/usb/usbdi.h> +#include <dev/usb/usb_device.h> #include "usbdevs.h" #define USB_DEBUG_VAR urtwn_debug @@ -265,8 +267,7 @@ static void urtwn_r88e_fw_reset(struct static int urtwn_fw_loadpage(struct urtwn_softc *, int, const uint8_t *, int); static int urtwn_load_firmware(struct urtwn_softc *); -static int urtwn_r92c_dma_init(struct urtwn_softc *); -static int urtwn_r88e_dma_init(struct urtwn_softc *); +static int urtwn_dma_init(struct urtwn_softc *); static int urtwn_mac_init(struct urtwn_softc *); static void urtwn_bb_init(struct urtwn_softc *); static void urtwn_rf_init(struct urtwn_softc *); @@ -396,7 +397,7 @@ urtwn_attach(device_t self) struct usb_attach_arg *uaa = device_get_ivars(self); struct urtwn_softc *sc = device_get_softc(self); struct ieee80211com *ic = &sc->sc_ic; - uint8_t iface_index, bands; + uint8_t bands; int error; device_set_usb_desc(self); @@ -410,9 +411,9 @@ urtwn_attach(device_t self) callout_init(&sc->sc_watchdog_ch, 0); mbufq_init(&sc->sc_snd, ifqmaxlen); - iface_index = URTWN_IFACE_INDEX; - error = usbd_transfer_setup(uaa->device, &iface_index, sc->sc_xfer, - urtwn_config, URTWN_N_TRANSFER, sc, &sc->sc_mtx); + sc->sc_iface_index = URTWN_IFACE_INDEX; + error = usbd_transfer_setup(uaa->device, &sc->sc_iface_index, + sc->sc_xfer, urtwn_config, URTWN_N_TRANSFER, sc, &sc->sc_mtx); if (error) { device_printf(self, "could not allocate USB transfers, " "err=%s\n", usbd_errstr(error)); @@ -1471,7 +1472,6 @@ urtwn_read_rom(struct urtwn_softc *sc) sc->sc_rf_write = urtwn_r92c_rf_write; sc->sc_power_on = urtwn_r92c_power_on; - sc->sc_dma_init = urtwn_r92c_dma_init; return (0); } @@ -1503,7 +1503,6 @@ urtwn_r88e_read_rom(struct urtwn_softc * sc->sc_rf_write = urtwn_r88e_rf_write; sc->sc_power_on = urtwn_r88e_power_on; - sc->sc_dma_init = urtwn_r88e_dma_init; return (0); } @@ -2811,86 +2810,103 @@ fail: return (error); } -static __inline int +static int urtwn_dma_init(struct urtwn_softc *sc) { + struct usb_endpoint *ep, *ep_end; usb_error_t usb_err; - int error; + uint32_t reg; + int hashq, hasnq, haslq, nqueues, ntx; + int error, pagecount, npubqpages, nqpages, nrempages, tx_boundary; /* Initialize LLT table. */ error = urtwn_llt_init(sc); if (error != 0) return (error); - error = sc->sc_dma_init(sc); - if (error != 0) - return (error); - - /* Set Tx/Rx transfer page size. */ - usb_err = urtwn_write_1(sc, R92C_PBP, - SM(R92C_PBP_PSRX, R92C_PBP_128) | - SM(R92C_PBP_PSTX, R92C_PBP_128)); - if (usb_err != USB_ERR_NORMAL_COMPLETION) + /* Determine the number of bulk-out pipes. */ + ntx = 0; + ep = sc->sc_udev->endpoints; + ep_end = sc->sc_udev->endpoints + sc->sc_udev->endpoints_max; + for (; ep != ep_end; ep++) { + if ((ep->edesc == NULL) || + (ep->iface_index != sc->sc_iface_index)) + continue; + if (UE_GET_DIR(ep->edesc->bEndpointAddress) == UE_DIR_OUT) + ntx++; + } + if (ntx == 0) { + device_printf(sc->sc_dev, + "%d: invalid number of Tx bulk pipes\n", ntx); return (EIO); - - return (0); -} - -static int -urtwn_r92c_dma_init(struct urtwn_softc *sc) -{ - int hashq, hasnq, haslq, nqueues, nqpages, nrempages; - usb_error_t error; - uint32_t reg; + } /* Get Tx queues to USB endpoints mapping. */ - hashq = hasnq = haslq = 0; - reg = urtwn_read_2(sc, R92C_USB_EP + 1); - DPRINTFN(2, "USB endpoints mapping 0x%x\n", reg); - if (MS(reg, R92C_USB_EP_HQ) != 0) - hashq = 1; - if (MS(reg, R92C_USB_EP_NQ) != 0) - hasnq = 1; - if (MS(reg, R92C_USB_EP_LQ) != 0) - haslq = 1; + hashq = hasnq = haslq = nqueues = 0; + switch (ntx) { + case 1: hashq = 1; break; + case 2: hashq = hasnq = 1; break; + case 3: case 4: hashq = hasnq = haslq = 1; break; + } nqueues = hashq + hasnq + haslq; if (nqueues == 0) return (EIO); - /* Get the number of pages for each queue. */ - nqpages = (R92C_TX_PAGE_COUNT - R92C_PUBQ_NPAGES) / nqueues; - /* The remaining pages are assigned to the high priority queue. */ - nrempages = (R92C_TX_PAGE_COUNT - R92C_PUBQ_NPAGES) % nqueues; + + npubqpages = nqpages = nrempages = pagecount = 0; + if (sc->chip & URTWN_CHIP_88E) + tx_boundary = R88E_TX_PAGE_BOUNDARY; + else { + pagecount = R92C_TX_PAGE_COUNT; + npubqpages = R92C_PUBQ_NPAGES; + tx_boundary = R92C_TX_PAGE_BOUNDARY; + } /* Set number of pages for normal priority queue. */ - error = urtwn_write_1(sc, R92C_RQPN_NPQ, hasnq ? nqpages : 0); - if (error != USB_ERR_NORMAL_COMPLETION) - return (EIO); - error = urtwn_write_4(sc, R92C_RQPN, - /* Set number of pages for public queue. */ - SM(R92C_RQPN_PUBQ, R92C_PUBQ_NPAGES) | - /* Set number of pages for high priority queue. */ - SM(R92C_RQPN_HPQ, hashq ? nqpages + nrempages : 0) | - /* Set number of pages for low priority queue. */ - SM(R92C_RQPN_LPQ, haslq ? nqpages : 0) | - /* Load values. */ - R92C_RQPN_LD); - if (error != USB_ERR_NORMAL_COMPLETION) - return (EIO); + if (sc->chip & URTWN_CHIP_88E) { + usb_err = urtwn_write_2(sc, R92C_RQPN_NPQ, 0xd); + if (usb_err != USB_ERR_NORMAL_COMPLETION) + return (EIO); + usb_err = urtwn_write_4(sc, R92C_RQPN, 0x808e000d); + if (usb_err != USB_ERR_NORMAL_COMPLETION) + return (EIO); + } else { + /* Get the number of pages for each queue. */ + nqpages = (pagecount - npubqpages) / nqueues; + /* + * The remaining pages are assigned to the high priority + * queue. + */ + nrempages = (pagecount - npubqpages) % nqueues; + usb_err = urtwn_write_1(sc, R92C_RQPN_NPQ, hasnq ? nqpages : 0); + if (usb_err != USB_ERR_NORMAL_COMPLETION) + return (EIO); + usb_err = urtwn_write_4(sc, R92C_RQPN, + /* Set number of pages for public queue. */ + SM(R92C_RQPN_PUBQ, npubqpages) | + /* Set number of pages for high priority queue. */ + SM(R92C_RQPN_HPQ, hashq ? nqpages + nrempages : 0) | + /* Set number of pages for low priority queue. */ + SM(R92C_RQPN_LPQ, haslq ? nqpages : 0) | + /* Load values. */ + R92C_RQPN_LD); + if (usb_err != USB_ERR_NORMAL_COMPLETION) + return (EIO); + } - error = urtwn_write_1(sc, R92C_TXPKTBUF_BCNQ_BDNY, R92C_TX_PAGE_BOUNDARY); - if (error != USB_ERR_NORMAL_COMPLETION) + usb_err = urtwn_write_1(sc, R92C_TXPKTBUF_BCNQ_BDNY, tx_boundary); + if (usb_err != USB_ERR_NORMAL_COMPLETION) return (EIO); - error = urtwn_write_1(sc, R92C_TXPKTBUF_MGQ_BDNY, R92C_TX_PAGE_BOUNDARY); - if (error != USB_ERR_NORMAL_COMPLETION) + usb_err = urtwn_write_1(sc, R92C_TXPKTBUF_MGQ_BDNY, tx_boundary); + if (usb_err != USB_ERR_NORMAL_COMPLETION) return (EIO); - error = urtwn_write_1(sc, R92C_TXPKTBUF_WMAC_LBK_BF_HD, R92C_TX_PAGE_BOUNDARY); - if (error != USB_ERR_NORMAL_COMPLETION) + usb_err = urtwn_write_1(sc, R92C_TXPKTBUF_WMAC_LBK_BF_HD, tx_boundary); + if (usb_err != USB_ERR_NORMAL_COMPLETION) return (EIO); - error = urtwn_write_1(sc, R92C_TRXFF_BNDY, R92C_TX_PAGE_BOUNDARY); - if (error != USB_ERR_NORMAL_COMPLETION) + usb_err = urtwn_write_1(sc, R92C_TRXFF_BNDY, tx_boundary); + if (usb_err != USB_ERR_NORMAL_COMPLETION) return (EIO); - error = urtwn_write_1(sc, R92C_TDECTRL + 1, R92C_TX_PAGE_BOUNDARY); - if (error != USB_ERR_NORMAL_COMPLETION) + usb_err = urtwn_write_1(sc, R92C_TDECTRL + 1, tx_boundary); + if (usb_err != USB_ERR_NORMAL_COMPLETION) return (EIO); /* Set queue to USB pipe mapping. */ @@ -2913,72 +2929,21 @@ urtwn_r92c_dma_init(struct urtwn_softc * reg |= R92C_TRXDMA_CTRL_QMAP_HQ_LQ; } else reg |= R92C_TRXDMA_CTRL_QMAP_3EP; - error = urtwn_write_2(sc, R92C_TRXDMA_CTRL, reg); - if (error != USB_ERR_NORMAL_COMPLETION) + usb_err = urtwn_write_2(sc, R92C_TRXDMA_CTRL, reg); + if (usb_err != USB_ERR_NORMAL_COMPLETION) return (EIO); /* Set Tx/Rx transfer page boundary. */ - error = urtwn_write_2(sc, R92C_TRXFF_BNDY + 2, 0x27ff); - if (error != USB_ERR_NORMAL_COMPLETION) - return (EIO); - - return (0); -} - -static int -urtwn_r88e_dma_init(struct urtwn_softc *sc) -{ - struct usb_interface *iface; - uint32_t reg; - usb_error_t error; - int nqueues; - - /* Get Tx queues to USB endpoints mapping. */ - iface = usbd_get_iface(sc->sc_udev, 0); - nqueues = iface->idesc->bNumEndpoints - 1; - if (nqueues == 0) - return (EIO); - - /* Set number of pages for normal priority queue. */ - error = urtwn_write_2(sc, R92C_RQPN_NPQ, 0x000d); - if (error != USB_ERR_NORMAL_COMPLETION) - return (EIO); - error = urtwn_write_4(sc, R92C_RQPN, 0x808e000d); - if (error != USB_ERR_NORMAL_COMPLETION) - return (EIO); - - error = urtwn_write_1(sc, R92C_TXPKTBUF_BCNQ_BDNY, R88E_TX_PAGE_BOUNDARY); - if (error != USB_ERR_NORMAL_COMPLETION) - return (EIO); - error = urtwn_write_1(sc, R92C_TXPKTBUF_MGQ_BDNY, R88E_TX_PAGE_BOUNDARY); - if (error != USB_ERR_NORMAL_COMPLETION) - return (EIO); - error = urtwn_write_1(sc, R92C_TXPKTBUF_WMAC_LBK_BF_HD, R88E_TX_PAGE_BOUNDARY); - if (error != USB_ERR_NORMAL_COMPLETION) - return (EIO); - error = urtwn_write_1(sc, R92C_TRXFF_BNDY, R88E_TX_PAGE_BOUNDARY); - if (error != USB_ERR_NORMAL_COMPLETION) - return (EIO); - error = urtwn_write_1(sc, R92C_TDECTRL + 1, R88E_TX_PAGE_BOUNDARY); - if (error != USB_ERR_NORMAL_COMPLETION) - return (EIO); - - /* Set queue to USB pipe mapping. */ - reg = urtwn_read_2(sc, R92C_TRXDMA_CTRL); - reg &= ~R92C_TRXDMA_CTRL_QMAP_M; - if (nqueues == 1) - reg |= R92C_TRXDMA_CTRL_QMAP_LQ; - else if (nqueues == 2) - reg |= R92C_TRXDMA_CTRL_QMAP_HQ_NQ; - else - reg |= R92C_TRXDMA_CTRL_QMAP_3EP; - error = urtwn_write_2(sc, R92C_TRXDMA_CTRL, reg); - if (error != USB_ERR_NORMAL_COMPLETION) + usb_err = urtwn_write_2(sc, R92C_TRXFF_BNDY + 2, + (sc->chip & URTWN_CHIP_88E) ? 0x23ff : 0x27ff); + if (usb_err != USB_ERR_NORMAL_COMPLETION) return (EIO); - /* Set Tx/Rx transfer page boundary. */ - error = urtwn_write_2(sc, R92C_TRXFF_BNDY + 2, 0x23ff); - if (error != USB_ERR_NORMAL_COMPLETION) + /* Set Tx/Rx transfer page size. */ + usb_err = urtwn_write_1(sc, R92C_PBP, + SM(R92C_PBP_PSRX, R92C_PBP_128) | + SM(R92C_PBP_PSTX, R92C_PBP_128)); + if (usb_err != USB_ERR_NORMAL_COMPLETION) return (EIO); return (0); Modified: user/ngie/make_check/sys/dev/usb/wlan/if_urtwnvar.h ============================================================================== --- user/ngie/make_check/sys/dev/usb/wlan/if_urtwnvar.h Sun Dec 6 21:16:01 2015 (r291909) +++ user/ngie/make_check/sys/dev/usb/wlan/if_urtwnvar.h Sun Dec 6 21:31:09 2015 (r291910) @@ -139,6 +139,7 @@ struct urtwn_softc { device_t sc_dev; struct usb_device *sc_udev; + uint8_t sc_iface_index; int ac2idx[WME_NUM_AC]; u_int sc_flags; #define URTWN_FLAG_CCK_HIPWR 0x01 @@ -155,7 +156,6 @@ struct urtwn_softc { void (*sc_rf_write)(struct urtwn_softc *, int, uint8_t, uint32_t); int (*sc_power_on)(struct urtwn_softc *); - int (*sc_dma_init)(struct urtwn_softc *); uint8_t board_type; uint8_t regulatory; Modified: user/ngie/make_check/sys/i386/i386/pmap.c ============================================================================== --- user/ngie/make_check/sys/i386/i386/pmap.c Sun Dec 6 21:16:01 2015 (r291909) +++ user/ngie/make_check/sys/i386/i386/pmap.c Sun Dec 6 21:31:09 2015 (r291910) @@ -1032,6 +1032,9 @@ pmap_invalidate_page(pmap_t pmap, vm_off sched_unpin(); } +/* 4k PTEs -- Chosen to exceed the total size of Broadwell L2 TLB */ +#define PMAP_INVLPG_THRESHOLD (4 * 1024 * PAGE_SIZE) + void pmap_invalidate_range(pmap_t pmap, vm_offset_t sva, vm_offset_t eva) { @@ -1039,6 +1042,11 @@ pmap_invalidate_range(pmap_t pmap, vm_of vm_offset_t addr; u_int cpuid; + if (eva - sva >= PMAP_INVLPG_THRESHOLD) { + pmap_invalidate_all(pmap); + return; + } + sched_pin(); if (pmap == kernel_pmap || !CPU_CMP(&pmap->pm_active, &all_cpus)) { for (addr = sva; addr < eva; addr += PAGE_SIZE) Modified: user/ngie/make_check/sys/netinet/sctp_input.c ============================================================================== --- user/ngie/make_check/sys/netinet/sctp_input.c Sun Dec 6 21:16:01 2015 (r291909) +++ user/ngie/make_check/sys/netinet/sctp_input.c Sun Dec 6 21:31:09 2015 (r291910) @@ -2103,6 +2103,7 @@ sctp_process_cookie_new(struct mbuf *m, */ stcb = sctp_aloc_assoc(inp, init_src, &error, ntohl(initack_cp->init.initiate_tag), vrf_id, + ntohs(initack_cp->init.num_outbound_streams), (struct thread *)NULL ); if (stcb == NULL) { Modified: user/ngie/make_check/sys/netinet/sctp_output.c ============================================================================== --- user/ngie/make_check/sys/netinet/sctp_output.c Sun Dec 6 21:16:01 2015 (r291909) +++ user/ngie/make_check/sys/netinet/sctp_output.c Sun Dec 6 21:31:09 2015 (r291910) @@ -3652,6 +3652,7 @@ sctp_process_cmsgs_for_init(struct sctp_ #endif stcb->asoc.strmout[i].stream_no = i; stcb->asoc.strmout[i].last_msg_incomplete = 0; + stcb->asoc.strmout[i].state = SCTP_STREAM_OPENING; stcb->asoc.ss_functions.sctp_ss_init_stream(&stcb->asoc.strmout[i], NULL); } } @@ -5841,10 +5842,10 @@ do_a_abort: his_limit = ntohs(init_chk->init.num_inbound_streams); /* choose what I want */ if (asoc != NULL) { - if (asoc->streamoutcnt > inp->sctp_ep.pre_open_stream_count) { + if (asoc->streamoutcnt > asoc->pre_open_streams) { i_want = asoc->streamoutcnt; } else { - i_want = inp->sctp_ep.pre_open_stream_count; + i_want = asoc->pre_open_streams; } } else { i_want = inp->sctp_ep.pre_open_stream_count; @@ -12601,6 +12602,7 @@ sctp_lower_sosend(struct socket *so, } #endif stcb = sctp_aloc_assoc(inp, addr, &error, 0, vrf_id, + inp->sctp_ep.pre_open_stream_count, p ); if (stcb == NULL) { Modified: user/ngie/make_check/sys/netinet/sctp_pcb.c ============================================================================== --- user/ngie/make_check/sys/netinet/sctp_pcb.c Sun Dec 6 21:16:01 2015 (r291909) +++ user/ngie/make_check/sys/netinet/sctp_pcb.c Sun Dec 6 21:31:09 2015 (r291910) @@ -4160,6 +4160,7 @@ try_again: struct sctp_tcb * sctp_aloc_assoc(struct sctp_inpcb *inp, struct sockaddr *firstaddr, int *error, uint32_t override_tag, uint32_t vrf_id, + uint16_t o_streams, struct thread *p ) { @@ -4318,7 +4319,7 @@ sctp_aloc_assoc(struct sctp_inpcb *inp, /* setup back pointer's */ stcb->sctp_ep = inp; stcb->sctp_socket = inp->sctp_socket; - if ((err = sctp_init_asoc(inp, stcb, override_tag, vrf_id))) { + if ((err = sctp_init_asoc(inp, stcb, override_tag, vrf_id, o_streams))) { /* failed */ SCTP_TCB_LOCK_DESTROY(stcb); SCTP_TCB_SEND_LOCK_DESTROY(stcb); Modified: user/ngie/make_check/sys/netinet/sctp_pcb.h ============================================================================== --- user/ngie/make_check/sys/netinet/sctp_pcb.h Sun Dec 6 21:16:01 2015 (r291909) +++ user/ngie/make_check/sys/netinet/sctp_pcb.h Sun Dec 6 21:31:09 2015 (r291910) @@ -584,7 +584,7 @@ void sctp_inpcb_free(struct sctp_inpcb * struct sctp_tcb * sctp_aloc_assoc(struct sctp_inpcb *, struct sockaddr *, - int *, uint32_t, uint32_t, struct thread *); + int *, uint32_t, uint32_t, uint16_t, struct thread *); int sctp_free_assoc(struct sctp_inpcb *, struct sctp_tcb *, int, int); Modified: user/ngie/make_check/sys/netinet/sctp_usrreq.c ============================================================================== --- user/ngie/make_check/sys/netinet/sctp_usrreq.c Sun Dec 6 21:16:01 2015 (r291909) +++ user/ngie/make_check/sys/netinet/sctp_usrreq.c Sun Dec 6 21:31:09 2015 (r291910) @@ -1501,6 +1501,7 @@ sctp_do_connect_x(struct socket *so, str /* We are GOOD to go */ stcb = sctp_aloc_assoc(inp, sa, &error, 0, vrf_id, + inp->sctp_ep.pre_open_stream_count, (struct thread *)p ); if (stcb == NULL) { @@ -6929,7 +6930,7 @@ sctp_connect(struct socket *so, struct s } vrf_id = inp->def_vrf_id; /* We are GOOD to go */ - stcb = sctp_aloc_assoc(inp, addr, &error, 0, vrf_id, p); + stcb = sctp_aloc_assoc(inp, addr, &error, 0, vrf_id, inp->sctp_ep.pre_open_stream_count, p); if (stcb == NULL) { /* Gak! no memory */ goto out_now; Modified: user/ngie/make_check/sys/netinet/sctputil.c ============================================================================== --- user/ngie/make_check/sys/netinet/sctputil.c Sun Dec 6 21:16:01 2015 (r291909) +++ user/ngie/make_check/sys/netinet/sctputil.c Sun Dec 6 21:31:09 2015 (r291910) @@ -938,7 +938,7 @@ sctp_map_assoc_state(int kernel_state) int sctp_init_asoc(struct sctp_inpcb *inp, struct sctp_tcb *stcb, - uint32_t override_tag, uint32_t vrf_id) + uint32_t override_tag, uint32_t vrf_id, uint16_t o_strms) { struct sctp_association *asoc; @@ -1100,7 +1100,7 @@ sctp_init_asoc(struct sctp_inpcb *inp, s * that we request by default. */ asoc->strm_realoutsize = asoc->streamoutcnt = asoc->pre_open_streams = - inp->sctp_ep.pre_open_stream_count; + o_strms; SCTP_MALLOC(asoc->strmout, struct sctp_stream_out *, asoc->streamoutcnt * sizeof(struct sctp_stream_out), SCTP_M_STRMO); Modified: user/ngie/make_check/sys/netinet/sctputil.h ============================================================================== --- user/ngie/make_check/sys/netinet/sctputil.h Sun Dec 6 21:16:01 2015 (r291909) +++ user/ngie/make_check/sys/netinet/sctputil.h Sun Dec 6 21:31:09 2015 (r291910) @@ -83,7 +83,7 @@ uint32_t sctp_select_initial_TSN(struct uint32_t sctp_select_a_tag(struct sctp_inpcb *, uint16_t lport, uint16_t rport, int); -int sctp_init_asoc(struct sctp_inpcb *, struct sctp_tcb *, uint32_t, uint32_t); +int sctp_init_asoc(struct sctp_inpcb *, struct sctp_tcb *, uint32_t, uint32_t, uint16_t); void sctp_fill_random_store(struct sctp_pcb *); Modified: user/ngie/make_check/sys/netinet6/sctp6_usrreq.c ============================================================================== --- user/ngie/make_check/sys/netinet6/sctp6_usrreq.c Sun Dec 6 21:16:01 2015 (r291909) +++ user/ngie/make_check/sys/netinet6/sctp6_usrreq.c Sun Dec 6 21:31:09 2015 (r291910) @@ -946,7 +946,7 @@ sctp6_connect(struct socket *so, struct return (EALREADY); } /* We are GOOD to go */ - stcb = sctp_aloc_assoc(inp, addr, &error, 0, vrf_id, p); + stcb = sctp_aloc_assoc(inp, addr, &error, 0, vrf_id, inp->sctp_ep.pre_open_stream_count, p); SCTP_ASOC_CREATE_UNLOCK(inp); if (stcb == NULL) { /* Gak! no memory */ Modified: user/ngie/make_check/sys/sys/elf_common.h ============================================================================== --- user/ngie/make_check/sys/sys/elf_common.h Sun Dec 6 21:16:01 2015 (r291909) +++ user/ngie/make_check/sys/sys/elf_common.h Sun Dec 6 21:31:09 2015 (r291910) @@ -727,6 +727,11 @@ typedef struct { #define LL_DELAY_LOAD 0x10 #define LL_DELTA 0x20 +/* Values for n_type used in executables. */ +#define NT_FREEBSD_ABI_TAG 1 +#define NT_FREEBSD_NOINIT_TAG 2 +#define NT_FREEBSD_ARCH_TAG 3 + /* Values for n_type. Used in core files. */ #define NT_PRSTATUS 1 /* Process status. */ #define NT_FPREGSET 2 /* Floating point registers. */ Modified: user/ngie/make_check/sys/vm/vm_fault.c ============================================================================== --- user/ngie/make_check/sys/vm/vm_fault.c Sun Dec 6 21:16:01 2015 (r291909) +++ user/ngie/make_check/sys/vm/vm_fault.c Sun Dec 6 21:31:09 2015 (r291910) @@ -839,7 +839,7 @@ vnode_locked: * get rid of the unnecessary page */ vm_page_lock(fs.first_m); - vm_page_free(fs.first_m); + vm_page_remove(fs.first_m); vm_page_unlock(fs.first_m); /* * grab the page and put it into the @@ -848,9 +848,13 @@ vnode_locked: */ if (vm_page_rename(fs.m, fs.first_object, fs.first_pindex)) { + VM_OBJECT_WUNLOCK(fs.first_object); unlock_and_deallocate(&fs); goto RetryFault; } + vm_page_lock(fs.first_m); + vm_page_free(fs.first_m); + vm_page_unlock(fs.first_m); #if VM_NRESERVLEVEL > 0 /* * Rename the reservation.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201512062131.tB6LV9qa062716>