Date: Wed, 4 May 2016 22:57:28 +0000 (UTC) From: Garrett Cooper <ngie@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r299091 - in user/ngie/release-pkg-fix-tests: . etc/mtree include lib/libbluetooth sbin/fsck_msdosfs sbin/hastd share/man/man3 sys/amd64/amd64 sys/arm/allwinner sys/arm/amlogic/aml8726 ... Message-ID: <201605042257.u44MvS2A060667@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: ngie Date: Wed May 4 22:57:28 2016 New Revision: 299091 URL: https://svnweb.freebsd.org/changeset/base/299091 Log: MFhead@r299090 Added: user/ngie/release-pkg-fix-tests/sys/arm/allwinner/if_awg.c - copied unchanged from r299090, head/sys/arm/allwinner/if_awg.c user/ngie/release-pkg-fix-tests/sys/arm/allwinner/if_awgreg.h - copied unchanged from r299090, head/sys/arm/allwinner/if_awgreg.h user/ngie/release-pkg-fix-tests/tests/sys/sys/ - copied from r299090, head/tests/sys/sys/ Modified: user/ngie/release-pkg-fix-tests/Makefile.inc1 user/ngie/release-pkg-fix-tests/etc/mtree/BSD.tests.dist user/ngie/release-pkg-fix-tests/include/bitstring.h user/ngie/release-pkg-fix-tests/lib/libbluetooth/bluetooth.h user/ngie/release-pkg-fix-tests/sbin/fsck_msdosfs/boot.c user/ngie/release-pkg-fix-tests/sbin/hastd/activemap.c user/ngie/release-pkg-fix-tests/share/man/man3/bitstring.3 user/ngie/release-pkg-fix-tests/sys/amd64/amd64/pmap.c user/ngie/release-pkg-fix-tests/sys/arm/allwinner/files.allwinner user/ngie/release-pkg-fix-tests/sys/arm/amlogic/aml8726/aml8726_mmc.c user/ngie/release-pkg-fix-tests/sys/arm/amlogic/aml8726/aml8726_mmc.h user/ngie/release-pkg-fix-tests/sys/arm/amlogic/aml8726/aml8726_sdxc-m8.c user/ngie/release-pkg-fix-tests/sys/arm/amlogic/aml8726/aml8726_sdxc-m8.h user/ngie/release-pkg-fix-tests/sys/arm/arm/cpufunc_asm_arm11.S user/ngie/release-pkg-fix-tests/sys/arm/arm/exception.S user/ngie/release-pkg-fix-tests/sys/arm/arm/generic_timer.c user/ngie/release-pkg-fix-tests/sys/arm/arm/gic.c user/ngie/release-pkg-fix-tests/sys/arm/arm/machdep.c user/ngie/release-pkg-fix-tests/sys/arm/arm/mpcore_timer.c user/ngie/release-pkg-fix-tests/sys/arm/arm/pmap-v4.c user/ngie/release-pkg-fix-tests/sys/arm/arm/pmap-v6.c user/ngie/release-pkg-fix-tests/sys/arm/arm/swtch-v4.S user/ngie/release-pkg-fix-tests/sys/arm/at91/at91_cfata.c user/ngie/release-pkg-fix-tests/sys/arm/at91/at91_machdep.c user/ngie/release-pkg-fix-tests/sys/arm/at91/at91_mci.c user/ngie/release-pkg-fix-tests/sys/arm/at91/at91_reset.S user/ngie/release-pkg-fix-tests/sys/arm/at91/at91reg.h user/ngie/release-pkg-fix-tests/sys/arm/at91/at91sam9260.c user/ngie/release-pkg-fix-tests/sys/arm/at91/if_ate.c user/ngie/release-pkg-fix-tests/sys/arm/at91/if_atereg.h user/ngie/release-pkg-fix-tests/sys/arm/broadcom/bcm2835/bcm2835_audio.c user/ngie/release-pkg-fix-tests/sys/arm/broadcom/bcm2835/bcm2835_dma.c user/ngie/release-pkg-fix-tests/sys/arm/cavium/cns11xx/if_ece.c user/ngie/release-pkg-fix-tests/sys/arm/freescale/imx/imx6_ipu.c user/ngie/release-pkg-fix-tests/sys/arm/freescale/imx/imx6_ssi.c user/ngie/release-pkg-fix-tests/sys/arm/freescale/vybrid/vf_uart.c user/ngie/release-pkg-fix-tests/sys/arm/mv/mpic.c user/ngie/release-pkg-fix-tests/sys/arm/mv/mv_common.c user/ngie/release-pkg-fix-tests/sys/arm/qemu/virt_machdep.c user/ngie/release-pkg-fix-tests/sys/arm/samsung/exynos/exynos5_usb_phy.c user/ngie/release-pkg-fix-tests/sys/arm/ti/omap4/omap4_prcm_clks.c user/ngie/release-pkg-fix-tests/sys/arm/ti/ti_i2c.c user/ngie/release-pkg-fix-tests/sys/arm/ti/ti_pinmux.c user/ngie/release-pkg-fix-tests/sys/arm/ti/ti_prcm.c user/ngie/release-pkg-fix-tests/sys/arm/ti/ti_scm.c user/ngie/release-pkg-fix-tests/sys/arm/ti/ti_sdma.c user/ngie/release-pkg-fix-tests/sys/arm/xilinx/zy7_slcr.c user/ngie/release-pkg-fix-tests/sys/arm/xscale/i8134x/crb_machdep.c user/ngie/release-pkg-fix-tests/sys/arm/xscale/i8134x/i81342reg.h user/ngie/release-pkg-fix-tests/sys/arm/xscale/ixp425/avila_machdep.c user/ngie/release-pkg-fix-tests/sys/arm/xscale/ixp425/cambria_gpio.c user/ngie/release-pkg-fix-tests/sys/arm/xscale/ixp425/ixp425_npe.c user/ngie/release-pkg-fix-tests/sys/arm/xscale/ixp425/ixp425_npereg.h user/ngie/release-pkg-fix-tests/sys/arm/xscale/ixp425/ixp425_qmgr.c user/ngie/release-pkg-fix-tests/sys/arm/xscale/pxa/pxa_machdep.c user/ngie/release-pkg-fix-tests/sys/dev/iwn/if_iwn.c user/ngie/release-pkg-fix-tests/sys/dev/iwn/if_iwnvar.h user/ngie/release-pkg-fix-tests/sys/dev/pms/freebsd/driver/common/lxcommon.h user/ngie/release-pkg-fix-tests/sys/dev/pms/freebsd/driver/common/osenv.h user/ngie/release-pkg-fix-tests/sys/dev/pms/freebsd/driver/ini/src/agtiapi.c user/ngie/release-pkg-fix-tests/sys/dev/pms/freebsd/driver/ini/src/osapi.c user/ngie/release-pkg-fix-tests/sys/dev/usb/usb_device.c user/ngie/release-pkg-fix-tests/sys/dev/wi/if_wi.c user/ngie/release-pkg-fix-tests/sys/dev/xen/blkback/blkback.c user/ngie/release-pkg-fix-tests/sys/dev/xen/timer/timer.c user/ngie/release-pkg-fix-tests/sys/kern/subr_rtc.c user/ngie/release-pkg-fix-tests/sys/kern/subr_unit.c user/ngie/release-pkg-fix-tests/sys/net/flowtable.c user/ngie/release-pkg-fix-tests/sys/net80211/ieee80211_ht.c user/ngie/release-pkg-fix-tests/sys/net80211/ieee80211_var.h user/ngie/release-pkg-fix-tests/sys/sparc64/sbus/sbus.c user/ngie/release-pkg-fix-tests/sys/sparc64/sparc64/intr_machdep.c user/ngie/release-pkg-fix-tests/sys/sys/bitstring.h user/ngie/release-pkg-fix-tests/sys/sys/param.h user/ngie/release-pkg-fix-tests/tests/sys/Makefile user/ngie/release-pkg-fix-tests/tools/tools/locale/etc/charmaps.xml user/ngie/release-pkg-fix-tests/usr.sbin/bluetooth/hccontrol/le.c user/ngie/release-pkg-fix-tests/usr.sbin/extattr/Makefile user/ngie/release-pkg-fix-tests/usr.sbin/extattr/rmextattr.8 user/ngie/release-pkg-fix-tests/usr.sbin/extattr/rmextattr.c user/ngie/release-pkg-fix-tests/usr.sbin/extattr/tests/extattr_test.sh Directory Properties: user/ngie/release-pkg-fix-tests/ (props changed) Modified: user/ngie/release-pkg-fix-tests/Makefile.inc1 ============================================================================== --- user/ngie/release-pkg-fix-tests/Makefile.inc1 Wed May 4 22:34:11 2016 (r299090) +++ user/ngie/release-pkg-fix-tests/Makefile.inc1 Wed May 4 22:57:28 2016 (r299091) @@ -1133,6 +1133,8 @@ buildkernel: .MAKE .PHONY @echo "--------------------------------------------------------------" .endfor +NO_INSTALLEXTRAKERNELS?= yes + # # installkernel, etc. # @@ -1152,7 +1154,7 @@ reinstallkernel reinstallkernel.debug: _ ${CROSSENV} PATH=${TMPPATH} \ ${MAKE} ${IMAKE_INSTALL} KERNEL=${INSTKERNNAME} ${.TARGET:S/kernel//} .endif -.if ${BUILDKERNELS:[#]} > 1 && !defined(NO_INSTALLEXTRAKERNELS) +.if ${BUILDKERNELS:[#]} > 1 && ${NO_INSTALLEXTRAKERNELS} != "yes" .for _kernel in ${BUILDKERNELS:[2..-1]} @echo "--------------------------------------------------------------" @echo ">>> Installing kernel ${_kernel}" @@ -1183,7 +1185,7 @@ distributekernel distributekernel.debug: ${DESTDIR}/${DISTDIR}/kernel.meta .endif .endif -.if ${BUILDKERNELS:[#]} > 1 && !defined(NO_INSTALLEXTRAKERNELS) +.if ${BUILDKERNELS:[#]} > 1 && ${NO_INSTALLEXTRAKERNELS} != "yes" .for _kernel in ${BUILDKERNELS:[2..-1]} .if defined(NO_ROOT) @echo "#${MTREE_MAGIC}" > ${DESTDIR}/${DISTDIR}/kernel.${_kernel}.premeta @@ -1214,7 +1216,7 @@ packagekernel: .PHONY tar cvf - --include '*/*/*.debug' \ @${DESTDIR}/${DISTDIR}/kernel.meta | \ ${XZ_CMD} > ${DESTDIR}/${DISTDIR}/kernel-dbg.txz -.if ${BUILDKERNELS:[#]} > 1 && !defined(NO_INSTALLEXTRAKERNELS) +.if ${BUILDKERNELS:[#]} > 1 && ${NO_INSTALLEXTRAKERNELS} != "yes" .for _kernel in ${BUILDKERNELS:[2..-1]} cd ${DESTDIR}/${DISTDIR}/kernel.${_kernel}; \ tar cvf - --exclude '*.debug' \ @@ -1235,7 +1237,7 @@ packagekernel: .PHONY cd ${DESTDIR}/${DISTDIR}/kernel; \ tar cvf - --include '*/*/*.debug' $$(eval find .) | \ ${XZ_CMD} > ${DESTDIR}/${DISTDIR}/kernel-dbg.txz -.if ${BUILDKERNELS:[#]} > 1 && !defined(NO_INSTALLEXTRAKERNELS) +.if ${BUILDKERNELS:[#]} > 1 && ${NO_INSTALLEXTRAKERNELS} != "yes" .for _kernel in ${BUILDKERNELS:[2..-1]} cd ${DESTDIR}/${DISTDIR}/kernel.${_kernel}; \ tar cvf - --exclude '*.debug' . | \ @@ -1345,7 +1347,7 @@ create-kernel-packages: _pkgbootstrap .P -o ${REPODIR}/$$(pkg -o ABI_FILE=${WSTAGEDIR}/bin/sh config ABI)/${PKG_VERSION} .endfor .endif -.if ${BUILDKERNELS:[#]} > 1 && !defined(NO_INSTALLEXTRAKERNELS) +.if ${BUILDKERNELS:[#]} > 1 && ${NO_INSTALLEXTRAKERNELS} != "yes" .for _kernel in ${BUILDKERNELS:[2..-1]} .if exists(${KSTAGEDIR}/kernel.${_kernel}.meta) .for flavor in "" -debug Modified: user/ngie/release-pkg-fix-tests/etc/mtree/BSD.tests.dist ============================================================================== --- user/ngie/release-pkg-fix-tests/etc/mtree/BSD.tests.dist Wed May 4 22:34:11 2016 (r299090) +++ user/ngie/release-pkg-fix-tests/etc/mtree/BSD.tests.dist Wed May 4 22:57:28 2016 (r299091) @@ -460,6 +460,8 @@ .. posixshm .. + sys + .. vfs .. vm Modified: user/ngie/release-pkg-fix-tests/include/bitstring.h ============================================================================== --- user/ngie/release-pkg-fix-tests/include/bitstring.h Wed May 4 22:34:11 2016 (r299090) +++ user/ngie/release-pkg-fix-tests/include/bitstring.h Wed May 4 22:57:28 2016 (r299091) @@ -29,6 +29,8 @@ #ifndef _BITSTRING_H_ #define _BITSTRING_H_ +#include <stdlib.h> +#include <strings.h> #include <sys/bitstring.h> #endif /* _BITSTRING_H_ */ Modified: user/ngie/release-pkg-fix-tests/lib/libbluetooth/bluetooth.h ============================================================================== --- user/ngie/release-pkg-fix-tests/lib/libbluetooth/bluetooth.h Wed May 4 22:34:11 2016 (r299090) +++ user/ngie/release-pkg-fix-tests/lib/libbluetooth/bluetooth.h Wed May 4 22:57:28 2016 (r299091) @@ -35,14 +35,16 @@ #define _BLUETOOTH_H_ #include <sys/types.h> -#include <sys/bitstring.h> #include <sys/endian.h> #include <sys/ioctl.h> #include <sys/socket.h> #include <sys/uio.h> #include <sys/un.h> + #include <errno.h> #include <netdb.h> +#include <bitstring.h> + #include <netgraph/ng_message.h> #include <netgraph/bluetooth/include/ng_hci.h> #include <netgraph/bluetooth/include/ng_l2cap.h> Modified: user/ngie/release-pkg-fix-tests/sbin/fsck_msdosfs/boot.c ============================================================================== --- user/ngie/release-pkg-fix-tests/sbin/fsck_msdosfs/boot.c Wed May 4 22:34:11 2016 (r299090) +++ user/ngie/release-pkg-fix-tests/sbin/fsck_msdosfs/boot.c Wed May 4 22:57:28 2016 (r299091) @@ -221,7 +221,7 @@ readboot(int dosfs, struct bootblock *bo break; } - if (boot->NumFatEntries < boot->NumClusters) { + if (boot->NumFatEntries < boot->NumClusters - CLUST_FIRST) { pfatal("FAT size too small, %u entries won't fit into %u sectors\n", boot->NumClusters, boot->FATsecs); return FSFATAL; Modified: user/ngie/release-pkg-fix-tests/sbin/hastd/activemap.c ============================================================================== --- user/ngie/release-pkg-fix-tests/sbin/hastd/activemap.c Wed May 4 22:34:11 2016 (r299090) +++ user/ngie/release-pkg-fix-tests/sbin/hastd/activemap.c Wed May 4 22:57:28 2016 (r299091) @@ -162,7 +162,7 @@ activemap_init(struct activemap **ampp, amp->am_extentsize = extentsize; amp->am_extentshift = bitcount32(extentsize - 1); amp->am_nextents = ((mediasize - 1) / extentsize) + 1; - amp->am_mapsize = sizeof(bitstr_t) * bitstr_size(amp->am_nextents); + amp->am_mapsize = bitstr_size(amp->am_nextents); amp->am_diskmapsize = roundup2(amp->am_mapsize, sectorsize); amp->am_ndirty = 0; amp->am_syncoff = -2; @@ -552,7 +552,7 @@ activemap_calc_ondisk_size(uint64_t medi PJDLOG_ASSERT(powerof2(sectorsize)); nextents = ((mediasize - 1) / extentsize) + 1; - mapsize = sizeof(bitstr_t) * bitstr_size(nextents); + mapsize = bitstr_size(nextents); return (roundup2(mapsize, sectorsize)); } Modified: user/ngie/release-pkg-fix-tests/share/man/man3/bitstring.3 ============================================================================== --- user/ngie/release-pkg-fix-tests/share/man/man3/bitstring.3 Wed May 4 22:34:11 2016 (r299090) +++ user/ngie/release-pkg-fix-tests/share/man/man3/bitstring.3 Wed May 4 22:57:28 2016 (r299091) @@ -27,23 +27,54 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" +.\" Copyright (c) 2014 Spectra Logic Corporation +.\" All rights reserved. +.\" +.\" 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, +.\" without modification. +.\" 2. Redistributions in binary form must reproduce at minimum a disclaimer +.\" substantially similar to the "NO WARRANTY" disclaimer below +.\" ("Disclaimer") and any redistribution must be conditioned upon +.\" including a substantially similar Disclaimer requirement for further +.\" binary redistribution. +.\" +.\" NO WARRANTY +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR +.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +.\" HOLDERS OR CONTRIBUTORS BE LIABLE FOR 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 DAMAGES. +.\" .\" @(#)bitstring.3 8.1 (Berkeley) 7/19/93 .\" $FreeBSD$ .\" -.Dd October 17, 2015 +.Dd May 4, 2016 .Dt BITSTRING 3 .Os .Sh NAME .Nm bit_alloc , .Nm bit_clear , .Nm bit_decl , +.Nm bit_ffc , .Nm bit_ffs , +.Nm bit_ffc_at , +.Nm bit_ffs_at , .Nm bit_nclear , .Nm bit_nset , .Nm bit_set , -.Nm bitstr_size , -.Nm bit_test -.Nd bit-string manipulation macros +.Nm bit_test , +.Nm bitstr_size +.Nd bit-string manipulation functions and macros .Sh SYNOPSIS .In bitstring.h .Ft bitstr_t * @@ -57,6 +88,10 @@ .Ft void .Fn bit_ffs "bitstr_t *name" "int nbits" "int *value" .Ft void +.Fn bit_ffc_at "bitstr_t *name" "int start" "int nbits" "int *value" +.Ft void +.Fn bit_ffs_at "bitstr_t *name" "int start" "int nbits" "int *value" +.Ft void .Fn bit_nclear "bitstr_t *name" "int start" "int stop" .Ft void .Fn bit_nset "bitstr_t *name" "int start" "int stop" @@ -69,7 +104,7 @@ .Sh DESCRIPTION These macros operate on strings of bits. .Pp -The macro +The function .Fn bit_alloc returns a pointer of type .Dq Fa "bitstr_t *" @@ -78,23 +113,31 @@ to sufficient space to store bits, or .Dv NULL if no space is available. +If successful, the returned bit string is initialized with all bits cleared. .Pp The macro .Fn bit_decl -allocates sufficient space to store +declares a bit string with sufficient space to store .Fa nbits -bits on the stack. +bits. +.Fn bit_decl +may be used to include statically sized bit strings in structure +definitions or to create bit strings on the stack. +Users of this macro are responsible for initialization of the bit string, +typically via a global initialization of the containing struct or use of the +.Fn bit_nset +or +.Fn bin_nclear +functions. .Pp The macro .Fn bitstr_size -returns the number of elements of type -.Fa bitstr_t -necessary to store +returns the number of bytes necessary to store .Fa nbits bits. This is useful for copying bit strings. .Pp -The macros +The functions .Fn bit_clear and .Fn bit_set @@ -107,7 +150,7 @@ The .Fn bit_nset and .Fn bit_nclear -macros +functions set or clear the zero-based numbered bits from .Fa start through @@ -117,16 +160,28 @@ in the bit string .Pp The .Fn bit_test -macro +function evaluates to non-zero if the zero-based numbered bit .Fa bit of bit string .Fa name is set, and zero otherwise. .Pp +The function +.Fn bit_ffc +stores in the location referenced by +.Fa value +the zero-based number of the first bit not set in the array of +.Fa nbits +bits referenced by +.Fa name . +If all bits are set, the location referenced by +.Fa value +is set to \-1. +.Pp The .Fn bit_ffs -macro +function stores in the location referenced by .Fa value the zero-based number of the first bit set in the array of @@ -137,19 +192,40 @@ If no bits are set, the location referen .Fa value is set to \-1. .Pp -The macro -.Fn bit_ffc +The function +.Fn bit_ffc_at stores in the location referenced by .Fa value the zero-based number of the first bit not set in the array of .Fa nbits bits referenced by -.Fa name . -If all bits are set, the location referenced by +.Fa name , +at or after the zero-based bit index +.Fa start . +If all bits at or after +.Fa start +are set, the location referenced by +.Fa value +is set to \-1. +.Pp +The +.Fn bit_ffs_at +function +stores in the location referenced by +.Fa value +the zero-based number of the first bit set in the array of +.Fa nbits +bits referenced by +.Fa name , +at or after the zero-based bit index +.Fa start . +If no bits are set after +.Fa start , +the location referenced by .Fa value is set to \-1. .Pp -The arguments to these macros are evaluated only once and may safely +The arguments in bit string macros are evaluated only once and may safely have side effects. .Sh EXAMPLES .Bd -literal -offset indent Modified: user/ngie/release-pkg-fix-tests/sys/amd64/amd64/pmap.c ============================================================================== --- user/ngie/release-pkg-fix-tests/sys/amd64/amd64/pmap.c Wed May 4 22:34:11 2016 (r299090) +++ user/ngie/release-pkg-fix-tests/sys/amd64/amd64/pmap.c Wed May 4 22:57:28 2016 (r299091) @@ -4407,6 +4407,12 @@ pmap_enter_pde(pmap_t pmap, vm_offset_t lockp)) { SLIST_INIT(&free); if (pmap_unwire_ptp(pmap, va, mpde, &free)) { + /* + * Although "va" is not mapped, paging- + * structure caches could nonetheless have + * entries that refer to the freed page table + * pages. Invalidate those entries. + */ pmap_invalidate_page(pmap, va); pmap_free_zero_pages(&free); } @@ -4584,6 +4590,12 @@ pmap_enter_quick_locked(pmap_t pmap, vm_ if (mpte != NULL) { SLIST_INIT(&free); if (pmap_unwire_ptp(pmap, va, mpte, &free)) { + /* + * Although "va" is not mapped, paging- + * structure caches could nonetheless have + * entries that refer to the freed page table + * pages. Invalidate those entries. + */ pmap_invalidate_page(pmap, va); pmap_free_zero_pages(&free); } @@ -4967,6 +4979,14 @@ pmap_copy(pmap_t dst_pmap, pmap_t src_pm SLIST_INIT(&free); if (pmap_unwire_ptp(dst_pmap, addr, dstmpte, &free)) { + /* + * Although "addr" is not + * mapped, paging-structure + * caches could nonetheless + * have entries that refer to + * the freed page table pages. + * Invalidate those entries. + */ pmap_invalidate_page(dst_pmap, addr); pmap_free_zero_pages(&free); @@ -5219,7 +5239,7 @@ pmap_page_is_mapped(vm_page_t m) * Destroy all managed, non-wired mappings in the given user-space * pmap. This pmap cannot be active on any processor besides the * caller. - * + * * This function cannot be applied to the kernel pmap. Moreover, it * is not intended for general use. It is only to be used during * process termination. Consequently, it can be implemented in ways Modified: user/ngie/release-pkg-fix-tests/sys/arm/allwinner/files.allwinner ============================================================================== --- user/ngie/release-pkg-fix-tests/sys/arm/allwinner/files.allwinner Wed May 4 22:34:11 2016 (r299090) +++ user/ngie/release-pkg-fix-tests/sys/arm/allwinner/files.allwinner Wed May 4 22:57:28 2016 (r299091) @@ -18,6 +18,7 @@ arm/allwinner/a20/a20_cpu_cfg.c standar arm/allwinner/allwinner_machdep.c standard arm/allwinner/aw_mp.c optional smp arm/allwinner/axp209.c optional axp209 +arm/allwinner/if_awg.c optional awg arm/allwinner/if_emac.c optional emac arm/allwinner/sunxi_dma_if.m standard dev/iicbus/twsi/a10_twsi.c optional twsi Copied: user/ngie/release-pkg-fix-tests/sys/arm/allwinner/if_awg.c (from r299090, head/sys/arm/allwinner/if_awg.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/ngie/release-pkg-fix-tests/sys/arm/allwinner/if_awg.c Wed May 4 22:57:28 2016 (r299091, copy of r299090, head/sys/arm/allwinner/if_awg.c) @@ -0,0 +1,1418 @@ +/*- + * Copyright (c) 2016 Jared McNeill <jmcneill@invisible.ca> + * All rights reserved. + * + * 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 ``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 BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +/* + * Allwinner Gigabit Ethernet MAC (EMAC) controller + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <sys/param.h> +#include <sys/systm.h> +#include <sys/bus.h> +#include <sys/rman.h> +#include <sys/kernel.h> +#include <sys/endian.h> +#include <sys/mbuf.h> +#include <sys/socket.h> +#include <sys/sockio.h> +#include <sys/module.h> +#include <sys/taskqueue.h> + +#include <net/bpf.h> +#include <net/if.h> +#include <net/ethernet.h> +#include <net/if_dl.h> +#include <net/if_media.h> +#include <net/if_types.h> +#include <net/if_var.h> + +#include <machine/bus.h> + +#include <dev/ofw/ofw_bus.h> +#include <dev/ofw/ofw_bus_subr.h> + +#include <arm/allwinner/if_awgreg.h> +#include <dev/mii/mii.h> +#include <dev/mii/miivar.h> + +#include <dev/extres/clk/clk.h> +#include <dev/extres/hwreset/hwreset.h> +#include <dev/extres/regulator/regulator.h> + +#include "miibus_if.h" + +#define RD4(sc, reg) bus_read_4((sc)->res[0], (reg)) +#define WR4(sc, reg, val) bus_write_4((sc)->res[0], (reg), (val)) + +#define AWG_LOCK(sc) mtx_lock(&(sc)->mtx) +#define AWG_UNLOCK(sc) mtx_unlock(&(sc)->mtx); +#define AWG_ASSERT_LOCKED(sc) mtx_assert(&(sc)->mtx, MA_OWNED) +#define AWG_ASSERT_UNLOCKED(sc) mtx_assert(&(sc)->mtx, MA_NOTOWNED) + +#define DESC_ALIGN 4 +#define TX_DESC_COUNT 256 +#define TX_DESC_SIZE (sizeof(struct emac_desc) * TX_DESC_COUNT) +#define RX_DESC_COUNT 256 +#define RX_DESC_SIZE (sizeof(struct emac_desc) * RX_DESC_COUNT) + +#define DESC_OFF(n) ((n) * sizeof(struct emac_desc)) +#define TX_NEXT(n) (((n) + 1) & (TX_DESC_COUNT - 1)) +#define TX_SKIP(n, o) (((n) + (o)) & (TX_DESC_COUNT - 1)) +#define RX_NEXT(n) (((n) + 1) & (RX_DESC_COUNT - 1)) + +#define TX_MAX_SEGS 10 + +#define SOFT_RST_RETRY 1000 +#define MII_BUSY_RETRY 1000 +#define MDIO_FREQ 2500000 + +#define BURST_LEN_DEFAULT 8 +#define RX_TX_PRI_DEFAULT 0 +#define PAUSE_TIME_DEFAULT 0x400 +#define TX_INTERVAL_DEFAULT 64 + +/* Burst length of RX and TX DMA transfers */ +static int awg_burst_len = BURST_LEN_DEFAULT; +TUNABLE_INT("hw.awg.burst_len", &awg_burst_len); + +/* RX / TX DMA priority. If 1, RX DMA has priority over TX DMA. */ +static int awg_rx_tx_pri = RX_TX_PRI_DEFAULT; +TUNABLE_INT("hw.awg.rx_tx_pri", &awg_rx_tx_pri); + +/* Pause time field in the transmitted control frame */ +static int awg_pause_time = PAUSE_TIME_DEFAULT; +TUNABLE_INT("hw.awg.pause_time", &awg_pause_time); + +/* Request a TX interrupt every <n> descriptors */ +static int awg_tx_interval = TX_INTERVAL_DEFAULT; +TUNABLE_INT("hw.awg.tx_interval", &awg_tx_interval); + +static struct ofw_compat_data compat_data[] = { + { "allwinner,sun8i-a83t-emac", 1 }, + { NULL, 0 } +}; + +struct awg_bufmap { + bus_dmamap_t map; + struct mbuf *mbuf; +}; + +struct awg_txring { + bus_dma_tag_t desc_tag; + bus_dmamap_t desc_map; + struct emac_desc *desc_ring; + bus_addr_t desc_ring_paddr; + bus_dma_tag_t buf_tag; + struct awg_bufmap buf_map[TX_DESC_COUNT]; + u_int cur, next, queued; +}; + +struct awg_rxring { + bus_dma_tag_t desc_tag; + bus_dmamap_t desc_map; + struct emac_desc *desc_ring; + bus_addr_t desc_ring_paddr; + bus_dma_tag_t buf_tag; + struct awg_bufmap buf_map[RX_DESC_COUNT]; + u_int cur; +}; + +struct awg_softc { + struct resource *res[2]; + struct mtx mtx; + if_t ifp; + device_t miibus; + struct callout stat_ch; + struct task link_task; + void *ih; + u_int mdc_div_ratio_m; + int link; + int if_flags; + + struct awg_txring tx; + struct awg_rxring rx; +}; + +static struct resource_spec awg_spec[] = { + { SYS_RES_MEMORY, 0, RF_ACTIVE }, + { SYS_RES_IRQ, 0, RF_ACTIVE }, + { -1, 0 } +}; + +static int +awg_miibus_readreg(device_t dev, int phy, int reg) +{ + struct awg_softc *sc; + int retry, val; + + sc = device_get_softc(dev); + val = 0; + + WR4(sc, EMAC_MII_CMD, + (sc->mdc_div_ratio_m << MDC_DIV_RATIO_M_SHIFT) | + (phy << PHY_ADDR_SHIFT) | + (reg << PHY_REG_ADDR_SHIFT) | + MII_BUSY); + for (retry = MII_BUSY_RETRY; retry > 0; retry--) { + if ((RD4(sc, EMAC_MII_CMD) & MII_BUSY) == 0) { + val = RD4(sc, EMAC_MII_DATA); + break; + } + DELAY(10); + } + + if (retry == 0) + device_printf(dev, "phy read timeout, phy=%d reg=%d\n", + phy, reg); + + return (val); +} + +static int +awg_miibus_writereg(device_t dev, int phy, int reg, int val) +{ + struct awg_softc *sc; + int retry; + + sc = device_get_softc(dev); + + WR4(sc, EMAC_MII_DATA, val); + WR4(sc, EMAC_MII_CMD, + (sc->mdc_div_ratio_m << MDC_DIV_RATIO_M_SHIFT) | + (phy << PHY_ADDR_SHIFT) | + (reg << PHY_REG_ADDR_SHIFT) | + MII_WR | MII_BUSY); + for (retry = MII_BUSY_RETRY; retry > 0; retry--) { + if ((RD4(sc, EMAC_MII_CMD) & MII_BUSY) == 0) + break; + DELAY(10); + } + + if (retry == 0) + device_printf(dev, "phy write timeout, phy=%d reg=%d\n", + phy, reg); + + return (0); +} + +static void +awg_update_link_locked(struct awg_softc *sc) +{ + struct mii_data *mii; + uint32_t val; + + AWG_ASSERT_LOCKED(sc); + + if ((if_getdrvflags(sc->ifp) & IFF_DRV_RUNNING) == 0) + return; + mii = device_get_softc(sc->miibus); + + if ((mii->mii_media_status & (IFM_ACTIVE | IFM_AVALID)) == + (IFM_ACTIVE | IFM_AVALID)) { + switch (IFM_SUBTYPE(mii->mii_media_active)) { + case IFM_1000_T: + case IFM_1000_SX: + case IFM_100_TX: + case IFM_10_T: + sc->link = 1; + break; + default: + sc->link = 0; + break; + } + } else + sc->link = 0; + + if (sc->link == 0) + return; + + val = RD4(sc, EMAC_BASIC_CTL_0); + val &= ~(BASIC_CTL_SPEED | BASIC_CTL_DUPLEX); + + if (IFM_SUBTYPE(mii->mii_media_active) == IFM_1000_T || + IFM_SUBTYPE(mii->mii_media_active) == IFM_1000_SX) + val |= BASIC_CTL_SPEED_1000 << BASIC_CTL_SPEED_SHIFT; + else if (IFM_SUBTYPE(mii->mii_media_active) == IFM_100_TX) + val |= BASIC_CTL_SPEED_100 << BASIC_CTL_SPEED_SHIFT; + else + val |= BASIC_CTL_SPEED_10 << BASIC_CTL_SPEED_SHIFT; + + if ((IFM_OPTIONS(mii->mii_media_active) & IFM_FDX) != 0) + val |= BASIC_CTL_DUPLEX; + + WR4(sc, EMAC_BASIC_CTL_0, val); + + val = RD4(sc, EMAC_RX_CTL_0); + val &= ~RX_FLOW_CTL_EN; + if ((IFM_OPTIONS(mii->mii_media_active) & IFM_ETH_RXPAUSE) != 0) + val |= RX_FLOW_CTL_EN; + WR4(sc, EMAC_RX_CTL_0, val); + + val = RD4(sc, EMAC_TX_FLOW_CTL); + val &= ~(PAUSE_TIME|TX_FLOW_CTL_EN); + if ((IFM_OPTIONS(mii->mii_media_active) & IFM_ETH_TXPAUSE) != 0) + val |= TX_FLOW_CTL_EN; + if ((IFM_OPTIONS(mii->mii_media_active) & IFM_FDX) != 0) + val |= awg_pause_time << PAUSE_TIME_SHIFT; + WR4(sc, EMAC_TX_FLOW_CTL, val); +} + +static void +awg_link_task(void *arg, int pending) +{ + struct awg_softc *sc; + + sc = arg; + + AWG_LOCK(sc); + awg_update_link_locked(sc); + AWG_UNLOCK(sc); +} + +static void +awg_miibus_statchg(device_t dev) +{ + struct awg_softc *sc; + + sc = device_get_softc(dev); + + taskqueue_enqueue(taskqueue_swi, &sc->link_task); +} + +static void +awg_media_status(if_t ifp, struct ifmediareq *ifmr) +{ + struct awg_softc *sc; + struct mii_data *mii; + + sc = if_getsoftc(ifp); + mii = device_get_softc(sc->miibus); + + AWG_LOCK(sc); + mii_pollstat(mii); + ifmr->ifm_active = mii->mii_media_active; + ifmr->ifm_status = mii->mii_media_status; + AWG_UNLOCK(sc); +} + +static int +awg_media_change(if_t ifp) +{ + struct awg_softc *sc; + struct mii_data *mii; + int error; + + sc = if_getsoftc(ifp); + mii = device_get_softc(sc->miibus); + + AWG_LOCK(sc); + error = mii_mediachg(mii); + AWG_UNLOCK(sc); + + return (error); +} + +static void +awg_setup_txdesc(struct awg_softc *sc, int index, int flags, bus_addr_t paddr, + u_int len) +{ + uint32_t status, size; + + if (paddr == 0 || len == 0) { + status = 0; + size = 0; + --sc->tx.queued; + } else { + status = TX_DESC_CTL; + size = flags | len; + if ((index & (awg_tx_interval - 1)) == 0) + size |= htole32(TX_INT_CTL); + ++sc->tx.queued; + } + + sc->tx.desc_ring[index].addr = htole32((uint32_t)paddr); + sc->tx.desc_ring[index].size = htole32(size); + sc->tx.desc_ring[index].status = htole32(status); +} + +static int +awg_setup_txbuf(struct awg_softc *sc, int index, struct mbuf **mp) +{ + bus_dma_segment_t segs[TX_MAX_SEGS]; + int error, nsegs, cur, i, flags; + u_int csum_flags; + struct mbuf *m; + + m = *mp; + error = bus_dmamap_load_mbuf_sg(sc->tx.buf_tag, + sc->tx.buf_map[index].map, m, segs, &nsegs, BUS_DMA_NOWAIT); + if (error == EFBIG) { + m = m_collapse(m, M_NOWAIT, TX_MAX_SEGS); + if (m == NULL) + return (0); + *mp = m; + error = bus_dmamap_load_mbuf_sg(sc->tx.buf_tag, + sc->tx.buf_map[index].map, m, segs, &nsegs, BUS_DMA_NOWAIT); + } + if (error != 0) + return (0); + + bus_dmamap_sync(sc->tx.buf_tag, sc->tx.buf_map[index].map, + BUS_DMASYNC_PREWRITE); + + flags = TX_FIR_DESC; + if ((m->m_pkthdr.csum_flags & CSUM_IP) != 0) { + if ((m->m_pkthdr.csum_flags & (CSUM_TCP|CSUM_UDP)) != 0) + csum_flags = TX_CHECKSUM_CTL_FULL; + else + csum_flags = TX_CHECKSUM_CTL_IP; + flags |= (csum_flags << TX_CHECKSUM_CTL_SHIFT); + } + + for (cur = index, i = 0; i < nsegs; i++) { + sc->tx.buf_map[cur].mbuf = (i == 0 ? m : NULL); + if (i == nsegs - 1) + flags |= TX_LAST_DESC; + awg_setup_txdesc(sc, cur, flags, segs[i].ds_addr, + segs[i].ds_len); + flags &= ~TX_FIR_DESC; + cur = TX_NEXT(cur); + } + + return (nsegs); +} + +static void +awg_setup_rxdesc(struct awg_softc *sc, int index, bus_addr_t paddr) +{ + uint32_t status, size; + + status = RX_DESC_CTL; + size = MCLBYTES - 1; + + sc->rx.desc_ring[index].addr = htole32((uint32_t)paddr); + sc->rx.desc_ring[index].size = htole32(size); + sc->rx.desc_ring[index].next = + htole32(sc->rx.desc_ring_paddr + DESC_OFF(RX_NEXT(index))); + sc->rx.desc_ring[index].status = htole32(status); +} + +static int +awg_setup_rxbuf(struct awg_softc *sc, int index, struct mbuf *m) +{ + bus_dma_segment_t seg; + int error, nsegs; + + m_adj(m, ETHER_ALIGN); + + error = bus_dmamap_load_mbuf_sg(sc->rx.buf_tag, + sc->rx.buf_map[index].map, m, &seg, &nsegs, 0); + if (error != 0) + return (error); + + bus_dmamap_sync(sc->rx.buf_tag, sc->rx.buf_map[index].map, + BUS_DMASYNC_PREREAD); + + sc->rx.buf_map[index].mbuf = m; + awg_setup_rxdesc(sc, index, seg.ds_addr); + + return (0); +} + +static struct mbuf * +awg_alloc_mbufcl(struct awg_softc *sc) +{ + struct mbuf *m; + + m = m_getcl(M_NOWAIT, MT_DATA, M_PKTHDR); + if (m != NULL) + m->m_pkthdr.len = m->m_len = m->m_ext.ext_size; + + return (m); +} + +static void +awg_start_locked(struct awg_softc *sc) +{ + struct mbuf *m; + uint32_t val; + if_t ifp; + int cnt, nsegs; + + AWG_ASSERT_LOCKED(sc); + + if (!sc->link) + return; + + ifp = sc->ifp; + + if ((if_getdrvflags(ifp) & (IFF_DRV_RUNNING|IFF_DRV_OACTIVE)) != + IFF_DRV_RUNNING) + return; + + for (cnt = 0; ; cnt++) { + if (sc->tx.queued >= TX_DESC_COUNT - TX_MAX_SEGS) { + if_setdrvflagbits(ifp, IFF_DRV_OACTIVE, 0); + break; + } + + m = if_dequeue(ifp); + if (m == NULL) + break; + + nsegs = awg_setup_txbuf(sc, sc->tx.cur, &m); + if (nsegs == 0) { + if_sendq_prepend(ifp, m); + break; + } + if_bpfmtap(ifp, m); + sc->tx.cur = TX_SKIP(sc->tx.cur, nsegs); + } + + if (cnt != 0) { + bus_dmamap_sync(sc->tx.desc_tag, sc->tx.desc_map, + BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE); + + /* Start and run TX DMA */ + val = RD4(sc, EMAC_TX_CTL_1); + WR4(sc, EMAC_TX_CTL_1, val | TX_DMA_START); + } +} + +static void +awg_start(if_t ifp) +{ + struct awg_softc *sc; + + sc = if_getsoftc(ifp); + + AWG_LOCK(sc); + awg_start_locked(sc); + AWG_UNLOCK(sc); +} + +static void +awg_tick(void *softc) +{ + struct awg_softc *sc; + struct mii_data *mii; + if_t ifp; + int link; + + sc = softc; + ifp = sc->ifp; + mii = device_get_softc(sc->miibus); + + AWG_ASSERT_LOCKED(sc); + + if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0) + return; + + link = sc->link; + mii_tick(mii); + if (sc->link && !link) + awg_start_locked(sc); + + callout_reset(&sc->stat_ch, hz, awg_tick, sc); +} + +/* Bit Reversal - http://aggregate.org/MAGIC/#Bit%20Reversal */ +static uint32_t +bitrev32(uint32_t x) +{ + x = (((x & 0xaaaaaaaa) >> 1) | ((x & 0x55555555) << 1)); + x = (((x & 0xcccccccc) >> 2) | ((x & 0x33333333) << 2)); + x = (((x & 0xf0f0f0f0) >> 4) | ((x & 0x0f0f0f0f) << 4)); + x = (((x & 0xff00ff00) >> 8) | ((x & 0x00ff00ff) << 8)); + + return (x >> 16) | (x << 16); +} + +static void +awg_setup_rxfilter(struct awg_softc *sc) +{ + uint32_t val, crc, hashreg, hashbit, hash[2], machi, maclo; + int mc_count, mcnt, i; + uint8_t *eaddr, *mta; + if_t ifp; + + AWG_ASSERT_LOCKED(sc); + + ifp = sc->ifp; + val = 0; + hash[0] = hash[1] = 0; + + mc_count = if_multiaddr_count(ifp, -1); + + if (if_getflags(ifp) & IFF_PROMISC) + val |= DIS_ADDR_FILTER; + else if (if_getflags(ifp) & IFF_ALLMULTI) { + val |= RX_ALL_MULTICAST; + hash[0] = hash[1] = ~0; + } else if (mc_count > 0) { + val |= HASH_MULTICAST; + + mta = malloc(sizeof(unsigned char) * ETHER_ADDR_LEN * mc_count, + M_DEVBUF, M_NOWAIT); + if (mta == NULL) { + if_printf(ifp, + "failed to allocate temporary multicast list\n"); + return; + } + + if_multiaddr_array(ifp, mta, &mcnt, mc_count); + for (i = 0; i < mcnt; i++) { + crc = ether_crc32_le(mta + (i * ETHER_ADDR_LEN), + ETHER_ADDR_LEN) & 0x7f; + crc = bitrev32(~crc) >> 26; + hashreg = (crc >> 5); + hashbit = (crc & 0x1f); + hash[hashreg] |= (1 << hashbit); + } + + free(mta, M_DEVBUF); + } *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201605042257.u44MvS2A060667>